function|script|QuestTreeTrigger { set @Q_MASK, NIBBLE_2_MASK; set @Q_SHIFT, NIBBLE_2_SHIFT; set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT; set @Q_status_lower, @Q_status & 3; set @Q_status, (@Q_status & 12) >> 2; if (@Q_status & @flag) goto L_Close; // already did that if (@flag == 2) goto L_hug; goto L_cont; L_cont: set @Q_status, @Q_status | @flag; callsub S_update_var; if (@Q_status != 3) goto L_Close; if (MAGIC_FLAGS & MFLAG_DID_CUTTREE) goto L_Close; mes "Maybe it is just a trick of the light, but you can't help but think that the tree looks different... healthier, almost younger."; mes "[20000 experience points]"; getexp 20000, 0; set @value, 15; callfunc "QuestSagathaHappy"; goto L_Close; L_hug: mes "You hug the tree."; next; goto L_cont; L_Close: set @Q_MASK, 0; set @Q_SHIFT, 0; set @Q_status, 0; set @Q_status_lower, 0; set @Q_wr_status, 0; set @value, 0; return; S_update_var: set @Q_wr_status, (@Q_status << 2) | @Q_status_lower; set QUEST_MAGIC, (QUEST_MAGIC & ~(@Q_MASK) | (@Q_wr_status << @Q_SHIFT)); return; } function|script|QuestTreeTouch { set @Q_MASK, NIBBLE_2_MASK; set @Q_SHIFT, NIBBLE_2_SHIFT; set @Q_status, (QUEST_MAGIC & @Q_MASK) >> @Q_SHIFT; set @Q_status, (@Q_status & 12) >> 2; if (@Q_status == 3) goto L_happy; if ((MAGIC_FLAGS & (MFLAG_KNOWS_DRUIDTREE | MFLAG_KNOWS_CUTTREE)) == MFLAG_KNOWS_CUTTREE) goto L_cut; if ((MAGIC_FLAGS & (MFLAG_KNOWS_DRUIDTREE | MFLAG_KNOWS_CUTTREE)) == MFLAG_KNOWS_DRUIDTREE) goto L_water; if ((MAGIC_FLAGS & (MFLAG_KNOWS_DRUIDTREE | MFLAG_KNOWS_CUTTREE)) > 0) //i.e., both are set goto L_both; mes "[Dying Tree]"; mes "You see a strange tree."; goto L_Close; L_cut: mes "[Dying Tree]"; mes "This must be the tree that the earth spirit was referring to."; next; menu "Cut off a branch", L_do_cut, "Leave it alone", L_Close; L_water: mes "[Dying Tree]"; mes "This must be the druid tree."; next; menu "Water the tree", L_givewater, "Kiss tree", L_kiss, "Leave it alone", L_Close; L_both: mes "[Dying Tree]"; mes "This must be the druid tree that Wyara and the earth spirit were talking about."; next; menu "Water the tree", L_givewater, "Kiss tree", L_kiss, "Cut off a branch", L_do_cut, "Leave it alone", L_Close; L_givewater: if (countitem("BottleOfWater") < 1) goto L_no_water; delitem "BottleOfWater", 1; getitem "EmptyBottle", 1; mes "[Dying Tree]"; mes "You pour a bottle of water into the sand. The water dissipates quickly, without any effect."; goto L_Close; L_no_water: mes "[Dying Tree]"; mes "You don't have any water."; goto L_Close; L_kiss: mes "[Dying Tree]"; mes "You pluck out a splinter from your lip."; mes "Somehow, you don't think that this helped."; goto L_Close; L_do_cut: if (countitem("BoneKnife") < 1) goto L_no_boneknife; if (MAGIC_FLAGS & MFLAG_DID_CUTTREE) goto L_really_cut; mes "[Dying Tree]"; mes "You find a suitable branch and put your bone knife in position."; mes "Holding the branch, you have an uneasy feeling – as if something inside the tree were trying to resist you..."; mes "Do you want to continue cutting?"; next; menu "Nah... better not.", L_Close, "Yes, let's cut!", L_really_cut; L_really_cut: set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_DID_CUTTREE; getitem "DruidTreeBranch", 1; mes "[Dying Tree]"; mes "You cut off a branch from the tree."; mes "For an instant, you have an uneasy feeling, as if the branch were writhing in your hand..."; goto L_Close; L_no_boneknife: mes "[Dying Tree]"; mes "Try as you might, you can't seem to find a way to cut off a branch. Perhaps you need a different tool for cutting?"; goto L_Close; L_happy: mes "[Druid Tree]"; mes "The tree looks younger and healthier now."; goto L_Close; L_Close: set @Q_MASK, 0; set @Q_SHIFT, 0; set @Q_status, 0; return; } 006-1,82,59,0|script|#DruidTree0#_M|400 { callfunc "QuestTreeTouch"; close; }