Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
pyro_guy.inc.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/PyroGuy.h"
6
7#define NAMESPACE A(pyro_guy)
8
9extern EvtScript N(EVS_Init);
10extern EvtScript N(EVS_Idle);
11extern EvtScript N(EVS_TakeTurn);
12extern EvtScript N(EVS_HandleEvent);
13
14enum N(ActorPartIDs) {
15 PRT_MAIN = 1,
16};
17
18enum N(ActorParams) {
19 DMG_TACKLE = 4,
20};
21
22s32 N(DefaultAnims)[] = {
23 STATUS_KEY_NORMAL, ANIM_PyroGuy_Anim01,
24 STATUS_KEY_STONE, ANIM_PyroGuy_Anim00,
25 STATUS_KEY_SLEEP, ANIM_PyroGuy_Anim07,
26 STATUS_KEY_POISON, ANIM_PyroGuy_Anim01,
27 STATUS_KEY_STOP, ANIM_PyroGuy_Anim00,
28 STATUS_KEY_STATIC, ANIM_PyroGuy_Anim01,
29 STATUS_KEY_PARALYZE, ANIM_PyroGuy_Anim00,
30 STATUS_KEY_DIZZY, ANIM_PyroGuy_Anim08,
31 STATUS_KEY_FEAR, ANIM_PyroGuy_Anim08,
33};
34
35s32 N(DefenseTable)[] = {
37 ELEMENT_WATER, -2,
38 ELEMENT_ICE, -2,
39 ELEMENT_FIRE, 99,
42 ELEMENT_BLAST, -1,
44};
45
46s32 N(StatusTable)[] = {
53 STATUS_KEY_FEAR, 100,
69};
70
71ActorPartBlueprint N(ActorParts)[] = {
72 {
74 .index = PRT_MAIN,
75 .posOffset = { 0, 0, 0 },
76 .targetOffset = { 0, 24 },
77 .opacity = 255,
78 .idleAnimations = N(DefaultAnims),
79 .defenseTable = N(DefenseTable),
80 .eventFlags = ACTOR_EVENT_FLAG_FIREY,
81 .elementImmunityFlags = 0,
82 .projectileTargetOffset = { -1, -10 },
83 },
84};
85
86ActorBlueprint NAMESPACE = {
87 .flags = 0,
88 .type = ACTOR_TYPE_PYRO_GUY,
89 .level = ACTOR_LEVEL_PYRO_GUY,
90 .maxHP = 7,
91 .partCount = ARRAY_COUNT(N(ActorParts)),
92 .partsData = N(ActorParts),
93 .initScript = &N(EVS_Init),
94 .statusTable = N(StatusTable),
95 .escapeChance = 60,
96 .airLiftChance = 85,
97 .hurricaneChance = 80,
98 .spookChance = 60,
99 .upAndAwayChance = 95,
100 .spinSmashReq = 0,
101 .powerBounceChance = 85,
102 .coinReward = 1,
103 .size = { 28, 36 },
104 .healthBarOffset = { 0, 0 },
105 .statusIconOffset = { -10, 20 },
106 .statusTextOffset = { 10, 20 },
107};
108
109EvtScript N(EVS_Init) = {
110 Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn)))
111 Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle)))
112 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
113 Return
114 End
115};
116
118
119EvtScript N(EVS_Idle) = {
120 Label(0)
121 Call(GetStatusFlags, ACTOR_SELF, LVar0)
123 Call(SetTargetOffset, ACTOR_SELF, PRT_MAIN, -4, 14)
124 Call(SetProjectileTargetOffset, ACTOR_SELF, PRT_MAIN, 0, 0)
125 Call(N(SetAbsoluteStatusOffsets), -10, 13, 10, 13)
126 Else
127 Call(SetTargetOffset, ACTOR_SELF, PRT_MAIN, 0, 24)
128 Call(SetProjectileTargetOffset, ACTOR_SELF, PRT_MAIN, -1, -10)
129 Call(N(SetAbsoluteStatusOffsets), -10, 20, 10, 20)
130 EndIf
131 Wait(1)
132 Goto(0)
133 Return
134 End
135};
136
137EvtScript N(EVS_ReturnHome) = {
139 Call(SetActorSounds, ACTOR_SELF, ACTOR_SOUND_WALK_INCREMENT, 10, 0)
140 SetConst(LVar0, PRT_MAIN)
141 SetConst(LVar1, ANIM_PyroGuy_Anim04)
142 SetConst(LVar2, ANIM_PyroGuy_Anim01)
144 Return
145 End
146};
147
148EvtScript N(EVS_HandleEvent) = {
149 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
150 Call(GetLastEvent, ACTOR_SELF, LVar0)
154 SetConst(LVar0, PRT_MAIN)
155 SetConst(LVar1, ANIM_PyroGuy_Anim06)
159 SetConst(LVar0, PRT_MAIN)
160 SetConst(LVar1, ANIM_PyroGuy_Anim06)
161 SetConst(LVar2, -1)
164 SetConst(LVar0, PRT_MAIN)
165 SetConst(LVar1, ANIM_PyroGuy_Anim06)
166 SetConst(LVar2, -1)
168 SetConst(LVar0, PRT_MAIN)
169 SetConst(LVar1, ANIM_PyroGuy_Anim06)
171 Return
173 SetConst(LVar0, PRT_MAIN)
174 SetConst(LVar1, ANIM_PyroGuy_Anim06)
177 SetConst(LVar0, PRT_MAIN)
178 SetConst(LVar1, ANIM_PyroGuy_Anim06)
180 SetConst(LVar0, PRT_MAIN)
181 SetConst(LVar1, ANIM_PyroGuy_Anim06)
183 Return
185 SetConst(LVar0, PRT_MAIN)
186 SetConst(LVar1, ANIM_PyroGuy_Anim06)
188 SetConst(LVar0, PRT_MAIN)
189 SetConst(LVar1, ANIM_PyroGuy_Anim06)
191 Call(SetActorSpeed, ACTOR_SELF, Float(4.0))
192 ExecWait(N(EVS_ReturnHome))
194 SetConst(LVar0, PRT_MAIN)
195 SetConst(LVar1, ANIM_PyroGuy_Anim06)
197 SetConst(LVar0, PRT_MAIN)
198 SetConst(LVar1, ANIM_PyroGuy_Anim06)
200 Return
204 SetConst(LVar0, PRT_MAIN)
205 SetConst(LVar1, ANIM_PyroGuy_Anim01)
209 SetConst(LVar0, PRT_MAIN)
210 SetConst(LVar1, ANIM_PyroGuy_Anim06)
212 SetConst(LVar0, PRT_MAIN)
213 SetConst(LVar1, ANIM_PyroGuy_Anim06)
215 Return
217 SetConst(LVar0, PRT_MAIN)
218 SetConst(LVar1, ANIM_PyroGuy_Anim01)
221 SetConst(LVar0, PRT_MAIN)
222 SetConst(LVar1, ANIM_PyroGuy_Anim03)
223 SetConst(LVar2, ANIM_PyroGuy_Anim09)
225 Return
227 SetConst(LVar0, PRT_MAIN)
228 SetConst(LVar1, ANIM_PyroGuy_Anim03)
231 SetConst(LVar0, PRT_MAIN)
232 SetConst(LVar1, ANIM_PyroGuy_Anim03)
234 Return
236 Return
239 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
240 Return
241 End
242};
243
244EvtScript N(EVS_TakeTurn) = {
245 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
246 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
247 Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH)
248 Call(BattleCamTargetActor, ACTOR_SELF)
249 Call(SetBattleCamTargetingModes, BTL_CAM_YADJ_TARGET, BTL_CAM_XADJ_AVG, FALSE)
250 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_PyroGuy_Anim03)
251 Call(SetActorSpeed, ACTOR_SELF, Float(4.0))
252 Call(SetGoalToTarget, ACTOR_SELF)
253 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
254 Add(LVar0, 70)
255 Set(LVar1, 0)
256 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
257 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
259 Call(SetActorSounds, ACTOR_SELF, ACTOR_SOUND_WALK_INCREMENT, 10, 0)
260 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_PyroGuy_Anim04)
261 Call(SetActorSpeed, ACTOR_SELF, Float(6.0))
262 Call(SetGoalToTarget, ACTOR_SELF)
263 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
264 Add(LVar0, 20)
265 Set(LVar1, 0)
266 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
267 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
268 Call(EnemyTestTarget, ACTOR_SELF, LVar0, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS)
272 Set(LVarA, LVar0)
273 Call(SetActorSounds, ACTOR_SELF, ACTOR_SOUND_JUMP, SOUND_ACTOR_HOP, 0)
274 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_PyroGuy_Anim05)
275 Call(SetGoalToTarget, ACTOR_SELF)
276 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
277 Call(SetActorSpeed, ACTOR_SELF, Float(6.0))
278 Call(SetActorJumpGravity, ACTOR_SELF, Float(0.5))
279 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
280 Sub(LVar0, 30)
281 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
282 Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE)
284 Call(EnemyTestTarget, ACTOR_SELF, LVarA, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0)
285 EndIf
286 Call(ResetAllActorSounds, ACTOR_SELF)
287 Sub(LVar0, 20)
288 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
289 Call(JumpToGoal, ACTOR_SELF, 8, FALSE, TRUE, FALSE)
290 Wait(15)
291 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
292 Call(YieldTurn)
293 Call(SetActorYaw, ACTOR_SELF, 180)
294 Call(AddActorDecoration, ACTOR_SELF, PRT_MAIN, 0, ACTOR_DECORATION_SWEAT)
295 Call(SetActorSpeed, ACTOR_SELF, Float(4.0))
296 ExecWait(N(EVS_ReturnHome))
297 Call(RemoveActorDecoration, ACTOR_SELF, PRT_MAIN, 0)
298 Call(SetActorYaw, ACTOR_SELF, 0)
299 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
300 Return
303 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ACTOR_HOP)
304 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_PyroGuy_Anim05)
305 Call(SetGoalToTarget, ACTOR_SELF)
306 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
307 Add(LVar0, 10)
308 Set(LVar1, 0)
309 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
310 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
311 Wait(2)
312 Call(SetGoalToTarget, ACTOR_SELF)
313 Call(EnemyDamageTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_FIRE, 0, 0, DMG_TACKLE, BS_FLAGS1_TRIGGER_EVENTS)
317 Call(ResetAllActorSounds, ACTOR_SELF)
318 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
319 Call(GetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
320 Add(LVar0, 30)
321 Set(LVar1, 0)
322 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.8))
323 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
324 Call(JumpToGoal, ACTOR_SELF, 10, FALSE, TRUE, FALSE)
325 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_PyroGuy_Anim01)
326 Wait(8)
327 Call(YieldTurn)
328 Call(SetActorSpeed, ACTOR_SELF, Float(6.0))
329 ExecWait(N(EVS_ReturnHome))
332 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
333 Return
334 End
335};
Bytecode EvtScript[]
@ BTL_CAM_XADJ_AVG
Definition enums.h:4900
@ ACTOR_SOUND_WALK
Definition enums.h:2034
@ ACTOR_SOUND_WALK_INCREMENT
Definition enums.h:2038
@ ACTOR_SOUND_JUMP
Definition enums.h:2036
@ 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_BLAST
Definition enums.h:2124
@ ELEMENT_ICE
Definition enums.h:2118
@ ELEMENT_SMASH
Definition enums.h:2121
@ ELEMENT_SHOCK
Definition enums.h:2125
@ ELEMENT_WATER
Definition enums.h:2117
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ACTOR_EVENT_FLAG_FIREY
Player takes burn damage upon contact.
Definition enums.h:3371
@ 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
@ STATUS_FLAG_SLEEP
Definition enums.h:2812
@ SOUND_ACTOR_HOP
Definition enums.h:1073
@ SOUND_ACTOR_STEP_A
Definition enums.h:1474
@ SOUND_ACTOR_STEP_B
Definition enums.h:1250
@ 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_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_FIRE
Definition enums.h:2852
@ DAMAGE_TYPE_TRIGGER_LUCKY
Definition enums.h:2881
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
#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 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 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 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 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