summaryrefslogblamecommitdiff
path: root/world/map/npc/009-4/barriers.txt
blob: 9e9ef7bc705e78b66b9cfa41b722b41eda95994b (plain) (tree)
1
2
3
4
5
6
7
8
9
                                        
                               
 




                                                 
 
                  



                                                            

        

                                          



                              

 
                               
 

                                     
                                                 
                      
 
                                      
                                                                                            
           

        

                                          

         

                                         



                                    
                                                       
 

                                       
 
                              
                                                                                                                    
          

          


                                                                                     


                
                                                      
 
                              
 
                                                                                                                                              

                     


                 
                                                       
 
                                         
 





                                                      
 
                             
                                                                                                                  

                                                                                                                                                                         
                                                                                                                                  
          

                       

                                            

                
                                                                                                           

                     


                
                                                      
 
                                         
 

                                
 


                                  
 


                                  
 





                                        
 



                                                                                     
 
                             
                                                                                                                   

                                                                                                                                                                         
                                                                                                                                  
          

                      

                                             

                

                      


                 
                                                    
 



























































































                                                                                               

                     
                             
                                                                                                                   

                                                                                                                                                                         
                                                                                                                                  
          

                      

                                             

                


                                                                                             
 
//# see detailed description at orum.txt
function|script|GetBarrierColor
{
    if (@Barrier < 0 || @Barrier > 2)
        goto L_Error;
    if (@BarrierColor <= 0 || @BarrierColor > 12)
        goto L_Error2;
    goto L_GetBarrierColor;

L_GetBarrierColor:
    set @Mask, 15;
    set @Shift, 4 * @Barrier;
    set @BarrierColor, (OrumQuestBarrier >> @Shift) & @Mask;
    return;

L_Error:
    mes "Barrier number is out of range.";
    close;

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;

    set @Mask, (15 << (4 * @Barrier));
    set OrumQuestBarrier, (OrumQuestBarrier & (~(@Mask))) | @BarrierColor << (4 * @Barrier);
    return;

L_Error:
    mes "Barrier number is out of range.";
    close;

L_Error2:
    mes "Barrier color is out of range.";
    close;
}


// Starting Barrier / Quest Entrance
009-4.gat,37,120,0|script|#OrumCaveStartBarrier|127,1,0
{
    if (OrumQuest >= 3) close;
    if (OrumQuest == 2) goto L_Started;

    warp "009-4.gat", 37, 118;
    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.";
    set OrumQuest, 3;
    close;
}

// First Barrier
009-4.gat,57,29,0|script|#OrumCaveFirstBarrier|127,1,0
{
    if (OrumQuest >= 5) close;

    message strcharinfo(0), "Nothing seems to happen as you enter this room. The barrier must need both of its torches to function properly.";
    set OrumQuest, 5;
    close;
}

// Second Barrier
009-4.gat,61,54,0|script|#OrumCaveSecondBarrier|127,1,0
{
    if (OrumQuest == 3) set OrumQuest, 4;

    set @Barrier, 0;
    callfunc("GetBarrierColor");
    set @Torch, 0;
    callfunc("GetTorchColor");
    if (OrumQuest > 7 && @TorchColor == @BarrierColor)
        goto L_Allow_Second_Passage;

    warp "009-4.gat", 60, 56;
    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 (OrumQuest < 9) goto L_Advance_Quest;
    close;

L_Advance_Quest:
    message strcharinfo(0), "The torches dim as you enter like the first. You must be on the right trail.";
    set OrumQuest, 9;
    close;
}

// Third Barrier
009-4.gat,24,66,0|script|#OrumCaveThirdBarrier|127,1,0
{
    if (OrumQuest == 3) set OrumQuest, 4;

    set @Barrier, 1;
    callfunc("GetBarrierColor");

    set @Torch, 0;
    callfunc("GetTorchColor");
    set @Torch1Color, @TorchColor;

    set @Torch, 1;
    callfunc("GetTorchColor");
    set @Torch2Color, @TorchColor;

    set @firstColor, @BarrierColor - 2;
    set @secondColor, @BarrierColor + 2;
    if (@firstColor < 1)
        set @firstColor, 12;
    if (@secondColor > 12)
        set @secondColor, 1;

    if (OrumQuest > 8 && @Torch1Color == @firstColor && @Torch2Color == @secondColor)
        goto L_Allow_Third_Passage;
    if (OrumQuest > 8 && @Torch2Color == @firstColor && @Torch1Color == @secondColor)
        goto L_Allow_Third_Passage;

    warp "009-4.gat", 23, 64;
    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 (OrumQuest < 10) goto L_Advance_Quest;
    close;

L_Advance_Quest:
    set OrumQuest, 10;
    close;
}

// Ending Barrier
009-4.gat,48,38,0|script|#OrumCaveEndBarrier|127,1,0
{
    if (OrumQuest >= 11) close;
    if (OrumQuest == 3) set OrumQuest, 4;

    set @Barrier, 2;
    callfunc("GetBarrierColor");

    if (OrumQuest < 10)
        goto L_Deny_Final_Passage;

    set @Torch, 0;
    callfunc("GetTorchColor");
    set @Torch1Color, @TorchColor;

    set @Torch, 1;
    callfunc("GetTorchColor");
    set @Torch2Color, @TorchColor;

    set @Torch, 2;
    callfunc("GetTorchColor");
    set @Torch3Color, @TorchColor;

    // Extract the secondary color
    set @secondary, @BarrierColor - 1;
    if (@secondary != 3 && @secondary != 7 && @secondary != 11)
        set @secondary, @BarrierColor + 1;

    // Make sure it's in bounds
    if (@secondary > 12)
        set @secondary, @secondary - 12;
    if (@secondary < 1)
        set @secondary, @secondary + 12;

    // Extract first 2 required colors
    set @firstColor, @secondary - 2;
    set @secondColor, @secondary + 2;
    if (@firstColor > 12)
        set @firstColor, @firstColor - 12;
    if (@firstColor < 1)
        set @firstColor, @firstColor + 12;
    if (@secondColor > 12)
        set @secondColor, @secondColor - 12;
    if (@secondColor < 1)
        set @secondColor, @secondColor + 12;

    set @thirdColor, 12;
    set @offsetOne, @BarrierColor + 1;
    set @offsetTwo, @BarrierColor - 1;

    // Make sure they in bounds
    if (@offsetOne > 12)
        set @offsetOne, @offsetOne - 12;
    if (@offsetOne < 1)
        set @offsetOne, @offsetOne + 12;
    if (@offsetTwo > 12)
        set @offsetTwo, @offsetTwo - 12;
    if (@offsetTwo < 1)
        set @offsetTwo, @offsetTwo + 12;

    // Extract third needed color
    if (@secondary == @offsetOne)
        set @thirdColor, @firstColor;
    if (@secondary == @offsetTwo)
        set @thirdColor, @secondColor;

    set @firstDone, 0;
    set @secondDone, 0;
    set @thirdDone, 0;

    if (@firstDone == 0 && @secondDone != 1 && @thirdDone != 1 && @Torch1Color == @firstColor)
        set @firstDone, 1;
    if (@firstDone != 1 && @secondDone == 0 && @thirdDone != 1 && @Torch1Color == @secondColor)
        set @secondDone, 1;
    if (@firstDone != 1 && @secondDone != 1 && @thirdDone == 0 && @Torch1Color == @thirdColor)
        set @thirdDone, 1;

    if (@firstDone == 0 && @secondDone != 2 && @thirdDone != 2 && @Torch2Color == @firstColor)
        set @firstDone, 2;
    if (@firstDone != 2 && @secondDone == 0 && @thirdDone != 2 && @Torch2Color == @secondColor)
        set @secondDone, 2;
    if (@firstDone != 2 && @secondDone != 2 && @thirdDone == 0 && @Torch2Color == @thirdColor)
        set @thirdDone, 2;

    if (@firstDone == 0 && @secondDone != 3 && @thirdDone != 3 && @Torch3Color == @firstColor)
        set @firstDone, 3;
    if (@firstDone != 3 && @secondDone == 0 && @thirdDone != 3 && @Torch3Color == @secondColor)
        set @secondDone, 3;
    if (@firstDone != 3 && @secondDone != 3 && @thirdDone == 0 && @Torch3Color == @thirdColor)
        set @thirdDone, 3;

    if (@firstDone != 0 && @secondDone != 0 && @thirdDone != 0)
        goto L_Allow_Final_Passage;
    goto L_Deny_Final_Passage;

L_Deny_Final_Passage:
    warp "009-4.gat", 47, 36;
    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 (OrumQuest < 11) goto L_Advance_Quest;
    close;

L_Advance_Quest:
    message strcharinfo(0), "The torches dim as you enter. At last you finally have access!";
    set OrumQuest, 11;
    close;
}