// Sagatha the witch, expert for nature and astral magic //---------------------------------------- function script QuestSagathaHappy { set @unhappiness, (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT; if (@unhappiness < @value) goto L_zero; set @unhappiness, @unhappiness - @value; goto L_write; L_zero: set @unhappiness, 0; L_write: set QUEST_MAGIC, (QUEST_MAGIC & ~NIBBLE_3_MASK) | (@unhappiness << NIBBLE_3_SHIFT); return; } //---------------------------------------- function script QuestSagathaAnnoy { set @unhappiness, (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT; if ((@unhappiness + @value) > 15) goto L_max; set @unhappiness, @unhappiness + @value; goto L_write; L_max: set @unhappiness, 15; L_write: set QUEST_MAGIC, (QUEST_MAGIC & ~NIBBLE_3_MASK) | (@unhappiness << NIBBLE_3_SHIFT); return; } function script SagathaStatus { set @mexp, MAGIC_EXPERIENCE & 65535; set @has_magic, getskilllv(SKILL_MAGIC); set @evil, 0; set @good, 0; set @unhappy, (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT; set @mouboo, ((QUEST_MAGIC & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT) & 3; if (@mouboo == 3) set @good, @good + 1; if (@mouboo == 2) set @evil, 1; if (@mouboo == 1) set @evil, 1; if (MAGIC_FLAGS & MFLAG_DID_CUTTREE) set @evil, 1; set @druid, (((QUEST_MAGIC & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT) & 12) >> 2; if (@druid == 3) set @good, @good + 1; return; } //---------------------------------------- 013-1.gat,131,24,0 script Sagatha#_M 167,{ callfunc "SagathaStatus"; set @Q_MASK, NIBBLE_4_MASK | NIBBLE_5_MASK; set @Q_SHIFT, NIBBLE_4_SHIFT; set @STATUS_INITIAL, 0; set @STATUS_STUDENT, 1; // N10 set @STATUS_STUDENT_A10, 2; set @STATUS_STUDENT_A11, 3; set @STATUS_STUDENT_A12, 4; set @STATUS_STUDENT_N11, 5; set @STATUS_STUDENT_LEVEL_3, 6; set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT; if (MAGIC_FLAGS & MFLAG_KNOWS_SAGATHA) mes "[Sagatha the Witch]"; if (!(MAGIC_FLAGS & MFLAG_KNOWS_SAGATHA)) mes "[Witch]"; if (@evil) goto L_evil; if (@unhappy > 10) goto L_unhappy; if (MAGIC_FLAGS & MFLAG_KNOWS_SAGATHA) goto L_wb; mes "Before you stands a beautiful woman, dressed in dark purple robes and wearing a witch's hat."; if (Sex) mes "She looks at you suspiciously."; if (!Sex) mes "She looks at you impassively."; next; menu "Who are you?", -, "What's your name?", L_intro_name, "Hello! My name is " + strcharinfo(0) + ".", L_intro_givename, "Goodbye.", L_close; mes "[Witch]"; mes "\"I am what you humans call a witch. I am a human who has chosen all living creatures as what you call family.\""; next; menu "No, I mean... what's your name?", L_intro_name, "Hello! My name is " + strcharinfo(0) + ".", L_intro_givename, "Uh.... goodbye.", L_close; close; L_intro_name: mes "[Sagatha the Witch]"; mes "\"They call me Sagatha.\""; set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_KNOWS_SAGATHA; next; goto L_main; L_intro_givename: mes "[Witch]"; mes "\"Ah.\""; next; menu "What's yours?", L_intro_name, "Uhm... bye.", -; close; L_evil: mes "The witch's eyes flare up in anger as she notices you, and she turns away from you."; mes "Whatever the reason, she doesn't seem to like you."; next; close; L_unhappy: mes "The witch glares at you in anger."; mes "\"I wonder if you can still sleep after killing those innocent forest creatures!"; mes "I am sure that they will come back to haunt you in your dreams!\""; next; close; L_wb: if (@good > 1) mes "Sagatha nods as she notices you."; if (@good == 1) mes "Sagatha raises an eyebrow as you address her."; if (@good == 0) mes "Sagatha glances at you, suspicion evident in her eyes."; next; L_main: if (@Q_status) menu "Can you explain magic to me?", L_explain_magic, "Can you teach me more magic?", L_teach, "What do you know about...", L_Question; if (!@Q_status) menu "Can you explain magic to me?", L_explain_magic, "Can you teach me magic?", L_teach_initial, "What do you know about...", L_Question; close; L_teach_initial: if (@good < 2) goto L_teach_initial_nogood; if (getskilllv(SKILL_MAGIC_NATURE) < 2) goto L_teach_initial_nonature; mes "[Sagatha the Witch]"; mes "She nods."; mes "\"For now, yes. But you will have to prove that you really care about more than yourself.\""; next; mes "[Sagatha the Witch]"; mes "She snaps her fingers, and without warning you begin to acutely sense the magical energies around you, for a brief instant!"; mes "[5000 experience points]"; mes "[Level 2 in Astral Magic]"; set @Q_status, @STATUS_STUDENT; callsub S_update_var; getexp 5000, 0; if (getskilllv(SKILL_MAGIC_ASTRAL) < 2) setskill SKILL_MAGIC_ASTRAL, 2; next; mes "[Sagatha the Witch]"; mes "\"In the future, I will teach you nature and astral magic. For the other schools there are better teachers around.\""; next; goto L_main; L_teach_initial_nogood: mes "[Sagatha the Witch]"; mes "\"I don't take strangers as students.\""; next; goto L_main; L_teach_initial_nonature: mes "[Sagatha the Witch]"; mes "\"I might, but you don't even understand the basics of nature magic.\""; next; goto L_main; L_explain_magic: mes "[Sagatha the Witch]"; mes "\"No.\""; next; goto L_main; L_teach: if (@Q_status == @STATUS_STUDENT) goto L_teach_N10; if (@Q_status == @STATUS_STUDENT_A10) goto L_teach_A10; if (@Q_status == @STATUS_STUDENT_A11) goto L_teach_A11; if (@Q_status == @STATUS_STUDENT_A12) goto L_teach_A12; if (@Q_status == @STATUS_STUDENT_N11) goto L_teach_N11; mes "[Sagatha the Witch]"; mes "\"Not yet. You have to ask the mana seed to give you more power.\""; next; goto L_main; L_practice: mes "[1000 experience points]"; set @Q_status, @Q_status + 1; callsub S_update_var; getexp 1000,0; next; mes "[Sagatha the Witch]"; mes "\"Now go and practice.\""; next; goto L_main; L_teach_N10: if (@mexp < 150) goto L_teach_noexp; mes "[Sagatha the Witch]"; mes "\"First, a nature spell. Take a cocoon shell. Hold it in your hand. Feel its lightness.\""; next; mes "[Sagatha the Witch]"; mes "\"Now whisper '" + getspellinvocation("flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\""; goto L_practice; L_teach_A10: if (@mexp < 250) goto L_teach_noexp; mes "[Sagatha the Witch]"; mes "\"To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.\""; next; mes "[Sagatha the Witch]"; mes "\"Then say '" + getspellinvocation("barrier") + "' and let the musroom's power take over.\""; goto L_practice; L_teach_A11: if (@mexp < 350) goto L_teach_noexp; mes "[Sagatha the Witch]"; mes "\"If you must fight, call allies. You can call scorpions with a scorpion stinger. Hold up the stinger and call out to them: '" + getspellinvocation("summon-scorps") + "'.\""; goto L_practice; L_teach_A12: if (@mexp < 450) goto L_teach_noexp; mes "[Sagatha the Witch]"; mes "\"You can call red scorpions, too. But for them you must call out '" + getspellinvocation("summon-red-scorps") + "' instead.\""; goto L_practice; L_teach_N11: if (@mexp < 550) goto L_teach_noexp; mes "[Sagatha the Witch]"; mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + getspellinvocation("protect") + "', then draw its hardness into your skin.\""; next; mes "[Sagatha the Witch]"; mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + getspellinvocation("protect") + "'.\""; goto L_practice; L_teach_noexp: mes "[Sagatha the Witch]"; mes "\"You must practice more first.\""; next; goto L_main; L_Question: callfunc "MagicTalkOptionsSetup"; set @ignore, @QQ_SAGATHA; callfunc "MagicTalkMenu"; if (@c == 0) goto L_main; if (@c == @QQ_ELANORE) goto L_Q_elanore; if (@c == @QQ_MANASEED) goto L_Q_manaseed; if (@c == @QQ_MANAPOTION) goto L_Q_manapotion; if (@c == @QQ_WYARA) goto L_Q_wyara; if (@c == @QQ_AULDSBEL) goto L_Q_auldsbel; if (@c == @QQ_IMP) goto L_Q_imp; if (@c == @QQ_OLDWIZ) goto L_Q_old_wizard; mes "[Sagatha the Witch]"; mes "\"That doesn't concern you.\""; next; goto L_main; L_Q_old_wizard: mes "[Sagatha the Witch]"; mes "\"A kind and wise wizard.\""; next; goto L_main; L_Q_imp: mes "[Sagatha the Witch]"; mes "\"He is an evil and cruel one. He lies and cheats and will try to take advantage of you. Stay away from him.\""; next; goto L_main; L_Q_elanore: mes "[Sagatha the Witch]"; mes "\"Elanore is the Tulimshar town healer.\""; next; goto L_main; L_Q_manaseed: mes "[Sagatha the Witch]"; if (!@has_magic && (MAGIC_FLAGS & MFLAG_TOUCHED_MANASEED)) goto L_Q_manaseed_unabsorbed; if (@has_magic) goto L_Q_manaseed_m; mes "\"There is a mana seed around here, but I don't see how this concerns you.\""; next; goto L_main; L_Q_manaseed_unabsorbed: mes "\"If the mana seed didn't pass its magic to you, you clearly aren't attuned to magic.\""; next; goto L_main; L_Q_manaseed_m: mes "\"You were lucky that the mana seed gave you its magic. I hope that you will use this power for something good now.\""; next; goto L_main; L_Q_manapotion: mes "[Sagatha the Witch]"; mes "\"I won't make one without a cauldron, that would be wasteful. And I'm not going to start carrying a cauldron around.\""; next; goto L_main; L_Q_wyara: mes "[Sagatha the Witch]"; mes "\"Wyara decided to live with humans, in Hurnscald. She tries to make the world a better place in her own way. Please be kind to her, she is a very good person.\""; next; goto L_main; L_Q_auldsbel: mes "[Sagatha the Witch]"; mes "She frowns."; mes "\"He's a transmutation wizard, member of the northern council. Reasonably competent wizard, too.\""; next; goto L_main; L_close: close; S_update_var: set QUEST_MAGIC, (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; }