//Custom Combo Types
//0 - None
//1 - CustomDamage (Damage Amount, Prevention Item, NA, NA)
//2 - Status Tiles (Effect, NA, NA, NA)
//3 - One Way Conveyor (Direction, NA, NA, NA)
//4 - SpringTiles (Spring Force, NA, NA, NA)
//5 - Walk Near-Draw Tile (Tile Num, Tile Layer, Tile CSet, Tile Transparency)
//6 - Slippery Ice (NA, NA, NA, NA)
//7 - Modify Endurance (Amount, Bar Tiles, Bar Color, No Endure Damage)
//8 - Warp Tiles (DMap, Screen, NA, NA)
//9 - Button Tiles (New Tiles, Target FFC, NA, NA)
ffc script CustomCombo {
void run(int replaceCombo, int customType, int ignoreZ, int varOne, int varTwo, int varThree, int varFour) {
int comboPos = 0;
int comboFlag = -1;
int effectDelay = 0;
while (true)
{
comboPos = ComboAt(Link->X + 8, Link->Y + 8);
if (Screen->ComboD[comboPos] == replaceCombo && customType != 5)
{
if (customType == 1)
{
int currLevel = Game->GetCurDMap();
bool causeDamage = true;
if (ignoreZ == 0 && Link->Z != 0)
{
causeDamage = false;
}
else if (varTwo == I_MAP)
{
if ((Game->LItems[currLevel] & 2) == 2)
{
causeDamage = false;
}
}
else if (varTwo == I_COMPASS)
{
if ((Game->LItems[currLevel] & 4) == 4)
{
causeDamage = false;
}
}
else if (varTwo == I_BOSSKEY)
{
if ((Game->LItems[currLevel] & 16) == 16)
{
causeDamage = false;
}
}
else if (Link->Item[varTwo])
{
causeDamage = false;
}
if (causeDamage && effectDelay == 0)
{
Link->HP-=varOne;
Link->Action = LA_GOTHURTLAND;
Game->PlaySound(SFX_OUCH);
effectDelay = 90;
}
}
else if (customType == 2)
{
if (ignoreZ != 0 || Link->Z == 0)
{
//Status Effects
//0 = Temporary Sword Loss
//1 = Lose Sword
//2 = Regain Sword
//3 = Temporary Item Loss
//4 = Lose Items
//5 = Regain Items
//6 = Temporary All Loss
//7 = Lose All
//8 = Regain All
//9 = Become Drunk
//10 = Become Sober
if (varOne == 0 || varOne == 6)
{
Link->SwordJinx = 300;
}
else if (varOne == 1 || varOne == 7)
{
Link->SwordJinx = -1;
}
else if (varOne == 2 || varOne == 8)
{
Link->SwordJinx = 0;
}
if (varOne == 3 || varOne == 6)
{
Link->ItemJinx = 300;
}
else if (varOne == 4 || varOne == 7)
{
Link->ItemJinx = -1;
}
else if (varOne == 5 || varOne == 8)
{
Link->ItemJinx = 0;
}
if (varOne == 9 && Link->Drunk == 0)
{
Link->Drunk = 900;
}
else if (varOne == 10)
{
Link->Drunk = 0;
}
}
}
else if (customType == 3)
{
if (ignoreZ != 0 || Link->Z == 0)
{
if (varOne == DIR_UP)
{
if (is_walkable(Link->X, Link->Y + 7) && is_walkable(Link->X + 15, Link->Y + 7))
{
Link->Y--;
}
}
else if (varOne == DIR_DOWN)
{
if (is_walkable(Link->X, Link->Y + 17) && is_walkable(Link->X + 15, Link->Y + 17))
{
Link->Y++;
}
}
else if (varOne == DIR_LEFT)
{
if (is_walkable(Link->X - 1, Link->Y + 8) && is_walkable(Link->X - 1, Link->Y + 15))
{
Link->X--;
}
}
else if (varOne == DIR_RIGHT)
{
if (is_walkable(Link->X + 17, Link->Y + 8) && is_walkable(Link->X + 17, Link->Y + 15))
{
Link->X++;
}
}
}
}
else if (customType == 4)
{
if (ignoreZ != 0 || Link->Z == 0)
{
if (Link->Z == 0)
{
Link->Jump = varOne;
Game->PlaySound(SFX_JUMP);
}
else if (Link->Jump < 0)
{
Link->Jump = 1;
}
}
}
else if (customType == 6)
{
if (ignoreZ != 0 || Link->Z == 0)
{
if (comboFlag == -1)
{
if (Link->Dir < 4)
{
comboFlag = Link->Dir;
}
}
else if (comboFlag < 4)
{
for (int loopIndex = 0; loopIndex < 2; loopIndex++)
{
if (comboFlag == DIR_UP)
{
if (is_walkable(Link->X, Link->Y + 7) && is_walkable(Link->X + 15, Link->Y + 7))
{
Link->Y--;
}
else
{
comboFlag = 4;
}
}
else if (comboFlag == DIR_DOWN)
{
if (is_walkable(Link->X, Link->Y + 17) && is_walkable(Link->X + 15, Link->Y + 17))
{
Link->Y++;
}
else
{
comboFlag = 4;
}
}
else if (comboFlag == DIR_LEFT)
{
if (is_walkable(Link->X - 1, Link->Y + 8) && is_walkable(Link->X - 1, Link->Y + 15))
{
Link->X--;
}
else
{
comboFlag = 4;
}
}
else if (comboFlag == DIR_RIGHT)
{
if (is_walkable(Link->X + 17, Link->Y + 8) && is_walkable(Link->X + 17, Link->Y + 15))
{
Link->X++;
}
else
{
comboFlag = 4;
}
}
}
if (Link->InputUp)
{
Link->Dir = DIR_UP;
}
else if (Link->InputDown)
{
Link->Dir = DIR_DOWN;
}
if (Link->InputLeft)
{
Link->Dir = DIR_LEFT;
}
else if (Link->InputRight)
{
Link->Dir = DIR_RIGHT;
}
Link->InputUp = false;
Link->InputDown = false;
Link->InputLeft = false;
Link->InputRight = false;
}
else
{
if (Link->InputUp)
{
comboFlag = DIR_UP;
if (Link->X % 8 != 0)
{
if (Link->X % 8 < 4)
{
Link->X-=(Link->X % 8);
}
else
{
Link->X+=(8 - (Link->X % 8));
}
}
}
else if (Link->InputDown)
{
comboFlag = DIR_DOWN;
if (Link->X % 8 != 0)
{
if (Link->X % 8 < 4)
{
Link->X-=(Link->X % 8);
}
else
{
Link->X+=(8 - (Link->X % 8));
}
}
}
if (Link->InputLeft)
{
comboFlag = DIR_LEFT;
if (Link->Y % 8 != 0)
{
if (Link->Y % 8 < 4)
{
Link->Y-=(Link->Y % 8);
}
else
{
Link->Y+=(8 - (Link->Y % 8));
}
}
}
else if (Link->InputRight)
{
comboFlag = DIR_RIGHT;
if (Link->Y % 8 != 0)
{
if (Link->Y % 8 < 4)
{
Link->Y-=(Link->Y % 8);
}
else
{
Link->Y+=(8 - (Link->Y % 8));
}
}
}
}
}
}
else if (customType == 7)
{
if (effectDelay <= 0)
{
if (currEndurance == 0 && varOne < 0)
{
Link->HP-=varFour;
Link->Action = LA_GOTHURTLAND;
Game->PlaySound(SFX_OUCH);
effectDelay = 60;
}
currEndurance+=varOne;
if (currEndurance > maxEndurance)
{
currEndurance = maxEndurance;
}
if (currEndurance < 0)
{
currEndurance = 0;
}
effectDelay = 30;
}
else
{
effectDelay--;
}
}
else if (customType == 8)
{
if (ignoreZ != 0 || Link->Z == 0)
{
Link->PitWarp(varOne, varTwo);
}
}
else if (customType == 9)
{
if (ignoreZ != 0 || Link->Z == 0)
{
for (int loopIndex = 0; loopIndex < 176; loopIndex++)
{
if (Screen->ComboD[loopIndex] == replaceCombo)
{
Screen->ComboD[loopIndex] = varOne;
}
}
if (varTwo > 0 && varTwo < 32)
{
ffc targetFFC = Screen->LoadFFC(varTwo);
targetFFC->CSet = 0;
}
this->Data = 0;
Quit();
Edited by Purplemandown, 01 April 2009 - 09:09 PM.