diff options
-rw-r--r-- | world/map/db/mob_db_over_100.txt | 18 | ||||
-rw-r--r-- | world/map/npc/functions/doomsday.txt | 234 |
2 files changed, 193 insertions, 59 deletions
diff --git a/world/map/db/mob_db_over_100.txt b/world/map/db/mob_db_over_100.txt index 886efb4b..fdde9a60 100644 --- a/world/map/db/mob_db_over_100.txt +++ b/world/map/db/mob_db_over_100.txt @@ -41,11 +41,13 @@ 1136, LesserGhost, LesserGhost, 1, 1, 0, 1, 1, 0, 150, 300, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 29, 131, 340, 1800, 672, 950, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 1137, Tormenta, Tormenta, 200, 18000, 60, 500000, 5000, 5, 360, 374, 48, 90, 1, 32, 60, 255, 255, 255, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 //ID, Name, Jname, LV, HP, SP, EXP, JEXP, Range1, ATK1, ATK2, DEF, MDEF, STR, AGI, VIT, INT, DEX, LUK, Range2, Range3, Scale, Race, Element,Mode, Speed, Adelay, Amotion,Dmotion,Drop1id,Drop1per,Drop2id,Drop2%, Drop3id,Drop3%, Drop4id,Drop4%, Drop5id,Drop5%, Drop6id,Drop6%, Drop7id,Drop7%, Drop8id,Drop8%, Item1, Item2, MEXP, ExpPer, MVP1id, MVP1per,MVP2id, MVP2per,MVP3id, MVP3per,mutationcount,mutationstrength -1138, ManaGuard, ManaGuardian, 180, 20000, 280, 27000, 5000, 2, 280, 324, 22, 67, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 759, 1, 5237, 20, 1253, 5, 720, 100, 825, 500, 868, 20, 1172, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1139, Virus, Virus, 170, 5000, 0, 0, 721, 6, 45, 75, 37, 12, 30, 30, 20, 20, 25, 60, 1, 1, 1, 3, 25, 175, 600, 1872, 672, 480, 787, 500, 743, 1100, 5236, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 -1140, Tengu, Tengu, 180, 24000, 280, 45000, 5000, 2, 180, 224, 67, 9, 31, 22, 90, 97, 255, 95, 31, 30, 1, 0, 69, 181, 310, 1200, 672, 50, 649, 2, 4024, 300, 862, 800, 4005, 25, 1227, 15, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1141, Sasquatch, Sasquatch, 180, 24000, 280, 45000, 5000, 1, 420, 444, 12, 27, 31, 22, 90, 97, 255, 95, 31, 30, 1, 0, 69, 181, 310, 1200, 672, 50, 653, 2, 763, 500, 862, 800, 640, 1000, 1227, 15, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1142, Kage, ZaxDeKagen, 200, 29999, 280, 999999, 99999, 9, 90, 124, 62, 100, 199, 2, 199, 197, 255, 95, 31, 30, 1, 0, 69, 181, 210, 672, 672, 50, 760, 10000, 666, 10000, 1244, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1143, ManaSlayer, ManaSlayer, 180, 24000, 280, 42000, 5000, 2, 260, 274, 22, 67, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 650, 2, 828, 2400, 1227, 15, 4007, 35, 4029, 10, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1144, Dragon, GreatDragon, 250, 29999, 280, 1, 1, 3, 60, 90, 40, 40, 199, 2, 199, 197, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 759, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1145, KageSlayer, KageSlayer, 180, 8000, 280, 38000, 5000, 6, 140, 174, 74, 0, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1000, 672, 50, 584, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1138, ManaGuard, ManaGuardian, 180, 20000, 280, 27000, 5000, 2, 280, 324, 22, 67, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 759, 1, 5237, 20, 1253, 5, 720, 100, 825, 500, 868, 20, 1172, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1139, Virus, Virus, 170, 5000, 0, 0, 721, 6, 45, 75, 37, 12, 30, 30, 20, 20, 25, 60, 1, 1, 1, 3, 25, 175, 600, 1872, 672, 480, 787, 500, 743, 1100, 5236, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 +1140, Tengu, Tengu, 180, 24000, 280, 45000, 5000, 2, 180, 224, 67, 9, 31, 22, 90, 97, 255, 95, 31, 30, 1, 0, 69, 181, 310, 1200, 672, 50, 649, 2, 4024, 300, 862, 800, 4005, 25, 1227, 15, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1141, Sasquatch, Sasquatch, 180, 24000, 280, 45000, 5000, 1, 420, 444, 12, 27, 31, 22, 90, 97, 255, 95, 31, 30, 1, 0, 69, 181, 310, 1200, 672, 50, 653, 2, 763, 500, 862, 800, 640, 1000, 1227, 15, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1142, Kage, ZaxDeKagen, 200, 29999, 280, 999999, 99999, 9, 90, 124, 69, 100, 199, 2, 199, 197, 255, 95, 31, 30, 1, 0, 69, 181, 210, 672, 672, 50, 760, 10000, 666, 10000, 1244, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1143, ManaSlayer, ManaSlayer, 180, 24000, 280, 42000, 5000, 2, 260, 274, 22, 67, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 650, 2, 828, 2400, 1227, 15, 4007, 35, 4029, 10, 5237, 20, 758, 3, 825, 6000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1144, Dragon, GreatDragon, 250, 29999, 280, 1, 1, 3, 60, 90, 67, 67, 199, 2, 199, 197, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1200, 672, 50, 759, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1145, KageSlayer, KageSlayer, 180, 8000, 280, 38000, 5000, 6, 140, 174, 74, 0, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 210, 1000, 672, 50, 584, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1146, Flashmob, Flashmob, 181, 27000, 280, 72000, 5000, 1, 40, 60, 57, 57, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 160, 600, 672, 50, 649, 5, 650, 5, 653, 5, 1227, 35, 509, 10000, 1257, 2, 759, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1147, Koyntety, Koyntety, 181, 27000, 280, 72000, 5000, 4, 220, 240, 52, 52, 31, 22, 90, 127, 255, 95, 31, 30, 1, 0, 69, 181, 240, 1400, 672, 50, 649, 5, 650, 5, 653, 5, 1227, 35, 509, 10000, 1257, 2, 759, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 diff --git a/world/map/npc/functions/doomsday.txt b/world/map/npc/functions/doomsday.txt index 7bd6fa9c..641bd6b0 100644 --- a/world/map/npc/functions/doomsday.txt +++ b/world/map/npc/functions/doomsday.txt @@ -199,6 +199,7 @@ OnJanitor: // Check for our current doomsday state OnInit: setarray $@doomsday_mobs, 1140, 1141, 1143, 1140, 1141, 1143, 1140, 1141, 1143; + setarray $@doomsday_boss, 1146, 1147, 1146, 1147, 1146, 1147, 1146, 1147, 1146, 1147; if ($DOOMSDAY == 1) goto L_Doomsday1; if ($DOOMSDAY == 2) @@ -365,6 +366,10 @@ L_DDAdvanceWave: if ($@DD_NUMWAVES > 6) end; // TODO: Maybe a final wave announcement? + // Variable initialization + set $@DD_INT, 0; + set $@DD_UNITS, getmapusers($@DD_LOC$)+$DOOMSDAY_SCORE; + // Spawns if ($@DoomsdayLoc == 0) goto L_DD3Tulim; @@ -386,7 +391,14 @@ L_DDAdvanceTimers: // If we have more users than possible, waves come faster L_DDAdvanceTimers2: - setnpctimer (($@DD_UNITS*2-$@DD_INT)*500); // ±1 second per player + set $@ADD_TIME, (($@DD_UNITS*2-$@DD_INT)*500); // ±1 second per player/victory + // Cap to 90s (to prevent skipping first third) + if ($@ADD_TIME > 90000) + set $@ADD_TIME, 90000; + + setnpctimer $@ADD_TIME; + + set $@ADD_TIME, 0; goto L_DDAdvanceWavePost; // Clear temporary variables and broadcast @@ -403,46 +415,43 @@ L_DDAdvanceWavePost: // Tulimshar Siege points L_DD3Tulim: - set $@DD_INT, 0; - set $@DD_UNITS, getmapusers($@DD_LOC$); - // Compulsory spawns - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 98, 75, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 97, 86, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; // Non-compulsory spawns if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 91, 99, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 75, 104, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 56, 81, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 44, 63, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 76, 76, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 54, 96, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; @@ -453,46 +462,43 @@ L_DD3Tulim: // Hurnscald Siege points L_DD3Hurns: - set $@DD_INT, 0; - set $@DD_UNITS, getmapusers($@DD_LOC$); - // Compulsory spawns - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 138, 63, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 136, 71, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; // Non-compulsory spawns if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 133, 79, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 111, 74, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 94, 75, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 79, 64, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 67, 82, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 88, 90, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; @@ -503,46 +509,43 @@ L_DD3Hurns: // Nivalis Siege points L_DD3Nival: - set $@DD_INT, 0; - set $@DD_UNITS, getmapusers($@DD_LOC$); - // Compulsory spawns - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 44, 55, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 62, 49, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; // Non-compulsory spawns if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 63, 61, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 56, 83, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 70, 41, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 36, 37, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 62, 26, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; if ($@DD_INT >= $@DD_UNITS*2) goto L_DDAdvanceTimers; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 85, 30, "", $@doomsday_mobs[$@DD_IDX], 1, "Doomsday::OnDeathAct3"; set $@DD_INT, $@DD_INT+1; @@ -552,6 +555,117 @@ L_DD3Nival: +// Extra wave control system [0] +S_DD3ThirdSpawns: + set $@DD_IDX1, rand(getarraysize($@DD_XPOS)); + set $@DD_IDX2, rand(getarraysize($@doomsday_mobs)); + + monster $@DD_LOC$, $@DD_XPOS[$@DD_IDX1], $@DD_YPOS[$@DD_IDX1], "", $@doomsday_mobs[$@DD_IDX2], 1, "Doomsday::OnDeathAct3"; + + set $@DD_INT, $@DD_INT+1; + if($@DD_INT < $@DD_UNITS) goto S_DD3ThirdSpawns; + return; + +// Extra wave control system [1] +L_DD3FirstThird: + set $@DD_UNITS, getmapusers($@DD_LOC$)-mobcount($@DD_LOC$, "Doomsday::OnDeathAct3")+1; + set $@DD_INT, 0; + + // Difficulty adjustment: Invoke -1 mob per player and +1 mob per 2 score points + set $@DD_UNITS, $@DD_UNITS-getmapusers($@DD_LOC$)+($DOOMSDAY_SCORE/2); + + // Monsters already overpower players + if ($@DD_UNITS < 0) + goto L_DD3EndThird; + + // Tulimshar + if ($@DoomsdayLoc == 0) + setarray $@DD_XPOS, 98, 97, 91, 75, 56, 44, 76, 54; + if ($@DoomsdayLoc == 0) + setarray $@DD_YPOS, 75, 86, 99,104, 81, 63, 76, 96; + + // Hurnscald + if ($@DoomsdayLoc == 1) + setarray $@DD_XPOS,138,136,133,111, 95, 79, 67, 88; + if ($@DoomsdayLoc == 1) + setarray $@DD_YPOS, 63, 71, 79, 74, 75, 64, 82, 90; + + // Nivalis + if ($@DoomsdayLoc == 2) + setarray $@DD_XPOS, 44, 62, 63, 56, 70, 36, 62, 85; + if ($@DoomsdayLoc == 2) + setarray $@DD_YPOS, 55, 49, 61, 83, 41, 37, 26, 30; + + // Prepare optional boss + set $@DD_IDX1, rand(getarraysize($@DD_XPOS)); + set $@DD_IDX2, rand(getarraysize($@doomsday_boss)); + + // Spawn optional boss + if ($@DD_NUMWAVES == 5 && $DOOMSDAY_SCORE > 6) + monster $@DD_LOC$, $@DD_XPOS[$@DD_IDX1], $@DD_YPOS[$@DD_IDX1], "", $@doomsday_boss[$@DD_IDX2], 1, "Doomsday::OnDeathAct3"; + + // Spawn first third's wave + callsub S_DD3ThirdSpawns; + goto L_DD3EndThird; + +// Extra wave control system [2] +L_DD3SecondThird: + set $@DD_UNITS, getmapusers($@DD_LOC$)-mobcount($@DD_LOC$, "Doomsday::OnDeathAct3")+1; + set $@DD_INT, 0; + + // Intensity control + if ($DOOMSDAY_SCORE < 12) + goto L_DD3EndThird; + + // Difficulty adjustment: Invoke -1 mob per player and +1 mob per 3 score points + set $@DD_UNITS, $@DD_UNITS-getmapusers($@DD_LOC$)+($DOOMSDAY_SCORE/3); + + // Tulimshar + if ($@DoomsdayLoc == 0) + setarray $@DD_XPOS, 98, 97, 91, 75, 56, 44, 76, 54; + if ($@DoomsdayLoc == 0) + setarray $@DD_YPOS, 75, 86, 99,104, 81, 63, 76, 96; + + // Hurnscald + if ($@DoomsdayLoc == 1) + setarray $@DD_XPOS,138,136,133,111, 95, 79, 67, 88; + if ($@DoomsdayLoc == 1) + setarray $@DD_YPOS, 63, 71, 79, 74, 75, 64, 82, 90; + + // Nivalis + if ($@DoomsdayLoc == 2) + setarray $@DD_XPOS, 44, 62, 63, 56, 70, 36, 62, 85; + if ($@DoomsdayLoc == 2) + setarray $@DD_YPOS, 55, 49, 61, 83, 41, 37, 26, 30; + + // Prepare optional boss + set $@DD_IDX1, rand(getarraysize($@DD_XPOS)); + set $@DD_IDX2, rand(getarraysize($@doomsday_boss)); + + // Spawn optional boss + if ($@DD_NUMWAVES == 5) + monster $@DD_LOC$, $@DD_XPOS[$@DD_IDX1], $@DD_YPOS[$@DD_IDX1], "", $@doomsday_boss[$@DD_IDX2], 1, "Doomsday::OnDeathAct3"; + + // Monsters already overpower players + if ($@DD_UNITS < 0) + goto L_DD3EndThird; + + // Spawn second third's wave + callsub S_DD3ThirdSpawns; + goto L_DD3EndThird; + +// Extra wave control system [3] +L_DD3EndThird: + set $@DD_UNITS, 0; + set $@DD_IDX1, 0; + set $@DD_IDX2, 0; + set $@DD_INT, 0; + cleararray $@DD_XPOS, 0, 8; + cleararray $@DD_YPOS, 0, 8; + end; + + + // Timer controls (5 minutes between waves); // It only fires after first wave L_TimerCheck2: @@ -572,7 +686,7 @@ L_Doomsday3Defeat: mapannounce $@DD_LOC$, "Jande : Oh noes, "+$@DoomsdayMc+" monsters passed the barricate!!", 0; // Move the monsters to town - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); if ($@DoomsdayLoc == 0) areamonster "001-1", 52, 35, 119, 113, "", $@doomsday_mobs[$@DD_IDX], $@DoomsdayMc; if ($@DoomsdayLoc == 1) @@ -587,8 +701,8 @@ L_Doomsday3Defeat: // Siege was cleared up L_Doomsday3Victory: - mapannounce $@DD_LOC$, "Jande : That was a close call, but we did it! We defended "+$DOOMSDAY_SCORE+" times.", 0; set $DOOMSDAY_SCORE, $DOOMSDAY_SCORE+1; + mapannounce $@DD_LOC$, "Jande : That was a close call, but we did it! We defended "+$DOOMSDAY_SCORE+" times.", 0; goto L_Doomsday3Cleanup; // Clean up temporary variables (except skip) @@ -602,31 +716,49 @@ L_Doomsday3Cleanup: // Bonus spawn L_Doomsday3Bonus: - announce "Jande: Stray minions from Zax De'Kagen were sighted all over the world!", 0; + announce "Jande: Stray minions from Zax De'Kagen army were sighted all over the world!", 0; + set $@DD_UNITS, 2+($DOOMSDAY_SCORE/5); - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + // Cap value (to prevent huge spikes) + if ($@DD_UNITS > 5) + set $@DD_UNITS, 3+($DOOMSDAY_SCORE/10); + + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "031-1", 62, 49, "", $@doomsday_mobs[$@DD_IDX], 1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "018-1", 136, 71, "", $@doomsday_mobs[$@DD_IDX], 1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); monster "002-1", 97, 86, "", $@doomsday_mobs[$@DD_IDX], 1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); areamonster "017-1", 169, 49, 198, 77, "", $@doomsday_mobs[$@DD_IDX], 1; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); - areamonster "012-1", 20, 47, 74, 77, "", $@doomsday_mobs[$@DD_IDX], 2; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); - areamonster "057-1", 115, 50, 140, 75, "", $@doomsday_mobs[$@DD_IDX], 2; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); - areamonster "046-1", 58, 49, 92, 70, "", $@doomsday_mobs[$@DD_IDX], 2; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); - areamonster "034-1", 83, 51, 121, 98, "", $@doomsday_mobs[$@DD_IDX], 2; - setarray $@DD_IDX, rand(getarraysize($@doomsday_mobs)); - areamonster "003-4", 20, 20, 85, 60, "", $@doomsday_mobs[$@DD_IDX], 2; + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + areamonster "012-1", 20, 47, 74, 77, "", $@doomsday_mobs[$@DD_IDX], $@DD_UNITS; + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + areamonster "057-1", 115, 50, 140, 75, "", $@doomsday_mobs[$@DD_IDX], $@DD_UNITS; + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + areamonster "046-1", 58, 49, 92, 70, "", $@doomsday_mobs[$@DD_IDX], $@DD_UNITS; + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + areamonster "034-1", 83, 51, 121, 98, "", $@doomsday_mobs[$@DD_IDX], $@DD_UNITS; + set $@DD_IDX, rand(getarraysize($@doomsday_mobs)); + areamonster "003-4", 20, 20, 85, 60, "", $@doomsday_mobs[$@DD_IDX], $@DD_UNITS; + + set $@DD_UNITS, 0; + set $@DD_IDX, 0; end; //////////////////////////////////////////////////////////////////////////////// // Respawn logic (5 minutes) +OnTimer100000: + if ($DOOMSDAY == 2) + goto L_DD3FirstThird; + end; + +OnTimer200000: + if ($DOOMSDAY == 2) + goto L_DD3SecondThird; + end; + OnTimer300000: if ($DOOMSDAY == 1) goto L_Doomsday1Respawn; |