//D0: If D0 >0, set to the map to use as reference for under combos //D1: If D0 >0, set to the screen to use as reference for under combos (convert screen numbers from Hex to Decimal) ffc script TruePushblockUnderCombo{ void run(int refMap, int refScreen){ int i; int pos; int cd; int cc; int cf; int ci; int pushBlockX; int pushBlockY; bool wasPushBlock; //Keeps track of whether a push block has started moving int underCMB[176]; int underCS[176]; int underFlag[176]; //Mark which flags are push blocks bool pushFlags[105]; pushFlags[CF_PUSHUPDOWN] = true; pushFlags[CF_PUSH4WAY] = true; pushFlags[CF_PUSHLR] = true; pushFlags[CF_PUSHUP] = true; pushFlags[CF_PUSHDOWN] = true; pushFlags[CF_PUSHLEFT] = true; pushFlags[CF_PUSHRIGHT] = true; pushFlags[CF_PUSHUPDOWNNS] = true; pushFlags[CF_PUSHLEFTRIGHTNS] = true; pushFlags[CF_PUSH4WAYNS] = true; pushFlags[CF_PUSHUPNS] = true; pushFlags[CF_PUSHDOWNNS] = true; pushFlags[CF_PUSHLEFTNS] = true; pushFlags[CF_PUSHRIGHTNS] = true; pushFlags[CF_PUSHUPDOWNINS] = true; pushFlags[CF_PUSHLEFTRIGHTINS] = true; pushFlags[CF_PUSH4WAYINS] = true; pushFlags[CF_PUSHUPINS] = true; pushFlags[CF_PUSHDOWNINS] = true; pushFlags[CF_PUSHLEFTINS] = true; pushFlags[CF_PUSHRIGHTINS] = true; //Set initial values for all combos on the screen for(i=0; i<176; i++){ cd = Screen->ComboD[i]; cc = Screen->ComboC[i]; cf = Screen->ComboF[i]; ci = Screen->ComboI[i]; //Set combos underneath a push block if(pushFlags[cf] || pushFlags[ci]){ //If a reference screen is set, draw from that if(refMap>0){ underCMB[i] = Game->GetComboData(refMap, refScreen, i); underCS[i] = Game->GetComboCSet(refMap, refScreen, i); underFlag[i] = Game->GetComboFlag(refMap, refScreen, i); } //Otherwise use under combo else{ underCMB[i] = Screen->UnderCombo; underCS[i] = Screen->UnderCSet; underFlag[i] = 0; } } else{ underCMB[i] = cd; underCS[i] = cc; underFlag[i] = cf; } } while(true){ //If there's a push block on the screen, manage undercombos if(Screen->MovingBlockX>-1){ //If the block just started moving, set the undercombo if(!wasPushBlock){ pos = ComboAt(Screen->MovingBlockX+8, Screen->MovingBlockY+8); Screen->ComboD[pos] = underCMB[pos]; Screen->ComboC[pos] = underCS[pos]; Screen->ComboF[pos] = underFlag[pos]; } pushBlockX = Screen->MovingBlockX; pushBlockY = Screen->MovingBlockY; wasPushBlock = true; } else{ wasPushBlock = false; for(i=0; i<176; i++){ cd = Screen->ComboD[i]; cc = Screen->ComboC[i]; cf = Screen->ComboF[i]; ci = Screen->ComboI[i]; //Only update combos in the array if they aren't covered by a push block if(!(pushFlags[cf] || pushFlags[ci])){ underCMB[i] = cd; underCS[i] = cc; underFlag[i] = cf; } } } Waitframe(); } } }