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