Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
dark_koopa.inc.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "sprite/npc/KoopaTroopa.h"
4#include "effects.h"
5
6#define NAMESPACE A(dark_koopa)
7
8extern EvtScript N(EVS_Init);
9extern EvtScript N(EVS_TakeTurn);
10extern EvtScript N(EVS_Idle);
12
13extern s32 N(KoopaAnims)[];
14
15enum N(ActorPartIDs) {
16 PRT_MAIN = 1,
17};
18
19enum N(ActorVars) {
21 AVAR_State = 8,
27};
28
29enum N(ActorParams) {
31};
32
33#define SWEAT_DECOR_IDX 0
34#define WHIRLWIND_DECOR_IDX 1
35
36s32 N(UprightDefenseTable)[] = {
39 ELEMENT_JUMP, 2,
43};
44
45s32 N(ToppledDefenseTable)[] = {
48};
49
50s32 N(StatusTable)[] = {
73};
74
76 {
78 .index = PRT_MAIN,
79 .posOffset = { 0, 0, 0 },
80 .targetOffset = { -2, 36 },
81 .opacity = 255,
82 .idleAnimations = N(KoopaAnims),
83 .defenseTable = N(UprightDefenseTable),
84 .eventFlags = ACTOR_EVENT_FLAG_FLIPABLE,
85 .elementImmunityFlags = 0,
86 .projectileTargetOffset = { 0, -7 },
87 },
88};
89
90ActorBlueprint NAMESPACE = {
91 .flags = 0,
94 .maxHP = 8,
95 .partCount = ARRAY_COUNT(N(ActorParts)),
96 .partsData = N(ActorParts),
97 .initScript = &N(EVS_Init),
98 .statusTable = N(StatusTable),
99 .escapeChance = 60,
100 .airLiftChance = 85,
101 .hurricaneChance = 75,
102 .spookChance = 70,
103 .upAndAwayChance = 95,
104 .spinSmashReq = 0,
105 .powerBounceChance = 90,
106 .coinReward = 2,
107 .size = { 28, 36 },
108 .healthBarOffset = { 0, 0 },
109 .statusIconOffset = { -15, 32 },
110 .statusTextOffset = { 5, 32 },
111};
112
113s32 N(KoopaAnims)[] = {
124};
125
126s32 N(ShuffleAnims)[] = {
137};
138
139s32 N(HyperAnims)[] = {
150};
151
152s32 N(HyperShuffleAnims)[] = {
163};
164
165s32 N(ToppledAnims)[] = {
176};
177
178EvtScript N(EVS_Init) = {
182 Call(RandInt, 1000, LVar0)
183 IfLt(LVar0, 300)
185 Else
189 EndIf
191 Return
192 End
193};
194
195#include "common/battle/SetAbsoluteStatusOffsets.inc.c"
196
204 Call(N(SetAbsoluteStatusOffsets), -10, 20, 10, 20)
205 Else
208 Call(N(SetAbsoluteStatusOffsets), -15, 32, 5, 32)
209 EndIf
215 Call(N(SetAbsoluteStatusOffsets), -10, 20, 10, 20)
218 Return
219 End
220};
221
222EvtScript N(EVS_Idle) = {
223 Label(0)
224 Call(RandInt, 80, LVarA)
225 Add(LVarA, 80)
226 Loop(LVarA)
227 Label(1)
232 Wait(1)
233 Goto(1)
234 EndIf
236 Wait(1)
237 Goto(1)
238 EndIf
240 Wait(1)
241 Goto(1)
242 EndIf
243 Wait(1)
244 EndLoop
253 Add(LVar0, 5)
268 Loop(20)
269 Label(2)
274 Wait(1)
275 Goto(2)
276 EndIf
278 Wait(1)
279 Goto(2)
280 EndIf
282 Wait(1)
283 Goto(2)
284 EndIf
285 Wait(1)
286 EndLoop
295 Sub(LVar0, 5)
310 Loop(50)
311 Label(3)
316 Wait(1)
317 Goto(3)
318 EndIf
320 Wait(1)
321 Goto(3)
322 EndIf
324 Wait(1)
325 Goto(3)
326 EndIf
327 Wait(1)
328 EndLoop
333 Thread
334 Call(MakeLerp, 720, 0, 30, EASING_COS_IN_OUT)
335 Label(10)
338 IfEq(LVar1, 1)
340 IfEq(LVar2, 1)
341 Wait(1)
342 Goto(10)
343 EndIf
344 EndIf
348 Wait(8)
350 Wait(15)
352 Wait(8)
358 Goto(0)
359 Return
360 End
361};
362
363s32 N(FlipPosOffsets)[] = { 9, 16, 22, 26, 30, 32, 33, 32, 30, 26, 22, 16, 9, 0, 4, 6, 7, 6, 4, 0, 2, 0 };
364
371 IfEq(LVar0, TRUE)
374 EndIf
396 Return
408 Return
425 Thread
426 Wait(4)
428 Wait(1)
430 Wait(1)
431 Call(SetActorRotation, ACTOR_SELF, 0, 0, -30)
432 Wait(1)
433 Call(SetActorRotation, ACTOR_SELF, 0, 0, -60)
434 Wait(1)
435 Call(SetActorRotation, ACTOR_SELF, 0, 0, -75)
436 Wait(1)
442 Wait(1)
443 EndLoop
469 Return
482 Wait(10)
483 EndIf
497 Wait(10)
501 Return
508 EndIf
518 EndIf
528 Return
567 Return
587 Return
588 End
589};
590
598 Else
601 Wait(10)
603 Wait(10)
604 Thread
606 Add(LVar1, 4)
607 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 32, 4, 0, 10, 0)
608 Wait(3)
609 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 32, 4, 0, 10, 0)
610 Wait(2)
611 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 32, 4, 0, 10, 0)
615 Wait(10)
617 EndIf
624 Set(LVarA, LVar0)
627 Call(AddGoalPos, ACTOR_SELF, -40, 0, 0)
631 Wait(8)
634 Wait(4)
637 EndIf
639 Wait(1)
642 Add(LVar1, 20)
647 Wait(6)
648 Sub(LVar1, 20)
664 Return
671 Wait(2)
678 Add(LVar0, 40)
679 Set(LVar1, 0)
683 Add(LVar0, 30)
686 Add(LVar0, 20)
690 Wait(8)
700 Return
701 End
702};
703
705 Label(10)
707 Wait(1)
708 IfEq(LVar0, TRUE)
709 Goto(10)
710 EndIf
720 Call(AddGoalPos, ACTOR_SELF, 8, 0, 0)
721 Else
722 Call(AddGoalPos, ACTOR_SELF, 20, 0, 0)
723 EndIf
728 Wait(10)
730 Wait(10)
731 Thread
733 Add(LVar1, 4)
734 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 32, 4, 0, 10, 0)
735 Wait(3)
736 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 32, 4, 0, 10, 0)
737 Wait(2)
738 PlayEffect(EFFECT_SMOKE_IMPACT, 1, LVar0, LVar1, LVar2, 32, 4, 0, 10, 0)
742 Wait(20)
745 Wait(40)
750 Set(LVarA, LVar0)
753 Wait(10)
756 EndIf
757 Wait(10)
769 Return
772 Wait(2)
778 Thread
780 IfEq(LVar0, 1)
781 Call(MakeLerp, 0, 1080, 30, EASING_COS_IN_OUT)
782 Label(0)
785 Wait(1)
786 IfEq(LVar1, 1)
787 Goto(0)
788 EndIf
789 EndIf
791 Wait(20)
794 Wait(10)
795 Wait(10)
806 Return
807 End
808};
809
816 Sub(LVar0, 1)
817 IfGt(LVar0, 0)
821 Wait(30)
824 Else
827 Wait(20)
834 Set(LVar0, 0)
836 Thread
837 Loop(5)
838 Add(LVar0, 15)
840 Wait(1)
841 EndLoop
865 EndIf
868 Return
869 End
870};
871
876 EndIf
881 Call(RandInt, 1000, LVar0)
882 IfLt(LVar0, 300)
885 Else
888 EndIf
891 Call(RandInt, 1000, LVar0)
892 IfLt(LVar0, 300)
895 Else
898 EndIf
904 Return
905 End
906};
907
BSS s32 PopupMenu_SelectedIndex
Bytecode EvtScript[]
#define SWEAT_DECOR_IDX
#define WHIRLWIND_DECOR_IDX
#define STATUS_FLAGS_IMMOBILIZED
Definition enums.h:2834
@ BTL_CAM_XADJ_AVG
Definition enums.h:4899
@ ACTOR_SOUND_WALK
Definition enums.h:2034
@ 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_JUMP
Definition enums.h:2122
@ ELEMENT_END
Definition enums.h:2114
@ ELEMENT_BLAST
Definition enums.h:2124
@ ELEMENT_SMASH
Definition enums.h:2121
@ ELEMENT_WATER
Definition enums.h:2117
@ ELEMENT_NORMAL
Definition enums.h:2115
@ ACTOR_EVENT_FLAG_FLIPABLE
Actor can be flipped; triggered by jump and quake attacks.
Definition enums.h:3380
@ ACTOR_DECORATION_WHIRLWIND
Definition enums.h:2050
@ 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
@ SUPPRESS_EVENT_ALL
Definition enums.h:2907
@ EASING_COS_IN_OUT
Definition enums.h:520
@ 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_DIZZY
Definition enums.h:2818
@ STATUS_FLAG_SLEEP
Definition enums.h:2812
@ SOUND_NONE
Definition enums.h:547
@ SOUND_ACTOR_STEP_A
Definition enums.h:1474
@ SOUND_SHELL_SPIN
Definition enums.h:1342
@ SOUND_SHELL_TOSS
Definition enums.h:1497
@ SOUND_DIZZY_SHELL
Definition enums.h:1346
@ SOUND_ACTOR_JUMP
Definition enums.h:1290
@ ACTOR_PLAYER
Definition enums.h:2085
@ ACTOR_SELF
Definition enums.h:2084
@ ACTOR_FLAG_FLIPPED
Actor has been flipped over.
Definition enums.h:3330
@ 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_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_FLIP_TRIGGER
Definition enums.h:2135
@ 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_STATUS_ALWAYS_HITS
Definition enums.h:2880
@ 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 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 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 UseBuf(INT_PTR)
Loads a s32 pointer for use with subsequent EVT_BUF_READ commands.
Definition macros.h:389
#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 BufRead1(VAR)
Consumes the next s32 from the buffer and stores it in the given variable.
Definition macros.h:392
#define IfGt(LVAR, RVAR)
Marks the beginning of an if statement that only executes if LVAR <= RVAR.
Definition macros.h:278
#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 LVar5
Definition macros.h:153
#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 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 DMG_STATUS_KEY(typeFlag, duration, chance)
Definition macros.h:228
#define LVar1
Definition macros.h:149
#define LVarA
Definition macros.h:158
#define IfNotFlag(LVAR, RVAR)
Marks the beginning of an if statement that only executes if the RVAR flag is unset on LVAR,...
Definition macros.h:292
#define Wait(NUM_FRAMES)
Blocks for the given number of frames.
Definition macros.h:254
#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 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