global script Slot_2{ void run(){ //Initialise local vars. holding_block = 0; int curScreen=0; int curDmap=0; int dPoofX[10]={0,0,0,0,0,0,0,0,0,0}; int dPoofY[10]={0,0,0,0,0,0,0,0,0,0}; int dp_cx=777;//777 indicates no value int dp_cy=0; int dp_numEs=0; npc dpTest; lweapon dPoof; //Used for its sprite. int dpTD=0;//bianary array to do int dpNTD=111111111111111b;//bianary array not to do // Variables used by several scripts - HoleLava, JumpSpawn. // The listed scripts work together, other scripts that use them may not. int olddmap = Game->GetCurDMap(); int oldscreen = Game->GetCurDMapScreen(); int startx = Link->X; int starty = Link->Y; int startdir = Link->Dir; Falling = 0; Warping = false; int jumping = 0; // Variable used by JumpSpawn. StartGhostZH(); while(true){ ScrollFix(); // keep at top of while loop ExtendEnemies(); PowerBracelet(); UpdateGhostZH1(); Poof(); BowAnimation(); PegasusBoots(); // before waitdraw Sideview_Swim(); // before waitdraw LadderUpdate1(); HolesAndLava(); JumpSpawnChecks(); GLB_Sideview_Ladder(); Waitdraw(); LadderUpdate2(); UpdateGhostZH2(); Waitframe(); }//end whileloop }//end run }//end global slot2 ///Global functions, modular. void LadderUpdate2(){ if (onLadder) Link->Dir = DIR_UP; } void Poof(){ if(ScreenFlag(SF_MISC, 2)==0){ dpTD=0; if(Game->GetCurDMapScreen()!=curScreen||Game->GetCurDMap()!=curDmap){ curScreen=Game->GetCurDMapScreen(); curDmap=Game->GetCurDMap(); dp_numEs=0; dpNTD=111111111111111b; } if(Screen->NumNPCs()>dp_numEs){ dpNTD=111111111111111b; for(int i=0;i<15;i++){ dpTest=Screen->LoadNPC(i+1); if(dpTest->isValid()&&dpTest->ID>10&&dpTest->Type!=NPCT_FAIRY&&dpTest->Type!=NPCT_ROCK){ dPoofX[i]=dpTest->X; dPoofY[i]=dpTest->Y; dpTest->Misc[15]=i+1; dpNTD&=~Pow(2,i); } } } dp_cx=777; for(int i=0;i<15;i++){ int n=-1; dpTest=Screen->LoadNPC(i+1); if(dpTest->isValid()){ n=dpTest->Misc[15]-1; } if(n>=0&&(dpNTD&Pow(2,n))==0){ dPoofX[n]=dpTest->X; dPoofY[n]=dpTest->Y; dpTD|=Pow(2,n); } } if((dpTD|dpNTD)!=111111111111111b){ int n=-1; for(int i=0;n==-1;i++){ if(((dpTD|dpNTD)&Pow(2,i))==0){ n=i; dpNTD|=Pow(2,n); dp_cx=dPoofX[n]+(dp_size-1)*8; dp_cy=dPoofY[n]+(dp_size-1)*8; } } } if(dp_cx!=777){ dPoof = Screen->CreateLWeapon(LW_SPARKLE); dPoof->Extend = 4; dPoof->TileWidth = dp_size; dPoof->TileHeight = dp_size; dPoof->Behind=false; dPoof->X = dp_cx- dp_size*8; dPoof->Y = dp_cy- dp_size*8; dPoof->UseSprite(dp_sprite); } dp_numEs=Screen->NumNPCs(); } } void HolesAndLava(){ if(Link->Action != LA_SCROLLING){ Update_HoleLava(startx, starty, olddmap, oldscreen, startdir); // before dmap/x/y variable set, before waitdraw if( !IsJumping() && jumping == 0 && !Falling && (oldscreen != Game->GetCurDMapScreen() || olddmap != Game->GetCurDMap())){ olddmap = Game->GetCurDMap(); oldscreen = Game->GetCurDMapScreen(); startx = Link->X; starty = Link->Y; startdir = Link->Dir; } } } void LadderUpdate1(){ if(Link->Action != LA_SCROLLING && (oldscreen != Game->GetCurDMapScreen() || olddmap != Game->GetCurDMap())){ if(onLadder){ if(!IsSideview()) onLadder = false; else{ int buffer[] = "Sideview_Ladder"; if(CountFFCsRunning(Game->GetFFCScript(buffer)) == 0) onLadder = false; } } if(underwater){ if(!IsSideview()) underwater = false; else{ int buffer[] = "Swimming"; if(CountFFCsRunning(Game->GetFFCScript(buffer)) == 0) underwater = false; } } } } void JumpSpawnChecks(){ if(underwater) jumping = 0; else jumping = JumpSpawn(jumping, startx, starty, olddmap, oldscreen, startdir); // after dmap/x/y variable set, before waitdraw }