Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
dmg_partner.c
Go to the documentation of this file.
1#include "battle/battle.h"
2#include "script_api/battle.h"
3#include "effects.h"
4
6
7void dispatch_event_partner(s32 lastEventType) {
9 Actor* partnerActor = battleStatus->partnerActor;
10 Evt* handleEventScript = partnerActor->handleEventScript;
11 s32 onHitID = partnerActor->handleEventScriptID;
12 Evt* script;
13
14 partnerActor->lastEventType = lastEventType;
16 partnerActor->handleEventScript = script;
17 partnerActor->handleEventScriptID = script->id;
18 script->owner1.actorID = ACTOR_PARTNER;
19
20 if (partnerActor->takeTurnScript != NULL) {
22 partnerActor->takeTurnScript = NULL;
23 }
24
25 if (handleEventScript != NULL) {
27 }
28}
29
32 Actor* partnerActor = battleStatus->partnerActor;
33 Evt* handleEventScript = partnerActor->handleEventScript;
34 s32 onHitID = partnerActor->handleEventScriptID;
35 Evt* script;
36
37 partnerActor->lastEventType = lastEventType;
39 partnerActor->handleEventScript = script;
40 partnerActor->handleEventScriptID = script->id;
41 script->owner1.actorID = ACTOR_PARTNER;
42
43 if (handleEventScript != NULL) {
45 }
46}
47
50 Actor* partner = battleStatus->partnerActor;
51 s32 currentTargetID = battleStatus->curTargetID;
52 s32 currentTargetPart = battleStatus->curTargetPart;
54 ActorState* state;
56
57 battleStatus->curTargetID2 = battleStatus->curTargetID;
58 battleStatus->curTargetPart2 = battleStatus->curTargetPart;
60 state = &partner->state;
61
62 if (target == NULL) {
63 return HIT_RESULT_HIT;
64 }
65
67 ASSERT(part != NULL);
68
69 if (target->stoneStatus == STATUS_KEY_STONE) {
70 return HIT_RESULT_IMMUNE;
71 }
72
73 if ((part->eventFlags & ACTOR_EVENT_FLAG_ILLUSORY) || target->transparentStatus == STATUS_KEY_TRANSPARENT) {
74 return HIT_RESULT_MISS;
75 }
76
77 // check partner jumping on top-spiky enemy (cannot be suppressed)
78 if ((battleStatus->curAttackElement & DAMAGE_TYPE_JUMP)
79 && (part->eventFlags & ACTOR_EVENT_FLAG_SPIKY_TOP)
80 && !(target->flags2 & ACTOR_FLAG_UPSIDE_DOWN)
81 ) {
84 }
85
86 // check partner contacting front-spiky enemy
87 if (!(battleStatus->curAttackElement & (DAMAGE_TYPE_NO_CONTACT | DAMAGE_TYPE_JUMP))
88 && (part->eventFlags & ACTOR_EVENT_FLAG_SPIKY_FRONT)
89 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SPIKY_FRONT)
91 ) {
96 }
97
98 // check partner contacting fiery enemy
99 if (!(battleStatus->curAttackElement & (DAMAGE_TYPE_NO_CONTACT | DAMAGE_TYPE_SMASH))
100 && (part->eventFlags & ACTOR_EVENT_FLAG_FIREY)
101 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_BURN_CONTACT)
102 ) {
106 return HIT_RESULT_BACKFIRE;
107 }
108
109 // special handling for air lift
110 if (battleStatus->curAttackElement & DAMAGE_TYPE_AIR_LIFT) {
111 // check partner airlifting top-spiky enemy
112 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)) {
113 if ((part->eventFlags & ACTOR_EVENT_FLAG_SPIKY_TOP)
114 && !(target->flags & ACTOR_FLAG_UPSIDE_DOWN)
115 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SPIKY_TOP)
116 ) {
120 return HIT_RESULT_BACKFIRE;
121 }
122
123 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)
124 && (part->eventFlags & ACTOR_EVENT_FLAG_ALT_SPIKY)
125 && !(target->flags & ACTOR_FLAG_UPSIDE_DOWN)
126 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_ALT_SPIKY)
127 ) {
131 return HIT_RESULT_BACKFIRE;
132 }
133 }
134
135 // check partner airlifting electrified enemy
136 if (partner->staticStatus != STATUS_KEY_STATIC
137 && (target->staticStatus == STATUS_KEY_STATIC || (part->eventFlags & ACTOR_EVENT_FLAG_ELECTRIFIED))
138 && !(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)
139 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SHOCK_CONTACT))
140 {
144 return HIT_RESULT_BACKFIRE;
145 }
146
147 // check partner airlifting fiery enemy
148 if (!(battleStatus->curAttackElement & (DAMAGE_TYPE_NO_CONTACT | DAMAGE_TYPE_SMASH))
149 && (part->eventFlags & ACTOR_EVENT_FLAG_FIREY)
150 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_BURN_CONTACT))
151 {
155 return HIT_RESULT_BACKFIRE;
156 }
158 }
159 return HIT_RESULT_HIT;
160}
161
164 Actor* partner = battleStatus->partnerActor;
165 s32 currentTargetID = battleStatus->curTargetID;
166 s32 currentTargetPartID = battleStatus->curTargetPart;
174 s32 wasStatusInflicted = FALSE;
175 Actor* target;
177 ActorState* state;
178 Evt* evt;
182
183 battleStatus->wasStatusInflicted = FALSE;
184 battleStatus->lastAttackDamage = 0;
185 battleStatus->attackerActorID = partner->actorID;
186 battleStatus->curTargetID2 = battleStatus->curTargetID;
187 battleStatus->curTargetPart2 = battleStatus->curTargetPart;
189 state = &partner->state;
190
191 if (target == NULL) {
192 return HIT_RESULT_HIT;
193 }
194
196
198
199 target->lastDamageTaken = 0;
200
205 } else {
206 if ((targetPart->eventFlags & ACTOR_EVENT_FLAG_ILLUSORY)
207 || (target->transparentStatus == STATUS_KEY_TRANSPARENT)
208 || (targetPart->eventFlags & ACTOR_EVENT_FLAG_BURIED && !(battleStatus->curAttackElement & DAMAGE_TYPE_QUAKE))
209 ) {
210 return HIT_RESULT_MISS;
211 }
212
213 if (target->stoneStatus == STATUS_KEY_STONE) {
215 show_immune_bonk(state->goalPos.x, state->goalPos.y, state->goalPos.z, 0, 1, 1);
216 show_next_damage_popup(state->goalPos.x, state->goalPos.y, state->goalPos.z, 0, 0);
217
219 return HIT_RESULT_NICE;
220 } else {
221 return HIT_RESULT_HIT;
222 }
223 }
224
225 if (targetPart->elementalImmunities & battleStatus->curAttackElement) {
227 }
228
229 // check jumping on spiky enemy
230 if (battleStatus->curAttackElement & DAMAGE_TYPE_JUMP
232 ) {
236 return HIT_RESULT_BACKFIRE;
237 }
238
239 // check explode on contact
240 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)
242 ) {
244
245 if (!(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_EXPLODE_CONTACT)) {
248 return HIT_RESULT_BACKFIRE;
249 }
250
252
254 return HIT_RESULT_NICE;
255 } else {
256 return HIT_RESULT_HIT;
257 }
258 }
259
260 // check touching fiery enemy
261 if (!(battleStatus->curAttackElement & (DAMAGE_TYPE_NO_CONTACT | DAMAGE_TYPE_SMASH))
262 && targetPart->eventFlags & ACTOR_EVENT_FLAG_FIREY
263 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_BURN_CONTACT)
264 ) {
268 return HIT_RESULT_BACKFIRE;
269 }
270
271 // check touching spiky-front enemy
272 if (!(battleStatus->curAttackElement & (DAMAGE_TYPE_NO_CONTACT | DAMAGE_TYPE_JUMP))
274 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SPIKY_FRONT)
275 ) {
279 return HIT_RESULT_BACKFIRE;
280 }
281
282 // check explode on ignition
284 && battleStatus->curAttackElement & DAMAGE_TYPE_FIRE
286 ) {
289
291 return HIT_RESULT_NICE;
292 } else {
293 return HIT_RESULT_HIT;
294 }
295 }
296
297 // unknown alternate spiky #1
298 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)
300 && !(target->flags & ACTOR_FLAG_UPSIDE_DOWN)
301 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_ALT_SPIKY)
302 ) {
306 return HIT_RESULT_BACKFIRE;
307 }
308
309 // unknown alternate spiky top
310 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)
312 && !(target->flags & ACTOR_FLAG_UPSIDE_DOWN)
313 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SPIKY_TOP)
314 ) {
318 return HIT_RESULT_BACKFIRE;
319 }
320
321 // check explode on ignition (duplicate of previous check)
323 && battleStatus->curAttackElement & DAMAGE_TYPE_FIRE
325 ) {
328
330 return HIT_RESULT_NICE;
331 } else {
332 return HIT_RESULT_HIT;
333 }
334 }
335
336 // check shock contact for airlift
337 if (battleStatus->curAttackElement & DAMAGE_TYPE_AIR_LIFT) {
338 if (partner->staticStatus != STATUS_KEY_STATIC
339 && (target->staticStatus == STATUS_KEY_STATIC || targetPart->eventFlags & ACTOR_EVENT_FLAG_ELECTRIFIED)
340 && !(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT)
341 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SHOCK_CONTACT)
342 ) {
346 return HIT_RESULT_BACKFIRE;
347 } else {
348 return HIT_RESULT_HIT;
349 }
350 }
351
352 if (battleStatus->curAttackElement & DAMAGE_TYPE_FIRE) {
353 fx_ring_blast(0, state->goalPos.x, state->goalPos.y, state->goalPos.z + 5.0f, 1.0f, 24);
355 }
356
357 if (battleStatus->curAttackElement & DAMAGE_TYPE_SHOCK) {
360 }
361
362 if (battleStatus->curAttackElement & DAMAGE_TYPE_WATER) {
363 fx_water_splash(0, state->goalPos.x, state->goalPos.y, state->goalPos.z + 5.0f, 1.0f, 24);
365 }
366
367 if (battleStatus->curAttackElement & DAMAGE_TYPE_ICE) {
368 fx_big_snowflakes(0, state->goalPos.x, state->goalPos.y, state->goalPos.z + 5.0f);
370 }
371
372 if (partner->staticStatus != STATUS_KEY_STATIC
373 && (target->staticStatus == STATUS_KEY_STATIC || targetPart->eventFlags & ACTOR_EVENT_FLAG_ELECTRIFIED)
374 && !(battleStatus->curAttackElement & (DAMAGE_TYPE_NO_CONTACT | DAMAGE_TYPE_SHOCK))
375 && !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SHOCK_CONTACT)
376 ) {
378 }
379
381 battleStatus->curAttackElement &= ~DAMAGE_TYPE_IGNORE_DEFENSE;
382 }
383
384 statusChanceOrDefense = get_defense(target, targetPart->defenseTable, battleStatus->curAttackElement);
385
386 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_IGNORE_DEFENSE)) {
387 statusChanceOrDefense += target->defenseBoost;
388 }
389
390 damageDealt = battleStatus->curAttackDamage + partner->attackBoost;
391
393 if (battleStatus->curAttackElement & DAMAGE_TYPE_BLAST
395 ) {
397 damageDealt = target->curHP;
398 }
399 }
400
401 if (battleStatus->curAttackElement & DAMAGE_TYPE_STATUS_ALWAYS_HITS) {
403 damageDealt = 0;
404 }
405
406 if (partner->debuff == STATUS_KEY_SHRINK) {
407 if (damageDealt != 0) {
408 damageDealt /= 2;
409
410 if (damageDealt == 0) {
411 damageDealt = 1;
412 }
413 }
414 }
415
416 if (damageDealt > 99) {
417 damageDealt = 99;
418 }
419
420 if (damageDealt < 0) {
422 }
423
425 target->hpChangeCounter = 0;
426
427 if (damageDealt < 0) {
428 damageDealt = 0;
429 }
430
431 if (battleStatus->curAttackElement & DAMAGE_TYPE_POWER_BOUNCE && damageDealt > 0) {
432 damageDealt += battleStatus->powerBounceCounter;
433
434 if (damageDealt < 1) {
435 damageDealt = 1;
436 }
437 }
438
439 battleStatus->lastAttackDamage = 0;
440
441 if (damageDealt < 1) {
442 target->hpChangeCounter = 0;
443
444 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_STATUS_ALWAYS_HITS)) {
448 } else {
450 if (target->curHP < 1) {
452 } else {
454 }
455 }
456
457 battleStatus->lastAttackDamage = 0;
458 } else {
459 target->damageCounter += damageDealt;
460 target->hpChangeCounter -= damageDealt;
461 battleStatus->lastAttackDamage = 0;
464
468 && !(targetPart->targetFlags & ACTOR_PART_TARGET_NO_DAMAGE)
469 ) {
470 target->curHP -= damageDealt;
471
472 if (target->curHP < 1) {
473 target->curHP = 0;
475 }
476 }
477
478 battleStatus->lastAttackDamage += damageDealt;
479 target->lastDamageTaken = battleStatus->lastAttackDamage;
480 target->hpChangeCounter = 0;
481 }
482
484 if (partner->staticStatus == STATUS_KEY_STATIC
485 || !(target->staticStatus == STATUS_KEY_STATIC || (targetPart->eventFlags & ACTOR_EVENT_FLAG_ELECTRIFIED))
486 || battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT
487 || battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SHOCK_CONTACT
488 ) {
492 show_immune_bonk(state->goalPos.x, state->goalPos.y, state->goalPos.z, 0, 1, 3);
494 return HIT_RESULT_NICE;
495 } else {
496 return HIT_RESULT_HIT;
497 }
498 }
499
503 return HIT_RESULT_BACKFIRE;
504 }
505 }
506
510 }
511
514 }
515
516 if (target->curHP < 1) {
519 }
520 }
521 } else if (dispatchEvent == EVENT_DEATH) {
523 }
524
527 }
528
530 if (battleStatus->curAttackElement & DAMAGE_TYPE_SPIN_SMASH) {
531 if (dispatchEvent == EVENT_HIT) {
533 }
534
535 if (dispatchEvent == EVENT_DEATH) {
537 }
538
540 }
541
543 if (!(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT) && targetPart->eventFlags & ACTOR_EVENT_FLAG_POWER_BOUNCE) {
546 }
547
548 if (dispatchEvent == EVENT_HIT) {
550 }
551
554 }
555
558 }
559
560 if (dispatchEvent == EVENT_DEATH) {
562 }
563 }
564
566 if (battleStatus->curAttackElement & DAMAGE_TYPE_JUMP && targetPart->eventFlags & ACTOR_EVENT_FLAG_GROUNDABLE) {
567 if (dispatchEvent == EVENT_HIT) {
569 }
570
573 }
574
576 }
577
579 if (battleStatus->curAttackElement & DAMAGE_TYPE_JUMP && targetPart->eventFlags & ACTOR_EVENT_FLAG_FLIPABLE) {
580 if (dispatchEvent == EVENT_HIT) {
582 }
583
586 }
587
588 if (!(target->flags & ACTOR_FLAG_FLIPPED)) {
590 }
591 }
592 }
593 }
594 }
595 }
596
598 && battleStatus->curAttackElement & DAMAGE_TYPE_JUMP
600 ) {
603 }
604
607 }
608
609 if (!(target->flags & ACTOR_FLAG_FLIPPED)) {
611 }
612 }
613
615 && battleStatus->curAttackElement & DAMAGE_TYPE_BLAST
617 ) {
618 if (dispatchEvent == EVENT_DEATH) {
620 }
621
624 }
625
626 if (dispatchEvent == EVENT_HIT) {
628 }
629
632 }
633
635 if (battleStatus->curAttackElement & (DAMAGE_TYPE_BLAST | DAMAGE_TYPE_FIRE)) {
636 if (dispatchEvent == EVENT_HIT) {
638 }
639
640 if (dispatchEvent == EVENT_DEATH) {
642 }
643
645 }
646
648 && battleStatus->lastAttackDamage >= 0
652 && !(targetPart->targetFlags & ACTOR_PART_TARGET_NO_DAMAGE)
653 ) {
654 #define INFLICT_STATUS(STATUS_TYPE) \
655 if ((battleStatus->curAttackStatus & STATUS_FLAG_##STATUS_TYPE) && \
656 try_inflict_status(target, STATUS_KEY_##STATUS_TYPE, STATUS_TURN_MOD_##STATUS_TYPE)) { \
657 wasSpecialHit = TRUE; \
658 wasStatusInflicted = TRUE; \
659 } \
660
669
670 #undef INFLICT_STATUS
671
672 if ((battleStatus->curAttackStatus & STATUS_FLAG_UNUSED) &&
675 wasStatusInflicted = TRUE;
676 }
677
678 statusChanceOrDefense = target->actorBlueprint->spookChance;
679
680 if (statusChanceOrDefense > 0) {
682 }
683
685
686 if (battleStatus->curAttackStatus & STATUS_FLAG_FEAR) {
688 if (!(target->debuff == STATUS_KEY_UNUSED
689 || target->debuff == STATUS_KEY_DIZZY
690 || target->debuff == STATUS_KEY_PARALYZE
691 || target->debuff == STATUS_KEY_SLEEP
692 || target->debuff == STATUS_KEY_FROZEN
693 || target->debuff == STATUS_KEY_STOP)
694 && !(target->flags & ACTOR_FLAG_FLIPPED)
695 ) {
697 wasStatusInflicted = TRUE;
706 } else {
709 }
710 } else {
713 }
714 }
715
716 if (wasStatusInflicted) {
719 }
720
723 }
724 }
725 }
726 }
727
728 statusChanceOrDefense = target->actorBlueprint->spookChance;
730
732 if (battleStatus->curAttackElement & DAMAGE_TYPE_FEAR) {
734 if (!(target->debuff == STATUS_KEY_UNUSED ||
735 target->debuff == STATUS_KEY_DIZZY ||
736 target->debuff == STATUS_KEY_PARALYZE ||
737 target->debuff == STATUS_KEY_SLEEP ||
738 target->debuff == STATUS_KEY_FROZEN ||
739 target->debuff == STATUS_KEY_STOP) && !(target->flags & ACTOR_FLAG_FLIPPED)) {
741 wasStatusInflicted = TRUE;
750 } else {
753 }
754 } else {
757 }
758 }
759 }
760
761 battleStatus->wasStatusInflicted = wasStatusInflicted;
763
764 if (!(target->flags & ACTOR_FLAG_NO_DMG_POPUP)) {
765 if (battleStatus->lastAttackDamage == 0) {
766 if (!wasSpecialHit && !wasStatusInflicted) {
767 show_immune_bonk(state->goalPos.x, state->goalPos.y, state->goalPos.z, 0, 1, 3);
768 }
769 } else if (!partImmuneToElement) {
770 if (battleStatus->curAttackElement & (DAMAGE_TYPE_MULTIPLE_POPUPS | DAMAGE_TYPE_SMASH)) {
771 show_next_damage_popup(state->goalPos.x, state->goalPos.y, state->goalPos.z, battleStatus->lastAttackDamage, 0);
772 } else {
773 show_primary_damage_popup(state->goalPos.x, state->goalPos.y, state->goalPos.z, battleStatus->lastAttackDamage, 0);
774 }
775
776 if (!(targetPart->targetFlags & ACTOR_PART_TARGET_NO_DAMAGE)) {
777 show_damage_fx(target, state->goalPos.x, state->goalPos.y, state->goalPos.z, battleStatus->lastAttackDamage);
778 }
779 }
780 }
781
784 ) {
785 if (battleStatus->lastAttackDamage > 0) {
787 }
788
789 if (battleStatus->lastAttackDamage > 0 || (battleStatus->curAttackElement & DAMAGE_TYPE_STATUS_ALWAYS_HITS && wasSpecialHit)) {
792 } else {
794 }
795 }
796 }
797
800 }
801
802 if (battleStatus->lastAttackDamage > 0) {
803 if (partImmuneToElement == 0) {
804 if (partner->actorTypeData1[5] != 0) {
805 sfx_play_sound_at_position(partner->actorTypeData1[5], SOUND_SPACE_DEFAULT, state->goalPos.x, state->goalPos.y, state->goalPos.z);
806 }
807
809
810 if (isFireDamage) {
812 } else if (isShockDamage) {
814 } else if (isIceDamage) {
816 } else {
818 }
819 }
820 }
821
822 if (battleStatus->lastAttackDamage < 1
823 && !(wasSpecialHit || wasStatusInflicted)
825 ) {
827 }
828
829 if (battleStatus->curAttackStatus & STATUS_FLAG_SLEEP && wasStatusInflicted) {
831 evt->varTable[0] = state->goalPos.x;
832 evt->varTable[1] = state->goalPos.y;
833 evt->varTable[2] = state->goalPos.z;
835 }
836
837 if (battleStatus->curAttackStatus & STATUS_FLAG_DIZZY && wasStatusInflicted) {
839 evt->varTable[0] = state->goalPos.x;
840 evt->varTable[1] = state->goalPos.y;
841 evt->varTable[2] = state->goalPos.z;
843 }
844
845 if (battleStatus->curAttackStatus & STATUS_FLAG_PARALYZE && wasStatusInflicted) {
847 evt->varTable[0] = state->goalPos.x;
848 evt->varTable[1] = state->goalPos.y;
849 evt->varTable[2] = state->goalPos.z;
851 }
852
853 if (battleStatus->curAttackStatus & STATUS_FLAG_POISON && wasStatusInflicted) {
855 evt->varTable[0] = state->goalPos.x;
856 evt->varTable[1] = state->goalPos.y;
857 evt->varTable[2] = state->goalPos.z;
859 }
860
861 if (battleStatus->curAttackStatus & STATUS_FLAG_STOP && wasStatusInflicted) {
863 evt->varTable[0] = state->goalPos.x;
864 evt->varTable[1] = state->goalPos.y;
865 evt->varTable[2] = state->goalPos.z;
867 }
868
869 if (battleStatus->curAttackStatus & STATUS_FLAG_FROZEN && wasStatusInflicted) {
871 evt->varTable[0] = state->goalPos.x;
872 evt->varTable[1] = state->goalPos.y;
873 evt->varTable[2] = state->goalPos.z;
874 evt->varTablePtr[3] = target;
876 }
877
878 if (battleStatus->curAttackStatus & STATUS_FLAG_SHRINK && wasStatusInflicted) {
880 evt->varTable[0] = state->goalPos.x;
881 evt->varTable[1] = state->goalPos.y;
882 evt->varTable[2] = state->goalPos.z;
883 evt->varTablePtr[3] = target;
885 }
886
887 if (battleStatus->curAttackElement & DAMAGE_TYPE_SMASH && target->actorType == ACTOR_TYPE_GOOMNUT_TREE) {
889 }
890
892
894 if (hitResult == HIT_RESULT_HIT) {
896 }
899 }
900 }
901
902 if (partner->staticStatus != STATUS_KEY_STATIC && (target->staticStatus == STATUS_KEY_STATIC ||
903 targetPart->eventFlags & ACTOR_EVENT_FLAG_ELECTRIFIED) && !(battleStatus->curAttackElement & DAMAGE_TYPE_NO_CONTACT) &&
904 !(battleStatus->curAttackEventSuppression & SUPPRESS_EVENT_SHOCK_CONTACT)) {
908 return HIT_RESULT_BACKFIRE;
909 }
910
911 return hitResult;
912}
913
916 Actor* partner = battleStatus->partnerActor;
917 ActorState* state = &partner->state;
920
921 battleStatus->curAttackDamage = damageAmount;
922
924 partner->hpChangeCounter += hpChange;
925
926 hpChange = partner->hpChangeCounter;
927 partner->curHP = 127;
928 partner->damageCounter += hpChange;
929 partner->hpChangeCounter -= hpChange;
930 battleStatus->lastAttackDamage = 0;
931 partner->curHP -= hpChange;
932
933 if (partner->curHP <= 0) {
934 event = EVENT_DEATH;
935 battleStatus->lastAttackDamage += partner->curHP;
936 partner->curHP = 0;
937 }
938
939 battleStatus->lastAttackDamage += hpChange;
940 partner->lastDamageTaken = battleStatus->lastAttackDamage;
941 battleStatus->curDamageSource = DMG_SRC_DEFAULT;
943 if (event == EVENT_HIT_COMBO) {
944 event = EVENT_HIT;
945 }
946 if (event == EVENT_ZERO_DAMAGE) {
947 event = EVENT_IMMUNE;
948 }
949 }
950
951 if (battleStatus->lastAttackDamage > 0) {
953
955 }
956
957 if (!stopMotion) {
959 }
960
961 show_next_damage_popup(state->goalPos.x, state->goalPos.y, state->goalPos.z,
962 battleStatus->lastAttackDamage, 1);
963 show_damage_fx(partner, state->goalPos.x, state->goalPos.y, state->goalPos.z,
964 battleStatus->lastAttackDamage);
965
966 if (battleStatus->lastAttackDamage > 0) {
968 }
969
971
974 return flagCheck;
975}
976
980
984
985API_CALLABLE(MakeOwnerTargetIndex) {
986 Bytecode* args = script->ptrReadPos;
987 Actor* actor = get_actor(script->owner1.actorID);
989 s8* targetList = actor->targetIndexList;
990 s32 arg1 = evt_get_variable(script, *args++);
991 s32 arg2 = evt_get_variable(script, *args++);
992 s32 otherArg = *args++;
994
995 if (numTargets == 0) {
996 arg2 = -1;
997 } else {
998 if (arg2 != 0) {
999 if (arg2 >= numTargets) {
1000 arg2 = numTargets - 1;
1001 } else {
1002 arg2--;
1003 }
1004 }
1005
1006 selectableTarget = &actor->targetData[targetList[arg2]];
1007 actor->targetActorID = selectableTarget->actorID;
1008 actor->targetPartID = selectableTarget->partID;
1009 }
1010
1012 return ApiStatus_DONE2;
1013}
1014
1015API_CALLABLE(func_8027FC90) {
1016 Bytecode* args = script->ptrReadPos;
1018 s32 hitResult;
1019 Actor* actor;
1020 s32 actorID = evt_get_variable(script, *args++);
1021 s32 outVar;
1022
1023 if (actorID == ACTOR_SELF) {
1024 actorID = script->owner1.enemyID;
1025 }
1026
1027 outVar = *args++;
1028 actor = get_actor(actorID);
1030
1032 show_next_damage_popup(actor->state.goalPos.x, actor->state.goalPos.y, actor->state.goalPos.z, battleStatus->lastAttackDamage,
1033 0);
1035
1036 return ApiStatus_DONE2;
1037}
1038
1039API_CALLABLE(GetActorLevel) {
1040 Bytecode* args = script->ptrReadPos;
1041 s32 actorID = evt_get_variable(script, *args++);
1043
1044 if (actorID == ACTOR_SELF) {
1045 actorID = script->owner1.enemyID;
1046 }
1047
1048 outVar = *args++;
1049 evt_set_variable(script, outVar, get_actor(actorID)->actorBlueprint->level);
1050
1051 return ApiStatus_DONE2;
1052}
1053
1054API_CALLABLE(PartnerDamageEnemy) {
1057 Bytecode* args = script->ptrReadPos;
1058 Actor* enemy = get_actor(script->owner1.enemyID);
1059 s32 retVar = *args++;
1060 s32 flags;
1062 u8 statusChance;
1063
1069 flags = *args++;
1070
1071 #if DX_DEBUG_MENU
1073 battleStatus->curAttackDamage = 99;
1074 }
1075 #endif
1076
1080 } else if (flags & BS_FLAGS1_INCLUDE_POWER_UPS) {
1083 } else if (flags & BS_FLAGS1_TRIGGER_EVENTS) {
1086 } else {
1089 }
1090
1091 if (flags & BS_FLAGS1_NICE_HIT) {
1093 } else {
1095 }
1096
1097 if (flags & BS_FLAGS1_SUPER_HIT) {
1099 } else {
1101 }
1102
1103 if (flags & BS_FLAGS1_NO_RATING) {
1105 } else {
1107 }
1108
1111 } else {
1113 }
1114
1115 statusChance = battleStatus->curAttackStatus;
1116 battleStatus->curTargetID = enemy->targetActorID;
1117 battleStatus->curTargetPart = enemy->targetPartID;
1118 battleStatus->statusChance = statusChance;
1119
1120 if (statusChance == STATUS_KEY_NEVER) {
1121 battleStatus->statusChance = 0;
1122 }
1123
1124 battleStatus->statusDuration = (battleStatus->curAttackStatus & 0xF00) >> 8;
1126
1127 if (damageResult < 0) {
1128 return ApiStatus_FINISH;
1129 }
1130
1132
1134 return ApiStatus_FINISH;
1135 }
1136
1137 return ApiStatus_DONE2;
1138}
1139
1140API_CALLABLE(PartnerAfflictEnemy) {
1142 Bytecode* args = script->ptrReadPos;
1143 Actor* actor = get_actor(script->owner1.enemyID);
1144 s32 returnValue = *args++;
1145 s32 flags;
1146 u8 statusChance;
1148
1149 battleStatus->curAttackElement = *args++;
1150 battleStatus->curAttackEventSuppression = *args++;
1151 battleStatus->curAttackStatus = *args++;
1152 battleStatus->curAttackStatus |= evt_get_variable(script, *args++);
1153 battleStatus->curAttackDamage = evt_get_variable(script, *args++);
1154 battleStatus->powerBounceCounter = 0;
1155 flags = *args++;
1156
1160 } else if (flags & BS_FLAGS1_INCLUDE_POWER_UPS) {
1163 } else if (flags & BS_FLAGS1_TRIGGER_EVENTS) {
1166 } else {
1169 }
1170
1171 if (flags & BS_FLAGS1_NICE_HIT) {
1173 } else {
1175 }
1176 if (flags & BS_FLAGS1_SUPER_HIT) {
1178 } else {
1180 }
1181 if (flags & BS_FLAGS1_NO_RATING) {
1183 } else {
1185 }
1188 } else {
1190 }
1191
1192 statusChance = battleStatus->curAttackStatus;
1193 battleStatus->curTargetID = actor->targetActorID;
1194 battleStatus->curTargetPart = actor->targetPartID;
1195 battleStatus->statusChance = statusChance;
1196
1197 if (statusChance == STATUS_KEY_NEVER) {
1198 battleStatus->statusChance = 0;
1199 }
1200
1201 battleStatus->statusDuration = (battleStatus->curAttackStatus & 0xF00) >> 8;
1203
1204 if (damageResult < 0) {
1205 return ApiStatus_FINISH;
1206 }
1207
1209
1211 return ApiStatus_FINISH;
1212 }
1213
1214 return ApiStatus_DONE2;
1215}
1216
1217API_CALLABLE(PartnerPowerBounceEnemy) {
1219 Bytecode* args = script->ptrReadPos;
1220 Actor* actor = get_actor(script->owner1.enemyID);
1221 s32 returnValue = *args++;
1222 s32 flags;
1223 u8 statusChance;
1225
1226 battleStatus->curAttackElement = *args++;
1227 battleStatus->curAttackEventSuppression = *args++;
1228 battleStatus->curAttackStatus = *args++;
1229 battleStatus->curAttackDamage = evt_get_variable(script, *args++);
1230 battleStatus->powerBounceCounter = evt_get_variable(script, *args++);
1231 flags = *args++;
1232
1236 } else if (flags & BS_FLAGS1_INCLUDE_POWER_UPS) {
1239 } else if (flags & BS_FLAGS1_TRIGGER_EVENTS) {
1242 } else {
1245 }
1246
1247 if (flags & BS_FLAGS1_NICE_HIT) {
1249 } else {
1251 }
1252 if (flags & BS_FLAGS1_SUPER_HIT) {
1254 } else {
1256 }
1257 if (flags & BS_FLAGS1_NO_RATING) {
1259 } else {
1261 }
1264 } else {
1266 }
1267
1268 statusChance = battleStatus->curAttackStatus;
1269 battleStatus->curTargetID = actor->targetActorID;
1270 battleStatus->curTargetPart = actor->targetPartID;
1271 battleStatus->statusChance = statusChance;
1272
1273 if (statusChance == STATUS_KEY_NEVER) {
1274 battleStatus->statusChance = 0;
1275 }
1276
1277 battleStatus->statusDuration = (battleStatus->curAttackStatus & 0xF00) >> 8;
1279
1280 if (damageResult < 0) {
1281 return ApiStatus_FINISH;
1282 }
1283
1285
1287 return ApiStatus_FINISH;
1288 }
1289
1290 return ApiStatus_DONE2;
1291}
1292
1293API_CALLABLE(PartnerTestEnemy) {
1296 Bytecode* args = script->ptrReadPos;
1297 Actor* enemy = get_actor(script->owner1.enemyID);
1298 s32 outVar;
1299 s32 flags;
1301 u8 statusChance;
1302
1303 outVar = *args++;
1309 flags = *args++;
1310
1314 } else if (flags & BS_FLAGS1_INCLUDE_POWER_UPS) {
1317 } else if (flags & BS_FLAGS1_TRIGGER_EVENTS) {
1320 } else {
1323 }
1324
1325 if (flags & BS_FLAGS1_NICE_HIT) {
1327 } else {
1329 }
1330
1331 if (flags & BS_FLAGS1_SUPER_HIT) {
1333 } else {
1335 }
1336
1337 if (flags & BS_FLAGS1_NO_RATING) {
1339 } else {
1341 }
1342
1345 } else {
1347 }
1348
1349 statusChance = battleStatus->curAttackStatus;
1350 battleStatus->curTargetID = enemy->targetActorID;
1351 battleStatus->curTargetPart = enemy->targetPartID;
1352 battleStatus->statusChance = statusChance;
1353
1354 if (statusChance == STATUS_KEY_NEVER) {
1355 battleStatus->statusChance = 0;
1356 }
1357
1358 battleStatus->statusDuration = (battleStatus->curAttackStatus & 0xF00) >> 8;
1360
1361 if (damageResult < 0) {
1362 return ApiStatus_FINISH;
1363 }
1364
1366
1367 return ApiStatus_DONE2;
1368}
1369
1370API_CALLABLE(func_8028070C) {
1372 Bytecode* args = script->ptrReadPos;
1373 Actor* actor = get_actor(script->owner1.actorID);
1375 s32 event = evt_get_variable(script, *args++);
1376
1377 battleStatus->curTargetID = actor->targetActorID;
1378 battleStatus->curTargetPart = actor->targetPartID;
1379
1382 }
1383
1384 return ApiStatus_BLOCK;
1385}
1386
1387API_CALLABLE(DeletePartner) {
1389
1390 btl_delete_actor(battleStatus->partnerActor);
1391 return ApiStatus_DONE2;
1392}
1393
1394API_CALLABLE(GetPartnerActionQuality) {
1395 Bytecode* args = script->ptrReadPos;
1396 s32 outVar = *args++;
1397 s32 actionQuality = gBattleStatus.actionQuality;
1398 s32 quality = 0;
1399
1400 if (actionQuality < 0) {
1401 actionQuality = 0;
1402 }
1403
1404 if (quality < actionQuality) {
1405 quality = actionQuality;
1406 }
1407
1409 return ApiStatus_DONE2;
1410}
1411
1413API_CALLABLE(PartnerYieldTurn) {
1415 return ApiStatus_DONE2;
1416}
BSS s32 PopupMenu_SelectedIndex
struct Evt * takeTurnScript
EvtScript * handleEventSource
ActorState state
struct Evt * handleEventScript
s32 takeTurnScriptID
struct SelectableTarget targetData[24]
s16 targetActorID
s32 handleEventScriptID
s8 targetIndexList[24]
Bytecode EvtScript[]
s8 targetListLength
s8 flags
Definition demo_api.c:15
HitResult calc_partner_test_enemy(void)
Definition dmg_partner.c:48
#define INFLICT_STATUS(STATUS_TYPE)
s32 dispatch_damage_event_partner_0(s32 damageAmount, s32 event, s32 stopMotion)
s32 dispatch_damage_event_partner_1(s32, s32)
HitResult calc_partner_damage_enemy(void)
s32 dispatch_damage_event_partner(s32 damageAmount, s32 event, s32 stopMotion)
void dispatch_event_partner_continue_turn(s8 lastEventType)
Definition dmg_partner.c:30
void dispatch_event_partner(s32 lastEventType)
Definition dmg_partner.c:7
#define sfx_play_sound_at_position
#define rand_int
#define ASSERT(condition)
@ ACTION_RATING_SUPER
sets nice hits = 2
Definition enums.h:2008
@ ACTION_RATING_NICE
sets nice hits = 1
Definition enums.h:2005
@ BS_FLAGS1_TUTORIAL_BATTLE
Definition enums.h:3627
@ BS_FLAGS1_NO_RATING
Definition enums.h:3610
@ BS_FLAGS1_FORCE_IMMUNE_HIT
Definition enums.h:3613
@ BS_FLAGS1_SUPER_HIT
Definition enums.h:3612
@ BS_FLAGS1_YIELD_TURN
Definition enums.h:3623
@ BS_FLAGS1_NICE_HIT
Definition enums.h:3609
@ BS_FLAGS1_TRIGGER_EVENTS
Definition enums.h:3608
@ BS_FLAGS1_SHOW_PLAYER_DECORATIONS
Definition enums.h:3601
@ BS_FLAGS1_INCLUDE_POWER_UPS
Definition enums.h:3604
@ BS_FLAGS1_ACTORS_VISIBLE
Definition enums.h:3598
@ ACTOR_EVENT_FLAG_STAR_ROD_ENCHANTED
Actor glows and listens for Star Beam and Peach Beam events.
Definition enums.h:3420
@ ACTOR_EVENT_FLAG_GROUNDABLE
Actor can be knocked down from flight; triggered by jump attacks.
Definition enums.h:3416
@ ACTOR_EVENT_FLAG_FIRE_EXPLODE
Fire attacks trigger an explosion, used only by bullet/bombshell bills.
Definition enums.h:3412
@ ACTOR_EVENT_FLAG_POWER_BOUNCE
Actor listens for Power Bounce events.
Definition enums.h:3421
@ ACTOR_EVENT_FLAG_ELECTRIFIED
Player takes shock damage upon contact.
Definition enums.h:3409
@ ACTOR_EVENT_FLAG_SPIKY_FRONT
Player takes spike damage from hammer attacks.
Definition enums.h:3418
@ ACTOR_EVENT_FLAG_EXPLODE_ON_CONTACT
Attacks that contact will trigger an explosion.
Definition enums.h:3417
@ ACTOR_EVENT_FLAG_FIREY
Player takes burn damage upon contact.
Definition enums.h:3405
@ ACTOR_EVENT_FLAG_BURIED
Actor can only by hit by quake-element attacks.
Definition enums.h:3413
@ ACTOR_EVENT_FLAG_ALT_SPIKY
Additional spiky quality associated with Pokeys and Spinies.
Definition enums.h:3422
@ ACTOR_EVENT_FLAG_FLIPABLE
Actor can be flipped; triggered by jump and quake attacks.
Definition enums.h:3414
@ ACTOR_EVENT_FLAG_EXPLODE_ON_IGNITION
Blast and fire attacks trigger an explosion.
Definition enums.h:3411
@ ACTOR_EVENT_FLAG_ILLUSORY
Player attacks pass through and miss.
Definition enums.h:3408
@ ACTOR_EVENT_FLAG_SPIKY_TOP
Player takes spike damage from jump attacks.
Definition enums.h:3407
@ ACTOR_EVENT_FLAG_ENCHANTED
Actor glows and listens for the Star Beam event.
Definition enums.h:3419
@ ACTOR_PART_TARGET_NO_DAMAGE
Definition enums.h:1903
@ STATUS_KEY_PARALYZE
Definition enums.h:2806
@ STATUS_KEY_FROZEN
Definition enums.h:2808
@ STATUS_TURN_MOD_UNUSED
Definition enums.h:2836
@ STATUS_KEY_TRANSPARENT
Definition enums.h:2815
@ STATUS_KEY_STATIC
Definition enums.h:2812
@ STATUS_KEY_KO
Definition enums.h:2814
@ 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_KEY_SHRINK
Definition enums.h:2811
@ STATUS_KEY_DIZZY
Definition enums.h:2805
HitResult
Definition enums.h:1974
@ HIT_RESULT_LANDED_ON_SPIKE
Definition enums.h:1980
@ HIT_RESULT_BACKFIRE
Definition enums.h:1975
@ HIT_RESULT_NO_DAMAGE
Definition enums.h:1978
@ HIT_RESULT_HIT
Definition enums.h:1976
@ HIT_RESULT_IMMUNE
Definition enums.h:1984
@ HIT_RESULT_NICE_NO_DAMAGE
Definition enums.h:1979
@ HIT_RESULT_NICE
Definition enums.h:1977
@ HIT_RESULT_MISS
Definition enums.h:1982
@ SUPPRESS_EVENT_EXPLODE_CONTACT
Definition enums.h:2935
@ SUPPRESS_EVENT_SPIKY_TOP
Definition enums.h:2934
@ SUPPRESS_EVENT_ALT_SPIKY
Definition enums.h:2939
@ SUPPRESS_EVENT_SHOCK_CONTACT
Definition enums.h:2937
@ SUPPRESS_EVENT_SPIKY_FRONT
Definition enums.h:2936
@ SUPPRESS_EVENT_BURN_CONTACT
Definition enums.h:2938
@ STATUS_FLAG_FEAR
Definition enums.h:2856
@ STATUS_FLAG_STOP
Definition enums.h:2855
@ STATUS_FLAG_FROZEN
Definition enums.h:2848
@ STATUS_FLAG_SHRINK
Definition enums.h:2853
@ STATUS_FLAG_PARALYZE
Definition enums.h:2850
@ STATUS_FLAG_DIZZY
Definition enums.h:2852
@ STATUS_FLAG_SLEEP
Definition enums.h:2846
@ STATUS_FLAG_POISON
Definition enums.h:2851
@ STATUS_FLAG_UNUSED
Definition enums.h:2849
@ DMG_SRC_DEFAULT
Definition enums.h:2014
@ ABILITY_SPIKE_SHIELD
Definition enums.h:438
@ SOUND_IMMUNE
Definition enums.h:748
@ SOUND_DAMAGE_STARS
Definition enums.h:953
@ SOUND_INFLICT_STATUS
Definition enums.h:1358
@ SOUND_HIT_SPIKE
Definition enums.h:746
@ SOUND_HIT_NORMAL
Definition enums.h:727
@ SOUND_SMACK_TREE
Definition enums.h:790
@ SOUND_HIT_SHOCK
Definition enums.h:1198
@ SOUND_HIT_ICE
Definition enums.h:729
@ SOUND_HIT_FIRE
Definition enums.h:728
@ SOUND_INFLICT_SLEEP
Definition enums.h:1357
@ ACTOR_PARTNER
Definition enums.h:2119
@ ACTOR_SELF
Definition enums.h:2117
@ ACTOR_FLAG_NO_DMG_POPUP
Hide damage popup.
Definition enums.h:3375
@ ACTOR_FLAG_HEALTH_BAR_HIDDEN
Definition enums.h:3372
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3365
@ ACTOR_FLAG_FLIPPED
Actor has been flipped over.
Definition enums.h:3364
@ SOUND_SPACE_DEFAULT
Definition enums.h:1740
@ EVENT_HIT
Definition enums.h:2165
@ EVENT_SCARE_AWAY
Definition enums.h:2207
@ EVENT_BURN_HIT
Definition enums.h:2169
@ EVENT_SPIKE_CONTACT
Definition enums.h:2196
@ EVENT_POWER_BOUNCE_DEATH
Definition enums.h:2194
@ EVENT_IMMUNE
Definition enums.h:2179
@ EVENT_FALL_TRIGGER
Definition enums.h:2167
@ EVENT_BURN_DEATH
Definition enums.h:2190
@ EVENT_ZERO_DAMAGE
Definition enums.h:2177
@ EVENT_SPIN_SMASH_HIT
Definition enums.h:2166
@ EVENT_EXPLODE_TRIGGER
Definition enums.h:2188
@ EVENT_SPIN_SMASH_DEATH
Definition enums.h:2187
@ EVENT_HIT_COMBO
Definition enums.h:2164
@ EVENT_SPIKE_TAUNT
Definition enums.h:2181
@ EVENT_BEGIN_AIR_LIFT
Definition enums.h:2208
@ EVENT_POWER_BOUNCE_HIT
Definition enums.h:2175
@ EVENT_DEATH
Definition enums.h:2186
@ EVENT_FLIP_TRIGGER
Definition enums.h:2168
@ EVENT_SHOCK_HIT
Definition enums.h:2198
@ EVENT_BURN_CONTACT
Definition enums.h:2197
@ EVENT_BURN_TAUNT
Definition enums.h:2182
@ ACTOR_PART_FLAG_DAMAGE_IMMUNE
electrified Plays extra hurt SFX?
Definition enums.h:3392
@ DAMAGE_TYPE_SPIN_SMASH
Definition enums.h:2910
@ DAMAGE_TYPE_ICE
Definition enums.h:2888
@ DAMAGE_TYPE_STATUS_ALWAYS_HITS
Definition enums.h:2914
@ DAMAGE_TYPE_SMASH
Definition enums.h:2891
@ DAMAGE_TYPE_POWER_BOUNCE
Definition enums.h:2904
@ DAMAGE_TYPE_IGNORE_DEFENSE
Definition enums.h:2911
@ DAMAGE_TYPE_SHOCK
Definition enums.h:2890
@ DAMAGE_TYPE_BLAST
Definition enums.h:2894
@ DAMAGE_TYPE_FIRE
Definition enums.h:2886
@ DAMAGE_TYPE_AIR_LIFT
Definition enums.h:2900
@ DAMAGE_TYPE_QUAKE
Definition enums.h:2896
@ DAMAGE_TYPE_JUMP
Definition enums.h:2892
@ DAMAGE_TYPE_FEAR
Definition enums.h:2897
@ DAMAGE_TYPE_NO_CONTACT
Definition enums.h:2912
@ DAMAGE_TYPE_MULTIPLE_POPUPS
Definition enums.h:2913
@ DAMAGE_TYPE_WATER
Definition enums.h:2887
@ EVT_PRIORITY_A
Definition evt.h:154
#define ApiStatus_DONE2
Definition evt.h:119
s32 Bytecode
Definition evt.h:7
#define ApiStatus_FINISH
Definition evt.h:121
#define ApiStatus_BLOCK
Definition evt.h:117
@ EVT_FLAG_RUN_IMMEDIATELY
don't wait for next update_scripts call
Definition evt.h:162
void show_primary_damage_popup(f32 x, f32 y, f32 z, s32 attack, s32 a)
Definition 190B20.c:2001
s32 does_script_exist_by_ref(Evt *script)
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1725
s32 player_team_is_ability_active(Actor *actor, s32 ability)
Definition 190B20.c:2497
void show_immune_bonk(f32 x, f32 y, f32 z, s32, s32, s32)
void dispatch_event_actor(Actor *, s32)
Definition 1A5830.c:102
void show_actor_health_bar(Actor *)
Definition 190B20.c:2237
void clear_part_pal_adjustment(ActorPart *)
Definition 190B20.c:2350
s32 evt_set_variable(Evt *script, Bytecode var, s32 value)
Definition evt.c:1882
void set_actor_flash_mode(Actor *actor, s32 arg1)
Definition 190B20.c:2428
void show_damage_fx(Actor *actor, f32 x, f32 y, f32 z, s32 damage)
Definition 190B20.c:2066
void cancel_action_rating_combo(Actor *)
Definition 190B20.c:2171
Evt * start_script(EvtScript *source, s32 priority, s32 initialState)
s32 inflict_status(Actor *, s32, s32)
Definition 190B20.c:1816
ActorPart * get_actor_part(Actor *actor, s32 partID)
Definition 190B20.c:923
void show_next_damage_popup(f32 x, f32 y, f32 z, s32 damageAmount, s32 angle)
Definition 190B20.c:2027
s32 get_defense(Actor *actor, s32 *defenseTable, s32 elementFlags)
Definition 190B20.c:1951
Actor * get_actor(s32 actorID)
Definition actor_api.c:155
void kill_script_by_ID(s32 id)
void set_goal_pos_to_part(ActorState *state, s32 actorID, s32 partID)
Definition actor_api.c:44
void btl_delete_actor(Actor *actor)
Definition 16C8E0.c:1041
void apply_shock_effect(Actor *)
void show_action_rating(s32, Actor *, f32, f32, f32)
Definition 190B20.c:2092
s32 try_inflict_status(Actor *, s32, s32)
Definition 190B20.c:2264
EvtScript EVS_PlayStopHitFX
Definition dmg_player.c:109
EvtScript EVS_PlayFreezeHitFX
Definition dmg_player.c:115
EvtScript EVS_PlayShrinkHitFX
Definition dmg_player.c:125
EvtScript EVS_PlayParalyzeHitFX
Definition dmg_player.c:97
EvtScript EVS_PlayPoisonHitFX
Definition dmg_player.c:103
EvtScript EVS_PlaySleepHitFX
Definition dmg_player.c:85
EvtScript EVS_PlayDizzyHitFX
Definition dmg_player.c:91
#define STATUS_KEY_NEVER
Definition macros.h:235
s32 curAttackEventSuppression
BattleStatus gBattleStatus
Definition battle.cpp:14
PlayerStatus gPlayerStatus
Definition 77480.c:38