From 3b9c4dd1f7ab8f490f23a6c53770e6f4c3516d7f Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Sun, 5 Dec 2021 23:45:43 -0300 Subject: Initial version of the Three Guardians which some pink-booted wizard set. --- db/pre-re/mob_db.conf | 4 +-- npc/080-1/final.txt | 30 +++++++++++++++++++-- npc/annuals/xmas/2021.txt | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+), 4 deletions(-) diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf index 6b418c28..17879965 100644 --- a/db/pre-re/mob_db.conf +++ b/db/pre-re/mob_db.conf @@ -7121,13 +7121,13 @@ mob_db: ( SpriteName: "SnowmanBoss" Name: "Der Schneemann" Lv: 100 - Hp: 5000 + Hp: 35000 Sp: 0 Exp: 2897 JExp: 689 AttackRange: 3 Attack: [60, 80] - Def: 5 + Def: 20 Mdef: 20 Stats: { Str: 15 diff --git a/npc/080-1/final.txt b/npc/080-1/final.txt index 1bb5d0a0..e73689b7 100644 --- a/npc/080-1/final.txt +++ b/npc/080-1/final.txt @@ -11,10 +11,17 @@ OnInstanceInit: end; OnInit: .distance=4; + /* I thought in making a shop here */ + /* Valentine Dress, Love Potions, Pinkie Crystal... */ + /* Would be confusing and bad, so removed. */ end; } 080-1,97,41,0 script Gak#X21 NPC183,{ + // FIXME: Cutscene + // FIXME: Enablenpc Alissa#ED2 + // FIXME: Do not repeat cutscene if quest once completed + // FIXME: Do not repeat cutscene if Alissa is enabled? openshop; closedialog; end; @@ -75,12 +82,31 @@ OnPayFunds: // But then, Gak *did* "kidnap" a zealite specialist, right? 080-1,83,136,0 script #X21BarrierF NPC_HIDDEN,3,0,{ - if (!'XMAS21FINAL) + if ('XMAS21FINAL) + end; + + if (mobcount(getmap(), "#X21BarrierF::OnKil")) { dispbottom strcharinfo(0) + " : " + l("This clearly is not a real gate; Most likely an illusion to prevent access. I should be able to dispel it by killing the guardians."); - // TODO: Verify again if all guardians are dead + end; + } + delcells("X21LF@"+X21ID()); + specialeffect(FX_MAGIC_WICKED_SPAWN, AREA, getcharid(3)); + getitem AquaTicket, X21_TICKET_BOSS; + 'XMAS21FINAL = true; + maptimer2(getmap(), 10, "#X21BarrierF::OnSesame"); end; OnInit: .distance=1; end; +OnSesame: + dispbottom l("Without the guardians, the illusion is just that: An illusion. The path is clear."); + getitem AquaTicket, X21_TICKET_SUPPORT; + getexp X21_EXP_PUZZLE, 0; + end; +OnKil: + mapannounce getmap(), "One of the guardians has been eliminated by "+strcharinfo(0), 0; + getitem AquaTicket, X21_TICKET_SUPPORT + 1; + X21INIT(); + end; } diff --git a/npc/annuals/xmas/2021.txt b/npc/annuals/xmas/2021.txt index 8766cdd5..70b2b7da 100644 --- a/npc/annuals/xmas/2021.txt +++ b/npc/annuals/xmas/2021.txt @@ -127,6 +127,73 @@ function script X21INIT { "#XMAS21Core"::spawn(Pinkie, 18, .@mapd$); "#XMAS21Core"::spawn(Hyvern, 3, .@mapd$); + /* The Three Guardians */ + .@bon = 0; + if (X21TYPE() == IOT_PARTY) + .@bon = 20000; + + .@mg = monster(.@mapd$, 43, 47, "Der Schneemann (Alpha)", SnowmanBoss, 1, "#X21BarrierF::OnKil"); + .@hp = .@bon + rand2(35000, 47000); + setunitdata(.@mg, UDT_MAXHP, .@hp); + setunitdata(.@mg, UDT_HP, .@hp); + setunitdata(.@mg, UDT_ATKRANGE, 2); + setunitdata(.@mg, UDT_ATKMIN, 30); + setunitdata(.@mg, UDT_ATKMAX, 40); + + .@mg = monster(.@mapd$, 144, 154, "Der Schneemann (Beta)", SnowmanBoss, 1, "#X21BarrierF::OnKil"); + .@hp = .@bon + rand2(35000, 47000); + setunitdata(.@mg, UDT_MAXHP, .@hp); + setunitdata(.@mg, UDT_HP, .@hp); + setunitdata(.@mg, UDT_ATKRANGE, 2); + setunitdata(.@mg, UDT_ATKMIN, 30); + setunitdata(.@mg, UDT_ATKMAX, 40); + + .@mg = monster(.@mapd$, 42, 147, "Der Schneemann (Gamma)", SnowmanBoss, 1, "#X21BarrierF::OnKil"); + .@hp = .@bon + rand2(35000, 47000); + setunitdata(.@mg, UDT_MAXHP, .@hp); + setunitdata(.@mg, UDT_HP, .@hp); + setunitdata(.@mg, UDT_ATKRANGE, 2); + setunitdata(.@mg, UDT_ATKMIN, 30); + setunitdata(.@mg, UDT_ATKMAX, 40); + + /* The Three Guardians Friends */ + if (X21TYPE() == IOT_PARTY) { .@g = 12; } else { .@g = 7; } + + freeloop(true); + for (.@i=0; .@i < .@g; .@i++) { + .@mg = areamonster(.@mapd$, 30, 38, 50, 51, "Snowman (Alpha)", Snowman, 1); + .@hp = rand2(3500, 5700); + .@ak = rand2(70, 120); + setunitdata(.@mg, UDT_MAXHP, .@hp); + setunitdata(.@mg, UDT_HP, .@hp); + setunitdata(.@mg, UDT_ATKRANGE, 1); + setunitdata(.@mg, UDT_ATKMIN, .@ak); + setunitdata(.@mg, UDT_ATKMAX, .@ak+20); + } + + for (.@i=0; .@i < .@g; .@i++) { + .@mg = areamonster(.@mapd$, 30, 38, 50, 51, "Snowman (Beta)", Snowman, 1); + .@hp = rand2(3500, 5700); + .@ak = rand2(70, 120); + setunitdata(.@mg, UDT_MAXHP, .@hp); + setunitdata(.@mg, UDT_HP, .@hp); + setunitdata(.@mg, UDT_ATKRANGE, 1); + setunitdata(.@mg, UDT_ATKMIN, .@ak); + setunitdata(.@mg, UDT_ATKMAX, .@ak+20); + } + + for (.@i=0; .@i < .@g; .@i++) { + .@mg = areamonster(.@mapd$, 30, 38, 50, 51, "Snowman (Gamma)", Snowman, 1); + .@hp = rand2(3500, 5700); + .@ak = rand2(70, 120); + setunitdata(.@mg, UDT_MAXHP, .@hp); + setunitdata(.@mg, UDT_HP, .@hp); + setunitdata(.@mg, UDT_ATKRANGE, 1); + setunitdata(.@mg, UDT_ATKMIN, .@ak); + setunitdata(.@mg, UDT_ATKMAX, .@ak+20); + } + freeloop(false); + } if (instance_id() >= 0) instance_set_timeout(1800, 1800); -- cgit v1.2.3-70-g09d2