//Attribytes[0] - Visual Sprite
//Attribytes[1] - Sprite Width
//Attribytes[2] - Sprite Height
//Attribytes[3] - SFX
//Attribytes[4] - Frames before the effect spawns
//Attrishorts[0] - Secondary Effect
// 0 - None
// 1 - LWeapon
// 2 - EWeapon
// 3 - Enemy
//Attrishorts[1] - Effect ID
//Attrishorts[2] - Effect Sprite
//Attrishorts[3] - Effect Damage
//Attrishorts[4] - Effect Step
//Attrishorts[5] - Effect Delay
//Attrishorts[6] - Effect Angle
combodata script ComboSprite{
void run(){
int visualSprite = this->Attribytes[0];
int spriteW = this->Attribytes[1];
int spriteH = this->Attribytes[2];
int spriteSFX = this->Attribytes[3];
int staggerEffect = this->Attribytes[4];
if(spriteW==0) spriteW = 1;
if(spriteH==0) spriteH = 1;
int effectType = this->Attrishorts[0];
int effectID = this->Attrishorts[1];
int effectSprite = this->Attrishorts[2];
int effectDamage = this->Attrishorts[3];
int effectStep = this->Attrishorts[4];
int effectDelay = this->Attrishorts[5];
int effectAngle = this->Attrishorts[6];
if(visualSprite){
lweapon effect = CreateLWeaponAt(LW_SPARKLE, this->X, this->Y);
effect->DrawXOffset = -(spriteW-1)*8;
effect->DrawYOffset = -(spriteH-1)*8;
effect->Extend = 3;
effect->TileWidth = spriteW;
effect->TileHeight = spriteH;
effect->UseSprite(visualSprite);
effect->CollDetection = false;
}
if(spriteSFX)
Game->PlaySound(spriteSFX);
if(staggerEffect){
for(int i=0; i<staggerEffect; ++i){
Waitframe();
}
}
switch(effectType){
case 1: //LWeapon
lweapon l = CreateLWeaponAt(effectID, this->X, this->Y);
l->UseSprite(effectSprite);
l->Step = 0;
l->Dir = -1;
l->Damage = effectDamage;
l->Angular = true;
int angle = Angle(this->X, this->Y, Link->X, Link->Y);
if(effectAngle>0)
angle = effectAngle;
if(effectStep<0){
angle += 180;
effectStep = Abs(effectStep);
}
l->Angle = DegtoRad(angle);
if(effectDelay>0){
for(int i=0; i<effectDelay; ++i){
Waitframe();
}
}
l->Step = effectStep;
break;
case 2: //EWeapon
eweapon e = CreateEWeaponAt(effectID, this->X, this->Y);
e->UseSprite(effectSprite);
e->Step = 0;
e->Dir = -1;
e->Damage = effectDamage;
e->Angular = true;
int angle = Angle(this->X, this->Y, Link->X, Link->Y);
if(effectAngle>0)
angle = effectAngle;
if(effectStep<0){
angle += 180;
effectStep = Abs(effectStep);
}
e->Angle = DegtoRad(angle);
if(effectDelay>0){
for(int i=0; i<effectDelay; ++i){
Waitframe();
}
}
e->Step = effectStep;
break;
case 3: //NPC
npc n = CreateNPCAt(effectID, this->X, this->Y);
if(effectDamage>0)
n->Damage = effectDamage;
if(effectDelay>0){
int oldStep = n->Step;
n->Step = 0;
for(int i=0; i<effectDelay; ++i){
n->Step = 0;
Waitframe();
}
n->Step = oldStep;
if(effectStep>0)
n->Step = effectStep;
}
break;
}
}
}
combodata script RedrawCombo{
void run(){
mapdata lyr = Game->LoadTempScreen(this->Layer);
while(true){
Screen->FastCombo(this->Layer, this->X, this->Y, this->ID, lyr->ComboC[this->Pos], 128);
Waitframe();
}
}
}