Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
bombette.c
Go to the documentation of this file.
1#include "common.h"
2#include "effects.h"
3#include "battle/battle.h"
4#include "script_api/battle.h"
5#include "sprite/npc/BattleBombette.h"
8
9#define NAMESPACE battle_partner_bombette
10
11extern EvtScript N(EVS_Init);
12extern EvtScript N(EVS_TakeTurn);
13extern EvtScript N(EVS_Idle);
14extern EvtScript N(EVS_HandleEvent);
16extern EvtScript N(EVS_Celebrate);
20extern EvtScript N(EVS_RunAway);
24
25enum N(ActorPartIDs) {
26 PRT_MAIN = 1,
27};
28
29enum N(ActorVars) {
30 AVAR_Unk_0 = 0,
31};
32
33enum {
36};
37
38API_CALLABLE(N(PlayExplosionFX)) {
40 Bytecode* args = script->ptrReadPos;
41 s32 x = evt_get_variable(script, *args++);
42 s32 y = evt_get_variable(script, *args++);
43 s32 z = evt_get_variable(script, *args++);
44 s16 selectedMoveID;
45
46 fx_smoke_ring(0, x, y, z);
47 selectedMoveID = battleStatus->selectedMoveID;
48
49 switch (selectedMoveID) {
50 case MOVE_BOMB:
51 if (script->varTable[10] > 0) {
52 fx_explosion(1, x, y + 20, z);
53 } else {
54 fx_explosion(0, x, y + 20, z);
55 }
57 break;
58 case MOVE_POWER_BOMB:
59 if (script->varTable[10] > 0) {
60 fx_explosion(1, x, y + 20, z);
61 } else {
62 fx_explosion(0, x, y + 20, z);
63 }
65 break;
66 case MOVE_MEGA_BOMB:
67 if (script->varTable[10] > 0) {
68 fx_explosion(2, x, y + 20, z);
69 } else {
70 fx_explosion(1, x, y + 20, z);
71 }
73 break;
74 default:
75 fx_explosion(0, x, y + 20, z);
77 break;
78 }
79
80 return ApiStatus_DONE2;
81}
82
83API_CALLABLE(N(SlowDown)) {
85 Actor* partnerActor = battleStatus->partnerActor;
86 ActorState* partnerActorMovement = &partnerActor->state;
87
88 if (isInitialCall) {
89 partnerActor->state.curPos.x = partnerActor->curPos.x;
90 partnerActor->state.curPos.y = partnerActor->curPos.y;
91 partnerActor->state.curPos.z = partnerActor->curPos.z;
92 }
93
94 add_xz_vec3f(&partnerActorMovement->curPos, partnerActor->state.speed, partnerActor->state.angle);
95
96 if (partnerActor->state.speed < 4.0f) {
97 play_movement_dust_effects(0, partnerActor->state.curPos.x, partnerActor->state.curPos.y,
98 partnerActor->state.curPos.z, partnerActor->state.angle);
99 } else {
100 play_movement_dust_effects(1, partnerActor->state.curPos.x, partnerActor->state.curPos.y,
101 partnerActor->state.curPos.z, partnerActor->state.angle);
102 }
103
104 partnerActorMovement->speed /= 1.5;
105
106 partnerActor->curPos.x = partnerActorMovement->curPos.x;
107 partnerActor->curPos.y = partnerActorMovement->curPos.y;
108 partnerActor->curPos.z = partnerActorMovement->curPos.z;
109
110 if (partnerActorMovement->speed < 1.0) {
111 return ApiStatus_DONE2;
112 }
113
114 return ApiStatus_BLOCK;
115}
116
117API_CALLABLE(N(GetBombDamage)) {
118 Bytecode* args = script->ptrReadPos;
120 Actor* partnerActor = battleStatus->partnerActor;
122 s32 damage = 0;
123
124 switch (partnerActor->actorBlueprint->level) {
126 if (mashResult <= 35) {
127 damage = 1;
128 } else if (mashResult <= 60) {
129 damage = 2;
130 } else if (mashResult <= 80) {
131 damage = 3;
132 } else if (mashResult <= 99) {
133 damage = 4;
134 } else {
135 damage = 5;
136 }
137 break;
139 if (mashResult <= 35) {
140 damage = 1;
141 } else if (mashResult <= 60) {
142 damage = 3;
143 } else if (mashResult <= 80) {
144 damage = 4;
145 } else if (mashResult <= 99) {
146 damage = 5;
147 } else {
148 damage = 6;
149 }
150 break;
152 if (mashResult <= 35) {
153 damage = 1;
154 } else if (mashResult <= 60) {
155 damage = 3;
156 } else if (mashResult <= 80) {
157 damage = 5;
158 } else if (mashResult <= 99) {
159 damage = 6;
160 } else {
161 damage = 7;
162 }
163 break;
164 }
165
166 if (mashResult > 99) {
167 script->varTable[0] = true;
168 } else {
169 script->varTable[0] = false;
170 }
171
172 script->varTable[15] = damage;
173
174 return ApiStatus_DONE2;
175}
176
177API_CALLABLE(N(GetPowerBombDamage)) {
178 Bytecode* args = script->ptrReadPos;
180 Actor* partnerActor = battleStatus->partnerActor;
182 s32 damage = 0;
183
184 switch (partnerActor->actorBlueprint->level) {
186 if (mashResult <= 35) {
187 damage = 1;
188 } else if (mashResult <= 60) {
189 damage = 3;
190 } else if (mashResult <= 80) {
191 damage = 4;
192 } else if (mashResult <= 99) {
193 damage = 5;
194 } else {
195 damage = 6;
196 }
197 break;
199 if (mashResult <= 35) {
200 damage = 1;
201 } else if (mashResult <= 60) {
202 damage = 3;
203 } else if (mashResult <= 80) {
204 damage = 5;
205 } else if (mashResult <= 99) {
206 damage = 6;
207 } else {
208 damage = 7;
209 }
210 break;
211 }
212
213 if (mashResult > 99) {
214 script->varTable[0] = true;
215 } else {
216 script->varTable[0] = false;
217 }
218
219 script->varTable[15] = damage;
220
221 return ApiStatus_DONE2;
222}
223
224API_CALLABLE(N(GetMegaBombDamage)) {
225 Bytecode* args = script->ptrReadPos;
227 Actor* partnerActor = battleStatus->partnerActor;
229 s32 damage = 0;
230
231 switch (partnerActor->actorBlueprint->level) {
233 if (mashResult <= 35) {
234 damage = 1;
235 } else if (mashResult <= 60) {
236 damage = 3;
237 } else if (mashResult <= 80) {
238 damage = 5;
239 } else if (mashResult <= 99) {
240 damage = 6;
241 } else {
242 damage = 7;
243 }
244 break;
245 }
246
247 if (mashResult > 99) {
248 script->varTable[0] = true;
249 } else {
250 script->varTable[0] = false;
251 }
252
253 script->varTable[15] = damage;
254
255 return ApiStatus_DONE2;
256}
257
258s32 N(DefaultAnims)[] = {
267};
268
269s32 N(DefenseTable)[] = {
272};
273
274s32 N(StatusTable)[] = {
277 STATUS_KEY_SLEEP, 100,
280 STATUS_KEY_DIZZY, 100,
285 STATUS_KEY_STOP, 100,
297};
298
299ActorPartBlueprint N(ActorParts)[] = {
300 {
301 .flags = 0,
302 .index = PRT_MAIN,
303 .posOffset = { 0, 0, 0 },
304 .targetOffset = { 9, 20 },
305 .opacity = 255,
306 .idleAnimations = N(DefaultAnims),
307 .defenseTable = N(DefenseTable),
308 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
309 .elementImmunityFlags = 0,
310 .projectileTargetOffset = { 0, 0 },
311 },
312};
313
314ActorBlueprint NAMESPACE = {
315 .flags = 0,
316 .type = ACTOR_TYPE_BOMBETTE,
317 .level = ACTOR_LEVEL_BOMBETTE,
318 .maxHP = 99,
319 .partCount = ARRAY_COUNT(N(ActorParts)),
320 .partsData = N(ActorParts),
321 .initScript = &N(EVS_Init),
322 .statusTable = N(StatusTable),
323 .escapeChance = 0,
324 .airLiftChance = 0,
325 .hurricaneChance = 0,
326 .spookChance = 0,
327 .upAndAwayChance = 0,
328 .spinSmashReq = 4,
329 .powerBounceChance = 80,
330 .coinReward = 0,
331 .size = { 30, 28 },
332 .healthBarOffset = { 0, 0 },
333 .statusIconOffset = { -10, 20 },
334 .statusTextOffset = { 10, 20 },
335};
336
337EvtScript N(EVS_Init) = {
338 Call(BindTakeTurn, ACTOR_PARTNER, Ref(N(EVS_TakeTurn)))
339 Call(BindIdle, ACTOR_PARTNER, Ref(N(EVS_Idle)))
340 Call(BindHandleEvent, ACTOR_PARTNER, Ref(N(EVS_HandleEvent)))
342 Return
343 End
344};
345
346EvtScript N(EVS_Idle) = {
347 Return
348 End
349};
350
351EvtScript N(EVS_HandleEvent) = {
368 SetConst(LVar0, PRT_MAIN)
374 Set(LVar2, 15)
384 Set(LVarA, 0)
386 Thread
387 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.5))
388 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
389 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(3.0))
390 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
391 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.5))
392 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.8))
393 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.3))
394 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.1))
396 Thread
397 Set(LVar0, 0)
398 Loop(80)
399 Wait(1)
401 Add(LVar0, 33)
402 EndLoop
407 Add(LVar1, 200)
410 Wait(50)
413 Add(LVar1, 200)
422 Set(LVar1, 0)
437 Sub(LVar0, 60)
438 Add(LVar1, 40)
449 Set(LVarA, 0)
451 Thread
452 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.5))
453 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
454 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(3.0))
455 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
456 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.5))
457 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.8))
458 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.3))
459 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.1))
461 Thread
462 Set(LVar0, 0)
463 Loop(80)
464 Wait(1)
466 Add(LVar0, 33)
467 EndLoop
472 Add(LVar1, 200)
475 Wait(50)
478 Add(LVar1, 200)
487 Set(LVar1, 0)
499 Set(LVar2, 15)
501 Set(LVarA, LVar1)
502 Set(LVarB, LVar2)
503 Set(LVarC, LVar3)
505 Call(SetActorScale, ACTOR_SELF, Float(1.0), Float(1.0), Float(1.0))
510 Sub(LVar0, 60)
511 Add(LVar1, 40)
517 Set(LVar1, LVarA)
518 Set(LVar2, 0)
521 Wait(8)
524 Set(LVarA, 0)
526 Thread
527 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.5))
528 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
529 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(3.0))
530 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
531 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.5))
532 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.8))
533 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.3))
534 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.1))
536 Thread
537 Set(LVar0, 0)
538 Loop(80)
539 Wait(1)
541 Add(LVar0, 33)
542 EndLoop
547 Add(LVar1, 200)
550 Wait(50)
553 Add(LVar1, 200)
562 Set(LVar1, 0)
576 SetConst(LVar0, PRT_MAIN)
579 Set(LVar3, 0)
584 SetConst(LVar0, PRT_MAIN)
587 Wait(10)
592 Return
593 End
594};
595
596EvtScript N(EVS_TakeTurn) = {
610 Return
611 End
612};
613
615 SetConst(LVar0, PRT_MAIN)
620 Return
621 End
622};
623
625 Call(ShowActionHud, true)
632 Return
649 Return
650 End
651};
652
663 Return
664 End
665};
666
668 SetConst(LVar0, PRT_MAIN)
671 Return
672 End
673};
674
684 Return
685 End
686};
687
689 Return
690 End
691};
692
699 Sub(LVar0, 60)
700 Set(LVar1, 0)
705 Wait(1)
707 Sub(LVar0, 30)
711 Wait(1)
713 Sub(LVar0, 20)
717 Wait(1)
719 Sub(LVar0, 10)
722 Wait(1)
724 Wait(8)
731 Return
732 End
733};
734
740 Sub(LVar0, 40)
741 Set(LVar1, 0)
746 Wait(1)
748 Sub(LVar0, 30)
752 Wait(1)
754 Sub(LVar0, 20)
758 Wait(1)
760 Sub(LVar0, 10)
763 Wait(1)
765 Wait(8)
772 Return
773 End
774};
775
779 Return
780 End
781};
782
783EvtScript N(animBrace) = {
785 Loop(15)
787 Wait(1)
789 Wait(1)
790 EndLoop
791 Return
792 End
793};
794
795EvtScript N(animHold) = {
796 Loop(15)
798 Wait(1)
800 Wait(1)
801 EndLoop
802 Return
803 End
804};
805
809 Call(SetupMashMeter, 1, 100, 0, 0, 0, 0)
810 Wait(10)
814 Call(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
816 Loop(60)
821 EndIf
822 Wait(1)
823 EndLoop
827 Set(LF_MashEnded, 0)
829 Loop(35)
832 Set(LF_MashEnded, 1)
834 EndIf
835 Wait(1)
836 EndLoop
839 Goto(10)
840 EndIf
841 Set(LF_MashEnded, 0)
843 Loop(30)
846 Set(LF_MashEnded, 1)
848 EndIf
849 Wait(1)
850 EndLoop
853 Goto(10)
854 EndIf
857 Loop(30)
860 Set(LF_MashEnded, 1)
862 EndIf
863 Wait(1)
864 EndLoop
867 Goto(10)
868 EndIf
869 EndIf
870 Else
871 Set(LF_MashEnded, 0)
873 Loop(35)
879 EndIf
880 EndIf
883 Set(LF_MashEnded, 1)
885 EndIf
886 EndIf
887 Wait(1)
888 EndLoop
891 Goto(10)
892 EndIf
893 Set(LF_MashEnded, 0)
895 Loop(30)
901 EndIf
902 EndIf
905 Set(LF_MashEnded, 1)
907 EndIf
908 EndIf
909 Wait(1)
910 EndLoop
913 Goto(10)
914 EndIf
917 Loop(30)
920 Set(LF_MashEnded, 1)
922 EndIf
923 Wait(1)
924 EndLoop
927 Goto(10)
928 EndIf
929 EndIf
930 EndIf
931 Label(10)
933 Wait(2)
939 Call(AddGoalPos, ACTOR_PARTNER, -10, 0, 0)
946 Thread
948 Set(LVar0, 0)
949 Loop(10)
950 Add(LVar0, -72)
952 Wait(1)
953 EndLoop
956 Call(AddGoalPos, ACTOR_PARTNER, 60, 0, 0)
959 Thread
960 Call(N(SlowDown))
962 Wait(20)
969 Return
970 EndIf
974 Set(LVarE, 1)
975 Set(LVarF, 2)
977 Set(LVarE, 2)
978 Set(LVarF, 3)
980 Set(LVarE, 3)
981 Set(LVarF, 5)
985 IfGt(LVar0, 0)
987 Call(AddGoalPos, ACTOR_PARTNER, -10, 0, 0)
991 Else
993 Call(AddGoalPos, ACTOR_PARTNER, -10, 0, 0)
998 EndIf
1000 CaseGt(0)
1004 EndSwitch
1005 Switch(LVar0)
1014 EndSwitch
1015 Return
1016 End
1017};
1018
1023 Switch(LVar2)
1026 Switch(LVar0)
1028 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1030 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1032 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1033 EndSwitch
1036 Switch(LVar0)
1038 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1040 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1041 EndSwitch
1043 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1044 EndSwitch
1045 Wait(10)
1048 Switch(LVar2)
1052 Call(AddGoalPos, ACTOR_PARTNER, -20, 0, 0)
1056 Call(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
1060 Call(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
1061 EndSwitch
1064 Switch(LVar2)
1071 EndSwitch
1077 Switch(LVar2)
1079 Set(LVar0, 45 * DT)
1081 Set(LVar0, 50 * DT)
1083 Set(LVar0, 50 * DT)
1084 EndSwitch
1089 Switch(LVar2)
1091 Set(LVar0, 45 * DT)
1093 Set(LVar0, 50 * DT)
1095 Set(LVar0, 50 * DT)
1096 EndSwitch
1097 Wait(LVar0)
1099 Switch(LVar2)
1102 EndSwitch
1104 Switch(LVar2)
1106 Set(LVar0, 6 * DT + 1)
1108 Set(LVar0, 12 * DT)
1110 Set(LVar0, 20 * DT)
1111 EndSwitch
1112 Loop(LVar0)
1114 Wait(1)
1116 Wait(1)
1117 EndLoop
1123 Set(LVarA, LVar0)
1126 Thread
1128 Switch(LVar2)
1130 IfGt(LVarA, 0)
1132 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
1133 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1134 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
1135 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1136 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1137 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1138 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(2.25))
1139 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.2))
1140 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.45))
1141 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.15))
1142 Else
1144 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(0.4))
1145 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1146 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.4))
1147 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1148 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.2))
1149 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1150 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(1.2))
1151 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.64))
1152 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(0.24))
1153 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.08))
1154 EndIf
1156 IfGt(LVarA, 0)
1158 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
1159 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1160 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
1161 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1162 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1163 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1164 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(2.25))
1165 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.2))
1166 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.45))
1167 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.15))
1168 Else
1170 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(0.4))
1171 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1172 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.4))
1173 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1174 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.2))
1175 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1176 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(1.2))
1177 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.64))
1178 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(0.24))
1179 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.08))
1180 EndIf
1182 IfGt(LVarA, 0)
1184 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.0))
1185 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1186 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1187 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1188 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(8.0))
1189 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1190 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(3.0))
1191 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.6))
1192 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.6))
1193 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.2))
1194 Else
1196 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(0.5))
1197 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(2.0))
1198 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1199 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(2.0))
1200 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1201 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(2.0))
1202 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(1.5))
1203 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.8))
1204 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(0.3))
1205 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.1))
1206 EndIf
1207 EndSwitch
1208 EndThread
1209 Thread
1211 Switch(LVar2)
1215 Wait(8)
1216 IfGt(LVarA, 0)
1217 PlayEffect(EFFECT_RED_IMPACT, 0, LVar0, 0, LVar2, 1, 0, 0)
1218 Else
1219 PlayEffect(EFFECT_RED_IMPACT, 1, LVar0, 0, LVar2, 1, 0, 0)
1220 EndIf
1222 Set(LVarA, 0)
1223 Wait(10)
1224 Call(N(PlayExplosionFX), 88, 33, 5)
1225 Wait(10)
1226 Call(N(PlayExplosionFX), 18, 73, 5)
1227 Wait(10)
1228 Call(N(PlayExplosionFX), 120, 19, 5)
1229 Wait(10)
1230 EndSwitch
1231 EndThread
1232 Set(LF_MashEnded, 0)
1234 Switch(LVar2)
1239 IfEq(LVar0, 6)
1241 EndIf
1244 Switch(LVar0)
1245 CaseGt(0)
1247 Set(LF_MashEnded, 1)
1250 EndSwitch
1253 Label(5)
1256 IfEq(LVar0, 6)
1257 Goto(6)
1258 EndIf
1261 Switch(LVar0)
1262 CaseGt(0)
1264 Set(LF_MashEnded, 1)
1267 EndSwitch
1268 Label(6)
1271 Goto(5)
1272 EndIf
1275 Label(10)
1278 IfEq(LVar0, 6)
1279 Goto(11)
1280 EndIf
1283 Switch(LVar0)
1284 CaseGt(0)
1286 Set(LF_MashEnded, 1)
1289 EndSwitch
1290 Label(11)
1291 Wait(5)
1294 Goto(10)
1295 EndIf
1296 EndSwitch
1297 IfGt(LF_MashEnded, 0)
1300 Else
1302 EndIf
1303 Set(LVar0, 0)
1304 Switch(LVar0)
1307 CaseOrEq(1)
1308 CaseOrEq(3)
1309 Thread
1310 Set(LVar0, 0)
1311 Loop(80)
1312 Wait(1)
1314 Add(LVar0, 33)
1315 EndLoop
1317 EndThread
1320 Sub(LVar0, 50)
1321 Add(LVar1, 200)
1324 Wait(50)
1328 Add(LVar0, 25)
1329 Add(LVar1, 200)
1338 EndSwitch
1339 Return
1340 End
1341};
1342
1346 Call(AddGoalPos, ACTOR_PARTNER, -20, 0, 0)
1348 Set(LVar1, 0)
1355 Wait(5)
1357 Wait(10)
1359 Loop(7)
1361 Wait(1)
1363 Wait(1)
1364 EndLoop
1366 Set(LVarA, 0)
1371 Thread
1373 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
1374 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1375 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
1376 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1377 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1378 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1379 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(2.25))
1380 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.2))
1381 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.45))
1382 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.15))
1383 EndThread
1387 Goto(10)
1388 EndIf
1389 Set(LVarF, 1)
1391 Switch(LVar2)
1393 Set(LVarF, 5)
1395 Set(LVarF, 6)
1397 Set(LVarF, 7)
1398 EndSwitch
1400 Label(10)
1401 Set(LVar0, 0)
1402 Switch(LVar0)
1405 CaseOrEq(1)
1406 CaseOrEq(3)
1407 Thread
1408 Set(LVar0, 0)
1409 Loop(80)
1410 Wait(1)
1412 Add(LVar0, 33)
1413 EndLoop
1415 EndThread
1418 Sub(LVar0, 50)
1419 Add(LVar1, 200)
1422 Wait(50)
1425 Add(LVar0, 25)
1426 Add(LVar1, 200)
1435 EndSwitch
1436 Return
1437 End
1438};
BSS s32 PopupMenu_SelectedIndex
@ AC_DIFFICULTY_3
Definition action_cmd.h:45
@ LF_MashEnded
Definition bombette.c:34
@ LF_MashStarted
Definition bombette.c:35
@ ACV_SLAM_BOMBETTE
Definition body_slam.h:21
@ ACV_BOMB_ULTRA
Definition bomb.h:20
@ ACV_BOMB_BASIC
Definition bomb.h:18
@ ACV_BOMB_SUPER
Definition bomb.h:19
struct ActorBlueprint * actorBlueprint
ActorState state
Vec3f curPos
Bytecode EvtScript[]
@ ACTION_COMMAND_BOMB
Definition enums.h:3517
@ ACTION_COMMAND_BODY_SLAM
Definition enums.h:3518
@ BUTTON_A
Definition enums.h:2776
@ ACTOR_SOUND_WALK
Definition enums.h:2067
@ BS_FLAGS1_NICE_HIT
Definition enums.h:3609
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3608
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3604
@ BS_FLAGS1_4000
Definition enums.h:3616
@ ELEMENT_END
Definition enums.h:2147
@ ELEMENT_NORMAL
Definition enums.h:2148
@ ITER_NO_MORE
Definition enums.h:2063
@ ITER_NEXT
Definition enums.h:2058
@ ACTOR_EVENT_FLAGS_NONE
Definition enums.h:3404
@ PHASE_RUN_AWAY_START
Definition enums.h:2093
@ PHASE_EXECUTE_ACTION
Definition enums.h:2091
@ PHASE_CELEBRATE
Definition enums.h:2095
@ PHASE_RUN_AWAY_FAIL
Definition enums.h:2097
@ PHASE_FIRST_STRIKE
Definition enums.h:2092
@ BTL_MENU_TYPE_STAR_POWERS
Definition enums.h:3834
@ STATUS_KEY_PARALYZE
Definition enums.h:2806
@ STATUS_TURN_MOD_DEFAULT
Definition enums.h:2832
@ STATUS_TURN_MOD_PARALYZE
Definition enums.h:2839
@ STATUS_KEY_FROZEN
Definition enums.h:2808
@ STATUS_TURN_MOD_SLEEP
Definition enums.h:2833
@ STATUS_TURN_MOD_DIZZY
Definition enums.h:2837
@ STATUS_TURN_MOD_UNUSED
Definition enums.h:2836
@ STATUS_KEY_STATIC
Definition enums.h:2812
@ STATUS_END
Definition enums.h:2801
@ STATUS_KEY_KO
Definition enums.h:2814
@ STATUS_TURN_MOD_POISON
Definition enums.h:2838
@ STATUS_TURN_MOD_STOP
Definition enums.h:2842
@ STATUS_KEY_SLEEP
Definition enums.h:2807
@ STATUS_KEY_UNUSED
Definition enums.h:2804
@ STATUS_KEY_STONE
Definition enums.h:2813
@ STATUS_KEY_STOP
Definition enums.h:2809
@ STATUS_KEY_INACTIVE
Definition enums.h:2819
@ STATUS_TURN_MOD_FROZEN
Definition enums.h:2835
@ STATUS_KEY_SHRINK
Definition enums.h:2811
@ STATUS_KEY_DIZZY
Definition enums.h:2805
@ STATUS_KEY_POISON
Definition enums.h:2810
@ STATUS_TURN_MOD_STATIC
Definition enums.h:2834
@ STATUS_KEY_NORMAL
Definition enums.h:2802
@ STATUS_TURN_MOD_SHRINK
Definition enums.h:2840
@ STATUS_KEY_DEFAULT
Definition enums.h:2803
@ HIT_RESULT_NO_DAMAGE
Definition enums.h:1978
@ HIT_RESULT_HIT
Definition enums.h:1976
@ HIT_RESULT_NICE_NO_DAMAGE
Definition enums.h:1979
@ HIT_RESULT_NICE
Definition enums.h:1977
@ HIT_RESULT_MISS
Definition enums.h:1982
@ BTL_CAM_MIDPOINT_NORMAL
Definition enums.h:4418
@ BTL_CAM_RETURN_HOME
Definition enums.h:4411
@ BTL_CAM_CLOSER_PARTNER_APPROACH
Definition enums.h:4455
@ BTL_CAM_DEFAULT
Definition enums.h:4409
@ BTL_CAM_VIEW_ENEMIES
Definition enums.h:4410
@ BTL_CAM_PARTNER_HIT_SPIKE
Definition enums.h:4468
@ BTL_CAM_PARTNER_HIT_HAZARD
Definition enums.h:4469
@ BTL_CAM_PARTNER_MISTAKE
Definition enums.h:4458
@ SUPPRESS_EVENT_SPIKY_TOP
Definition enums.h:2934
@ SUPPRESS_EVENT_ALT_SPIKY
Definition enums.h:2939
@ SUPPRESS_EVENT_SPIKY_FRONT
Definition enums.h:2936
@ SUPPRESS_EVENT_BURN_CONTACT
Definition enums.h:2938
@ EASING_LINEAR
Definition enums.h:510
@ PARTNER_RANK_NORMAL
Definition enums.h:2051
@ PARTNER_RANK_SUPER
Definition enums.h:2052
@ PARTNER_RANK_ULTRA
Definition enums.h:2053
@ SOUND_BOMBETTE_BLAST_LV2
Definition enums.h:1335
@ SOUND_BOMBETTE_BLAST_LV3
Definition enums.h:1336
@ SOUND_NO_DAMGE
Definition enums.h:1436
@ SOUND_LRAW_BOMBETTE_FUSE
Definition enums.h:1001
@ SOUND_NONE
Definition enums.h:550
@ SOUND_BOMBETTE_BLAST_LV1
Definition enums.h:1334
@ SOUND_BOMBETTE_BODY_SLAM
Definition enums.h:1344
@ BTL_RUMBLE_HIT_HEAVY
Definition enums.h:3855
@ BTL_RUMBLE_HIT_MAX
Definition enums.h:3857
@ BTL_RUMBLE_HIT_EXTREME
Definition enums.h:3856
@ ACTOR_PARTNER
Definition enums.h:2119
@ ACTOR_SELF
Definition enums.h:2117
@ EVENT_HIT
Definition enums.h:2165
@ EVENT_33
Definition enums.h:2202
@ EVENT_BURN_HIT
Definition enums.h:2169
@ EVENT_SPIKE_CONTACT
Definition enums.h:2196
@ EVENT_IMMUNE
Definition enums.h:2179
@ EVENT_ZERO_DAMAGE
Definition enums.h:2177
@ EVENT_BLOCK
Definition enums.h:2180
@ EVENT_18
Definition enums.h:2178
@ EVENT_HIT_COMBO
Definition enums.h:2164
@ EVENT_RECOVER_FROM_KO
Definition enums.h:2203
@ EVENT_SHOCK_HIT
Definition enums.h:2198
@ EVENT_BURN_CONTACT
Definition enums.h:2197
@ CAM_BATTLE
Definition enums.h:1827
@ DAMAGE_TYPE_BLAST
Definition enums.h:2894
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2912
@ DAMAGE_TYPE_MULTIPLE_POPUPS
Definition enums.h:2913
#define ApiStatus_DONE2
Definition evt.h:119
s32 Bytecode
Definition evt.h:7
#define ApiStatus_BLOCK
Definition evt.h:117
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1730
void add_xz_vec3f(Vec3f *vector, f32 speed, f32 angleDeg)
Definition 190B20.c:871
void play_movement_dust_effects(s32 var0, f32 xPos, f32 yPos, f32 zPos, f32 angleDeg)
Definition 190B20.c:898
EvtScript EVS_Partner_Hit
EvtScript EVS_Partner_Recover
EvtScript EVS_Partner_Drop
EvtScript EVS_Partner_NoDamageHit
EvtScript EVS_Partner_BurnHit
EvtScript EVS_Partner_BombetteSpikeContact
EvtScript EVS_Partner_Celebrate
EvtScript EVS_RunAwayFail
EvtScript EVS_Partner_RunAway
void sfx_play_sound(s32 soundID)
ApiStatus StopSound(Evt *script, b32 isInitialCall)
ApiStatus ShakeCam(Evt *script, b32 isInitialCall)
#define Else
Marks the end of an if statement and the start of the else block.
Definition macros.h:296
#define Switch(LVAR)
Marks the start of a switch statement.
Definition macros.h:312
#define Ref(sym)
Address/pointer constant.
Definition macros.h:61
#define Set(VAR, INT_VALUE)
Sets the given variable to a given value casted to an integer.
Definition macros.h:366
#define CaseEq(RVAR)
Marks the start of a switch case that executes only if LVAR == RVAR. It also marks the end of any pre...
Definition macros.h:320
#define EndChildThread
Marks the end of a child thread block.
Definition macros.h:564
#define Sub(VAR, INT_VALUE)
Definition macros.h:378
#define LVarF
Definition macros.h:164
#define IfNe(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR != RVAR.
Definition macros.h:273
#define End
Signals the end of EVT script data. A script missing this will likely crash on load.
Definition macros.h:214
#define Add(VAR, INT_VALUE)
Definition macros.h:377
#define EndLoop
Marks the end of a loop.
Definition macros.h:249
#define EndCaseGroup
Marks the end of a switch case group (CaseOrEq and/or CaseAndEq), stopping fallthrough.
Definition macros.h:353
#define Goto(LABEL_ID)
Moves execution to the given label.
Definition macros.h:233
#define LVarC
Definition macros.h:161
#define ARRAY_COUNT(arr)
Definition macros.h:39
#define IfGt(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR <= RVAR.
Definition macros.h:279
#define Float(DOUBLE)
Definition macros.h:52
#define Label(LABEL_ID)
Marks this point in the script as a Goto target.
Definition macros.h:228
#define CaseOrEq(RVAR)
Marks the start of a switch case that executes only if LVAR == RVAR.
Definition macros.h:342
#define EndIf
Marks the end of an if statement or an else block.
Definition macros.h:299
#define CaseDefault
Marks the start of a switch case that executes unconditionally. It also marks the end of any previous...
Definition macros.h:338
#define LVarB
Definition macros.h:160
#define ExecWait(EVT_SOURCE)
Launches a new child thread.
Definition macros.h:476
#define BreakLoop
Breaks out of the innermost loop.
Definition macros.h:252
#define Thread
Marks the start of a thread block.
Definition macros.h:545
#define EndThread
Marks the end of a thread block.
Definition macros.h:548
#define KillThread(TID)
Kills a thread by its thread ID.
Definition macros.h:511
#define LVar2
Definition macros.h:151
#define DT
Definition macros.h:534
#define BreakSwitch
Marks the end of a switch case.
Definition macros.h:360
#define LVar1
Definition macros.h:150
#define LFlag0
Definition macros.h:168
#define LVarA
Definition macros.h:159
#define ExecGetTID(EVT_SOURCE, OUTVAR)
Identical to Exec, but the newly-launched thread ID is stored in OUTVAR.
Definition macros.h:461
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:255
#define LFlag2
Definition macros.h:170
#define PlayEffect(args...)
Definition macros.h:811
#define EndSwitch
Marks the end of a switch statement and any case.
Definition macros.h:363
#define IfEq(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR == RVAR.
Definition macros.h:270
#define Call(FUNC, ARGS...)
Calls a given C EVT API function with any number of arguments.
Definition macros.h:577
#define ChildThread
Marks the start of a child thread block.
Definition macros.h:561
#define CaseGt(RVAR)
Marks the start of a switch case that executes only if LVAR <= RVAR. It also marks the end of any pre...
Definition macros.h:329
#define Loop(TIMES)
Marks the beginning of a loop.
Definition macros.h:246
#define LVar3
Definition macros.h:152
#define LVarE
Definition macros.h:163
#define LVar0
Definition macros.h:149
#define SetConst(VAR, CONST)
Sets the given variable to a given value, skipping the evt_get_variable call.
Definition macros.h:371
#define Return
Kills the current EVT thread.
Definition macros.h:218
BattleStatus gBattleStatus
Definition battle.cpp:14