diff options
Diffstat (limited to 'npc/082-3/poppet.txt')
-rw-r--r-- | npc/082-3/poppet.txt | 180 |
1 files changed, 179 insertions, 1 deletions
diff --git a/npc/082-3/poppet.txt b/npc/082-3/poppet.txt index 90e9aae0..f59c9ecc 100644 --- a/npc/082-3/poppet.txt +++ b/npc/082-3/poppet.txt @@ -5,10 +5,18 @@ // 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 ""; @@ -16,6 +24,8 @@ 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; @@ -24,19 +34,187 @@ 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 3: + 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; } + 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, 10); + spawn(CrotcherScorpion, 10); + spawn(Archant, 5); + spawn(Moggun, 5); + spawn(BlackScorpion, 3); + spawn(Snake, 2); + break; + case 2: // Normal + spawn(FeyElement, 1); + spawn(CandiedSlime, 8); + spawn(RedSlime, 10); + spawn(AngrySeaSlime, 6); + spawn(LadySkeleton, 5); + spawn(Skeleton, 5); + spawn(UndeadWitch, 2); + break; + case 3: // Hard + spawn(LadySkeleton, 10); + spawn(Skeleton, 10); + spawn(UndeadWitch, 10); + 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, 10); + spawn(SeaSlimeMother, 3); + spawn(Wight, 10); + spawn(GreenSlimeMother, 3); + spawn(IceElement, 5); + spawn(Yeti, 3); + spawn(Zombie, 4); + spawn(Terranite, 7); + spawn(Fallen, 7); + spawn(Stalker, 6); + spawn(Thug, 5); + spawn(Swashbuckler, 3); + spawn(Grenadier, 2); + spawn(JackO, 1); + break; + default: + case 5: // Gumi + spawn(Anne, 10); + spawn(JackO, 10); + spawn(ManaGuardian, 10); + spawn(Tengu, 10); + spawn(Sasquatch, 10); + spawn(ManaSlayer, 10); + spawn(DoomGolem, 10); + spawn(Enchanter, 10); + break; + } + end; + +function spawn { + .@mob = getarg(0); + .@amo = getarg(1) + getmapusers("082-3"); + areamonster("082-3", 108, 82, 128, 102, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 108, 82, 128, 102, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 108, 82, 128, 102, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 108, 82, 128, 102, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 108, 82, 128, 102, 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; } |