diff options
Diffstat (limited to 'npc/009-4/torches.txt')
-rwxr-xr-x | npc/009-4/torches.txt | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/npc/009-4/torches.txt b/npc/009-4/torches.txt new file mode 100755 index 00000000..fe1fc187 --- /dev/null +++ b/npc/009-4/torches.txt @@ -0,0 +1,286 @@ +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 (OrumQuest < 11 && OrumQuest >= 8) + goto L_Return; + + if (OrumQuest < 7) goto L_Different; + + if (OrumQuest >= 11) + mes "The flame on the torch looks ordinary. Lowering the final barrier seems to have drained them of their magic."; + + if (OrumQuest < 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."; + OrumQuest = 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"; + heal -Hp, 0; + 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; +} |