Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
sky_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/ShyGuy.h"
6#include "sprite/npc/SkyGuy.h"
7
8#define NAMESPACE A(sky_guy)
9
10extern s32 N(GroundAnims)[];
11
16
20
21enum N(ActorPartIDs) {
22 PRT_GROUND = 1,
23 PRT_FLYING = 2,
27 PRT_STONE = 6,
28};
29
30enum N(ActorVars) {
35};
36
37enum N(ActorParams) {
38 DMG_SLINGSHOT = 3,
39 DMG_TACKLE = 2,
40 DMG_VAULT = 3,
41};
42
43s32 N(DefaultAnims)[] = {
54};
55
56s32 N(YellowBalloonAnims)[] = {
67};
68
69s32 N(RedBalloonAnims)[] = {
80};
81
82s32 N(BlueBalloonAnims)[] = {
93};
94
95s32 N(StoneAnims)[] = {
98};
99
100s32 N(FlyingDefense)[] = {
102 ELEMENT_SHOCK, 0,
104};
105
106s32 N(GroundDefense)[] = {
108 ELEMENT_SHOCK, 0,
110};
111
112s32 N(FlyingStatusTable)[] = {
119 STATUS_KEY_FEAR, 100,
123 STATUS_KEY_STOP, 90,
135};
136
137s32 N(StatusTable_802296D0)[] = {
144 STATUS_KEY_FEAR, 100,
148 STATUS_KEY_STOP, 90,
160};
161
163 {
165 .index = PRT_GROUND,
166 .posOffset = { 0, 0, 0 },
167 .targetOffset = { 0, 32 },
168 .opacity = 255,
169 .idleAnimations = N(GroundAnims),
170 .defenseTable = N(GroundDefense),
171 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
172 .elementImmunityFlags = 0,
173 .projectileTargetOffset = { 0, -10 },
174 },
175 {
177 .index = PRT_FLYING,
178 .posOffset = { 0, 0, 0 },
179 .targetOffset = { 0, 24 },
180 .opacity = 255,
181 .idleAnimations = N(DefaultAnims),
182 .defenseTable = N(FlyingDefense),
183 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
184 .elementImmunityFlags = 0,
185 .projectileTargetOffset = { -1, -10 },
186 },
187 {
189 .index = PRT_YELLOW_BALLOON,
190 .posOffset = { 0, 0, 0 },
191 .targetOffset = { 2, 50 },
192 .opacity = 255,
193 .idleAnimations = N(YellowBalloonAnims),
194 .defenseTable = N(FlyingDefense),
195 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
196 .elementImmunityFlags = 0,
197 .projectileTargetOffset = { -1, -10 },
198 .overrideNameMsg = MSG_EnemyName_Balloon,
199 },
200 {
202 .index = PRT_RED_BALLOON,
203 .posOffset = { 0, 0, 0 },
204 .targetOffset = { 0, 24 },
205 .opacity = 255,
206 .idleAnimations = N(RedBalloonAnims),
207 .defenseTable = N(FlyingDefense),
208 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
209 .elementImmunityFlags = 0,
210 .projectileTargetOffset = { -1, -10 },
211 },
212 {
214 .index = PRT_BLUE_BALLOON,
215 .posOffset = { 0, 0, 0 },
216 .targetOffset = { 0, 24 },
217 .opacity = 255,
218 .idleAnimations = N(BlueBalloonAnims),
219 .defenseTable = N(FlyingDefense),
220 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
221 .elementImmunityFlags = 0,
222 .projectileTargetOffset = { -1, -10 },
223 },
224 {
226 .index = PRT_STONE,
227 .posOffset = { 0, 0, 0 },
228 .targetOffset = { 0, 24 },
229 .opacity = 255,
230 .idleAnimations = N(StoneAnims),
231 .defenseTable = N(FlyingDefense),
232 .eventFlags = ACTOR_EVENT_FLAGS_NONE,
233 .elementImmunityFlags = 0,
234 .projectileTargetOffset = { -1, -10 },
235 },
236};
237
238ActorBlueprint NAMESPACE = {
239 .flags = ACTOR_FLAG_FLYING,
240 .type = ACTOR_TYPE_SKY_GUY,
241 .level = ACTOR_LEVEL_SKY_GUY,
242 .maxHP = 7,
243 .partCount = ARRAY_COUNT(N(ActorParts)),
244 .partsData = N(ActorParts),
245 .initScript = &N(EVS_Flying_Init),
246 .statusTable = N(FlyingStatusTable),
247 .escapeChance = 50,
248 .airLiftChance = 90,
249 .hurricaneChance = 90,
250 .spookChance = 80,
251 .upAndAwayChance = 95,
252 .spinSmashReq = 0,
253 .powerBounceChance = 90,
254 .coinReward = 1,
255 .size = { 28, 28 },
256 .healthBarOffset = { 0, 0 },
257 .statusIconOffset = { -10, 20 },
258 .statusTextOffset = { 10, 20 },
259};
260
274 Sub(LVar1, 5)
278 Return
279 End
280};
281
283 Return
284 End
285};
286
291 Else
294 Add(LVar8, 20)
295 PlayEffect(EFFECT_BALLOON, 2, LVar7, LVar8, LVar9, Float(1.0), 150, 0)
296 Sub(LVar7, 14)
297 Sub(LVar8, 4)
298 PlayEffect(EFFECT_BALLOON, 0, LVar7, LVar8, LVar9, Float(1.0), 150, 0)
299 Add(LVar7, 28)
300 PlayEffect(EFFECT_BALLOON, 1, LVar7, LVar8, LVar9, Float(1.0), 150, 0)
306 EndIf
307 Return
308 End
309};
310
316 Return
317 End
318};
319
321 Call(MakeLerp, 100, 80, 7, EASING_CUBIC_OUT)
322 Label(0)
324 DivF(LVar0, Float(100.0))
325 SetF(LVar2, Float(2.0))
330 Wait(1)
331 IfEq(LVar1, 1)
332 Goto(0)
333 EndIf
335 Label(1)
337 DivF(LVar0, Float(100.0))
338 SetF(LVar2, Float(2.0))
343 Wait(1)
344 IfEq(LVar1, 1)
345 Goto(1)
346 EndIf
350 Return
351 End
352};
353
354#include "common/StartRumbleWithParams.inc.c"
355
361 Thread
362 Wait(20)
368 Wait(30)
373 Wait(15)
377 PlayEffect(EFFECT_EMOTE, EMOTE_QUESTION, 0, LVar0, LVar1, LVar2, 24, 0, 25, 0, 0)
378 Wait(25)
380 Wait(30)
384 Set(LVar1, 0)
389 Call(N(StartRumbleWithParams), 120, 10)
390 Thread
391 Call(ShakeCam, CAM_BATTLE, 0, 5, Float(0.5))
399 Wait(40)
408 Else
410 EndIf
411 Return
412 End
413};
414
423 Else
427 EndIf
433 Else
437 EndIf
451 Return
456 Else
460 EndIf
466 Else
470 EndIf
476 Wait(10)
480 Return
482 Call(SetActorPos, ACTOR_SELF, 20, 0, 0)
508 Return
517 Return
522 Return
523 End
524};
525
535 EndIf
538 Wait(12)
540 Add(LVar1, 20)
541 Add(LVar2, 2)
544 Wait(12)
554 Sub(LVar0, 120)
555 Set(LVar1, 0)
563 Return
568 Sub(LVar0, 50)
569 Set(LVar1, -5)
576 Sub(LVar0, 65)
577 Set(LVar1, -5)
585 Return
593 Wait(2)
599 Sub(LVar0, 55)
600 Set(LVar1, 0)
605 Sub(LVar0, 20)
613 Return
614 End
615};
616
617s32 N(GroundAnims)[] = {
628};
629
630// unused
635 Return
636 End
637};
638
640
642 Label(0)
647 Call(N(SetAbsoluteStatusOffsets), -10, 13, 10, 13)
648 Else
651 Call(N(SetAbsoluteStatusOffsets), -10, 20, 10, 20)
652 EndIf
653 Wait(1)
654 Goto(0)
655 Return
656 End
657};
658
665 Return
666 End
667};
668
692 Return
704 Return
721 Return
733 Wait(10)
737 Return
747 Return
756 Return
760 Return
761 End
762};
763
776 Add(LVar0, 50)
777 Set(LVar1, 0)
784 Set(LVarA, LVar0)
796 Sub(LVar0, 30)
801 EndIf
803 Sub(LVar0, 20)
806 Wait(15)
819 Return
822 Thread
823 Wait(3)
832 Add(LVar0, 10)
833 Set(LVar1, 0)
837 Wait(2)
844 Add(LVar0, 30)
845 Set(LVar1, 0)
850 Wait(8)
855 Return
856 End
857};
858
869 Wait(20)
874 Add(LVar0, 80)
875 Set(LVar1, 0)
882 Sub(LVar0, 40)
889 Set(LVarA, LVar0)
892 Thread
893 Wait(12)
899 Sub(LVar0, 10)
900 Set(LVar1, 0)
905 EndIf
910 Sub(LVar0, 30)
913 Sub(LVar0, 20)
916 Wait(15)
930 Return
935 Thread
936 Wait(9)
942 Wait(2)
949 Thread
951 Set(LVar3, 0)
952 Loop(20)
953 Sub(LVar3, 30)
954 IfLt(LVar3, 0)
955 Add(LVar3, 360)
956 EndIf
958 Wait(1)
959 EndLoop
965 Goto(1)
966 EndIf
968 IfEq(LVar0, 0)
969 Goto(1)
970 EndIf
972 Add(LVar0, 40)
973 Set(LVar1, 0)
980 Wait(10)
982 Wait(15)
983 Goto(2)
984 Label(1)
986 Add(LVar0, 40)
987 Set(LVar1, 0)
993 Wait(10)
996 Call(RandInt, 100, LVar0)
997 IfLt(LVar0, 50)
999 Else
1001 EndIf
1002 Wait(25)
1005 Label(2)
1013 EndSwitch
1016 Return
1017 End
1018};
1019
1021 Call(RandInt, 1, LVar0)
1022 IfEq(LVar0, 0)
1024 Else
1026 EndIf
1027 Return
1028 End
1029};
BSS s32 PopupMenu_SelectedIndex
Bytecode EvtScript[]
@ BTL_CAM_XADJ_AVG
Definition enums.h:4899
@ EMOTE_QUESTION
Definition enums.h:497
@ 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:3574
@ BS_FLAGS1_ATK_BLOCKED
Definition enums.h:3599
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3570
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_SHOCK
Definition enums.h:2125
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ACTOR_EVENT_FLAGS_NONE
Definition enums.h:3370
@ ACTOR_DECORATION_SWEAT
Definition enums.h:2045
@ ACTOR_PART_TARGET_NO_DAMAGE
Definition enums.h:1877
@ 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
@ SOUND_ID_TRIGGER_CHANGE_SOUND
Definition enums.h:532
@ EASING_CUBIC_OUT
Definition enums.h:515
@ EASING_LINEAR
Definition enums.h:510
@ EASING_COS_FAST_OVERSHOOT
Definition enums.h:518
@ IDLE_SCRIPT_ENABLE
Definition enums.h:6407
@ IDLE_SCRIPT_DISABLE
Definition enums.h:6406
@ STATUS_FLAG_SLEEP
Definition enums.h:2812
@ SOUND_LRAW_CHEERING
Definition enums.h:1151
@ SOUND_NONE
Definition enums.h:547
@ SOUND_TIMING_BAR_GO
Definition enums.h:953
@ SOUND_EMOTE_QUESTION
Definition enums.h:979
@ SOUND_ACTOR_HOP
Definition enums.h:1073
@ SOUND_ACTOR_COLLAPSE
Definition enums.h:1514
@ SOUND_SLINGSHOT_DRAW
Definition enums.h:1065
@ SOUND_SKY_GUY_BALLOON_POP
Definition enums.h:1059
@ SOUND_ACTOR_STEP_A
Definition enums.h:1474
@ SOUND_ACTOR_STEP_B
Definition enums.h:1250
@ SOUND_FALL_QUICK
Definition enums.h:1090
@ SOUND_DISAPPOINTED
Definition enums.h:1482
@ SOUND_SLINGSHOT_FIRE
Definition enums.h:1066
@ 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_TYPE_CHANGED
Indicates actors type has changed, triggers recheck for if HP bar should be shown based on tattle sta...
Definition enums.h:3332
@ 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_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
@ ACTOR_PART_FLAG_NO_SHADOW
Definition enums.h:3352
@ ACTOR_PART_FLAG_USE_ABSOLUTE_POSITION
Definition enums.h:3361
@ ACTOR_PART_FLAG_NO_DECORATIONS
Definition enums.h:3351
@ ACTOR_PART_FLAG_NO_TARGET
Cannot be targeted.
Definition enums.h:3360
@ ACTOR_PART_FLAG_DAMAGE_IMMUNE
electrified Plays extra hurt SFX?
Definition enums.h:3358
@ ACTOR_PART_FLAG_INVISIBLE
Definition enums.h:3350
@ CAM_BATTLE
Definition enums.h:1801
@ DAMAGE_TYPE_4000
Definition enums.h:2865
@ DAMAGE_TYPE_SPINY_SURGE
Definition enums.h:2867
@ DAMAGE_TYPE_BLAST
Definition enums.h:2860
@ DAMAGE_TYPE_FIRE
Definition enums.h:2852
@ DAMAGE_TYPE_TRIGGER_LUCKY
Definition enums.h:2881
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2878
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
ApiStatus UpdateLerp(Evt *script, b32 isInitialCall)
ApiStatus RandInt(Evt *script, b32 isInitialCall)
ApiStatus ShakeCam(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 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 LVarF
Definition macros.h:163
#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 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 IfLt(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR < RVAR.
Definition macros.h:275
#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 LVar7
Definition macros.h:155
#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 SetF(VAR, FLOAT_VALUE)
Sets the given variable to a given value, but supports Floats.
Definition macros.h:373
#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 LVar8
Definition macros.h:156
#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 LVar9
Definition macros.h:157
#define SubF(VAR, FLOAT_VALUE)
Definition macros.h:384
#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