Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
ruff_puff.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/RuffPuff.h"
4
5#define NAMESPACE A(ruff_puff)
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_TACKLE = 4,
18};
19
20s32 N(DefaultAnims)[] = {
21 STATUS_KEY_NORMAL, ANIM_RuffPuff_Idle,
22 STATUS_KEY_STONE, ANIM_RuffPuff_Still,
23 STATUS_KEY_SLEEP, ANIM_RuffPuff_Sleep,
24 STATUS_KEY_POISON, ANIM_RuffPuff_Idle,
25 STATUS_KEY_STOP, ANIM_RuffPuff_Still,
26 STATUS_KEY_STATIC, ANIM_RuffPuff_Idle,
27 STATUS_KEY_PARALYZE, ANIM_RuffPuff_Still,
28 STATUS_KEY_DIZZY, ANIM_RuffPuff_Dizzy,
30};
31
32s32 N(DefenseTable)[] = {
36};
37
38s32 N(StatusTable)[] = {
61};
62
63ActorPartBlueprint N(ActorParts)[] = {
64 {
66 .index = PRT_MAIN,
67 .posOffset = { 0, 0, 0 },
68 .targetOffset = { -2, 26 },
69 .opacity = 255,
70 .idleAnimations = N(DefaultAnims),
71 .defenseTable = N(DefenseTable),
72 .eventFlags = 0,
73 .elementImmunityFlags = 0,
74 .projectileTargetOffset = { 0, -13 },
75 },
76};
77
78ActorBlueprint NAMESPACE = {
79 .flags = ACTOR_FLAG_FLYING,
80 .type = ACTOR_TYPE_RUFF_PUFF,
81 .level = ACTOR_LEVEL_RUFF_PUFF,
82 .maxHP = 10,
83 .partCount = ARRAY_COUNT(N(ActorParts)),
84 .partsData = N(ActorParts),
85 .initScript = &N(EVS_Init),
86 .statusTable = N(StatusTable),
87 .escapeChance = 50,
88 .airLiftChance = 90,
89 .hurricaneChance = 90,
90 .spookChance = 40,
91 .upAndAwayChance = 95,
92 .spinSmashReq = 0,
93 .powerBounceChance = 80,
94 .coinReward = 2,
95 .size = { 32, 32 },
96 .healthBarOffset = { 0, 0 },
97 .statusIconOffset = { -10, 20 },
98 .statusTextOffset = { 10, 20 },
99};
100
101EvtScript N(EVS_Init) = {
102 Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn)))
103 Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle)))
104 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
105 Return
106 End
107};
108
110
111EvtScript N(EVS_Idle) = {
112 Set(LVarF, 0)
113 Loop(0)
114 Call(N(CosInterpMinMax), LVarF, LVar0, Float(0.97), Float(1.03), 15, 0, 0)
115 Call(N(CosInterpMinMax), LVarF, LVar1, Float(1.03), Float(0.97), 15, 0, 0)
116 Add(LVarF, 1)
117 Call(SetActorScale, ACTOR_SELF, LVar1, LVar0, Float(1.0))
118 IfGe(LVarF, 30)
119 Set(LVarF, 0)
120 EndIf
121 Wait(1)
122 EndLoop
123 Return
124 End
125};
126
127EvtScript N(EVS_ReturnHome) = {
128 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
129 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_RuffPuff_Run)
130 Call(SetActorSpeed, ACTOR_SELF, Float(8.0))
131 Call(SetGoalToHome, ACTOR_SELF)
132 Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_SIN_OUT)
133 Return
134 End
135};
136
137EvtScript N(EVS_HandleEvent) = {
138 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
139 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
140 Call(GetLastEvent, ACTOR_SELF, LVar0)
144 SetConst(LVar0, PRT_MAIN)
145 SetConst(LVar1, ANIM_RuffPuff_Hurt)
149 SetConst(LVar0, PRT_MAIN)
150 SetConst(LVar1, ANIM_RuffPuff_BurnHurt)
151 SetConst(LVar2, ANIM_RuffPuff_BurnStill)
154 SetConst(LVar0, PRT_MAIN)
155 SetConst(LVar1, ANIM_RuffPuff_BurnHurt)
156 SetConst(LVar2, ANIM_RuffPuff_BurnStill)
158 SetConst(LVar0, PRT_MAIN)
159 SetConst(LVar1, ANIM_RuffPuff_BurnStill)
161 Return
163 SetConst(LVar0, PRT_MAIN)
164 SetConst(LVar1, ANIM_RuffPuff_Hurt)
167 SetConst(LVar0, PRT_MAIN)
168 SetConst(LVar1, ANIM_RuffPuff_Hurt)
170 SetConst(LVar0, PRT_MAIN)
171 SetConst(LVar1, ANIM_RuffPuff_Hurt)
173 Return
175 SetConst(LVar0, PRT_MAIN)
176 SetConst(LVar1, ANIM_RuffPuff_Hurt)
178 SetConst(LVar0, PRT_MAIN)
179 SetConst(LVar1, ANIM_RuffPuff_Hurt)
181 ExecWait(N(EVS_ReturnHome))
183 SetConst(LVar0, PRT_MAIN)
184 SetConst(LVar1, ANIM_RuffPuff_Hurt)
186 SetConst(LVar0, PRT_MAIN)
187 SetConst(LVar1, ANIM_RuffPuff_Hurt)
189 Return
193 SetConst(LVar0, PRT_MAIN)
194 SetConst(LVar1, ANIM_RuffPuff_Idle)
198 SetConst(LVar0, PRT_MAIN)
199 SetConst(LVar1, ANIM_RuffPuff_Hurt)
201 Wait(10)
202 SetConst(LVar0, PRT_MAIN)
203 SetConst(LVar1, ANIM_RuffPuff_Hurt)
205 Return
207 Call(SetActorPos, ACTOR_SELF, 20, 0, 0)
208 Call(HPBarToCurrent, ACTOR_SELF)
210 ExecWait(N(EVS_ReturnHome))
211 Call(HPBarToHome, ACTOR_SELF)
213 SetConst(LVar0, PRT_MAIN)
214 SetConst(LVar1, ANIM_RuffPuff_Idle)
217 SetConst(LVar0, PRT_MAIN)
218 SetConst(LVar1, ANIM_RuffPuff_Run)
219 SetConst(LVar2, ANIM_RuffPuff_Hurt)
221 Return
223 SetConst(LVar0, PRT_MAIN)
224 SetConst(LVar1, ANIM_RuffPuff_Run)
227 SetConst(LVar0, PRT_MAIN)
228 SetConst(LVar1, ANIM_RuffPuff_Run)
230 Return
233 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
234 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
235 Return
236 End
237};
238
239EvtScript N(EVS_TakeTurn) = {
240 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
241 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
242 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
243 Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH)
244 Call(BattleCamTargetActor, ACTOR_SELF)
245 Call(SetBattleCamTargetingModes, BTL_CAM_YADJ_TARGET, BTL_CAM_XADJ_AVG, FALSE)
246 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_RuffPuff_Run)
247 Call(SetGoalToTarget, ACTOR_SELF)
248 Call(AddGoalPos, ACTOR_SELF, 50, 0, 0)
249 Call(SetActorSpeed, ACTOR_SELF, Float(6.0))
250 Call(FlyToGoal, ACTOR_SELF, 0, -10, EASING_SIN_OUT)
251 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_RuffPuff_Idle)
252 Wait(5)
253 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_RuffPuff_Grin)
254 Wait(5)
255 Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS)
259 Set(LVarA, LVar0)
260 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2))
261 Call(SetGoalToTarget, ACTOR_SELF)
262 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
263 Call(SetGoalPos, ACTOR_SELF, LVar0, 0, LVar2)
264 Thread
265 Call(SetActorRotationOffset, ACTOR_SELF, 0, 16, 0)
266 SetF(LVar0, Float(0.0))
267 Loop(15)
268 AddF(LVar0, Float(12.0))
269 Call(SetActorRotation, ACTOR_SELF, 0, 0, LVar0)
270 Wait(1)
271 EndLoop
273 Call(AddGoalPos, ACTOR_SELF, -10, 0, 0)
274 Call(JumpToGoal, ACTOR_SELF, 20, FALSE, TRUE, FALSE)
276 Call(EnemyTestTarget, ACTOR_SELF, LVarA, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0)
277 EndIf
278 Thread
279 Call(SetActorRotationOffset, ACTOR_SELF, 0, 16, 0)
280 SetF(LVar0, Float(180.0))
281 Loop(10)
282 AddF(LVar0, Float(18.0))
283 Call(SetActorRotation, ACTOR_SELF, 0, 0, LVar0)
284 Wait(1)
285 EndLoop
286 Call(SetActorRotationOffset, ACTOR_SELF, 0, 0, 0)
287 Call(SetActorRotation, ACTOR_SELF, 0, 0, 0)
289 Call(AddGoalPos, ACTOR_SELF, -30, 0, 0)
290 Call(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE)
291 Call(AddGoalPos, ACTOR_SELF, -20, 0, 0)
292 Call(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE)
293 Call(AddGoalPos, ACTOR_SELF, -10, 0, 0)
294 Call(JumpToGoal, ACTOR_SELF, 5, FALSE, TRUE, FALSE)
295 Wait(15)
296 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
297 Call(YieldTurn)
298 Call(SetActorYaw, ACTOR_SELF, 180)
299 Call(AddActorDecoration, ACTOR_SELF, PRT_MAIN, 0, ACTOR_DECORATION_SWEAT)
300 ExecWait(N(EVS_ReturnHome))
301 Call(RemoveActorDecoration, ACTOR_SELF, PRT_MAIN, 0)
302 Call(SetActorYaw, ACTOR_SELF, 0)
303 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
304 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
305 Return
308 Thread
309 Call(SetActorRotationOffset, ACTOR_SELF, 0, 13, 0)
310 SetF(LVar0, Float(0.0))
311 Loop(8)
312 AddF(LVar0, Float(22.5))
313 Call(SetActorRotation, ACTOR_SELF, 0, 0, LVar0)
314 Wait(1)
315 EndLoop
317 Call(SetGoalToTarget, ACTOR_SELF)
318 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.2))
319 Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE)
320 Wait(2)
321 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, 0, SUPPRESS_EVENT_ALL, 0, DMG_TACKLE, BS_FLAGS1_TRIGGER_EVENTS)
325 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
326 Thread
327 Call(SetActorRotationOffset, ACTOR_SELF, 0, 16, 0)
328 SetF(LVar0, Float(180.0))
329 Loop(10)
330 SubF(LVar0, Float(22.5))
331 Call(SetActorRotation, ACTOR_SELF, 0, 0, LVar0)
332 Wait(1)
333 EndLoop
334 Call(SetActorRotationOffset, ACTOR_SELF, 0, 0, 0)
335 Call(SetActorRotation, ACTOR_SELF, 0, 0, 0)
337 Call(SetGoalToTarget, ACTOR_SELF)
338 Call(AddGoalPos, ACTOR_SELF, 30, 0, 0)
339 Call(SetActorJumpGravity, ACTOR_SELF, Float(0.8))
340 Call(JumpWithBounce, ACTOR_SELF, 10, Float(5.0))
341 Wait(10)
342 Call(YieldTurn)
343 ExecWait(N(EVS_ReturnHome))
346 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
347 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
348 Return
349 End
350};
Bytecode EvtScript[]
@ 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_MYSTERY
Definition enums.h:2119
@ ELEMENT_NORMAL
Definition enums.h:2115
@ 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_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
@ SUPPRESS_EVENT_ALL
Definition enums.h:2907
@ EASING_SIN_OUT
Definition enums.h:521
@ IDLE_SCRIPT_ENABLE
Definition enums.h:6408
@ IDLE_SCRIPT_DISABLE
Definition enums.h:6407
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_SELF
Definition enums.h:2084
@ ACTOR_FLAG_FLYING
Quake Hammer can't hit.
Definition enums.h:3329
@ 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_BEGIN_FIRST_STRIKE
Definition enums.h:2173
@ EVENT_END_FIRST_STRIKE
Definition enums.h:2171
@ 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
@ DAMAGE_TYPE_TRIGGER_LUCKY
Definition enums.h:2881
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
#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 IfGe(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR >= RVAR.
Definition macros.h:284
#define Set(VAR, INT_VALUE)
Sets the given variable to a given value casted to an integer.
Definition macros.h:365
#define AddF(VAR, FLOAT_VALUE)
Definition macros.h:383
#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 LVarF
Definition macros.h:163
#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 ARRAY_COUNT(arr)
Definition macros.h:40
#define Float(DOUBLE)
Definition macros.h:51
#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 SetF(VAR, FLOAT_VALUE)
Sets the given variable to a given value, but supports Floats.
Definition macros.h:373
#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 SubF(VAR, FLOAT_VALUE)
Definition macros.h:384
#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 Loop(TIMES)
Marks the beginning of a loop.
Definition macros.h:245
#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