5#include "sprite/npc/BattleLakilester.h"
10#include "sprite/player.h"
12#define NAMESPACE battle_partner_lakilester
33static s32 sSavedHurricaneIntensity;
34static s32 sBreathSizeIncrease;
36static s32 HID_AimReticle;
37static s32 HID_AimTarget;
38static s32 TargetMarkRotation;
47static f32 AimMoveAngle;
49static s32 HID_AnalogStick;
50static s32 HudStickPosX;
51static s32 HudStickPosY;
52static b32 SpinyFlipTargetingDone;
54static s32 sTargetStates[24];
55static s32 sNumEnemiesBeingBlown;
56static s32 sIsHurricaneActive;
88s32 N(DefaultAnims)[] = {
95s32 N(IdleAnimations_spiny)[] = {
100s32 N(DefenseTable)[] = {
105s32 N(StatusTable)[] = {
134 .posOffset = { 0, 0, 0 },
135 .targetOffset = { 12, 30 },
137 .idleAnimations = N(DefaultAnims),
138 .defenseTable = N(DefenseTable),
140 .elementImmunityFlags = 0,
141 .projectileTargetOffset = { 0, 0 },
146 .posOffset = { 0, 0, 0 },
147 .targetOffset = { 0, 0 },
149 .idleAnimations = N(IdleAnimations_spiny),
150 .defenseTable = N(DefenseTable),
152 .elementImmunityFlags = 0,
153 .projectileTargetOffset = { 0, 0 },
159 .type = ACTOR_TYPE_LAKILESTER,
160 .level = ACTOR_LEVEL_LAKILESTER,
163 .partsData = N(ActorParts),
164 .initScript = &N(EVS_Init),
165 .statusTable = N(StatusTable),
168 .hurricaneChance = 0,
170 .upAndAwayChance = 0,
172 .powerBounceChance = 80,
175 .healthBarOffset = { 0, 0 },
176 .statusIconOffset = { -10, 30 },
177 .statusTextOffset = { 13, 31 },
196 Call(CloseActionCommandInfo)
315 Call(ShowActionHud, TRUE)
318 Call(LoadStarPowerScript)
346 Call(PartnerYieldTurn)
357 Call(PartnerYieldTurn)
371API_CALLABLE(N(SpinyFlipUpdatePopup)) {
373 SpinyFlipTargetingDone = FALSE;
376 if (!SpinyFlipTargetingDone) {
384API_CALLABLE(N(SpinyFlipActionCommand)) {
386 s32 screenX, screenY, screenZ;
413 enum SpinyFlipState {
415 SPINY_FLIP_DELAY = 1,
416 SPINY_FLIP_AIMING = 2,
419 partnerState = &partner->
state;
423 script->functionTemp[0] = SPINY_FLIP_INIT;
426 switch (script->functionTemp[0]) {
427 case SPINY_FLIP_INIT:
438 for (i = 0; i <
ARRAY_COUNT(N(AimDotHudScripts)); i++) {
458 partnerState->
speed = 0.0f;
461 TargetMarkRotation = 0;
470 AimMoveAngle = -1.0f;
473 SpinyFlipTargetingDone = TRUE;
474 script->functionTemp[0] = SPINY_FLIP_DELAY;
476 case SPINY_FLIP_DELAY:
477 if (battleStatus->
stickX != 0 || battleStatus->
stickY != 0) {
480 if (AimingTime != 0) {
483 AimingTime = (s32)(80 *
DT);
486 script->functionTemp[0] = SPINY_FLIP_AIMING;
489 case SPINY_FLIP_AIMING:
491 if (stickMagnitude > 80) {
495 if (stickMagnitude < 35) {
496 f32 temp = stickMagnitude;
499 temp_f8 = D_8023D2A0;
500 temp_f2 = temp_f8 + D_8023D2A4 + D_8023D2A8;
501 D_8023D2A0 = stickMagnitude;
502 D_8023D2A8 = D_8023D2A4;
503 temp_f10 = D_8023D2A0 - (temp_f2 / 3.0f);
504 D_8023D2A4 = temp_f8;
506 D_8023D2AC = temp_f10;
508 partner->
state.
speed += (D_8023D2AC / 8.5) / 3.0;
510 partner->
state.
speed += (D_8023D2AC / 8.5) / 2.0;
512 AimMoveAngle = stickAngle;
514 D_8023D2AC = temp_f10;
516 if (!(stickMagnitude < 31)) {
517 AimMoveAngle = stickAngle;
519 if (partnerState->
speed > 6.7) {
520 partnerState->
speed = 6.7;
522 partnerState->
speed -= (f32) ((2.0 * (40 - stickMagnitude)) / 40.0);
523 if (partnerState->
speed <= 0.0f) {
524 partnerState->
speed = 0.0f;
527 if (AimMoveAngle >= 0.0f) {
531 speed = partnerState->
speed;
532 partnerState->
curPos.
x += speed * sinTheta;
533 partnerState->
curPos.
y += speed * cosTheta;
535 if (partnerState->
curPos.
x < -30.0f) {
536 partnerState->
curPos.
x = -30.0f;
538 if (partnerState->
curPos.
x > 170.0f) {
539 partnerState->
curPos.
x = 170.0f;
541 if (partnerState->
curPos.
y > 130.0f) {
542 partnerState->
curPos.
y = 130.0f;
544 if (partnerState->
curPos.
y < 0.0f) {
550 if (AimingTime == 60) {
553 if (AimingTime == 30) {
556 if (AimingTime != 0) {
560 script->varTable[14] = 0;
561 script->varTable[15] = 0;
562 script->varTable[7] = partnerState->
curPos.
x;
563 script->varTable[8] = partnerState->
curPos.
y;
564 script->varTable[9] = partnerState->
curPos.
z;
566 if (partnerState->
dist <= 12.0) {
567 script->varTable[15] = 1;
572 for (i = 0; i <
ARRAY_COUNT(N(AimDotHudScripts)); i++) {
583 &screenX, &screenY, &screenZ);
587 TargetMarkRotation -= 10;
588 TargetMarkRotation =
clamp_angle(TargetMarkRotation);
591 &screenX, &screenY, &screenZ);
595 switch (script->functionTemp[0]) {
596 case SPINY_FLIP_DELAY:
597 case SPINY_FLIP_AIMING:
599 if (HudStickPosX > 50) {
607 switch (script->functionTemp[0]) {
608 case SPINY_FLIP_DELAY:
609 case SPINY_FLIP_AIMING:
613 for (i = 0; i <
ARRAY_COUNT(N(AimDotHudScripts)); i++) {
625API_CALLABLE(N(ThrowSpinyFX)) {
628 f32 xPos = partnerActor->
curPos.
x + 5;
629 f32 yPos = partnerActor->
curPos.
y + partnerActor->
size.
y + 20;
630 f32 zPos = partnerActor->
curPos.
z;
634 fx_throw_spiny(0, xPos, yPos, zPos, var, var2, 20, 1.5f, 30);
639API_CALLABLE(N(GetSpinySurgeDamage)) {
641 s32 actionCommandResult = script->varTable[10];
644 switch (partnerLevel) {
646 if (actionCommandResult <= 99) {
653 if (actionCommandResult <= 70) {
655 }
else if (actionCommandResult <= 99) {
662 if (actionCommandResult <= 40) {
664 }
else if (actionCommandResult <= 70) {
666 }
else if (actionCommandResult <= 99) {
674 if (actionCommandResult >= 100) {
675 script->varTable[0] = TRUE;
677 script->varTable[0] = FALSE;
680 script->varTable[15] = damage;
684API_CALLABLE(N(RemoveCloudNineFX)) {
687 if (effect != NULL) {
697API_CALLABLE(N(SpawnCloudNineFX)) {
704 script->functionTemp[0] = 0;
707 switch (script->functionTemp[0]) {
711 script->functionTemp[0] = 1;
714 if (sCounter >= 1.0) {
724API_CALLABLE(N(ApplyCloudNine)) {
734API_CALLABLE(N(InitHurricane)) {
742 s32 hpMissingPercent;
744 s32 avgHurricaneChance;
747 sNumEnemiesBeingBlown = 0;
748 sIsHurricaneActive = FALSE;
751 sTargetStates[i] = 0;
762 hpMissingPercent = 100 - ((actor->
curHP * 100) / actor->
maxHP);
764 if (hurricaneChance > 0) {
765 hurricaneChance += hurricaneChance * hpMissingPercent / 100;
766 if (hurricaneChance > 100) {
767 hurricaneChance = 100;
770 hurricaneChance = hurricaneChance * 150 / 100;
771 if (hurricaneChance > 150) {
772 hurricaneChance = 150;
783 sTargetStates[targetIdx] = hurricaneChance;
784 totalChance += hurricaneChance;
787 if (affectedTargets != 0) {
788 avgHurricaneChance = totalChance / affectedTargets;
790 avgHurricaneChance = 0;
792 script->varTable[0] = avgHurricaneChance;
800 sTargetStates[targetIdx] = -1;
801 }
else if (sTargetStates[targetIdx] != 0) {
802 sTargetStates[targetIdx] = avgHurricaneChance;
808API_CALLABLE(N(CanTargetBeBlown)) {
812 s32* hurricaneChance = &sTargetStates[targetIdx];
815 script->varTable[0] = *hurricaneChance;
817 if (*hurricaneChance == -1) {
821 if (*hurricaneChance == 0) {
827 *hurricaneChance = -1;
828 script->varTable[0] = target->
actorID;
830 *hurricaneChance = 0;
838 Call(N(SpinyFlipUpdatePopup))
847 Call(InitTargetIterator)
850 Call(SetBattleCamTarget, 47, 46, 12)
851 Call(SetBattleCamOffsetY, 7)
852 Call(SetBattleCamDist, 416)
853 Call(MoveBattleCamOver, 30)
861 Call(SetAnimation,
ACTOR_SELF, PRT_2, ANIM_BattleLakilester_Spiny)
891 Call(N(SpinyFlipActionCommand))
902 Call(SetAnimation,
ACTOR_SELF, PRT_2, ANIM_BattleLakilester_SpinySpin)
910 Call(SetAnimation,
ACTOR_SELF, PRT_2, ANIM_BattleLakilester_SpinySpin)
918 Call(SetAnimation,
ACTOR_SELF, PRT_2, ANIM_BattleLakilester_SpinySpin)
968 Call(action_command_spiny_surge_init)
972 Call(SetupMashMeter, 2, 99, 100, 0, 0, 0)
974 Call(SetupMashMeter, 3, 70, 99, 100, 0, 0)
976 Call(SetupMashMeter, 4, 40, 70, 99, 100, 0)
978 Call(SetActionHudPrepareTime, 10)
980 Call(SetBattleCamTarget, 45, 60, 0)
981 Call(SetBattleCamOffsetY, 0)
982 Call(SetBattleCamDist, 400)
983 Call(MoveBattleCamOver, 30)
984 Call(InitTargetIterator)
1002 Call(action_command_spiny_surge_start, 0,
LVarB, 3)
1004 Call(InitTargetIterator)
1042 Call(N(ThrowSpinyFX))
1075 Call(InitTargetIterator)
1083 Call(N(GetSpinySurgeDamage))
1107 ExecWait(N(EVS_ReturnHome_Success))
1123 Call(action_command_water_block_init, 2)
1124 Call(SetActionHudPrepareTime, 50)
1125 Call(InitTargetIterator)
1129 Call(SetBattleCamOffsetY, 17)
1130 Call(SetBattleCamDist, 300)
1131 Call(MoveBattleCamOver, 30)
1132 Call(DisableBattleCamClampX)
1158 Call(SetJumpAnimations,
ACTOR_PLAYER, 0, ANIM_Mario1_Jump, ANIM_Mario1_Fall, ANIM_Mario1_FightingStance)
1160 Call(PlayerHopToGoal, 18, 0, 0)
1164 Call(action_command_water_block_start, 0, 97, 3)
1165 Call(AddBattleCamDist, -75)
1166 Call(MoveBattleCamOver, 100)
1170 Call(AddBattleCamDist, 50)
1171 Call(MoveBattleCamOver, 5)
1174 Call(N(RemoveCloudNineFX))
1176 Call(N(SpawnCloudNineFX))
1177 Call(N(ApplyCloudNine))
1198 Call(SetJumpAnimations,
ACTOR_PLAYER, 0, ANIM_Mario1_Jump, ANIM_Mario1_Fall, ANIM_Mario1_FightingStance)
1201 Call(PlayerFallToGoal, 10)
1210 Call(PlayerRunToGoal, 0)
1228 Call(MoveBattleCamOver, 30)
1232 Call(WaitForMessageBoxDone)
1239EvtScript N(EVS_CloudNine_PlayerImmobile) = {
1242 Call(action_command_water_block_init, 2)
1243 Call(SetActionHudPrepareTime, 50)
1244 Call(N(RemoveCloudNineFX))
1245 Call(InitTargetIterator)
1249 Call(SetBattleCamOffsetY, 0)
1250 Call(SetBattleCamDist, 300)
1251 Call(MoveBattleCamOver, 30)
1252 Call(DisableBattleCamClampX)
1279 Call(action_command_water_block_start, 0, 97, 3)
1280 Call(AddBattleCamDist, -75)
1281 Call(MoveBattleCamOver, 100)
1285 Call(AddBattleCamDist, 50)
1286 Call(MoveBattleCamOver, 5)
1290 Call(N(SpawnCloudNineFX))
1291 Call(N(ApplyCloudNine))
1320 Call(PlayerRunToGoal, 0)
1333 Call(PartnerYieldTurn)
1335 Call(MoveBattleCamOver, 30)
1339 Call(WaitForMessageBoxDone)
1348 ExecWait(N(EVS_CloudNine_PlayerImmobile))
1350 ExecWait(N(EVS_CloudNine_PlayerOK))
1363#define HURRICANE_PARTNER_MOVE_TIME 140
1364#define HURRICANE_UNUSED_TIME 152
1366#define HURRICANE_PARTNER_MOVE_TIME 165
1367#define HURRICANE_UNUSED_TIME 177
1370API_CALLABLE(N(ProcessHurricane)) {
1388 static s32 sUnusedAngle;
1389 static s32 sHurricaneIntensity;
1390 static s32 sHuffPuffBreathState;
1391 static s32 D_8023D278;
1394 if (isInitialCall) {
1395 script->functionTemp[0] = 0;
1398 switch (script->functionTemp[0]) {
1403 sIsHurricaneActive = TRUE;
1405 sHuffPuffBreathEffect = effect = fx_huff_puff_breath(0,
NPC_DISPOSE_LOCATION, 0.0f, -2.0f, 0.6f, 0);
1417 hurricaneState->
unk_46 = 0;
1418 hurricaneState->
state = 0;
1424 sSavedHurricaneIntensity = 0;
1426 sHuffPuffBreathState = -1;
1429 sHurricaneIntensity = 0;
1430 sBreathSizeIncrease = 0;
1433 script->functionTemp[1] =
rand_int(10) + 11;
1434 script->functionTemp[2] = 0;
1435 script->functionTemp[0] = 1;
1438 partner->
state.
angle = sUnusedAngle * 150 / 100 - 75;
1442 temp = sTargetStates[targetIndex];
1447 targetActor->
yaw =
clamp_angle(targetActor->
yaw + 13.0f + sHurricaneIntensity * 4);
1459 temp = sTargetStates[targetIndex];
1464 targetActor->
yaw = 0.0f;
1469 sIsHurricaneActive = FALSE;
1479 switch (sHuffPuffBreathState) {
1482 y = partner->
curPos.
y + 15.0f;
1483 z = partner->
curPos.
z + tempF1;
1495 if (script->functionTemp[2] != 0) {
1498 script->functionTemp[2] = 0;
1510 y = partner->
curPos.
y + 15.0f;
1511 z = partner->
curPos.
z + tempF1;
1518 if (script->functionTemp[2] == 0) {
1521 script->functionTemp[2] = 1;
1524 script->functionTemp[1] = 1;
1541 tempF1 = tempF1 / 3000.0f + 0.5;
1543 tempF2 = tempF2 / 300.0f + 5.75 + sHurricaneIntensity;
1544 fx_moving_cloud(1, x, y, z, x2, y2, z2, tempF2, tempF1);
1555 tempF1 = tempF1 / 4000.0f + 0.1;
1557 tempF2 = tempF2 / 300.0f + 2.75 + sHurricaneIntensity / 2;
1558 fx_moving_cloud(1, x, y, z, x2, y2, z2, tempF2, tempF1);
1562 switch (hurricaneState->
state) {
1570 if (totalPower > 5000.0f) {
1571 totalPower = 5000.0f;
1574 tempF64 = D_8023D278;
1575 tempF1 = tempF64 + tempF64 * (1.0 -
sin_rad(totalPower *
PI_S * 0.5f / 5000.0f +
PI_S / 2)) * 1.5;
1577 sSavedHurricaneIntensity += D_8023D278;
1592 if (sSavedHurricaneIntensity > 1000) {
1593 sSavedHurricaneIntensity = 1000;
1598 if (hurricaneState->
totalPower > sMaxPower + 5000) {
1599 hurricaneState->
totalPower = sMaxPower + 5000;
1600 hurricaneState->
state = 1;
1601 hurricaneState->
unk_5D = 5;
1602 hurricaneState->
intensity = sSavedHurricaneIntensity;
1607 hurricaneState->
state = 10;
1611 switch (hurricaneState->
state) {
1615 if (tempF1 < 200.0f) {
1619 if (hurricaneState->
totalPower < 5000 - sMaxPower) {
1620 hurricaneState->
totalPower = 5000 - sMaxPower;
1621 hurricaneState->
state = 11;
1622 hurricaneState->
unk_5D = 5;
1625 if (sMaxPower > 5000) {
1632 hurricaneState->
state = 0;
1634 sSavedHurricaneIntensity = hurricaneState->
intensity;
1639 if (hurricaneState->
state == 0) {
1647 sUnusedAngle = hurricaneState->
totalPower / 100;
1648 sHurricaneIntensity = hurricaneState->
intensity / 100;
1649 if (sHurricaneIntensity > 10) {
1650 sHurricaneIntensity = 10;
1657API_CALLABLE(N(BlowTargetAway)) {
1663 if (isInitialCall) {
1664 script->functionTempPtr[1] =
get_actor(script->varTable[10]);
1665 script->functionTemp[0] = 0;
1668 target = script->functionTempPtr[1];
1669 state = &target->
state;
1670 switch (script->functionTemp[0]) {
1677 sNumEnemiesBeingBlown += 1;
1680 script->functionTemp[0] = 1;
1689 target->
yaw += 33.0f;
1692 sNumEnemiesBeingBlown -= 1;
1703API_CALLABLE(N(AllEnemiesBlownAway)) {
1704 if (sNumEnemiesBeingBlown == 0) {
1710API_CALLABLE(N(IsHurricaneActive)) {
1711 script->varTable[0] = sIsHurricaneActive;
1717 Call(action_command_hurricane_init)
1718 Call(SetupMashMeter, 1, 100, 0, 0, 0, 0)
1719 Call(SetActionHudPrepareTime, 15)
1722 Call(SetBattleCamTarget, -45, 54, 0)
1723 Call(SetBattleCamOffsetY, 0)
1724 Call(SetBattleCamDist, 280)
1725 Call(MoveBattleCamOver, 40)
1726 Call(InitTargetIterator)
1733 Call(N(InitHurricane))
1734 Call(action_command_hurricane_start, 0, 147 *
DT, 3,
LVar0)
1738 Call(SetBattleCamTarget, 35, 54, 0)
1739 Call(SetBattleCamOffsetY, 0)
1740 Call(SetBattleCamDist, 430)
1741 Call(MoveBattleCamOver, 150 *
DT)
1745 Call(N(ProcessHurricane))
1749 Call(N(IsHurricaneActive))
1767 Call(InitTargetIterator)
1770 Call(N(CanTargetBeBlown))
1774 Call(N(BlowTargetAway))
1793 Call(N(AllEnemiesBlownAway))
1794 Call(PartnerYieldTurn)
HudScript HES_StickNeutral
#define HURRICANE_UNUSED_TIME
HudScript HES_StickTapRight
#define HURRICANE_PARTNER_MOVE_TIME
struct ActorBlueprint * actorBlueprint
Vec2b projectileTargetOffset
struct SelectableTarget targetData[24]
#define sfx_play_sound_at_position
struct PartnerBuffFXData * partnerBuff
struct HuffPuffBreathFXData * huffPuffBreath
struct EndingDecalsFXData * endingDecals
@ FX_BUFF_DATA_CLOUD_NINE
#define STATUS_FLAGS_IMMOBILIZED
@ ACTION_COMMAND_WATER_BLOCK
@ ACTION_COMMAND_HURRICANE
@ ACTION_COMMAND_SPINY_SURGE
@ BS_FLAGS1_STAR_POINTS_DROPPED
@ BS_FLAGS1_FORCE_IMMUNE_HIT
@ BS_FLAGS1_TRIGGER_EVENTS
@ BS_FLAGS1_SHOW_PLAYER_DECORATIONS
@ BS_FLAGS1_INCLUDE_POWER_UPS
@ BTL_MSG_CLOUD_NINE_BEGIN
@ ACTOR_EVENT_FLAG_ILLUSORY
Player attacks pass through and miss.
@ BTL_MENU_TYPE_STAR_POWERS
@ STATUS_TURN_MOD_DEFAULT
@ STATUS_TURN_MOD_PARALYZE
@ HIT_RESULT_NICE_NO_DAMAGE
@ BTL_CAM_PARTNER_MISTAKE
@ SUPPRESS_EVENT_SPIKY_FRONT
@ SUPPRESS_EVENT_BURN_CONTACT
@ SOUND_LAKILESTER_HURRICANE_WIND
@ SOUND_LAKILESTER_HURRICANE_EXHALE
@ SOUND_LAKILESTER_HURRICANE_INHALE
@ SOUND_LAKILESTER_MAKE_CLOUD_NINE
@ SOUND_LAKILESTER_THROW_SPINY_B
@ SOUND_LAKILESTER_THROW_SPINY_A
@ ACTOR_FLAG_FLYING
Quake Hammer can't hit.
@ ACTOR_FLAG_NO_INACTIVE_ANIM
@ ACTOR_FLAG_SHOW_STATUS_ICONS
@ ACTOR_PART_FLAG_USE_ABSOLUTE_POSITION
@ ACTOR_PART_FLAG_INVISIBLE
@ DAMAGE_TYPE_SPINY_SURGE
@ DAMAGE_TYPE_MULTIPLE_POPUPS
void btl_set_popup_duration(s32 duration)
void get_screen_coords(s32 camID, f32 x, f32 y, f32 z, s32 *screenX, s32 *screenY, s32 *screenZ)
void dispatch_event_actor(Actor *, s32)
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
ActorPart * get_actor_part(Actor *actor, s32 partID)
void set_actor_anim(s32 actorID, s32 partID, AnimID animID)
Actor * get_actor(s32 actorID)
void set_goal_pos_to_part(ActorState *state, s32 actorID, s32 partID)
void add_vec2D_polar(f32 *x, f32 *y, f32 r, f32 theta)
void hud_element_create_transform_A(s32 id)
void hud_element_set_scale(s32 index, f32 scale)
void hud_element_set_script(s32 id, HudScript *anim)
void hud_element_set_render_depth(s32 id, s32 z)
void hud_element_set_transform_rotation(s32 id, f32 x, f32 y, f32 z)
void hud_element_set_render_pos(s32 id, s32 x, s32 y)
s32 hud_element_create(HudScript *anim)
Creates a new HUD element and returns its ID.
void hud_element_free(s32 id)
EvtScript EVS_Partner_Recover
EvtScript EVS_Partner_BurnContact
EvtScript EVS_Partner_Drop
EvtScript EVS_Partner_NoDamageHit
EvtScript EVS_Partner_ShockHit
EvtScript EVS_Partner_BurnHit
EvtScript EVS_Partner_Celebrate
EvtScript EVS_RunAwayFail
EvtScript EVS_Partner_SpikeContact
EvtScript EVS_Partner_LakilesterHit
EvtScript EVS_Partner_RunAway
void sfx_stop_sound(s32 soundID)
ApiStatus RandInt(Evt *script, b32 isInitialCall)
#define NPC_DISPOSE_POS_Z
#define Else
Marks the end of an if statement and the start of the else block.
#define Switch(LVAR)
Marks the start of a switch statement.
#define Ref(sym)
Address/pointer constant.
#define Set(VAR, INT_VALUE)
Sets the given variable to a given value casted to an integer.
#define CaseEq(RVAR)
Marks the start of a switch case that executes only if LVAR == RVAR. It also marks the end of any pre...
#define EndChildThread
Marks the end of a child thread block.
#define Sub(VAR, INT_VALUE)
#define IfNe(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR != RVAR.
#define End
Signals the end of EVT script data. A script missing this will likely crash on load.
#define Add(VAR, INT_VALUE)
#define EndLoop
Marks the end of a loop.
#define EndCaseGroup
Marks the end of a switch case group (CaseOrEq and/or CaseAndEq), stopping fallthrough.
#define NPC_DISPOSE_POS_X
#define Goto(LABEL_ID)
Moves execution to the given label.
#define NPC_DISPOSE_POS_Y
#define IfGt(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR <= RVAR.
#define Label(LABEL_ID)
Marks this point in the script as a Goto target.
#define CaseOrEq(RVAR)
Marks the start of a switch case that executes only if LVAR == RVAR.
#define EndIf
Marks the end of an if statement or an else block.
#define CaseDefault
Marks the start of a switch case that executes unconditionally. It also marks the end of any previous...
#define ExecWait(EVT_SOURCE)
Launches a new child thread.
#define BreakLoop
Breaks out of the innermost loop.
#define Thread
Marks the start of a thread block.
#define EndThread
Marks the end of a thread block.
#define IfFlag(LVAR, RVAR)
Marks the beginning of an if statement that only executes if the RVAR flag is set on LVAR,...
#define BreakSwitch
Marks the end of a switch case.
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
#define NPC_DISPOSE_LOCATION
#define PlayEffect(args...)
#define EndSwitch
Marks the end of a switch statement and any case.
#define IfEq(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR == RVAR.
#define Call(FUNC, ARGS...)
Calls a given C EVT API function with any number of arguments.
#define ChildThread
Marks the start of a child thread block.
#define CaseGt(RVAR)
Marks the start of a switch case that executes only if LVAR <= RVAR. It also marks the end of any pre...
#define Loop(TIMES)
Marks the beginning of a loop.
#define SetConst(VAR, CONST)
Sets the given variable to a given value, skipping the evt_get_variable call.
#define Return
Kills the current EVT thread.
struct EffectInstance * cloudNineEffect
struct Actor * partnerActor
struct Actor * playerActor
struct EffectInstance * buffEffect
GameStatus * gGameStatusPtr
BattleStatus gBattleStatus