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
|
// The following auxiliary function is used both by appropriate magic and within the regular script:
function script QuestMoubooHeal {
set @Q_MASK, NIBBLE_2_MASK;
set @Q_SHIFT, NIBBLE_2_SHIFT;
set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT;
set @Q_status_upper, @Q_status & 12;
set @Q_status, @Q_status & 3;
set @STATE_INITIAL, 0;
set @STATE_HEALED_MOUBOO, 3;
if (@Q_status != @STATE_INITIAL)
goto L_nothing;
set @Q_status, @STATE_HEALED_MOUBOO;
callsub S_update_var;
mes "[Injured Mouboo]";
mes "A soft white glow surrounds the mouboo's leg, which slowly shifts back into place.";
mes "As the glow subsides, the mouboo gets up, carefully, and takes a few steps. It seems to be fully healed!";
mes "[5000 experience points]";
getexp 5000, 0;
next;
mes "[Injured Mouboo]";
mes "Visibly happy, the mouboo lies down on the ground and snuggles with a black piece of cloth it had been lying on.";
mes "The healing process must have been exhausting, for it is asleep in an instant.";
next;
set @value, 15;
callfunc "QuestSagathaHappy";
close;
L_nothing:
mes "Your spell has no effect.";
next;
close;
S_update_var:
set @Q_wr_status, @Q_status | @Q_status_upper;
set QUEST_MAGIC,
(QUEST_MAGIC & ~(@Q_MASK)
| (@Q_wr_status << @Q_SHIFT));
return;
}
012-1.gat,57,153,0 script Mouboo 171,{
set @Q_MASK, NIBBLE_2_MASK;
set @Q_SHIFT, NIBBLE_2_SHIFT;
set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT;
set @Q_status_upper, @Q_status & 12;
set @Q_status, @Q_status & 3;
set @STATE_INITIAL, 0;
set @STATE_KILLED_MOUBOO, 1;
set @STATE_TOOK_KILL_REWARD, 2;
set @STATE_HEALED_MOUBOO, 3;
if (@Q_status == @STATE_KILLED_MOUBOO)
goto L_dead;
if (@Q_status == @STATE_TOOK_KILL_REWARD)
goto L_took_reward;
if (@Q_status == @STATE_HEALED_MOUBOO)
goto L_healed;
mes "[Injured Mouboo]";
mes "You notice a mouboo lying on the ground, groaning, as if in pain.";
next;
L_menu:
menu
"Examine the mouboo", L_examine,
"Give the mouboo something", L_give,
"Kill the mouboo", L_kill,
"Leave", -;
close;
L_examine:
mes "[Injured Mouboo]";
mes "Looking closer, you notice that the mouboo's left hind leg is bent in a very unnatural angle-- that seems to be the cause for its pain.";
next;
mes "[Injured Mouboo]";
mes "You also notice that the mouboo is lying on top of what appears to be a black turtleneck sweater.";
mes "Do you want to pick up the sweater?";
next;
menu
"Yes.", L_pickup_alive,
"No.", L_menu;
goto L_menu;
L_pickup_alive:
mes "[Injured Mouboo]";
mes "The Mouboo groans and pushes your hand away. It seems to be rather fond of the sweater.";
next;
goto L_menu;
L_give:
set @items_nr, 12;
setarray @items$, "CactusDrink", "CactusPotion", "ChocolateBar", "Milk", "OrangeCupcake", "Apple", "Beer", "BottleOfWater", "TinyHealingPotion", "SmallHealingPotion", "MediumHealingPotion", "LargeHealingPotion";
setarray @itemeat, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0;
setarray @choice$, "", "", "", "", "", "", "", "", "", "", "", "";
set @choices_nr, 0;
setarray @choice_idx, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
setarray @choice_eat, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
set @n, 0;
set @ct, 0;
L_nloop:
set @k$, @items$[@n];
if (countitem(@k$) == 0)
goto L_nloop_skip;
set @name$, getitemname(@k);
set @choice$[@ct], @name$;
set @choice_idx$[@ct], @k$;
set @choice_eat[@ct], @itemeat[@n];
set @ct, @ct + 1;
L_nloop_skip:
set @n, @n+1;
if (@n < @items_nr)
goto L_nloop;
menu @choice$[0], -,
@choice$[1], -,
@choice$[2], -,
@choice$[3], -,
@choice$[4], -,
@choice$[5], -,
@choice$[6], -,
@choice$[7], -,
@choice$[8], -,
@choice$[9], -,
@choice$[10], -,
@choice$[11], -;
set @menu, @menu - 1;
set @choice$, @choice_idx[@menu];
set @choice_e, @choice_eat[@menu];
set @verb$, "drinks";
if (@choice_e)
set @verb$, "eats";
if (@choice$ && countitem(@choice$))
goto L_consume;
goto L_menu;
L_consume:
mes "[Injured Mouboo]";
mes "The mouboo " + @verb$ + " your " + getitemname(@choice$) + ".";
delitem @choice$, 1;
next;
if (@choice$ == "LargeHealingPotion")
goto L_do_heal;
mes "[Injured Mouboo]";
mes "Unfortunately, it seems to have had no effect.";
next;
goto L_menu;
L_do_heal:
callfunc "QuestMoubooHeal";
L_kill:
mes "[Injured Mouboo]";
if (BaseLevel > 44)
goto L_kill_success;
mes "The mouboo deflects your attack and counterattacks!";
mes "It misses you only barely.";
mes "Injured though it may be, this mouboo is still more than a match for you!";
next;
goto L_menu;
L_kill_success:
mes "After some wrestling, the mouboo succumbs to your attacks.";
mes "[100 experience points]";
getexp 100, 0;
set @Q_status, @STATE_KILLED_MOUBOO;
callsub S_update_var;
next;
L_dead:
mes "[Dead Mouboo]";
mes "The dead mouboo is lying on top of a black T-neck sweater.";
getinventorylist;
if (@inventorylist_count == 100)
goto L_nopickup;
getitem "BlackTNeckSweater", 1;
mes "You pull out the sweater and stuff it into your backpack.";
set @Q_status, @STATE_TOOK_KILL_REWARD;
callsub S_update_var;
next;
close;
L_took_reward:
mes "[Dead Mouboo]";
mes "You see a dead mouboo.";
next;
close;
L_nopickup:
mes "Unfortunately, you can't carry any more.";
next;
close;
L_healed:
mes "[Mouboo]";
mes "The mouboo is sleeping soundly, smiling in its dreams.";
next;
close;
S_update_var:
set @Q_wr_status, @Q_status | @Q_status_upper;
set QUEST_MAGIC,
(QUEST_MAGIC & ~(@Q_MASK)
| (@Q_wr_status << @Q_SHIFT));
return;
}
|