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);
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 s32 soundID;
46
47 fx_smoke_ring(0, x, y, z);
48 selectedMoveID = battleStatus->selectedMoveID;
49
50 switch (selectedMoveID) {
51 case MOVE_BOMB:
52 if (script->varTable[10] > 0) {
53 fx_explosion(1, x, y + 20, z);
54 } else {
55 fx_explosion(0, x, y + 20, z);
56 }
58 break;
59 case MOVE_POWER_BOMB:
60 if (script->varTable[10] > 0) {
61 fx_explosion(1, x, y + 20, z);
62 } else {
63 fx_explosion(0, x, y + 20, z);
64 }
66 break;
67 case MOVE_MEGA_BOMB:
68 if (script->varTable[10] > 0) {
69 fx_explosion(2, x, y + 20, z);
70 } else {
71 fx_explosion(1, x, y + 20, z);
72 }
74 break;
75 default:
76 fx_explosion(0, x, y + 20, z);
78 break;
79 }
80
81 return ApiStatus_DONE2;
82}
83
84API_CALLABLE(N(SlowDown)) {
86 Actor* partnerActor = battleStatus->partnerActor;
87 ActorState* partnerActorMovement = &partnerActor->state;
88
89 if (isInitialCall) {
90 partnerActor->state.curPos.x = partnerActor->curPos.x;
91 partnerActor->state.curPos.y = partnerActor->curPos.y;
92 partnerActor->state.curPos.z = partnerActor->curPos.z;
93 }
94
95 add_xz_vec3f(&partnerActorMovement->curPos, partnerActor->state.speed, partnerActor->state.angle);
96
97 if (partnerActor->state.speed < 4.0f) {
98 play_movement_dust_effects(0, partnerActor->state.curPos.x, partnerActor->state.curPos.y,
99 partnerActor->state.curPos.z, partnerActor->state.angle);
100 } else {
101 play_movement_dust_effects(1, partnerActor->state.curPos.x, partnerActor->state.curPos.y,
102 partnerActor->state.curPos.z, partnerActor->state.angle);
103 }
104
105 partnerActorMovement->speed /= 1.5;
106
107 partnerActor->curPos.x = partnerActorMovement->curPos.x;
108 partnerActor->curPos.y = partnerActorMovement->curPos.y;
109 partnerActor->curPos.z = partnerActorMovement->curPos.z;
110
111 if (partnerActorMovement->speed < 1.0) {
112 return ApiStatus_DONE2;
113 }
114
115 return ApiStatus_BLOCK;
116}
117
118API_CALLABLE(N(GetBombDamage)) {
119 Bytecode* args = script->ptrReadPos;
121 Actor* partnerActor = battleStatus->partnerActor;
122 s32 mashResult = evt_get_variable(script, *args++);
123 s32 damage = 0;
124
125 switch (partnerActor->actorBlueprint->level) {
127 if (mashResult <= 35) {
128 damage = 1;
129 } else if (mashResult <= 60) {
130 damage = 2;
131 } else if (mashResult <= 80) {
132 damage = 3;
133 } else if (mashResult <= 99) {
134 damage = 4;
135 } else {
136 damage = 5;
137 }
138 break;
140 if (mashResult <= 35) {
141 damage = 1;
142 } else if (mashResult <= 60) {
143 damage = 3;
144 } else if (mashResult <= 80) {
145 damage = 4;
146 } else if (mashResult <= 99) {
147 damage = 5;
148 } else {
149 damage = 6;
150 }
151 break;
153 if (mashResult <= 35) {
154 damage = 1;
155 } else if (mashResult <= 60) {
156 damage = 3;
157 } else if (mashResult <= 80) {
158 damage = 5;
159 } else if (mashResult <= 99) {
160 damage = 6;
161 } else {
162 damage = 7;
163 }
164 break;
165 }
166
167 if (mashResult > 99) {
168 script->varTable[0] = TRUE;
169 } else {
170 script->varTable[0] = FALSE;
171 }
172
173 script->varTable[15] = damage;
174
175 return ApiStatus_DONE2;
176}
177
178API_CALLABLE(N(GetPowerBombDamage)) {
179 Bytecode* args = script->ptrReadPos;
181 Actor* partnerActor = battleStatus->partnerActor;
182 s32 mashResult = evt_get_variable(script, *args++);
183 s32 damage = 0;
184
185 switch (partnerActor->actorBlueprint->level) {
187 if (mashResult <= 35) {
188 damage = 1;
189 } else if (mashResult <= 60) {
190 damage = 3;
191 } else if (mashResult <= 80) {
192 damage = 4;
193 } else if (mashResult <= 99) {
194 damage = 5;
195 } else {
196 damage = 6;
197 }
198 break;
200 if (mashResult <= 35) {
201 damage = 1;
202 } else if (mashResult <= 60) {
203 damage = 3;
204 } else if (mashResult <= 80) {
205 damage = 5;
206 } else if (mashResult <= 99) {
207 damage = 6;
208 } else {
209 damage = 7;
210 }
211 break;
212 }
213
214 if (mashResult > 99) {
215 script->varTable[0] = TRUE;
216 } else {
217 script->varTable[0] = FALSE;
218 }
219
220 script->varTable[15] = damage;
221
222 return ApiStatus_DONE2;
223}
224
225API_CALLABLE(N(GetMegaBombDamage)) {
226 Bytecode* args = script->ptrReadPos;
228 Actor* partnerActor = battleStatus->partnerActor;
229 s32 mashResult = evt_get_variable(script, *args++);
230 s32 damage = 0;
231
232 switch (partnerActor->actorBlueprint->level) {
234 if (mashResult <= 35) {
235 damage = 1;
236 } else if (mashResult <= 60) {
237 damage = 3;
238 } else if (mashResult <= 80) {
239 damage = 5;
240 } else if (mashResult <= 99) {
241 damage = 6;
242 } else {
243 damage = 7;
244 }
245 break;
246 }
247
248 if (mashResult > 99) {
249 script->varTable[0] = TRUE;
250 } else {
251 script->varTable[0] = FALSE;
252 }
253
254 script->varTable[15] = damage;
255
256 return ApiStatus_DONE2;
257}
258
259s32 N(DefaultAnims)[] = {
268};
269
270s32 N(DefenseTable)[] = {
273};
274
275s32 N(StatusTable)[] = {
278 STATUS_KEY_SLEEP, 100,
281 STATUS_KEY_DIZZY, 100,
282 STATUS_KEY_FEAR, 100,
286 STATUS_KEY_STOP, 100,
298};
299
301 {
302 .flags = 0,
303 .index = PRT_MAIN,
304 .posOffset = { 0, 0, 0 },
305 .targetOffset = { 9, 20 },
306 .opacity = 255,
307 .idleAnimations = N(DefaultAnims),
308 .defenseTable = N(DefenseTable),
309 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
310 .elementImmunityFlags = 0,
311 .projectileTargetOffset = { 0, 0 },
312 },
313};
314
315ActorBlueprint NAMESPACE = {
316 .flags = 0,
317 .type = ACTOR_TYPE_BOMBETTE,
318 .level = ACTOR_LEVEL_BOMBETTE,
319 .maxHP = 99,
320 .partCount = ARRAY_COUNT(N(ActorParts)),
321 .partsData = N(ActorParts),
322 .initScript = &N(EVS_Init),
323 .statusTable = N(StatusTable),
324 .escapeChance = 0,
325 .airLiftChance = 0,
326 .hurricaneChance = 0,
327 .spookChance = 0,
328 .upAndAwayChance = 0,
329 .spinSmashReq = 4,
330 .powerBounceChance = 80,
331 .coinReward = 0,
332 .size = { 30, 28 },
333 .healthBarOffset = { 0, 0 },
334 .statusIconOffset = { -10, 20 },
335 .statusTextOffset = { 10, 20 },
336};
337
338EvtScript N(EVS_Init) = {
343 Return
344 End
345};
346
347EvtScript N(EVS_Idle) = {
348 Return
349 End
350};
351
375 Set(LVar2, 15)
385 Set(LVarA, 0)
387 Thread
388 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.5))
389 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
390 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(3.0))
391 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
392 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.5))
393 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.8))
394 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.3))
395 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.1))
397 Thread
398 Set(LVar0, 0)
399 Loop(80)
400 Wait(1)
402 Add(LVar0, 33)
403 EndLoop
408 Add(LVar1, 200)
411 Wait(50)
414 Add(LVar1, 200)
423 Set(LVar1, 0)
438 Sub(LVar0, 60)
439 Add(LVar1, 40)
450 Set(LVarA, 0)
452 Thread
453 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.5))
454 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
455 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(3.0))
456 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
457 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.5))
458 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.8))
459 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.3))
460 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.1))
462 Thread
463 Set(LVar0, 0)
464 Loop(80)
465 Wait(1)
467 Add(LVar0, 33)
468 EndLoop
473 Add(LVar1, 200)
476 Wait(50)
479 Add(LVar1, 200)
488 Set(LVar1, 0)
500 Set(LVar2, 15)
502 Set(LVarA, LVar1)
503 Set(LVarB, LVar2)
504 Set(LVarC, LVar3)
506 Call(SetActorScale, ACTOR_SELF, Float(1.0), Float(1.0), Float(1.0))
511 Sub(LVar0, 60)
512 Add(LVar1, 40)
518 Set(LVar1, LVarA)
519 Set(LVar2, 0)
522 Wait(8)
525 Set(LVarA, 0)
527 Thread
528 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.5))
529 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
530 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(3.0))
531 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.0))
532 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.5))
533 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.8))
534 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.3))
535 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.1))
537 Thread
538 Set(LVar0, 0)
539 Loop(80)
540 Wait(1)
542 Add(LVar0, 33)
543 EndLoop
548 Add(LVar1, 200)
551 Wait(50)
554 Add(LVar1, 200)
563 Set(LVar1, 0)
580 Set(LVar3, 0)
588 Wait(10)
593 Return
594 End
595};
596
611 Return
612 End
613};
614
621 Return
622 End
623};
624
633 Return
650 Return
651 End
652};
653
664 Return
665 End
666};
667
672 Return
673 End
674};
675
685 Return
686 End
687};
688
690 Return
691 End
692};
693
700 Sub(LVar0, 60)
701 Set(LVar1, 0)
706 Wait(1)
708 Sub(LVar0, 30)
712 Wait(1)
714 Sub(LVar0, 20)
718 Wait(1)
720 Sub(LVar0, 10)
723 Wait(1)
725 Wait(8)
732 Return
733 End
734};
735
741 Sub(LVar0, 40)
742 Set(LVar1, 0)
747 Wait(1)
749 Sub(LVar0, 30)
753 Wait(1)
755 Sub(LVar0, 20)
759 Wait(1)
761 Sub(LVar0, 10)
764 Wait(1)
766 Wait(8)
773 Return
774 End
775};
776
780 Return
781 End
782};
783
784EvtScript N(animBrace) = {
786 Loop(15)
788 Wait(1)
790 Wait(1)
791 EndLoop
792 Return
793 End
794};
795
796EvtScript N(animHold) = {
797 Loop(15)
799 Wait(1)
801 Wait(1)
802 EndLoop
803 Return
804 End
805};
806
810 Call(SetupMashMeter, 1, 100, 0, 0, 0, 0)
811 Wait(10)
815 Call(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
817 Loop(60)
822 EndIf
823 Wait(1)
824 EndLoop
828 Set(LF_MashEnded, 0)
830 Loop(35)
833 Set(LF_MashEnded, 1)
835 EndIf
836 Wait(1)
837 EndLoop
840 Goto(10)
841 EndIf
842 Set(LF_MashEnded, 0)
844 Loop(30)
847 Set(LF_MashEnded, 1)
849 EndIf
850 Wait(1)
851 EndLoop
854 Goto(10)
855 EndIf
858 Loop(30)
861 Set(LF_MashEnded, 1)
863 EndIf
864 Wait(1)
865 EndLoop
868 Goto(10)
869 EndIf
870 EndIf
871 Else
872 Set(LF_MashEnded, 0)
874 Loop(35)
880 EndIf
881 EndIf
884 Set(LF_MashEnded, 1)
886 EndIf
887 EndIf
888 Wait(1)
889 EndLoop
892 Goto(10)
893 EndIf
894 Set(LF_MashEnded, 0)
896 Loop(30)
902 EndIf
903 EndIf
906 Set(LF_MashEnded, 1)
908 EndIf
909 EndIf
910 Wait(1)
911 EndLoop
914 Goto(10)
915 EndIf
918 Loop(30)
921 Set(LF_MashEnded, 1)
923 EndIf
924 Wait(1)
925 EndLoop
928 Goto(10)
929 EndIf
930 EndIf
931 EndIf
932 Label(10)
934 Wait(2)
940 Call(AddGoalPos, ACTOR_PARTNER, -10, 0, 0)
947 Thread
949 Set(LVar0, 0)
950 Loop(10)
951 Add(LVar0, -72)
953 Wait(1)
954 EndLoop
957 Call(AddGoalPos, ACTOR_PARTNER, 60, 0, 0)
960 Thread
961 Call(N(SlowDown))
963 Wait(20)
970 Return
971 EndIf
975 Set(LVarE, 1)
976 Set(LVarF, 2)
978 Set(LVarE, 2)
979 Set(LVarF, 3)
981 Set(LVarE, 3)
982 Set(LVarF, 5)
986 IfGt(LVar0, 0)
988 Call(AddGoalPos, ACTOR_PARTNER, -10, 0, 0)
992 Else
994 Call(AddGoalPos, ACTOR_PARTNER, -10, 0, 0)
999 EndIf
1000 Switch(LVar0)
1001 CaseGt(0)
1005 EndSwitch
1006 Switch(LVar0)
1015 EndSwitch
1016 Return
1017 End
1018};
1019
1024 Switch(LVar2)
1027 Switch(LVar0)
1029 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1031 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1033 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1034 EndSwitch
1037 Switch(LVar0)
1039 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1041 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1042 EndSwitch
1044 Call(SetupMashMeter, 5, 35, 60, 80, 99, 100)
1045 EndSwitch
1046 Wait(10)
1049 Switch(LVar2)
1053 Call(AddGoalPos, ACTOR_PARTNER, -20, 0, 0)
1057 Call(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
1061 Call(AddGoalPos, ACTOR_PARTNER, -40, 0, 0)
1062 EndSwitch
1065 Switch(LVar2)
1072 EndSwitch
1078 Switch(LVar2)
1080 Set(LVar0, 45 * DT)
1082 Set(LVar0, 50 * DT)
1084 Set(LVar0, 50 * DT)
1085 EndSwitch
1090 Switch(LVar2)
1092 Set(LVar0, 45 * DT)
1094 Set(LVar0, 50 * DT)
1096 Set(LVar0, 50 * DT)
1097 EndSwitch
1098 Wait(LVar0)
1100 Switch(LVar2)
1103 EndSwitch
1105 Switch(LVar2)
1107 Set(LVar0, 6 * DT + 1)
1109 Set(LVar0, 12 * DT)
1111 Set(LVar0, 20 * DT)
1112 EndSwitch
1113 Loop(LVar0)
1115 Wait(1)
1117 Wait(1)
1118 EndLoop
1124 Set(LVarA, LVar0)
1127 Thread
1129 Switch(LVar2)
1131 IfGt(LVarA, 0)
1133 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
1134 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1135 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
1136 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1137 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1138 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1139 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(2.25))
1140 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.2))
1141 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.45))
1142 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.15))
1143 Else
1145 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(0.4))
1146 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1147 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.4))
1148 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1149 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.2))
1150 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1151 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(1.2))
1152 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.64))
1153 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(0.24))
1154 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.08))
1155 EndIf
1157 IfGt(LVarA, 0)
1159 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
1160 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1161 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
1162 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1163 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1164 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1165 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(2.25))
1166 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.2))
1167 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.45))
1168 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.15))
1169 Else
1171 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(0.4))
1172 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1173 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(2.4))
1174 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1175 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.2))
1176 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.6))
1177 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(1.2))
1178 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.64))
1179 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(0.24))
1180 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.08))
1181 EndIf
1183 IfGt(LVarA, 0)
1185 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(1.0))
1186 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1187 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1188 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1189 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(8.0))
1190 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1191 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(3.0))
1192 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.6))
1193 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.6))
1194 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.2))
1195 Else
1197 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(0.5))
1198 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(2.0))
1199 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1200 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(2.0))
1201 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(4.0))
1202 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(2.0))
1203 Call(ShakeCam, CAM_BATTLE, 0, 1, Float(1.5))
1204 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.8))
1205 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(0.3))
1206 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(0.1))
1207 EndIf
1208 EndSwitch
1209 EndThread
1210 Thread
1212 Switch(LVar2)
1216 Wait(8)
1217 IfGt(LVarA, 0)
1218 PlayEffect(EFFECT_RED_IMPACT, 0, LVar0, 0, LVar2, 1, 0, 0)
1219 Else
1220 PlayEffect(EFFECT_RED_IMPACT, 1, LVar0, 0, LVar2, 1, 0, 0)
1221 EndIf
1223 Set(LVarA, 0)
1224 Wait(10)
1225 Call(N(PlayExplosionFX), 88, 33, 5)
1226 Wait(10)
1227 Call(N(PlayExplosionFX), 18, 73, 5)
1228 Wait(10)
1229 Call(N(PlayExplosionFX), 120, 19, 5)
1230 Wait(10)
1231 EndSwitch
1232 EndThread
1233 Set(LF_MashEnded, 0)
1235 Switch(LVar2)
1240 IfEq(LVar0, 6)
1242 EndIf
1245 Switch(LVar0)
1246 CaseGt(0)
1248 Set(LF_MashEnded, 1)
1251 EndSwitch
1254 Label(5)
1257 IfEq(LVar0, 6)
1258 Goto(6)
1259 EndIf
1262 Switch(LVar0)
1263 CaseGt(0)
1265 Set(LF_MashEnded, 1)
1268 EndSwitch
1269 Label(6)
1272 Goto(5)
1273 EndIf
1276 Label(10)
1279 IfEq(LVar0, 6)
1280 Goto(11)
1281 EndIf
1284 Switch(LVar0)
1285 CaseGt(0)
1287 Set(LF_MashEnded, 1)
1290 EndSwitch
1291 Label(11)
1292 Wait(5)
1295 Goto(10)
1296 EndIf
1297 EndSwitch
1298 IfGt(LF_MashEnded, 0)
1301 Else
1303 EndIf
1304 Set(LVar0, 0)
1305 Switch(LVar0)
1308 CaseOrEq(1)
1309 CaseOrEq(3)
1310 Thread
1311 Set(LVar0, 0)
1312 Loop(80)
1313 Wait(1)
1315 Add(LVar0, 33)
1316 EndLoop
1318 EndThread
1321 Sub(LVar0, 50)
1322 Add(LVar1, 200)
1325 Wait(50)
1329 Add(LVar0, 25)
1330 Add(LVar1, 200)
1339 EndSwitch
1340 Return
1341 End
1342};
1343
1347 Call(AddGoalPos, ACTOR_PARTNER, -20, 0, 0)
1349 Set(LVar1, 0)
1356 Wait(5)
1358 Wait(10)
1360 Loop(7)
1362 Wait(1)
1364 Wait(1)
1365 EndLoop
1367 Set(LVarA, 0)
1372 Thread
1374 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
1375 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1376 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
1377 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1378 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(6.0))
1379 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
1380 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(2.25))
1381 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.2))
1382 Call(ShakeCam, CAM_BATTLE, 0, 6, Float(0.45))
1383 Call(ShakeCam, CAM_BATTLE, 0, 8, Float(0.15))
1384 EndThread
1388 Goto(10)
1389 EndIf
1390 Set(LVarF, 1)
1392 Switch(LVar2)
1394 Set(LVarF, 5)
1396 Set(LVarF, 6)
1398 Set(LVarF, 7)
1399 EndSwitch
1401 Label(10)
1402 Set(LVar0, 0)
1403 Switch(LVar0)
1406 CaseOrEq(1)
1407 CaseOrEq(3)
1408 Thread
1409 Set(LVar0, 0)
1410 Loop(80)
1411 Wait(1)
1413 Add(LVar0, 33)
1414 EndLoop
1416 EndThread
1419 Sub(LVar0, 50)
1420 Add(LVar1, 200)
1423 Wait(50)
1426 Add(LVar0, 25)
1427 Add(LVar1, 200)
1436 EndSwitch
1437 Return
1438 End
1439};
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:3483
@ ACTION_COMMAND_BODY_SLAM
Definition enums.h:3484
@ BUTTON_A
Definition enums.h:2790
@ ACTOR_SOUND_WALK
Definition enums.h:2034
@ BS_FLAGS1_NICE_HIT
Definition enums.h:3575
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3574
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3570
@ BS_FLAGS1_4000
Definition enums.h:3582
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ITER_NO_MORE
Definition enums.h:2030
@ ITER_NEXT
Definition enums.h:2025
@ ACTOR_EVENT_FLAGS_NONE
Definition enums.h:3370
@ PHASE_RUN_AWAY_START
Definition enums.h:2060
@ PHASE_EXECUTE_ACTION
Definition enums.h:2058
@ PHASE_CELEBRATE
Definition enums.h:2062
@ PHASE_RUN_AWAY_FAIL
Definition enums.h:2064
@ PHASE_FIRST_STRIKE
Definition enums.h:2059
@ BTL_MENU_TYPE_STAR_POWERS
Definition enums.h:4234
@ STATUS_KEY_PARALYZE
Definition enums.h:2201
@ STATUS_TURN_MOD_DEFAULT
Definition enums.h:2227
@ STATUS_TURN_MOD_PARALYZE
Definition enums.h:2234
@ STATUS_KEY_FROZEN
Definition enums.h:2203
@ STATUS_TURN_MOD_SLEEP
Definition enums.h:2228
@ STATUS_TURN_MOD_DIZZY
Definition enums.h:2232
@ STATUS_KEY_STATIC
Definition enums.h:2207
@ STATUS_END
Definition enums.h:2196
@ STATUS_TURN_MOD_POISON
Definition enums.h:2233
@ STATUS_KEY_FEAR
Definition enums.h:2199
@ STATUS_TURN_MOD_STOP
Definition enums.h:2237
@ STATUS_KEY_SLEEP
Definition enums.h:2202
@ STATUS_KEY_STONE
Definition enums.h:2208
@ STATUS_KEY_STOP
Definition enums.h:2204
@ STATUS_KEY_INACTIVE
Definition enums.h:2214
@ STATUS_TURN_MOD_FROZEN
Definition enums.h:2230
@ STATUS_KEY_SHRINK
Definition enums.h:2206
@ STATUS_KEY_DIZZY
Definition enums.h:2200
@ STATUS_KEY_POISON
Definition enums.h:2205
@ STATUS_TURN_MOD_STATIC
Definition enums.h:2229
@ STATUS_TURN_MOD_FEAR
Definition enums.h:2231
@ STATUS_KEY_NORMAL
Definition enums.h:2197
@ STATUS_TURN_MOD_SHRINK
Definition enums.h:2235
@ STATUS_KEY_DAZE
Definition enums.h:2209
@ STATUS_KEY_DEFAULT
Definition enums.h:2198
@ HIT_RESULT_NO_DAMAGE
Definition enums.h:1952
@ HIT_RESULT_HIT
Definition enums.h:1950
@ HIT_RESULT_NICE_NO_DAMAGE
Definition enums.h:1953
@ HIT_RESULT_NICE
Definition enums.h:1951
@ HIT_RESULT_MISS
Definition enums.h:1956
@ BTL_CAM_MIDPOINT_NORMAL
Definition enums.h:4832
@ BTL_CAM_RETURN_HOME
Definition enums.h:4825
@ BTL_CAM_CLOSER_PARTNER_APPROACH
Definition enums.h:4869
@ BTL_CAM_DEFAULT
Definition enums.h:4823
@ BTL_CAM_VIEW_ENEMIES
Definition enums.h:4824
@ BTL_CAM_PARTNER_HIT_SPIKE
Definition enums.h:4882
@ BTL_CAM_PARTNER_HIT_HAZARD
Definition enums.h:4883
@ BTL_CAM_PARTNER_MISTAKE
Definition enums.h:4872
@ SUPPRESS_EVENT_SPIKY_TOP
Definition enums.h:2900
@ SUPPRESS_EVENT_ALT_SPIKY
Definition enums.h:2905
@ SUPPRESS_EVENT_SPIKY_FRONT
Definition enums.h:2902
@ SUPPRESS_EVENT_BURN_CONTACT
Definition enums.h:2904
@ EASING_LINEAR
Definition enums.h:510
@ PARTNER_RANK_NORMAL
Definition enums.h:2018
@ PARTNER_RANK_SUPER
Definition enums.h:2019
@ PARTNER_RANK_ULTRA
Definition enums.h:2020
@ SOUND_BOMBETTE_BLAST_LV2
Definition enums.h:1332
@ SOUND_BOMBETTE_BLAST_LV3
Definition enums.h:1333
@ SOUND_NO_DAMGE
Definition enums.h:1433
@ SOUND_LRAW_BOMBETTE_FUSE
Definition enums.h:998
@ SOUND_NONE
Definition enums.h:547
@ SOUND_BOMBETTE_BLAST_LV1
Definition enums.h:1331
@ SOUND_BOMBETTE_BODY_SLAM
Definition enums.h:1341
@ BTL_RUMBLE_HIT_HEAVY
Definition enums.h:4255
@ BTL_RUMBLE_HIT_MAX
Definition enums.h:4257
@ BTL_RUMBLE_HIT_EXTREME
Definition enums.h:4256
@ ACTOR_PARTNER
Definition enums.h:2086
@ ACTOR_SELF
Definition enums.h:2084
@ EVENT_HIT
Definition enums.h:2132
@ EVENT_33
Definition enums.h:2169
@ EVENT_BURN_HIT
Definition enums.h:2136
@ EVENT_SPIKE_CONTACT
Definition enums.h:2163
@ EVENT_IMMUNE
Definition enums.h:2146
@ EVENT_ZERO_DAMAGE
Definition enums.h:2144
@ EVENT_BLOCK
Definition enums.h:2147
@ EVENT_18
Definition enums.h:2145
@ EVENT_HIT_COMBO
Definition enums.h:2131
@ EVENT_RECOVER_FROM_KO
Definition enums.h:2170
@ EVENT_SHOCK_HIT
Definition enums.h:2165
@ EVENT_BURN_CONTACT
Definition enums.h:2164
@ CAM_BATTLE
Definition enums.h:1801
@ DAMAGE_TYPE_BLAST
Definition enums.h:2860
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2878
@ DAMAGE_TYPE_MULTIPLE_POPUPS
Definition enums.h:2879
#define ApiStatus_DONE2
Definition evt.h:118
s32 Bytecode
Definition evt.h:7
#define ApiStatus_BLOCK
Definition evt.h:116
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1689
void add_xz_vec3f(Vec3f *vector, f32 speed, f32 angleDeg)
Definition 190B20.c:1139
void play_movement_dust_effects(s32 var0, f32 xPos, f32 yPos, f32 zPos, f32 angleDeg)
Definition 190B20.c:1166
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)
Definition sfx.c:517
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:295
#define Switch(LVAR)
Marks the start of a switch statement.
Definition macros.h:311
#define Ref(sym)
Address/pointer constant.
Definition macros.h:60
#define Set(VAR, INT_VALUE)
Sets the given variable to a given value casted to an integer.
Definition macros.h:365
#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:319
#define EndChildThread
Marks the end of a child thread block.
Definition macros.h:563
#define Sub(VAR, INT_VALUE)
Definition macros.h:377
#define LVarF
Definition macros.h:163
#define IfNe(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR != RVAR.
Definition macros.h:272
#define End
Signals the end of EVT script data. A script missing this will likely crash on load.
Definition macros.h:213
#define Add(VAR, INT_VALUE)
Definition macros.h:376
#define EndLoop
Marks the end of a loop.
Definition macros.h:248
#define EndCaseGroup
Marks the end of a switch case group (CaseOrEq and/or CaseAndEq), stopping fallthrough.
Definition macros.h:352
#define Goto(LABEL_ID)
Moves execution to the given label.
Definition macros.h:232
#define LVarC
Definition macros.h:160
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define IfGt(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR <= RVAR.
Definition macros.h:278
#define Float(DOUBLE)
Definition macros.h:51
#define Label(LABEL_ID)
Marks this point in the script as a Goto target.
Definition macros.h:227
#define CaseOrEq(RVAR)
Marks the start of a switch case that executes only if LVAR == RVAR.
Definition macros.h:341
#define EndIf
Marks the end of an if statement or an else block.
Definition macros.h:298
#define CaseDefault
Marks the start of a switch case that executes unconditionally. It also marks the end of any previous...
Definition macros.h:337
#define LVarB
Definition macros.h:159
#define ExecWait(EVT_SOURCE)
Launches a new child thread.
Definition macros.h:475
#define BreakLoop
Breaks out of the innermost loop.
Definition macros.h:251
#define Thread
Marks the start of a thread block.
Definition macros.h:544
#define EndThread
Marks the end of a thread block.
Definition macros.h:547
#define KillThread(TID)
Kills a thread by its thread ID.
Definition macros.h:510
#define LVar2
Definition macros.h:150
#define DT
Definition macros.h:526
#define BreakSwitch
Marks the end of a switch case.
Definition macros.h:359
#define LVar1
Definition macros.h:149
#define LFlag0
Definition macros.h:167
#define LVarA
Definition macros.h:158
#define ExecGetTID(EVT_SOURCE, OUTVAR)
Identical to Exec, but the newly-launched thread ID is stored in OUTVAR.
Definition macros.h:460
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:254
#define LFlag2
Definition macros.h:169
#define PlayEffect(args...)
Definition macros.h:807
#define EndSwitch
Marks the end of a switch statement and any case.
Definition macros.h:362
#define IfEq(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR == RVAR.
Definition macros.h:269
#define Call(FUNC, ARGS...)
Calls a given C EVT API function with any number of arguments.
Definition macros.h:576
#define ChildThread
Marks the start of a child thread block.
Definition macros.h:560
#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:328
#define Loop(TIMES)
Marks the beginning of a loop.
Definition macros.h:245
#define LVar3
Definition macros.h:151
#define LVarE
Definition macros.h:162
#define LVar0
Definition macros.h:148
#define SetConst(VAR, CONST)
Sets the given variable to a given value, skipping the evt_get_variable call.
Definition macros.h:370
#define Return
Kills the current EVT thread.
Definition macros.h:217
BattleStatus gBattleStatus
Definition battle.c:11