Copy to Clipboard Test

Jump-Drown Spawn Code

import "std.zh"

// Sample global script just using the JumpDrownSpawn function.

global script Slot_2{
   void run(){
		
      // Several scripts use these same variables, only need them once.

      int olddmap = Game->GetCurDMap();
      int oldscreen = Game->GetCurDMapScreen();
      int startx = Link->X;
      int starty = Link->Y;
      int startdir = Link->Dir;

      // Variable used by JumpDrownSpawn.
      int jumping = 0;


      while(true){

         // JumpDrownSpawn 

         if(Link->Action != LA_SCROLLING){

            if(!IsJumping() && jumping == 0 && (oldscreen != Game->GetCurDMapScreen() || olddmap != Game->GetCurDMap())){
               olddmap = Game->GetCurDMap();
               oldscreen = Game->GetCurDMapScreen();
               startx = Link->X;
               starty = Link->Y;
               startdir = Link->Dir;
            }
         }
		   
         jumping = JumpDrownSpawn(jumping, startx, starty, olddmap, oldscreen, startdir);

         // END JumpDrownSpawn


         Waitdraw();
		

         Waitframe();

      }//end whileloop
   }//end run
}//end global slot2



// JumpDrownSpawn function

// Returns 0 if not jumping, 1 if currently jumping, 2 if drowning from a jump
int JumpDrownSpawn(int jumping, int x, int y, int dmap, int scr, int dir){
    if(Link->Action == LA_SCROLLING) return jumping;

    if( IsJumping() && jumping != 2){
       return 1;     // still jumping
    }

    // done jumping, are we drowning?
    if((jumping == 1 || jumping == 2) && Link->Action == LA_DROWNING){
       return 2;  // yes drowning, and still drowning
    }

    // done drowning, respawn
    if(jumping == 2){
       Link->X = x;
       Link->Y = y;
       Link->Dir = dir;

       if(Game->GetCurDMap()!=dmap || Game->GetCurDMapScreen()!=scr){
          Link->PitWarp(dmap, scr);
          WaitNoAction();
       }

       Link->Action = LA_GOTHURTLAND;
       Link->HitDir = -1;
    }

    return 0; // not jumping
}


// utility function returns true if Link is jumping, necessary because SideView gravity sucks
// might need tweaking depending on other SideView scripts you use.

bool IsJumping(){
  if(IsSideview()){
     if(Link->Action == LA_SWIMMING || Link->Action == LA_DIVING || Link->Action == LA_DROWNING) return false;
     if(Link->Jump != 0) return true;
     if(!OnSidePlatform(Link->X,Link->Y)) return true;
  }
  else{
     if(Link->Z > 0) return true;
  }

  return false;
}