// 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; }