// 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; } // ------------------------------------------------------------ // Level up a skill // @SUP_id skill ID to level up // @SUP_lvl skill level to attain // @SUP_name$ name of the skill to level up // @SUP_xp # of experience points to award if the level up succeeds // ------------------------------------------------------------ function script SkillUp { if (getskilllv(@SUP_id) >= @SUP_lvl) goto L_shortcut; misceffect sfx_skillup, strcharinfo(0); setskill @SUP_id, @SUP_lvl; getexp @SUP_xp, 0; if (@SUP_xp) mes "[" + @SUP_xp + " experience points]"; mes "[Level " + @SUP_lvl + " in " + @SUP_name$ + "]"; return; L_shortcut: mes "[You already have level " + getskilllv(@SUP_id) + " in " + @SUP_name$ + "]"; return; }