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:4485
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3608
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3604
@ ELEMENT_END
Definition enums.h:2147
@ ELEMENT_NORMAL
Definition enums.h:2148
@ ACTOR_EVENT_FLAGS_NONE
Definition enums.h:3404
@ ACTOR_DECORATION_SWEAT
Definition enums.h:2078
@ PHASE_FIRST_STRIKE
Definition enums.h:2092
@ STATUS_KEY_PARALYZE
Definition enums.h:2806
@ STATUS_TURN_MOD_DEFAULT
Definition enums.h:2832
@ STATUS_TURN_MOD_PARALYZE
Definition enums.h:2839
@ STATUS_KEY_FROZEN
Definition enums.h:2808
@ STATUS_TURN_MOD_SLEEP
Definition enums.h:2833
@ STATUS_TURN_MOD_DIZZY
Definition enums.h:2837
@ STATUS_TURN_MOD_UNUSED
Definition enums.h:2836
@ STATUS_KEY_STATIC
Definition enums.h:2812
@ STATUS_END
Definition enums.h:2801
@ STATUS_TURN_MOD_POISON
Definition enums.h:2838
@ STATUS_TURN_MOD_STOP
Definition enums.h:2842
@ STATUS_KEY_SLEEP
Definition enums.h:2807
@ STATUS_KEY_UNUSED
Definition enums.h:2804
@ STATUS_KEY_STONE
Definition enums.h:2813
@ STATUS_KEY_STOP
Definition enums.h:2809
@ STATUS_TURN_MOD_FROZEN
Definition enums.h:2835
@ STATUS_KEY_SHRINK
Definition enums.h:2811
@ STATUS_KEY_DIZZY
Definition enums.h:2805
@ STATUS_KEY_POISON
Definition enums.h:2810
@ STATUS_TURN_MOD_STATIC
Definition enums.h:2834
@ STATUS_KEY_NORMAL
Definition enums.h:2802
@ STATUS_TURN_MOD_SHRINK
Definition enums.h:2840
@ STATUS_KEY_DEFAULT
Definition enums.h:2803
@ HIT_RESULT_HIT_STATIC
Definition enums.h:1983
@ HIT_RESULT_LUCKY
Definition enums.h:1981
@ HIT_RESULT_MISS
Definition enums.h:1982
@ BTL_CAM_DEFAULT
Definition enums.h:4409
@ BTL_CAM_ENEMY_APPROACH
Definition enums.h:4470
@ EASING_SIN_OUT
Definition enums.h:521
@ EASING_LINEAR
Definition enums.h:510
@ IDLE_SCRIPT_ENABLE
Definition enums.h:5999
@ IDLE_SCRIPT_DISABLE
Definition enums.h:5998
@ STATUS_FLAG_STATIC
Definition enums.h:2847
@ ACTOR_PLAYER
Definition enums.h:2118
@ ACTOR_SELF
Definition enums.h:2117
@ ACTOR_FLAG_FLYING
Quake Hammer can't hit.
Definition enums.h:3363
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3365
@ BTL_CAM_YADJ_TARGET
Definition enums.h:4490
@ EVENT_HIT
Definition enums.h:2165
@ EVENT_SCARE_AWAY
Definition enums.h:2207
@ EVENT_BURN_HIT
Definition enums.h:2169
@ EVENT_BEGIN_FIRST_STRIKE
Definition enums.h:2206
@ EVENT_END_FIRST_STRIKE
Definition enums.h:2204
@ EVENT_IMMUNE
Definition enums.h:2179
@ EVENT_BURN_DEATH
Definition enums.h:2190
@ EVENT_ZERO_DAMAGE
Definition enums.h:2177
@ EVENT_SHOCK_DEATH
Definition enums.h:2192
@ EVENT_HIT_COMBO
Definition enums.h:2164
@ EVENT_AIR_LIFT_FAILED
Definition enums.h:2185
@ EVENT_BEGIN_AIR_LIFT
Definition enums.h:2208
@ EVENT_DEATH
Definition enums.h:2186
@ EVENT_SHOCK_HIT
Definition enums.h:2198
@ EVENT_RECOVER_STATUS
Definition enums.h:2200
@ EVENT_BLOW_AWAY
Definition enums.h:2176
@ ACTOR_PART_FLAG_PRIMARY_TARGET
Definition enums.h:3396
@ DAMAGE_TYPE_TRIGGER_LUCKY
Definition enums.h:2915
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:296
#define Switch(LVAR)
Marks the start of a switch statement.
Definition macros.h:312
#define Ref(sym)
Address/pointer constant.
Definition macros.h:61
#define Set(VAR, INT_VALUE)
Sets the given variable to a given value casted to an integer.
Definition macros.h:366
#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:320
#define Sub(VAR, INT_VALUE)
Definition macros.h:378
#define End
Signals the end of EVT script data. A script missing this will likely crash on load.
Definition macros.h:214
#define Mod(VAR, INT_VALUE)
Definition macros.h:381
#define Add(VAR, INT_VALUE)
Definition macros.h:377
#define EndCaseGroup
Marks the end of a switch case group (CaseOrEq and/or CaseAndEq), stopping fallthrough.
Definition macros.h:353
#define LVarC
Definition macros.h:161
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define Float(DOUBLE)
Definition macros.h:52
#define CaseOrEq(RVAR)
Marks the start of a switch case that executes only if LVAR == RVAR.
Definition macros.h:342
#define EndIf
Marks the end of an if statement or an else block.
Definition macros.h:299
#define LVarB
Definition macros.h:160
#define ExecWait(EVT_SOURCE)
Launches a new child thread.
Definition macros.h:476
#define IfLe(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR > RVAR.
Definition macros.h:282
#define Thread
Marks the start of a thread block.
Definition macros.h:545
#define EndThread
Marks the end of a thread block.
Definition macros.h:548
#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:289
#define LVar2
Definition macros.h:151
#define LVar1
Definition macros.h:150
#define LFlag0
Definition macros.h:168
#define LVarA
Definition macros.h:159
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:255
#define EndSwitch
Marks the end of a switch statement and any case.
Definition macros.h:363
#define IfEq(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR == RVAR.
Definition macros.h:270
#define Call(FUNC, ARGS...)
Calls a given C EVT API function with any number of arguments.
Definition macros.h:577
#define LVar0
Definition macros.h:149
#define SetConst(VAR, CONST)
Sets the given variable to a given value, skipping the evt_get_variable call.
Definition macros.h:371
#define Return
Kills the current EVT thread.
Definition macros.h:218