function script GetTorchColor { if (@Torch < 0 || @Torch > 2) goto L_Error; @Mask = 15; @shift = 4 * @Torch; @TorchColor = (OrumQuestTorch >> @shift) & @Mask; return; L_Error: mes "Torch number is out of range."; close2; return; } function script SetTorchColor { if (@Torch < 0 || @Torch > 2) goto L_Error; if (@TorchColor < 1 || @TorchColor > 12) goto L_Error2; @Mask = (15 << (4 * @Torch)); OrumQuestTorch = (OrumQuestTorch & (~(@Mask))) | @TorchColor << (4 * @Torch); return; L_Error: mes "Torch number is out of range."; close2; return; L_Error2: mes "Torch color is out of range."; close2; return; } function script GetTorchIntensity { if (@Torch < 0 || @Torch > 2) goto L_Error; @Mask = 15; @shift = 4 * (@Torch + 3); @TorchIntensity = (OrumQuestTorch >> @shift) & @Mask; return; L_Error: mes "Torch number is out of range."; close2; return; } function script SetTorchIntensity { if (@Torch < 0 || @Torch > 2) goto L_Error; if (@TorchIntensity < 0 || @TorchIntensity > 2) goto L_Error2; @Mask = (15 << (4 * (@Torch + 3))); OrumQuestTorch = (OrumQuestTorch & (~(@Mask))) | @TorchIntensity << (4 * (@Torch + 3)); return; L_Error: mes "Torch number is out of range."; close2; return; L_Error2: mes "Torch intensity is out of range."; close2; return; } function script DoneWithTorches { if (getq(MagicQuest_DarkMage) < 11 && getq(MagicQuest_DarkMage) >= 8) goto L_Return; if (getq(MagicQuest_DarkMage) < 7) goto L_Different; if (getq(MagicQuest_DarkMage) >= 11) mes "The flame on the torch looks ordinary. Lowering the final barrier seems to have drained them of their magic."; if (getq(MagicQuest_DarkMage) < 8) mes "Without that powder the note mentions there isn't much you can do with this torch."; close2; goto L_Return; L_Different: mes "The flame on this torch looks different than the rest. You better tell Orum about it before doing anything."; setq(MagicQuest_DarkMage, 6); close2; goto L_Return; L_Return: return; } function script TorchLoop { // Variables used here: // @Torch - pass before calling // @TorchColor - initialized here, updated throughout // @TorchIntensity - initialized here, updated throughout callfunc "GetTorchColor"; callfunc "GetTorchIntensity"; setarray @colors$, "transparent", "red", "dark orange", "orange", "light orange", "yellow", "light green", "green", "dark green", "blue", "dark purple", "purple", "light purple"; setarray @intensities$, "calm", "bright", "blinding"; mes "Looking closely you notice that this torch is not like the others. This one has a " + @intensities$[@TorchIntensity] + " ##B" + @colors$[@TorchColor] + "##b tint to it."; goto L_Color_Loop; L_Color_Loop: menu "Add Red Powder", L_Use_Red, "Add Yellow Powder", L_Use_Yellow, "Add Blue Powder", L_Use_Blue, "Leave it alone.", L_Leave; L_Leave: mes "The flame flickers as if it's laughing at you."; close2; return; L_Use_Red: if (countitem("RedPowder") < 1) goto L_No_Powder; delitem "RedPowder", 1; // 0 1 2 3 4 5 6 7 8 9 a b c // T R o Y g B p // ^ < < < < , X . > > > > if (@TorchColor == 1) goto L_WrongColor; if (2 <= @TorchColor && @TorchColor <= 5) goto L_Color_Dec; if (@TorchColor == 6) goto L_Color_Dec_Wrong; if (@TorchColor == 7) goto L_WrongColor; if (@TorchColor == 8) goto L_Color_Inc_Wrong; if (9 <= @TorchColor && @TorchColor <= 12) goto L_Color_Inc; // work around an old bug if (@TorchColor == 0) @TorchColor = 1; goto L_Show_Color; L_Use_Yellow: if (countitem("YellowPowder") < 1) goto L_No_Powder; delitem "YellowPowder", 1; // 0 1 2 3 4 5 6 7 8 9 a b c // T R o Y g B p // > > > > ^ < < < < , X . if (1 <= @TorchColor && @TorchColor <= 4) goto L_Color_Inc; if (@TorchColor == 5) goto L_WrongColor; if (6 <= @TorchColor && @TorchColor <= 9) goto L_Color_Dec; if (@TorchColor == 10) goto L_Color_Dec_Wrong; if (@TorchColor == 11) goto L_WrongColor; if (@TorchColor == 12) goto L_Color_Inc_Wrong; // work around an old bug if (@TorchColor == 0) @TorchColor = 5; goto L_Show_Color; L_Use_Blue: if (countitem("BluePowder") < 1) goto L_No_Powder; delitem "BluePowder", 1; // 0 1 2 3 4 5 6 7 8 9 a b c // T R o Y g B p // < , X . > > > > ^ < < < if (@TorchColor == 1) goto L_Color_Dec; if (@TorchColor == 2) goto L_Color_Dec_Wrong; if (@TorchColor == 3) goto L_WrongColor; if (@TorchColor == 4) goto L_Color_Inc_Wrong; if (5 <= @TorchColor && @TorchColor <= 8) goto L_Color_Inc; if (@TorchColor == 9) goto L_WrongColor; if (10 <= @TorchColor && @TorchColor <= 12) goto L_Color_Dec; // work around an old bug if (@TorchColor == 0) @TorchColor = 9; goto L_Show_Color; L_No_Powder: mes "You notice you're all out of that color of powder. Perhaps Orum can make you some more."; close2; return; L_Color_Dec: @TorchColor = @TorchColor - 1; if (@TorchColor == 0) @TorchColor = 12; goto L_Show_Color; L_Color_Dec_Wrong: @TorchColor = @TorchColor - 1; if (@TorchColor == 0) @TorchColor = 12; goto L_WrongColor; L_Color_Inc_Wrong: @TorchColor = @TorchColor + 1; if (@TorchColor == 13) @TorchColor = 1; goto L_WrongColor; L_Color_Inc: @TorchColor = @TorchColor + 1; if (@TorchColor == 13) @TorchColor = 1; goto L_Show_Color; L_Show_Color: callfunc "SetTorchColor"; misceffect 5; mes "As your pour the powder into the flame you can see its tint transform to a " + @intensities$[@TorchIntensity] + " ##B" + @colors$[@TorchColor] + "##b."; goto L_Color_Loop; L_WrongColor: callfunc "SetTorchColor"; @TorchIntensity = @TorchIntensity + 1; if (@TorchIntensity > 2) goto L_Failed; callfunc "SetTorchIntensity"; misceffect 5; mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " ##B" + @colors$[@TorchColor] + "##b."; goto L_Color_Loop; L_Failed: mes "As you pour the powder into the flame it flares violently before bursting into your face!"; misceffect 5; misceffect 16; @TorchIntensity = 0; callfunc "SetTorchIntensity"; die(); close2; return; } 009-4,68,21,0 script Torch#1 NPC400,{ callfunc "PCtoNPCRange"; if(@npc_check) end; callfunc "DoneWithTorches"; @Torch = 0; callfunc "TorchLoop"; // unreachable end; } 009-4,67,42,0 script Torch#2 NPC400,{ callfunc "PCtoNPCRange"; if(@npc_check) end; callfunc "DoneWithTorches"; @Torch = 1; callfunc "TorchLoop"; // unreachable end; } 009-4,33,86,0 script Torch#3 NPC400,{ callfunc "PCtoNPCRange"; if(@npc_check) end; callfunc "DoneWithTorches"; @Torch = 2; callfunc "TorchLoop"; // unreachable end; }