115 lines
3.1 KiB
Plaintext
115 lines
3.1 KiB
Plaintext
|
|
||
|
//let imgEffect = dirCurrent ~ "./img/Kevin_Effect.png";
|
||
|
int PetalEffect = ObjParticleList_Create(OBJ_PARTICLE_LIST_2D);
|
||
|
|
||
|
task InitEffect(){
|
||
|
_EffectListPreRender(PetalEffect, imgEffect, [0, 0, 256, 256]);
|
||
|
}
|
||
|
|
||
|
let imgEffect = dirCurrent ~ "./img/Kevin_Effect.png";
|
||
|
|
||
|
// Enemy deletion/explosion effects.
|
||
|
|
||
|
// This particle list is used for all instances of the effect.
|
||
|
|
||
|
task _EffectListPreRender(
|
||
|
int targetList,
|
||
|
texture, int[] rect
|
||
|
){
|
||
|
|
||
|
ObjPrim_SetTexture(targetList, texture);
|
||
|
|
||
|
Obj_SetRenderPriorityI(targetList, 39);
|
||
|
ObjPrim_SetPrimitiveType(targetList, PRIMITIVE_TRIANGLELIST);
|
||
|
ObjPrim_SetVertexCount(targetList, 4);
|
||
|
|
||
|
ObjRender_SetBlendType(targetList, BLEND_ALPHA);
|
||
|
|
||
|
// Left-top, right-top, left-bottom, right-bottom
|
||
|
|
||
|
ObjPrim_SetVertexUVT(targetList, 0, rect[0], rect[1]);
|
||
|
ObjPrim_SetVertexUVT(targetList, 1, rect[2], rect[1]);
|
||
|
ObjPrim_SetVertexUVT(targetList, 2, rect[0], rect[3]);
|
||
|
ObjPrim_SetVertexUVT(targetList, 3, rect[2], rect[3]);
|
||
|
|
||
|
// Vertex positions are offset with deltas so that the sprite is centered
|
||
|
|
||
|
float dU = (rect[2] - rect[0])/2;
|
||
|
float dV = (rect[3] - rect[1])/2;
|
||
|
|
||
|
ObjPrim_SetVertexPosition(targetList, 0, -dU, -dV, 1);
|
||
|
ObjPrim_SetVertexPosition(targetList, 1, dU, -dV, 1);
|
||
|
ObjPrim_SetVertexPosition(targetList, 2, -dU, dV, 1);
|
||
|
ObjPrim_SetVertexPosition(targetList, 3, dU, dV, 1);
|
||
|
|
||
|
ObjPrim_SetVertexIndex(targetList, [0, 1, 2, 1, 2, 3]);
|
||
|
|
||
|
}
|
||
|
|
||
|
// Enemy go Boom
|
||
|
|
||
|
/*
|
||
|
5 flower petals appear from the enemy and spin outwards.
|
||
|
Their angle constantly changes and their alpha lowers over time.
|
||
|
*/
|
||
|
|
||
|
task _ExplosionEffect(float enmX, float enmY, int targetList){
|
||
|
|
||
|
int i = 0;
|
||
|
int effectLength = 45;
|
||
|
int effectNum = 5;
|
||
|
int dir = 1;
|
||
|
|
||
|
Obj_SetRenderPriorityI(targetList, 40);
|
||
|
//TExplosionA(enmX, enmY, 255/effectLength, 9/effectLength);
|
||
|
|
||
|
/*ascent(i in 0..effectNum){
|
||
|
_CreatePetal(rand(5, 10)*dir, rand(5, 10)*dir, rand(0, 360));
|
||
|
dir *= -1;
|
||
|
//_CreatePetal(rand(50, 80), rand(-80, -50), rand(0, 360));
|
||
|
}*/
|
||
|
|
||
|
_CreatePetal(rand(8, 11), rand(-8, -11), rand(0, 360));
|
||
|
_CreatePetal(rand(-11, -8), rand(-2, 2), rand(0, 360));
|
||
|
_CreatePetal(rand(8, 8), rand(-2, 2), rand(0, 360));
|
||
|
_CreatePetal(rand(-11, -8), rand(8, 11), rand(0, 360));
|
||
|
_CreatePetal(rand(8, 11), rand(8, 11), rand(0, 360));
|
||
|
|
||
|
ObjSound_Play(sfxBoom);
|
||
|
|
||
|
// Create a petal with:
|
||
|
// x offset every frame, y offset every frame
|
||
|
|
||
|
task _CreatePetal(float spdX, float spdY, float baseAng){
|
||
|
|
||
|
float x = enmX, y = enmY;
|
||
|
let x_speed = spdX;
|
||
|
let y_speed = spdY;
|
||
|
let z_add = rand(-5, 5);
|
||
|
|
||
|
ascent(i in 0..effectLength){
|
||
|
_PetalMovement(Interpolate_Decelerate(1.5, 0.5, i/effectLength), Interpolate_Decelerate(255, 0, i/effectLength));
|
||
|
yield;
|
||
|
}
|
||
|
|
||
|
task _PetalMovement(scale, alpha){
|
||
|
|
||
|
ObjParticleList_SetScale(targetList, scale);
|
||
|
ObjParticleList_SetAngleZ(targetList, baseAng);
|
||
|
ObjParticleList_SetPosition(targetList, x, y, 1);
|
||
|
ObjParticleList_SetAlpha(targetList, alpha);
|
||
|
|
||
|
//Submits the current data to an instance, cleared every frame.
|
||
|
ObjParticleList_AddInstance(targetList);
|
||
|
|
||
|
x += x_speed;
|
||
|
y += y_speed;
|
||
|
baseAng += z_add;
|
||
|
|
||
|
yield;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|