mirror of
https://github.com/pret/pokeplatinum.git
synced 2026-03-21 17:55:13 -05:00
Document move emitter a2b linear script func
This commit is contained in:
parent
cb2aad96fa
commit
db561b9cf9
|
|
@ -16,6 +16,7 @@
|
|||
enum CameraProjection {
|
||||
CAMERA_PROJECTION_PERSPECTIVE = 0,
|
||||
CAMERA_PROJECTION_ORTHOGRAPHIC,
|
||||
CAMERA_PROJECTION_COUNT
|
||||
};
|
||||
|
||||
typedef struct CameraAngle {
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@
|
|||
#define BATTLER_TYPE_ENEMY_SIDE_SLOT_1 3
|
||||
#define BATTLER_TYPE_PLAYER_SIDE_SLOT_2 4
|
||||
#define BATTLER_TYPE_ENEMY_SIDE_SLOT_2 5
|
||||
#define BATTLER_TYPE_MAX 6
|
||||
|
||||
#define BATTLE_SIDE_PLAYER 0
|
||||
#define BATTLE_SIDE_ENEMY 1
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
#ifndef POKEPLATINUM_CONSTANTS_BATTLE_ANIM_H
|
||||
#define POKEPLATINUM_CONSTANTS_BATTLE_ANIM_H
|
||||
// clang-format off
|
||||
|
||||
#include "constants/battle.h"
|
||||
|
||||
// clang-format off
|
||||
#define BATTLE_ANIM_VAR_BG_MOVE_STEP_X 0 //< Step size for background movement in X direction (BATTLE_BG_SWITCH_FLAG_MOVE)
|
||||
#define BATTLE_ANIM_VAR_BG_MOVE_STEP_Y 1 //< Step size for background movement in Y direction (BATTLE_BG_SWITCH_FLAG_MOVE)
|
||||
#define BATTLE_ANIM_VAR_BG_MOVE_START_X 2 //< Starting position for background movement on X axis (BATTLE_BG_SWITCH_FLAG_MOVE)
|
||||
|
|
@ -103,6 +105,11 @@
|
|||
#define BATTLE_ANIM_MON_SPRITE_4 4
|
||||
#define BATTLE_ANIM_MON_SPRITE_F(N) (1 << (N))
|
||||
|
||||
// Arbitrary scaling factor to convert particle world coordinates to screen coordinates
|
||||
#define BATTLE_PARTICLE_PIXEL_FACTOR 172
|
||||
#define BATTLE_PARTICLE_WORLD_TO_SCREEN(X) ((X) / BATTLE_PARTICLE_PIXEL_FACTOR)
|
||||
#define BATTLE_PARTICLE_SCREEN_TO_WORLD(X) ((X) * BATTLE_PARTICLE_PIXEL_FACTOR)
|
||||
|
||||
// Default positions for battler sprites, lines up with BATTLER_TYPE_*
|
||||
#define BATTLER_POS_SOLO_PLAYER_X 64
|
||||
#define BATTLER_POS_SOLO_PLAYER_Y 112
|
||||
|
|
@ -123,6 +130,9 @@
|
|||
#define CONTESTANT_POS_ENEMY_X 80
|
||||
#define CONTESTANT_POS_ENEMY_Y 42
|
||||
|
||||
#define CONTESTANT_TYPE_PLAYER (BATTLER_TYPE_MAX + BATTLER_TYPE_SOLO_PLAYER)
|
||||
#define CONTESTANT_TYPE_ENEMY (BATTLER_TYPE_MAX + BATTLER_TYPE_SOLO_ENEMY)
|
||||
|
||||
#define BASE_SCALE_XY 100
|
||||
|
||||
// Script function specific constants
|
||||
|
|
@ -142,5 +152,12 @@
|
|||
#define SCALE_BATTLER_SPRITE_HOLD(frames) ((frames) >> 16)
|
||||
#define SCALE_BATTLER_SPRITE_CYCLES(frames) ((frames) & 0xFFFF)
|
||||
|
||||
#define EMITTER_ANIMATION_MODE_ATK_TO_DEF 0 //< Animation from attacker to defender
|
||||
#define EMITTER_ANIMATION_MODE_DEF_TO_ATK 1 //< Animation from defender to attacker
|
||||
#define EMITTER_ANIMATION_DEFAULT_FRAMES 0xFF
|
||||
#define EMITTER_ANIMATION_PARAMS(skipFrames, maxFrames) (((skipFrames & 0xFFFF) << 16) | (maxFrames & 0xFFFF))
|
||||
#define EMITTER_ANIMATION_SKIP_FRAMES(params) ((params & 0xFFFF0000) >> 16)
|
||||
#define EMITTER_ANIMATION_MAX_FRAMES(params) ((params) & 0x0000FFFF)
|
||||
|
||||
// clang-format on
|
||||
#endif // POKEPLATINUM_CONSTANTS_BATTLE_ANIM_H
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ void ov12_02229304(BattleAnimSystem *param0);
|
|||
void ov12_02229638(BattleAnimSystem *param0);
|
||||
void ov12_02229810(BattleAnimSystem *param0);
|
||||
void ov12_02229908(BattleAnimSystem *param0);
|
||||
void ov12_02229B28(BattleAnimSystem *param0);
|
||||
void BattleAnimScriptFunc_MoveEmitterA2BLinear(BattleAnimSystem *param0);
|
||||
void ov12_02229C5C(BattleAnimSystem *param0);
|
||||
void ov12_02229E54(BattleAnimSystem *param0);
|
||||
void ov12_0222A00C(BattleAnimSystem *param0);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ int BattleAnimUtil_GetAlliedBattler(BattleAnimSystem *param0, int param1);
|
|||
int BattleAnimUtil_GetOpposingBattlerType(int param0);
|
||||
void BattleAnimUtil_GetBattlerTypeDefaultPos(int param0, BOOL param1, Point2D *param2);
|
||||
void BattleAnimUtil_GetBattlerDefaultPos(BattleAnimSystem *param0, int param1, Point2D *param2);
|
||||
void ov12_02235448(int param0, VecFx32 *param1, int param2, int param3);
|
||||
void BattleAnimUtil_GetBattlerTypeWorldPos_Normal(int param0, VecFx32 *param1, BOOL isContest, enum CameraProjection projection);
|
||||
void ov12_02235458(int param0, VecFx32 *param1, int param2, int param3);
|
||||
void ov12_02235468(int param0, VecFx32 *param1, int param2, int param3);
|
||||
void ov12_02235478(int param0, VecFx32 *param1, int param2, int param3);
|
||||
|
|
@ -60,7 +60,7 @@ void ov12_022354C8(int param0, VecFx32 *param1, int param2, int param3);
|
|||
void ov12_022354D8(int param0, VecFx32 *param1, int param2, int param3);
|
||||
void ov12_022354E8(int param0, VecFx32 *param1, int param2, int param3);
|
||||
void ov12_022354F8(int param0, VecFx32 *param1, int param2, int param3);
|
||||
void ov12_02235508(BattleAnimSystem *param0, int param1, VecFx32 *param2);
|
||||
void BattleAnimUtil_GetBattlerWorldPos_Normal(BattleAnimSystem *param0, int param1, VecFx32 *param2);
|
||||
void ov12_02235538(BattleAnimSystem *param0, int param1, VecFx32 *param2);
|
||||
void ov12_02235568(BattleAnimSystem *param0, int param1, VecFx32 *param2);
|
||||
void ov12_02235598(BattleAnimSystem *param0, int param1, VecFx32 *param2);
|
||||
|
|
|
|||
|
|
@ -76,15 +76,15 @@ void ov12_022238E0(SPLEmitter *param0)
|
|||
int v10;
|
||||
|
||||
if (BattleAnimUtil_GetBattlerSide(v0, v2) == 0x3) {
|
||||
ov12_02235508(v0, v2, &v5);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(v0, v2, &v5);
|
||||
} else {
|
||||
v8 = BattleAnimUtil_GetBattlerType(v0, v2);
|
||||
v9 = BattleAnimUtil_GetOpposingBattlerType(v8);
|
||||
v10 = ParticleSystem_GetCameraProjection(v1);
|
||||
v4 = BattleAnimSystem_IsContest(v0);
|
||||
|
||||
ov12_02235448(v9, &v5, v4, v10);
|
||||
ov12_02235448(v8, &v6, v4, v10);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(v9, &v5, v4, v10);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(v8, &v6, v4, v10);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ void ov12_02223998(SPLEmitter *param0)
|
|||
v2 = BattleAnimSystem_GetDefender(v0);
|
||||
v1 = BattleAnimSystem_GetCurrentParticleSystem(v0);
|
||||
|
||||
ov12_02235508(v0, 0, &v3);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(v0, 0, &v3);
|
||||
|
||||
SPLEmitter_SetPosX(param0, v3.x);
|
||||
SPLEmitter_SetPosY(param0, v3.y);
|
||||
|
|
@ -146,7 +146,7 @@ void ov12_022239F4(SPLEmitter *param0)
|
|||
v0 = ParticleSystem_GetEmitterCallbackParam();
|
||||
v1 = BattleAnimSystem_GetDefender(v0);
|
||||
|
||||
ov12_02235508(v0, v1, &v2);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(v0, v1, &v2);
|
||||
|
||||
SPLEmitter_SetPosX(param0, v2.x);
|
||||
SPLEmitter_SetPosY(param0, v2.y);
|
||||
|
|
@ -162,7 +162,7 @@ void ov12_02223A38(SPLEmitter *param0)
|
|||
v0 = ParticleSystem_GetEmitterCallbackParam();
|
||||
v1 = BattleAnimSystem_GetAttacker(v0);
|
||||
|
||||
ov12_02235508(v0, v1, &v2);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(v0, v1, &v2);
|
||||
|
||||
SPLEmitter_SetPosX(param0, v2.x);
|
||||
SPLEmitter_SetPosY(param0, v2.y);
|
||||
|
|
@ -180,7 +180,7 @@ void ov12_02223A7C(SPLEmitter *param0)
|
|||
v1 = BattleAnimSystem_GetAttacker(v0);
|
||||
v2 = BattleAnimSystem_GetDefender(v0);
|
||||
|
||||
ov12_02235508(v0, v1, &v3);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(v0, v1, &v3);
|
||||
|
||||
SPLEmitter_SetPosX(param0, v3.x);
|
||||
SPLEmitter_SetPosY(param0, v3.y);
|
||||
|
|
@ -209,7 +209,7 @@ void ov12_02223AC8(SPLEmitter *param0)
|
|||
v4 = 1;
|
||||
}
|
||||
|
||||
ov12_02235448(v4, &v1, BattleAnimSystem_IsContest(v0), v3);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(v4, &v1, BattleAnimSystem_IsContest(v0), v3);
|
||||
|
||||
SPLEmitter_SetPosX(param0, v1.x);
|
||||
SPLEmitter_SetPosY(param0, v1.y);
|
||||
|
|
@ -239,7 +239,7 @@ void ov12_02223B30(SPLEmitter *param0)
|
|||
v5 = 1;
|
||||
}
|
||||
|
||||
ov12_02235448(v5, &v1, BattleAnimSystem_IsContest(v0), v4);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(v5, &v1, BattleAnimSystem_IsContest(v0), v4);
|
||||
|
||||
SPLEmitter_SetPosX(param0, v1.x);
|
||||
SPLEmitter_SetPosY(param0, v1.y);
|
||||
|
|
@ -346,10 +346,10 @@ static void ov12_02223CD4(BattleAnimSystem *param0, SPLEmitter *param1, int para
|
|||
v0.z = 0 * param5;
|
||||
break;
|
||||
case 3:
|
||||
ov12_02235508(param0, param3, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, param3, &v0);
|
||||
break;
|
||||
case 4:
|
||||
ov12_02235508(param0, param2, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, param2, &v0);
|
||||
break;
|
||||
case 5: {
|
||||
int v1[4] = { 0, 0, 0, 0 };
|
||||
|
|
@ -386,10 +386,10 @@ static void ov12_02223DA4(BattleAnimSystem *param0, SPLEmitter *param1, int para
|
|||
v0.z = 0 * param5;
|
||||
break;
|
||||
case 3:
|
||||
ov12_02235508(param0, param3, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, param3, &v0);
|
||||
break;
|
||||
case 4:
|
||||
ov12_02235508(param0, param2, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, param2, &v0);
|
||||
break;
|
||||
case 5: {
|
||||
int v1[4] = { 0, 0, 0, 0 };
|
||||
|
|
@ -489,7 +489,7 @@ static void ov12_02223E74(BattleAnimSystem *param0, SPLEmitter *param1, int para
|
|||
VecFx32 v14;
|
||||
|
||||
ov12_0222325C(param0, v13, 3);
|
||||
ov12_02235508(param0, param2, &v14);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, param2, &v14);
|
||||
|
||||
if ((v13[0] == 0) && (v13[1] == 0) && (v13[2] == 0)) {
|
||||
v1 = v14;
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static void ov12_02224260(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1, V
|
|||
v3 = 1;
|
||||
}
|
||||
|
||||
ov12_02235448(v3, param2, BattleAnimSystem_IsContest(v0), v2);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(v3, param2, BattleAnimSystem_IsContest(v0), v2);
|
||||
}
|
||||
|
||||
static void ov12_022242A0(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1, VecFx32 *param2)
|
||||
|
|
@ -97,7 +97,7 @@ static void ov12_022242A0(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1, V
|
|||
v4 = 1;
|
||||
}
|
||||
|
||||
ov12_02235448(v4, param2, BattleAnimSystem_IsContest(v0), v3);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(v4, param2, BattleAnimSystem_IsContest(v0), v3);
|
||||
}
|
||||
|
||||
static void ov12_022242E0(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1)
|
||||
|
|
@ -108,10 +108,10 @@ static void ov12_022242E0(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1)
|
|||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
ov12_02235508(param1->unk_00, param1->unk_24, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_24, &v0);
|
||||
break;
|
||||
case 2:
|
||||
ov12_02235508(param1->unk_00, param1->unk_28, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_28, &v0);
|
||||
break;
|
||||
case 6:
|
||||
ov12_02235538(param1->unk_00, param1->unk_24, &v0);
|
||||
|
|
@ -188,19 +188,19 @@ static void ov12_022242E0(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1)
|
|||
v0.y *= param1->unk_08;
|
||||
} break;
|
||||
case 4:
|
||||
ov12_02235508(param1->unk_00, param1->unk_24, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_24, &v0);
|
||||
ov12_02225094(param1, &v0);
|
||||
break;
|
||||
case 5:
|
||||
ov12_02235508(param1->unk_00, param1->unk_28, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_28, &v0);
|
||||
ov12_02225094(param1, &v0);
|
||||
break;
|
||||
case 100:
|
||||
ov12_02235508(param1->unk_00, param1->unk_24, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_24, &v0);
|
||||
ov12_02225008(param1, param1->unk_24, &v0);
|
||||
break;
|
||||
case 101:
|
||||
ov12_02235508(param1->unk_00, param1->unk_28, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_28, &v0);
|
||||
ov12_02225008(param1, param1->unk_28, &v0);
|
||||
break;
|
||||
case 12:
|
||||
|
|
@ -218,7 +218,7 @@ static void ov12_022242E0(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1)
|
|||
VEC_Set(&v0, -5000, -6000, 0);
|
||||
break;
|
||||
case 34:
|
||||
ov12_02235508(param1->unk_00, param1->unk_24, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_24, &v0);
|
||||
break;
|
||||
|
||||
case 31: {
|
||||
|
|
|
|||
|
|
@ -136,10 +136,10 @@ static BOOL ov12_02225200(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1)
|
|||
v1.z *= param1->unk_08;
|
||||
} break;
|
||||
case 2:
|
||||
ov12_02235508(param1->unk_00, param1->unk_24, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_24, &v1);
|
||||
break;
|
||||
case 3:
|
||||
ov12_02235508(param1->unk_00, param1->unk_28, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_28, &v1);
|
||||
break;
|
||||
case 0xFF:
|
||||
break;
|
||||
|
|
@ -290,17 +290,17 @@ static BOOL ov12_02225444(SPLEmitter *param0, UnkStruct_ov12_02225640 *param1)
|
|||
v1.z *= param1->unk_08;
|
||||
} break;
|
||||
case 4:
|
||||
ov12_02235508(param1->unk_00, param1->unk_28, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_28, &v1);
|
||||
|
||||
v1.x = (v1.x * v0[2]) / v0[3];
|
||||
v1.y = (v1.y * v0[2]) / v0[3];
|
||||
v1.z = (v1.z * v0[2]) / v0[3];
|
||||
break;
|
||||
case 2:
|
||||
ov12_02235508(param1->unk_00, param1->unk_24, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_24, &v1);
|
||||
break;
|
||||
case 3:
|
||||
ov12_02235508(param1->unk_00, param1->unk_28, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param1->unk_00, param1->unk_28, &v1);
|
||||
break;
|
||||
case 0xFF:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ static const BattleAnimScriptFunc sBattleAnimScriptFuncs[] = {
|
|||
BattleAnimScriptFunc_MoveBattlerToDefaultPos,
|
||||
BattleAnimScriptFunc_FadePokemonSprite,
|
||||
ov12_02229304,
|
||||
ov12_02229B28,
|
||||
BattleAnimScriptFunc_MoveEmitterA2BLinear,
|
||||
ov12_02229E54,
|
||||
ov12_02229638,
|
||||
ov12_02229810,
|
||||
|
|
|
|||
|
|
@ -500,19 +500,19 @@ typedef struct FadePokemonSpriteContext {
|
|||
#define FADE_POKEMON_SPRITE_VAR_COLOR 5
|
||||
|
||||
typedef struct {
|
||||
BattleAnimScriptFuncCommon unk_00;
|
||||
BattleAnimSpriteInfo unk_1C;
|
||||
int unk_30;
|
||||
int unk_34;
|
||||
int unk_38;
|
||||
int unk_3C;
|
||||
s16 unk_40;
|
||||
s16 unk_42;
|
||||
int unk_44;
|
||||
int unk_48;
|
||||
int unk_4C;
|
||||
int unk_50;
|
||||
int unk_54;
|
||||
BattleAnimScriptFuncCommon common;
|
||||
BattleAnimSpriteInfo spriteInfo;
|
||||
int xOffset;
|
||||
int yOffset;
|
||||
int width;
|
||||
int height;
|
||||
s16 unused;
|
||||
s16 step;
|
||||
int stepFrames;
|
||||
int mode;
|
||||
int timer;
|
||||
int y;
|
||||
int drawHeight;
|
||||
} UnkStruct_ov12_02229278;
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -559,28 +559,41 @@ typedef struct {
|
|||
int unk_2C;
|
||||
} UnkStruct_ov12_0222988C;
|
||||
|
||||
typedef struct {
|
||||
int unk_00;
|
||||
s16 unk_04;
|
||||
s16 unk_06;
|
||||
// -------------------------------------------------------------------
|
||||
// Emitter Animation
|
||||
// -------------------------------------------------------------------
|
||||
typedef struct EmitterAnimationContext {
|
||||
int emitterID;
|
||||
s16 startDelay;
|
||||
s16 frames;
|
||||
int unk_08;
|
||||
Point2D unk_0C;
|
||||
int unk_10;
|
||||
int unk_14;
|
||||
int unk_18;
|
||||
int unk_1C;
|
||||
int unk_20;
|
||||
int unk_24;
|
||||
int unk_28;
|
||||
int unk_2C;
|
||||
int unk_30;
|
||||
ParticleSystem *unk_34;
|
||||
SPLEmitter *unk_38;
|
||||
BattleAnimScriptFuncCommon unk_3C;
|
||||
Point2D offset;
|
||||
int mode;
|
||||
int startBattler;
|
||||
int endBattler;
|
||||
int frame; // Never actually used properly so doesn't do anything
|
||||
int skipFrames; // Number of steps/frames to skip before updating the emitter
|
||||
int maxFrames;
|
||||
int timer;
|
||||
int angle;
|
||||
BOOL curve;
|
||||
ParticleSystem *particleSys;
|
||||
SPLEmitter *emitter;
|
||||
BattleAnimScriptFuncCommon common;
|
||||
BattleAnimSpriteInfo unk_58[4];
|
||||
XYTransformContext unk_A8[2];
|
||||
ValueLerpContext unk_F0;
|
||||
} UnkStruct_ov12_02229980;
|
||||
XYTransformContext pos[2];
|
||||
ValueLerpContext unused;
|
||||
} EmitterAnimationContext;
|
||||
|
||||
#define EMITTER_ANIMATION_VAR_EMITTER_ID 0
|
||||
#define EMITTER_ANIMATION_VAR_OFFSET_X 1
|
||||
#define EMITTER_ANIMATION_VAR_OFFSET_Y 2
|
||||
#define EMITTER_ANIMATION_VAR_START_DELAY 3
|
||||
#define EMITTER_ANIMATION_VAR_FRAMES 4
|
||||
#define EMITTER_ANIMATION_VAR_5 5
|
||||
#define EMITTER_ANIMATION_VAR_MODE 6
|
||||
#define EMITTER_ANIMATION_VAR_PARAMS 7
|
||||
#define EMITTER_ANIMATION_VAR_CURVE 8
|
||||
|
||||
typedef struct {
|
||||
int unk_00;
|
||||
|
|
@ -2705,103 +2718,100 @@ static void ov12_02229278(SysTask *param0, void *param1)
|
|||
{
|
||||
UnkStruct_ov12_02229278 *v0 = (UnkStruct_ov12_02229278 *)param1;
|
||||
|
||||
switch (v0->unk_00.state) {
|
||||
switch (v0->common.state) {
|
||||
case 0: {
|
||||
if ((++v0->unk_4C) < v0->unk_44) {
|
||||
if (++v0->timer < v0->stepFrames) {
|
||||
return;
|
||||
}
|
||||
|
||||
v0->unk_4C = 0;
|
||||
v0->timer = 0;
|
||||
|
||||
if (v0->unk_48 == 0) {
|
||||
if (v0->unk_54 < 0) {
|
||||
v0->unk_54 = 0;
|
||||
if (v0->mode == 0) {
|
||||
if (v0->drawHeight < 0) {
|
||||
v0->drawHeight = 0;
|
||||
}
|
||||
|
||||
if (v0->unk_54 == 0) {
|
||||
v0->unk_00.state++;
|
||||
if (v0->drawHeight == 0) {
|
||||
v0->common.state++;
|
||||
}
|
||||
} else {
|
||||
if (v0->unk_54 > 80) {
|
||||
v0->unk_54 = 80;
|
||||
if (v0->drawHeight > 80) {
|
||||
v0->drawHeight = 80;
|
||||
}
|
||||
|
||||
if (v0->unk_54 == 80) {
|
||||
v0->unk_00.state++;
|
||||
if (v0->drawHeight == 80) {
|
||||
v0->common.state++;
|
||||
}
|
||||
}
|
||||
|
||||
PokemonSprite_SetAttribute(v0->unk_1C.monSprite, MON_SPRITE_DRAW_HEIGHT, v0->unk_54);
|
||||
PokemonSprite_SetAttribute(v0->unk_1C.monSprite, MON_SPRITE_Y_CENTER, v0->unk_50);
|
||||
PokemonSprite_SetAttribute(v0->spriteInfo.monSprite, MON_SPRITE_DRAW_HEIGHT, v0->drawHeight);
|
||||
PokemonSprite_SetAttribute(v0->spriteInfo.monSprite, MON_SPRITE_Y_CENTER, v0->y);
|
||||
|
||||
v0->unk_50 -= v0->unk_42;
|
||||
v0->unk_54 += v0->unk_42;
|
||||
v0->y -= v0->step;
|
||||
v0->drawHeight += v0->step;
|
||||
} break;
|
||||
default:
|
||||
ResetMonScale(v0->unk_1C.monSprite);
|
||||
BattleAnimSystem_EndAnimTask(v0->unk_00.battleAnimSystem, param0);
|
||||
ResetMonScale(v0->spriteInfo.monSprite);
|
||||
BattleAnimSystem_EndAnimTask(v0->common.battleAnimSystem, param0);
|
||||
Heap_Free(v0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ov12_02229304(BattleAnimSystem *param0)
|
||||
void ov12_02229304(BattleAnimSystem *system)
|
||||
{
|
||||
UnkStruct_ov12_02229278 *v0 = BattleAnimUtil_Alloc(param0, sizeof(UnkStruct_ov12_02229278));
|
||||
UnkStruct_ov12_02229278 *ctx = BattleAnimUtil_Alloc(system, sizeof(UnkStruct_ov12_02229278));
|
||||
|
||||
BattleAnimSystem_GetCommonData(param0, &v0->unk_00);
|
||||
BattleAnimSystem_GetCommonData(system, &ctx->common);
|
||||
|
||||
{
|
||||
int v1 = BattleAnimSystem_GetScriptVar(param0, 0);
|
||||
int v2;
|
||||
int v3;
|
||||
int target = BattleAnimSystem_GetScriptVar(system, 0);
|
||||
int count;
|
||||
BattleAnimUtil_GetBattlerSprites(system, target, &ctx->spriteInfo, &count);
|
||||
|
||||
BattleAnimUtil_GetBattlerSprites(param0, v1, &(v0->unk_1C), &v2);
|
||||
|
||||
switch (v1) {
|
||||
case 0x2:
|
||||
v3 = BattleAnimSystem_GetAttacker(param0);
|
||||
break;
|
||||
case 0x4:
|
||||
v3 = BattleAnimUtil_GetAlliedBattler(param0, BattleAnimSystem_GetAttacker(param0));
|
||||
break;
|
||||
case 0x8:
|
||||
v3 = BattleAnimSystem_GetDefender(param0);
|
||||
break;
|
||||
case 0x10:
|
||||
v3 = BattleAnimUtil_GetAlliedBattler(param0, BattleAnimSystem_GetDefender(param0));
|
||||
break;
|
||||
default:
|
||||
GF_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
|
||||
v0->unk_48 = BattleAnimSystem_GetScriptVar(param0, 1);
|
||||
|
||||
if (v0->unk_48 == 0) {
|
||||
v0->unk_50 = PokemonSprite_GetAttribute(v0->unk_1C.monSprite, MON_SPRITE_Y_CENTER);
|
||||
v0->unk_54 = 80 - PokemonSprite_GetAttribute(v0->unk_1C.monSprite, MON_SPRITE_DRAW_HEIGHT);
|
||||
v0->unk_40 = BattleAnimSystem_GetScriptVar(param0, 2);
|
||||
v0->unk_42 = BattleAnimSystem_GetScriptVar(param0, 3);
|
||||
v0->unk_42 *= -1;
|
||||
} else {
|
||||
v0->unk_50 = PokemonSprite_GetAttribute(v0->unk_1C.monSprite, MON_SPRITE_Y_CENTER);
|
||||
v0->unk_54 = PokemonSprite_GetAttribute(v0->unk_1C.monSprite, MON_SPRITE_DRAW_HEIGHT);
|
||||
v0->unk_40 = BattleAnimSystem_GetScriptVar(param0, 2);
|
||||
v0->unk_42 = BattleAnimSystem_GetScriptVar(param0, 3);
|
||||
}
|
||||
|
||||
v0->unk_30 = 0;
|
||||
v0->unk_34 = 0;
|
||||
v0->unk_38 = 80;
|
||||
v0->unk_3C = 80 - BattleAnimSystem_GetBattlerSpriteHeight(param0, v3);
|
||||
v0->unk_44 = BattleAnimSystem_GetScriptVar(param0, 4);
|
||||
v0->unk_4C = 0;
|
||||
|
||||
PokemonSprite_SetPartialDraw(v0->unk_1C.monSprite, v0->unk_30, v0->unk_34, v0->unk_38, v0->unk_3C);
|
||||
int battler;
|
||||
switch (target) {
|
||||
case BATTLE_ANIM_ATTACKER:
|
||||
battler = BattleAnimSystem_GetAttacker(system);
|
||||
break;
|
||||
case BATTLE_ANIM_ATTACKER_PARTNER:
|
||||
battler = BattleAnimUtil_GetAlliedBattler(system, BattleAnimSystem_GetAttacker(system));
|
||||
break;
|
||||
case BATTLE_ANIM_DEFENDER:
|
||||
battler = BattleAnimSystem_GetDefender(system);
|
||||
break;
|
||||
case BATTLE_ANIM_DEFENDER_PARTNER:
|
||||
battler = BattleAnimUtil_GetAlliedBattler(system, BattleAnimSystem_GetDefender(system));
|
||||
break;
|
||||
default:
|
||||
GF_ASSERT(FALSE);
|
||||
break;
|
||||
}
|
||||
|
||||
BattleAnimSystem_StartAnimTask(v0->unk_00.battleAnimSystem, ov12_02229278, v0);
|
||||
ctx->mode = BattleAnimSystem_GetScriptVar(system, 1);
|
||||
|
||||
if (ctx->mode == 0) {
|
||||
ctx->y = PokemonSprite_GetAttribute(ctx->spriteInfo.monSprite, MON_SPRITE_Y_CENTER);
|
||||
ctx->drawHeight = MON_SPRITE_FRAME_HEIGHT - PokemonSprite_GetAttribute(ctx->spriteInfo.monSprite, MON_SPRITE_DRAW_HEIGHT);
|
||||
ctx->unused = BattleAnimSystem_GetScriptVar(system, 2);
|
||||
ctx->step = BattleAnimSystem_GetScriptVar(system, 3);
|
||||
ctx->step *= -1;
|
||||
} else {
|
||||
ctx->y = PokemonSprite_GetAttribute(ctx->spriteInfo.monSprite, MON_SPRITE_Y_CENTER);
|
||||
ctx->drawHeight = PokemonSprite_GetAttribute(ctx->spriteInfo.monSprite, MON_SPRITE_DRAW_HEIGHT);
|
||||
ctx->unused = BattleAnimSystem_GetScriptVar(system, 2);
|
||||
ctx->step = BattleAnimSystem_GetScriptVar(system, 3);
|
||||
}
|
||||
|
||||
ctx->xOffset = 0;
|
||||
ctx->yOffset = 0;
|
||||
ctx->width = MON_SPRITE_FRAME_WIDTH;
|
||||
ctx->height = MON_SPRITE_FRAME_HEIGHT - BattleAnimSystem_GetBattlerSpriteHeight(system, battler);
|
||||
ctx->stepFrames = BattleAnimSystem_GetScriptVar(system, 4);
|
||||
ctx->timer = 0;
|
||||
|
||||
PokemonSprite_SetPartialDraw(ctx->spriteInfo.monSprite, ctx->xOffset, ctx->yOffset, ctx->width, ctx->height);
|
||||
|
||||
BattleAnimSystem_StartAnimTask(ctx->common.battleAnimSystem, ov12_02229278, ctx);
|
||||
}
|
||||
|
||||
static int ov12_02229454(BattleAnimSystem *param0, int param1)
|
||||
|
|
@ -3109,145 +3119,140 @@ void ov12_02229908(BattleAnimSystem *param0)
|
|||
}
|
||||
}
|
||||
|
||||
static void ov12_02229980(BattleAnimSystem *param0, UnkStruct_ov12_02229980 *param1)
|
||||
static void EmitterAnimationContext_Init(BattleAnimSystem *system, EmitterAnimationContext *ctx)
|
||||
{
|
||||
param1->unk_00 = BattleAnimSystem_GetScriptVar(param0, 0);
|
||||
param1->unk_0C.x = BattleAnimSystem_GetScriptVar(param0, 1);
|
||||
param1->unk_0C.y = BattleAnimSystem_GetScriptVar(param0, 2);
|
||||
param1->unk_04 = BattleAnimSystem_GetScriptVar(param0, 3);
|
||||
param1->unk_06 = BattleAnimSystem_GetScriptVar(param0, 4);
|
||||
param1->unk_08 = BattleAnimSystem_GetScriptVar(param0, 5);
|
||||
param1->unk_10 = BattleAnimSystem_GetScriptVar(param0, 6);
|
||||
param1->unk_30 = BattleAnimSystem_GetScriptVar(param0, 8);
|
||||
ctx->emitterID = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_EMITTER_ID);
|
||||
ctx->offset.x = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_OFFSET_X);
|
||||
ctx->offset.y = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_OFFSET_Y);
|
||||
ctx->startDelay = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_START_DELAY);
|
||||
ctx->frames = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_FRAMES);
|
||||
ctx->unk_08 = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_5);
|
||||
ctx->mode = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_MODE);
|
||||
ctx->curve = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_CURVE);
|
||||
|
||||
{
|
||||
int v0 = BattleAnimSystem_GetScriptVar(param0, 7);
|
||||
int params = BattleAnimSystem_GetScriptVar(system, EMITTER_ANIMATION_VAR_PARAMS);
|
||||
|
||||
param1->unk_1C = 0;
|
||||
param1->unk_20 = (v0 & 0xFFFF0000) >> 16;
|
||||
param1->unk_24 = (v0 & 0xFFFF);
|
||||
ctx->frame = 0;
|
||||
ctx->skipFrames = EMITTER_ANIMATION_SKIP_FRAMES(params);
|
||||
ctx->maxFrames = EMITTER_ANIMATION_MAX_FRAMES(params);
|
||||
|
||||
if (param1->unk_20 == 0) {
|
||||
param1->unk_20 = 0;
|
||||
}
|
||||
|
||||
if (param1->unk_24 == 0) {
|
||||
param1->unk_24 = 0xFF;
|
||||
}
|
||||
if (ctx->skipFrames == 0) {
|
||||
ctx->skipFrames = 0;
|
||||
}
|
||||
|
||||
param1->unk_38 = BattleAnimSystem_GetEmitter(param0, param1->unk_00);
|
||||
param1->unk_34 = BattleAnimSystem_GetCurrentParticleSystem(param0);
|
||||
if (ctx->maxFrames == 0) {
|
||||
ctx->maxFrames = EMITTER_ANIMATION_DEFAULT_FRAMES;
|
||||
}
|
||||
|
||||
if (param1->unk_10 == 0) {
|
||||
param1->unk_14 = BattleAnimSystem_GetAttacker(param0);
|
||||
param1->unk_18 = BattleAnimSystem_GetDefender(param0);
|
||||
} else if (param1->unk_10 == 1) {
|
||||
param1->unk_14 = BattleAnimSystem_GetDefender(param0);
|
||||
param1->unk_18 = BattleAnimSystem_GetAttacker(param0);
|
||||
ctx->emitter = BattleAnimSystem_GetEmitter(system, ctx->emitterID);
|
||||
ctx->particleSys = BattleAnimSystem_GetCurrentParticleSystem(system);
|
||||
|
||||
if (ctx->mode == EMITTER_ANIMATION_MODE_ATK_TO_DEF) {
|
||||
ctx->startBattler = BattleAnimSystem_GetAttacker(system);
|
||||
ctx->endBattler = BattleAnimSystem_GetDefender(system);
|
||||
} else if (ctx->mode == EMITTER_ANIMATION_MODE_DEF_TO_ATK) {
|
||||
ctx->startBattler = BattleAnimSystem_GetDefender(system);
|
||||
ctx->endBattler = BattleAnimSystem_GetAttacker(system);
|
||||
} else {
|
||||
GF_ASSERT("FALSE");
|
||||
GF_ASSERT("FALSE"); // bruh
|
||||
}
|
||||
|
||||
if (param1->unk_38 == NULL) {
|
||||
GF_ASSERT(0);
|
||||
if (ctx->emitter == NULL) {
|
||||
GF_ASSERT(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
static BOOL ov12_02229A50(SPLEmitter *param0)
|
||||
static BOOL IsEmitterActive(SPLEmitter *emitter)
|
||||
{
|
||||
BOOL v0 = 0;
|
||||
BOOL active = FALSE;
|
||||
SPLParticle *particle = emitter->particles.first;
|
||||
|
||||
{
|
||||
SPLParticle *v1;
|
||||
int v2;
|
||||
int v3;
|
||||
|
||||
v1 = param0->particles.first;
|
||||
|
||||
while (v1 != NULL) {
|
||||
v2 = v1->age;
|
||||
v3 = v1->lifeTime;
|
||||
v1 = v1->next;
|
||||
}
|
||||
|
||||
if (v2 != v3) {
|
||||
v0 = 1;
|
||||
}
|
||||
int age;
|
||||
int lifeTime;
|
||||
while (particle != NULL) {
|
||||
age = particle->age;
|
||||
lifeTime = particle->lifeTime;
|
||||
particle = particle->next;
|
||||
}
|
||||
|
||||
return v0;
|
||||
// If the youngest particle is still alive, the emitter is active
|
||||
if (age != lifeTime) {
|
||||
active = TRUE;
|
||||
}
|
||||
|
||||
return active;
|
||||
}
|
||||
|
||||
static void ov12_02229A6C(SysTask *param0, void *param1)
|
||||
static void BattleAnimTask_MoveEmitterA2BLinear(SysTask *task, void *param)
|
||||
{
|
||||
UnkStruct_ov12_02229980 *v0 = param1;
|
||||
BOOL v1 = ov12_02229A50(v0->unk_38);
|
||||
EmitterAnimationContext *ctx = param;
|
||||
BOOL emitterActive = IsEmitterActive(ctx->emitter);
|
||||
|
||||
if (v0->unk_28 < v0->unk_04) {
|
||||
v0->unk_28++;
|
||||
if (ctx->timer < ctx->startDelay) {
|
||||
ctx->timer++;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((PosLerpContext_Update(&v0->unk_A8[0]) == 0) && (v1 == 0)) {
|
||||
ParticleSystem_DeleteEmitter(v0->unk_34, v0->unk_38);
|
||||
BattleAnimSystem_EndAnimTask(v0->unk_3C.battleAnimSystem, param0);
|
||||
BattleAnimUtil_Free(v0);
|
||||
(v0) = NULL;
|
||||
if (PosLerpContext_Update(&ctx->pos[0]) == FALSE && emitterActive == FALSE) {
|
||||
ParticleSystem_DeleteEmitter(ctx->particleSys, ctx->emitter);
|
||||
BattleAnimSystem_EndAnimTask(ctx->common.battleAnimSystem, task);
|
||||
BattleAnimUtil_Free(ctx);
|
||||
ctx = NULL;
|
||||
return;
|
||||
} else {
|
||||
if (((v0->unk_20 > v0->unk_1C) || (v0->unk_24 < v0->unk_1C)) && (v0->unk_24 != 255)) {
|
||||
if ((ctx->skipFrames > ctx->frame || ctx->maxFrames < ctx->frame) && ctx->maxFrames != EMITTER_ANIMATION_DEFAULT_FRAMES) {
|
||||
return;
|
||||
}
|
||||
|
||||
SPLEmitter_SetPosX(v0->unk_38, v0->unk_A8[0].x * 172);
|
||||
SPLEmitter_SetPosY(v0->unk_38, v0->unk_A8[0].y * 172);
|
||||
SPLEmitter_SetPosX(ctx->emitter, BATTLE_PARTICLE_SCREEN_TO_WORLD(ctx->pos[0].x));
|
||||
SPLEmitter_SetPosY(ctx->emitter, BATTLE_PARTICLE_SCREEN_TO_WORLD(ctx->pos[0].y));
|
||||
|
||||
if (v0->unk_30) {
|
||||
v0->unk_2C += (360 / (v0->unk_06));
|
||||
SPLEmitter_SetPosY(v0->unk_38, (v0->unk_A8[0].y * 172) + CalcSineDegrees_Wraparound(v0->unk_2C));
|
||||
if (ctx->curve) {
|
||||
ctx->angle += 360 / (ctx->frames);
|
||||
SPLEmitter_SetPosY(ctx->emitter, BATTLE_PARTICLE_SCREEN_TO_WORLD(ctx->pos[0].y) + CalcSineDegrees_Wraparound(ctx->angle));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ov12_02229B28(BattleAnimSystem *param0)
|
||||
void BattleAnimScriptFunc_MoveEmitterA2BLinear(BattleAnimSystem *system)
|
||||
{
|
||||
int v0;
|
||||
VecFx32 v1;
|
||||
VecFx32 v2;
|
||||
UnkStruct_ov12_02229980 *v3 = BattleAnimUtil_Alloc(param0, sizeof(UnkStruct_ov12_02229980));
|
||||
EmitterAnimationContext *ctx = BattleAnimUtil_Alloc(system, sizeof(EmitterAnimationContext));
|
||||
|
||||
BattleAnimSystem_GetCommonData(param0, &v3->unk_3C);
|
||||
ov12_02229980(param0, v3);
|
||||
BattleAnimSystem_GetCommonData(system, &ctx->common);
|
||||
EmitterAnimationContext_Init(system, ctx);
|
||||
|
||||
v0 = BattleAnimUtil_GetTransformDirectionX(param0, BattleAnimSystem_GetAttacker(param0));
|
||||
int dir = BattleAnimUtil_GetTransformDirectionX(system, BattleAnimSystem_GetAttacker(system));
|
||||
|
||||
ov12_02235508(param0, v3->unk_14, &v1);
|
||||
ov12_02235508(param0, v3->unk_18, &v2);
|
||||
PosLerpContext_Init(&v3->unk_A8[0], v1.x / 172, (v2.x / 172) + (v3->unk_0C.x * v0), v1.y / 172, (v2.y / 172) + (v3->unk_0C.y * v0), v3->unk_06);
|
||||
VecFx32 startPos, endPos;
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(system, ctx->startBattler, &startPos);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(system, ctx->endBattler, &endPos);
|
||||
|
||||
if (v0 > 0) {
|
||||
ValueLerpContext_Init(&v3->unk_F0, ((20 * 0xffff) / 360) * v0, ((130 * 0xffff) / 360) * v0, 10);
|
||||
PosLerpContext_Init(
|
||||
&ctx->pos[0],
|
||||
BATTLE_PARTICLE_WORLD_TO_SCREEN(startPos.x),
|
||||
BATTLE_PARTICLE_WORLD_TO_SCREEN(endPos.x) + (ctx->offset.x * dir),
|
||||
BATTLE_PARTICLE_WORLD_TO_SCREEN(startPos.y),
|
||||
BATTLE_PARTICLE_WORLD_TO_SCREEN(endPos.y) + (ctx->offset.y * dir),
|
||||
ctx->frames);
|
||||
|
||||
if (dir > 0) {
|
||||
ValueLerpContext_Init(&ctx->unused, DEG_TO_IDX(20) * dir, DEG_TO_IDX(130) * dir, 10);
|
||||
} else {
|
||||
ValueLerpContext_Init(&v3->unk_F0, ((90 * 0xffff) / 360) * v0, ((130 * 0xffff) / 360) * v0, 10);
|
||||
ValueLerpContext_Init(&ctx->unused, DEG_TO_IDX(90) * dir, DEG_TO_IDX(130) * dir, 10);
|
||||
}
|
||||
|
||||
{
|
||||
int v4;
|
||||
|
||||
for (v4 = 0; v4 < v3->unk_20; v4++) {
|
||||
PosLerpContext_Update(&v3->unk_A8[0]);
|
||||
}
|
||||
|
||||
if (v3->unk_24 != 0xFF) {
|
||||
v3->unk_1C = v3->unk_24 + 1;
|
||||
}
|
||||
|
||||
SPLEmitter_SetPosX(v3->unk_38, v3->unk_A8[0].x * 172);
|
||||
SPLEmitter_SetPosY(v3->unk_38, v3->unk_A8[0].y * 172);
|
||||
for (int i = 0; i < ctx->skipFrames; i++) {
|
||||
PosLerpContext_Update(&ctx->pos[0]);
|
||||
}
|
||||
|
||||
BattleAnimSystem_StartAnimTask(v3->unk_3C.battleAnimSystem, ov12_02229A6C, v3);
|
||||
if (ctx->maxFrames != EMITTER_ANIMATION_DEFAULT_FRAMES) {
|
||||
ctx->frame = ctx->maxFrames + 1;
|
||||
}
|
||||
|
||||
SPLEmitter_SetPosX(ctx->emitter, BATTLE_PARTICLE_SCREEN_TO_WORLD(ctx->pos[0].x));
|
||||
SPLEmitter_SetPosY(ctx->emitter, BATTLE_PARTICLE_SCREEN_TO_WORLD(ctx->pos[0].y));
|
||||
|
||||
BattleAnimSystem_StartAnimTask(ctx->common.battleAnimSystem, BattleAnimTask_MoveEmitterA2BLinear, ctx);
|
||||
}
|
||||
|
||||
void ov12_02229C5C(BattleAnimSystem *param0)
|
||||
|
|
@ -3255,51 +3260,51 @@ void ov12_02229C5C(BattleAnimSystem *param0)
|
|||
VecFx32 v0;
|
||||
VecFx32 v1;
|
||||
int v2;
|
||||
UnkStruct_ov12_02229980 *v3 = BattleAnimUtil_Alloc(param0, sizeof(UnkStruct_ov12_02229980));
|
||||
BattleAnimSystem_GetCommonData(param0, &v3->unk_3C);
|
||||
EmitterAnimationContext *v3 = BattleAnimUtil_Alloc(param0, sizeof(EmitterAnimationContext));
|
||||
BattleAnimSystem_GetCommonData(param0, &v3->common);
|
||||
|
||||
v3->unk_00 = BattleAnimSystem_GetScriptVar(param0, 0);
|
||||
v3->unk_10 = BattleAnimSystem_GetScriptVar(param0, 1);
|
||||
v3->emitterID = BattleAnimSystem_GetScriptVar(param0, 0);
|
||||
v3->mode = BattleAnimSystem_GetScriptVar(param0, 1);
|
||||
|
||||
v2 = BattleAnimSystem_GetScriptVar(param0, 2);
|
||||
|
||||
v3->unk_06 = BattleAnimSystem_GetScriptVar(param0, 3);
|
||||
v3->unk_04 = BattleAnimSystem_GetScriptVar(param0, 4);
|
||||
v3->unk_28 = 0;
|
||||
v3->frames = BattleAnimSystem_GetScriptVar(param0, 3);
|
||||
v3->startDelay = BattleAnimSystem_GetScriptVar(param0, 4);
|
||||
v3->timer = 0;
|
||||
|
||||
{
|
||||
int v4 = BattleAnimSystem_GetScriptVar(param0, 5);
|
||||
|
||||
v3->unk_1C = 0;
|
||||
v3->unk_20 = (v4 & 0xFFFF0000) >> 16;
|
||||
v3->unk_24 = (v4 & 0xFFFF);
|
||||
v3->frame = 0;
|
||||
v3->skipFrames = (v4 & 0xFFFF0000) >> 16;
|
||||
v3->maxFrames = (v4 & 0xFFFF);
|
||||
|
||||
if (v3->unk_20 == 0) {
|
||||
v3->unk_20 = 0;
|
||||
if (v3->skipFrames == 0) {
|
||||
v3->skipFrames = 0;
|
||||
}
|
||||
|
||||
if (v3->unk_24 == 0) {
|
||||
v3->unk_24 = 0xFF;
|
||||
if (v3->maxFrames == 0) {
|
||||
v3->maxFrames = 0xFF;
|
||||
}
|
||||
}
|
||||
|
||||
v3->unk_38 = BattleAnimSystem_GetEmitter(param0, v3->unk_00);
|
||||
v3->unk_34 = BattleAnimSystem_GetCurrentParticleSystem(param0);
|
||||
v3->emitter = BattleAnimSystem_GetEmitter(param0, v3->emitterID);
|
||||
v3->particleSys = BattleAnimSystem_GetCurrentParticleSystem(param0);
|
||||
|
||||
if (v3->unk_10 == 0) {
|
||||
v3->unk_14 = BattleAnimSystem_GetAttacker(param0);
|
||||
v3->unk_18 = BattleAnimSystem_GetAttacker(param0);
|
||||
if (v3->mode == 0) {
|
||||
v3->startBattler = BattleAnimSystem_GetAttacker(param0);
|
||||
v3->endBattler = BattleAnimSystem_GetAttacker(param0);
|
||||
} else {
|
||||
v3->unk_14 = BattleAnimSystem_GetDefender(param0);
|
||||
v3->unk_18 = BattleAnimSystem_GetDefender(param0);
|
||||
v3->startBattler = BattleAnimSystem_GetDefender(param0);
|
||||
v3->endBattler = BattleAnimSystem_GetDefender(param0);
|
||||
}
|
||||
|
||||
if (v3->unk_38 == NULL) {
|
||||
if (v3->emitter == NULL) {
|
||||
GF_ASSERT(0);
|
||||
}
|
||||
|
||||
ov12_02235508(param0, v3->unk_14, &v0);
|
||||
ov12_02235508(param0, v3->unk_18, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, v3->startBattler, &v0);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, v3->endBattler, &v1);
|
||||
|
||||
if (v2 == 0) {
|
||||
ov12_02235748(&v0);
|
||||
|
|
@ -3309,40 +3314,40 @@ void ov12_02229C5C(BattleAnimSystem *param0)
|
|||
v1.x = v0.x;
|
||||
}
|
||||
|
||||
PosLerpContext_Init(&v3->unk_A8[0], v0.x / 172, v1.x / 172, v0.y / 172, v1.y / 172, v3->unk_06);
|
||||
PosLerpContext_Init(&v3->pos[0], v0.x / 172, v1.x / 172, v0.y / 172, v1.y / 172, v3->frames);
|
||||
|
||||
{
|
||||
int v5;
|
||||
|
||||
for (v5 = 0; v5 < v3->unk_20; v5++) {
|
||||
PosLerpContext_Update(&v3->unk_A8[0]);
|
||||
for (v5 = 0; v5 < v3->skipFrames; v5++) {
|
||||
PosLerpContext_Update(&v3->pos[0]);
|
||||
}
|
||||
|
||||
if (v3->unk_24 != 0xFF) {
|
||||
v3->unk_1C = v3->unk_24 + 1;
|
||||
if (v3->maxFrames != 0xFF) {
|
||||
v3->frame = v3->maxFrames + 1;
|
||||
}
|
||||
|
||||
SPLEmitter_SetPosX(v3->unk_38, v3->unk_A8[0].x * 172);
|
||||
SPLEmitter_SetPosY(v3->unk_38, v3->unk_A8[0].y * 172);
|
||||
SPLEmitter_SetPosX(v3->emitter, v3->pos[0].x * 172);
|
||||
SPLEmitter_SetPosY(v3->emitter, v3->pos[0].y * 172);
|
||||
}
|
||||
|
||||
BattleAnimSystem_StartAnimTask(v3->unk_3C.battleAnimSystem, ov12_02229A6C, v3);
|
||||
BattleAnimSystem_StartAnimTask(v3->common.battleAnimSystem, BattleAnimTask_MoveEmitterA2BLinear, v3);
|
||||
}
|
||||
|
||||
static void ov12_02229DF0(SysTask *param0, void *param1)
|
||||
{
|
||||
UnkStruct_ov12_02229980 *v0 = param1;
|
||||
BOOL v1 = ov12_02229A50(v0->unk_38);
|
||||
EmitterAnimationContext *v0 = param1;
|
||||
BOOL v1 = IsEmitterActive(v0->emitter);
|
||||
|
||||
if ((ov12_02225CE4(&v0->unk_A8[0], &v0->unk_A8[1]) == 0) && (v1 == 0)) {
|
||||
ParticleSystem_DeleteEmitter(v0->unk_34, v0->unk_38);
|
||||
BattleAnimSystem_EndAnimTask(v0->unk_3C.battleAnimSystem, param0);
|
||||
if ((ov12_02225CE4(&v0->pos[0], &v0->pos[1]) == 0) && (v1 == 0)) {
|
||||
ParticleSystem_DeleteEmitter(v0->particleSys, v0->emitter);
|
||||
BattleAnimSystem_EndAnimTask(v0->common.battleAnimSystem, param0);
|
||||
BattleAnimUtil_Free(v0);
|
||||
(v0) = NULL;
|
||||
return;
|
||||
} else {
|
||||
SPLEmitter_SetPosX(v0->unk_38, v0->unk_A8[0].x * 172);
|
||||
SPLEmitter_SetPosY(v0->unk_38, v0->unk_A8[0].y * 172);
|
||||
SPLEmitter_SetPosX(v0->emitter, v0->pos[0].x * 172);
|
||||
SPLEmitter_SetPosY(v0->emitter, v0->pos[0].y * 172);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3351,45 +3356,45 @@ void ov12_02229E54(BattleAnimSystem *param0)
|
|||
int v0;
|
||||
VecFx32 v1;
|
||||
VecFx32 v2;
|
||||
UnkStruct_ov12_02229980 *v3 = BattleAnimUtil_Alloc(param0, sizeof(UnkStruct_ov12_02229980));
|
||||
EmitterAnimationContext *v3 = BattleAnimUtil_Alloc(param0, sizeof(EmitterAnimationContext));
|
||||
|
||||
BattleAnimSystem_GetCommonData(param0, &v3->unk_3C);
|
||||
ov12_02229980(param0, v3);
|
||||
BattleAnimSystem_GetCommonData(param0, &v3->common);
|
||||
EmitterAnimationContext_Init(param0, v3);
|
||||
|
||||
v0 = BattleAnimUtil_GetTransformDirectionX(param0, BattleAnimSystem_GetAttacker(param0));
|
||||
|
||||
ov12_02235508(param0, v3->unk_14, &v1);
|
||||
ov12_02235508(param0, v3->unk_18, &v2);
|
||||
ov12_02225C98(&v3->unk_A8[0], &v3->unk_A8[1], v1.x / 172, (v2.x / 172) + (v3->unk_0C.x * v0), v1.y / 172, (v2.y / 172) + (v3->unk_0C.y * v0), v3->unk_06, v3->unk_08 * -FX32_ONE);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, v3->startBattler, &v1);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, v3->endBattler, &v2);
|
||||
ov12_02225C98(&v3->pos[0], &v3->pos[1], v1.x / 172, (v2.x / 172) + (v3->offset.x * v0), v1.y / 172, (v2.y / 172) + (v3->offset.y * v0), v3->frames, v3->unk_08 * -FX32_ONE);
|
||||
|
||||
if (v0 > 0) {
|
||||
ValueLerpContext_Init(&v3->unk_F0, ((20 * 0xffff) / 360) * v0, ((130 * 0xffff) / 360) * v0, 10);
|
||||
ValueLerpContext_Init(&v3->unused, ((20 * 0xffff) / 360) * v0, ((130 * 0xffff) / 360) * v0, 10);
|
||||
} else {
|
||||
ValueLerpContext_Init(&v3->unk_F0, ((90 * 0xffff) / 360) * v0, ((130 * 0xffff) / 360) * v0, 10);
|
||||
ValueLerpContext_Init(&v3->unused, ((90 * 0xffff) / 360) * v0, ((130 * 0xffff) / 360) * v0, 10);
|
||||
}
|
||||
|
||||
{
|
||||
int v4;
|
||||
|
||||
for (v4 = 0; v4 < v3->unk_20; v4++) {
|
||||
ov12_02225CE4(&v3->unk_A8[0], &v3->unk_A8[1]);
|
||||
for (v4 = 0; v4 < v3->skipFrames; v4++) {
|
||||
ov12_02225CE4(&v3->pos[0], &v3->pos[1]);
|
||||
}
|
||||
|
||||
if (v3->unk_24 != 0xFF) {
|
||||
v3->unk_1C = v3->unk_24 + 1;
|
||||
if (v3->maxFrames != 0xFF) {
|
||||
v3->frame = v3->maxFrames + 1;
|
||||
}
|
||||
|
||||
SPLEmitter_SetPosX(v3->unk_38, v3->unk_A8[0].x * 172);
|
||||
SPLEmitter_SetPosY(v3->unk_38, v3->unk_A8[0].y * 172);
|
||||
SPLEmitter_SetPosX(v3->emitter, v3->pos[0].x * 172);
|
||||
SPLEmitter_SetPosY(v3->emitter, v3->pos[0].y * 172);
|
||||
}
|
||||
|
||||
BattleAnimSystem_StartAnimTask(v3->unk_3C.battleAnimSystem, ov12_02229DF0, v3);
|
||||
BattleAnimSystem_StartAnimTask(v3->common.battleAnimSystem, ov12_02229DF0, v3);
|
||||
}
|
||||
|
||||
static void ov12_02229F9C(SysTask *param0, void *param1)
|
||||
{
|
||||
UnkStruct_ov12_02229F9C *v0 = param1;
|
||||
BOOL v1 = ov12_02229A50(v0->unk_38);
|
||||
BOOL v1 = IsEmitterActive(v0->unk_38);
|
||||
|
||||
if ((RevolutionContext_Update(&v0->unk_58) == 0) && (v1 == 0)) {
|
||||
ParticleSystem_DeleteEmitter(v0->unk_34, v0->unk_38);
|
||||
|
|
@ -3428,7 +3433,7 @@ void ov12_0222A00C(BattleAnimSystem *param0)
|
|||
v0->unk_24 = BattleAnimSystem_GetDefender(param0);
|
||||
}
|
||||
|
||||
ov12_02235508(param0, v0->unk_24, &v0->unk_88);
|
||||
BattleAnimUtil_GetBattlerWorldPos_Normal(param0, v0->unk_24, &v0->unk_88);
|
||||
|
||||
v0->unk_38 = BattleAnimSystem_GetEmitter(param0, v0->unk_00);
|
||||
v0->unk_34 = BattleAnimSystem_GetParticleSystem(param0, BattleAnimSystem_GetScriptVar(param0, 9));
|
||||
|
|
|
|||
|
|
@ -3,11 +3,14 @@
|
|||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "constants/battle.h"
|
||||
#include "constants/battle/battle_anim.h"
|
||||
|
||||
#include "overlay012/battle_anim_system.h"
|
||||
#include "overlay012/ov12_02235254.h"
|
||||
|
||||
#include "camera.h"
|
||||
#include "fx_util.h"
|
||||
#include "heap.h"
|
||||
#include "inlines.h"
|
||||
#include "math_util.h"
|
||||
|
|
@ -168,228 +171,226 @@ void BattleAnimUtil_GetBattlerDefaultPos(BattleAnimSystem *system, int battler,
|
|||
BattleAnimUtil_GetBattlerTypeDefaultPos(battlerType, isContest, pos);
|
||||
}
|
||||
|
||||
static void ov12_022353CC(int param0, VecFx32 *param1, int param2, int param3, int param4)
|
||||
static void BattleAnimUtil_GetBattlerTypeWorldPosInternal(int battlerType, VecFx32 *outPos, int isContest, int projection, int posType)
|
||||
{
|
||||
int v0;
|
||||
const VecFx32 *v1;
|
||||
const VecFx32 v2[][24] = {
|
||||
{
|
||||
{ -9616, -5464, 0x40 },
|
||||
{ -10240, -6400, 0x40 },
|
||||
{ -3968, -3328, 0x40 },
|
||||
{ -6568, -4000, 0x40 },
|
||||
{ -3968, -3328, 0x40 },
|
||||
{ -6720, -5792, 0x40 },
|
||||
{ -8632, -6936, 0x0 },
|
||||
{ -8632, -6936, 0x0 },
|
||||
{ -12544, -3840, 0x0 },
|
||||
{ -12544, -3840, 0x0 },
|
||||
{ -9632, -5856, 0x0 },
|
||||
{ -9632, -5856, 0x0 },
|
||||
{ -4144, -5200, 0x0 },
|
||||
{ -4144, -5200, 0x0 },
|
||||
{ -12480, -4288, 0x0 },
|
||||
{ -12480, -4288, 0x0 },
|
||||
{ -1792, -4224, 0x0 },
|
||||
{ -1792, -4224, 0x0 },
|
||||
{ -8320, -4160, 0x0 },
|
||||
{ -8320, -4160, 0x0 },
|
||||
{ 0x2378, 0x15A0, 0x0 },
|
||||
{ 0x2378, 0x15A0, 0x0 },
|
||||
{ -6248, -2944, 0x0 },
|
||||
{ -6248, -2944, 0x0 },
|
||||
const VecFx32 particlePositions[][12 * CAMERA_PROJECTION_COUNT] = {
|
||||
[BATTLER_TYPE_SOLO_PLAYER] = {
|
||||
VEC_FX32(-2.3477, -1.334, 0.0156),
|
||||
VEC_FX32(-2.5, -1.5625, 0.0156),
|
||||
VEC_FX32(-0.9688, -0.8125, 0.0156),
|
||||
VEC_FX32(-1.6035, -0.9766, 0.0156),
|
||||
VEC_FX32(-0.9688, -0.8125, 0.0156),
|
||||
VEC_FX32(-1.6406, -1.414, 0.0156),
|
||||
VEC_FX32(-2.1074, -1.6934, 0),
|
||||
VEC_FX32(-2.1074, -1.6934, 0),
|
||||
VEC_FX32(-3.0625, -0.9375, 0),
|
||||
VEC_FX32(-3.0625, -0.9375, 0),
|
||||
VEC_FX32(-2.3516, -1.4297, 0),
|
||||
VEC_FX32(-2.3516, -1.4297, 0),
|
||||
VEC_FX32(-1.0117, -1.2695, 0),
|
||||
VEC_FX32(-1.0117, -1.2695, 0),
|
||||
VEC_FX32(-3.0469, -1.0469, 0),
|
||||
VEC_FX32(-3.0469, -1.0469, 0),
|
||||
VEC_FX32(-0.4375, -1.0312, 0),
|
||||
VEC_FX32(-0.4375, -1.0312, 0),
|
||||
VEC_FX32(-2.0312, -1.0156, 0),
|
||||
VEC_FX32(-2.0312, -1.0156, 0),
|
||||
VEC_FX32(2.2168, 1.3516, 0),
|
||||
VEC_FX32(2.2168, 1.3516, 0),
|
||||
VEC_FX32(-1.5254, -0.7188, 0),
|
||||
VEC_FX32(-1.5254, -0.7188, 0),
|
||||
},
|
||||
{
|
||||
{ 0x2B30, 0x1130, -5248 },
|
||||
{ 0x2800, 0xC00, -5248 },
|
||||
{ 0x2480, 0x880, -5248 },
|
||||
{ 0x2260, 0x1940, -5248 },
|
||||
{ 0x2480, 0x880, -5248 },
|
||||
{ 0x38C0, 0x1F60, -5248 },
|
||||
{ 0x3268, 0x13F4, 0x0 },
|
||||
{ 0x3268, 0x13F4, 0x0 },
|
||||
{ 0x1538, 0x1A18, 0x0 },
|
||||
{ 0x1538, 0x1A18, 0x0 },
|
||||
{ 0x3358, 0x2C08, 0x0 },
|
||||
{ 0x3358, 0x2C08, 0x0 },
|
||||
{ 0x40D0, 0x1430, 0x0 },
|
||||
{ 0x40D0, 0x1430, 0x0 },
|
||||
{ 0x3380, 0x1DC0, 0x0 },
|
||||
{ 0x3380, 0x1DC0, 0x0 },
|
||||
{ 0x4200, 0xD00, 0x0 },
|
||||
{ 0x4200, 0xD00, 0x0 },
|
||||
{ 0x2A80, 0x1180, 0x0 },
|
||||
{ 0x2A80, 0x1180, 0x0 },
|
||||
{ -6936, -4832, 0x0 },
|
||||
{ -6936, -4832, 0x0 },
|
||||
{ 0x2058, 0x1538, 0x0 },
|
||||
{ 0x2058, 0x1538, 0x0 },
|
||||
[BATTLER_TYPE_SOLO_ENEMY] = {
|
||||
VEC_FX32(2.6992, 1.0742, -1.2812),
|
||||
VEC_FX32(2.5, 0.75, -1.2812),
|
||||
VEC_FX32(2.2812, 0.5312, -1.2812),
|
||||
VEC_FX32(2.1484, 1.5781, -1.2812),
|
||||
VEC_FX32(2.2812, 0.5312, -1.2812),
|
||||
VEC_FX32(3.5469, 1.961, -1.2812),
|
||||
VEC_FX32(3.1504, 1.247, 0),
|
||||
VEC_FX32(3.1504, 1.247, 0),
|
||||
VEC_FX32(1.3262, 1.6309, 0),
|
||||
VEC_FX32(1.3262, 1.6309, 0),
|
||||
VEC_FX32(3.209, 2.752, 0),
|
||||
VEC_FX32(3.209, 2.752, 0),
|
||||
VEC_FX32(4.0508, 1.2617, 0),
|
||||
VEC_FX32(4.0508, 1.2617, 0),
|
||||
VEC_FX32(3.2188, 1.8594, 0),
|
||||
VEC_FX32(3.2188, 1.8594, 0),
|
||||
VEC_FX32(4.125, 0.8125, 0),
|
||||
VEC_FX32(4.125, 0.8125, 0),
|
||||
VEC_FX32(2.6562, 1.0938, 0),
|
||||
VEC_FX32(2.6562, 1.0938, 0),
|
||||
VEC_FX32(-1.6934, -1.1797, 0),
|
||||
VEC_FX32(-1.6934, -1.1797, 0),
|
||||
VEC_FX32(2.0215, 1.3262, 0),
|
||||
VEC_FX32(2.0215, 1.3262, 0),
|
||||
},
|
||||
{
|
||||
{ -14936, -5032, 0x40 },
|
||||
{ -15360, -6272, 0x40 },
|
||||
{ -9856, -3200, 0x40 },
|
||||
{ -11400, -2944, 0x40 },
|
||||
{ -9856, -3200, 0x40 },
|
||||
{ -9856, -3200, 0x40 },
|
||||
{ -9456, -3104, 0x0 },
|
||||
{ -9456, -3104, 0x0 },
|
||||
{ -17856, -3624, 0x0 },
|
||||
{ -17856, -3624, 0x0 },
|
||||
{ -12592, -2976, 0x0 },
|
||||
{ -12592, -2976, 0x0 },
|
||||
{ -6366, -3776, 0x0 },
|
||||
{ -6366, -3776, 0x0 },
|
||||
{ -14912, -2176, 0x0 },
|
||||
{ -14912, -2176, 0x0 },
|
||||
{ -6080, -5504, 0x0 },
|
||||
{ -6080, -5504, 0x0 },
|
||||
{ -12032, -3200, 0x0 },
|
||||
{ -12032, -3200, 0x0 },
|
||||
{ 0x2A48, 0x1D40, 0x0 },
|
||||
{ 0x2A48, 0x1D40, 0x0 },
|
||||
{ -9856, -3200, 0x0 },
|
||||
{ -9856, -3200, 0x0 },
|
||||
[BATTLER_TYPE_PLAYER_SIDE_SLOT_1] = {
|
||||
VEC_FX32(-3.6465, -1.2285, 0.0156),
|
||||
VEC_FX32(-3.75, -1.5312, 0.0156),
|
||||
VEC_FX32(-2.4062, -0.7812, 0.0156),
|
||||
VEC_FX32(-2.7832, -0.7188, 0.0156),
|
||||
VEC_FX32(-2.4062, -0.7812, 0.0156),
|
||||
VEC_FX32(-2.4062, -0.7812, 0.0156),
|
||||
VEC_FX32(-2.3086, -0.7578, 0),
|
||||
VEC_FX32(-2.3086, -0.7578, 0),
|
||||
VEC_FX32(-4.3594, -0.8848, 0),
|
||||
VEC_FX32(-4.3594, -0.8848, 0),
|
||||
VEC_FX32(-3.0742, -0.7266, 0),
|
||||
VEC_FX32(-3.0742, -0.7266, 0),
|
||||
VEC_FX32(-1.5542, -0.9219, 0),
|
||||
VEC_FX32(-1.5542, -0.9219, 0),
|
||||
VEC_FX32(-3.6406, -0.5312, 0),
|
||||
VEC_FX32(-3.6406, -0.5312, 0),
|
||||
VEC_FX32(-1.4844, -1.3438, 0),
|
||||
VEC_FX32(-1.4844, -1.3438, 0),
|
||||
VEC_FX32(-2.9375, -0.7812, 0),
|
||||
VEC_FX32(-2.9375, -0.7812, 0),
|
||||
VEC_FX32(2.6426, 1.8281, 0),
|
||||
VEC_FX32(2.6426, 1.8281, 0),
|
||||
VEC_FX32(-2.4062, -0.7812, 0),
|
||||
VEC_FX32(-2.4062, -0.7812, 0),
|
||||
},
|
||||
{
|
||||
{ 0x1CC8, 0x1748, -5248 },
|
||||
{ 0x3500, 0xB80, -5248 },
|
||||
{ 0x3500, 0xB80, -5248 },
|
||||
{ 0x3170, 0x1668, -5248 },
|
||||
{ 0x3500, 0xB80, -5248 },
|
||||
{ 0x3500, 0xB80, -5248 },
|
||||
{ 0x4640, 0x18C0, 0x0 },
|
||||
{ 0x4640, 0x18C0, 0x0 },
|
||||
{ 0x1F58, 0x1778, 0x0 },
|
||||
{ 0x1F58, 0x1778, 0x0 },
|
||||
{ 0x3310, 0x1840, 0x0 },
|
||||
{ 0x3310, 0x1840, 0x0 },
|
||||
{ 0x4400, 0x1440, 0x0 },
|
||||
{ 0x4400, 0x1440, 0x0 },
|
||||
{ 0x3F00, 0x1CC0, 0x0 },
|
||||
{ 0x3F00, 0x1CC0, 0x0 },
|
||||
{ 0x50C0, 0xD98, 0x0 },
|
||||
{ 0x50C0, 0xD98, 0x0 },
|
||||
{ 0x3480, 0x1520, 0x0 },
|
||||
{ 0x3480, 0x1520, 0x0 },
|
||||
{ -9536, -3120, 0xAA8 },
|
||||
{ -9536, -3120, 0xAA8 },
|
||||
{ 0x3500, 0xB80, 0x0 },
|
||||
{ 0x3500, 0xB80, 0x0 },
|
||||
[BATTLER_TYPE_ENEMY_SIDE_SLOT_1] = {
|
||||
VEC_FX32(1.7988, 1.455, -1.2812),
|
||||
VEC_FX32(3.3125, 0.7188, -1.2812),
|
||||
VEC_FX32(3.3125, 0.7188, -1.2812),
|
||||
VEC_FX32(3.0898, 1.4004, -1.2812),
|
||||
VEC_FX32(3.3125, 0.7188, -1.2812),
|
||||
VEC_FX32(3.3125, 0.7188, -1.2812),
|
||||
VEC_FX32(4.3906, 1.5469, 0),
|
||||
VEC_FX32(4.3906, 1.5469, 0),
|
||||
VEC_FX32(1.959, 1.4668, 0),
|
||||
VEC_FX32(1.959, 1.4668, 0),
|
||||
VEC_FX32(3.1914, 1.5156, 0),
|
||||
VEC_FX32(3.1914, 1.5156, 0),
|
||||
VEC_FX32(4.25, 1.2656, 0),
|
||||
VEC_FX32(4.25, 1.2656, 0),
|
||||
VEC_FX32(3.9375, 1.7969, 0),
|
||||
VEC_FX32(3.9375, 1.7969, 0),
|
||||
VEC_FX32(5.0469, 0.8496, 0),
|
||||
VEC_FX32(5.0469, 0.8496, 0),
|
||||
VEC_FX32(3.2812, 1.3203, 0),
|
||||
VEC_FX32(3.2812, 1.3203, 0),
|
||||
VEC_FX32(-2.3281, -0.7617, 0.666),
|
||||
VEC_FX32(-2.3281, -0.7617, 0.666),
|
||||
VEC_FX32(3.3125, 0.7188, 0),
|
||||
VEC_FX32(3.3125, 0.7188, 0),
|
||||
},
|
||||
{
|
||||
{ -5364, -6568, -0x400 },
|
||||
{ -7552, -6912, -0x400 },
|
||||
{ -2308, -5632, -0x400 },
|
||||
{ -2984, -5272, -0x400 },
|
||||
{ -2308, -5632, -0x400 },
|
||||
{ -2308, -5632, -0x400 },
|
||||
{ -2480, -5568, 0x0 },
|
||||
{ -2480, -5568, 0x0 },
|
||||
{ -8200, -4776, 0x0 },
|
||||
{ -8200, -4776, 0x0 },
|
||||
{ -5600, -6480, 0x0 },
|
||||
{ -5600, -6480, 0x0 },
|
||||
{ -632, -5176, 0x0 },
|
||||
{ -632, -5176, 0x0 },
|
||||
{ -8448, -8384, 0x0 },
|
||||
{ -8448, -8384, 0x0 },
|
||||
{ 0x200, -6528, 0x0 },
|
||||
{ 0x200, -6528, 0x0 },
|
||||
{ -6848, -6144, 0x0 },
|
||||
{ -6848, -6144, 0x0 },
|
||||
{ 0x1420, 0x1D40, 0x0 },
|
||||
{ 0x1420, 0x1D40, 0x0 },
|
||||
{ -2308, -5632, 0x0 },
|
||||
{ -2308, -5632, 0x0 },
|
||||
[BATTLER_TYPE_PLAYER_SIDE_SLOT_2] = {
|
||||
VEC_FX32(-1.3096, -1.6035, -0.25),
|
||||
VEC_FX32(-1.8438, -1.6875, -0.25),
|
||||
VEC_FX32(-0.5635, -1.375, -0.25),
|
||||
VEC_FX32(-0.7285, -1.287, -0.25),
|
||||
VEC_FX32(-0.5635, -1.375, -0.25),
|
||||
VEC_FX32(-0.5635, -1.375, -0.25),
|
||||
VEC_FX32(-0.6055, -1.3594, 0),
|
||||
VEC_FX32(-0.6055, -1.3594, 0),
|
||||
VEC_FX32(-2.002, -1.166, 0),
|
||||
VEC_FX32(-2.002, -1.166, 0),
|
||||
VEC_FX32(-1.3672, -1.582, 0),
|
||||
VEC_FX32(-1.3672, -1.582, 0),
|
||||
VEC_FX32(-0.1543, -1.2637, 0),
|
||||
VEC_FX32(-0.1543, -1.2637, 0),
|
||||
VEC_FX32(-2.0625, -2.0469, 0),
|
||||
VEC_FX32(-2.0625, -2.0469, 0),
|
||||
VEC_FX32(0.125, -1.5938, 0),
|
||||
VEC_FX32(0.125, -1.5938, 0),
|
||||
VEC_FX32(-1.6719, -1.5, 0),
|
||||
VEC_FX32(-1.6719, -1.5, 0),
|
||||
VEC_FX32(1.2578, 1.8281, 0),
|
||||
VEC_FX32(1.2578, 1.8281, 0),
|
||||
VEC_FX32(-0.5635, -1.375, 0),
|
||||
VEC_FX32(-0.5635, -1.375, 0),
|
||||
},
|
||||
{
|
||||
{ 0x3B50, 0x1148, -0x1cb0 },
|
||||
{ 0x1B00, 0x1000, -0x1cb0 },
|
||||
{ 0x1B00, 0x1000, -0x1cb0 },
|
||||
{ 0x1AF8, 0x2048, -0x1cb0 },
|
||||
{ 0x1B00, 0x1000, -0x1cb0 },
|
||||
{ 0x1B00, 0x1000, -0x1cb0 },
|
||||
{ 0x3210, 0x15E0, 0x0 },
|
||||
{ 0x3210, 0x15E0, 0x0 },
|
||||
{ 0x7D8, 0x1258, 0x0 },
|
||||
{ 0x7D8, 0x1258, 0x0 },
|
||||
{ 0x1F58, 0x18A8, 0x0 },
|
||||
{ 0x1F58, 0x18A8, 0x0 },
|
||||
{ 0x2E08, 0x1808, 0x0 },
|
||||
{ 0x2E08, 0x1808, 0x0 },
|
||||
{ 0x2700, 0x2500, 0x0 },
|
||||
{ 0x2700, 0x2500, 0x0 },
|
||||
{ 0x3640, 0xD98, 0x0 },
|
||||
{ 0x3640, 0xD98, 0x0 },
|
||||
{ 0x1840, 0x1540, 0x0 },
|
||||
{ 0x1840, 0x1540, 0x0 },
|
||||
{ -5408, -6000, 0x0 },
|
||||
{ -5408, -6000, 0x0 },
|
||||
{ 0x1B00, 0x1000, 0x0 },
|
||||
{ 0x1B00, 0x1000, 0x0 },
|
||||
[BATTLER_TYPE_ENEMY_SIDE_SLOT_2] = {
|
||||
VEC_FX32(3.707, 1.08, -1.793),
|
||||
VEC_FX32(1.6875, 1.0, -1.793),
|
||||
VEC_FX32(1.6875, 1.0, -1.793),
|
||||
VEC_FX32(1.6855, 2.0176, -1.793),
|
||||
VEC_FX32(1.6875, 1.0, -1.793),
|
||||
VEC_FX32(1.6875, 1.0, -1.793),
|
||||
VEC_FX32(3.129, 1.3672, 0),
|
||||
VEC_FX32(3.129, 1.3672, 0),
|
||||
VEC_FX32(0.4902, 1.1465, 0),
|
||||
VEC_FX32(0.4902, 1.1465, 0),
|
||||
VEC_FX32(1.959, 1.541, 0),
|
||||
VEC_FX32(1.959, 1.541, 0),
|
||||
VEC_FX32(2.877, 1.502, 0),
|
||||
VEC_FX32(2.877, 1.502, 0),
|
||||
VEC_FX32(2.4375, 2.3125, 0),
|
||||
VEC_FX32(2.4375, 2.3125, 0),
|
||||
VEC_FX32(3.3906, 0.8496, 0),
|
||||
VEC_FX32(3.3906, 0.8496, 0),
|
||||
VEC_FX32(1.5156, 1.3281, 0),
|
||||
VEC_FX32(1.5156, 1.3281, 0),
|
||||
VEC_FX32(-1.3203, -1.4648, 0),
|
||||
VEC_FX32(-1.3203, -1.4648, 0),
|
||||
VEC_FX32(1.6875, 1.0, 0),
|
||||
VEC_FX32(1.6875, 1.0, 0),
|
||||
},
|
||||
{
|
||||
{ 0x1CC8, -5032, 0x40 },
|
||||
{ 0x3500, -6272, 0x40 },
|
||||
{ 0x3500, -3200, 0x40 },
|
||||
{ 0x3170, -2944, 0x40 },
|
||||
{ 0x3500, -3200, 0x40 },
|
||||
{ 0x3500, -3200, 0x40 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x1D90, -3200, 0x0 },
|
||||
{ 0x1D90, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ -9536, 0x1D40, 0x0 },
|
||||
{ -9536, 0x1D40, 0x0 },
|
||||
{ 0x3500, -3200, 0x0 },
|
||||
{ 0x3500, -2944, 0x0 },
|
||||
[CONTESTANT_TYPE_PLAYER] = {
|
||||
VEC_FX32(1.7988, -1.2285, 0.0156),
|
||||
VEC_FX32(3.3125, -1.5312, 0.0156),
|
||||
VEC_FX32(3.3125, -0.7812, 0.0156),
|
||||
VEC_FX32(3.0898, -0.7188, 0.0156),
|
||||
VEC_FX32(3.3125, -0.7812, 0.0156),
|
||||
VEC_FX32(3.3125, -0.7812, 0.0156),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(1.8477, -0.7812, 0),
|
||||
VEC_FX32(1.8477, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(-2.3281, 1.8281, 0),
|
||||
VEC_FX32(-2.3281, 1.8281, 0),
|
||||
VEC_FX32(3.3125, -0.7812, 0),
|
||||
VEC_FX32(3.3125, -0.7188, 0),
|
||||
},
|
||||
{
|
||||
{ -5364, 0x1148, -5248 },
|
||||
{ -7552, 0x1000, -5248 },
|
||||
{ -2308, 0x1000, -5248 },
|
||||
{ -2984, 0x2048, -5248 },
|
||||
{ -2308, 0x1000, -5248 },
|
||||
{ -2308, 0x1000, -5248 },
|
||||
{ -2480, 0x15E0, 0x0 },
|
||||
{ -2480, 0x15E0, 0x0 },
|
||||
{ -8200, 0x1258, 0x0 },
|
||||
{ -8200, 0x1258, 0x0 },
|
||||
{ -5600, 0x18A8, 0x0 },
|
||||
{ -5600, 0x18A8, 0x0 },
|
||||
{ -632, 0x1808, 0x0 },
|
||||
{ -632, 0x1808, 0x0 },
|
||||
{ -8448, 0x2500, 0x0 },
|
||||
{ -8448, 0x2500, 0x0 },
|
||||
{ 0x200, 0xD98, 0x0 },
|
||||
{ 0x200, 0xD98, 0x0 },
|
||||
{ -6848, 0x1540, 0x0 },
|
||||
{ -6848, 0x1540, 0x0 },
|
||||
{ 0x1420, -6000, 0xAA8 },
|
||||
{ 0x1420, -5408, 0xAA8 },
|
||||
{ -2308, 0x1000, 0x0 },
|
||||
{ -2984, 0x2048, 0x0 },
|
||||
[CONTESTANT_TYPE_ENEMY] = {
|
||||
VEC_FX32(-1.3096, 1.08, -1.2812),
|
||||
VEC_FX32(-1.8438, 1.0, -1.2812),
|
||||
VEC_FX32(-0.5635, 1.0, -1.2812),
|
||||
VEC_FX32(-0.7285, 2.0176, -1.2812),
|
||||
VEC_FX32(-0.5635, 1.0, -1.2812),
|
||||
VEC_FX32(-0.5635, 1.0, -1.2812),
|
||||
VEC_FX32(-0.6055, 1.3672, 0),
|
||||
VEC_FX32(-0.6055, 1.3672, 0),
|
||||
VEC_FX32(-2.002, 1.1465, 0),
|
||||
VEC_FX32(-2.002, 1.1465, 0),
|
||||
VEC_FX32(-1.3672, 1.541, 0),
|
||||
VEC_FX32(-1.3672, 1.541, 0),
|
||||
VEC_FX32(-0.1543, 1.502, 0),
|
||||
VEC_FX32(-0.1543, 1.502, 0),
|
||||
VEC_FX32(-2.0625, 2.3125, 0),
|
||||
VEC_FX32(-2.0625, 2.3125, 0),
|
||||
VEC_FX32(0.125, 0.8496, 0),
|
||||
VEC_FX32(0.125, 0.8496, 0),
|
||||
VEC_FX32(-1.6719, 1.3281, 0),
|
||||
VEC_FX32(-1.6719, 1.3281, 0),
|
||||
VEC_FX32(1.2578, -1.4648, 0.666),
|
||||
VEC_FX32(1.2578, -1.3203, 0.666),
|
||||
VEC_FX32(-0.5635, 1.0, 0),
|
||||
VEC_FX32(-0.7285, 2.0176, 0),
|
||||
},
|
||||
};
|
||||
|
||||
if (param2 == 1) {
|
||||
switch (param0) {
|
||||
case 0:
|
||||
param0 = 5 + 1;
|
||||
if (isContest == TRUE) {
|
||||
switch (battlerType) {
|
||||
case BATTLER_TYPE_SOLO_PLAYER:
|
||||
battlerType = CONTESTANT_TYPE_PLAYER;
|
||||
break;
|
||||
case 1:
|
||||
param0 = 5 + 2;
|
||||
case BATTLER_TYPE_SOLO_ENEMY:
|
||||
battlerType = CONTESTANT_TYPE_ENEMY;
|
||||
break;
|
||||
default:
|
||||
GF_ASSERT(FALSE);
|
||||
|
|
@ -397,82 +398,80 @@ static void ov12_022353CC(int param0, VecFx32 *param1, int param2, int param3, i
|
|||
}
|
||||
}
|
||||
|
||||
v0 = param3 + (param4 * 2);
|
||||
v1 = &v2[param0][v0];
|
||||
int index = projection + (posType * CAMERA_PROJECTION_COUNT);
|
||||
const VecFx32 *pos = &particlePositions[battlerType][index];
|
||||
|
||||
VEC_Set(param1, v1->x, v1->y, v1->z);
|
||||
VEC_Set(outPos, pos->x, pos->y, pos->z);
|
||||
}
|
||||
|
||||
void ov12_02235448(int param0, VecFx32 *param1, int param2, int param3)
|
||||
void BattleAnimUtil_GetBattlerTypeWorldPos_Normal(int battlerType, VecFx32 *pos, BOOL isContest, enum CameraProjection projection)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 0);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(battlerType, pos, isContest, projection, 0);
|
||||
}
|
||||
|
||||
void ov12_02235458(int param0, VecFx32 *param1, int param2, int param3)
|
||||
void ov12_02235458(int battlerType, VecFx32 *pos, int isContest, int projection)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 1);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(battlerType, pos, isContest, projection, 1);
|
||||
}
|
||||
|
||||
void ov12_02235468(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 2);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 2);
|
||||
}
|
||||
|
||||
void ov12_02235478(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 3);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 3);
|
||||
}
|
||||
|
||||
void ov12_02235488(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 4);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 4);
|
||||
}
|
||||
|
||||
void ov12_02235498(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 5);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 5);
|
||||
}
|
||||
|
||||
void ov12_022354A8(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 6);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 6);
|
||||
}
|
||||
|
||||
void ov12_022354B8(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 7);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 7);
|
||||
}
|
||||
|
||||
void ov12_022354C8(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 8);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 8);
|
||||
}
|
||||
|
||||
void ov12_022354D8(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 9);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 9);
|
||||
}
|
||||
|
||||
void ov12_022354E8(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 10);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 10);
|
||||
}
|
||||
|
||||
void ov12_022354F8(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_022353CC(param0, param1, param2, param3, 11);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPosInternal(param0, param1, param2, param3, 11);
|
||||
}
|
||||
|
||||
void ov12_02235508(BattleAnimSystem *param0, int param1, VecFx32 *param2)
|
||||
void BattleAnimUtil_GetBattlerWorldPos_Normal(BattleAnimSystem *system, int battler, VecFx32 *pos)
|
||||
{
|
||||
int v0, v1;
|
||||
int v2;
|
||||
ParticleSystem *v3 = BattleAnimSystem_GetCurrentParticleSystem(param0);
|
||||
v2 = ParticleSystem_GetCameraProjection(v3);
|
||||
v0 = BattleAnimUtil_GetBattlerType(param0, param1);
|
||||
v1 = BattleAnimSystem_IsContest(param0);
|
||||
ParticleSystem *ps = BattleAnimSystem_GetCurrentParticleSystem(system);
|
||||
enum CameraProjection projection = ParticleSystem_GetCameraProjection(ps);
|
||||
int battlerType = BattleAnimUtil_GetBattlerType(system, battler);
|
||||
BOOL isContest = BattleAnimSystem_IsContest(system);
|
||||
|
||||
ov12_02235448(v0, param2, v1, v2);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(battlerType, pos, isContest, projection);
|
||||
}
|
||||
|
||||
void ov12_02235538(BattleAnimSystem *param0, int param1, VecFx32 *param2)
|
||||
|
|
@ -616,7 +615,7 @@ void ov12_02235748(VecFx32 *param0)
|
|||
|
||||
void ov12_02235758(int param0, VecFx32 *param1, int param2, int param3)
|
||||
{
|
||||
ov12_02235448(param0, param1, param2, param3);
|
||||
BattleAnimUtil_GetBattlerTypeWorldPos_Normal(param0, param1, param2, param3);
|
||||
}
|
||||
|
||||
void ov12_02235760(int param0, VecFx32 *param1)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include "particle_system.h"
|
||||
|
||||
#include "nitro/fx/fx_trig.h"
|
||||
#include <nitro.h>
|
||||
#include <string.h>
|
||||
|
||||
|
|
@ -125,7 +126,7 @@ ParticleSystem *ParticleSystem_New(SPLTexVRAMAllocFunc texAllocFunc, SPLPalVRAMA
|
|||
particleSystem->camera = Camera_Alloc(heapID);
|
||||
|
||||
VEC_Set(&particleSystem->unused1, 0, 0, 0);
|
||||
particleSystem->cameraFov = 8192;
|
||||
particleSystem->cameraFov = FX_DEG_TO_IDX(FX32_CONST(45.0f));
|
||||
|
||||
Camera_InitWithTargetAndPosition(
|
||||
&sParticleSystemDefaultCameraTarget,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user