function script GetBarrierColor {
if (@Barrier < 0 || @Barrier > 2)
goto L_Error;
if (@BarrierColor <= 0 || @BarrierColor > 12)
goto L_Error2;
goto L_GetBarrierColor;
L_GetBarrierColor:
@Mask = 15;
@shift = 4 * @Barrier;
@BarrierColor = (OrumQuestBarrier >> @shift) & @Mask;
return;
L_Error:
mes "Barrier number is out of range.";
close2;
return;
L_Error2:
callfunc "SetUpOrumQuest";
goto L_GetBarrierColor;
}
function script SetBarrierColor {
if (@Barrier < 0 || @Barrier > 2)
goto L_Error;
if (@BarrierColor <= 0 || @BarrierColor > 12)
goto L_Error2;
@Mask = (15 << (4 * @Barrier));
OrumQuestBarrier = (OrumQuestBarrier & (~(@Mask))) | @BarrierColor << (4 * @Barrier);
return;
L_Error:
mes "Barrier number is out of range.";
close2;
return;
L_Error2:
mes "Barrier color is out of range.";
close2;
return;
}
009-4,37,119,0 script #OrumCaveStartMessage NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 3) end;
if (getq(MagicQuest_DarkMage) == 2) goto L_Started;
mes "As you try to pass, two torches begin to flare and push you back. They seem to form some kind of barrier.";
close;
L_Started:
message strcharinfo(0), "The torches dim as you approach, granting you passage.";
setq(MagicQuest_DarkMage, 3);
end;
}
009-4,37,120,0 script #OrumCaveStartBarrier NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 3) end;
warp "009-4", 37, 118;
end;
}
009-4,57,29,0 script #OrumCaveFirstBarrier NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 5) end;
message strcharinfo(0), "Nothing seems to happen as you enter this room. The barrier must need both of its torches to function properly.";
setq(MagicQuest_DarkMage, 5);
end;
}
009-4,61,55,0 script #OrumCaveSecondMessage NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 9) end;
if (getq(MagicQuest_DarkMage) == 3) setq(MagicQuest_DarkMage, 4);
@Barrier = 0;
callfunc("GetBarrierColor");
@Torch = 0;
callfunc("GetTorchColor");
if (getq(MagicQuest_DarkMage) > 7 && @TorchColor == @BarrierColor)
goto L_Allow_Second_Passage;
mes "As you try to pass, the torches begin to flare and push you back. Perhaps there's a way to get past it.";
mes "";
setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
mes "Looking closely between the two torches you can see the barrier has a ##B" + @colors$[@BarrierColor] + "##b tint to it.";
close;
L_Allow_Second_Passage:
if (getq(MagicQuest_DarkMage) < 9) goto L_Advance_Quest;
end;
L_Advance_Quest:
message strcharinfo(0), "The torches dim as you enter like the first. You must be on the right trail.";
setq(MagicQuest_DarkMage, 9);
end;
}
009-4,61,54,0 script #OrumCaveSecondBarrier NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 9) end;
warp "009-4", 60, 56;
end;
}
009-4,24,65,0 script #OrumCaveThirdMessage NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 10) end;
if (getq(MagicQuest_DarkMage) == 3) setq(MagicQuest_DarkMage, 4);
if (getq(MagicQuest_DarkMage) > 8 && @Torch1Color == @firstColor && @Torch2Color == @secondColor)
goto L_Allow_Third_Passage;
if (getq(MagicQuest_DarkMage) > 8 && @Torch2Color == @firstColor && @Torch1Color == @secondColor)
goto L_Allow_Third_Passage;
@Barrier = 1;
callfunc("GetBarrierColor");
@Torch = 0;
callfunc("GetTorchColor");
@Torch1Color = @TorchColor;
@Torch = 1;
callfunc("GetTorchColor");
@Torch2Color = @TorchColor;
@firstColor = @BarrierColor - 2;
@secondColor = @BarrierColor + 2;
if (@firstColor < 1)
@firstColor = 12;
if (@secondColor > 12)
@secondColor = 1;
mes "As you try to pass, the torches begin to flare and push you back. Perhaps there is a way to get past it.";
mes "";
setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
mes "Looking closely between the two torches you can see the barrier has a ##B" + @colors$[@BarrierColor] + "##b tint to it.";
close;
L_Allow_Third_Passage:
if (getq(MagicQuest_DarkMage) < 10) goto L_Advance_Quest;
end;
L_Advance_Quest:
setq(MagicQuest_DarkMage, 10);
end;
}
009-4,24,66,0 script #OrumCaveThirdBarrier NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 10) end;
warp "009-4", 23, 64;
end;
}
009-4,48,37,0 script #OrumCaveEndMessage NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 11) end;
if (getq(MagicQuest_DarkMage) == 3) setq MagicQuest_DarkMage, 4;
@Barrier = 2;
callfunc("GetBarrierColor");
if (getq(MagicQuest_DarkMage) < 10)
goto L_Deny_Final_Passage;
@Torch = 0;
callfunc("GetTorchColor");
@Torch1Color = @TorchColor;
@Torch = 1;
callfunc("GetTorchColor");
@Torch2Color = @TorchColor;
@Torch = 2;
callfunc("GetTorchColor");
@Torch3Color = @TorchColor;
// Extract the secondary color
@secondary = @BarrierColor - 1;
if (@secondary != 3 && @secondary != 7 && @secondary != 11)
@secondary = @BarrierColor + 1;
// Make sure it's in bounds
if (@secondary > 12)
@secondary = @secondary - 12;
if (@secondary < 1)
@secondary = @secondary + 12;
// Extract first 2 required colors
@firstColor = @secondary - 2;
@secondColor = @secondary + 2;
if (@firstColor > 12)
@firstColor = @firstColor - 12;
if (@firstColor < 1)
@firstColor = @firstColor + 12;
if (@secondColor > 12)
@secondColor = @secondColor - 12;
if (@secondColor < 1)
@secondColor = @secondColor + 12;
@thirdColor = 12;
@offsetOne = @BarrierColor + 1;
@offsetTwo = @BarrierColor - 1;
// Make sure they in bounds
if (@offsetOne > 12)
@offsetOne = @offsetOne - 12;
if (@offsetOne < 1)
@offsetOne = @offsetOne + 12;
if (@offsetTwo > 12)
@offsetTwo = @offsetTwo - 12;
if (@offsetTwo < 1)
@offsetTwo = @offsetTwo + 12;
// Extract third needed color
if (@secondary == @offsetOne)
@thirdColor = @firstColor;
if (@secondary == @offsetTwo)
@thirdColor = @secondColor;
@firstDone = 0;
@secondDone = 0;
@thirdDone = 0;
if (@firstDone == 0 && @secondDone != 1 && @thirdDone != 1 && @Torch1Color == @firstColor)
@firstDone = 1;
if (@firstDone != 1 && @secondDone == 0 && @thirdDone != 1 && @Torch1Color == @secondColor)
@secondDone = 1;
if (@firstDone != 1 && @secondDone != 1 && @thirdDone == 0 && @Torch1Color == @thirdColor)
@thirdDone = 1;
if (@firstDone == 0 && @secondDone != 2 && @thirdDone != 2 && @Torch2Color == @firstColor)
@firstDone = 2;
if (@firstDone != 2 && @secondDone == 0 && @thirdDone != 2 && @Torch2Color == @secondColor)
@secondDone = 2;
if (@firstDone != 2 && @secondDone != 2 && @thirdDone == 0 && @Torch2Color == @thirdColor)
@thirdDone = 2;
if (@firstDone == 0 && @secondDone != 3 && @thirdDone != 3 && @Torch3Color == @firstColor)
@firstDone = 3;
if (@firstDone != 3 && @secondDone == 0 && @thirdDone != 3 && @Torch3Color == @secondColor)
@secondDone = 3;
if (@firstDone != 3 && @secondDone != 3 && @thirdDone == 0 && @Torch3Color == @thirdColor)
@thirdDone = 3;
if (@firstDone != 0 && @secondDone != 0 && @thirdDone != 0)
goto L_Allow_Final_Passage;
goto L_Deny_Final_Passage;
L_Deny_Final_Passage:
mes "As you try to pass, the torches begin to flare and push you back. Perhaps there is a way to get past it.";
mes "";
setarray @colors$,"transparent","red","dark orange","orange","light orange","yellow","light green","green","dark green","blue","dark purple","purple","light purple";
mes "Looking closely between the two torches you can see the barrier has a ##B" + @colors$[@BarrierColor] + "##b tint to it.";
close;
L_Allow_Final_Passage:
if (getq(MagicQuest_DarkMage) < 11) goto L_Advance_Quest;
end;
L_Advance_Quest:
message strcharinfo(0), "The torches dim as you enter. At last you finally have access!";
setq(MagicQuest_DarkMage, 11);
end;
}
009-4,48,38,0 script #OrumCaveEndBarrier NPC32767,0,0,{
if (getq(MagicQuest_DarkMage) >= 11) end;
warp "009-4", 47, 36;
end;
}