Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
white_clubba.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/BattleClubba.h"
4
5#define NAMESPACE A(white_clubba)
6
7extern EvtScript N(EVS_Init);
8extern EvtScript N(EVS_Idle);
9extern EvtScript N(EVS_TakeTurn);
10extern EvtScript N(EVS_HandleEvent);
11
12enum N(ActorPartIDs) {
13 PRT_MAIN = 1,
14};
15
16enum N(ActorParams) {
17 DMG_HEAVY_STRIKE = 5,
18 DMG_QUICK_STRIKE = 2,
19};
20
21s32 N(DefaultAnims)[] = {
22 STATUS_KEY_NORMAL, ANIM_BattleClubba_Frost_Anim01,
23 STATUS_KEY_STONE, ANIM_BattleClubba_Frost_Anim00,
24 STATUS_KEY_SLEEP, ANIM_BattleClubba_Frost_Anim03,
25 STATUS_KEY_POISON, ANIM_BattleClubba_Frost_Anim01,
26 STATUS_KEY_STOP, ANIM_BattleClubba_Frost_Anim00,
27 STATUS_KEY_STATIC, ANIM_BattleClubba_Frost_Anim01,
28 STATUS_KEY_PARALYZE, ANIM_BattleClubba_Frost_Anim00,
29 STATUS_KEY_DIZZY, ANIM_BattleClubba_Frost_Anim05,
30 STATUS_KEY_FEAR, ANIM_BattleClubba_Frost_Anim05,
32};
33
34s32 N(DefenseTable)[] = {
36 ELEMENT_FIRE, -2,
37 ELEMENT_ICE, 99,
39};
40
41s32 N(StatusTable)[] = {
48 STATUS_KEY_FEAR, 100,
64};
65
66ActorPartBlueprint N(ActorParts)[] = {
67 {
69 .index = PRT_MAIN,
70 .posOffset = { 0, 0, 0 },
71 .targetOffset = { -12, 32 },
72 .opacity = 255,
73 .idleAnimations = N(DefaultAnims),
74 .defenseTable = N(DefenseTable),
75 .eventFlags = ACTOR_EVENT_FLAG_ICY,
76 .elementImmunityFlags = 0,
77 .projectileTargetOffset = { 8, -3 },
78 },
79};
80
81ActorBlueprint NAMESPACE = {
82 .flags = 0,
83 .type = ACTOR_TYPE_WHITE_CLUBBA,
84 .level = ACTOR_LEVEL_WHITE_CLUBBA,
85 .maxHP = 12,
86 .partCount = ARRAY_COUNT(N(ActorParts)),
87 .partsData = N(ActorParts),
88 .initScript = &N(EVS_Init),
89 .statusTable = N(StatusTable),
90 .escapeChance = 50,
91 .airLiftChance = 50,
92 .hurricaneChance = 60,
93 .spookChance = 50,
94 .upAndAwayChance = 95,
95 .spinSmashReq = 0,
96 .powerBounceChance = 80,
97 .coinReward = 2,
98 .size = { 42, 42 },
99 .healthBarOffset = { 0, 0 },
100 .statusIconOffset = { -10, 20 },
101 .statusTextOffset = { 10, 35 },
102};
103
104EvtScript N(EVS_Init) = {
105 Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn)))
106 Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle)))
107 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
108 Return
109 End
110};
111
112EvtScript N(EVS_Idle) = {
113 Return
114 End
115};
116
117EvtScript N(EVS_HandleEvent) = {
118 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
119 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
120 Call(GetLastEvent, ACTOR_SELF, LVar0)
124 SetConst(LVar0, PRT_MAIN)
125 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
129 SetConst(LVar0, PRT_MAIN)
130 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim06)
131 SetConst(LVar2, ANIM_BattleClubba_Frost_Anim07)
134 SetConst(LVar0, PRT_MAIN)
135 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim06)
136 SetConst(LVar2, ANIM_BattleClubba_Frost_Anim07)
138 SetConst(LVar0, PRT_MAIN)
139 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim07)
141 Return
143 SetConst(LVar0, PRT_MAIN)
144 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
147 SetConst(LVar0, PRT_MAIN)
148 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
150 SetConst(LVar0, PRT_MAIN)
151 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
153 Return
155 SetConst(LVar0, PRT_MAIN)
156 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
158 SetConst(LVar0, PRT_MAIN)
159 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
161 SetConst(LVar0, PRT_MAIN)
162 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim02)
165 SetConst(LVar0, PRT_MAIN)
166 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
168 SetConst(LVar0, PRT_MAIN)
169 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
171 Return
175 SetConst(LVar0, PRT_MAIN)
176 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim01)
180 SetConst(LVar0, PRT_MAIN)
181 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
183 Wait(10)
184 SetConst(LVar0, PRT_MAIN)
185 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
187 Return
189 SetConst(LVar0, PRT_MAIN)
190 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim01)
193 SetConst(LVar0, PRT_MAIN)
194 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim02)
195 SetConst(LVar2, ANIM_BattleClubba_Frost_Anim04)
197 Return
199 SetConst(LVar0, PRT_MAIN)
200 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
203 SetConst(LVar0, PRT_MAIN)
204 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim04)
206 Return
209 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
210 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
211 Return
212 End
213};
214
215EvtScript N(EVS_TakeTurn) = {
216 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
217 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
218 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
219 Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH)
220 Call(BattleCamTargetActor, ACTOR_SELF)
221 Call(SetBattleCamTargetingModes, BTL_CAM_YADJ_TARGET, BTL_CAM_XADJ_AVG, FALSE)
222 Call(GetBattlePhase, LVar0)
224 Call(SetGoalToTarget, ACTOR_SELF)
225 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
226 Add(LVar0, 27)
227 Set(LVar1, 0)
228 Sub(LVar2, 6)
229 Call(SetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
230 Wait(15)
231 Else
232 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim02)
233 Call(SetActorSpeed, ACTOR_SELF, Float(4.0))
234 Call(SetGoalToTarget, ACTOR_SELF)
235 Call(GetStatusFlags, ACTOR_SELF, LVar0)
237 Call(AddGoalPos, ACTOR_SELF, 27, 0, -6)
238 Else
239 Call(AddGoalPos, ACTOR_SELF, 10, 0, -6)
240 EndIf
241 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
242 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim01)
243 Wait(10)
244 EndIf
245 Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS)
249 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_CLUBBA_SWING)
250 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim08)
251 Wait(20)
253 Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0)
254 Wait(20)
255 EndIf
256 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
257 Call(YieldTurn)
258 Call(SetActorYaw, ACTOR_SELF, 180)
259 Call(AddActorDecoration, ACTOR_SELF, PRT_MAIN, 0, ACTOR_DECORATION_SWEAT)
260 SetConst(LVar0, PRT_MAIN)
261 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim02)
263 Call(RemoveActorDecoration, ACTOR_SELF, PRT_MAIN, 0)
264 Call(SetActorYaw, ACTOR_SELF, 0)
265 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
266 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
267 Return
270 Call(GetBattlePhase, LVar0)
272 Goto(40)
273 EndIf
274 Call(GetActorHP, ACTOR_SELF, LVar0)
275 Call(GetEnemyMaxHP, ACTOR_SELF, LVar1)
276 MulF(LVar0, Float(100.0))
278 IfLt(LVar0, 30)
279 Goto(50)
280 EndIf
281 Call(RandInt, 100, LVar0)
282 IfLt(LVar0, 25)
283 Goto(50)
284 EndIf
285 Label(40) // heavy club attack
286 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim09)
287 Wait(15)
288 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_CLUBBA_SWING)
289 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim0A)
290 Wait(2)
291 Wait(2)
292 Call(SetGoalToTarget, ACTOR_SELF)
293 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_NO_CONTACT, 0, 0, DMG_HEAVY_STRIKE, BS_FLAGS1_TRIGGER_EVENTS)
294 Thread
295 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(1.5))
297 Goto(100)
298 Label(50) // swift club attack
299 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim09)
300 Wait(15)
301 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_CLUBBA_SWING)
302 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim0A)
303 Wait(2)
304 Wait(2)
305 Call(SetGoalToTarget, ACTOR_SELF)
306 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_NO_CONTACT, 0, 0, DMG_QUICK_STRIKE, BS_FLAGS1_INCLUDE_POWER_UPS)
307 Thread
308 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(1.5))
310 Call(GetActorHP, ACTOR_PLAYER, LVar0)
311 IfEq(LVar0, 0)
312 Goto(100)
313 EndIf
314 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim09)
315 Wait(15)
316 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_CLUBBA_SWING)
317 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim0A)
318 Wait(2)
319 Wait(2)
320 Call(SetGoalToTarget, ACTOR_SELF)
321 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_NO_CONTACT, 0, 0, DMG_QUICK_STRIKE, BS_FLAGS1_NICE_HIT)
322 Thread
323 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(1.5))
325 Call(GetActorHP, ACTOR_PLAYER, LVar0)
326 IfEq(LVar0, 0)
327 Goto(100)
328 EndIf
329 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim09)
330 Wait(15)
331 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_CLUBBA_SWING)
332 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_BattleClubba_Frost_Anim0A)
333 Wait(2)
334 Wait(2)
335 Call(SetGoalToTarget, ACTOR_SELF)
336 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_NO_CONTACT, 0, 0, DMG_QUICK_STRIKE, BS_FLAGS1_TRIGGER_EVENTS)
337 Thread
338 Call(ShakeCam, CAM_BATTLE, 0, 10, Float(1.5))
340 Label(100)
344 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
345 Wait(19)
346 Call(YieldTurn)
347 SetConst(LVar0, PRT_MAIN)
348 SetConst(LVar1, ANIM_BattleClubba_Frost_Anim02)
352 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
353 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
354 Return
355 End
356};
Bytecode EvtScript[]
@ BTL_CAM_XADJ_AVG
Definition enums.h:4900
@ BS_FLAGS1_NICE_HIT
Definition enums.h:3576
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3575
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3571
@ ELEMENT_FIRE
Definition enums.h:2116
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_ICE
Definition enums.h:2118
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ACTOR_EVENT_FLAG_ICY
No known effect, but is used.
Definition enums.h:3372
@ ACTOR_DECORATION_SWEAT
Definition enums.h:2045
@ PHASE_FIRST_STRIKE
Definition enums.h:2059
@ 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_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
@ STATUS_FLAG_SHRINK
Definition enums.h:2819
@ SOUND_CLUBBA_SWING
Definition enums.h:1484
@ 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_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_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_TRIGGER_LUCKY
Definition enums.h:2881
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2878
EvtScript EVS_Enemy_ReturnHome
EvtScript EVS_Enemy_Knockback
EvtScript EVS_Enemy_ScareAway
EvtScript EVS_Enemy_Hit
EvtScript EVS_Enemy_Death
EvtScript EVS_Enemy_SpinSmashHit
EvtScript EVS_Enemy_ShockHit
EvtScript EVS_Enemy_AirLift
EvtScript EVS_Enemy_BlowAway
EvtScript EVS_Enemy_Recover
EvtScript EVS_Enemy_BurnHit
EvtScript EVS_Enemy_NoDamageHit
ApiStatus RandInt(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 DivF(VAR, FLOAT_VALUE)
Definition macros.h:386
#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 Sub(VAR, INT_VALUE)
Definition macros.h:377
#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 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 ARRAY_COUNT(arr)
Definition macros.h:40
#define IfLt(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR < RVAR.
Definition macros.h:275
#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 LVar2
Definition macros.h:150
#define MulF(VAR, FLOAT_VALUE)
Definition macros.h:385
#define LVar1
Definition macros.h:149
#define IfNotFlag(LVAR, RVAR)
Marks the beginning of an if statement that only executes if the RVAR flag is unset on LVAR,...
Definition macros.h:292
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:254
#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 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