From 1523e6c8b6e3e062730c95c3ac7f507bcb0d30ca Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Sat, 18 Dec 2021 08:02:20 -0300 Subject: Poppet's Initial Version --- db/constants.conf | 1 + db/pre-re/mob_db.conf | 2 +- maps/pre-re/082-3.mcache | Bin 1081 -> 1081 bytes npc/082-3/poppet.txt | 180 ++++++++++++++++++++++++++++++++++++++++++- npc/annuals/xmas/2021.txt | 11 +++ npc/functions/mob_points.txt | 12 ++- 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 Binary files a/maps/pre-re/082-3.mcache and b/maps/pre-re/082-3.mcache 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; } -- cgit v1.2.3-60-g2f50