// 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;
}