Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
kooper.c
Go to the documentation of this file.
1#include "common.h"
2#include "../src/world/partners.h"
3#include "sprite/npc/WorldKooper.h"
4#include "sprite/player.h"
5#include "effects.h"
6
7#define NAMESPACE world_kooper
8
13
21BSS s32 N(HasItem);
25BSS s32 D_802BEC7C; // padding?
26
27enum {
31};
32
34
46
58
60 N(HeldItemIdx) = test_item_entity_position(kooper->pos.x, kooper->pos.y, kooper->pos.z, kooper->collisionDiameter);
61
62 if (N(HeldItemIdx) < 0) {
63 return false;
64 }
65
66 N(HasItem) = true;
69 return true;
70}
71
72void N(init)(Npc* kooper) {
73 kooper->collisionHeight = 37;
74 kooper->collisionDiameter = 24;
75 kooper->collisionChannel = COLLIDER_FLAG_IGNORE_PLAYER;
76 N(TriggeredBattle) = false;
77}
78
79API_CALLABLE(N(TakeOut)) {
80 Npc* kooper = script->owner2.npc;
81
82 if (isInitialCall) {
84 }
85
87 return ApiStatus_DONE1;
88 } else {
89 return ApiStatus_BLOCK;
90 }
91}
92
98
101
102API_CALLABLE(N(Update)) {
104 Npc* kooper = script->owner2.npc;
106 Entity* entity;
107
108 if (isInitialCall) {
111 TweesterTouchingPartner = nullptr;
112 }
113
114 playerData->partnerUsedTime[PARTNER_KOOPER]++;
116
117 if (entity == nullptr) {
120 return ApiStatus_BLOCK;
121 }
122
123 switch (N(TweesterPhysicsPtr)->state) {
125 N(TweesterPhysicsPtr)->state++;
126 N(TweesterPhysicsPtr)->prevFlags = kooper->flags;
127 N(TweesterPhysicsPtr)->radius = fabsf(dist2D(kooper->pos.x, kooper->pos.z,
128 entity->pos.x, entity->pos.z));
129 N(TweesterPhysicsPtr)->angle = atan2(entity->pos.x, entity->pos.z, kooper->pos.x, kooper->pos.z);
130 N(TweesterPhysicsPtr)->angularVel = 6.0f;
131 N(TweesterPhysicsPtr)->liftoffVelPhase = 50.0f;
132 N(TweesterPhysicsPtr)->countdown = 120;
134 kooper->flags &= ~NPC_FLAG_GRAVITY;
137
138 kooper->pos.x = entity->pos.x + (sinAngle * N(TweesterPhysicsPtr)->radius);
139 kooper->pos.z = entity->pos.z - (cosAngle * N(TweesterPhysicsPtr)->radius);
140
141 N(TweesterPhysicsPtr)->angle = clamp_angle(N(TweesterPhysicsPtr)->angle - N(TweesterPhysicsPtr)->angularVel);
142 if (N(TweesterPhysicsPtr)->radius > 20.0f) {
143 N(TweesterPhysicsPtr)->radius--;
144 } else if (N(TweesterPhysicsPtr)->radius < 19.0f) {
145 N(TweesterPhysicsPtr)->radius++;
146 }
147
148 liftoffVelocity = sin_rad(DEG_TO_RAD(N(TweesterPhysicsPtr)->liftoffVelPhase)) * 3.0f;
149
150 N(TweesterPhysicsPtr)->liftoffVelPhase += 3.0f;
151
152 if (N(TweesterPhysicsPtr)->liftoffVelPhase > 150.0f) {
153 N(TweesterPhysicsPtr)->liftoffVelPhase = 150.0f;
154 }
155 kooper->pos.y += liftoffVelocity;
156
157 kooper->renderYaw = clamp_angle(360.0f - N(TweesterPhysicsPtr)->angle);
158 N(TweesterPhysicsPtr)->angularVel += 0.8;
159 if (N(TweesterPhysicsPtr)->angularVel > 40.0f) {
160 N(TweesterPhysicsPtr)->angularVel = 40.0f;
161 }
162
163 if (--N(TweesterPhysicsPtr)->countdown == 0) {
164 N(TweesterPhysicsPtr)->state++;
165 }
166 break;
168 kooper->flags = N(TweesterPhysicsPtr)->prevFlags;
169 N(TweesterPhysicsPtr)->countdown = 30;
170 N(TweesterPhysicsPtr)->state++;
171 break;
175
176 if (--N(TweesterPhysicsPtr)->countdown == 0) {
178 TweesterTouchingPartner = nullptr;
179 }
180 break;
181 }
182 return ApiStatus_BLOCK;
183}
184
193
199
200API_CALLABLE(N(UseAbility)) {
204 Npc* kooper = script->owner2.npc;
207 f32 posX, posY, posZ, hitLength;
209 s32 actionState;
210 f32 moveAngle;
212
213 #define USE_STATE functionTemp[0]
214 enum {
223 };
224
225 if (currentEncounter->unk_08 != 0) {
226 return ApiStatus_BLOCK;
227 }
228
229 if (isInitialCall) {
231 if (playerStatus->animFlags & PA_FLAG_CHANGING_MAP) {
232 return ApiStatus_DONE2;
233 }
234
235 if (!N(TriggeredBattle)) {
236 actionState = playerStatus->actionState;
237 if (actionState == ACTION_STATE_IDLE
238 || actionState == ACTION_STATE_WALK
239 || actionState == ACTION_STATE_RUN
240 ) {
241 script->USE_STATE = SHELL_TOSS_STATE_BEGIN;
242 } else {
243 return ApiStatus_DONE2;
244 }
245 } else if (partnerStatus->partnerActionState == PARTNER_ACTION_NONE) {
246 partnerStatus->partnerActionState = PARTNER_ACTION_KOOPER_GATHER;
247 partnerStatus->actingPartner = PARTNER_KOOPER;
248 script->USE_STATE = SHELL_TOSS_STATE_HOLD;
250 N(ShellTossHoldTime) = 30;
251 }
252 }
253
254 switch (script->USE_STATE) {
256 if (playerStatus->inputDisabledCount != 0
257 || playerStatus->timeInAir != 0
258 || !(kooper->flags & NPC_FLAG_GROUNDED)
259 ) {
260 return ApiStatus_DONE2;
261 }
262
264 script->functionTemp[2] = playerStatus->inputDisabledCount;
265 N(LockingPlayerInput) = true;
267 N(HasItem) = false;
270 partnerStatus->actingPartner = PARTNER_KOOPER;
271 partnerStatus->partnerActionState = PARTNER_ACTION_KOOPER_GATHER;
274 kooper->duration = 4;
275 kooper->yaw = atan2(kooper->pos.x, kooper->pos.z,
276 playerStatus->pos.x, playerStatus->pos.z);
277 script->USE_STATE++;
278 break;
279
281 if (playerStatus->actionState == ACTION_STATE_HIT_FIRE
282 || playerStatus->actionState == ACTION_STATE_KNOCKBACK
283 || playerStatus->actionState == ACTION_STATE_HIT_LAVA
284 || playerStatus->timeInAir != 0
285 ) {
287 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
288 break;
289 }
290
292 kooper->moveToPos.x = N(ShellTossPosX) = playerStatus->pos.x;
293 kooper->moveToPos.y = N(ShellTossPosY) = playerStatus->pos.y;
294 kooper->moveToPos.z = N(ShellTossPosZ) = playerStatus->pos.z;
295 kooper->curAnim = ANIM_WorldKooper_Run;
296 add_vec2D_polar(&kooper->moveToPos.x, &kooper->moveToPos.z,
297 playerStatus->colliderDiameter / 3, playerStatus->targetYaw);
298 moveAngle = clamp_angle(playerStatus->targetYaw + (N(PlayerWasFacingLeft) ? 90.0f : -90.0f));
299 add_vec2D_polar(&kooper->moveToPos.x, &kooper->moveToPos.z,
300 playerStatus->colliderDiameter / 4, moveAngle);
301 kooper->pos.x += (kooper->moveToPos.x - kooper->pos.x) / kooper->duration;
302 kooper->pos.y += (kooper->moveToPos.y - kooper->pos.y) / kooper->duration;
303 kooper->pos.z += (kooper->moveToPos.z - kooper->pos.z) / kooper->duration;
304
305 kooper->duration--;
306 if (kooper->duration != 0) {
307 break;
308 }
309
311 if (script->functionTemp[2] < playerStatus->inputDisabledCount) {
312 if (!(playerStatus->animFlags & PA_FLAG_CHANGING_MAP)) {
314 } else {
316 }
317 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
318 break;
319 }
320
321 kooper->yaw = playerStatus->targetYaw;
322 kooper->jumpVel = 18.0f;
323 kooper->jumpScale = 3.0f;
325 kooper->collisionHeight = 12;
326
327 kooper->moveToPos.y = playerStatus->pos.y;
328 kooper->moveToPos.z = playerStatus->pos.y + playerStatus->colliderHeight / 3;
331
332#if VERSION_PAL
333 playerStatus->gravityIntegrator[0] = 0;
334 playerStatus->gravityIntegrator[1] = 0;
335 playerStatus->gravityIntegrator[2] = 0;
336 playerStatus->gravityIntegrator[3] = 0;
337#endif
338
340 N(ShellTossKickFalling) = false;
342 script->USE_STATE = SHELL_TOSS_STATE_JUMP;
343 // fallthrough
344
346 if (playerStatus->actionState == ACTION_STATE_HIT_FIRE
347 || playerStatus->actionState == ACTION_STATE_KNOCKBACK
348 || playerStatus->actionState == ACTION_STATE_HIT_LAVA
349 ) {
350 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
351 break;
352 }
353
354 kooper->jumpVel -= kooper->jumpScale;
355 playerStatus->pos.y += kooper->jumpVel;
356 if (kooper->jumpVel < 0.0f) {
357 if (!N(ShellTossKickFalling)) {
358 N(ShellTossKickFalling) = true;
360 }
361 }
362
363 posX = playerStatus->pos.x;
364 posY = (playerStatus->pos.y + playerStatus->colliderHeight / 2) - kooper->jumpVel;
365 posZ = playerStatus->pos.z;
366 testLength = hitLength = playerStatus->colliderHeight / 2;
367
368 if ((npc_raycast_up(COLLIDER_FLAG_IGNORE_PLAYER, &posX, &posY, &posZ, &hitLength)) && (hitLength < testLength)) {
370 playerStatus->pos.y = posY - playerStatus->colliderHeight;
372 }
373
374 if (!(kooper->jumpVel > 0.0f) && (playerStatus->pos.y < kooper->moveToPos.z)) {
375 N(D_802BEC5C) = 0;
377 partnerStatus->actingPartner = PARTNER_KOOPER;
378 partnerStatus->partnerActionState = PARTNER_ACTION_KOOPER_TOSS;
379 kooper->rot.z = 0.0f;
380 kooper->planarFlyDist = 0.0f;
381 kooper->moveSpeed = 8.0f;
384 fx_damage_stars(FX_DAMAGE_STARS_3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
385 sin_deg(playerStatus->targetYaw), -1.0f, -cos_deg(playerStatus->targetYaw), 3);
387
388 if (N(LockingPlayerInput)) {
390 N(LockingPlayerInput) = false;
391 }
392
393 script->USE_STATE = SHELL_TOSS_STATE_KICK;
394 N(ShellTossKickFalling) = false;
398 }
399 break;
400
402 if (playerStatus->actionState == ACTION_STATE_HIT_FIRE
403 || playerStatus->actionState == ACTION_STATE_KNOCKBACK
404 ) {
405 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
406 break;
407 }
408
409 // check the forward collision for kooper
410 #define TEST_COLLISION_AT_ANGLE(testAngle) \
411 ( \
412 posX = kooper->pos.x, \
413 posY = kooper->pos.y, \
414 posZ = kooper->pos.z, \
415 npc_test_move_taller_with_slipping(COLLIDER_FLAG_IGNORE_SHELL, \
416 &posX, &posY, &posZ, kooper->moveSpeed, testAngle, \
417 kooper->collisionHeight, kooper->collisionDiameter / 2) \
418 )
419
420 if (TEST_COLLISION_AT_ANGLE(kooper->yaw - 20.0f)) {
423 }
424
425 fx_damage_stars(FX_DAMAGE_STARS_3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
426 sin_deg(kooper->yaw), -1.0f, -cos_deg(kooper->yaw), 1);
428 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
429 break;
430 }
431
432 if (TEST_COLLISION_AT_ANGLE(kooper->yaw + 20.0f)) {
435 }
436
437 fx_damage_stars(FX_DAMAGE_STARS_3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
438 sin_deg(kooper->yaw), -1.0f, -cos_deg(kooper->yaw), 1);
440 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
441 break;
442 }
443
447 }
448
449 fx_damage_stars(FX_DAMAGE_STARS_3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
450 sin_deg(kooper->yaw), -1.0f, -cos_deg(kooper->yaw), 1);
452 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
453 break;
454 }
455
456 kooper->pos.x = posX;
457 kooper->pos.y = posY;
458 kooper->pos.z = posZ;
459 kooper->planarFlyDist += kooper->moveSpeed;
461
462 kooper->moveSpeed += 2.0;
463 if (kooper->moveSpeed > 14.0) {
464 kooper->moveSpeed = 14.0f;
465 }
466
468 kooper->pos.y += (playerStatus->pos.y - kooper->pos.y) / 10.0f;
469 }
470
472
473 if ((kooper->flags & NPC_FLAG_COLLIDING_WITH_NPC)) {
474 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
475 kooper->moveSpeed = 0.0f;
477 break;
478 }
479
482 fx_damage_stars(FX_DAMAGE_STARS_3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
483 sin_deg(kooper->yaw), -1.0f, -cos_deg(kooper->yaw), 1);
485 script->USE_STATE = SHELL_TOSS_STATE_PICKUP;
486 N(ShellTossHoldTime) = 8;
487 kooper->moveSpeed -= 4.0;
488 if (kooper->moveSpeed < 0.01) {
489 kooper->moveSpeed = 0.01f;
490 kooper->planarFlyDist += 1.0;
491 }
494 script->USE_STATE = SHELL_TOSS_STATE_HOLD;
495 N(ShellTossHoldTime) = 30;
496 kooper->moveSpeed = 0.0f;
497 } else {
498 if (kooper->planarFlyDist > 140.0f) {
499 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
500 kooper->moveSpeed = 0.0f;
502 } else if (kooper->planarFlyDist > 105.0f) {
503 kooper->moveSpeed -= 4.0;
504 if (kooper->moveSpeed < 0.01) {
505 kooper->moveSpeed = 0.01f;
506 kooper->planarFlyDist += 1.0;
507 }
508 }
509 }
510 break;
511
513 posX = kooper->pos.x;
514 posY = kooper->pos.y;
515 posZ = kooper->pos.z;
516
518 &posX, &posY, &posZ, kooper->moveSpeed, kooper->yaw,
519 kooper->collisionHeight, ( kooper->collisionDiameter / 2));
520
521 kooper->pos.x = posX;
522 kooper->pos.y = posY;
523 kooper->pos.z = posZ;
524
525 kooper->planarFlyDist += kooper->moveSpeed;
527 kooper->moveSpeed -= 6.0;
528
529 if (kooper->moveSpeed < 0.01) {
530 kooper->moveSpeed = 0.01f;
531 kooper->planarFlyDist += 1.0;
532 }
533
534 if (N(ShellTossHoldTime) == 0) {
535 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
536 }
538 break;
539
541 if (N(ShellTossHoldTime) != 0) {
543 } else {
544 script->USE_STATE = SHELL_TOSS_STATE_RETURN;
545 }
546 break;
547 }
548
549 if (script->USE_STATE == SHELL_TOSS_STATE_RETURN) {
551 if (playerStatus->actionState == ACTION_STATE_HIT_FIRE
552 || playerStatus->actionState == ACTION_STATE_KNOCKBACK
553 ) {
554 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
555 } else {
558 npc_move_heading(kooper, -kooper->moveSpeed, kooper->yaw);
559 kooper->planarFlyDist -= kooper->moveSpeed;
561 kooper->moveSpeed += 4.0/3.0;
562
563 if (kooper->moveSpeed > 14.0) {
564 kooper->moveSpeed = 14.0f;
565 }
566
567 if (npc_try_snap_to_ground(kooper, 6.0f) == 0) {
568 kooper->pos.y += (playerStatus->pos.y - kooper->pos.y) / 10.0f;
569 }
570
571 posX = kooper->pos.x;
572 posY = kooper->pos.y;
573 posZ = kooper->pos.z;
574
576 &posX, &posY, &posZ, kooper->moveSpeed, clamp_angle(kooper->yaw + 180.0f),
577 kooper->collisionHeight, kooper->collisionDiameter)
578 ) {
579 kooper->pos.x = posX;
580 kooper->pos.y = posY;
581 kooper->pos.z = posZ;
583 testLength = sin_deg(kooper->yaw + 180.0f);
584 fx_damage_stars(FX_DAMAGE_STARS_3, kooper->pos.x, kooper->pos.y + kooper->collisionHeight, kooper->pos.z,
585 testLength, -1.0f, -cos_deg(kooper->yaw + 180.0f), 1);
586 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
587 } else {
588 if (N(HasItem)) {
590 posX = kooper->pos.x;
591 posY = kooper->pos.y + 8.0f;
592 posZ = kooper->pos.z;
593
594 moveAngle = clamp_angle(playerStatus->targetYaw - (N(PlayerWasFacingLeft) ? 90.0f : -90.0f));
595
596 add_vec2D_polar(&posX, &posZ, 4.0f, moveAngle);
597 heldItem->pos.x = posX;
598 heldItem->pos.y = posY;
599 heldItem->pos.z = posZ;
600 }
601
602 if (kooper->planarFlyDist + 15.0f < kooper->moveSpeed) {
603 script->USE_STATE = SHELL_TOSS_STATE_FINISH;
604 } else if (kooper->planarFlyDist + 15.0f < 35.0f) {
605 kooper->moveSpeed -= 4.0;
606 if (kooper->moveSpeed < 4.0) {
607 kooper->moveSpeed = 4.0;
608 }
609 }
610 }
611 }
612 }
613
614 if (script->USE_STATE == SHELL_TOSS_STATE_FINISH) {
615 if (N(LockingPlayerInput)) {
617 N(LockingPlayerInput) = false;
618 }
619
623 partnerStatus->actingPartner = PARTNER_NONE;
624 partnerStatus->partnerActionState = PARTNER_ACTION_NONE;
625 kooper->jumpVel = 0.0f;
626 kooper->collisionHeight = 24;
627 kooper->curAnim = ANIM_WorldKooper_Walk;
630
631 if (N(HasItem)) {
633 N(HasItem) = false;
634 }
635
636 N(TriggeredBattle) = false;
638 return ApiStatus_DONE2;
639 }
640
641 return ApiStatus_BLOCK;
642}
643
649
650API_CALLABLE(N(PutAway)) {
651 Npc* kooper = script->owner2.npc;
652
653 if (isInitialCall) {
655 }
656
658}
659
665
669 f32 kooperX;
670 f32 kooperZ;
672 f32 kooperY;
678
680 enemyX = enemy->pos.x;
681 enemyY = enemy->pos.y;
682 enemyZ = enemy->pos.z;
683
684 kooperX = kooper->pos.x;
685 kooperY = kooper->pos.y;
686 kooperZ = kooper->pos.z;
687
688 enemyCollHeight = enemy->collisionHeight;
689 enemyCollRadius = enemy->collisionDiameter * 0.55;
690
691 kooperCollHeight = kooper->collisionHeight;
692 kooperCollRadius = kooper->collisionDiameter * 0.8;
693
696
697 xTemp = kooper->pos.x;
698 yTemp = kooper->pos.y;
699 zTemp = kooper->pos.z;
700
703 ) {
704 return false;
705 }
706
708 return false;
709 }
710
712 return false;
713 }
714
718
721 return true;
722 }
723 }
724 return false;
725}
726
730 N(TriggeredBattle) = false;
731
732 if (partnerStatus->partnerActionState != PARTNER_ACTION_NONE) {
733 if (partnerStatus->partnerActionState == PARTNER_ACTION_KOOPER_TOSS) {
734 N(TriggeredBattle) = true;
735 }
736
737 if (N(LockingPlayerInput)) {
739 N(LockingPlayerInput) = false;
740 }
741
744
745 kooper->jumpVel = 0.0f;
746 kooper->flags &= ~NPC_FLAG_JUMPING;
748
753
754 partnerStatus->actingPartner = PARTNER_NONE;
755 partnerStatus->partnerActionState = PARTNER_ACTION_NONE;
756 }
757}
758
759void N(post_battle)(Npc* npc) {
760 if (N(TriggeredBattle)) {
763 }
764}
s32 partner_use_ability(void)
Definition partners.c:964
BSS s32 PopupMenu_SelectedIndex
s32 b32
Bytecode EvtScript[]
#define sin_deg
#define clamp_angle
#define cos_deg
#define atan2
#define mem_clear
@ FX_DAMAGE_STARS_3
Definition effects.h:359
@ TWEESTER_PARTNER_HOLD
Definition enums.h:2463
@ TWEESTER_PARTNER_ATTRACT
Definition enums.h:2462
@ TWEESTER_PARTNER_INIT
Definition enums.h:2461
@ TWEESTER_PARTNER_RELEASE
Definition enums.h:2464
@ ITEM_ENTITY_FLAG_CANT_COLLECT
Definition enums.h:2701
@ PS_FLAG_FALLING
Definition enums.h:3070
@ PS_FLAG_JUMPING
Definition enums.h:3069
@ PARTNER_ACTION_KOOPER_GATHER
Definition enums.h:2968
@ PARTNER_ACTION_KOOPER_TOSS
Definition enums.h:2969
@ PARTNER_ACTION_NONE
Definition enums.h:2966
@ COLLIDER_FLAG_IGNORE_PLAYER
Definition enums.h:4281
@ COLLIDER_FLAG_IGNORE_SHELL
Definition enums.h:4280
@ NPC_PARTNER
Definition enums.h:2514
@ PA_FLAG_CHANGING_MAP
Definition enums.h:3146
@ SOUND_IMMUNE
Definition enums.h:748
@ SOUND_NONE
Definition enums.h:550
@ SOUND_KOOPER_SHELL_SWIRL
Definition enums.h:999
@ SOUND_KOOPER_SHELL_KICK
Definition enums.h:998
@ SOUND_QUICK_PLAYER_JUMP
Definition enums.h:1427
@ SOUND_KOOPER_PICKUP
Definition enums.h:1000
@ PARTNER_NONE
Definition enums.h:2919
@ PARTNER_KOOPER
Definition enums.h:2921
@ ACTION_STATE_HIT_LAVA
Definition enums.h:2437
@ ACTION_STATE_IDLE
Definition enums.h:2412
@ ACTION_STATE_KNOCKBACK
Definition enums.h:2436
@ ACTION_STATE_WALK
Definition enums.h:2413
@ ACTION_STATE_HIT_FIRE
Causes Mario to fly up and take damage. Used for fire bars.
Definition enums.h:2435
@ ACTION_STATE_RUN
Definition enums.h:2414
@ CAMERA_MOVE_IGNORE_PLAYER_Y
Definition enums.h:4317
@ SURFACE_INTERACT_RUN
Definition enums.h:4270
@ SOUND_SPACE_DEFAULT
Definition enums.h:1740
@ GLOBAL_OVERRIDES_40
Definition enums.h:3910
@ CAM_DEFAULT
Definition enums.h:1826
@ NPC_FLAG_FLYING
Definition enums.h:3035
@ NPC_FLAG_JUMPING
Definition enums.h:3043
@ NPC_FLAG_IGNORE_WORLD_COLLISION
Definition enums.h:3038
@ NPC_FLAG_IGNORE_PLAYER_COLLISION
Definition enums.h:3040
@ NPC_FLAG_COLLIDING_WITH_NPC
Definition enums.h:3057
@ NPC_FLAG_GRAVITY
Definition enums.h:3041
@ NPC_FLAG_GROUNDED
Definition enums.h:3044
@ NPC_FLAG_IGNORE_CAMERA_FOR_YAW
Definition enums.h:3050
#define ApiStatus_DONE2
Definition evt.h:119
#define ApiStatus_DONE1
Definition evt.h:118
#define ApiStatus_BLOCK
Definition evt.h:117
f32 fabsf(f32 f)
void disable_npc_blur(Npc *npc)
Definition npc.c:1085
void partner_walking_update_motion(Npc *partner)
Definition partners.c:1202
void partner_clear_player_tracking(Npc *partner)
Definition partners.c:2433
s32 disable_player_input(void)
Definition 77480.c:989
ItemEntity * get_item_entity(s32 itemEntityIndex)
void partner_walking_update_player_tracking(Npc *partner)
Definition partners.c:1175
void enable_npc_blur(Npc *npc)
Definition npc.c:1064
s32 enable_player_input(void)
Definition 77480.c:997
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
Definition 43F0.c:670
void start_bounce_b(void)
Definition 7E9D0.c:310
void set_action_state(s32 actionState)
Definition 7E9D0.c:209
b32 npc_test_move_taller_with_slipping(s32, f32 *, f32 *, f32 *, f32, f32, f32, f32)
b32 npc_raycast_up(s32, f32 *, f32 *, f32 *, f32 *)
void suggest_player_anim_allow_backward(AnimID anim)
Definition 77480.c:893
void partner_walking_enable(Npc *partner, s32 val)
Definition partners.c:1133
f32 sin_rad(f32 x)
Definition 43F0.c:713
void set_item_entity_flags(s32 itemEntityIndex, s32 flag)
void sin_cos_rad(f32 rad, f32 *outSinTheta, f32 *outCosTheta)
Definition 43F0.c:706
void add_vec2D_polar(f32 *x, f32 *y, f32 r, f32 theta)
Definition 43F0.c:685
f32 get_clamped_angle_diff(f32, f32)
Definition 43F0.c:606
s32 npc_try_snap_to_ground(Npc *npc, f32 velocity)
Definition npc.c:580
void npc_surface_spawn_fx(Npc *npc, SurfaceInteractMode mode)
Definition surfaces.c:394
void npc_do_other_npc_collision(Npc *npc)
Definition npc.c:380
EncounterStatus gCurrentEncounter
Definition encounter.c:175
void npc_move_heading(Npc *npc, f32 speed, f32 yaw)
Definition npc.c:983
s32 partner_init_get_out(Npc *npc)
Definition partners.c:2249
s32 partner_init_put_away(Npc *partner)
Definition partners.c:2175
s32 partner_put_away(Npc *partner)
Definition partners.c:2182
s32 partner_force_player_flip_done(void)
Definition partners.c:2451
s32 partner_get_out(Npc *partner)
Definition partners.c:2256
void sfx_play_sound_at_npc(s32 soundID, s32 arg1, s32 npcID)
void sfx_stop_sound(s32 soundID)
ApiStatus HasItem(Evt *script, b32 isInitialCall)
#define End
Signals the end of EVT script data. A script missing this will likely crash on load.
Definition macros.h:214
#define COLLISION_WITH_ENTITY_BIT
Definition macros.h:163
#define BSS
Definition macros.h:6
#define DEG_TO_RAD(deg)
Definition macros.h:145
#define SQ(x)
Definition macros.h:177
#define Call(FUNC, ARGS...)
Calls a given C EVT API function with any number of arguments.
Definition macros.h:577
#define Return
Kills the current EVT thread.
Definition macros.h:218
s32 gOverrideFlags
Definition main_loop.c:10
Entity * TweesterTouchingPartner
Definition 7B440.c:4
CollisionStatus gCollisionStatus
Definition 7BB60.c:5
PartnerStatus gPartnerStatus
Definition partners.c:42
s32 NpcHitQueryColliderID
Camera gCameras[4]
Definition cam_main.c:16
PlayerData gPlayerData
Definition 77480.c:39
PlayerStatus gPlayerStatus
Definition 77480.c:38
void N init(Npc *kooper)
Definition kooper.c:72
EvtScript EVS_WorldKooper_TakeOut
Definition kooper.c:93
s32 N check_for_item_collision(Npc *kooper)
Definition kooper.c:59
void N pre_battle(Npc *kooper)
Definition kooper.c:727
s32 ShellTossHitboxState
Definition kooper.c:33
void fx_damage_stars(s32, f32, f32, f32, f32, f32, f32, s32)
s32 N test_first_strike(Npc *kooper, Npc *enemy)
Definition kooper.c:666
#define TEST_COLLISION_AT_ANGLE(testAngle)
void auto_collect_item_entity(s32)
EvtScript EVS_WorldKooper_UseAbility
Definition kooper.c:644
s32 entity_try_partner_interaction_trigger(s32)
Definition entity.c:677
@ SHELL_TOSS_HITBOX_HIT_ENEMY
Definition kooper.c:30
@ SHELL_TOSS_HITBOX_ENABLED
Definition kooper.c:29
@ SHELL_TOSS_HITBOX_DISABLED
Definition kooper.c:28
s32 test_item_entity_position(f32, f32, f32, f32)
void N vertical_hit_interactable_entity(Npc *kooper)
Definition kooper.c:47
void N try_cancel_tweester(Npc *kooper)
Definition kooper.c:185
void N post_battle(Npc *npc)
Definition kooper.c:759
EvtScript EVS_WorldKooper_Update
Definition kooper.c:194
s32 N lateral_hit_interactable_entity(Npc *npc)
Definition kooper.c:35
BSS s32 D_802BEC7C
Definition kooper.c:25
EvtScript EVS_WorldKooper_PutAway
Definition kooper.c:660