summaryrefslogtreecommitdiff
path: root/npc/009-4/torches.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/009-4/torches.txt')
-rwxr-xr-xnpc/009-4/torches.txt286
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;
+}