Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
albino_dino.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/AlbinoDino.h"
4
5#define NAMESPACE A(albino_dino)
6
7extern EvtScript N(EVS_Init);
8extern EvtScript N(EVS_Idle);
9extern EvtScript N(EVS_TakeTurn);
10extern EvtScript N(EVS_HandleEvent);
11
12API_CALLABLE(N(func_80218240_649050)) { // unused
13 Bytecode* args = script->ptrReadPos;
14 EffectInstance* effect = (EffectInstance*)evt_get_variable(script, *args++);
15 f32 var1 = evt_get_variable(script, *args++);
16 f32 var2 = evt_get_variable(script, *args++);
17 f32 var3 = evt_get_variable(script, *args++);
18
19 // function is never called, so the effect type can't be inferred
20 ((f32*)effect->data.any)[14] = var1;
21 ((f32*)effect->data.any)[15] = var2;
22 ((f32*)effect->data.any)[16] = var3;
23
24 return ApiStatus_DONE2;
25}
26
27enum N(ActorPartIDs) {
28 PRT_MAIN = 1,
29};
30
31enum N(ActorParams) {
32 DMG_TACKLE = 4,
33};
34
35s32 N(DefaultAnims)[] = {
36 STATUS_KEY_NORMAL, ANIM_AlbinoDino_Idle,
37 STATUS_KEY_STONE, ANIM_AlbinoDino_Still,
38 STATUS_KEY_SLEEP, ANIM_AlbinoDino_Idle,
39 STATUS_KEY_POISON, ANIM_AlbinoDino_Idle,
40 STATUS_KEY_STOP, ANIM_AlbinoDino_Still,
41 STATUS_KEY_STATIC, ANIM_AlbinoDino_Idle,
42 STATUS_KEY_PARALYZE, ANIM_AlbinoDino_Still,
43 STATUS_KEY_DIZZY, ANIM_AlbinoDino_Still,
44 STATUS_KEY_FEAR, ANIM_AlbinoDino_Still,
46};
47
48s32 N(DefenseTable)[] = {
50 ELEMENT_FIRE, 99,
52};
53
54s32 N(StatusTable)[] = {
77};
78
79ActorPartBlueprint N(ActorParts)[] = {
80 {
82 .index = PRT_MAIN,
83 .posOffset = { 0, 0, 0 },
84 .targetOffset = { -9, 46 },
85 .opacity = 255,
86 .idleAnimations = N(DefaultAnims),
87 .defenseTable = N(DefenseTable),
88 .eventFlags = 0,
89 .elementImmunityFlags = 0,
90 .projectileTargetOffset = { -6, -17 },
91 },
92};
93
94ActorBlueprint NAMESPACE = {
95 .flags = 0,
96 .type = ACTOR_TYPE_ALBINO_DINO,
97 .level = ACTOR_LEVEL_ALBINO_DINO,
98 .maxHP = 8,
99 .partCount = ARRAY_COUNT(N(ActorParts)),
100 .partsData = N(ActorParts),
101 .initScript = &N(EVS_Init),
102 .statusTable = N(StatusTable),
103 .escapeChance = 40,
104 .airLiftChance = 15,
105 .hurricaneChance = 10,
106 .spookChance = 25,
107 .upAndAwayChance = 95,
108 .spinSmashReq = 0,
109 .powerBounceChance = 100,
110 .coinReward = 1,
111 .size = { 64, 56 },
112 .healthBarOffset = { 0, 0 },
113 .statusIconOffset = { -22, 24 },
114 .statusTextOffset = { 11, 40 },
115};
116
117EvtScript N(EVS_Init) = {
118 Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn)))
119 Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle)))
120 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
121 Return
122 End
123};
124
125EvtScript N(EVS_Idle) = {
126 Return
127 End
128};
129
130EvtScript N(EVS_ReturnHome) = {
131 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_AlbinoDino_Run)
132 Call(SetGoalToHome, ACTOR_SELF)
133 Call(SetActorSpeed, ACTOR_SELF, Float(8.0))
134 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
135 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_AlbinoDino_Idle)
136 Return
137 End
138};
139
140EvtScript N(EVS_HandleEvent) = {
141 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
142 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
143 Call(GetLastEvent, ACTOR_SELF, LVar0)
147 SetConst(LVar0, PRT_MAIN)
148 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
152 SetConst(LVar0, PRT_MAIN)
153 SetConst(LVar1, ANIM_AlbinoDino_BurntHurt)
154 SetConst(LVar2, ANIM_AlbinoDino_BurntStill)
157 SetConst(LVar0, PRT_MAIN)
158 SetConst(LVar1, ANIM_AlbinoDino_BurntHurt)
159 SetConst(LVar2, ANIM_AlbinoDino_BurntStill)
161 SetConst(LVar0, PRT_MAIN)
162 SetConst(LVar1, ANIM_AlbinoDino_BurntStill)
164 Return
166 SetConst(LVar0, PRT_MAIN)
167 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
170 SetConst(LVar0, PRT_MAIN)
171 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
173 SetConst(LVar0, PRT_MAIN)
174 SetConst(LVar1, ANIM_AlbinoDino_HurtStill)
176 Return
178 SetConst(LVar0, PRT_MAIN)
179 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
181 SetConst(LVar0, PRT_MAIN)
182 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
184 ExecWait(N(EVS_ReturnHome))
186 SetConst(LVar0, PRT_MAIN)
187 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
189 SetConst(LVar0, PRT_MAIN)
190 SetConst(LVar1, ANIM_AlbinoDino_HurtStill)
192 Return
196 SetConst(LVar0, PRT_MAIN)
197 SetConst(LVar1, ANIM_AlbinoDino_Idle)
201 SetConst(LVar0, PRT_MAIN)
202 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
204 SetConst(LVar0, PRT_MAIN)
205 SetConst(LVar1, ANIM_AlbinoDino_HurtStill)
207 Return
209 SetConst(LVar0, PRT_MAIN)
210 SetConst(LVar1, ANIM_AlbinoDino_Idle)
213 SetConst(LVar0, PRT_MAIN)
214 SetConst(LVar1, ANIM_AlbinoDino_Run)
215 SetConst(LVar2, ANIM_AlbinoDino_Hurt)
217 Return
219 SetConst(LVar0, PRT_MAIN)
220 SetConst(LVar1, ANIM_AlbinoDino_Run)
223 SetConst(LVar0, PRT_MAIN)
224 SetConst(LVar1, ANIM_AlbinoDino_Hurt)
226 Return
229 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
230 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
231 Return
232 End
233};
234
235EvtScript N(EVS_AddWalkQuakeFX) = {
236 Set(LVarA, 0)
237 Label(0)
238 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
239 Call(GetActorYaw, ACTOR_SELF, LVar3)
240 IfEq(LVar3, 0)
241 Add(LVar0, 20)
242 Else
243 Add(LVar0, -20)
244 EndIf
245 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 25, 8, 45, 20, 0)
246 IfGt(LVarA, 3)
247 Call(ShakeCam, CAM_BATTLE, 0, 2, Float(0.2))
248 Set(LVarA, 0)
249 EndIf
250 Add(LVarA, 1)
251 Wait(2)
252 Goto(0)
253 Return
254 End
255};
256
257EvtScript N(EVS_TakeTurn) = {
258 Call(UseIdleAnimation, ACTOR_SELF, FALSE)
259 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_DISABLE)
260 Call(SetTargetActor, ACTOR_SELF, ACTOR_PLAYER)
261 Call(UseBattleCamPreset, BTL_CAM_ENEMY_APPROACH)
262 Call(BattleCamTargetActor, ACTOR_SELF)
263 Call(SetBattleCamTargetingModes, BTL_CAM_YADJ_TARGET, BTL_CAM_XADJ_AVG, FALSE)
264 ExecGetTID(N(EVS_AddWalkQuakeFX), LVar9)
265 Thread
266 Loop(3)
267 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ALBINO_DINO_STEP_A)
268 Wait(4)
269 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ALBINO_DINO_STEP_B)
270 Wait(4)
271 EndLoop
273 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_AlbinoDino_Run)
274 Wait(20)
275 Call(EnemyTestTarget, ACTOR_SELF, LVarF, 0, 0, 1, BS_FLAGS1_INCLUDE_POWER_UPS)
279 Thread
280 Call(SetGoalToTarget, ACTOR_SELF)
281 Call(AddGoalPos, ACTOR_SELF, -100, 0, 0)
282 Call(SetActorSpeed, ACTOR_SELF, Float(12.0))
283 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
286 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
287 Wait(30)
289 Call(SetGoalToTarget, ACTOR_SELF)
290 Call(EnemyTestTarget, ACTOR_SELF, LVar0, DAMAGE_TYPE_TRIGGER_LUCKY, 0, 0, 0)
291 EndIf
292 Wait(40)
293 Call(YieldTurn)
294 Call(AddActorDecoration, ACTOR_SELF, PRT_MAIN, 0, ACTOR_DECORATION_SWEAT)
295 Call(SetActorYaw, ACTOR_SELF, 180)
296 ExecWait(N(EVS_ReturnHome))
297 Call(SetActorYaw, ACTOR_SELF, 0)
298 Call(RemoveActorDecoration, ACTOR_SELF, PRT_MAIN, 0)
299 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
300 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
301 Return
304 Call(SetGoalToTarget, ACTOR_SELF)
305 Call(GetStatusFlags, ACTOR_SELF, LVarA)
307 Call(AddGoalPos, ACTOR_SELF, 12, 0, 0)
308 Else
309 Call(AddGoalPos, ACTOR_SELF, 30, 0, 0)
310 EndIf
311 Call(SetActorSpeed, ACTOR_SELF, Float(12.0))
312 Call(RunToGoal, ACTOR_SELF, 0, FALSE)
313 Thread
314 Call(ShakeCam, CAM_BATTLE, 0, 4, Float(1.5))
317 Wait(2)
318 Call(SetGoalToTarget, ACTOR_SELF)
319 // invalid status field has 24% chance, but no status and doesn't have STATUS_FLAG_80000000 set
320 Call(EnemyDamageTarget, ACTOR_SELF, LVarF, 0, 0, 24, DMG_TACKLE, BS_FLAGS1_TRIGGER_EVENTS)
324 Call(UseBattleCamPreset, BTL_CAM_DEFAULT)
325 Call(GetActorPos, ACTOR_SELF, LVar0, LVar1, LVar2)
326 Add(LVar0, 40)
327 Call(SetActorJumpGravity, ACTOR_SELF, Float(1.0))
328 Call(SetGoalPos, ACTOR_SELF, LVar0, LVar1, LVar2)
329 Call(JumpToGoal, ACTOR_SELF, 15, FALSE, TRUE, FALSE)
330 Call(PlaySoundAtActor, ACTOR_SELF, SOUND_ALBINO_DINO_STEP_B)
331 Call(SetAnimation, ACTOR_SELF, PRT_MAIN, ANIM_AlbinoDino_Idle)
332 Call(ShakeCam, CAM_BATTLE, 0, 3, Float(1.0))
333 Wait(10)
334 Call(YieldTurn)
335 ExecWait(N(EVS_ReturnHome))
338 Call(EnableIdleScript, ACTOR_SELF, IDLE_SCRIPT_ENABLE)
339 Call(UseIdleAnimation, ACTOR_SELF, TRUE)
340 Return
341 End
342};
Bytecode EvtScript[]
s32 * any
Definition effects.h:2463
EffectData data
Definition effects.h:2605
@ 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_FIRE
Definition enums.h:2116
@ ELEMENT_END
Definition enums.h:2114
@ 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
@ IDLE_SCRIPT_ENABLE
Definition enums.h:6408
@ IDLE_SCRIPT_DISABLE
Definition enums.h:6407
@ STATUS_FLAG_SHRINK
Definition enums.h:2819
@ SOUND_ALBINO_DINO_STEP_A
Definition enums.h:1098
@ SOUND_ALBINO_DINO_STEP_B
Definition enums.h:1087
@ 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
#define ApiStatus_DONE2
Definition evt.h:118
s32 Bytecode
Definition evt.h:7
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1690
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 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 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 Goto(LABEL_ID)
Moves execution to the given label.
Definition macros.h:232
#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 KillThread(TID)
Kills a thread by its thread ID.
Definition macros.h:510
#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 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 LVar9
Definition macros.h:157
#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 Loop(TIMES)
Marks the beginning of a loop.
Definition macros.h:245
#define LVar3
Definition macros.h:151
#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