summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/constants.conf1
-rw-r--r--db/pre-re/mob_db.conf2
-rw-r--r--maps/pre-re/082-3.mcachebin1081 -> 1081 bytes
-rw-r--r--npc/082-3/poppet.txt180
-rw-r--r--npc/annuals/xmas/2021.txt11
-rw-r--r--npc/functions/mob_points.txt12
6 files changed, 200 insertions, 6 deletions
diff --git a/db/constants.conf b/db/constants.conf
index 6c1f4c6c..cff90cab 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -3390,6 +3390,7 @@ more than one separator can be used in a row (so 12_3___456 is illegal).
X21_ALLOWED: 2
X21_GOTOGAK: 4
X21_GATEGAK: 8
+ X21_METPOPPY: 16
X21_CANDLES: 64
X21_PLANTPUZZLE: 128
X21_LEVEL3: 256
diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf
index 7624b242..107d1e26 100644
--- a/db/pre-re/mob_db.conf
+++ b/db/pre-re/mob_db.conf
@@ -3481,7 +3481,7 @@ mob_db: (
AttackMotion: 672
DamageMotion: 50
Drops: {
- WumpusEgg: 10000
+ WumpusEgg: 1
}
},
{
diff --git a/maps/pre-re/082-3.mcache b/maps/pre-re/082-3.mcache
index eab0abd1..6d5f1ea5 100644
--- a/maps/pre-re/082-3.mcache
+++ b/maps/pre-re/082-3.mcache
Binary files differ
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;
}
diff --git a/npc/annuals/xmas/2021.txt b/npc/annuals/xmas/2021.txt
index 36aadc29..f025e44d 100644
--- a/npc/annuals/xmas/2021.txt
+++ b/npc/annuals/xmas/2021.txt
@@ -39,6 +39,14 @@ function script X21_DODISPATCH {
return;
}
+function script X21_POPPET {
+ return (XMAS2021 & X21_METPOPPY);
+}
+function script X21_DOPOPPET {
+ XMAS2021 = (XMAS2021 | X21_METPOPPY);
+ return;
+}
+
function script X21BC1_CLEAR {
return (XMAS2021 & X21_BOSSDEFEAT);
}
@@ -378,10 +386,13 @@ function script X21_SEEDS {
081-2 mapflag bexp 125
080-3 mapflag bexp 125
080-1 mapflag bexp 125
+082-2 mapflag bexp 110
/* Secure regions */
081-3 mapflag zone MMO
081-3 mapflag nosave 081-1,68,31
+082-2 mapflag zone MMO
+082-3 mapflag zone MMO
/* Script Core */
080-1,0,0,0 script #XMAS21Core NPC_HIDDEN,{
diff --git a/npc/functions/mob_points.txt b/npc/functions/mob_points.txt
index 5e6a2580..7c8f4a4f 100644
--- a/npc/functions/mob_points.txt
+++ b/npc/functions/mob_points.txt
@@ -17,6 +17,7 @@ function script MobPoints {
.@m$ = getmap();
if (isChristmas21() && compare(.@m$, "@"+callfunc("X21ID2"))) {
+ /* Christmas 2021 Main */
if (getmonsterinfo(@mobId, MOB_LV) >= 150 && rand2(4) == 1)
getitem XmasTicket, 2;
else if (getmonsterinfo(@mobId, MOB_LV) >= 100 && rand2(4) == 1)
@@ -25,11 +26,14 @@ function script MobPoints {
getitem XmasTicket, 1;
else if (rand2(12) == 3)
getitem XmasTicket, 1;
- }
- else if (isChristmas21() && (.@m$ == "082-3")) {
- if (rand2(5) == 3)
+ } else if (isChristmas21() && .@m$ == "082-3") {
+ /* Christmas 2021 DLC - Poppet's Realm */
+ if (getmonsterinfo(@mobId, MOB_LV) >= 150 && rand2(3) == 1)
+ getitem XmasTicket, 2;
+ else if (rand2(5) == 3)
getitem XmasTicket, 1;
- else if (isChristmas21() && (.@m$ == "081-1")) {
+ } else if (isChristmas21() && .@m$ == "081-1") {
+ /* Christmas 2021 Outdoors */
if (rand2(25) == 7)
getitem XmasTicket, 1;
}