summaryrefslogtreecommitdiff
path: root/npc/functions
diff options
context:
space:
mode:
Diffstat (limited to 'npc/functions')
-rw-r--r--npc/functions/magic.txt138
-rw-r--r--npc/functions/mob_points.txt35
-rw-r--r--npc/functions/slot_machine.txt6
3 files changed, 171 insertions, 8 deletions
diff --git a/npc/functions/magic.txt b/npc/functions/magic.txt
new file mode 100644
index 00000000..0094e94a
--- /dev/null
+++ b/npc/functions/magic.txt
@@ -0,0 +1,138 @@
+// Basic magic functionality
+
+// Magic system uses:
+// - MAGIC_EXP (magic experience points, gained for spellcasting)
+// - MAGIC_FLAGS
+// Magic quests use:
+// - QUEST_MAGIC
+// - QUEST_MAGIC2
+
+// ------------------------------------------------------------
+// Gain initial magic skill
+// ------------------------------------------------------------
+function script MagicGainBasic {
+
+ set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_DRANK_POTION;
+ close;
+
+}
+
+// ------------------------------------------------------------
+// Initialise Menu for selecting a choice of things to ask about
+// ------------------------------------------------------------
+function script MagicTalkOptionsSetup {
+ set @QQ_ELANORE, 1;
+ set @QQ_MANASEED, 2;
+ set @QQ_MANAPOTION, 3;
+ set @QQ_WYARA, 4;
+ set @QQ_SAGATHA, 5;
+ set @QQ_AULDSBEL, 6;
+ set @QQ_IMP, 7;
+ set @QQ_OLDWIZ, 8;
+ return;
+}
+
+// ------------------------------------------------------------
+// Print and run menu for choice of things to ask about
+// Ignores the entry in @ignore
+// Returns the result in @c, or returns 0 if there is no result
+// ------------------------------------------------------------
+
+
+function script MagicTalkMenu {
+ setarray @choice$, "", "", "", "", "", "", "", "", "";
+ set @choices_nr, 0;
+ setarray @choice_idx, 0, 0, 0, 0, 0, 0, 0, 0, 0;
+
+ if (@ignore == @QQ_ELANORE)
+ goto L_Q_post_elanore;
+ set @choice$[@choices_nr], "...Elanore the Healer?";
+ set @choice_idx[@choices_nr], @QQ_ELANORE;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_elanore:
+
+ if (@ignore == @QQ_MANASEED)
+ goto L_Q_post_manaseed;
+ if (!(MAGIC_FLAGS & (MFLAG_KNOWS_MANASEED | MFLAG_MANASEED_RUMOUR)))
+ goto L_Q_post_manaseed;
+ set @choice$[@choices_nr], "...the Mana Seed?";
+ set @choice_idx[@choices_nr], @QQ_MANASEED;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_manaseed:
+
+ if (@ignore == @QQ_MANAPOTION)
+ goto L_Q_post_manapotion;
+ if (!(MAGIC_FLAGS & MFLAG_KNOWS_MANAPOTION))
+ goto L_Q_post_manapotion;
+ set @choice$[@choices_nr], "...Mana Potions?";
+ set @choice_idx[@choices_nr], @QQ_MANAPOTION;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_manapotion:
+
+ if (@ignore == @QQ_WYARA)
+ goto L_Q_post_wyara;
+ if (!(MAGIC_FLAGS & MFLAG_KNOWS_WYARA))
+ goto L_Q_post_wyara;
+ set @choice$[@choices_nr], "...Wyara the Witch?";
+ set @choice_idx[@choices_nr], @QQ_WYARA;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_wyara:
+
+ if (@ignore == @QQ_SAGATHA)
+ goto L_Q_post_sagatha;
+ if (!(MAGIC_FLAGS & MFLAG_KNOWS_SAGATHA))
+ goto L_Q_post_sagatha;
+ set @choice$[@choices_nr], "...Sagatha the Witch?";
+ set @choice_idx[@choices_nr], @QQ_SAGATHA;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_sagatha:
+
+ if (@ignore == @QQ_AULDSBEL)
+ goto L_Q_post_auldsbel;
+ if (!(MAGIC_FLAGS & MFLAG_KNOWS_AULDSBEL))
+ goto L_Q_post_auldsbel;
+ set @choice$[@choices_nr], "...Auldsbel the Wizard?";
+ set @choice_idx[@choices_nr], @QQ_AULDSBEL;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_auldsbel:
+
+ if (@ignore == @QQ_OLDWIZ)
+ goto L_Q_post_oldwiz;
+ if (!(MAGIC_FLAGS & MFLAG_KNOWS_OLD_WIZARD))
+ goto L_Q_post_oldwiz;
+ set @choice$[@choices_nr], "...the Old Wizard?";
+ set @choice_idx[@choices_nr], @QQ_OLDWIZ;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_oldwiz:
+
+ if (@ignore == @QQ_IMP)
+ goto L_Q_post_imp;
+ if (!(MAGIC_FLAGS & MFLAG_KNOWS_IMP))
+ goto L_Q_post_imp;
+ set @choice$[@choices_nr], "...the Earth Spirit in the desert well?";
+ set @choice_idx[@choices_nr], @QQ_IMP;
+ set @choices_nr, @choices_nr + 1;
+L_Q_post_imp:
+
+ set @choice$[@choices_nr], "...never mind.";
+ set @choice_idx[@choices_nr], 0;
+ set @choices_nr, @choices_nr + 1;
+
+ menu @choice$[0], -,
+ @choice$[1], -,
+ @choice$[2], -,
+ @choice$[3], -,
+ @choice$[4], -,
+ @choice$[5], -,
+ @choice$[6], -,
+ @choice$[7], -,
+ @choice$[8], -;
+
+ set @menu, @menu - 1;
+
+ if (@menu >= @choices_nr)
+ set @menu, 0;
+
+ set @c, @choice_idx[@menu];
+ return @c;
+}
diff --git a/npc/functions/mob_points.txt b/npc/functions/mob_points.txt
index 9e8dad92..ede2d474 100644
--- a/npc/functions/mob_points.txt
+++ b/npc/functions/mob_points.txt
@@ -5,13 +5,13 @@ function script MobPoints {
setarray @points,
1, // Maggot
- 2, // Scorpion
- 20, // Red Scorpion
+ 2, // Scorpion [1003]
+ 20, // Red Scorpion [1004]
10, // Green Slime
30, // Giant Maggot
15, // Yellow Slime
25, // Red Slime
- 45, // Black Scorpion
+ 45, // Black Scorpion [1009]
50, // Snake
4, // Fire Goblin
55, // Spider
@@ -22,7 +22,7 @@ function script MobPoints {
2, // Bat
16, // Pinkie
17, // Shroom
- 14, // Fluffy
+ 14, // Fluffy [1020]
25, // Cave Snake
100, // Jack-O
80, // Fire Skull
@@ -30,7 +30,7 @@ function script MobPoints {
20, // Stumpy
70, // Mountain Snake
15, // Easter Fluffy
- 40, // Mouboo
+ 40, // Mouboo [1028]
0, // Mauve Plant
0, // Gamboge Plant
0, // Cobalt Plant
@@ -38,5 +38,30 @@ function script MobPoints {
20, // Sea Slime
0; // Silk Worm
+
if (MPQUEST == 1) set Mobpt, Mobpt + @points[@mobID - 1002];
+
+ if ((@mobID == 1003) || (@mobID == 1004) || (@mobID == 1009))
+ goto L_good;
+
+
+ // Attitude adjustment for the witch (can we refactor this to another function? Not sure about max. recursion depth)
+
+ set @value, 0;
+ if (@mobID == 1028)
+ set @value, 4;
+ if (@mobID == 1020)
+ set @value, 3;
+
+ if (@value == 0)
+ goto L_end;
+
+ callfunc "QuestSagathaAnnoy";
+ goto L_end;
+
+L_good:
+ set @value, 1;
+ callfunc "QuestSagathaHappy";
+L_end:
+ set @value, 0;
}
diff --git a/npc/functions/slot_machine.txt b/npc/functions/slot_machine.txt
index 024a2e8a..8f4482cc 100644
--- a/npc/functions/slot_machine.txt
+++ b/npc/functions/slot_machine.txt
@@ -9,8 +9,8 @@ function script SlotMachine {
close;
L_Play:
- if(countitem(503) < 1) goto L_NoCoin;
- delitem 503, 1;
+ if(countitem("CasinoCoins") < 1) goto L_NoCoin;
+ delitem "CasinoCoins", 1;
set @Temp1,rand(7);
set @Temp2,rand(7);
set @Temp3,rand(7);
@@ -22,7 +22,7 @@ L_Play:
if(@Temp1 != @Temp3) goto L_Lost;
mes "Congratulations! You won!";
mes "You get 10 casino coins";
- getitem 503, 10;
+ getitem "CasinoCoins", 10;
close;
L_Lost: