summaryrefslogblamecommitdiff
path: root/npc/082-3/poppet.txt
blob: 84e760cf6e332128d35c1986158dbb4055a78649 (plain) (tree)
1
2
3
4
5
6
7






                                         




                                                                             

                                                                     

      

                            
                                           






                                                       

                      







                                                                                                                                                                      


                           
              
           




                                                                                                                                                                                     










































































                                                                                                                                                         

              
                            

                      

          














                                                                          

                                   
                          
                         





                                
                           
                                

                               




                                
                              








                                
                          
                                 
                        



                                   



                            






                               






                               





                      





                                                                                 




                                                                                                                            

                

                           


        
// TMW Script.
// Author:
//    Jesusalva
// Notes:
//    Christmas 2021 - Poppet's Realm DLC

082-3,99,86,0	script	Poppet	NPC190,{
    function spawn;
    if (mobcount("082-3", "all")) {
        npctalk3 l("Monsters remaining: %s", fnum(mobcount("082-3", "all")));
        end;
    }
    mesn;
    mesq l("Uh, how did you get here? Anyway, welcome to my realm.");
    do
    {
    select
        l("Thanks, poppy."),
        rif(X21_POPPET(), l("I'm bored.")),
        l("Uh... Poppet's Realm? What's that?"),
        l("Through a weird corridor. How do I leave?");
    mes "";
    switch (@menu) {
    case 1:
        close;
    case 2:
        goto L_Summon;
    case 3:
        mesn;
        mesq l("You see, all of the most powerful beings of The Mana World can create their own realm, a place for their leisure.");
        next;
        mesn;
        mesq l("But in this side of the æther, where existence itself is challenged, time is hardly important.");
        next;
        mesn;
        mesq l("So my realm doesn't exist yet. Or perhaps it existed in the past, and is no longer the case. Whatever the case be, you're here, and you're welcome.");
        if (!X21_POPPET())
            X21_DOPOPPET();
        next;
        break;
    case 4:
        mesn;
        mesq l("Hm, perhaps a wanderer of the Mirror Lake? I've heard rumors of a place which connected anything to everything dubbed like that.");
        next;
        mesn;
        mesq l("...North of here is an exit. It is not connected to anywhere, just an infinite, never ending corridor, but if you ##Bcame##b from anywhere, it might as well work.");
        next;
        break;
    }
    } while (true);

L_Summon:
    if (.tick >= gettimetick(2)) {
        mesn;
        mesq l("I'm still recovering myself, please wait %s before trying again.", FuzzyTime(.tick));
        close;
    }
    mesn;
    mesq l("I can summon some creatures for you, and all of them drop %s at a decent rate.", getitemlink(XmasTicket));
    next;
    mesn;
    mesq l("But I can't keep doing that too much, and it is dangerous if you're alone, so make sure you have company. It is always more fun in groups.");
    if (getmapusers("082-3") < 3 && !is_evtc()) {
        mesc l("There must be at least %d players to start.", 3), 1;
        close;
    }
    next;
    select
        l("Hm, nevermind."),
        l("Begin easy mode [10 min]"),
        l("Begin normal mode [15 min]"),
        l("Begin hard mode [20 min]"),
        l("Begin Polish Warmachine mode [30 min]"),
        rif(gettime(GETTIME_DAYOFYEAR) >= 357, l("Begin Nuclear Winter mode [45 min]"));
    mes "";
    if (.tick >= gettimetick(2)) { closeclientdialog; close; }
    switch (@menu) {
    case 2:
        .diff = 1;
        .tick = gettimetick(2) + 600;
        monster("082-3",  52,  48, "Alpha", UndeadWitch, 1);
        monster("082-3", 155,  40, "Beta",  UndeadWitch, 1);
        monster("082-3",  45, 155, "Gamma", UndeadWitch, 1);
        monster("082-3", 157, 157, "Delta", UndeadWitch, 1);
        monster("082-3",  95,  85, "Omega", Scythe, 1);
        break;
    case 3:
        .diff = 2;
        .tick = gettimetick(2) + 900;
        monster("082-3",  52,  48, "Alpha", Yeti, 1);
        monster("082-3", 155,  40, "Beta",  Yeti, 1);
        monster("082-3",  45, 155, "Gamma", Yeti, 1);
        monster("082-3", 157, 157, "Delta", Yeti, 1);
        monster("082-3",  95,  85, "Omega", Yeti, 1);
        break;
    case 4:
        .diff = 3;
        .tick = gettimetick(2) + 1500;
        monster("082-3",  52,  48, "Alpha", SnowmanBoss, 1);
        monster("082-3", 155,  40, "Beta",  SnowmanBoss, 1);
        monster("082-3",  45, 155, "Gamma", SnowmanBoss, 1);
        monster("082-3", 157, 157, "Delta", SnowmanBoss, 1);
        monster("082-3",  95,  85, "Omega", SnowmanBoss, 1);
        break;
    case 5:
        .diff = 4;
        .tick = gettimetick(2) + 1800;
        monster("082-3",  52,  48, "Alpha", Luvia, 1);
        monster("082-3", 155,  40, "Beta",  Luvia, 1);
        monster("082-3",  45, 155, "Gamma", Luvia, 1);
        monster("082-3", 157, 157, "Delta", Luvia, 1);
        monster("082-3",  95,  85, "Omega", KageGolem, 1); // SUSAN? Tormenta?
        break;
    case 6:
        .diff = 5;
        .tick = gettimetick(2) + 2700;
        monster("082-3",  52,  48, "Alpha", Reaper, 1);
        monster("082-3", 155,  40, "Beta",  Tormenta, 1);
        monster("082-3",  45, 155, "Gamma", Luvia, 1);
        monster("082-3", 157, 157, "Delta", GreatDragon, 1);
        monster("082-3",  95,  85, "Omega", SUSAN, 1);
        break;
    }
    $@X21_POPPYDIFF = .diff;
    initnpctimer;
    closeclientdialog;
    close;

OnTimer1000:   // Initial wave
OnTimer90000:  // 1.5 min
OnTimer180000: // 3.0 min
OnTimer300000: // 5.0 min
OnTimer360000: // 6.0 min
OnTimer420000: // 7.0 min
OnTimer480000: // 8.0 min (final)
    /* Summon next wave */
    .@msg$ = any("I'm having fun, what about you?",
                 "I'm spawning more monsters, watch out.",
                 "Lemme see if I remember how to summon more monsters...",
                 "Here, more practice dummies, have fun.");
    mapannounce "082-3", "Poppet : "+.@msg$, 0;
    switch (.diff) {
    case 1: // Easy
        spawn(Bandit, 7);
        spawn(CrotcherScorpion, 7);
        spawn(Archant, 5);
        spawn(Moggun, 3);
        spawn(BlackScorpion, 3);
        spawn(Snake, 2);
        break;
    case 2: // Normal
        spawn(FeyElement, 1);
        spawn(CandiedSlime, 8);
        spawn(RedSlime, 9);
        spawn(AngrySeaSlime, 6);
        spawn(LadySkeleton, 4);
        spawn(Skeleton, 4);
        spawn(UndeadWitch, 2);
        break;
    case 3: // Hard
        spawn(LadySkeleton, 10);
        spawn(Skeleton, 10);
        spawn(UndeadWitch, 8);
        spawn(Spider, 5);
        spawn(MountainSnake, 5);
        spawn(LavaSlime, 3);
        spawn(GrassSnake, 3);
        spawn(Nutcracker, 3);
        spawn(Yeti, 2);
        spawn(Thug, 2);
        break;
    case 4: // WarriorWorld
        spawn(RedBone, 9);
        spawn(SeaSlimeMother, 3);
        spawn(Wight, 9);
        spawn(GreenSlimeMother, 3);
        spawn(IceElement, 5);
        spawn(Yeti, 3);
        spawn(Zombie, 4);
        spawn(Terranite, 5);
        spawn(Fallen, 5);
        spawn(Thug, 4);
        spawn(Stalker, 3);
        spawn(Swashbuckler, 3);
        spawn(Grenadier, 2);
        spawn(JackO, 1);
        break;
    default:
    case 5: // Gumi
        spawn(Anne, 10);
        spawn(JackO, 8);
        spawn(ManaGuardian, 6);
        spawn(Tengu, 4);
        spawn(Sasquatch, 4);
        spawn(ManaSlayer, 4);
        spawn(DoomGolem, 3);
        spawn(Enchanter, 3);
        break;
    }
    end;

function spawn {
    .@mob = getarg(0);
    .@amo = getarg(1) + max(getmapusers("082-3")-1, 0);
    areamonster("082-3",  23,  22,  67,  65, strmobinfo(1, .@mob), .@mob, .@amo);
    areamonster("082-3", 130,  20, 180,  64, strmobinfo(1, .@mob), .@mob, .@amo);
    areamonster("082-3",  20, 127,  65, 175, strmobinfo(1, .@mob), .@mob, .@amo);
    areamonster("082-3", 136, 135, 180, 180, strmobinfo(1, .@mob), .@mob, .@amo);
    areamonster("082-3",  55,  50, 134, 128, strmobinfo(1, .@mob), .@mob, .@amo);
    // Global
    areamonster("082-3",  20,  20, 180, 180, strmobinfo(1, GreenSlime), GreenSlime, 1 + (.diff * getmapusers("082-3") / 2));
    return;
}

OnInit:
    .distance=5;
    .diff = 0;
    .tick = gettimetick(2);
    end;
}