// 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.";
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, 501, 502, 509, 527, 534, 535, 539, 541, 684, 685, 686, 687;
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;
L_nloop:
set @k, @items[@n];
if (countitem(@k) == 0)
goto L_nloop_skip;
set @name$, getitemname(@k);
set @choice$[@n], @name$;
set @choice_idx[@n], @k;
set @choice_eat[@n], @itemeat[@n];
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 == 687)
goto L_do_heal;
mes "[Injured Mouboo]";
mes "Unfortunately, it seems to have had no effect.";
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 2076, 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;
}