battle partners

This commit is contained in:
Marijn van der Werf 2023-03-20 00:10:07 +01:00
parent aca6c9609c
commit 833eff9daf
9 changed files with 321 additions and 91 deletions

View File

@ -1054,15 +1054,20 @@ EvtScript N(bomb) = {
EVT_CALL(SetGoalToTarget, ACTOR_PARTNER)
EVT_CALL(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
EVT_END_SWITCH
EVT_CALL(MoveBattleCamOver, 60)
EVT_CALL(MoveBattleCamOver, 60 * DT)
EVT_CALL(GetMenuSelection, LVar0, LVar1, LVar2)
EVT_SWITCH(LVar2)
EVT_CASE_EQ(MOVE_BOMB)
EVT_CALL(action_command_bomb_start, 0, 57, 3, 0)
EVT_CALL(action_command_bomb_start, 0, 57 * DT, 3, 0)
EVT_CASE_EQ(MOVE_POWER_BOMB)
EVT_CALL(action_command_bomb_start, 0, 72, 3, 1)
#if VERSION_PAL
// 72 * DT = 60
EVT_CALL(action_command_bomb_start, 0, 59, 3, 1)
#else
EVT_CALL(action_command_bomb_start, 0, 72 * DT, 3, 1)
#endif
EVT_CASE_EQ(MOVE_MEGA_BOMB)
EVT_CALL(action_command_bomb_start, 0, 87, 3, 2)
EVT_CALL(action_command_bomb_start, 0, 87 * DT, 3, 2)
EVT_END_SWITCH
EVT_CALL(PlaySoundAtActor, ACTOR_PARTNER, SOUND_287)
EVT_CHILD_THREAD
@ -1071,23 +1076,23 @@ EvtScript N(bomb) = {
EVT_CALL(GetMenuSelection, LVar0, LVar1, LVar2)
EVT_SWITCH(LVar2)
EVT_CASE_EQ(MOVE_BOMB)
EVT_SET(LVar0, 45)
EVT_SET(LVar0, 45 * DT)
EVT_CASE_EQ(MOVE_POWER_BOMB)
EVT_SET(LVar0, 50)
EVT_SET(LVar0, 50 * DT)
EVT_CASE_EQ(MOVE_MEGA_BOMB)
EVT_SET(LVar0, 50)
EVT_SET(LVar0, 50 * DT)
EVT_END_SWITCH
EVT_CALL(RunToGoal, ACTOR_PARTNER, 45)
EVT_CALL(RunToGoal, ACTOR_PARTNER, 45 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleBombette_AboutToExplode)
EVT_CALL(SetActorVar, ACTOR_SELF, 0, 0)
EVT_END_CHILD_THREAD
EVT_SWITCH(LVar2)
EVT_CASE_EQ(MOVE_BOMB)
EVT_SET(LVar0, 45)
EVT_SET(LVar0, 45 * DT)
EVT_CASE_EQ(MOVE_POWER_BOMB)
EVT_SET(LVar0, 50)
EVT_SET(LVar0, 50 * DT)
EVT_CASE_EQ(MOVE_MEGA_BOMB)
EVT_SET(LVar0, 50)
EVT_SET(LVar0, 50 * DT)
EVT_END_SWITCH
EVT_WAIT(LVar0)
EVT_CALL(GetMenuSelection, LVar0, LVar1, LVar2)
@ -1098,11 +1103,16 @@ EvtScript N(bomb) = {
EVT_CALL(StopSound, SOUND_287)
EVT_SWITCH(LVar2)
EVT_CASE_EQ(MOVE_BOMB)
EVT_SET(LVar0, 7)
#if VERSION_PAL
// 7 * DT = 5
EVT_SET(LVar0, 6)
#else
EVT_SET(LVar0, 7 * DT)
#endif
EVT_CASE_EQ(MOVE_POWER_BOMB)
EVT_SET(LVar0, 12)
EVT_SET(LVar0, 12 * DT)
EVT_CASE_EQ(MOVE_MEGA_BOMB)
EVT_SET(LVar0, 20)
EVT_SET(LVar0, 20 * DT)
EVT_END_SWITCH
EVT_LOOP(LVar0)
EVT_CALL(SetActorDispOffset, ACTOR_PARTNER, EVT_FLOAT(0.5), 0, 0)

View File

@ -468,15 +468,15 @@ EvtScript N(smack) = {
EVT_SWITCH(LVar2)
EVT_CASE_EQ(MOVE_SMACK1)
EVT_CALL(SetupMashMeter, 4, 40, 70, 99, 100, 0)
EVT_SET(LVarB, 60)
EVT_SET(LVarB, 60 * DT)
EVT_SET(LVarC, 1)
EVT_CASE_EQ(MOVE_SMACK2)
EVT_CALL(SetupMashMeter, 5, 35, 60, 80, 99, 100)
EVT_SET(LVarB, 60)
EVT_SET(LVarB, 60 * DT)
EVT_SET(LVarC, 1)
EVT_CASE_EQ(MOVE_SMACK3)
EVT_CALL(SetupMashMeter, 5, 35, 60, 80, 99, 100)
EVT_SET(LVarB, 60)
EVT_SET(LVarB, 60 * DT)
EVT_SET(LVarC, 1)
EVT_END_SWITCH
EVT_WAIT(10)
@ -790,12 +790,12 @@ EvtScript N(spook) = {
EVT_CALL(SetActorDispOffset, ACTOR_PARTNER, 0, 0, 0)
EVT_END_THREAD
EVT_CALL(N(AverageSpookChance))
EVT_CALL(action_command_spook_start, 0, 87, 3, LVar0)
EVT_CALL(action_command_spook_start, 0, 87 * DT, 3, LVar0)
EVT_CALL(GetActionResult, LVar1)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleBow_Conceal)
EVT_SET(LVar1, 0)
EVT_SET(LVar2, 0)
EVT_LOOP(90)
EVT_LOOP(90 * DT)
EVT_SWITCH(LVar1)
EVT_CASE_GT(80)
EVT_IF_EQ(LVar2, 7)
@ -989,7 +989,7 @@ EvtScript N(fanSmack) = {
EVT_CALL(action_command_smack_init)
EVT_CALL(SetActionHudPrepareTime, 0)
EVT_CALL(SetupMashMeter, 5, 35, 60, 80, 99, 100)
EVT_SET(LVarB, 90)
EVT_SET(LVarB, 90 * DT)
EVT_SET(LVarC, 2)
EVT_WAIT(10)
EVT_THREAD

View File

@ -553,34 +553,39 @@ EvtScript N(shellToss) = {
EVT_BREAK_LOOP
EVT_END_IF
EVT_END_LOOP
EVT_CALL(action_command_hammer_start, 0, 47, 3)
#if VERSION_PAL
// 47 * DT = 39
EVT_CALL(action_command_hammer_start, 0, 38, 3)
#else
EVT_CALL(action_command_hammer_start, 0, 47 * DT, 3)
#endif
EVT_CALL(SetActionResult, 0)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_CALL(PlaySoundAtActor, ACTOR_PARTNER, SOUND_200C)
EVT_CALL(UseBattleCamPreset, BTL_CAM_PRESET_59)
EVT_SET(LVar9, 0)
EVT_SET(LVar1, 0)
EVT_LOOP(50)
EVT_LOOP(50 * DT)
EVT_WAIT(1)
EVT_SWITCH(LVar9)
EVT_CASE_LT(20)
EVT_CASE_LT(20 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_CASE_EQ(20)
EVT_CASE_EQ(20 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_CASE_LT(30)
EVT_CASE_LT(30 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlower)
EVT_CASE_EQ(30)
EVT_CASE_EQ(30 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_CASE_LT(40)
EVT_CASE_LT(40 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFaster)
EVT_CASE_EQ(40)
EVT_CASE_EQ(40 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_CASE_LT(50)
EVT_CASE_LT(50 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFastest)
EVT_CASE_EQ(50)
EVT_CASE_EQ(50 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_END_SWITCH
@ -600,16 +605,16 @@ EvtScript N(shellToss) = {
EVT_WAIT(1)
EVT_SETF(LVarA, EVT_FLOAT(8.0))
EVT_SWITCH(LVar9)
EVT_CASE_LT(20)
EVT_CASE_LT(20 * DT)
EVT_SETF(LVarA, EVT_FLOAT(10.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_CASE_LT(30)
EVT_CASE_LT(30 * DT)
EVT_SETF(LVarA, EVT_FLOAT(12.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlower)
EVT_CASE_LT(40)
EVT_CASE_LT(40 * DT)
EVT_SETF(LVarA, EVT_FLOAT(14.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFaster)
EVT_CASE_LT(50)
EVT_CASE_LT(50 * DT)
EVT_SETF(LVarA, EVT_FLOAT(16.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFastest)
EVT_END_SWITCH
@ -884,8 +889,8 @@ EvtScript N(dizzyShell) = {
EVT_WAIT(15)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_CALL(UseBattleCamPreset, BTL_CAM_PRESET_59)
EVT_CALL(MoveBattleCamOver, 75)
EVT_SET(LVarD, 75)
EVT_CALL(MoveBattleCamOver, 75 * DT)
EVT_SET(LVarD, 75 * DT)
EVT_SET(LVarA, LVarD)
EVT_ADD(LVarA, -3)
EVT_CALL(battle_partner_kooper_AverageTargetDizzyChance)
@ -903,13 +908,13 @@ EvtScript N(dizzyShell) = {
EVT_WAIT(1)
EVT_CALL(GetActionResult, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_LT(20)
EVT_CASE_LT(20 * DT)
EVT_SET(LVarA, EVT_FLOAT(10.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_CASE_LT(40)
EVT_CASE_LT(40 * DT)
EVT_SET(LVarA, EVT_FLOAT(12.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlower)
EVT_CASE_LT(60)
EVT_CASE_LT(60 * DT)
EVT_SET(LVarA, EVT_FLOAT(14.0))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFaster)
EVT_CASE_DEFAULT
@ -917,16 +922,16 @@ EvtScript N(dizzyShell) = {
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFastest)
EVT_END_SWITCH
EVT_SWITCH(LVarD)
EVT_CASE_EQ(10)
EVT_CASE_EQ(10 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_CASE_EQ(20)
EVT_CASE_EQ(20 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_CASE_EQ(40)
EVT_CASE_EQ(40 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_CASE_EQ(60)
EVT_CASE_EQ(60 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar4, LVar5, LVar6)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar4, LVar5, LVar6, 32, 4, 0, 10, 0)
EVT_END_SWITCH
@ -1056,8 +1061,8 @@ EvtScript N(fireShell) = {
EVT_WAIT(15)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_CALL(UseBattleCamPreset, BTL_CAM_PRESET_59)
EVT_CALL(MoveBattleCamOver, 75)
EVT_SET(LVarD, 75)
EVT_CALL(MoveBattleCamOver, 75 * DT)
EVT_SET(LVarD, 75 * DT)
EVT_SET(LVarC, LVarD)
EVT_ADD(LVarC, -3)
EVT_CALL(action_command_fire_shell_start, 0, LVarC, 3)
@ -1081,36 +1086,36 @@ EvtScript N(fireShell) = {
EVT_WAIT(1)
EVT_CALL(GetActionResult, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_GE(80)
EVT_CASE_GE(80 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFastest)
EVT_SET(LVar9, 80)
EVT_SET(LVar9, 80 * DT)
EVT_SET(LVar7, 8)
EVT_IF_NE(LVar6, LVar7)
EVT_CALL(func_8026EA7C, ACTOR_PARTNER, -1, 15)
EVT_CALL(func_8026EBF8, ACTOR_PARTNER, -1, LVar6, LVar7, 1, 10, 1000, 10, 0, 0)
EVT_SET(LVar6, LVar7)
EVT_END_IF
EVT_CASE_GE(60)
EVT_CASE_GE(60 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinFaster)
EVT_SET(LVar9, 60)
EVT_SET(LVar9, 60 * DT)
EVT_SET(LVar7, 7)
EVT_IF_NE(LVar6, LVar7)
EVT_CALL(func_8026EA7C, ACTOR_PARTNER, -1, 15)
EVT_CALL(func_8026EBF8, ACTOR_PARTNER, -1, LVar6, LVar7, 1, 10, 1000, 10, 0, 0)
EVT_SET(LVar6, LVar7)
EVT_END_IF
EVT_CASE_GE(40)
EVT_CASE_GE(40 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlower)
EVT_SET(LVar9, 40)
EVT_SET(LVar9, 40 * DT)
EVT_SET(LVar7, 6)
EVT_IF_NE(LVar6, LVar7)
EVT_CALL(func_8026EA7C, ACTOR_PARTNER, -1, 15)
EVT_CALL(func_8026EBF8, ACTOR_PARTNER, -1, LVar6, LVar7, 1, 10, 1000, 10, 0, 0)
EVT_SET(LVar6, LVar7)
EVT_END_IF
EVT_CASE_GE(20)
EVT_CASE_GE(20 * DT)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_SET(LVar9, 35)
EVT_SET(LVar9, 35 * DT)
EVT_SET(LVar7, 5)
EVT_IF_NE(LVar6, LVar7)
EVT_CALL(func_8026EA7C, ACTOR_PARTNER, -1, 15)
@ -1119,7 +1124,7 @@ EvtScript N(fireShell) = {
EVT_END_IF
EVT_CASE_DEFAULT
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleKooper_ShellSpinSlowest)
EVT_SET(LVar9, 30)
EVT_SET(LVar9, 30 * DT)
EVT_SET(LVar7, 0)
EVT_IF_NE(LVar6, LVar7)
EVT_CALL(func_8026EA7C, ACTOR_PARTNER, -1, 15)
@ -1135,16 +1140,16 @@ EvtScript N(fireShell) = {
EVT_END_IF
EVT_CALL(ModifyActorDecoration, ACTOR_PARTNER, -1, 0, LVar8, LVar8, 255, 0)
EVT_SWITCH(LVarD)
EVT_CASE_EQ(10)
EVT_CASE_EQ(10 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar3, LVar4, LVar5)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar3, LVar4, LVar5, 32, 4, 0, 10, 0)
EVT_CASE_EQ(20)
EVT_CASE_EQ(20 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar3, LVar4, LVar5)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar3, LVar4, LVar5, 32, 4, 0, 10, 0)
EVT_CASE_EQ(40)
EVT_CASE_EQ(40 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar3, LVar4, LVar5)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar3, LVar4, LVar5, 32, 4, 0, 10, 0)
EVT_CASE_EQ(60)
EVT_CASE_EQ(60 * DT)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar3, LVar4, LVar5)
EVT_PLAY_EFFECT(EFFECT_SMOKE_IMPACT, 1, LVar3, LVar4, LVar5, 32, 4, 0, 10, 0)
EVT_END_SWITCH

View File

@ -459,7 +459,7 @@ API_CALLABLE(N(SpinyFlipActionCommand)) {
if (sAimingTimer != 0) {
sAimingTimer--;
} else {
sAimingTimer = 80;
sAimingTimer = (s32)(80 * DT);
hud_element_set_script(hudStick, &HES_StickTapRight);
sfx_play_sound_at_position(SOUND_312, SOUND_SPACE_MODE_0, 0.0f, 0.0f, 0.0f);
script->functionTemp[0] = 2;
@ -846,10 +846,10 @@ EvtScript N(spinyFlip) = {
EVT_ADD(LVar0, 8)
EVT_ADD(LVar1, 40)
EVT_ADD(LVar2, 5)
EVT_PLAY_EFFECT(EFFECT_ENERGY_IN_OUT, 0, LVar0, LVar1, LVar2, EVT_FLOAT(1.0), 80, 0)
EVT_PLAY_EFFECT(EFFECT_ENERGY_IN_OUT, 0, LVar0, LVar1, LVar2, EVT_FLOAT(1.0), 80 * DT, 0)
EVT_CALL(SetActorVar, ACTOR_PARTNER, 0, 1)
EVT_THREAD
EVT_LOOP(40)
EVT_LOOP(40 * DT)
EVT_CALL(SetActorDispOffset, ACTOR_PARTNER, 1, 0, 0)
EVT_CALL(SetPartDispOffset, ACTOR_PARTNER, 2, 1, 0, 0)
EVT_WAIT(1)
@ -968,11 +968,11 @@ EvtScript N(spinySurge) = {
EVT_CALL(GetActorLevel, ACTOR_PARTNER, LVar0)
EVT_SWITCH(LVar0)
EVT_CASE_EQ(0)
EVT_SET(LVarA, 60)
EVT_SET(LVarA, 60 * DT)
EVT_CASE_EQ(1)
EVT_SET(LVarA, 60)
EVT_SET(LVarA, 60 * DT)
EVT_CASE_EQ(2)
EVT_SET(LVarA, 60)
EVT_SET(LVarA, 60 * DT)
EVT_END_SWITCH
EVT_SET(LVarB, LVarA)
EVT_ADD(LVarB, -3)
@ -1336,6 +1336,14 @@ enum {
STATE_EXHALE = 1,
};
#if VERSION_PAL
#define CONST_1 0x8C
#define CONST_2 0x98
#else
#define CONST_1 165
#define CONST_2 177
#endif
API_CALLABLE(N(ProcessHurricane)) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* partner = battleStatus->partnerActor;
@ -1367,7 +1375,7 @@ API_CALLABLE(N(ProcessHurricane)) {
switch (script->functionTemp[0]) {
case 0:
partner->state.angle = 0.0f;
partner->state.moveTime = 165;
partner->state.moveTime = CONST_1;
partner->state.moveArcAmplitude = 0;
sIsHurricaneActive = TRUE;
D_8023D338 = 255;
@ -1381,7 +1389,7 @@ API_CALLABLE(N(ProcessHurricane)) {
effect->data.huffPuffBreath->envG = 240;
effect->data.huffPuffBreath->envB = 240;
hurricaneState->unk_54 = 177;
hurricaneState->unk_54 = CONST_2;
hurricaneState->breathSizeIncrease = 0;
hurricaneState->unk_46 = 0;
hurricaneState->state = 0;
@ -1700,21 +1708,21 @@ EvtScript N(hurricane) = {
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleLakilester_Idle)
EVT_WAIT(15)
EVT_CALL(N(InitHurricane))
EVT_CALL(action_command_hurricane_start, 0, 147, 3, LVar0)
EVT_CALL(action_command_hurricane_start, 0, 147 * DT, 3, LVar0)
EVT_CALL(SetBattleFlagBits, BS_FLAGS1_4000, FALSE)
EVT_CALL(SetActorRotationOffset, ACTOR_PARTNER, 0, 20, 0)
EVT_CALL(UseBattleCamPreset, BTL_CAM_PRESET_19)
EVT_CALL(SetBattleCamTarget, 35, 54, 0)
EVT_CALL(SetBattleCamOffsetZ, 0)
EVT_CALL(SetBattleCamZoom, 430)
EVT_CALL(MoveBattleCamOver, 150)
EVT_CALL(MoveBattleCamOver, 150 * DT)
EVT_CALL(func_8024ECF8, 0, 0, 1)
EVT_CALL(PlaySoundAtActor, ACTOR_PARTNER, SOUND_288)
EVT_THREAD
EVT_CALL(N(ProcessHurricane))
EVT_END_THREAD
EVT_WAIT(2)
EVT_LOOP(150)
EVT_LOOP(150 * DT)
EVT_CALL(N(IsHurricaneActive))
EVT_IF_EQ(LVar0, 0)
EVT_BREAK_LOOP

View File

@ -187,7 +187,11 @@ API_CALLABLE(N(ShellShotActionCommand)) {
state->angle = state->unk_18.x + rand_int(state->unk_18.y - state->unk_18.x - 2.0f);
hudTargetRotation = 0;
shellShotTimer = 90;
#if VERSION_PAL
state->velocity = 4.0f;
#else
state->velocity = 3.0f;
#endif
battleStatus->unk_86 = 0;
action_command_init_status();
func_80269118();
@ -1140,14 +1144,14 @@ EvtScript N(airLift) = {
EVT_CALL(PartnerTestEnemy, LVar0, DAMAGE_TYPE_AIR_LIFT, SUPPRESS_EVENT_SPIKY_FRONT, 0, 0, BS_FLAGS1_10 | BS_FLAGS1_SP_EVT_ACTIVE)
EVT_CALL(N(AirLiftChance))
EVT_IF_NE(LVar0, -1)
EVT_CALL(action_command_air_lift_start, 0, 87, 3, 0)
EVT_CALL(action_command_air_lift_start, 0, 87 * DT, 3, 0)
EVT_CALL(SetBattleFlagBits, BS_FLAGS1_4000, FALSE)
EVT_CHILD_THREAD
EVT_WAIT(1)
EVT_CALL(GetActionResult, LVar1)
EVT_DIV(LVar1, 10)
EVT_ADD(LVar1, 1)
EVT_LOOP(88)
EVT_LOOP(88 * DT)
EVT_CALL(GetActionResult, LVar0)
EVT_SET(LVar2, LVar1)
EVT_MUL(LVar2, 10)
@ -1160,7 +1164,7 @@ EvtScript N(airLift) = {
EVT_WAIT(1)
EVT_END_LOOP
EVT_END_CHILD_THREAD
EVT_WAIT(90)
EVT_WAIT(90 * DT)
EVT_CALL(GetActionSuccessCopy, LVar0)
EVT_ELSE
EVT_CALL(CloseActionCommandInfo)
@ -1213,7 +1217,7 @@ EvtScript N(airRaid) = {
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleParakarry_Run)
EVT_CALL(FlyToGoal, ACTOR_PARTNER, 15, -2, EASING_LINEAR)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleParakarry_Idle)
EVT_CALL(action_command_air_raid_start, 0, 90, 3)
EVT_CALL(action_command_air_raid_start, 0, 90 * DT, 3)
EVT_CALL(SetBattleFlagBits, BS_FLAGS1_4000, FALSE)
EVT_WAIT(2)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleParakarry_PreDive)

View File

@ -958,9 +958,9 @@ EvtScript N(squirt) = {
EVT_CALL(N(SetSquirtAngle))
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleSushie_Inhale)
EVT_CALL(AddBattleCamZoom, -80)
EVT_CALL(MoveBattleCamOver, 90)
EVT_CALL(action_command_squirt_start, 0, 87, 3)
EVT_LOOP(90)
EVT_CALL(MoveBattleCamOver, 90 * DT)
EVT_CALL(action_command_squirt_start, 0, 87 * DT, 3)
EVT_LOOP(90 * DT)
EVT_CALL(GetActionResult, LVar0)
EVT_IF_EQ(LVar0, 0)
EVT_CALL(GetActorScale, ACTOR_SELF, LVar0, LVar1, LVar2)

View File

@ -983,23 +983,29 @@ EvtScript N(powerShock) = {
EVT_CALL(MoveBattleCamOver, 80)
EVT_CALL(N(WattFXDisable))
EVT_CALL(N(TargetParalyzeChance))
EVT_CALL(action_command_power_shock_start, 0, 72, 3, LVar0)
#if VERSION_PAL
// (72 * DT = 60)
// TODO: maybe use (75 * DT) - 3
EVT_CALL(action_command_power_shock_start, 0, 59, 3, LVar0)
#else
EVT_CALL(action_command_power_shock_start, 0, 72 * DT, 3, LVar0)
#endif
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar0, LVar1, LVar2)
EVT_ADD(LVar1, 15)
EVT_ADD(LVar2, 5)
EVT_PLAY_EFFECT(EFFECT_SNAKING_STATIC, 0, LVar0, LVar1, LVar2, EVT_FLOAT(1.0), 75, 0)
EVT_PLAY_EFFECT(EFFECT_SNAKING_STATIC, 0, LVar0, LVar1, LVar2, EVT_FLOAT(1.0), 75 * DT, 0)
EVT_CALL(N(UnkBackgroundFunc3))
EVT_SET(LVar9, 0)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleWatt_StrainBigger)
EVT_CALL(func_8026EA7C, ACTOR_SELF, 1, 10)
EVT_THREAD
EVT_LOOP(75)
EVT_LOOP(75 * DT)
EVT_ADD(LVar9, 3)
EVT_CALL(N(SetBackgroundAlpha), LVar9)
EVT_WAIT(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_WAIT(75)
EVT_WAIT(75 * DT)
EVT_CALL(func_8026EA7C, ACTOR_SELF, 1, 9)
EVT_CALL(PlaySoundAtActor, ACTOR_PARTNER, SOUND_28A)
EVT_THREAD
@ -1106,9 +1112,9 @@ EvtScript N(8023AE8C) = {
EVT_WAIT(1)
EVT_CALL(SetActorYaw, ACTOR_PARTNER, 180)
EVT_WAIT(10)
EVT_CALL(action_command_water_block_start, 0, 100, 3)
EVT_CALL(action_command_water_block_start, 0, 100 * DT, 3)
EVT_CALL(AddBattleCamZoom, -75)
EVT_CALL(MoveBattleCamOver, 100)
EVT_CALL(MoveBattleCamOver, 100 * DT)
EVT_CALL(func_8024ECF8, 0, 0, 1)
EVT_THREAD
EVT_CALL(EnableActorBlur, ACTOR_PARTNER, 1)
@ -1189,9 +1195,9 @@ EvtScript N(8023B450) = {
EVT_WAIT(1)
EVT_CALL(SetActorYaw, ACTOR_PARTNER, 180)
EVT_WAIT(10)
EVT_CALL(action_command_water_block_start, 0, 100, 3)
EVT_CALL(action_command_water_block_start, 0, 100 * DT, 3)
EVT_CALL(AddBattleCamZoom, -100)
EVT_CALL(MoveBattleCamOver, 100)
EVT_CALL(MoveBattleCamOver, 100 * DT)
EVT_CALL(func_8024ECF8, 0, 0, 1)
EVT_THREAD
EVT_CALL(EnableActorBlur, ACTOR_PARTNER, 1)
@ -1270,29 +1276,29 @@ EvtScript N(megaShock) = {
EVT_CALL(N(UnkBackgroundFunc3))
EVT_SET(LVar9, 0)
EVT_THREAD
EVT_LOOP(75)
EVT_LOOP(75 * DT)
EVT_ADD(LVar9, 3)
EVT_CALL(N(SetBackgroundAlpha), LVar9)
EVT_WAIT(1)
EVT_END_LOOP
EVT_END_THREAD
EVT_CALL(N(AverageTargetParalyzeChance))
EVT_CALL(action_command_mega_shock_start, 0, 87, 3, LVar0)
EVT_CALL(action_command_mega_shock_start, 0, 87 * DT, 3, LVar0)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar0, LVar1, LVar2)
EVT_ADD(LVar1, 15)
EVT_ADD(LVar2, 5)
EVT_PLAY_EFFECT(EFFECT_SNAKING_STATIC, 0, LVar0, LVar1, LVar2, EVT_FLOAT(1.0), 90, 0)
EVT_PLAY_EFFECT(EFFECT_SNAKING_STATIC, 0, LVar0, LVar1, LVar2, EVT_FLOAT(1.0), 90 * DT, 0)
EVT_CALL(GetActorPos, ACTOR_PARTNER, LVar0, LVar1, LVar2)
EVT_ADD(LVar1, 12)
EVT_PLAY_EFFECT(EFFECT_RADIAL_SHIMMER, 8, LVar0, LVar1, LVar2, EVT_FLOAT(1.3), 90, 0)
EVT_PLAY_EFFECT(EFFECT_RADIAL_SHIMMER, 8, LVar0, LVar1, LVar2, EVT_FLOAT(1.3), 90 * DT, 0)
EVT_CALL(AddBattleCamZoom, -100)
EVT_CALL(MoveBattleCamOver, 90)
EVT_CALL(MoveBattleCamOver, 90 * DT)
EVT_CALL(func_8024ECF8, 0, 0, 1)
EVT_CALL(SetAnimation, ACTOR_PARTNER, -1, ANIM_BattleWatt_StrainBigger)
EVT_CALL(func_8026EA7C, ACTOR_SELF, 1, 10)
EVT_CALL(N(WattFXDisable))
EVT_CALL(GetActionResult, LVar1)
EVT_WAIT(90)
EVT_WAIT(90 * DT)
EVT_CALL(N(SetBackgroundAlpha), 0)
EVT_THREAD
EVT_SET(LVar9, 60)

View File

@ -5175,7 +5175,91 @@ segments:
- [0x7314E0, c, script/dig_05]
- [0x731500]
- [0x743A60, bin]
#######################
### Battle Partners ###
#######################
- name: battle_partner_goompa
dir: battle/partner
type: code
start: 0x743A60
vram: 0x80238000
subsegments:
- [0x743A60, c, goompa]
- [0x743A60]
- name: battle_partner_goombario
dir: battle/partner
type: code
start: 0x744010
vram: 0x80238000
subsegments:
- [0x744010, c, goombario]
- [0x7451C0]
- name: battle_partner_kooper
dir: battle/partner
type: code
start: 0x748DB0
vram: 0x80238000
subsegments:
- [0x748DB0, c, kooper]
- [0x7491E0]
- name: battle_partner_bombette
dir: battle/partner
type: code
start: 0x74DC40
vram: 0x80238000
subsegments:
- [0x74DC40, c, bombette]
- [0x74E280]
- name: battle_partner_parakarry
dir: battle/partner
type: code
start: 0x752CB0
vram: 0x80238000
subsegments:
- [0x752CB0, c, parakarry]
- [0x7544C0]
- name: battle_partner_watt
dir: battle/partner
type: code
start: 0x756A20
vram: 0x80238000
subsegments:
- [0x756A20, c, watt]
- [0x7579B0, .data, watt]
- name: battle_partner_sushie
dir: battle/partner
type: code
start: 0x75ABD0
vram: 0x80238000
subsegments:
- [0x75ABD0, c, sushie]
- [0x75BAA0]
- name: battle_partner_lakilester
dir: battle/partner
type: code
start: 0x75EC40
vram: 0x80238000
subsegments:
- [0x75EC40, c, lakilester]
- [0x760E10]
- name: battle_partner_bow
dir: battle/partner
type: code
start: 0x763E20
vram: 0x80238000
subsegments:
- [0x763E20, c, bow]
- [0x764120]
- name: battle_partner_twink
dir: battle/partner
type: code
start: 0x767C20
vram: 0x80238000
subsegments:
- [0x767C20, c, twink]
- [0x767CF0]
- [0x768780, bin]
- name: world_model_anim_kzn_01
dir: world/model_anim/kzn

View File

@ -320,6 +320,9 @@ HES_BlueMeter = 0x801076A4;
HES_AButton = 0x801076D0;
HES_MashAButton = 0x80107728;
HES_SlowlyMashAButton = 0x801077DC;
HES_StickNeutral = 0x801079C4;
HES_StickHoldLeft = 0x801079F0;
HES_StickTapRight = 0x80107D8C;
HES_RunAwayOK = 0x80107DEC;
ui_box_corners5_png = 0x80109D00;
wPartnerNpc = 0x8010B420;
@ -444,6 +447,8 @@ hud_element_clear_flags = 0x801435DC;
hud_element_set_scale = 0x801437D0;
hud_element_set_alpha = 0x80143A60;
hud_element_set_tint = 0x80143AAC;
hud_element_create_transform_A = 0x80143AD8;
hud_element_set_transform_rotation = 0x80143DD4;
clear_saved_variables = 0x80143ED0;
set_global_byte = 0x801440D0;
get_global_byte = 0x801440E8;
@ -488,6 +493,7 @@ gBackgroundImage = 0x80200000;
interp_value_with_easing = 0x802410E4;
UseBattleCamPreset = 0x8024E5BC;
UseBattleCamPresetImmediately = 0x8024E604;
SetBattleCamParam = 0x8024E6E8;
SetBattleCamTarget = 0x8024E8AC;
SetBattleCamOffsetZ = 0x8024E9F8;
SetBattleCamYaw = 0x8024EA84;
@ -498,7 +504,12 @@ SetBattleCamZoom = 0x8024EC0C;
AddBattleCamZoom = 0x8024EC4C;
func_8024ECF8 = 0x8024EC98;
FreezeBattleCam = 0x8024ED18;
func_8024EDA4 = 0x8024ED44;
btl_set_popup_duration = 0x8024FA64;
ShowMessageBox = 0x80251474;
ShowVariableMessageBox = 0x802514CC;
IsMessageBoxDisplayed = 0x80251544;
WaitForMessageBoxDone = 0x8025158C;
SetMessageBoxDuration = 0x802515C8;
ActorSpeak = 0x802530F0;
EndActorSpeech = 0x80253490;
@ -513,6 +524,7 @@ PlaySoundAtActor = 0x80253A1C;
PlaySoundAtPart = 0x80253A90;
PlayLoopingSoundAtActor = 0x80253B34;
StopLoopingSoundAtActor = 0x80253BD8;
save_tattle_flags = 0x80253ED0;
load_tattle_flags = 0x80254038;
StartRumble = 0x802543D8;
player_create_target_list = 0x80263424;
@ -521,19 +533,31 @@ add_xz_vec3f = 0x80264520;
play_movement_dust_effects = 0x802646E8;
get_actor_part = 0x80264854;
lookup_defense = 0x8026623C;
lookup_status_chance = 0x80266290;
LoadItemScript = 0x802682C0;
LoadActionCommand = 0x802685B0;
action_command_init_status = 0x80268C48;
func_80269118 = 0x80269508;
func_80269160 = 0x80269550;
SetActionDifficultyTable = 0x8026958C;
SetupMashMeter = 0x802695B8;
GetActionSuccess = 0x80269684;
SetActionSuccess = 0x802696B0;
SetActionCommandMode = 0x802696DC;
GetActionCommandMode = 0x80269708;
SetActionHudPrepareTime = 0x80269734;
SetCommandAutoSuccess = 0x8026978C;
CloseActionCommandInfo = 0x80269800;
func_80269470 = 0x80269860;
ShowActionHud = 0x80269894;
GetActionSuccessCopy = 0x802698E8;
func_80269524 = 0x80269914;
func_80269550 = 0x80269940;
GetBlockResult = 0x8026996C;
GetActionResult = 0x80269998;
SetActionResult = 0x802699C4;
func_80269600 = 0x802699F0;
set_goal_pos_to_part = 0x80269B44;
get_actor = 0x8026A15C;
LoadBattleSection = 0x8026A1D4;
GetBattlePhase = 0x8026A218;
@ -549,6 +573,7 @@ CountPlayerTargets = 0x8026A53C;
ForceHomePos = 0x8026A5DC;
SetHomePos = 0x8026A6C0;
SetGoalToTarget = 0x8026A798;
SetGoalToFirstTarget = 0x8026A88C;
SetGoalPos = 0x8026A900;
SetIdleGoal = 0x8026AA1C;
AddGoalPos = 0x8026AB38;
@ -648,6 +673,7 @@ SetActorSounds = 0x8026FB30;
ResetActorSounds = 0x8026FC28;
SetPartSounds = 0x8026FDF0;
SetActorType = 0x8026FF10;
ShowShockEffect = 0x8026FFA0;
GetActorAttackBoost = 0x8026FFF4;
GetActorDefenseBoost = 0x8027005C;
BoostAttack = 0x802700C4;
@ -660,9 +686,11 @@ CopyBuffs = 0x80271550;
GetMenuSelection = 0x802737B4;
func_80273444 = 0x80273834;
PlayerFallToGoal = 0x80273C84;
PlayerRunToGoal = 0x80274054;
GetPlayerHP = 0x80274624;
EnablePlayerBlur = 0x80274D68;
DispatchEventPlayer = 0x8027730C;
dispatch_event_actor = 0x80277550;
BindTakeTurn = 0x80278D20;
PauseTakeTurn = 0x80278D94;
ResumeTakeTurn = 0x80278E0C;
@ -679,6 +707,7 @@ RunToGoal = 0x8027A254;
IdleRunToGoal = 0x8027A654;
JumpPartTo = 0x8027A8D4;
FallPartTo = 0x8027AC44;
LandJumpPart = 0x8027AF4C;
RunPartTo = 0x8027B09C;
FlyToGoal = 0x8027BA14;
IdleFlyToGoal = 0x8027BFA8;
@ -716,15 +745,27 @@ EnableActorGlow = 0x8027DF94;
WasStatusInflicted = 0x8027E058;
CopyStatusEffects = 0x8027E0AC;
ClearStatusEffects = 0x8027E190;
GetActorLevel = 0x80280138;
PartnerDamageEnemy = 0x802801A4;
PartnerAfflictEnemy = 0x802803F4;
PartnerPowerBounceEnemy = 0x80280660;
PartnerTestEnemy = 0x802808C0;
GetActionCommandResult = 0x80280BC0;
PartnerYieldTurn = 0x80280C08;
GetDamageIntensity = 0x80280C30;
LoadStarPowerScript = 0x80280D40;
DemoBattleBeginDelay = 0x80280DE8;
MakeShop = 0x80281878;
MakeShopOwner = 0x80281BF0;
CreateMapRoom = 0x80281CBC;
bActorTattles = 0x80282F88;
bActorOffsets = 0x802832D8;
CreatePushBlockGrid = 0x802832F0;
SetPushBlock = 0x8028348C;
GetPushBlock = 0x802835D0;
bMarioIdleAnims = 0x80283628;
GetGridIndexFromPos = 0x802836C8;
bMarioHideAnims = 0x80283760;
SetPushBlockFallEffect = 0x802837BC;
ItemShopInteract = 0x80284064;
EnterWalk = 0x80285970;
@ -742,6 +783,33 @@ ExitSplitDoubleDoor = 0x80285EAC;
EnterSplitDoubleDoor = 0x80285ED4;
BaseExitDoor = 0x80285EFC;
BaseEnterDoor = 0x802861C0;
HES_AimMarkerA = 0x802933FC;
HES_AimMarkerB = 0x80293494;
HES_AimMarkerC = 0x8029352C;
HES_AimMarkerD = 0x802935C4;
HES_AimMarkerE = 0x8029365C;
HES_AimMarkerF = 0x802936F4;
HES_AimShimmerA = 0x802938BC;
HES_AimShimmerB = 0x80293954;
HES_AimShimmerC = 0x802939EC;
HES_AimShimmerD = 0x80293A84;
HES_AimShimmerE = 0x80293B1C;
HES_AimShimmerF = 0x80293BB4;
HES_AimReticle = 0x80293D7C;
HES_AimTarget = 0x80293DB4;
HES_AimBlinkA = 0x80293DEC;
D_80294720 = 0x80294D70;
DoPartnerRunAway = 0x8029514C;
DoPartnerBurnContact = 0x802952B8;
DoPartnerSpikeContact = 0x80295634;
D_80295350 = 0x802959A0;
D_80295744 = 0x80295D94;
DoPartnerRecover = 0x80296514;
DoPartnerHit = 0x80296664;
DoPartnerBurn = 0x8029686C;
D_802976E8 = 0x80297D38;
D_802977BC = 0x80297E0C;
DoPartnerBlock = 0x80297E64;
ForceNextTarget = 0x80299240;
DoNormalHit = 0x80299694;
DoBurnHit = 0x8029A720;
@ -760,13 +828,46 @@ D_8029C0A4 = 0x8029C6F4;
D_8029C12C = 0x8029C77C;
DoAirLift = 0x8029C9CC;
DoBlowAway = 0x8029CAF8;
gActionCommandStatus = 0x802A0230;
action_command_air_lift_init = 0x802A9000;
action_command_air_raid_init = 0x802A9000;
action_command_body_slam_init = 0x802A9000;
action_command_bomb_init = 0x802A9000;
action_command_dizzy_shell_init = 0x802A9000;
action_command_fire_shell_init = 0x802A9000;
action_command_hammer_init = 0x802A9000;
action_command_hurricane_init = 0x802A9000;
action_command_jump_init = 0x802A9000;
action_command_mega_shock_init = 0x802A9000;
action_command_power_shock_init = 0x802A9000;
action_command_smack_init = 0x802A9000;
action_command_spiny_surge_init = 0x802A9000;
action_command_spook_init = 0x802A9000;
action_command_squirt_init = 0x802A9000;
action_command_stop_leech_init = 0x802A9000;
action_command_tidal_wave_init = 0x802A9000;
action_command_water_block_init = 0x802A9000;
action_command_whirlwind_init = 0x802A9000;
action_command_stop_leech_start = 0x802A9110;
action_command_squirt_start = 0x802A911C;
action_command_jump_start = 0x802A9120;
action_command_tidal_wave_start = 0x802A9138;
action_command_spiny_surge_start = 0x802A916C;
action_command_bomb_start = 0x802A9170;
action_command_dizzy_shell_start = 0x802A9170;
action_command_air_raid_start = 0x802A9178;
action_command_fire_shell_start = 0x802A9178;
action_command_smack_start = 0x802A917C;
action_command_spook_start = 0x802A917C;
action_command_air_lift_start = 0x802A9184;
action_command_hurricane_start = 0x802A91A0;
action_command_mega_shock_start = 0x802A91A0;
action_command_break_free_start = 0x802A91B0;
action_command_body_slam_start = 0x802A91B8;
action_command_whirlwind_start = 0x802A91E0;
action_command_power_shock_start = 0x802A9210;
action_command_hammer_start = 0x802A9258;
action_command_water_block_start = 0x802A9398;
SpeechBubblePtr = 0x802B79A8;
Entity_CymbalPlant = 0x802BC788;
Entity_PinkFlower = 0x802BC7AC;
@ -1063,6 +1164,7 @@ fx_emote = 0x802DD2C0;
fx_sparkles = 0x802DD320;
fx_shape_spell = 0x802DD380;
fx_gather_energy_pink = 0x802DD3E0;
fx_smoke_ring = 0x802DD560;
fx_damage_stars = 0x802DD5C0;
fx_explosion = 0x802DD620;
fx_lens_flare = 0x802DD680;
@ -1074,7 +1176,9 @@ fx_sweat = 0x802DDBC0;
fx_sleep_bubble = 0x802DDC20;
fx_stars_orbiting = 0x802DDE60;
fx_radial_shimmer = 0x802DDFE0;
fx_ending_decals = 0x802DE040;
fx_fire_breath = 0x802DE160;
fx_bulb_glow = 0x802DE340;
fx_3D = 0x802DE3A0;
fx_recover = 0x802DE4C0;
fx_snowfall = 0x802DE6A0;
@ -1085,15 +1189,24 @@ fx_quizmo_answer = 0x802DEAC0;
fx_motion_blur_flame = 0x802DEB20;
fx_energy_orb_wave = 0x802DEB80;
fx_quizmo_audience = 0x802DEC40;
fx_stat_change = 0x802DED00;
fx_snaking_static = 0x802DED60;
fx_thunderbolt_ring = 0x802DEDC0;
fx_squirt = 0x802DEE20;
fx_water_block = 0x802DEE80;
fx_water_fountain = 0x802DEF40;
fx_underwater = 0x802DEFA0;
fx_lightning_bolt = 0x802DF000;
fx_water_splash = 0x802DF060;
fx_throw_spiny = 0x802DF240;
fx_65 = 0x802DF2A0;
fx_energy_in_out = 0x802DF4E0;
fx_tattle_window = 0x802DF540;
fx_huff_puff_breath = 0x802DF600;
fx_cold_breath = 0x802DF660;
fx_misc_particles = 0x802DF780;
fx_static_status = 0x802DF7E0;
fx_moving_cloud = 0x802DF840;
fx_chapter_change = 0x802DFA20;
fx_ice_shard = 0x802DFA80;
fx_spirit_card = 0x802DFAE0;