diff options
Diffstat (limited to 'npc/functions/magic.txt')
-rw-r--r-- | npc/functions/magic.txt | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/npc/functions/magic.txt b/npc/functions/magic.txt new file mode 100644 index 00000000..470323c2 --- /dev/null +++ b/npc/functions/magic.txt @@ -0,0 +1,135 @@ +// 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; +} + +// ------------------------------------------------------------ +// Print and run menu for choice of things to ask about +// Ignores the entry in @ignore +// Returns the result in `@c, or `0' +// ------------------------------------------------------------ + +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]; +} |