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

              

                                            
                                             
 
                                                
                                                                        
                                                     
 
                                                              
 
                                                                                                         
 
                             
                                                          
 
                  

                
                            
 
                                                   
 
                                  
                                                                         
 
                         

                                                                                        
                                                                   

        
                                                                                                                                
 

                                              

          

                           
           

                           
 
 
       

          




                                                                                         
                  
 


                                                                                
 
                                                                                        

                                                                                       
 


                                                                       
 

                                                                                                                                                    
 
                     

           



                                                                                                                                   

            



                                                                                                                                     

            
                             
                                                                        
 
                                                                                   
 
        

             



                                                    

                
                            
 
                                                   
 
                                  
                                                                         
 
                           

                                                                                        
        

                
                            
 
                                                   
 
                                  
                                                                         
 
                             

                                                                                        
        


              
        
                      
            


                                                                                 
 
       
                      
 

                                                             
 
                                  
 
                                                                     
 

                                               
 

                                             
 
        

         
                                      
 



                                                                                                                                            
 
        

          
                                       
 



                                                                                                                                           
 
        

       

                       
 
                 
            




                                                                                                                                    
 
           




                                                                                                                                    
 
       
                        

                 
          





                                   

                                                           



                  
 
//Author: Kage

005-4.gat,36,19,0|script|Switch#elecave|400,
{
    if ($@ELE_CAVE_STATUS != 0) goto L_Enjoy;

    mes "*You see a switch, it is flipped off*";
        menu "No, I am NOT flipping the switch... thats final.", L_Exit,
        "Ha! What's the worst that could happen?", -;

    mes "*As you flip the switch, the cave starts to rumble*";

    if ($@ELE_CAVE_STATUS != 0) goto L_Enjoy; // Prevent from starting level 1 from two different players

    set $@ELE_CAVE_STATUS, 1;
    set $@ELE_CAVE_PLAYER_COUNT, getmapusers("005-4.gat");

    startnpctimer;

L_Start_Level_1:
    set $@ELE_CAVE_LEVEL, 1;

    mapannounce "005-4.gat", "Level 1 starting", 0;

    // Random colors for everyone!
    areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos";

    // Two red, two blue.
    areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 2, "Switch#elecave::OnBlueDeath";
    areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 2, "Switch#elecave::OnRedDeath";
    goto L_Exit; // This one is triggered on talking to the switch.

L_Enjoy:
    mes "*As you get ready to touch the switch, a spark of the opposite color flys to you.  But oddly it doesn't hurt at all.*";

    if (@ELE_CAVE_COLOR == 1) goto L_Set_Blue;
    if (@ELE_CAVE_COLOR == 2) goto L_Set_Red;

L_Set_Red:
    set @ELE_CAVE_COLOR, 1;
    goto L_Exit;
L_Set_Blue:
    set @ELE_CAVE_COLOR, 2;
    goto L_Exit;


L_Exit:
    close;
    end;

//-----------------------No player talking below this line-------------------------------

// Fight logic
OnTimer3000:
    setnpctimer 0;

    // We stop if no live players are around
    if ($@ELE_CAVE_PLAYER_COUNT == 0) goto L_CleanUp;
    set $@ELE_CAVE_PLAYER_COUNT, 0; // The onTick refills this with a live count

    // We punish them for having a different count (Aka need kill them at the same time)
    set $@ELE_CAVE_RED_COUNT, mobcount("005-4.gat","Switch#elecave::OnRedDeath") + 1;
    set $@ELE_CAVE_BLUE_COUNT, mobcount("005-4.gat","Switch#elecave::OnBlueDeath") + 1;

    set $@ELE_CAVE_DIFF, 0;
    if ($@ELE_CAVE_RED_COUNT > $@ELE_CAVE_BLUE_COUNT) goto L_More_Red;
    if ($@ELE_CAVE_RED_COUNT < $@ELE_CAVE_BLUE_COUNT) goto L_More_Blue;

    if ($@ELE_CAVE_LAST_MESSAGE != 0) mapannounce "005-4.gat", "The ions are once again balanced.  Try to kill a red and blue at the same time.", 0;
    set $@ELE_CAVE_LAST_MESSAGE, 0;

    goto L_Next_Step;

L_More_Red:
    set $@ELE_CAVE_DIFF, $@ELE_CAVE_RED_COUNT - $@ELE_CAVE_BLUE_COUNT;
    if ($@ELE_CAVE_LAST_MESSAGE != 1) mapannounce "005-4.gat", "There are too many red ions in the air!  Kill more red sparks!", 0;
    set $@ELE_CAVE_LAST_MESSAGE, 1;
    goto L_Next_Step;

L_More_Blue:
    set $@ELE_CAVE_DIFF, $@ELE_CAVE_BLUE_COUNT - $@ELE_CAVE_RED_COUNT;
    if ($@ELE_CAVE_LAST_MESSAGE != 2) mapannounce "005-4.gat", "There are too many blue ions in the air!  Kill more blue sparks!", 0;
    set $@ELE_CAVE_LAST_MESSAGE, 2;
    goto L_Next_Step;

L_Next_Step:
    // Basic per player logic
    areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::OnTick";

    if ($@ELE_CAVE_RED_COUNT == 0 && $@ELE_CAVE_BLUE_COUNT == 0) goto L_Next_Level;

    end;

L_Next_Level:
    if ($@ELE_CAVE_LEVEL == 1) goto L_Start_Level_2;
    if ($@ELE_CAVE_LEVEL == 2) goto L_Start_Level_3;
    if ($@ELE_CAVE_LEVEL == 3) goto L_CleanUp;
    end;

L_Start_Level_2:
    set $@ELE_CAVE_LEVEL, 2;

    mapannounce "005-4.gat", "Level 2 starting", 0;

    // Random colors for everyone!
    areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos";

    // four red, four blue.
    areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 4, "Switch#elecave::OnBlueDeath";
    areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 4, "Switch#elecave::OnRedDeath";
    end;

L_Start_Level_3:
    set $@ELE_CAVE_LEVEL, 3;

    mapannounce "005-4.gat", "Level 3 starting", 0;

    // Random colors for everyone!
    areatimer "005-4.gat", 19, 19, 54, 37, 10, "Switch#elecave::OnChaos";

    // eight red, eight blue.
    areamonster "005-4.gat", 19, 19, 54, 37, "", 1080, 8, "Switch#elecave::OnBlueDeath";
    areamonster "005-4.gat", 19, 19, 54, 37, "", 1081, 8, "Switch#elecave::OnRedDeath";
    end;

// Being ticks

OnChaos:
    if (isdead()) end;
L_Set_Color:
    message strcharinfo(0), "You feel funny.  You think your color has changed.";
    set @ELE_CAVE_COLOR, rand(1, 2);
    end;

OnTick:
    if (isdead()) end;

    // Count this player as alive
    set $@ELE_CAVE_PLAYER_COUNT, $@ELE_CAVE_PLAYER_COUNT + 1;

    set @drainamount, MaxHp / -20;

    if ($@ELE_CAVE_DIFF != 0) heal @drainamount * $@ELE_CAVE_DIFF, 0;

    // Make sure they have a color
    if (@ELE_CAVE_COLOR == 0) goto L_Set_Color;

    if (@ELE_CAVE_COLOR == 1) goto L_Do_Red;
    if (@ELE_CAVE_COLOR == 2) goto L_Do_Blue;

    end;

L_Do_Red:
    specialeffect2 114; // Red effects

    if (isin("005-4.gat", 42, 19, 54, 32)) goto L_Heal;
    if (isin("005-4.gat", 32, 19, 54, 37)) end;
    message strcharinfo(0), "Sparks are flying between you and a piller.  Maybe you should stand near a piller with the same color as you.";
    heal MaxHp / -6, 0;

    end;

L_Do_Blue:
    specialeffect2 115; // Blue effects

    if (isin("005-4.gat", 19, 19, 31, 32)) goto L_Heal;
    if (isin("005-4.gat", 19, 19, 41, 37)) end;
    message strcharinfo(0), "Sparks are flying between you and a piller.  Maybe you should stand near a piller with the same color as you";
    heal MaxHp / -6, 0;

    end;

L_Heal:
    heal MaxHp / 20, 0;
    end;

// Death triggers
OnBlueDeath:
    // Blue players have to kill blue sparks
    if (@ELE_CAVE_COLOR == 2) end;
    message strcharinfo(0), "The dying spark reacts explosively with you.  You should only kill sparks with the same color as you.";
    heal MaxHp / -2, 0;
    end;

OnRedDeath:
    // Red players have to kill red sparks
    if (@ELE_CAVE_COLOR == 1) end;
    message strcharinfo(0), "The dying spark reacts explosively with you.  You should only kill sparks with the same color as you.";
    heal MaxHp / -2, 0;
    end;

OnInit:
    if (debug >= 2) end;
    initnpctimer;
    stopnpctimer;
L_CleanUp:
    set $@ELE_CAVE_LAST_MESSAGE, 0;
    set $@ELE_CAVE_STATUS, 0;
    set $@ELE_CAVE_PLAYER_COUNT, 0;
    set $@ELE_CAVE_LEVEL, 0;
    set $@ELE_CAVE_ROUND_TIMER, 0;

    killmonster "005-4.gat", "Switch#elecave::OnBlueDeath";
    killmonster "005-4.gat", "Switch#elecave::OnRedDeath";

    stopnpctimer;
    setnpctimer 0;
    end;
}