From 9c9034116fab44475c9bad57b727a374fbd01ebf Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sat, 13 Apr 2013 10:16:10 -0700 Subject: Refactor torches to avoid a bug and make more consistent and obvious Also avoid some silliness with rand() --- world/map/npc/009-4/barriers.txt | 4 +- world/map/npc/009-4/orum.txt | 65 ++----- world/map/npc/009-4/orum_warps.txt | 6 +- world/map/npc/009-4/torches.txt | 361 +++++++++++++------------------------ world/map/npc/009-4/waric.txt | 1 + 5 files changed, 148 insertions(+), 289 deletions(-) (limited to 'world') diff --git a/world/map/npc/009-4/barriers.txt b/world/map/npc/009-4/barriers.txt index 9bc486d9..78635c54 100644 --- a/world/map/npc/009-4/barriers.txt +++ b/world/map/npc/009-4/barriers.txt @@ -15,11 +15,11 @@ L_Error: function|script|SetBarrierColor|{ if (@Barrier < 0 || @Barrier > 2) goto L_Error; - if (@Color < 0 || @Color > 12) + if (@BarrierColor <= 0 || @BarrierColor > 12) goto L_Error2; set @Mask, (15 << (4 * @Barrier)); - set OrumQuestBarrier, (OrumQuestBarrier & (~(@Mask))) | @Color << (4 * @Barrier); + set OrumQuestBarrier, (OrumQuestBarrier & (~(@Mask))) | @BarrierColor << (4 * @Barrier); return; L_Error: diff --git a/world/map/npc/009-4/orum.txt b/world/map/npc/009-4/orum.txt index c7c6eb55..8ee21c7c 100644 --- a/world/map/npc/009-4/orum.txt +++ b/world/map/npc/009-4/orum.txt @@ -210,62 +210,36 @@ L_Setup_Lair: set OrumQuest, 2; // Second Barrier - set @temp, rand(1,6); - set @Color, 1; - if (@temp == 1 || @temp == 4) - set @Color, 1; - if (@temp == 2 || @temp == 5) - set @Color, 5; - if (@temp == 3 || @temp == 6) - set @Color, 9; + set @BarrierColor, 1 + rand(3) * 4; set @Barrier, 0; - callfunc("SetBarrierColor"); + callfunc "SetBarrierColor"; + + set @TorchIntensity, 0; set @Torch, 0; - set @Color, rand(1, 12); - set @Intensity, 0; - callfunc("SetTorchColor"); - callfunc("SetTorchIntensity"); + set @TorchColor, rand(1, 12); + callfunc "SetTorchColor"; + callfunc "SetTorchIntensity"; // Third Barrier - set @temp, rand(1,6); - set @Color, 3; - if (@temp == 1 || @temp == 4) - set @Color, 3; - if (@temp == 2 || @temp == 5) - set @Color, 7; - if (@temp == 3 || @temp == 6) - set @Color, 11; + set @BarrierColor, 3 + rand(3) * 4; set @Barrier, 1; - callfunc("SetBarrierColor"); + callfunc "SetBarrierColor"; set @Torch, 1; - set @Color, rand(1, 12); - callfunc("SetTorchColor"); - callfunc("SetTorchIntensity"); + set @TorchColor, rand(1, 12); + callfunc "SetTorchColor"; + callfunc "SetTorchIntensity"; // End Barrier - set @temp, rand(1,12); - set @Color, 2; - if (@temp == 1 || @temp == 7) - set @Color, 2; - if (@temp == 2 || @temp == 8) - set @Color, 4; - if (@temp == 3 || @temp == 9) - set @Color, 6; - if (@temp == 4 || @temp == 10) - set @Color, 8; - if (@temp == 5 || @temp == 11) - set @Color, 10; - if (@temp == 6 || @temp == 12) - set @Color, 12; + set @BarrierColor, 2 + rand(6) * 2; set @Barrier, 2; - callfunc("SetBarrierColor"); + callfunc "SetBarrierColor"; set @Torch, 2; - set @Color, rand(1, 12); - callfunc("SetTorchColor"); - callfunc("SetTorchIntensity"); + set @TorchColor, rand(1, 12); + callfunc "SetTorchColor"; + callfunc "SetTorchIntensity"; goto L_Close; L_Use_First_Barrier: @@ -577,10 +551,9 @@ L_Close: set @EXP_BREAK_BARRIERS, 0; - set @temp, 0; - set @Color, 0; set @Barrier, 0; + set @BarrierColor, 0; set @Torch, 0; - set @Intensity, 0; + set @TorchColor, 0; close; } diff --git a/world/map/npc/009-4/orum_warps.txt b/world/map/npc/009-4/orum_warps.txt index be8ae0e7..858e0ea0 100644 --- a/world/map/npc/009-4/orum_warps.txt +++ b/world/map/npc/009-4/orum_warps.txt @@ -1,4 +1,4 @@ -009-3.gat,162,113,0|script|#OrumQuestEnter|0,0,0,{ +009-3.gat,162,113,0|script|#OrumQuestEnter|45,0,0,{ if (OrumQuest >= 12) goto L_Second_Entrance; warp "009-4.gat", 37, 113; close; @@ -7,7 +7,7 @@ L_Second_Entrance: warp "009-4.gat", 72, 126; close; } -009-4.gat,36,26,0|script|#LairExit|0,0,0,{ +009-4.gat,36,26,0|script|#LairExit|45,0,0,{ if (OrumQuest >= 12) goto L_Second_Entrance; warp "009-4.gat", 37, 122; close; @@ -17,7 +17,7 @@ L_Second_Entrance: close; } -009-4.gat,51,47,0|script|#CavernEnter|0,0,0,{ +009-4.gat,51,47,0|script|#CavernEnter|45,0,0,{ if (OrumQuest >= 14) goto L_Second_Cavern; if (OrumQuest < 12) goto L_See_Orum; warp "009-4.gat", 103, 23; diff --git a/world/map/npc/009-4/torches.txt b/world/map/npc/009-4/torches.txt index 842183b1..86dd95fe 100644 --- a/world/map/npc/009-4/torches.txt +++ b/world/map/npc/009-4/torches.txt @@ -15,10 +15,10 @@ L_Error: function|script|SetTorchColor|{ if (@Torch < 0 || @Torch > 2) goto L_Error; - if (@Color < 1 || @Color > 12) goto L_Error2; + if (@TorchColor < 1 || @TorchColor > 12) goto L_Error2; set @Mask, (15 << (4 * @Torch)); - set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @Color << (4 * @Torch); + set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @TorchColor << (4 * @Torch); return; L_Error: @@ -45,10 +45,10 @@ L_Error: function|script|SetTorchIntensity|{ if (@Torch < 0 || @Torch > 2) goto L_Error; - if (@Intensity < 0 || @Intensity > 2) goto L_Error2; + if (@TorchIntensity < 0 || @TorchIntensity > 2) goto L_Error2; set @Mask, (15 << (4 * (@Torch + 3))); - set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @Intensity << (4 * (@Torch + 3)); + set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @TorchIntensity << (4 * (@Torch + 3)); return; L_Error: @@ -99,23 +99,23 @@ function|script|InRangeTorch3|{ close; } -// First Torch -009-4.gat,68,21,0|script|Torch|400,{ - callfunc "InRangeTorch1"; - callfunc "DoneWithTorches"; - - set @Torch, 0; - callfunc("GetTorchColor"); - callfunc("GetTorchIntensity"); - - set @lastColor, @TorchColor; - 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"; +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] + " " + @colors$[@TorchColor] + " tint to it."; goto L_Color_Loop; L_Color_Loop: - callfunc("GetTorchColor"); menu "Add Red Powder", L_Use_Red, "Add Yellow Powder", L_Use_Yellow, @@ -127,66 +127,123 @@ L_Color_Loop: L_Use_Red: if (countitem("RedPowder") < 1) goto L_No_Powder; - if (@TorchColor > 6 && @TorchColor < 12) - set @Color, @TorchColor + 1; - if (@TorchColor < 6 && @TorchColor > 1) - set @Color, @TorchColor - 1; - if (@TorchColor == 12) - set @Color, 1; - if (@TorchColor == 0) - set @Color, 1; - callfunc("SetTorchColor"); 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_Wrong_Color; + if (2 <= @TorchColor && @TorchColor <= 5) + goto L_Color_Dec; + if (@TorchColor == 6) + goto L_Color_Dec_Wrong; + if (@TorchColor == 7) + goto L_Wrong_Color; + 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) + set @TorchColor, 1; goto L_Show_Color; L_Use_Yellow: if (countitem("YellowPowder") < 1) goto L_No_Powder; - if (@TorchColor < 10 && @TorchColor > 5) - set @Color, @TorchColor - 1; - if (@TorchColor >= 1 && @TorchColor < 5) - set @Color, @TorchColor + 1; - if (@TorchColor == 0) - set @Color, 5; - callfunc("SetTorchColor"); 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_Wrong_Color; + if (6 <= @TorchColor && @TorchColor <= 9) + goto L_Color_Dec; + if (@TorchColor == 10) + goto L_Color_Dec_Wrong; + if (@TorchColor == 11) + goto L_Wrong_Color; + if (@TorchColor == 12) + goto L_Color_Inc_Wrong; + + // work around an old bug + if (@TorchColor == 0) + set @TorchColor, 5; goto L_Show_Color; L_Use_Blue: if (countitem("BluePowder") < 1) goto L_No_Powder; - if (@TorchColor > 4 && @TorchColor < 9) - set @Color, @TorchColor + 1; - if (@TorchColor <= 12 && @TorchColor > 9) - set @Color, @TorchColor - 1; + 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) - set @Color, 12; + goto L_Color_Dec; + if (@TorchColor == 2) + goto L_Color_Dec_Wrong; + if (@TorchColor == 3) + goto L_Wrong_Color; + 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) - set @Color, 9; - callfunc("SetTorchColor"); - delitem "BluePowder", 1; + set @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."; close; +L_Color_Dec: + set @TorchColor, @TorchColor - 1; + if (@TorchColor == 0) + set @TorchColor, 12; + goto L_Show_Color; + +L_Color_Dec_Wrong: + set @TorchColor, @TorchColor - 1; + if (@TorchColor == 0) + set @TorchColor, 12; + goto L_Wrong_Color; + +L_Color_Inc_Wrong: + set @TorchColor, @TorchColor + 1; + if (@TorchColor == 13) + set @TorchColor, 1; + goto L_Wrong_Color; + +L_Color_Inc: + set @TorchColor, @TorchColor + 1; + if (@TorchColor == 13) + set @TorchColor, 1; + goto L_Show_Color; + L_Show_Color: - callfunc("GetTorchColor"); - callfunc("GetTorchIntensity"); - if (@TorchColor == @lastColor) - goto L_Wrong_Color; + callfunc "SetTorchColor"; misceffect 5; - set @lastColor, @TorchColor; mes "As your pour the powder into the flame you can see its tint transform to a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "."; goto L_Color_Loop; L_Wrong_Color: - set @Intensity, @TorchIntensity + 1; - if (@Intensity > 2) + callfunc "SetTorchColor"; + set @TorchIntensity, @TorchIntensity + 1; + if (@TorchIntensity > 2) goto L_Failed; - callfunc("SetTorchIntensity"); - callfunc("GetTorchIntensity"); + 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] + " " + @colors$[@TorchColor] + "."; goto L_Color_Loop; @@ -195,210 +252,38 @@ L_Failed: mes "As you pour the powder into the flame it flares violently before bursting into your face!"; misceffect 5; misceffect 16; - set @Intensity, 0; - callfunc("SetTorchIntensity"); + set @TorchIntensity, 0; + callfunc "SetTorchIntensity"; heal -Hp, 0; close; } +// First Torch +009-4.gat,68,21,0|script|Torch|400,{ + callfunc "InRangeTorch1"; + callfunc "DoneWithTorches"; + + set @Torch, 0; + callfunc "TorchLoop"; + // unreachable +} + // Second Torch 009-4.gat,67,42,0|script|Torch|400,{ callfunc "InRangeTorch2"; callfunc "DoneWithTorches"; set @Torch, 1; - callfunc("GetTorchColor"); - callfunc("GetTorchIntensity"); - - set @lastColor, @TorchColor; - setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple"; - mes "Looking closely you notice that this torch is not like the others. This one has a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + " tint to it."; - goto L_Color_Loop; - -L_Color_Loop: - callfunc("GetTorchColor"); - menu - "Add Red Powder", L_Use_Red, - "Add Yellow Powder", L_Use_Yellow, - "Add Blue Powder", L_Use_Blue, - "Leave it alone.", -; - mes "The flame flickers as if it's laughing at you."; - close; - -L_Use_Red: - if (countitem("RedPowder") < 1) - goto L_No_Powder; - if (@TorchColor > 6 && @TorchColor < 12) - set @Color, @TorchColor + 1; - if (@TorchColor < 6 && @TorchColor > 1) - set @Color, @TorchColor - 1; - if (@TorchColor == 12) - set @Color, 1; - if (@TorchColor == 0) - set @Color, 1; - callfunc("SetTorchColor"); - delitem "RedPowder", 1; - goto L_Show_Color; - -L_Use_Yellow: - if (countitem("YellowPowder") < 1) - goto L_No_Powder; - if (@TorchColor < 10 && @TorchColor > 5) - set @Color, @TorchColor - 1; - if (@TorchColor >= 1 && @TorchColor < 5) - set @Color, @TorchColor + 1; - if (@TorchColor == 0) - set @Color, 5; - callfunc("SetTorchColor"); - delitem "YellowPowder", 1; - goto L_Show_Color; - -L_Use_Blue: - if (countitem("BluePowder") < 1) - goto L_No_Powder; - if (@TorchColor > 4 && @TorchColor < 9) - set @Color, @TorchColor + 1; - if (@TorchColor <= 12 && @TorchColor > 9) - set @Color, @TorchColor - 1; - if (@TorchColor == 1) - set @Color, 12; - if (@TorchColor == 0) - set @Color, 9; - callfunc("SetTorchColor"); - delitem "BluePowder", 1; - goto L_Show_Color; - -L_No_Powder: - mes "You notice you're all out of that color powder. Perhaps Orum can make you some more."; - close; - -L_Show_Color: - callfunc("GetTorchColor"); - callfunc("GetTorchIntensity"); - if (@TorchColor == @lastColor) - goto L_Wrong_Color; - misceffect 5; - set @lastColor, @TorchColor; - mes "As your pour the powder into the flame you can see its tint transform to a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "."; - goto L_Color_Loop; - -L_Wrong_Color: - set @Intensity, @TorchIntensity + 1; - if (@Intensity > 2) - goto L_Failed; - callfunc("SetTorchIntensity"); - callfunc("GetTorchIntensity"); - misceffect 5; - mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "."; - 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; - set @Intensity, 0; - callfunc("SetTorchIntensity"); - heal -Hp, 0; - close; + callfunc "TorchLoop"; + // unreachable } - // Third Torch 009-4.gat,33,86,0|script|Torch|400,{ callfunc "InRangeTorch3"; callfunc "DoneWithTorches"; set @Torch, 2; - callfunc("GetTorchColor"); - callfunc("GetTorchIntensity"); - - set @lastColor, @TorchColor; - 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] + " " + @colors$[@TorchColor] + " tint to it."; - goto L_Color_Loop; - -L_Too_Far: - mes "You're too far away to do anything with that torch."; - close; - -L_Color_Loop: - callfunc("GetTorchColor"); - menu - "Add Red Powder", L_Use_Red, - "Add Yellow Powder", L_Use_Yellow, - "Add Blue Powder", L_Use_Blue, - "Leave it alone.", -; - mes "The flame flickers as if it's laughing at you."; - close; - -L_Use_Red: - if (countitem("RedPowder") < 1) - goto L_No_Powder; - if (@TorchColor > 6 && @TorchColor < 12) - set @Color, @TorchColor + 1; - if (@TorchColor < 6 && @TorchColor > 1) - set @Color, @TorchColor - 1; - if (@TorchColor == 12) - set @Color, 1; - callfunc("SetTorchColor"); - delitem "RedPowder", 1; - goto L_Show_Color; - -L_Use_Yellow: - if (countitem("YellowPowder") < 1) - goto L_No_Powder; - if (@TorchColor < 10 && @TorchColor > 5) - set @Color, @TorchColor - 1; - if (@TorchColor >= 1 && @TorchColor < 5) - set @Color, @TorchColor + 1; - callfunc("SetTorchColor"); - delitem "YellowPowder", 1; - goto L_Show_Color; - -L_Use_Blue: - if (countitem("BluePowder") < 1) - goto L_No_Powder; - if (@TorchColor > 4 && @TorchColor < 9) - set @Color, @TorchColor + 1; - if (@TorchColor <= 12 && @TorchColor > 9) - set @Color, @TorchColor - 1; - if (@TorchColor == 1) - set @Color, 12; - callfunc("SetTorchColor"); - delitem "BluePowder", 1; - goto L_Show_Color; - -L_No_Powder: - mes "You notice you're all out of that color powder. Perhaps Orum can make you some more."; - close; - -L_Show_Color: - callfunc("GetTorchColor"); - callfunc("GetTorchIntensity"); - if (@TorchColor == @lastColor) - goto L_Wrong_Color; - misceffect 5; - set @lastColor, @TorchColor; - mes "As your pour the powder into the flame you can see its tint transform to a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "."; - goto L_Color_Loop; - -L_Wrong_Color: - set @Intensity, @TorchIntensity + 1; - if (@Intensity > 2) - goto L_Failed; - callfunc("SetTorchIntensity"); - callfunc("GetTorchIntensity"); - misceffect 5; - mes "As you pour the powder into the flame it flares violently for a moment and then turns into a " + @intensities$[@TorchIntensity] + " " + @colors$[@TorchColor] + "."; - 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; - set @Intensity, 0; - callfunc("SetTorchIntensity"); - heal -Hp, 0; - close; + callfunc "TorchLoop"; + // unreachable } diff --git a/world/map/npc/009-4/waric.txt b/world/map/npc/009-4/waric.txt index df914e52..c373522a 100644 --- a/world/map/npc/009-4/waric.txt +++ b/world/map/npc/009-4/waric.txt @@ -88,6 +88,7 @@ L_Explain: warp "008-1.gat", 65, 90; getexp @EXP_LEARNED_ALOT, 0; mes "You awake on your back with a squirrel sitting on top of you arranging it's acorns. It quickly gathers them up and runs off as it sees you looking at it them."; + monster "008-1.gat", 65, 90, "Squirrel", 1038, 1; goto L_Close; L_Close: -- cgit v1.2.3-60-g2f50