summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2013-04-13 10:16:10 -0700
committerBen Longbons <b.r.longbons@gmail.com>2013-04-13 15:10:57 -0700
commit9c9034116fab44475c9bad57b727a374fbd01ebf (patch)
tree65a628a11e3b06294f9906257f7dfba4f82eefe5
parentdf95c80ad1c48f3563a13d0bf22872ffc0bb7d29 (diff)
downloadserverdata-9c9034116fab44475c9bad57b727a374fbd01ebf.tar.gz
serverdata-9c9034116fab44475c9bad57b727a374fbd01ebf.tar.bz2
serverdata-9c9034116fab44475c9bad57b727a374fbd01ebf.tar.xz
serverdata-9c9034116fab44475c9bad57b727a374fbd01ebf.zip
Refactor torches to avoid a bug and make more consistent and obvious
Also avoid some silliness with rand()
-rw-r--r--world/map/npc/009-4/barriers.txt4
-rw-r--r--world/map/npc/009-4/orum.txt65
-rw-r--r--world/map/npc/009-4/orum_warps.txt6
-rw-r--r--world/map/npc/009-4/torches.txt361
-rw-r--r--world/map/npc/009-4/waric.txt1
5 files changed, 148 insertions, 289 deletions
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: