summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/constants.conf1
-rw-r--r--npc/034-3/gemini.txt1
-rw-r--r--npc/034-4/exit.txt7
-rw-r--r--npc/034-4/intro.txt153
4 files changed, 161 insertions, 1 deletions
diff --git a/db/constants.conf b/db/constants.conf
index 2f245aa12..24e72a6a4 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -2103,6 +2103,7 @@ constants_db: {
EE_SNOWMAN: 512
EE_CRAZYFEFE: 1024
EE_SAULC: 2048
+ EE_GEMINI: 4096
comment__: "Teleporter enum"
TP_NONE: 0
diff --git a/npc/034-3/gemini.txt b/npc/034-3/gemini.txt
index 352a4064d..14a76e2b8 100644
--- a/npc/034-3/gemini.txt
+++ b/npc/034-3/gemini.txt
@@ -203,6 +203,7 @@ OnTalkNearby:
end;
OnInit:
+OnInstanceInit:
.distance=3;
.pid=getnpcid();
// For players
diff --git a/npc/034-4/exit.txt b/npc/034-4/exit.txt
index b1b6b4d33..8b1be0fc5 100644
--- a/npc/034-4/exit.txt
+++ b/npc/034-4/exit.txt
@@ -21,10 +21,15 @@ OnTouch:
GeminiCheck();
// Only the party leader go ahead
if (strcharinfo(0) != getpartyleader(getcharid(1))) {
- mesq l("%s has the key.", getpartyleader(getcharid(1)));
+ mes l("%s has the key.", getpartyleader(getcharid(1)));
close;
}
+ mesc l("Are you sure you want to leave?"), 1;
+ mesc l("You, and everyone on the party, won't be able to return."), 1;
+ if (askyesno() == ASK_NO) close;
+ closeclientdialog;
+
// Create maze and populate (From 45x45 to 60x60)
CreateMaze(IOT_CHAR, MAZE_SIZE_M | MAZE_SIZE_G);
.@mx=getmapinfo(MAPINFO_SIZE_X, MAZE_MAP$)-20;
diff --git a/npc/034-4/intro.txt b/npc/034-4/intro.txt
index d2dbc06e7..734c49a1f 100644
--- a/npc/034-4/intro.txt
+++ b/npc/034-4/intro.txt
@@ -4,5 +4,158 @@
// Description:
// Gemini Sisters Quest - Part A: Party Room
+034-4,43,52,0 script #GeminiNoBack NPC_HIDDEN,0,0,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(8);
+ npctalkonce l("Oh noes ─ the door is sealed! We can only press forward!");
+ end;
+}
+034-4,43,51,0 script #GeminiIntro NPC_HIDDEN,2,2,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(8);
+ if (strcharinfo(0) != getpartyleader(.@p)) end;
+
+ if (!.state) {
+ .mp$ = getmap();
+ .pn$ = getpartyname(getcharid(1));
+ .pid = getcharid(1);
+ .state = true;
+ initnpctimer;
+ killmonsterall(.mp$); // Cancel everything done thus far, incl. showdown
+ }
+ end;
+
+OnTimer1000:
+ .luvia = monster(.mp$, 48, 45, "Luvia Gemini", Sagratha, 1);
+ immortal(.luvia);
+ setunitdata(.luvia, UDT_MODE, MD_BOSS|MD_PLANT|MD_NOKNOCKBACK);
+ end;
+
+OnTimer2500:
+ unittalk(.luvia, "Well, well, well, look at what we have here!");
+ end;
+
+OnTimer6000:
+ unittalk(.luvia, "If it isn't the so-called \"%s\"!", .pn$);
+ end;
+
+OnTimer9500:
+ unittalk(.luvia, "I'm sure it was a long journey to reach here, and well, this IS an Inn.");
+ end;
+
+
+OnTimer13000:
+ unittalk(.luvia, "Where are my manners, of course I'll offer you room to sleep...");
+ end;
+
+
+OnTimer16500:
+ unittalk(.luvia, "...Yes, I'll put all of you to sleep... PERMANENTLY! Hahahaha!");
+ .@pi = getmapusers(.mp$) + 2;
+ areamonster(.mp$, 45, 40, 54, 45, strmobinfo(1, Scar), Scar, .@pi / 2);
+ end;
+
+OnTimer20000:
+ .@pi = getmapusers(.mp$) + 1;
+ areamonster(.mp$, 45, 40, 54, 45, strmobinfo(1, Scar), Scar, .@pi);
+ unittalk(.luvia, "HAHAHahahaha!");
+ unitwalk(.luvia, 50, 29);
+ end;
+
+OnTimer24000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi);
+ monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi);
+ end;
+
+OnTimer28000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi);
+ unitwarp(.luvia, "034-4", 45, 45);
+ end;
+
+OnTimer25000:
+ unitkill(.luvia);
+ end;
+
+OnTimer50000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi);
+ monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi);
+ monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi * 3 / 2);
+ end;
+
+OnTimer150000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi * 3 / 2);
+ monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi);
+ monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi);
+ end;
+
+OnTimer300000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, .@pi * 3 / 2);
+ monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, .@pi);
+ monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, .@pi);
+ monster(.mp$, 43, 52, strmobinfo(1, Terranite), Terranite, 1+(.@pi/2));
+ end;
+
+OnTimer480000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, Scar), Scar, 1+(.@pi/2));
+ monster(.mp$, 43, 52, strmobinfo(1, Scar), Scar, 1+(.@pi/2));
+ monster(.mp$, 37, 33, strmobinfo(1, Scar), Scar, 1+(.@pi/2));
+ monster(.mp$, 50, 29, strmobinfo(1, Terranite), Terranite, .@pi);
+ monster(.mp$, 43, 52, strmobinfo(1, Forain), Forain, .@pi);
+ monster(.mp$, 37, 33, strmobinfo(1, AzulSkullSlime), AzulSkullSlime, .@pi);
+ end;
+
+OnTimer540000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, Terranite), Terranite, .@pi);
+ monster(.mp$, 43, 52, strmobinfo(1, BlackSlimeMother), BlackSlimeMother, .@pi);
+ monster(.mp$, 37, 33, strmobinfo(1, BlackMamba), BlackMamba, .@pi + 1);
+ end;
+
+OnTimer600000:
+ .@pi = getmapusers(.mp$) + 1;
+ monster(.mp$, 50, 29, strmobinfo(1, GoboBear), GoboBear, 1+(.@pi/2));
+ $@VALIA_STATUS[.pid] = 10;
+ stopnpctimer;
+ end;
+
+OnInit:
+OnInstanceInit:
+ .state = false;
+ .mp$ = "";
+ .pn$ = "";
+ .pid = 0;
+ .luvia = 0;
+ end;
+}
+
+
+034-4,50,29,0 script #GeminiPartB NPC_HIDDEN,0,0,{
+ end;
+OnTouch:
+ if (instance_id() < 0 || getcharid(1) < 1) end;
+ GeminiCheck(8);
+ .@p=getcharid(1);
+ if (mobcount(getmap(), "all") > 0 || $@VALIA_STATUS[.@p] < 10) {
+ dispbottom l("Uh? I can't pass. I wonder why.");
+ end;
+ }
+ if (mobcount(getmap(), "all") <= 0 && $@VALIA_STATUS[.@p] == 10) {
+ $@VALIA_STATUS[.@p]=11;
+ }
+ if ($@VALIA_STATUS[.@p] >= 11) {
+ slide 33, 81;
+ }
+ end;
+}