1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
|
// Sagatha the witch, expert for nature and ether 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 Ether Magic]";
set @Q_status, @STATUS_STUDENT;
callsub S_update_var;
getexp 5000, 0;
if (getskilllv(SKILL_MAGIC_ETHER) < 2)
setskill SKILL_MAGIC_ETHER, 2;
next;
mes "[Sagatha the Witch]";
mes "\"In the future, I will teach you nature and ether 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;
}
|