Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
ember.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/LavaBubble.h"
4
5#define NAMESPACE A(ember)
6
7extern s32 N(DefaultAnims)[];
8extern s32 N(ProjectileAnims)[];
9extern EvtScript N(EVS_Init);
10extern EvtScript N(EVS_Idle);
11extern EvtScript N(EVS_TakeTurn);
13
14enum N(ActorPartIDs) {
15 PRT_MAIN = 1,
16 PRT_FIRE_1 = 2,
17 PRT_FIRE_2 = 3,
18 PRT_FIRE_3 = 4,
19 PRT_FIRE_4 = 5,
20};
21
22enum N(ActorVars) {
27};
28
29enum N(ActorParams) {
30 DMG_TACKLE = 4,
31 DMG_AIR_SWEEP = 4,
32 DMG_SHOOT = 3,
33};
34
35s32 N(DefenseTable)[] = {
37 ELEMENT_WATER, -2,
38 ELEMENT_ICE, -2,
39 ELEMENT_FIRE, 99,
41};
42
43s32 N(StatusTable)[] = {
66};
67
69 {
71 .index = PRT_MAIN,
72 .posOffset = { 0, 0, 0 },
73 .targetOffset = { -2, 25 },
74 .opacity = 255,
75 .idleAnimations = N(DefaultAnims),
76 .defenseTable = N(DefenseTable),
77 .eventFlags = ACTOR_EVENT_FLAG_FIREY,
78 .elementImmunityFlags = 0,
79 .projectileTargetOffset = { -3, -10 },
80 },
81 {
83 .index = PRT_FIRE_1,
84 .posOffset = { 0, 0, 0 },
85 .targetOffset = { 0, 24 },
86 .opacity = 255,
87 .idleAnimations = N(ProjectileAnims),
88 .defenseTable = N(DefenseTable),
89 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
90 .elementImmunityFlags = 0,
91 .projectileTargetOffset = { -1, -10 },
92 },
93 {
95 .index = PRT_FIRE_2,
96 .posOffset = { 0, 0, 0 },
97 .targetOffset = { 0, 24 },
98 .opacity = 255,
99 .idleAnimations = N(ProjectileAnims),
100 .defenseTable = N(DefenseTable),
101 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
102 .elementImmunityFlags = 0,
103 .projectileTargetOffset = { -1, -10 },
104 },
105 {
107 .index = PRT_FIRE_3,
108 .posOffset = { 0, 0, 0 },
109 .targetOffset = { 0, 24 },
110 .opacity = 255,
111 .idleAnimations = N(ProjectileAnims),
112 .defenseTable = N(DefenseTable),
113 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
114 .elementImmunityFlags = 0,
115 .projectileTargetOffset = { -1, -10 },
116 },
117 {
119 .index = PRT_FIRE_4,
120 .posOffset = { 0, 0, 0 },
121 .targetOffset = { 0, 24 },
122 .opacity = 255,
123 .idleAnimations = N(ProjectileAnims),
124 .defenseTable = N(DefenseTable),
125 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
126 .elementImmunityFlags = 0,
127 .projectileTargetOffset = { -1, -10 },
128 },
129};
130
131ActorBlueprint NAMESPACE = {
132 .flags = ACTOR_FLAG_FLYING,
133 .type = ACTOR_TYPE_EMBER,
134 .level = ACTOR_LEVEL_EMBER,
135 .maxHP = 10,
136 .partCount = ARRAY_COUNT(N(ActorParts)),
137 .partsData = N(ActorParts),
138 .initScript = &N(EVS_Init),
139 .statusTable = N(StatusTable),
140 .escapeChance = 60,
141 .airLiftChance = 80,
142 .hurricaneChance = 75,
143 .spookChance = 50,
144 .upAndAwayChance = 95,
145 .spinSmashReq = 0,
146 .powerBounceChance = 80,
147 .coinReward = 2,
148 .size = { 33, 32 },
149 .healthBarOffset = { 0, 0 },
150 .statusIconOffset = { -10, 20 },
151 .statusTextOffset = { 10, 20 },
152};
153
154s32 N(DefaultAnims)[] = {
165};
166
167s32 N(ProjectileAnims)[] = {
170};
171
172EvtScript N(EVS_Init) = {
178 CaseEq(0)
180 CaseEq(1)
190 Add(LVar1, 5)
193 Return
194 End
195};
196
197EvtScript N(EVS_Idle) = {
198 Label(0)
199 Call(MakeLerp, 0, 10, 25, EASING_COS_IN_OUT)
200 Label(1)
203 Add(LVar0, LVar3)
205 IfEq(LVar1, 1)
206 Label(11)
207 Wait(1)
210 Goto(11)
211 EndIf
213 IfEq(LVar0, TRUE)
214 Goto(11)
215 EndIf
216 Goto(1)
217 EndIf
218 Call(MakeLerp, 10, 0, 25, EASING_COS_IN_OUT)
219 Label(2)
222 Add(LVar0, LVar3)
224 IfEq(LVar1, 1)
225 Label(22)
226 Wait(1)
229 Goto(22)
230 EndIf
232 IfEq(LVar0, TRUE)
233 Goto(22)
234 EndIf
235 Goto(2)
236 EndIf
237 Goto(0)
238 Return
239 End
240};
241
242#include "common/PlayLavaBubbleFlightSound.inc.c"
243
248 Thread
253 Return
254 End
255};
256
260 Label(0)
263 Mod(LVar5, 4)
265 CaseEq(0)
266 Set(LFlag1, TRUE)
267 CaseEq(1)
268 Set(LFlag2, TRUE)
269 CaseEq(2)
270 Set(LFlag3, TRUE)
271 CaseEq(3)
272 Set(LFlag4, TRUE)
276 Goto(0)
277 EndIf
279 Set(LVarA, 0)
280 Return
281 EndIf
283 Set(LVarA, 1)
284 Return
285 EndIf
287 Set(LVarA, 2)
288 Return
289 EndIf
291 Set(LVarA, 3)
292 Return
293 EndIf
294 Set(LVarA, -1)
295 Return
296 End
297};
298
300
302 ACTOR_BY_POS(NAMESPACE, N(SummonPos), 0),
303};
304
307 IfEq(LVar0, 0)
308 Return
309 EndIf
311 IfLe(LVar0, 0)
312 Return
313 EndIf
315 IfFlag(LVar0, DAMAGE_TYPE_MULTIPLE_POPUPS) // interesting use-case
316 Return
317 EndIf
319 IfGe(LVar0, 2)
320 Return
321 EndIf
324 CaseOrEq(0)
325 CaseOrEq(1)
326 CaseOrEq(2)
327 CaseOrEq(3)
342 CaseEq(0)
344 CaseEq(1)
352 Return
353 End
354};
355
382 Return
395 Return
413 Return
429 Return
431 Call(SetActorPos, ACTOR_SELF, 20, 0, 0)
445 Return
454 Return
456 // nothing
461 Return
462 End
463};
464
475 Add(LVar0, 30)
476 Set(LVar1, 5)
479 Thread
488 Set(LVarA, LVar0)
492 Sub(LVar0, 20)
493 Set(LVar1, 0)
494 Add(LVar2, 1)
500 EndIf
501 Sub(LVar0, 30)
504 Sub(LVar0, 20)
507 Sub(LVar0, 10)
510 Wait(14)
519 Return
525 Add(LVar2, 1)
529 Wait(2)
538 Wait(5)
544 Return
545 End
546};
547
548// (in) LVar3 posX
549// (in) LVar4 posY
550// (in) LVar5 posZ
553 Loop(4)
554 Thread
557 Call(SetPartScale, ACTOR_SELF, LVar6, Float(0.2), Float(0.2), Float(0.2))
558 Else
559 Call(SetPartScale, ACTOR_SELF, LVar6, Float(0.5), Float(0.5), Float(0.5))
560 EndIf
569 Wait(3)
570 Add(LVar6, 1)
571 EndLoop
572 Return
573 End
574};
575
576// Shoot fireballs at a target and wait before yielding.
577// (in) LVar3 posX
578// (in) LVar4 posY
579// (in) LVar5 posZ
583 DivF(LVar0, Float(8.0))
584 Add(LVar0, 1)
585 Wait(LVar0)
586 Return
587 End
588};
589
599 IfEq(LVarA, TRUE)
600 Add(LVar0, 100)
601 Set(LVar1, 5)
602 Else
603 Add(LVar0, 30)
604 Set(LVar1, 50)
605 EndIf
609 Thread
614 Wait(10)
616 Wait(30)
621 Set(LVarA, LVar0)
624 Sub(LVar0, 5)
625 Add(LVar1, 4)
626 Add(LVar2, 2)
629 Sub(LVar3, 100)
630 Add(LVar5, 2)
634 EndIf
635 Wait(20)
640 Wait(20)
645 Return
650 Sub(LVar0, 5)
651 Add(LVar1, 4)
652 Add(LVar2, 2)
655 Sub(LVar4, 6)
656 Add(LVar5, 2)
658 Wait(2)
660 Wait(20)
670 Return
671 End
672};
673
683 Call(AddGoalPos, ACTOR_SELF, 30, 0, 0)
685 Thread
693 Set(LVarA, LVar0)
694 Wait(10)
707 Sub(LVar0, 30)
708 Add(LVar2, 2)
715 EndIf
716 Wait(30)
725 Return
728 Wait(5)
738 Set(LVarA, LVar0)
739 Set(LVarB, LVar1)
740 Set(LVarC, LVar2)
744 Add(LVar2, 2)
748 Wait(2)
756 Wait(20)
762 Return
763 End
764};
765
771 CaseEq(1)
773 CaseEq(0)
776 Return
777 EndIf
780 CaseEq(1)
784 Else
785 Call(RandInt, 1000, LVar0)
786 IfLe(LVar0, 300)
788 Else
790 EndIf
791 EndIf
792 CaseEq(0)
796 Else
797 Call(RandInt, 1000, LVar0)
798 IfLe(LVar0, 300)
800 Else
802 EndIf
803 EndIf
805 Return
806 End
807};
BSS s32 PopupMenu_SelectedIndex
Bytecode EvtScript[]
#define STATUS_FLAGS_IMMOBILIZED
Definition enums.h:2834
@ BTL_CAM_XADJ_AVG
Definition enums.h:4899
@ ACTOR_SOUND_JUMP
Definition enums.h:2036
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3574
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3570
@ ELEMENT_FIRE
Definition enums.h:2116
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_ICE
Definition enums.h:2118
@ ELEMENT_WATER
Definition enums.h:2117
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ITER_NO_MORE
Definition enums.h:2030
@ ITER_NEXT
Definition enums.h:2025
@ ACTOR_EVENT_FLAGS_NONE
Definition enums.h:3370
@ ACTOR_EVENT_FLAG_FIREY
Player takes burn damage upon contact.
Definition enums.h:3371
@ 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:4823
@ BTL_CAM_ENEMY_APPROACH
Definition enums.h:4884
@ TARGET_FLAG_PRIMARY_ONLY
Definition enums.h:1863
@ TARGET_FLAG_2
Definition enums.h:1850
@ SOUND_ID_TRIGGER_CHANGE_SOUND
Definition enums.h:532
@ EASING_SIN_OUT
Definition enums.h:521
@ EASING_COS_IN_OUT
Definition enums.h:520
@ EASING_QUADRATIC_OUT
Definition enums.h:514
@ EASING_LINEAR
Definition enums.h:510
@ IDLE_SCRIPT_RESTART
Definition enums.h:6408
@ IDLE_SCRIPT_ENABLE
Definition enums.h:6407
@ IDLE_SCRIPT_DISABLE
Definition enums.h:6406
@ STATUS_FLAG_SHRINK
Definition enums.h:2819
@ STATUS_FLAG_KO
Definition enums.h:2823
@ SOUND_EMBER_JUMP
Definition enums.h:1041
@ SOUND_NONE
Definition enums.h:547
@ SOUND_ACTOR_HOP
Definition enums.h:1073
@ SOUND_EMBER_FLY
Definition enums.h:1163
@ SOUND_EMBER_SPIT
Definition enums.h:1042
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_PARTNER
Definition enums.h:2086
@ 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:4904
@ 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_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_BURN_TAUNT
Definition enums.h:2149
@ EVENT_BLOW_AWAY
Definition enums.h:2143
@ ACTOR_PART_FLAG_PRIMARY_TARGET
Definition enums.h:3362
@ ACTOR_PART_FLAG_USE_ABSOLUTE_POSITION
Definition enums.h:3361
@ ACTOR_PART_FLAG_NO_TARGET
Cannot be targeted.
Definition enums.h:3360
@ ACTOR_PART_FLAG_INVISIBLE
Definition enums.h:3350
@ DAMAGE_TYPE_FIRE
Definition enums.h:2852
@ DAMAGE_TYPE_TRIGGER_LUCKY
Definition enums.h:2881
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2878
@ DAMAGE_TYPE_MULTIPLE_POPUPS
Definition enums.h:2879
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 UpdateLerp(Evt *script, b32 isInitialCall)
ApiStatus RandInt(Evt *script, b32 isInitialCall)
ApiStatus MakeLerp(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 LVar6
Definition macros.h:154
#define Ref(sym)
Address/pointer constant.
Definition macros.h:60
#define DivF(VAR, FLOAT_VALUE)
Definition macros.h:386
#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 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 LFlag4
Definition macros.h:171
#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 Mod(VAR, INT_VALUE)
Definition macros.h:380
#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 LVarC
Definition macros.h:160
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define Float(DOUBLE)
Definition macros.h:51
#define LFlag1
Definition macros.h:168
#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 LVar5
Definition macros.h:153
#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 LVarB
Definition macros.h:159
#define ExecWait(EVT_SOURCE)
Launches a new child thread.
Definition macros.h:475
#define IfLe(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR > RVAR.
Definition macros.h:281
#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 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 LVarD
Definition macros.h:161
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:254
#define LFlag2
Definition macros.h:169
#define NPC_DISPOSE_LOCATION
Definition macros.h:162
#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 LFlag3
Definition macros.h:170
#define Loop(TIMES)
Marks the beginning of a loop.
Definition macros.h:245
#define LVar4
Definition macros.h:152
#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 Exec(EVT_SOURCE)
Launches a new thread.
Definition macros.h:455
#define Return
Kills the current EVT thread.
Definition macros.h:217
#define ACTOR_BY_POS(_name, _pos, _priority, args...)
Definition battle.h:230
FormationRow Formation[]
Definition battle.h:167