Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
bob_omb.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/Bobomb.h"
4
5#define NAMESPACE A(bob_omb)
6
7extern EvtScript N(EVS_Init);
8extern EvtScript N(EVS_Idle);
9extern EvtScript N(EVS_TakeTurn);
10extern EvtScript N(EVS_HandleEvent);
11extern EvtScript N(EVS_HandleEvent_Ignited);
12
13enum N(ActorPartIDs) {
14 PRT_MAIN = 1,
15};
16
17enum N(ActorVars) {
18 AVAR_HitDuringCombo = 0,
19 AVAR_Ignited = 8,
20};
21
22enum N(ActorParams) {
23 DMG_TACKLE = 1,
24 DMG_EXPLOSION = 2,
25};
26
27s32 N(DefaultAnims)[] = {
28 STATUS_KEY_NORMAL, ANIM_Bobomb_Idle,
29 STATUS_KEY_STONE, ANIM_Bobomb_Still,
30 STATUS_KEY_SLEEP, ANIM_Bobomb_Sleep,
31 STATUS_KEY_POISON, ANIM_Bobomb_Walk,
32 STATUS_KEY_STOP, ANIM_Bobomb_Still,
33 STATUS_KEY_STATIC, ANIM_Bobomb_Idle,
34 STATUS_KEY_PARALYZE, ANIM_Bobomb_Still,
35 STATUS_KEY_DIZZY, ANIM_Bobomb_Dizzy,
36 STATUS_KEY_FEAR, ANIM_Bobomb_Dizzy,
38};
39
40s32 N(IgnitedAnims)[] = {
41 STATUS_KEY_NORMAL, ANIM_Bobomb_WalkLit,
42 STATUS_KEY_STONE, ANIM_Bobomb_StillLit,
43 STATUS_KEY_SLEEP, ANIM_Bobomb_Sleep,
44 STATUS_KEY_POISON, ANIM_Bobomb_WalkLit,
45 STATUS_KEY_STOP, ANIM_Bobomb_StillLit,
46 STATUS_KEY_STATIC, ANIM_Bobomb_IdleLit,
47 STATUS_KEY_PARALYZE, ANIM_Bobomb_StillLit,
48 STATUS_KEY_DIZZY, ANIM_Bobomb_DizzyLit,
49 STATUS_KEY_FEAR, ANIM_Bobomb_DizzyLit,
51};
52
53s32 N(DefenseTable)[] = {
56};
57
58s32 N(StatusTable)[] = {
81};
82
83s32 N(IgnitedStatusTable)[] = {
106};
107
108ActorPartBlueprint N(ActorParts)[] = {
109 {
111 .index = PRT_MAIN,
112 .posOffset = { 0, 0, 0 },
113 .targetOffset = { 0, 24 },
114 .opacity = 255,
115 .idleAnimations = N(DefaultAnims),
116 .defenseTable = N(DefenseTable),
118 .elementImmunityFlags = 0,
119 .projectileTargetOffset = { 0, -9 },
120 },
121};
122
123ActorBlueprint NAMESPACE = {
124 .flags = 0,
125 .type = ACTOR_TYPE_BOB_OMB,
126 .level = ACTOR_LEVEL_BOB_OMB,
127 .maxHP = 3,
128 .partCount = ARRAY_COUNT(N(ActorParts)),
129 .partsData = N(ActorParts),
130 .initScript = &N(EVS_Init),
131 .statusTable = N(StatusTable),
132 .escapeChance = 70,
133 .airLiftChance = 90,
134 .hurricaneChance = 90,
135 .spookChance = 90,
136 .upAndAwayChance = 95,
137 .spinSmashReq = 0,
138 .powerBounceChance = 100,
139 .coinReward = 1,
140 .size = { 34, 35 },
141 .healthBarOffset = { 0, 0 },
142 .statusIconOffset = { -10, 20 },
143 .statusTextOffset = { 10, 20 },
144};
145
146EvtScript N(EVS_Init) = {
147 Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn)))
148 Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle)))
149 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
150 Call(SetActorVar, ACTOR_SELF, AVAR_Ignited, FALSE)
151 Call(SetActorVar, ACTOR_SELF, AVAR_HitDuringCombo, FALSE)
152 Return
153 End
154};
155
156EvtScript N(EVS_Idle) = {
157 Return
158 End
159};
160
161EvtScript N(EVS_Ignite) = {
162 Call(GetStatusFlags, ACTOR_SELF, LVar0)
164 Return
165 EndIf
166 Label(0)
167 Call(SetActorVar, ACTOR_SELF, AVAR_Ignited, TRUE)
168 Call(SetIdleAnimations, ACTOR_SELF, PRT_MAIN, Ref(N(IgnitedAnims)))
169 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent_Ignited)))
170 Call(SetPartEventBits, ACTOR_SELF, PRT_MAIN, ACTOR_EVENT_FLAG_EXPLODE_ON_CONTACT, TRUE)
171 Call(SetStatusTable, ACTOR_SELF, Ref(N(IgnitedStatusTable)))
172 Call(PlayLoopingSoundAtActor, ACTOR_SELF, 0, SOUND_LOOP_BOBOMB_FUSE)
173 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_WalkLit)
174 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
175 Call(SetActorJumpGravity, ACTOR_SELF, Float(2.0))
176 Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2)
177 Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
178 Call(EnableActorPaletteEffects, ACTOR_SELF, PRT_MAIN, TRUE)
179 Call(SetActorPaletteSwapParams, ACTOR_SELF, PRT_MAIN, SPR_PAL_Bobomb, SPR_PAL_Bobomb_Burst, 0, 10, 0, 10, 0, 0)
180 Call(SetActorPaletteEffect, ACTOR_SELF, PRT_MAIN, ACTOR_PAL_ADJUST_BLEND_PALETTES_VARYING_INTERVALS)
181 Wait(3)
182 Call(StopLoopingSoundAtActor, ACTOR_SELF, 0)
183 Return
184 End
185};
186
187EvtScript N(EVS_Defuse) = {
188 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
189 Call(SetActorVar, ACTOR_SELF, AVAR_Ignited, FALSE)
190 Call(SetIdleAnimations, ACTOR_SELF, PRT_MAIN, Ref(N(DefaultAnims)))
191 Call(SetPartEventBits, ACTOR_SELF, PRT_MAIN, ACTOR_EVENT_FLAG_EXPLODE_ON_CONTACT, FALSE)
192 Call(SetStatusTable, ACTOR_SELF, Ref(N(StatusTable)))
193 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
194 Add(LVar2, 2)
195 PlayEffect(EFFECT_LANDING_DUST, 3, LVar0, LVar1, LVar2, 0, 0)
196 Call(StopLoopingSoundAtActor, ACTOR_SELF, 0)
197 Call(EnableActorPaletteEffects, ACTOR_SELF, PRT_MAIN, FALSE)
198 Return
199 End
200};
201
202EvtScript N(EVS_Cleanup) = {
203 Call(GetActorVar, ACTOR_SELF, AVAR_Ignited, LVar0)
204 IfEq(LVar0, TRUE)
205 Call(StopLoopingSoundAtActor, ACTOR_SELF, 0)
206 Call(EnableActorPaletteEffects, ACTOR_SELF, PRT_MAIN, FALSE)
207 EndIf
208 Return
209 End
210};
211
212EvtScript N(EVS_Explode) = {
213 ExecWait(N(EVS_Cleanup))
214 Call(StartRumble, BTL_RUMBLE_PLAYER_MAX)
215 Thread
216 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.75))
217 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
218 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(4.5))
219 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(3.0))
221 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
222 Add(LVar2, 2)
223 PlayEffect(EFFECT_SMOKE_RING, 0, LVar0, LVar1, LVar2, 0)
224 Add(LVar1, 20)
225 Add(LVar2, 2)
226 PlayEffect(EFFECT_EXPLOSION, 0, LVar0, LVar1, LVar2, 0)
227 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_BOMB_BLAST)
228 Return
229 End
230};
231
232EvtScript N(EVS_HandleEvent) = {
233 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
234 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
235 Call(GetLastEvent, ACTOR_SELF, LVar0)
238 Call(GetLastDamage, ACTOR_SELF, LVar0)
239 IfNe(LVar0, 0)
240 Call(SetActorVar, ACTOR_SELF, AVAR_HitDuringCombo, TRUE)
241 EndIf
242 SetConst(LVar0, PRT_MAIN)
243 SetConst(LVar1, ANIM_Bobomb_Hurt)
246 Call(GetLastElement, LVarE)
248 SetConst(LVar0, PRT_MAIN)
249 SetConst(LVar1, ANIM_Bobomb_BurnHurt)
250 SetConst(LVar2, ANIM_Bobomb_BurnStill)
252 ExecWait(N(EVS_Explode))
253 SetConst(LVar0, PRT_MAIN)
254 SetConst(LVar1, ANIM_Bobomb_BurnStill)
257 Return
258 Else
259 SetConst(LVar0, PRT_MAIN)
260 SetConst(LVar1, ANIM_Bobomb_Hurt)
262 Call(GetLastDamage, ACTOR_SELF, LVar0)
263 IfNe(LVar0, 0)
264 ExecWait(N(EVS_Ignite))
265 EndIf
266 EndIf
269 SetConst(LVar0, PRT_MAIN)
270 SetConst(LVar1, ANIM_Bobomb_BurnHurt)
271 SetConst(LVar2, ANIM_Bobomb_BurnStill)
273 ExecWait(N(EVS_Explode))
274 SetConst(LVar0, PRT_MAIN)
275 SetConst(LVar1, ANIM_Bobomb_BurnStill)
278 Return
281 SetConst(LVar0, PRT_MAIN)
282 SetConst(LVar1, ANIM_Bobomb_Hurt)
284 Call(GetLastDamage, ACTOR_SELF, LVar0)
285 IfNe(LVar0, 0)
286 ExecWait(N(EVS_Ignite))
287 EndIf
289 SetConst(LVar0, PRT_MAIN)
290 SetConst(LVar1, ANIM_Bobomb_Hurt)
292 ExecWait(N(EVS_Cleanup))
293 SetConst(LVar0, PRT_MAIN)
294 SetConst(LVar1, ANIM_Bobomb_Hurt)
296 Return
299 SetConst(LVar0, PRT_MAIN)
300 SetConst(LVar1, ANIM_Bobomb_BurnHurt)
303 Return
305 SetConst(LVar0, PRT_MAIN)
306 SetConst(LVar1, ANIM_Bobomb_Idle)
310 SetConst(LVar0, PRT_MAIN)
311 SetConst(LVar1, ANIM_Bobomb_Idle)
313 Call(GetActorVar, ACTOR_SELF, AVAR_HitDuringCombo, LVar0)
314 IfEq(LVar0, TRUE)
315 ExecWait(N(EVS_Ignite))
316 EndIf
319 Call(GetLastElement, LVarE)
321 SetConst(LVar0, PRT_MAIN)
322 SetConst(LVar1, ANIM_Bobomb_BurnHurt)
323 SetConst(LVar2, ANIM_Bobomb_BurnStill)
325 ExecWait(N(EVS_Explode))
326 SetConst(LVar0, PRT_MAIN)
327 SetConst(LVar1, ANIM_Bobomb_BurnStill)
330 Return
331 Else
332 SetConst(LVar0, PRT_MAIN)
333 SetConst(LVar1, ANIM_Bobomb_Hurt)
335 Wait(10)
336 ExecWait(N(EVS_Cleanup))
337 SetConst(LVar0, PRT_MAIN)
338 SetConst(LVar1, ANIM_Bobomb_Hurt)
340 EndIf
341 Return
343 SetConst(LVar0, PRT_MAIN)
344 SetConst(LVar1, ANIM_Bobomb_BurnHurt)
345 SetConst(LVar2, ANIM_Bobomb_BurnStill)
347 ExecWait(N(EVS_Explode))
348 SetConst(LVar0, PRT_MAIN)
349 SetConst(LVar1, ANIM_Bobomb_BurnStill)
352 Return
354 SetConst(LVar0, PRT_MAIN)
355 SetConst(LVar1, ANIM_Bobomb_Idle)
358 SetConst(LVar0, PRT_MAIN)
359 SetConst(LVar1, ANIM_Bobomb_Run)
360 SetConst(LVar2, ANIM_Bobomb_Hurt)
362 Return
364 SetConst(LVar0, PRT_MAIN)
365 SetConst(LVar1, ANIM_Bobomb_Dizzy)
368 SetConst(LVar0, PRT_MAIN)
369 SetConst(LVar1, ANIM_Bobomb_Dizzy)
371 Return
374 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
375 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
376 Return
377 End
378};
379
380EvtScript N(EVS_HandleEvent_Ignited) = {
381 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
382 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
383 Call(GetLastEvent, ACTOR_SELF, LVar0)
386 Call(GetLastElement, LVarE)
388 ExecWait(N(EVS_Defuse))
389 SetConst(LVar0, PRT_MAIN)
390 SetConst(LVar1, ANIM_Bobomb_Hurt)
392 Else
393 SetConst(LVar0, PRT_MAIN)
394 SetConst(LVar1, ANIM_Bobomb_HurtLit)
396 EndIf
398 Call(GetLastElement, LVarE)
401 ExecWait(N(EVS_Defuse))
402 SetConst(LVar0, PRT_MAIN)
403 SetConst(LVar1, ANIM_Bobomb_Hurt)
406 SetConst(LVar0, PRT_MAIN)
407 SetConst(LVar1, ANIM_Bobomb_BurnHurt)
409 ExecWait(N(EVS_Explode))
410 SetConst(LVar0, PRT_MAIN)
411 SetConst(LVar1, ANIM_Bobomb_BurnStill)
414 Return
416 SetConst(LVar0, PRT_MAIN)
417 SetConst(LVar1, ANIM_Bobomb_HurtLit)
419 Call(GetLastDamage, ACTOR_SELF, LVar0)
420 IfGt(LVar0, 0)
421 ExecWait(N(EVS_Explode))
422 SetConst(LVar0, PRT_MAIN)
423 SetConst(LVar1, ANIM_Bobomb_BurnStill)
426 Return
427 EndIf
434 ExecWait(N(EVS_Explode))
435 SetConst(LVar0, PRT_MAIN)
436 SetConst(LVar1, ANIM_Bobomb_BurnStill)
439 Return
444 SetConst(LVar0, PRT_MAIN)
445 SetConst(LVar1, ANIM_Bobomb_IdleLit)
449 Call(GetLastElement, LVarE)
451 ExecWait(N(EVS_Defuse))
452 SetConst(LVar0, PRT_MAIN)
453 SetConst(LVar1, ANIM_Bobomb_Hurt)
454 Else
455 ExecWait(N(EVS_Explode))
456 SetConst(LVar0, PRT_MAIN)
457 SetConst(LVar1, ANIM_Bobomb_BurnStill)
459 EndIf
461 Return
464 ExecWait(N(EVS_Explode))
465 SetConst(LVar0, PRT_MAIN)
466 SetConst(LVar1, ANIM_Bobomb_BurnStill)
469 Return
472 SetConst(LVar0, PRT_MAIN)
473 SetConst(LVar1, ANIM_Bobomb_IdleLit)
476 ExecWait(N(EVS_Cleanup))
477 SetConst(LVar0, PRT_MAIN)
478 SetConst(LVar1, ANIM_Bobomb_Run)
479 SetConst(LVar2, ANIM_Bobomb_Hurt)
481 Return
483 SetConst(LVar0, PRT_MAIN)
484 SetConst(LVar1, ANIM_Bobomb_DizzyLit)
487 Call(GetDamageSource, LVar0)
489 ExecWait(N(EVS_Defuse))
490 SetConst(LVar0, PRT_MAIN)
491 SetConst(LVar1, ANIM_Bobomb_Dizzy)
492 Else
494 Wait(100)
495 ExecWait(N(EVS_Explode))
497 SetConst(LVar0, PRT_MAIN)
498 SetConst(LVar1, ANIM_Bobomb_DizzyLit)
499 EndIf
501 Return
503 ExecWait(N(EVS_Defuse))
506 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
507 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
508 Return
509 End
510};
511
512EvtScript N(EVS_Attack_Tackle) = {
513 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
514 Call(SetGoalToTarget, ACTOR_SELF)
515 Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH)
516 Call(BattleCamTargetActor, ACTOR_SELF)
517 Call(SetBattleCamTargetingModes, BTL_CAM_YADJ_TARGET, BTL_CAM_XADJ_AVG, FALSE)
518 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
519 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Run)
520 Call(SetGoalToTarget, ACTOR_SELF)
521 Call(AddGoalPos, ACTOR_SELF, 50, 0, 0)
522 Call(SetActorSpeed, ACTOR_SELF, Float(6.0))
523 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
524 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Idle)
525 Call(SetActorDispOffset, ACTOR_SELF, 0, -1, 0)
526 Wait(1)
527 Call(SetActorDispOffset, ACTOR_SELF, 0, -2, 0)
528 Wait(5)
529 Call(SetActorDispOffset, ACTOR_SELF, 0, 0, 0)
530 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Run)
531 Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS)
535 Set(LVarA, LVar0)
536 Call(SetGoalToTarget, ACTOR_SELF)
537 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
538 Sub(LVar0, 5)
539 Set(LVar1, 0)
540 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.1))
541 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
542 Call(JumpToGoal, ACTOR_SELF, 20, FALSE, TRUE, FALSE)
543 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Dizzy)
544 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
545 Sub(LVar0, 20)
546 Call(SetActorJumpGravity, ACTOR_SELF, Float(3.0))
547 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
548 Call(JumpToGoal, ACTOR_SELF, 6, FALSE, TRUE, FALSE)
549 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
550 Sub(LVar0, 15)
551 Call(SetActorJumpGravity, ACTOR_SELF, Float(3.0))
552 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
553 Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
554 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
555 Wait(8)
557 Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0)
558 EndIf
559 Wait(5)
560 Call(YieldTurn)
561 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
562 Call(SetActorYaw, ACTOR_SELF, 180)
563 Call(AddActorDecoration, ACTOR_SELF, PRT_MAIN, 0, ACTOR_DECORATION_SWEAT)
564 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Run)
565 Call(SetGoalToHome, ACTOR_SELF)
566 Call(SetActorSpeed, ACTOR_SELF, Float(8.0))
567 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
568 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Idle)
569 Call(RemoveActorDecoration, ACTOR_SELF, PRT_MAIN, 0)
570 Call(SetActorYaw, ACTOR_SELF, 0)
571 Return
574 Call(SetGoalToTarget, ACTOR_SELF)
575 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.1))
576 Call(JumpToGoal, ACTOR_SELF, 20, FALSE, TRUE, FALSE)
577 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Buildup)
578 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
579 Call(GetActorSize, ACTOR_SELF, LVar3, LVar4)
580 PlayEffect(EFFECT_FLASHING_BOX_SHOCKWAVE, FX_SHOCK_OVERLAY_SHOCK_HIT, LVar0, LVar1, LVar2, LVar4, LVar3, 0)
581 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_HIT_SHOCK)
582 Wait(20)
583 ExecWait(N(EVS_Explode))
584 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_BLAST, 0, 0, DMG_EXPLOSION, BS_FLAGS1_TRIGGER_EVENTS)
585 Return
587 Call(SetGoalToTarget, ACTOR_SELF)
588 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.1))
589 Call(JumpToGoal, ACTOR_SELF, 20, FALSE, TRUE, FALSE)
590 Wait(2)
591 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, 0, 0, DMG_TACKLE, BS_FLAGS1_TRIGGER_EVENTS)
592 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Idle)
596 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
597 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
598 Add(LVar0, 40)
599 Set(LVar1, 0)
600 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.8))
601 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
602 Call(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE)
603 Add(LVar0, 30)
604 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
605 Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE)
606 Add(LVar0, 20)
607 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
608 Call(JumpToGoal, ACTOR_SELF, 6, FALSE, TRUE, FALSE)
609 Wait(4)
610 Call(YieldTurn)
611 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Run)
612 Call(SetGoalToHome, ACTOR_SELF)
613 Call(SetActorSpeed, ACTOR_SELF, Float(8.0))
614 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
615 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Idle)
618 Return
619 End
620};
621
622EvtScript N(EVS_Attack_Blast) = {
623 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
624 Call(SetGoalToTarget, ACTOR_SELF)
625 Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH)
626 Call(BattleCamTargetActor, ACTOR_SELF)
627 Call(SetBattleCamTargetingModes, BTL_CAM_YADJ_TARGET, BTL_CAM_XADJ_AVG, FALSE)
628 Call(PlayLoopingSoundAtActor, ACTOR_SELF, 0, SOUND_LOOP_BOBOMB_FUSE)
629 Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS)
633 Set(LVarA, LVar0)
634 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
635 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_RunLit)
636 Call(SetGoalToTarget, ACTOR_SELF)
637 Call(AddGoalPos, ACTOR_SELF, 80, 0, 0)
638 Call(SetActorSpeed, ACTOR_SELF, Float(5.0))
639 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
640 Call(SetActorRotationOffset, ACTOR_SELF, -1, 14, 0)
641 Call(SetActorRotation, ACTOR_SELF, 0, 0, 90)
642 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_RunLit)
643 Call(SetActorJumpGravity, ACTOR_SELF, Float(3.0))
644 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
645 Sub(LVar0, 30)
646 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
647 Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
648 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
649 ExecWait(N(EVS_Explode))
650 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_BurnStill)
651 Wait(10)
653 Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0)
654 EndIf
655 Wait(10)
656 Call(SetActorRotationOffset, ACTOR_SELF, 0, 0, 0)
657 Call(SetActorRotation, ACTOR_SELF, 0, 0, 0)
658 SetConst(LVar0, PRT_MAIN)
659 SetConst(LVar1, -1)
662 Return
665 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
666 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_RunLit)
667 Call(SetGoalToTarget, ACTOR_SELF)
668 Call(AddGoalPos, ACTOR_SELF, 10, 0, 0)
669 Call(SetActorSpeed, ACTOR_SELF, Float(5.0))
670 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
671 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_Buildup)
672 Wait(15)
673 Set(LVarA, 1)
674 ExecWait(N(EVS_Explode))
675 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_Bobomb_BurnStill)
676 Wait(2)
677 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_BLAST | DAMAGE_TYPE_NO_CONTACT, 0, 0, DMG_EXPLOSION, BS_FLAGS1_TRIGGER_EVENTS)
678 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
679 Wait(15)
680 SetConst(LVar0, PRT_MAIN)
681 SetConst(LVar1, ANIM_Bobomb_BurnStill)
684 Return
685 End
686};
687
688EvtScript N(EVS_TakeTurn) = {
689 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
690 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
691 Call(GetActorVar, ACTOR_SELF, AVAR_Ignited, LVar0)
693 ExecWait(N(EVS_Attack_Tackle))
694 Else
695 ExecWait(N(EVS_Attack_Blast))
696 Return
697 EndIf
698 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
699 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
700 Return
701 End
702};
Bytecode EvtScript[]
@ FX_SHOCK_OVERLAY_SHOCK_HIT
Definition effects.h:1263
#define STATUS_FLAGS_IMMOBILIZED
Definition enums.h:2834
@ BTL_CAM_XADJ_AVG
Definition enums.h:4900
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3575
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3571
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ACTOR_PAL_ADJUST_BLEND_PALETTES_VARYING_INTERVALS
Definition enums.h:2253
@ ACTOR_EVENT_FLAG_EXPLODE_ON_CONTACT
Attacks that contact will trigger an explosion.
Definition enums.h:3383
@ ACTOR_EVENT_FLAG_EXPLODE_ON_IGNITION
Blast and fire attacks trigger an explosion.
Definition enums.h:3377
@ ACTOR_DECORATION_SWEAT
Definition enums.h:2045
@ 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_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_DEFAULT
Definition enums.h:2198
@ HIT_RESULT_HIT_STATIC
Definition enums.h:1957
@ HIT_RESULT_NO_DAMAGE
Definition enums.h:1952
@ HIT_RESULT_HIT
Definition enums.h:1950
@ HIT_RESULT_LUCKY
Definition enums.h:1955
@ HIT_RESULT_MISS
Definition enums.h:1956
@ BTL_CAM_DEFAULT
Definition enums.h:4824
@ BTL_CAM_ENEMY_APPROACH
Definition enums.h:4885
@ IDLE_SCRIPT_ENABLE
Definition enums.h:6408
@ IDLE_SCRIPT_DISABLE
Definition enums.h:6407
@ DMG_SRC_HURRICANE
Definition enums.h:2008
@ SOUND_LOOP_BOBOMB_FUSE
Definition enums.h:1582
@ SOUND_BOMB_BLAST
Definition enums.h:1415
@ SOUND_HIT_SHOCK
Definition enums.h:1195
@ BTL_RUMBLE_PLAYER_MAX
Definition enums.h:4263
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_SELF
Definition enums.h:2084
@ BTL_CAM_YADJ_TARGET
Definition enums.h:4905
@ EVENT_HIT
Definition enums.h:2132
@ EVENT_UP_AND_AWAY
Definition enums.h:2176
@ EVENT_SCARE_AWAY
Definition enums.h:2174
@ EVENT_BURN_HIT
Definition enums.h:2136
@ EVENT_IMMUNE
Definition enums.h:2146
@ EVENT_BURN_DEATH
Definition enums.h:2157
@ EVENT_ZERO_DAMAGE
Definition enums.h:2144
@ EVENT_SHOCK_DEATH
Definition enums.h:2159
@ EVENT_SPIN_SMASH_HIT
Definition enums.h:2133
@ EVENT_EXPLODE_TRIGGER
Definition enums.h:2155
@ EVENT_SPIN_SMASH_DEATH
Definition enums.h:2154
@ EVENT_HIT_COMBO
Definition enums.h:2131
@ EVENT_AIR_LIFT_FAILED
Definition enums.h:2152
@ EVENT_BEGIN_AIR_LIFT
Definition enums.h:2175
@ EVENT_DEATH
Definition enums.h:2153
@ EVENT_SHOCK_HIT
Definition enums.h:2165
@ EVENT_RECOVER_STATUS
Definition enums.h:2167
@ EVENT_BLOW_AWAY
Definition enums.h:2143
@ ACTOR_PART_FLAG_PRIMARY_TARGET
Definition enums.h:3362
@ CAM_BATTLE
Definition enums.h:1801
@ DAMAGE_TYPE_SHOCK
Definition enums.h:2856
@ DAMAGE_TYPE_BLAST
Definition enums.h:2860
@ DAMAGE_TYPE_TRIGGER_LUCKY
Definition enums.h:2881
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2878
@ DAMAGE_TYPE_WATER
Definition enums.h:2853
EvtScript EVS_Enemy_ScareAway
EvtScript EVS_Enemy_Hit
EvtScript EVS_Enemy_Death
EvtScript EVS_Enemy_SpinSmashHit
EvtScript EVS_Enemy_AirLift
EvtScript EVS_Enemy_BlowAway
EvtScript EVS_Enemy_Recover
EvtScript EVS_Enemy_BurnHit
EvtScript EVS_Enemy_NoDamageHit
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 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 IfFalse(b)
Definition macros.h:646
#define EndCaseGroup
Marks the end of a switch case group (CaseOrEq and/or CaseAndEq), stopping fallthrough.
Definition macros.h:352
#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 ExecWait(EVT_SOURCE)
Launches a new child thread.
Definition macros.h:475
#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 CaseFlag(RVAR)
Marks the start of a switch case that executes only if the RVAR flag is set on LVAR,...
Definition macros.h:349
#define IfFlag(LVAR, RVAR)
Marks the beginning of an if statement that only executes if the RVAR flag is set on LVAR,...
Definition macros.h:288
#define LVar2
Definition macros.h:150
#define LVar1
Definition macros.h:149
#define LVarA
Definition macros.h:158
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:254
#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 LVar4
Definition macros.h:152
#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
#define EXEC_DEATH_NO_SPINNING
Definition battle.h:263