summaryrefslogtreecommitdiff
path: root/npc/082-3/poppet.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/082-3/poppet.txt')
-rw-r--r--npc/082-3/poppet.txt180
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;
}