diff options
Diffstat (limited to 'npc/functions')
-rw-r--r-- | npc/functions/magic.txt | 138 | ||||
-rw-r--r-- | npc/functions/mob_points.txt | 35 |
2 files changed, 168 insertions, 5 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; } |