import "std.zh" //Also used by Linked Secrets script. //If using both comment this out. //Be sure to give all switches that use this unique values. int SecretArray[65536]; //A collision between an lweapon and an ffc. bool WeaponCollision(lweapon b, ffc a) { int ax = a->X +1; int bx = b->X + b->HitXOffset+1; int ay = a->Y+1; int by = b->Y + b->HitYOffset+1; if(!b->CollDetection) return false; return RectCollision(ax, ay, ax+a->EffectWidth-1, ay+a->EffectHeight-1, bx, by, bx+b->HitWidth-1, by+b->HitHeight-1); } //A collision between an lweapon and an ffc. bool WeaponCollision(ffc a, lweapon b) { int ax = a->X +1; int bx = b->X + b->HitXOffset+1; int ay = a->Y+1; int by = b->Y + b->HitYOffset+1; if(!b->CollDetection) return false; return RectCollision(ax, ay, ax+a->EffectWidth-1, ay+a->EffectHeight-1, bx, by, bx+b->HitWidth-1, by+b->HitHeight-1); } //D0- Sound made when switch is hit. //D1- Which toggle has been hit. //D2- Which lweapon activates this toggle //D3- How to affect toggled combos, in terms of combo ids // Can use both positive and negative values. //D4- What placed flag to look for //D5- If more than one toggle of this index is on screen, set the first one to non-zero. // Uses values from 1 to 7. ffc script Toggle_Handler{ void run(int sfx,int level_index, int lw_id, int secret_offset, int combo_flag, int lone){ int i; lweapon wpn; //If nothing is stored in Screen->D zero. if(lone){ if(Screen->D[lone]==0){ Screen->D[lone]= SecretArray[level_index]; if(SecretArray[level_index]) ComboHandler(level_index,combo_flag,secret_offset); } else{ if(SecretArray[level_index]) ComboHandler(level_index,combo_flag,secret_offset); } } int Switch_Cooldown; while(true){ if(lw_id!=0){ for(i= Screen->NumLWeapons();i>0;i--){ wpn = Screen->LoadLWeapon(i); if(wpn->ID==lw_id && WeaponCollision(wpn,this) && Switch_Cooldown<=0){ if(!SecretArray[level_index]) SecretArray[level_index]=1; else if(SecretArray[level_index]) SecretArray[level_index]=0; Game->PlaySound(sfx); ComboHandler(level_index,combo_flag,secret_offset); Screen->D[lone]= SecretArray[level_index]; Switch_Cooldown= 60; if(wpn->ID!=LW_BRANG && wpn->ID!=LW_HOOKSHOT) Remove(wpn); else wpn->DeadState = WDS_BOUNCE; } } } if(Switch_Cooldown>0) Switch_Cooldown--; Waitframe(); } } void ComboHandler(int index, int flag, int secret_offset){ for(int i=0;i<=175;i++){ if(Screen->ComboF[i]==flag){ if(SecretArray[index]) Screen->ComboD[i]+=secret_offset; else if(!SecretArray[index]) Screen->ComboD[i]-=secret_offset; } } } }