summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
Diffstat (limited to 'npc')
-rw-r--r--npc/031-1_NivalisPort/angelaOutside.txt67
-rw-r--r--npc/031-1_NivalisPort/house.txt2
-rw-r--r--npc/031-3_Cave/cindyCave.txt95
3 files changed, 148 insertions, 16 deletions
diff --git a/npc/031-1_NivalisPort/angelaOutside.txt b/npc/031-1_NivalisPort/angelaOutside.txt
index 3c10df46..7bb02d71 100644
--- a/npc/031-1_NivalisPort/angelaOutside.txt
+++ b/npc/031-1_NivalisPort/angelaOutside.txt
@@ -13,16 +13,6 @@
set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
-//TODO: remove DEBUG
- mes "This menu is for debugging and will be removed";
- menu
- "normal", L_normal,
- "reset quest", -;
- set @rescue_Cindy, 0;
- callsub S_Update_Mask;
-
-L_normal:
-//////////////////////////////////
if (@rescue_Cindy > 3) goto L_Please_Visit_Again;
if (@rescue_Cindy > 1) goto L_Please_Visit;
if (@rescue_Cindy == 1) goto L_Please_Help;
@@ -74,7 +64,7 @@ L_Menu_Potion:
L_Calm_Down:
if (countitem("ConcentrationPotion") == 0) goto L_No_Potion;
delitem "ConcentrationPotion", 1;
- mes "She drinks the concentration potions and calm down.";
+ mes "She drinks the concentration potions and calms down.";
mes "[Angela]";
mes "\"Thank you, this was helpful.\"";
next;
@@ -121,11 +111,64 @@ S_Update_Mask:
return;
}
+031-1.gat,80,25,0 script Debug 154, {
+//TODO: remove DEBUG
+ set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
+ set @Q_Nivalis_state_SHIFT, NIBBLE_5_SHIFT;
+ set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
+
+ mes "This menu is for debugging and will be removed";
+ menu
+ "close", L_close,
+ "reset quest", -,
+ "magic", magic;
+ set @rescue_Cindy, 0;
+ callsub S_Update_Mask;
+ mes "quest variable is now " + @rescue_Cindy;
+ close;
+L_close:
+ close;
-
+magic:
+ // Set up SkillUp function general magic
+ set @SUP_id, SKILL_MAGIC;
+ set @SUP_name$, "Magic";
+
+ set @SUP_xp, 5000;
+ set @SUP_lvl, 2;
+ callfunc "SkillUp";
+
+ // Set up SkillUp function war magic
+ set @SUP_id, SKILL_MAGIC_WAR;
+ set @SUP_name$, "War Magic";
+
+ set @SUP_xp, 5000;
+ set @SUP_lvl, 2;
+ callfunc "SkillUp";
+
+ // Set up SkillUp function life magic
+ set @SUP_id, SKILL_MAGIC_LIFE;
+ set @SUP_name$, "Life Magic";
+
+ set @SUP_xp, 5000;
+ set @SUP_lvl, 2;
+ callfunc "SkillUp";
+
+ mes "Lightning invocation: " + getspellinvocation("lightning-strike");
+ mes "Flare-dart invocation: " + getspellinvocation("flare-dart");
+ mes "Lesser-heal invocation: " + getspellinvocation("lesser-heal");
+ mes "Lay-on-hands invocation: " + getspellinvocation("lay-on-hands");
+ close;
+
+S_Update_Mask:
+ set QUEST_Nivalis_state,
+ (QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK))
+ | (@rescue_Cindy << @Q_Nivalis_state_SHIFT);
+ return;
+}
diff --git a/npc/031-1_NivalisPort/house.txt b/npc/031-1_NivalisPort/house.txt
index c81185d3..d9714ef5 100644
--- a/npc/031-1_NivalisPort/house.txt
+++ b/npc/031-1_NivalisPort/house.txt
@@ -9,7 +9,7 @@
set @rescue_Cindy, ((QUEST_Nivalis_state & @Q_Nivalis_state_MASK) >> @Q_Nivalis_state_SHIFT);
if (@rescue_Cindy > 2) goto L_Warp;
- mes "The door is locked.";
+ message strcharinfo(0), "The door is locked.";
close;
L_Warp:
diff --git a/npc/031-3_Cave/cindyCave.txt b/npc/031-3_Cave/cindyCave.txt
index 738868d6..77046422 100644
--- a/npc/031-3_Cave/cindyCave.txt
+++ b/npc/031-3_Cave/cindyCave.txt
@@ -7,6 +7,8 @@
//TODO: picture
031-3.gat,122,51,0 script Cindy 114, {
+ if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti;
+
set @KEYS_AMOUNT, 10;
set @Q_Nivalis_state_MASK, NIBBLE_5_MASK;
@@ -52,12 +54,33 @@ L_Try_Cage:
mes "You get an uncomfortable feeling and Cindy starts to shiver.";
next;
mes "\"Oh no, the Yetis...\"";
+ if ($@FIGHT_YETI_STATUS != 0) goto L_Yeti;
+
+ // initialize fight
+ set $@FIGHT_YETI_STATUS, 1;
+ set $@FIGHT_YETI_WAVE, 1;
+ set $@FIGHT_YETI_PLAYER_COUNT, getareausers("031-3.gat", 80, 20, 160, 90);
+
+ startnpctimer;
+ goto L_Exit;
+
+//TODO: remove
//TODO: start the battle and set state2 in case of success
mes "DEBUG: ADD YETIFIGHT HERE, QUEST VARIABLE INCREASED";
set @rescue_Cindy, 2;
callsub S_Update_Mask;
close;
-
+
+//TODO: why close and end?
+L_Exit:
+ close;
+ end;
+
+L_Yeti:
+ mes "[Cindy]";
+ mes "\"Watch out, the Yetis!\"";
+ close;
+
L_Reward:
mes "[Cindy]";
mes "\"You are a hero! All this strong monsters!\"";
@@ -70,8 +93,8 @@ L_Reward:
set @reward, rand(1);
if (@reward == 1) goto L_Wizard_Hat;
//TODO: set right, when quarterstaff is in item_db
- //getitem "QuarterStaff", 1;
- mes "DEBUG: GET ACORN INSTEAD OF QUARTERSTAFF";
+ //getitem "WoodenStaff", 1;
+ mes "DEBUG: GET ACORN INSTEAD OF WOODENSTAFF";
getitem "acorn", 1;
goto L_Visit;
@@ -102,6 +125,72 @@ L_Full_Inv:
mes "\"Oh, it seems you carry so much stuff - I will keep it for you until you can take it.\"";
close;
+// Fight logic
+OnTimer5000:
+ setnpctimer 0;
+ if ($@FIGHT_YETI_STATUS != 0) goto L_CaveLogic;
+L_Return_1:
+ set $@FIGHT_YETI_PLAYER_COUNT, 0;
+ areatimer "031-3.gat", 80, 20, 160, 90, 10, "Cindy::onTick";
+ end;
+
+L_CaveLogic:
+ set $@FIGHT_YETI_ROUND_PEN, $@FIGHT_YETI_PLAYER_COUNT;
+ if ($@FIGHT_YETI_ROUND_PEN > 60) set $@FIGHT_YETI_ROUND_PEN, 60;
+ if ($@FIGHT_YETI_PLAYER_COUNT <= 0) goto L_CleanUp;
+ set $@FIGHT_YETI_ROUND_TIMER, $@FIGHT_YETI_ROUND_TIMER + 5; // Advance 5 seconds
+ if (mobcount("031-3.gat", "Cindy::onPetDeath") <= 0) goto L_NextWave;
+ if ($@FIGHT_YETI_ROUND_TIMER + $@FIGHT_YETI_ROUND_PEN >= 120) goto L_NextWave;
+ goto L_Return_1;
+
+L_NextWave:
+ set $@FIGHT_YETI_ROUND_TIMER, 0;
+
+ set $@FIGHT_YETI_WAVE, $@FIGHT_YETI_WAVE + 1;
+ if ($@FIGHT_YETI_WAVE >= 10) goto L_CleanUp;
+//TODO: adjust number of yetis spawned
+ set $@FIGHT_YETI_NUMBER, $@FIGHT_YETI_WAVE + $@FIGHT_YETI_WAVE * $@FIGHT_YETI_PLAYER_COUNT/30;
+
+ set $@YETI_SUMMON, 0;
+
+ areamonster "031-3.gat", 80, 20, 160, 90, "", 1072, $@FIGHT_YETI_NUMBER, "Cindy::onPetDeath";
+ goto L_Return_1;
+
+// Called on each player once every 5 seconds
+onTick:
+ if (isdead(0)) end;
+ set $@FIGHT_YETI_PLAYER_COUNT, $@FIGHT_YETI_PLAYER_COUNT + 1;
+ end;
+
+onPetDeath:
+ end;
+
+onInit:
+ initnpctimer;
+ stopnpctimer;
+L_CleanUp:
+ areatimer "031-3.gat", 80, 20, 160, 90, 10, "Cindy::onReward";
+ set $@FIGHT_YETI_STATUS, 0;
+ set $@FIGHT_YETI_PLAYER_COUNT, 0;
+ set $@FIGHT_YETI_WAVE, 1;
+ set $@FIGHT_YETI_ROUND_TIMER, 0;
+ killmonster "031-3.gat", "Cindy::onPetDeath";
+ stopnpctimer;
+ setnpctimer 0;
+ end;
+
+onReward:
+ if (isdead(0)) end;
+//TODO: determine, if and how many boss points should be added
+ set BOSS_POINTS, BOSS_POINTS + 100;
+//TODO: check, if two messages for the player works
+ message strcharinfo(0), "You gain 100 Boss Points giving you a total of " + BOSS_POINTS;
+ set @rescue_Cindy, 2;
+ callsub S_Update_Mask;
+ message strcharinfo(0), "Cindy looks relieved and as if she wants to talk with you.";
+ end;
+
+/////////
S_Update_Mask:
set QUEST_Nivalis_state,
(QUEST_Nivalis_state & ~(@Q_Nivalis_state_MASK))