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



                                                        

        

                                        

 
                             
 
                                               
                                                           
 
                                    
                                                                                    
           

        

                                        

         

                                       

 
                                 
 
                                               
 



                                                            

        

                                        

 
                                 
 
                                               
                                                                  
 
                                          
                                                                                              
           

        

                                        

         

                                           

 
                               
 
                                         
                      
 
                                        
 
                        
                                                                                                                           
 
                      
                                                                                                 
          

            
                                                                                                                      

                     


           


                                   
                             
 
                                      
                      

                                                              


           
 
                             
 
                                      
                      

                                                              


           
 
                             
 
                                      
                      

                                                              


           

 
                         
 











                                                             
                                                                                                                                                                             
                      

             



                                          


                                   
                                                         
          

          

                                   
                           




                                
                          




                                             
                          







                                              
                      

             

                                      
                              






                                             
                          




                                             
                          





                               
                      

           

                                    




                                
                         



                               
                          




                                             
                          



                                               
                         
                           
                      

            
                                                                                                  
          
 









                                     
                      




                                     
                      






                                     
             
                             
                 
                                                                                                                                                           
                      
 
             


                                             
                      
                                 
                 
                                                                                                                                                                             
                      

         


                                                                                                    

                                 

                

 
              
                                    
 





                               
        

 
               
                                    
 

                               
 
                  

                         
        

 
              
                                    
 

                               
 
                  

                         
        
 
//# see detailed description at orum.txt
function|script|GetTorchColor
{
    if (@Torch < 0 || @Torch > 2) goto L_Error;

    set @Mask, 15;
    set @Shift, 4 * @Torch;
    set @TorchColor, (OrumQuestTorch >> @Shift) & @Mask;
    return;

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

function|script|SetTorchColor
{
    if (@Torch < 0 || @Torch > 2) goto L_Error;
    if (@TorchColor < 1 || @TorchColor > 12) goto L_Error2;

    set @Mask, (15 << (4 * @Torch));
    set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @TorchColor << (4 * @Torch);
    return;

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

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

function|script|GetTorchIntensity
{
    if (@Torch < 0 || @Torch > 2) goto L_Error;

    set @Mask, 15;
    set @Shift, 4 * (@Torch + 3);
    set @TorchIntensity, (OrumQuestTorch >> @Shift) & @Mask;
    return;

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

function|script|SetTorchIntensity
{
    if (@Torch < 0 || @Torch > 2) goto L_Error;
    if (@TorchIntensity < 0 || @TorchIntensity > 2) goto L_Error2;

    set @Mask, (15 << (4 * (@Torch + 3)));
    set OrumQuestTorch, (OrumQuestTorch & (~(@Mask))) | @TorchIntensity << (4 * (@Torch + 3));
    return;

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

L_Error2:
    mes "Torch intensity is out of range.";
    close;
}

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.";
    close;

L_Different:
    mes "The flame on this torch looks different than the rest. You better tell Orum about it before doing anything.";
    set OrumQuest, 6;
    close;

L_Return:
    return;
}

// To make sure in range of torches
function|script|InRangeTorch1
{
    if (isin("009-4.gat",67,20,69,25))
        goto L_Return;
    mes "You're too far away to do anything with that torch.";
    close;

L_Return:
    return;
}
function|script|InRangeTorch2
{
    if (isin("009-4.gat",65,41,69,46))
        goto L_Return;
    mes "You're too far away to do anything with that torch.";
    close;

L_Return:
    return;
}
function|script|InRangeTorch3
{
    if (isin("009-4.gat",33,84,37,88))
        goto L_Return;
    mes "You're too far away to do anything with that torch.";
    close;

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] + " " + @colors$[@TorchColor] + " 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.";
    close;

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)
        set @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)
        set @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)
        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_WrongColor;

L_Color_Inc_Wrong:
    set @TorchColor, @TorchColor + 1;
    if (@TorchColor == 13)
        set @TorchColor, 1;
    goto L_WrongColor;

L_Color_Inc:
    set @TorchColor, @TorchColor + 1;
    if (@TorchColor == 13)
        set @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] + " " + @colors$[@TorchColor] + ".";
    goto L_Color_Loop;

L_WrongColor:
    callfunc "SetTorchColor";
    set @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] + " " + @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 @TorchIntensity, 0;
    callfunc "SetTorchIntensity";
    heal -Hp, 0;
    close;
}

// First Torch
009-4.gat,68,21,0|script|Torch#1|400
{
    callfunc "InRangeTorch1";
    callfunc "DoneWithTorches";

    set @Torch, 0;
    callfunc "TorchLoop";
    // unreachable
    end;
}

// Second Torch
009-4.gat,67,42,0|script|Torch#2|400
{
    callfunc "InRangeTorch2";
    callfunc "DoneWithTorches";

    set @Torch, 1;
    callfunc "TorchLoop";
    // unreachable
    end;
}

// Third Torch
009-4.gat,33,86,0|script|Torch#3|400
{
    callfunc "InRangeTorch3";
    callfunc "DoneWithTorches";

    set @Torch, 2;
    callfunc "TorchLoop";
    // unreachable
    end;
}