Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
swooper.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/Swooper.h"
4
5#define NAMESPACE A(swooper)
6
7extern s32 N(CeilingAnims)[];
8extern EvtScript N(EVS_Init);
9extern EvtScript N(EVS_Idle);
10extern EvtScript N(EVS_TakeTurn);
11extern EvtScript N(EVS_HandleEvent);
12
13enum N(ActorPartIDs) {
14 PRT_MAIN = 1,
15};
16
17enum N(ActorVars) {
18 AVAR_IN_SnapToIndexPos = 0, // -1 = no, 0 = yes
19 AVAR_IsFlying = 8, // false when attached to ceiling
20};
21
22enum N(ActorParams) {
23 DMG_SWOOP = 2,
24};
25
26s32 N(DefenseTable)[] = {
29};
30
31s32 N(StatusTable)[] = {
54};
55
56ActorPartBlueprint N(ActorParts)[] = {
57 {
59 .index = PRT_MAIN,
60 .posOffset = { 0, 0, 0 },
61 .targetOffset = { 0, 29 },
62 .opacity = 255,
63 .idleAnimations = N(CeilingAnims),
64 .defenseTable = N(DefenseTable),
65 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
66 .elementImmunityFlags = 0,
67 .projectileTargetOffset = { 1, 15 },
68 },
69};
70
71ActorBlueprint NAMESPACE = {
73 .type = ACTOR_TYPE_SWOOPER,
74 .level = ACTOR_LEVEL_SWOOPER,
75 .maxHP = 4,
76 .partCount = ARRAY_COUNT(N(ActorParts)),
77 .partsData = N(ActorParts),
78 .initScript = &N(EVS_Init),
79 .statusTable = N(StatusTable),
80 .escapeChance = 50,
81 .airLiftChance = 100,
82 .hurricaneChance = 95,
83 .spookChance = 90,
84 .upAndAwayChance = 95,
85 .spinSmashReq = 0,
86 .powerBounceChance = 80,
87 .coinReward = 1,
88 .size = { 31, 24 },
89 .healthBarOffset = { 0, 0 },
90 .statusIconOffset = { -10, -20 },
91 .statusTextOffset = { 10, -20 },
92};
93
94s32 N(CeilingAnims)[] = {
105};
106
107s32 N(FlyingAnims)[] = {
118};
119
120EvtScript N(EVS_Init) = {
121 Call(BindTakeTurn, ACTOR_SELF, Ref(N(EVS_TakeTurn)))
122 Call(BindIdle, ACTOR_SELF, Ref(N(EVS_Idle)))
123 Call(BindHandleEvent, ACTOR_SELF, Ref(N(EVS_HandleEvent)))
125 Return
126 End
127};
128
129EvtScript N(EVS_Idle) = {
130 Return
131 End
132};
133
137 CaseEq(0)
141 Call(AddGoalPos, ACTOR_SELF, 0, -24, 0)
147 Add(LVar1, 24)
150 CaseEq(1)
156 Return
157 End
158};
159
167 SetConst(LVar0, PRT_MAIN)
172 SetConst(LVar0, PRT_MAIN)
177 SetConst(LVar0, PRT_MAIN)
181 SetConst(LVar0, PRT_MAIN)
184 Return
187 SetConst(LVar0, PRT_MAIN)
194 SetConst(LVar0, PRT_MAIN)
197 Thread
198 Wait(30)
201 SetConst(LVar0, PRT_MAIN)
204 Return
208 SetConst(LVar0, PRT_MAIN)
213 SetConst(LVar0, PRT_MAIN)
216 Wait(10)
217 SetConst(LVar0, PRT_MAIN)
220 Return
222 SetConst(LVar0, PRT_MAIN)
227 SetConst(LVar0, PRT_MAIN)
231 Return
233 SetConst(LVar0, PRT_MAIN)
237 SetConst(LVar0, PRT_MAIN)
240 Return
244 Return
245 End
246};
247
248#include "common/battle/SetAbsoluteStatusOffsets.inc.c"
249
253 IfLe(LVar0, 0)
254 Return
255 EndIf
260 Sub(LVar1, 24)
263 IfEq(LVarA, -1)
269 Else
274 Mod(LVarA, 4)
275 Add(LVarA, 4)
282 EndIf
283 Call(SetProjectileTargetOffset, ACTOR_SELF, PRT_MAIN, 0, -10)
284 Call(SetTargetOffset, ACTOR_SELF, PRT_MAIN, 0, 22)
285 Call(N(SetAbsoluteStatusOffsets), -10, 20, 10, 20)
290 Return
291 End
292};
293
294EvtScript N(EVS_HandleEvent) = {
296 IfEq(LVar0, 1)
298 Return
299 EndIf
307 SetConst(LVar0, PRT_MAIN)
310 Else
311 SetConst(LVar0, PRT_MAIN)
314 EndIf
318 SetConst(LVar0, PRT_MAIN)
321 Else
322 SetConst(LVar0, PRT_MAIN)
326 EndIf
330 SetConst(LVar0, PRT_MAIN)
334 Else
335 SetConst(LVar0, PRT_MAIN)
340 EndIf
344 SetConst(LVar0, PRT_MAIN)
348 SetConst(LVar0, PRT_MAIN)
351 Else
352 SetConst(LVar0, PRT_MAIN)
356 SetConst(LVar0, PRT_MAIN)
359 EndIf
360 Return
363 SetConst(LVar0, PRT_MAIN)
370 SetConst(LVar0, PRT_MAIN)
373 Thread
374 Wait(30)
377 SetConst(LVar0, PRT_MAIN)
380 Return
383 SetConst(LVar0, PRT_MAIN)
390 SetConst(LVar0, PRT_MAIN)
393 Wait(10)
394 SetConst(LVar0, PRT_MAIN)
397 Else
398 SetConst(LVar0, PRT_MAIN)
401 Wait(10)
402 SetConst(LVar0, PRT_MAIN)
405 EndIf
406 Return
411 Call(SetActorPos, ACTOR_SELF, 20, 0, 0)
421 SetConst(LVar0, PRT_MAIN)
425 Return
429 Return
430 End
431};
432
441 Call(AddGoalPos, ACTOR_SELF, 50, 10, 0)
445 Else
451 Call(AddGoalPos, ACTOR_SELF, 50, 10, 0)
454 EndIf
459 Set(LVarA, LVar0)
460 Wait(10)
469 Sub(LVar0, 50)
474 Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(10.0))
475 Wait(15)
476 Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(1.0))
479 EndIf
489 Return
495 Else
496 Set(LFlag0, TRUE)
497 EndIf
499 Wait(10)
510 Wait(2)
514 Call(AddGoalPos, ACTOR_SELF, 50, 10, 0)
518 Wait(10)
523 Return
524 End
525};
526
527EvtScript N(EVS_TakeTurn) = {
529 IfEq(LVar0, 1)
531 Return
532 EndIf
542 Sub(LVar1, 24)
548 Set(LVarA, LVar0)
549 Wait(10)
555 Call(AddGoalPos, ACTOR_SELF, -50, 0, 0)
559 Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(10.0))
560 Wait(15)
561 Call(SetAnimationRate, ACTOR_SELF, PRT_MAIN, Float(1.0))
564 EndIf
574 Return
580 Else
581 Set(LFlag0, TRUE)
582 EndIf
584 Wait(10)
592 Wait(2)
596 Call(AddGoalPos, ACTOR_SELF, 50, 10, 0)
600 Wait(10)
605 Return
608 Return
609 End
610};
BSS s32 PopupMenu_SelectedIndex
Bytecode EvtScript[]
@ BTL_CAM_XADJ_AVG
Definition enums.h:4899
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3574
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3570
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ACTOR_EVENT_FLAGS_NONE
Definition enums.h:3370
@ 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_HIT_STATIC
Definition enums.h:1957
@ 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
@ EASING_SIN_OUT
Definition enums.h:521
@ EASING_LINEAR
Definition enums.h:510
@ IDLE_SCRIPT_ENABLE
Definition enums.h:6407
@ IDLE_SCRIPT_DISABLE
Definition enums.h:6406
@ STATUS_FLAG_STATIC
Definition enums.h:2813
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_SELF
Definition enums.h:2084
@ ACTOR_FLAG_FLYING
Quake Hammer can't hit.
Definition enums.h:3329
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3331
@ BTL_CAM_YADJ_TARGET
Definition enums.h:4904
@ 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_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_ScareAway
EvtScript EVS_Enemy_Hit
EvtScript EVS_Enemy_Death
EvtScript EVS_Enemy_ShockHit_Impl
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 Mod(VAR, INT_VALUE)
Definition macros.h:380
#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 LVarC
Definition macros.h:160
#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 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 LFlag0
Definition macros.h:167
#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