Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
actor_api.c
Go to the documentation of this file.
1#include "common.h"
2#include "effects.h"
3#include "battle/battle.h"
4
5extern s32 IsGroupHeal;
6extern s8 ApplyingBuff;
7
16
18 s32 row;
19 s32 col;
20
21 if (y < 40.0f) {
22 row = 0;
23 } else if (y < 85.0f) {
24 row = 1;
25 } else if (y < 100.0f) {
26 row = 2;
27 } else {
28 row = 3;
29 }
30
31 if (x < 25.0f) {
32 col = 0;
33 } else if (x < 65.0f) {
34 col = 1;
35 } else if (x < 105.0f) {
36 col = 2;
37 } else {
38 col = 3;
39 }
40
41 return col | (row << 2);
42}
43
44void set_goal_pos_to_part(ActorState* state, s32 actorID, s32 partID) {
46 Actor* actor = get_actor(actorID);
48
49 switch (actorClass) {
51 part = get_actor_part(actor, 0);
52 state->goalPos.x = actor->curPos.x + part->partOffset.x * actor->scalingFactor;
53 state->goalPos.y = actor->curPos.y + part->partOffset.y * actor->scalingFactor;
54 state->goalPos.z = actor->curPos.z + 10.0f;
55 if (actor->stoneStatus == STATUS_KEY_STONE) {
56 state->goalPos.y -= actor->scalingFactor * 5.0f;
57 }
58 break;
61 part = get_actor_part(actor, partID);
63 state->goalPos.x = actor->curPos.x + (part->partOffset.x + part->targetOffset.x) * actor->scalingFactor;
64 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
65 state->goalPos.y = actor->curPos.y + (part->partOffset.y + part->targetOffset.y) * actor->scalingFactor;
66 } else {
67 state->goalPos.y = actor->curPos.y + (-part->partOffset.y - part->targetOffset.y) * actor->scalingFactor;
68 }
69 state->goalPos.z = actor->curPos.z + part->partOffset.z + 10.0f;
70 } else {
71 state->goalPos.x = part->absolutePos.x + part->targetOffset.x;
72 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
73 state->goalPos.y = part->absolutePos.y + part->targetOffset.y * actor->scalingFactor;
74 } else {
75 state->goalPos.y = part->absolutePos.y - part->targetOffset.y * actor->scalingFactor;
76 }
77 state->goalPos.z = part->absolutePos.z + 10.0f;
78 }
79 break;
80 }
81}
82
83void set_part_goal_to_actor_part(ActorPartMovement* movement, s32 actorID, s32 partID) {
85 Actor* actor = get_actor(actorID);
87
88 switch (actorClass) {
90 part = get_actor_part(actor, 0);
91 part->movement->goalPos.x = actor->curPos.x + part->partOffset.x * actor->scalingFactor;
92 part->movement->goalPos.y = actor->curPos.y + part->partOffset.y * actor->scalingFactor;
93 part->movement->goalPos.z = actor->curPos.z;
94 break;
97 part = get_actor_part(actor, partID);
99 part->movement->goalPos.x = actor->curPos.x + (part->partOffset.x + part->targetOffset.x) * actor->scalingFactor;
100 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
101 part->movement->goalPos.y = actor->curPos.y + (part->partOffset.y + part->targetOffset.y) * actor->scalingFactor;
102 } else {
103 part->movement->goalPos.y = actor->curPos.y + (-part->partOffset.y - part->targetOffset.y) * actor->scalingFactor;
104 }
105 part->movement->goalPos.z = actor->curPos.z + part->partOffset.z;
106 } else {
107 part->movement->goalPos.x = part->absolutePos.x + part->targetOffset.x;
108 if (!(actor->flags & ACTOR_FLAG_UPSIDE_DOWN)) {
109 part->movement->goalPos.y = part->absolutePos.y + part->targetOffset.y * actor->scalingFactor;
110 } else {
111 part->movement->goalPos.y = part->absolutePos.y - part->targetOffset.y * actor->scalingFactor;
112 }
113 part->movement->goalPos.z = part->absolutePos.z;
114 }
115 break;
116 }
117}
118
119void set_actor_current_position(s32 actorID, f32 x, f32 y, f32 z) {
120 Actor* actor = get_actor(actorID);
121
122 actor->curPos.x = x;
123 actor->curPos.y = y;
124 actor->curPos.z = z;
125}
126
127void set_part_absolute_position(s32 actorID, s32 partID, f32 x, f32 y, f32 z) {
128 Actor* actor = get_actor(actorID);
130
131 switch (actorID & ACTOR_CLASS_MASK) {
133 actor->curPos.x = x;
134 actor->curPos.y = y;
135 actor->curPos.z = z;
136 break;
139 actorPart = get_actor_part(actor, partID);
140 actorPart->absolutePos.x = x;
141 actorPart->absolutePos.y = y;
142 actorPart->absolutePos.z = z;
143 break;
144 }
145}
146
147void set_actor_home_position(s32 actorID, f32 x, f32 y, f32 z) {
148 Actor* actor = get_actor(actorID);
149
150 actor->homePos.x = x;
151 actor->homePos.y = y;
152 actor->homePos.z = z;
153}
154
155Actor* get_actor(s32 actorID) {
156 Actor* ret = nullptr;
158 s32 actorClass = actorID & ACTOR_CLASS_MASK;
159 u32 idIdx = (u8)actorID;
160
161 switch (actorClass) {
164 break;
166 ret = battleStatus->partnerActor;
167 break;
169 ret = battleStatus->enemyActors[idIdx];
170 break;
171 }
172 return ret;
173}
174
175API_CALLABLE(LoadBattleSection) {
177
178 dma_copy(battleArea->dmaStart, battleArea->dmaEnd, battleArea->dmaDest);
179 return ApiStatus_DONE1;
180}
181
182API_CALLABLE(GetBattlePhase) {
184 return ApiStatus_DONE2;
185}
186
187API_CALLABLE(GetLastElement) {
189 return ApiStatus_DONE2;
190}
191
192API_CALLABLE(GetDamageSource) {
194 return ApiStatus_DONE2;
195}
196
197API_CALLABLE(SetDamageSource) {
198 s32 damageSource = *script->ptrReadPos;
199
201 return ApiStatus_DONE2;
202}
203
204API_CALLABLE(SetGoalToHome) {
205 s32 actorID = evt_get_variable(script, *script->ptrReadPos);
206 Actor* actor;
207
208 if (actorID == ACTOR_SELF) {
209 actorID = script->owner1.actorID;
210 }
211
212 actor = get_actor(actorID);
213 actor->state.goalPos.x = actor->homePos.x;
214 actor->state.goalPos.y = actor->homePos.y;
215 actor->state.goalPos.z = actor->homePos.z;
216
217 return ApiStatus_DONE2;
218}
219
220API_CALLABLE(SetIdleGoalToHome) {
221 s32 actorID = evt_get_variable(script, *script->ptrReadPos);
222 Actor* actor;
223
224 if (actorID == ACTOR_SELF) {
225 actorID = script->owner1.actorID;
226 }
227
228 actor = get_actor(actorID);
229 actor->fly.goalPos.x = actor->homePos.x;
230 actor->fly.goalPos.y = actor->homePos.y;
231 actor->fly.goalPos.z = actor->homePos.z;
232
233 return ApiStatus_DONE2;
234}
235
236API_CALLABLE(SetGoalToIndex) {
237 Bytecode* args = script->ptrReadPos;
238 s32 actorID = evt_get_variable(script, *args++);
239 s32 index = evt_get_variable(script, *args++);
240 Actor* actor;
241
242 if (actorID == ACTOR_SELF) {
243 actorID = script->owner1.actorID;
244 }
245
246 actor = get_actor(actorID);
250
251 return ApiStatus_DONE2;
252}
253
254API_CALLABLE(GetIndexFromPos) {
255 Bytecode* args = script->ptrReadPos;
256 s32 actorID = evt_get_variable(script, *args++);
257 s32 outVar = *args++;
258 Actor* actor;
259 s32 homeIdx;
260
261 if (actorID == ACTOR_SELF) {
262 actorID = script->owner1.actorID;
263 }
264
265 actor = get_actor(actorID);
266 homeIdx = get_nearest_home_index(actor->curPos.x, actor->curPos.y, actor->curPos.z);
268
269 return ApiStatus_DONE2;
270}
271
272API_CALLABLE(GetIndexFromHome) {
273 Bytecode* args = script->ptrReadPos;
274 s32 actorID = evt_get_variable(script, *args++);
275 s32 outVar = *args++;
276 Actor* actor;
277 s32 homeIdx;
278
279 if (actorID == ACTOR_SELF) {
280 actorID = script->owner1.actorID;
281 }
282
283 actor = get_actor(actorID);
284 homeIdx = get_nearest_home_index(actor->homePos.x, actor->homePos.y, actor->homePos.z);
286
287 return ApiStatus_DONE2;
288}
289
290API_CALLABLE(CountTargets) {
291 Bytecode* args = script->ptrReadPos;
292 s32 actorID = evt_get_variable(script, *args++);
293 s32 targetSelectionFlags = *args++;
294 s32 outVar = *args++;
295 Actor* actor;
296 s32 homeIdx;
298
299 if (actorID == ACTOR_SELF) {
300 actorID = script->owner1.actorID;
301 }
302
303 actor = get_actor(actorID);
304 homeIdx = get_nearest_home_index(actor->curPos.x, actor->curPos.y, actor->curPos.z);
307
308 return ApiStatus_DONE2;
309}
310
311API_CALLABLE(ForceHomePos) {
312 Bytecode* args = script->ptrReadPos;
313 s32 actorID = evt_get_variable(script, *args++);
314 f32 x, y, z;
315 Actor* actor;
316
317 if (actorID == ACTOR_SELF) {
318 actorID = script->owner1.actorID;
319 }
320
321 x = evt_get_variable(script, *args++);
322 y = evt_get_variable(script, *args++);
323 z = evt_get_variable(script, *args++);
324
325 actor = get_actor(actorID);
326 actor->curPos.x = actor->homePos.x = x;
327 actor->curPos.y = actor->homePos.y = y;
328 actor->curPos.z = actor->homePos.z = z;
329
330 return ApiStatus_DONE2;
331}
332
333API_CALLABLE(SetHomePos) {
334 Bytecode* args = script->ptrReadPos;
335 s32 actorID = evt_get_variable(script, *args++);
336 f32 x, y, z;
337 Actor* actor;
338
339 if (actorID == ACTOR_SELF) {
340 actorID = script->owner1.actorID;
341 }
342
343 x = evt_get_variable(script, *args++);
344 y = evt_get_variable(script, *args++);
345 z = evt_get_variable(script, *args++);
346
347 actor = get_actor(actorID);
348 actor->homePos.x = x;
349 actor->homePos.y = y;
350 actor->homePos.z = z;
351
352 return ApiStatus_DONE2;
353}
354
355API_CALLABLE(SetGoalToTarget) {
356 Bytecode* args = script->ptrReadPos;
357 s32 actorID = evt_get_variable(script, *args++);
358 Actor* actor;
359
360 if (actorID == ACTOR_SELF) {
361 actorID = script->owner1.actorID;
362 }
363 actor = get_actor(actorID);
364
365 set_goal_pos_to_part(&actor->state, actor->targetActorID, actor->targetPartID);
366
367 return ApiStatus_DONE2;
368}
369
370API_CALLABLE(SetPartGoalToTarget) {
371 Bytecode* args = script->ptrReadPos;
372 s32 actorID = evt_get_variable(script, *args++);
373 s32 partID = evt_get_variable(script, *args++);
374 Actor* actor;
375
376 if (actorID == ACTOR_SELF) {
377 actorID = script->owner1.actorID;
378 }
379 actor = get_actor(actorID);
380
381 set_part_goal_to_actor_part(get_actor_part(actor, partID)->movement, actor->targetActorID, actor->targetPartID);
382
383 return ApiStatus_DONE2;
384}
385
386API_CALLABLE(SetGoalToFirstTarget) {
387 Bytecode* args = script->ptrReadPos;
388 s32 actorID = evt_get_variable(script, *args++);
389 Actor* actor;
391
392 if (actorID == ACTOR_SELF) {
393 actorID = script->owner1.actorID;
394 }
395 actor = get_actor(actorID);
396
397 target = &actor->targetData[actor->targetIndexList[0]];
398 set_goal_pos_to_part(&actor->state, target->actorID, target->partID);
399
400 return ApiStatus_DONE2;
401}
402
403API_CALLABLE(SetGoalPos) {
404 Bytecode* args = script->ptrReadPos;
405 s32 actorID = evt_get_variable(script, *args++);
406 Actor* actor;
407 ActorState* walk;
408 f32 x, y, z;
409
410 if (actorID == ACTOR_SELF) {
411 actorID = script->owner1.actorID;
412 }
413 actor = get_actor(actorID);
414 walk = &actor->state;
415
416 if (*args == ACTOR_API_SKIP_ARG) {
417 x = walk->goalPos.x;
418 } else {
419 x = evt_get_variable(script, *args);
420 }
421
422 *args++;
423 if (*args == ACTOR_API_SKIP_ARG) {
424 y = walk->goalPos.y;
425 } else {
426 y = evt_get_variable(script, *args);
427 }
428
429 *args++;
430 if (*args == ACTOR_API_SKIP_ARG) {
431 z = walk->goalPos.z;
432 } else {
433 z = evt_get_variable(script, *args);
434 }
435
436 walk->goalPos.x = x;
437 walk->goalPos.y = y;
438 walk->goalPos.z = z;
439
440 return ApiStatus_DONE2;
441}
442
443API_CALLABLE(SetIdleGoal) {
444 Bytecode* args = script->ptrReadPos;
445 s32 actorID = evt_get_variable(script, *args++);
446 Actor* actor;
447 ActorMovement* fly;
448 f32 x, y, z;
449
450 if (actorID == ACTOR_SELF) {
451 actorID = script->owner1.actorID;
452 }
453 actor = get_actor(actorID);
454 fly = &actor->fly;
455
456 if (*args == ACTOR_API_SKIP_ARG) {
457 x = actor->fly.goalPos.x;
458 } else {
459 x = evt_get_variable(script, *args);
460 }
461
462 *args++;
463 if (*args == ACTOR_API_SKIP_ARG) {
464 y = fly->goalPos.y;
465 } else {
466 y = evt_get_variable(script, *args);
467 }
468
469 *args++;
470 if (*args == ACTOR_API_SKIP_ARG) {
471 z = fly->goalPos.z;
472 } else {
473 z = evt_get_variable(script, *args);
474 }
475
476 fly->goalPos.x = x;
477 fly->goalPos.y = y;
478 fly->goalPos.z = z;
479 return ApiStatus_DONE2;
480}
481
482API_CALLABLE(AddGoalPos) {
483 Bytecode* args = script->ptrReadPos;
484 s32 actorID = evt_get_variable(script, *args++);
485 Actor* actor;
486 f32 x, y, z;
487
488 if (actorID == ACTOR_SELF) {
489 actorID = script->owner1.actorID;
490 }
491
492 x = evt_get_float_variable(script, *args++);
493 y = evt_get_float_variable(script, *args++);
494 z = evt_get_float_variable(script, *args++);
495
496 actor = get_actor(actorID);
497 actor->state.goalPos.x += x;
498 actor->state.goalPos.y += y;
499 actor->state.goalPos.z += z;
500
501 return ApiStatus_DONE2;
502}
503
504API_CALLABLE(GetGoalPos) {
505 Bytecode* args = script->ptrReadPos;
506 s32 actorID = evt_get_variable(script, *args++);
507 Actor* actor;
508 s32 outX, outY, outZ;
509 s32 x, y, z;
510
511 if (actorID == ACTOR_SELF) {
512 actorID = script->owner1.actorID;
513 }
514
515 actor = get_actor(actorID);
516
517 outX = *args++;
518 outY = *args++;
519 outZ = *args++;
520
521 x = actor->state.goalPos.x;
522 y = actor->state.goalPos.y;
523 z = actor->state.goalPos.z;
524
528
529 return ApiStatus_DONE2;
530}
531
532// should this be renamed to GetFlyGoal ?
533API_CALLABLE(GetIdleGoal) {
534 Bytecode* args = script->ptrReadPos;
535 s32 actorID = evt_get_variable(script, *args++);
536 Actor* actor;
537 s32 outX, outY, outZ;
538 s32 x, y, z;
539
540 if (actorID == ACTOR_SELF) {
541 actorID = script->owner1.actorID;
542 }
543
544 actor = get_actor(actorID);
545
546 outX = *args++;
547 outY = *args++;
548 outZ = *args++;
549
550 x = actor->fly.goalPos.x;
551 y = actor->fly.goalPos.y;
552 z = actor->fly.goalPos.z;
553
557
558 return ApiStatus_DONE2;
559}
560
561API_CALLABLE(GetPartTarget) {
562 Bytecode* args = script->ptrReadPos;
563 s32 actorID = evt_get_variable(script, *args++);
564 s32 partID = evt_get_variable(script, *args++);
565 Actor* actor;
567 s32 outX, outY, outZ;
568 s32 x, y, z;
569
570 if (actorID == ACTOR_SELF) {
571 actorID = script->owner1.actorID;
572 }
573
574 actor = get_actor(actorID);
575 actorPart = get_actor_part(actor, partID);
576
577 outX = *args++;
578 outY = *args++;
579 outZ = *args++;
580
581 x = actorPart->movement->goalPos.x;
582 y = actorPart->movement->goalPos.y;
583 z = actorPart->movement->goalPos.z;
584
588
589 return ApiStatus_DONE2;
590}
591
592API_CALLABLE(GetActorPos) {
593 Bytecode* args = script->ptrReadPos;
594 s32 actorID = evt_get_variable(script, *args++);
595 Actor* actor;
596 s32 outX, outY, outZ;
597 s32 x, y, z;
598
599 if (actorID == ACTOR_SELF) {
600 actorID = script->owner1.actorID;
601 }
602
603 actor = get_actor(actorID);
604
605 outX = *args++;
606 outY = *args++;
607 outZ = *args++;
608
609 x = actor->curPos.x;
610 y = actor->curPos.y;
611 z = actor->curPos.z;
612
616
617 return ApiStatus_DONE2;
618}
619
620API_CALLABLE(GetPartOffset) {
621 Bytecode* args = script->ptrReadPos;
622 s32 actorID = evt_get_variable(script, *args++);
623 s32 partID;
625 s32 outX, outY, outZ;
626 s32 x, y, z;
627
628 if (actorID == ACTOR_SELF) {
629 actorID = script->owner1.actorID;
630 }
631
632 partID = evt_get_variable(script, *args++);
633 actorPart = get_actor_part(get_actor(actorID), partID);
634
635 outX = *args++;
636 outY = *args++;
637 outZ = *args++;
638
640 x = actorPart->partOffset.x;
641 y = actorPart->partOffset.y;
642 z = actorPart->partOffset.z;
643 } else {
644 x = actorPart->absolutePos.x;
645 y = actorPart->absolutePos.y;
646 z = actorPart->absolutePos.z;
647 }
648
652
653 return ApiStatus_DONE2;
654}
655
656API_CALLABLE(GetPartPos) {
657 Bytecode* args = script->ptrReadPos;
658 s32 actorID = evt_get_variable(script, *args++);
659 s32 partID;
661 s32 outX, outY, outZ;
662 s32 x, y, z;
663
664 if (actorID == ACTOR_SELF) {
665 actorID = script->owner1.actorID;
666 }
667
668 partID = evt_get_variable(script, *args++);
669 actorPart = get_actor_part(get_actor(actorID), partID);
670
671 outX = *args++;
672 outY = *args++;
673 outZ = *args++;
674
675 x = actorPart->curPos.x;
676 y = actorPart->curPos.y;
677 z = actorPart->curPos.z;
678
682
683 return ApiStatus_DONE2;
684}
685
686API_CALLABLE(GetHomePos) {
687 Bytecode* args = script->ptrReadPos;
688 s32 actorID = evt_get_variable(script, *args++);
689 Actor* actor;
690 s32 outX, outY, outZ;
691 s32 x, y, z;
692
693 if (actorID == ACTOR_SELF) {
694 actorID = script->owner1.actorID;
695 }
696
697 actor = get_actor(actorID);
698
699 outX = *args++;
700 outY = *args++;
701 outZ = *args++;
702
703 x = actor->homePos.x;
704 y = actor->homePos.y;
705 z = actor->homePos.z;
706
710
711 return ApiStatus_DONE2;
712}
713
714API_CALLABLE(SetActorPos) {
715 Bytecode* args = script->ptrReadPos;
716 s32 actorID = evt_get_variable(script, *args++);
717 Actor* actor;
718 f32 x, y, z;
719
720 if (actorID == ACTOR_SELF) {
721 actorID = script->owner1.actorID;
722 }
723
724 x = evt_get_variable(script, *args++);
725 y = evt_get_variable(script, *args++);
726 z = evt_get_variable(script, *args++);
727
728 actor = get_actor(actorID);
729 actor->curPos.x = x;
730 actor->curPos.y = y;
731 actor->curPos.z = z;
732
733 return ApiStatus_DONE2;
734}
735
736API_CALLABLE(SetPartPos) {
737 Bytecode* args = script->ptrReadPos;
738 s32 actorID = evt_get_variable(script, *args++);
739 Actor* actor;
740 s32 partID;
741 f32 x, y, z;
743
744 if (actorID == ACTOR_SELF) {
745 actorID = script->owner1.actorID;
746 }
747
748 partID = evt_get_variable(script, *args++);
749 x = evt_get_variable(script, *args++);
750 y = evt_get_variable(script, *args++);
751 z = evt_get_variable(script, *args++);
752
753 actor = get_actor(actorID);
754
755 switch (actorID & ACTOR_CLASS_MASK) {
757 actor->curPos.x = x;
758 actor->curPos.y = y;
759 actor->curPos.z = z;
760 break;
763 actorPart = get_actor_part(actor, partID);
764
766 actorPart->partOffset.x = x;
767 actorPart->partOffset.y = y;
768 actorPart->partOffset.z = z;
769 } else {
770 actorPart->absolutePos.x = x;
771 actorPart->absolutePos.y = y;
772 actorPart->absolutePos.z = z;
773 }
774 break;
775 }
776
777 return ApiStatus_DONE2;
778}
779
780API_CALLABLE(SetEnemyTargetOffset) {
781 Bytecode* args = script->ptrReadPos;
782 s32 actorID = evt_get_variable(script, *args++);
783 Actor* actor;
784 s32 partID;
785 f32 x, y;
787
788 if (actorID == ACTOR_SELF) {
789 actorID = script->owner1.actorID;
790 }
791
792 partID = evt_get_variable(script, *args++);
793 x = evt_get_variable(script, *args++);
794 y = evt_get_variable(script, *args++);
795
796 actor = get_actor(actorID);
797
798 switch (actorID & ACTOR_CLASS_MASK) {
800 break;
803 actorPart = get_actor_part(actor, partID);
804 actorPart->targetOffset.x = x;
805 actorPart->targetOffset.y = y;
806 break;
807 }
808
809 return ApiStatus_DONE2;
810}
811
812API_CALLABLE(SetAnimation) {
813 Bytecode* args = script->ptrReadPos;
814 s32 actorID = evt_get_variable(script, *args++);
815 s32 partID;
816 AnimID animID;
817
818 if (actorID == ACTOR_SELF) {
819 actorID = script->owner1.actorID;
820 }
821
822 partID = evt_get_variable(script, *args++);
823 animID = evt_get_variable(script, *args++);
824
825 set_actor_anim(actorID, partID, animID);
826
827 return ApiStatus_DONE2;
828}
829
830API_CALLABLE(GetAnimation) {
831 Bytecode* args = script->ptrReadPos;
832 s32 actorID = evt_get_variable(script, *args++);
833 s32 partID;
835 s32 outVar;
836
837 if (actorID == ACTOR_SELF) {
838 actorID = script->owner1.actorID;
839 }
840 partID = evt_get_variable(script, *args++);
841 outVar = *args++;
842
843 actorPart = get_actor_part(get_actor(actorID), partID);
844
845 if (actorPart != nullptr) {
846 evt_set_variable(script, outVar, actorPart->curAnimation);
847 }
848 return ApiStatus_DONE2;
849}
850
851API_CALLABLE(SetAnimationRate) {
852 Bytecode* args = script->ptrReadPos;
853 s32 actorID = evt_get_variable(script, *args++);
854 s32 partID;
855 f32 rate;
856
857 if (actorID == ACTOR_SELF) {
858 actorID = script->owner1.actorID;
859 }
860
861 partID = evt_get_variable(script, *args++);
863
864 set_actor_anim_rate(actorID, partID, rate);
865
866 return ApiStatus_DONE2;
867}
868
869API_CALLABLE(SetActorYaw) {
870 Bytecode* args = script->ptrReadPos;
871 s32 actorID = evt_get_variable(script, *args++);
872
873 if (actorID == ACTOR_SELF) {
874 actorID = script->owner1.actorID;
875 }
876
877 set_actor_yaw(actorID, evt_get_variable(script, *args++));
878 return ApiStatus_DONE2;
879}
880
881API_CALLABLE(GetActorYaw) {
882 Bytecode* args = script->ptrReadPos;
883 s32 actorID = evt_get_variable(script, *args++);
884 s32 a1;
885
886 if (actorID == ACTOR_SELF) {
887 actorID = script->owner1.actorID;
888 }
889
890 a1 = *args++;
891
892 evt_set_variable(script, a1, get_actor(actorID)->yaw);
893 return ApiStatus_DONE2;
894}
895
896API_CALLABLE(SetPartYaw) {
897 Bytecode* args = script->ptrReadPos;
898 s32 actorID = evt_get_variable(script, *args++);
899 s32 partID;
900 s32 yaw;
901
902 if (actorID == ACTOR_SELF) {
903 actorID = script->owner1.actorID;
904 }
905
906 partID = evt_get_variable(script, *args++);
907 yaw = evt_get_variable(script, *args++);
908
909 set_part_yaw(actorID, partID, yaw);
910 return ApiStatus_DONE2;
911}
912
913API_CALLABLE(GetPartYaw) {
914 Bytecode* args = script->ptrReadPos;
915 s32 actorID = evt_get_variable(script, *args++);
916 s32 partID;
917 s32 a1;
918
919 if (actorID == ACTOR_SELF) {
920 actorID = script->owner1.actorID;
921 }
922
923 partID = evt_get_variable(script, *args++);
924 a1 = *args++;
925
926 evt_set_variable(script, a1, get_actor_part(get_actor(actorID), partID)->yaw);
927 return ApiStatus_DONE2;
928}
929
930API_CALLABLE(SetActorJumpGravity) {
931 Bytecode* args = script->ptrReadPos;
932 s32 actorID = evt_get_variable(script, *args++);
934
935 if (actorID == ACTOR_SELF) {
936 actorID = script->owner1.actorID;
937 }
938
941 return ApiStatus_DONE2;
942}
943
944API_CALLABLE(SetActorIdleJumpGravity) {
945 Bytecode* args = script->ptrReadPos;
946 s32 actorID = evt_get_variable(script, *args++);
948
949 if (actorID == ACTOR_SELF) {
950 actorID = script->owner1.actorID;
951 }
952
955 return ApiStatus_DONE2;
956}
957
958API_CALLABLE(SetActorSpeed) {
959 Bytecode* args = script->ptrReadPos;
960 s32 actorID = evt_get_variable(script, *args++);
961 f32 moveSpeed;
962
963 if (actorID == ACTOR_SELF) {
964 actorID = script->owner1.actorID;
965 }
966
967 moveSpeed = evt_get_float_variable(script, *args++);
968 get_actor(actorID)->state.speed = moveSpeed;
969 return ApiStatus_DONE2;
970}
971
972// SetActorFlySpeed?
973API_CALLABLE(SetActorIdleSpeed) {
974 Bytecode* args = script->ptrReadPos;
975 s32 actorID = evt_get_variable(script, *args++);
977
978 if (actorID == ACTOR_SELF) {
979 actorID = script->owner1.actorID;
980 }
981
983 get_actor(actorID)->fly.speed = flySpeed;
984 return ApiStatus_DONE2;
985}
986
987API_CALLABLE(SetPartJumpGravity) {
988 Bytecode* args = script->ptrReadPos;
989 s32 actorID = evt_get_variable(script, *args++);
990 s32 partID;
991 f32 jumpScale;
992
993 if (actorID == ACTOR_SELF) {
994 actorID = script->owner1.actorID;
995 }
996
997 partID = evt_get_variable(script, *args++);
998 jumpScale = evt_get_float_variable(script, *args++);
999
1000 get_actor_part(get_actor(actorID), partID)->movement->jumpScale = jumpScale;
1001 return ApiStatus_DONE2;
1002}
1003
1004API_CALLABLE(SetPartMoveSpeed) {
1005 Bytecode* args = script->ptrReadPos;
1006 s32 actorID = evt_get_variable(script, *args++);
1007 s32 partID;
1008 f32 moveSpeed;
1009
1010 if (actorID == ACTOR_SELF) {
1011 actorID = script->owner1.actorID;
1012 }
1013
1014 partID = evt_get_variable(script, *args++);
1015 moveSpeed = evt_get_float_variable(script, *args++);
1016
1017 get_actor_part(get_actor(actorID), partID)->movement->moveSpeed = moveSpeed;
1018 return ApiStatus_DONE2;
1019}
1020
1021API_CALLABLE(SetJumpAnimations) {
1022 Bytecode* args = script->ptrReadPos;
1023 s32 actorID = evt_get_variable(script, *args++);
1024 Actor* actor;
1025 s32 jumpPartIndex;
1026 s32 animJumpRise;
1027 s32 animJumpFall;
1028 s32 animJumpLand;
1029
1030 if (actorID == ACTOR_SELF) {
1031 actorID = script->owner1.actorID;
1032 }
1033
1034 jumpPartIndex = evt_get_variable(script, *args++);
1035 animJumpRise = *args++;
1036 animJumpFall = *args++;
1037 animJumpLand = *args++;
1038
1039 actor = get_actor(actorID);
1040 actor->state.jumpPartIndex = jumpPartIndex;
1041 actor->state.animJumpRise = animJumpRise;
1042 actor->state.animJumpFall = animJumpFall;
1043 actor->state.animJumpLand = animJumpLand;
1044
1045 return ApiStatus_DONE2;
1046}
1047
1048API_CALLABLE(AddActorPos) {
1049 Bytecode* args = script->ptrReadPos;
1050 s32 actorID = evt_get_variable(script, *args++);
1051 Actor* actor;
1052 f32 x, y, z;
1053
1054 if (actorID == ACTOR_SELF) {
1055 actorID = script->owner1.actorID;
1056 }
1057
1058 x = evt_get_float_variable(script, *args++);
1059 y = evt_get_float_variable(script, *args++);
1060 z = evt_get_float_variable(script, *args++);
1061
1062 actor = get_actor(actorID);
1063 actor->curPos.x += x;
1064 actor->curPos.y += y;
1065 actor->curPos.z += z;
1066
1067 return ApiStatus_DONE2;
1068}
1069
1070API_CALLABLE(SetActorDispOffset) {
1071 Bytecode* args = script->ptrReadPos;
1072 s32 actorID = evt_get_variable(script, *args++);
1073 Actor* actor;
1074 f32 x, y, z;
1075
1076 if (actorID == ACTOR_SELF) {
1077 actorID = script->owner1.actorID;
1078 }
1079
1080 x = evt_get_float_variable(script, *args++);
1081 y = evt_get_float_variable(script, *args++);
1082 z = evt_get_float_variable(script, *args++);
1083
1084 actor = get_actor(actorID);
1085 actor->headOffset.x = x;
1086 actor->headOffset.y = y;
1087 actor->headOffset.z = z;
1088
1089 return ApiStatus_DONE2;
1090}
1091
1092API_CALLABLE(GetPartDispOffset) {
1093 Bytecode* args = script->ptrReadPos;
1094 s32 actorID = evt_get_variable(script, *args++);
1096 s32 partID;
1097 s32 outX, outY, outZ;
1098 f32 x, y, z;
1099
1100 if (actorID == ACTOR_SELF) {
1101 actorID = script->owner1.actorID;
1102 }
1103
1104 partID = evt_get_variable(script, *args++);
1105 outX = *args++;
1106 outY = *args++;
1107 outZ = *args++;
1108
1109 actorPart = get_actor_part(get_actor(actorID), partID);
1110
1112 x = actorPart->partOffset.x;
1113 y = actorPart->partOffset.y;
1114 z = actorPart->partOffset.z;
1115 } else {
1116 x = actorPart->visualOffset.x;
1117 y = actorPart->visualOffset.y;
1118 z = actorPart->visualOffset.z;
1119 }
1120
1124
1125 return ApiStatus_DONE2;
1126}
1127
1128API_CALLABLE(SetPartDispOffset) {
1129 Bytecode* args = script->ptrReadPos;
1130 s32 actorID = evt_get_variable(script, *args++);
1132 s32 partID;
1133 f32 x, y, z;
1134
1135 if (actorID == ACTOR_SELF) {
1136 actorID = script->owner1.actorID;
1137 }
1138
1139 partID = evt_get_variable(script, *args++);
1140
1141 x = evt_get_float_variable(script, *args++);
1142 y = evt_get_float_variable(script, *args++);
1143 z = evt_get_float_variable(script, *args++);
1144 actorPart = get_actor_part(get_actor(actorID), partID);
1145
1147 actorPart->partOffset.x = x;
1148 actorPart->partOffset.y = y;
1149 actorPart->partOffset.z = z;
1150 } else {
1151 actorPart->visualOffset.x = x;
1152 actorPart->visualOffset.y = y;
1153 actorPart->visualOffset.z = z;
1154 }
1155
1156 return ApiStatus_DONE2;
1157}
1158
1159API_CALLABLE(AddPartDispOffset) {
1160 Bytecode* args = script->ptrReadPos;
1161 s32 actorID = evt_get_variable(script, *args++);
1163 s32 partID;
1164 f32 x, y, z;
1165
1166 if (actorID == ACTOR_SELF) {
1167 actorID = script->owner1.actorID;
1168 }
1169
1170 partID = evt_get_variable(script, *args++);
1171
1172 x = evt_get_float_variable(script, *args++);
1173 y = evt_get_float_variable(script, *args++);
1174 z = evt_get_float_variable(script, *args++);
1175 actorPart = get_actor_part(get_actor(actorID), partID);
1176
1178 actorPart->partOffset.x += x;
1179 actorPart->partOffset.y += y;
1180 actorPart->partOffset.z += z;
1181 } else {
1182 actorPart->visualOffset.x += x;
1183 actorPart->visualOffset.y += y;
1184 actorPart->visualOffset.z += z;
1185 }
1186
1187 return ApiStatus_DONE2;
1188}
1189
1190API_CALLABLE(FreezeBattleState) {
1193 Bytecode* args = script->ptrReadPos;
1195
1196 if (increaseFreeze) {
1197 battleStatus->stateFreezeCount++;
1198 } else if (battleStatus->stateFreezeCount > 0) {
1199 battleStatus2->stateFreezeCount--;
1200 }
1201
1202 return ApiStatus_DONE2;
1203}
1204
1205API_CALLABLE(GetActorVar) {
1206 Bytecode* args = script->ptrReadPos;
1207 s32 actorID = evt_get_variable(script, *args++);
1208 s32 var1;
1209 s32 a2;
1210
1211 if (actorID == ACTOR_SELF) {
1212 actorID = script->owner1.actorID;
1213 }
1214
1215 var1 = evt_get_variable(script, *args++);
1216 a2 = *args++;
1217
1218 evt_set_variable(script, a2, get_actor(actorID)->state.varTable[var1]);
1219
1220 return ApiStatus_DONE2;
1221}
1222
1223API_CALLABLE(SetActorVar) {
1224 Bytecode* args = script->ptrReadPos;
1225 s32 actorID = evt_get_variable(script, *args++);
1226 s32 index;
1227 s32 val;
1228
1229 if (actorID == ACTOR_SELF) {
1230 actorID = script->owner1.actorID;
1231 }
1232
1233 index = evt_get_variable(script, *args++);
1234 val = evt_get_variable(script, *args++);
1235
1236 get_actor(actorID)->state.varTable[index] = val;
1237
1238 return ApiStatus_DONE2;
1239}
1240
1241API_CALLABLE(AddActorVar) {
1242 Bytecode* args = script->ptrReadPos;
1243 s32 actorID = evt_get_variable(script, *args++);
1244 s32 index;
1245 s32 val;
1246 ActorState* state;
1247
1248 if (actorID == ACTOR_SELF) {
1249 actorID = script->owner1.actorID;
1250 }
1251
1252 index = evt_get_variable(script, *args++);
1253 val = evt_get_variable(script, *args++);
1254
1255 state = &get_actor(actorID)->state;
1256 state->varTable[index] += val;
1257
1258 return ApiStatus_DONE2;
1259}
1260
1261API_CALLABLE(GetPartMovementVar) {
1262 Bytecode* args = script->ptrReadPos;
1263 s32 actorID = evt_get_variable(script, *args++);
1264 s32 partID;
1266 s32 outVar;
1267
1268 if (actorID == ACTOR_SELF) {
1269 actorID = script->owner1.actorID;
1270 }
1271
1272 partID = evt_get_variable(script, *args++);
1274 outVar = *args++;
1275
1276 evt_set_variable(script, outVar, get_actor_part(get_actor(actorID), partID)->movement->varTable[tableIndex]);
1277
1278 return ApiStatus_DONE2;
1279}
1280
1281API_CALLABLE(SetPartMovementVar) {
1282 Bytecode* args = script->ptrReadPos;
1283 s32 actorID = evt_get_variable(script, *args++);
1284 s32 partID;
1286 s32 val;
1287
1288 if (actorID == ACTOR_SELF) {
1289 actorID = script->owner1.actorID;
1290 }
1291
1292 partID = evt_get_variable(script, *args++);
1294 val = evt_get_variable(script, *args++);
1295
1296 get_actor_part(get_actor(actorID), partID)->movement->varTable[tableIndex] = val;
1297
1298 return ApiStatus_DONE2;
1299}
1300
1301API_CALLABLE(AddPartMovementVar) {
1302 Bytecode* args = script->ptrReadPos;
1303 s32 actorID = evt_get_variable(script, *args++);
1304 s32 partID;
1306 s32 val;
1307
1308 if (actorID == ACTOR_SELF) {
1309 actorID = script->owner1.actorID;
1310 }
1311
1312 partID = evt_get_variable(script, *args++);
1314 val = evt_get_variable(script, *args++);
1315
1316 get_actor_part(get_actor(actorID), partID)->movement->varTable[tableIndex] += val;
1317
1318 return ApiStatus_DONE2;
1319}
1320
1321API_CALLABLE(SetActorRotation) {
1322 Bytecode* args = script->ptrReadPos;
1323 s32 actorID = evt_get_variable(script, *args++);
1324 Actor* actor;
1325 s32 x, y, z;
1326
1327 if (actorID == ACTOR_SELF) {
1328 actorID = script->owner1.actorID;
1329 }
1330
1331 x = evt_get_float_variable(script, *args++);
1332 y = evt_get_float_variable(script, *args++);
1333 z = evt_get_float_variable(script, *args++);
1334
1335 actor = get_actor(actorID);
1336
1337 if (x != EVT_IGNORE_ARG) {
1338 actor->rot.x = x;
1339 }
1340
1341 if (y != EVT_IGNORE_ARG) {
1342 actor->rot.y = y;
1343 }
1344
1345 if (z != EVT_IGNORE_ARG) {
1346 actor->rot.z = z;
1347 }
1348
1349 return ApiStatus_DONE2;
1350}
1351
1352API_CALLABLE(SetActorRotationOffset) {
1353 Bytecode* args = script->ptrReadPos;
1354 s32 actorID = evt_get_variable(script, *args++);
1355 Actor* actor;
1356 s32 x, y, z;
1357
1358 if (actorID == ACTOR_SELF) {
1359 actorID = script->owner1.actorID;
1360 }
1361
1362 x = evt_get_float_variable(script, *args++);
1363 y = evt_get_float_variable(script, *args++);
1364 z = evt_get_float_variable(script, *args++);
1365
1366 actor = get_actor(actorID);
1367
1368 actor->rotPivotOffset.x = x;
1369 actor->rotPivotOffset.y = y;
1370 actor->rotPivotOffset.z = z;
1371
1372 return ApiStatus_DONE2;
1373}
1374
1375API_CALLABLE(GetActorRotation) {
1376 Bytecode* args = script->ptrReadPos;
1377 s32 actorID = evt_get_variable(script, *args++);
1378 Actor* actor;
1379 s32 x, y, z;
1380
1381 if (actorID == ACTOR_SELF) {
1382 actorID = script->owner1.actorID;
1383 }
1384
1385 x = *args++;
1386 y = *args++;
1387 z = *args++;
1388
1389 actor = get_actor(actorID);
1390
1391 evt_set_variable(script, x, actor->rot.x);
1392 evt_set_variable(script, y, actor->rot.y);
1393 evt_set_variable(script, z, actor->rot.z);
1394
1395 return ApiStatus_DONE2;
1396}
1397
1398API_CALLABLE(SetPartRotation) {
1399 Bytecode* args = script->ptrReadPos;
1400 s32 actorID = evt_get_variable(script, *args++);
1401 s32 partID = evt_get_variable(script, *args++);
1403 s32 x, y, z;
1404
1405 if (actorID == ACTOR_SELF) {
1406 actorID = script->owner1.actorID;
1407 }
1408
1409 x = evt_get_float_variable(script, *args++);
1410 y = evt_get_float_variable(script, *args++);
1411 z = evt_get_float_variable(script, *args++);
1412
1413 actorPart = get_actor_part(get_actor(actorID), partID);
1414
1415 actorPart->rot.x = x;
1416 actorPart->rot.y = y;
1417 actorPart->rot.z = z;
1418
1419 return ApiStatus_DONE2;
1420}
1421
1422API_CALLABLE(SetPartRotationOffset) {
1423 Bytecode* args = script->ptrReadPos;
1424 s32 actorID = evt_get_variable(script, *args++);
1425 s32 partID = evt_get_variable(script, *args++);
1427 s32 x, y, z;
1428
1429 if (actorID == ACTOR_SELF) {
1430 actorID = script->owner1.actorID;
1431 }
1432
1433 x = evt_get_float_variable(script, *args++);
1434 y = evt_get_float_variable(script, *args++);
1435 z = evt_get_float_variable(script, *args++);
1436
1437 actorPart = get_actor_part(get_actor(actorID), partID);
1438
1439 actorPart->rotPivotOffset.x = x;
1440 actorPart->rotPivotOffset.y = y;
1441 actorPart->rotPivotOffset.z = z;
1442
1443 return ApiStatus_DONE2;
1444}
1445
1446API_CALLABLE(GetPartRotation) {
1447 Bytecode* args = script->ptrReadPos;
1448 s32 actorID = evt_get_variable(script, *args++);
1449 s32 partID = evt_get_variable(script, *args++);
1451 s32 x, y, z;
1452
1453 if (actorID == ACTOR_SELF) {
1454 actorID = script->owner1.actorID;
1455 }
1456
1457 x = *args++;
1458 y = *args++;
1459 z = *args++;
1460
1461 actorPart = get_actor_part(get_actor(actorID), partID);
1462
1466
1467 return ApiStatus_DONE2;
1468}
1469
1470API_CALLABLE(SetActorScale) {
1471 Bytecode* args = script->ptrReadPos;
1472 s32 actorID = evt_get_variable(script, *args++);
1473 Actor* actor;
1474 f32 x, y, z;
1475
1476 if (actorID == ACTOR_SELF) {
1477 actorID = script->owner1.actorID;
1478 }
1479
1480 x = evt_get_float_variable(script, *args++);
1481 y = evt_get_float_variable(script, *args++);
1482 z = evt_get_float_variable(script, *args++);
1483
1484 actor = get_actor(actorID);
1485
1486 actor->scale.x = x;
1487 actor->scale.y = y;
1488 actor->scale.z = z;
1489
1490 return ApiStatus_DONE2;
1491}
1492
1493API_CALLABLE(SetActorScaleModifier) {
1494 Bytecode* args = script->ptrReadPos;
1495 s32 actorID = evt_get_variable(script, *args++);
1496 Actor* actor;
1497 f32 x, y, z;
1498
1499 if (actorID == ACTOR_SELF) {
1500 actorID = script->owner1.actorID;
1501 }
1502
1503 x = evt_get_float_variable(script, *args++);
1504 y = evt_get_float_variable(script, *args++);
1505 z = evt_get_float_variable(script, *args++);
1506
1507 actor = get_actor(actorID);
1508
1509 actor->scaleModifier.x = x;
1510 actor->scaleModifier.y = y;
1511 actor->scaleModifier.z = z;
1512
1513 return ApiStatus_DONE2;
1514}
1515
1516API_CALLABLE(GetActorScale) {
1517 Bytecode* args = script->ptrReadPos;
1518 s32 actorID = evt_get_variable(script, *args++);
1519 Actor* actor;
1520 f32 x, y, z;
1521
1522 if (actorID == ACTOR_SELF) {
1523 actorID = script->owner1.actorID;
1524 }
1525
1526 x = *args++;
1527 y = *args++;
1528 z = *args++;
1529
1530 actor = get_actor(actorID);
1531
1535
1536 return ApiStatus_DONE2;
1537}
1538
1539API_CALLABLE(SetPartScale) {
1540 Bytecode* args = script->ptrReadPos;
1541 s32 actorID = evt_get_variable(script, *args++);
1542 s32 partID = evt_get_variable(script, *args++);
1544 f32 x, y, z;
1545
1546 if (actorID == ACTOR_SELF) {
1547 actorID = script->owner1.actorID;
1548 }
1549
1550 x = evt_get_float_variable(script, *args++);
1551 y = evt_get_float_variable(script, *args++);
1552 z = evt_get_float_variable(script, *args++);
1553
1554 actorPart = get_actor_part(get_actor(actorID), partID);
1555
1556 actorPart->scale.x = x;
1557 actorPart->scale.y = y;
1558 actorPart->scale.z = z;
1559
1560 return ApiStatus_DONE2;
1561}
1562
1563API_CALLABLE(GetPartScale) {
1564 Bytecode* args = script->ptrReadPos;
1565 s32 actorID = evt_get_variable(script, *args++);
1566 s32 partID = evt_get_variable(script, *args++);
1568 s32 x, y, z;
1569
1570 if (actorID == ACTOR_SELF) {
1571 actorID = script->owner1.actorID;
1572 }
1573
1574 x = *args++;
1575 y = *args++;
1576 z = *args++;
1577
1578 actorPart = get_actor_part(get_actor(actorID), partID);
1579
1583
1584 return ApiStatus_DONE2;
1585}
1586
1587API_CALLABLE(GetBattleFlags) {
1589 return ApiStatus_DONE2;
1590}
1591
1592API_CALLABLE(SetBattleFlagBits) {
1593 Bytecode* args = script->ptrReadPos;
1594 s32 bits = *args++;
1595 s32 mode = evt_get_variable(script, *args++);
1596
1597 if (mode) {
1599 } else {
1601 }
1602
1603 return ApiStatus_DONE2;
1604}
1605
1606API_CALLABLE(GetBattleFlags2) {
1608 return ApiStatus_DONE2;
1609}
1610
1611API_CALLABLE(SetBattleFlagBits2) {
1612 Bytecode* args = script->ptrReadPos;
1613 s32 bits = *args++;
1614 s32 mode = evt_get_variable(script, *args++);
1615
1616 if (mode) {
1618 } else {
1620 }
1621
1622 return ApiStatus_DONE2;
1623}
1624
1625API_CALLABLE(SetActorFlags) {
1626 Bytecode* args = script->ptrReadPos;
1627 s32 actorID = evt_get_variable(script, *args++);
1628 s32 flagBits;
1629
1630 if (actorID == ACTOR_SELF) {
1631 actorID = script->owner1.actorID;
1632 }
1633
1634 flagBits = *args++;
1635 get_actor(actorID)->flags = flagBits;
1636
1637 return ApiStatus_DONE2;
1638}
1639
1640API_CALLABLE(SetActorFlagBits) {
1641 Bytecode* args = script->ptrReadPos;
1642 s32 actorID = evt_get_variable(script, *args++);
1643 s32 bits;
1644 s32 mode;
1645 Actor* actor;
1646
1647 if (actorID == ACTOR_SELF) {
1648 actorID = script->owner1.actorID;
1649 }
1650
1651 bits = *args++;
1652 mode = evt_get_variable(script, *args++);
1653 actor = get_actor(actorID);
1654
1655 if (mode) {
1656 actor->flags |= bits;
1657 } else {
1658 actor->flags &= ~bits;
1659 }
1660
1661 return ApiStatus_DONE2;
1662}
1663
1664API_CALLABLE(GetActorFlags) {
1665 Bytecode* args = script->ptrReadPos;
1666 s32 actorID = evt_get_variable(script, *args++);
1667 s32 outVar;
1668
1669 if (actorID == ACTOR_SELF) {
1670 actorID = script->owner1.actorID;
1671 }
1672
1673 outVar = *args++;
1674
1676
1677 return ApiStatus_DONE2;
1678}
1679
1680API_CALLABLE(SetPartFlags) {
1681 Bytecode* args = script->ptrReadPos;
1682 s32 actorID = evt_get_variable(script, *args++);
1683 s32 flagBits;
1684 s32 partID;
1685
1686 if (actorID == ACTOR_SELF) {
1687 actorID = script->owner1.actorID;
1688 }
1689
1690 partID = evt_get_variable(script, *args++);
1691 flagBits = *args++;
1692
1693 get_actor_part(get_actor(actorID), partID)->flags = flagBits;
1694
1695 return ApiStatus_DONE2;
1696}
1697
1698API_CALLABLE(SetPartFlagBits) {
1699 Bytecode* args = script->ptrReadPos;
1700 s32 actorID = evt_get_variable(script, *args++);
1702 s32 bits;
1703 s32 partID;
1704 s32 mode;
1705
1706 if (actorID == ACTOR_SELF) {
1707 actorID = script->owner1.actorID;
1708 }
1709
1710 partID = evt_get_variable(script, *args++);
1711 bits = *args++;
1712 mode = evt_get_variable(script, *args++);
1713
1714 actorPart = get_actor_part(get_actor(actorID), partID);
1715
1716 if (mode) {
1717 actorPart->flags |= bits;
1718 } else {
1719 actorPart->flags &= ~bits;
1720 }
1721
1722 return ApiStatus_DONE2;
1723}
1724
1725API_CALLABLE(SetPartTargetFlags) {
1726 Bytecode* args = script->ptrReadPos;
1727 s32 actorID = evt_get_variable(script, *args++);
1728 s32 flagBits;
1729 s32 partID;
1730
1731 if (actorID == ACTOR_SELF) {
1732 actorID = script->owner1.actorID;
1733 }
1734
1735 partID = evt_get_variable(script, *args++);
1736 flagBits = *args++;
1737
1738 get_actor_part(get_actor(actorID), partID)->targetFlags = flagBits;
1739
1740 return ApiStatus_DONE2;
1741}
1742
1743API_CALLABLE(SetPartTargetFlagBits) {
1744 Bytecode* args = script->ptrReadPos;
1745 s32 actorID = evt_get_variable(script, *args++);
1747 s32 partID;
1748 s32 bits;
1749 s32 mode;
1750
1751 if (actorID == ACTOR_SELF) {
1752 actorID = script->owner1.actorID;
1753 }
1754
1755 partID = evt_get_variable(script, *args++);
1756 bits = *args++;
1757 mode = evt_get_variable(script, *args++);
1758
1759 actorPart = get_actor_part(get_actor(actorID), partID);
1760
1761 if (mode) {
1762 actorPart->targetFlags |= bits;
1763 } else {
1764 actorPart->targetFlags &= ~bits;
1765 }
1766
1767 return ApiStatus_DONE2;
1768}
1769
1770API_CALLABLE(GetPartFlags) {
1771 Bytecode* args = script->ptrReadPos;
1772 s32 actorID = evt_get_variable(script, *args++);
1773 s32 partID;
1774 s32 outVar;
1775
1776 if (actorID == ACTOR_SELF) {
1777 actorID = script->owner1.actorID;
1778 }
1779
1780 partID = evt_get_variable(script, *args++);
1781 outVar = *args++;
1782
1784
1785 return ApiStatus_DONE2;
1786}
1787
1788API_CALLABLE(GetPartTargetFlags) {
1789 Bytecode* args = script->ptrReadPos;
1790 s32 actorID = evt_get_variable(script, *args++);
1791 s32 partID;
1792 s32 outVar;
1793
1794 if (actorID == ACTOR_SELF) {
1795 actorID = script->owner1.actorID;
1796 }
1797
1798 partID = evt_get_variable(script, *args++);
1799 outVar = *args++;
1800
1801 evt_set_variable(script, outVar, get_actor_part(get_actor(actorID), partID)->targetFlags);
1802
1803 return ApiStatus_DONE2;
1804}
1805
1806API_CALLABLE(SetPartEventFlags) {
1807 Bytecode* args = script->ptrReadPos;
1808 s32 actorID = evt_get_variable(script, *args++);
1809 s32 flagBits;
1810 s32 partID;
1811
1812 if (actorID == ACTOR_SELF) {
1813 actorID = script->owner1.actorID;
1814 }
1815
1816 partID = evt_get_variable(script, *args++);
1817 flagBits = *args++;
1818
1819 get_actor_part(get_actor(actorID), partID)->eventFlags = flagBits;
1820
1821 return ApiStatus_DONE2;
1822}
1823
1824API_CALLABLE(SetPartEventBits) {
1825 Bytecode* args = script->ptrReadPos;
1826 s32 actorID = evt_get_variable(script, *args++);
1827 Actor* actor;
1828 ActorPart* part;
1829 s32 partID;
1830 s32 bits;
1831 s32 mode;
1832
1833 if (actorID == ACTOR_SELF) {
1834 actorID = script->owner1.actorID;
1835 }
1836
1837 partID = evt_get_variable(script, *args++);
1838 bits = *args++;
1839 mode = evt_get_variable(script, *args++);
1840
1841 actor = get_actor(actorID);
1842 part = get_actor_part(actor, partID);
1843
1844 if (mode) {
1845 part->eventFlags |= bits;
1846 } else {
1847 part->eventFlags &= ~bits;
1848 }
1849
1850 return ApiStatus_DONE2;
1851}
1852
1853API_CALLABLE(GetPartEventFlags) {
1854 Bytecode* args = script->ptrReadPos;
1855 s32 actorID = evt_get_variable(script, *args++);
1856 s32 partID;
1857 Actor* actor;
1858 ActorPart* part;
1859 s32 outVar;
1860
1861 if (actorID == ACTOR_SELF) {
1862 actorID = script->owner1.actorID;
1863 }
1864
1865 partID = evt_get_variable(script, *args++);
1866 outVar = *args++;
1867
1868 actor = get_actor(actorID);
1869 part = get_actor_part(actor, partID);
1870 evt_set_variable(script, outVar, part->eventFlags);
1871
1872 return ApiStatus_DONE2;
1873}
1874
1875API_CALLABLE(SetPartImmunityFlags) {
1876 Bytecode* args = script->ptrReadPos;
1877 s32 actorID = evt_get_variable(script, *args++);
1878 s32 flagBits;
1879 s32 partID;
1880
1881 if (actorID == ACTOR_SELF) {
1882 actorID = script->owner1.actorID;
1883 }
1884
1885 partID = evt_get_variable(script, *args++);
1886 flagBits = *args++;
1887
1889
1890 return ApiStatus_DONE2;
1891}
1892
1893API_CALLABLE(SetPartImmunityBits) {
1894 Bytecode* args = script->ptrReadPos;
1895 s32 actorID = evt_get_variable(script, *args++);
1896 Actor* actor;
1897 ActorPart* part;
1898 s32 partID;
1899 s32 bits;
1900 s32 mode;
1901
1902 if (actorID == ACTOR_SELF) {
1903 actorID = script->owner1.actorID;
1904 }
1905
1906 partID = evt_get_variable(script, *args++);
1907 bits = *args++;
1908 mode = evt_get_variable(script, *args++);
1909
1910 actor = get_actor(actorID);
1911 part = get_actor_part(actor, partID);
1912
1913 if (mode) {
1914 part->elementalImmunities |= bits;
1915 } else {
1916 part->elementalImmunities &= ~bits;
1917 }
1918
1919 return ApiStatus_DONE2;
1920}
1921
1922API_CALLABLE(HPBarToHome) {
1923 Bytecode* args = script->ptrReadPos;
1924 s32 actorID = evt_get_variable(script, *args++);
1925 Actor* actor;
1926
1927 if (actorID == ACTOR_SELF) {
1928 actorID = script->owner1.actorID;
1929 }
1930
1931 actor = get_actor(actorID);
1932 actor->healthBarPos.x = actor->homePos.x + actor->actorBlueprint->healthBarOffset.x;
1933 actor->healthBarPos.y = actor->homePos.y + actor->actorBlueprint->healthBarOffset.y;
1934 actor->healthBarPos.z = actor->homePos.z;
1935
1936 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
1937 actor->healthBarPos.y = actor->homePos.y - actor->size.y - actor->actorBlueprint->healthBarOffset.y;
1938 }
1939
1940 actor->healthFraction = (actor->curHP * 25) / actor->maxHP;
1941
1942 return ApiStatus_DONE2;
1943}
1944
1945API_CALLABLE(HPBarToCurrent) {
1946 Bytecode* args = script->ptrReadPos;
1947 s32 actorID = evt_get_variable(script, *args++);
1948 Actor* actor;
1949
1950 if (actorID == ACTOR_SELF) {
1951 actorID = script->owner1.actorID;
1952 }
1953
1954 actor = get_actor(actorID);
1955 actor->healthBarPos.x = actor->curPos.x + actor->actorBlueprint->healthBarOffset.x;
1956 actor->healthBarPos.y = actor->curPos.y + actor->actorBlueprint->healthBarOffset.y;
1957 actor->healthBarPos.z = actor->curPos.z;
1958
1959 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
1960 actor->healthBarPos.y = actor->curPos.y - actor->size.y - actor->actorBlueprint->healthBarOffset.y;
1961 }
1962
1963 actor->healthFraction = (actor->curHP * 25) / actor->maxHP;
1964
1965 return ApiStatus_DONE2;
1966}
1967
1968API_CALLABLE(HideHPBar) {
1969 Bytecode* args = script->ptrReadPos;
1970 s32 actorID = evt_get_variable(script, *args++);
1971
1972 if (actorID == ACTOR_SELF) {
1973 actorID = script->owner1.actorID;
1974 }
1975
1977
1978 return ApiStatus_DONE2;
1979}
1980
1981API_CALLABLE(SetHPBarOffset) {
1982 Bytecode* args = script->ptrReadPos;
1983 s32 actorID = evt_get_variable(script, *args++);
1984 Actor* actor;
1985 s32 x, y;
1986
1987 if (actorID == ACTOR_SELF) {
1988 actorID = script->owner1.actorID;
1989 }
1990
1991 x = evt_get_variable(script, *args++);
1992 y = evt_get_variable(script, *args++);
1993
1994 actor = get_actor(actorID);
1995
1996 actor->healthBarOffset.x = x;
1997 actor->healthBarOffset.y = y;
1998 actor->healthBarPos.x = actor->homePos.x + actor->actorBlueprint->healthBarOffset.x + actor->healthBarOffset.x;
1999 actor->healthBarPos.y = actor->homePos.y + actor->actorBlueprint->healthBarOffset.y + actor->healthBarOffset.y;
2000 actor->healthBarPos.z = actor->homePos.z;
2001
2002 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
2003 actor->healthBarPos.y = actor->homePos.y - actor->size.y;
2004 }
2005
2006 return ApiStatus_DONE2;
2007}
2008
2009API_CALLABLE(SetActorStatusOffsets) {
2010 Bytecode* args = script->ptrReadPos;
2011 s32 actorID = evt_get_variable(script, *args++);
2012 Actor* actor;
2014
2015 if (actorID == ACTOR_SELF) {
2016 actorID = script->owner1.actorID;
2017 }
2018
2019 iconX = evt_get_variable(script, *args++);
2020 iconY = evt_get_variable(script, *args++);
2021 textX = evt_get_variable(script, *args++);
2022 textY = evt_get_variable(script, *args++);
2023
2024 actor = get_actor(actorID);
2025 actor->statusIconOffset.x = iconX;
2026 actor->statusIconOffset.y = iconY;
2027 actor->statusTextOffset.x = textX;
2028 actor->statusTextOffset.y = textY;
2029
2030 return ApiStatus_DONE2;
2031}
2032
2033API_CALLABLE(SummonEnemy) {
2035 Bytecode* args = script->ptrReadPos;
2036 Actor* actor1;
2037 Actor* actor2;
2038 s16* enemyIDs;
2040 s32 i, j;
2044
2045 if (isInitialCall) {
2046 script->functionTemp[0] = 0;
2047 }
2048
2049 switch (script->functionTemp[0]) {
2050 case 0:
2051 script->functionTempPtr[1] = create_actor((FormationRow*)evt_get_variable(script, *args++));
2052 script->functionTemp[2] = evt_get_variable(script, *args++); // isLowPriority
2053 script->functionTemp[0] = 1;
2054 break;
2055 case 1:
2056 actor2 = script->functionTempPtr[1];
2057 if (does_script_exist(actor2->takeTurnScriptID)) {
2058 break;
2059 }
2060
2061 enemyIDs = battleStatus->enemyIDs;
2062 if (battleStatus->nextEnemyIndex == 0) {
2063 numEnemies = 0;
2064 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2065 if (battleStatus->enemyActors[i]) {
2066 battleStatus->enemyIDs[numEnemies++] = i | ACTOR_CLASS_ENEMY;
2067 }
2068 }
2069 battleStatus->numEnemyActors = numEnemies;
2070 if (script->functionTemp[2]) {
2071 basePriority = -1000;
2072 } else {
2073 basePriority = 1000;
2074 }
2075 enemyIDs = battleStatus->enemyIDs;
2076 for (i = 0; i < numEnemies - 1; i++) {
2077 for (j = i + 1; j < numEnemies; j++) {
2078 enemyID1 = enemyIDs[i];
2079 actor1 = battleStatus->enemyActors[enemyID1 & 0xFF];
2080 priority1 = actor1->turnPriority;
2081 if (actor1 == actor2) {
2083 }
2084 enemyID2 = enemyIDs[j];
2085 actor1 = battleStatus->enemyActors[enemyID2 & 0xFF];
2086 priority2 = actor1->turnPriority;
2087 if (actor1 == actor2) {
2089 }
2090 if (priority1 < priority2) {
2091 enemyIDs[i] = enemyID2;
2092 enemyIDs[j] = enemyID1;
2093 }
2094 }
2095 }
2096 } else {
2097 numEnemies = battleStatus->numEnemyActors;
2098 for (i = 0; i < numEnemies; i++){
2099 if (battleStatus->enemyActors[enemyIDs[i] & 0xFF] == actor2) {
2100 enemyIDs[i] = -1;
2101 }
2102 }
2103 if (script->functionTemp[2] == 0) {
2104 for (i = numEnemies; i >= battleStatus->nextEnemyIndex; i--) {
2105 battleStatus->enemyIDs[i] = battleStatus->enemyIDs[i - 1];
2106 }
2107 battleStatus->enemyIDs[battleStatus->nextEnemyIndex - 1] = actor2->actorID;
2108 battleStatus->numEnemyActors++;
2109 battleStatus->nextEnemyIndex++;
2110 } else {
2111 battleStatus->enemyIDs[battleStatus->numEnemyActors] = actor2->actorID;
2112 battleStatus->numEnemyActors++;
2113 }
2114 }
2115 script->varTable[0] = actor2->actorID;
2116 return ApiStatus_DONE2;
2117 }
2118 return ApiStatus_BLOCK;
2119}
2120
2121API_CALLABLE(GetOwnerID) {
2122 Bytecode* args = script->ptrReadPos;
2123 s32 outVar = *args++;
2124
2125 evt_set_variable(script, outVar, script->owner1.actorID);
2126 return ApiStatus_DONE2;
2127}
2128
2129API_CALLABLE(SetOwnerID) {
2130 Bytecode* args = script->ptrReadPos;
2131 s32 actorID = evt_get_variable(script, *args++);
2132
2133 script->owner1.actorID = actorID;
2134 return ApiStatus_DONE2;
2135}
2136
2137API_CALLABLE(ActorExists) {
2139 Bytecode* args = script->ptrReadPos;
2140 s32 actorID = evt_get_variable(script, *args++);
2141 b32 exists;
2142
2143 if (actorID == ACTOR_SELF) {
2144 actorID = script->owner1.actorID;
2145 }
2146
2147 exists = get_actor(actorID) != nullptr;
2148 if ((actorID == ACTOR_PARTNER) && (partner == nullptr)) {
2149 exists = false;
2150 }
2151
2152 evt_set_variable(script, *args++, exists);
2153 return ApiStatus_DONE2;
2154}
2155
2156API_CALLABLE(GetPartAnimInstanceID) {
2157 Bytecode* args = script->ptrReadPos;
2158 s32 actorID = evt_get_variable(script, *args++);
2159 s32 partID = evt_get_variable(script, *args++);
2160 s32 outVar = *args++;
2161 Actor* actor;
2162 ActorPart* part;
2163
2164 if (actorID == ACTOR_SELF) {
2165 actorID = script->owner1.actorID;
2166 }
2167
2168 actor = get_actor(actorID);
2169 part = get_actor_part(actor, partID);
2170 evt_set_variable(script, outVar, part->spriteInstanceID);
2171
2172 return ApiStatus_DONE2;
2173}
2174
2175API_CALLABLE(GetPartAnimNotify) {
2176 Bytecode* args = script->ptrReadPos;
2177 s32 actorID = evt_get_variable(script, *args++);
2178 s32 partID = evt_get_variable(script, *args++);
2179 s32 outVar = *args++;
2180 Actor* actor;
2181 ActorPart* part;
2182
2183 if (actorID == ACTOR_SELF) {
2184 actorID = script->owner1.actorID;
2185 }
2186
2187 actor = get_actor(actorID);
2188 part = get_actor_part(actor, partID);
2189 evt_set_variable(script, outVar, part->animNotifyValue);
2190
2191 return ApiStatus_DONE2;
2192}
2193
2194API_CALLABLE(SetBattleMenuEnabledFlags) {
2195 Bytecode* args = script->ptrReadPos;
2196 s32 flagsValue = *args++;
2197
2199 return ApiStatus_DONE2;
2200}
2201
2202API_CALLABLE(SetEnabledStarPowers) {
2203 Bytecode* args = script->ptrReadPos;
2204 s32 enabled = *args++;
2205
2207 return ApiStatus_DONE2;
2208}
2209
2210API_CALLABLE(SetBattleInputMask) {
2211 Bytecode* args = script->ptrReadPos;
2212 s32 mask = *args++;
2213
2215 return ApiStatus_DONE2;
2216}
2217
2218API_CALLABLE(SetBattleInputButtons) {
2219 Bytecode* args = script->ptrReadPos;
2221 s32 currentButtonsDown = *args++;
2222 s32 currentButtonsPressed = *args++;
2223 s32 currentButtonsHeld = *args++;
2224
2226 battleStatus->curButtonsPressed = currentButtonsPressed;
2227 battleStatus->curButtonsHeld = currentButtonsHeld;
2228
2229 return ApiStatus_DONE2;
2230}
2231
2232API_CALLABLE(CheckButtonPress) {
2233 Bytecode* args = script->ptrReadPos;
2234 Bytecode buttons = *args++;
2235 Bytecode outVar = *args++;
2237
2239 return ApiStatus_DONE2;
2240}
2241
2242API_CALLABLE(CheckButtonHeld) {
2243 Bytecode* args = script->ptrReadPos;
2244 Bytecode buttons = *args++;
2245 Bytecode outVar = *args++;
2247
2249 return ApiStatus_DONE2;
2250}
2251
2252API_CALLABLE(CheckButtonDown) {
2253 Bytecode* args = script->ptrReadPos;
2254 Bytecode buttons = *args++;
2255 Bytecode outVar = *args++;
2257
2259 return ApiStatus_DONE2;
2260}
2261
2262API_CALLABLE(GetBattleState) {
2263 Bytecode* args = script->ptrReadPos;
2264 s32 outVar = *args++;
2265
2267 return ApiStatus_DONE2;
2268}
2269
2270API_CALLABLE(SetBattleState) {
2271 Bytecode* args = script->ptrReadPos;
2272 s32 state = evt_get_variable(script, *args++);
2273
2274 btl_set_state(state);
2275 return ApiStatus_DONE2;
2276}
2277
2278API_CALLABLE(WaitForState) {
2279 Bytecode* args = script->ptrReadPos;
2281 s32 waitForState;
2282
2283 if (isInitialCall) {
2284 waitForState = evt_get_variable(script, *args++);
2285 if (waitForState == BATTLE_STATE_NONE) {
2286 battleStatus->waitForState = BATTLE_STATE_NONE;
2287 return ApiStatus_DONE2;
2288 }
2289 battleStatus->waitForState = waitForState;
2290 }
2291
2292 waitForState = battleStatus->waitForState;
2293 if (waitForState == BATTLE_STATE_NONE) {
2294 return ApiStatus_DONE2;
2295 }
2296
2297 if (gBattleState == waitForState) {
2298 return ApiStatus_DONE2;
2299 } else {
2300 return ApiStatus_BLOCK;
2301 }
2302}
2303
2304API_CALLABLE(CancelEnemyTurn) {
2305 Bytecode* args = script->ptrReadPos;
2308
2309 switch (cancelMode) {
2310 case 0:
2311 battleStatus->cancelTurnMode = 1;
2312 break;
2313 case 1:
2314 battleStatus->cancelTurnMode = -1;
2315 break;
2316 }
2317
2318 return ApiStatus_DONE2;
2319}
2320
2321API_CALLABLE(func_8026E260) {
2322 Bytecode* args = script->ptrReadPos;
2323 s32 actorID = evt_get_variable(script, *args++);
2324
2325 evt_get_variable(script, *args++);
2326 if (actorID == ACTOR_SELF) {
2327 actorID = script->owner1.actorID;
2328 }
2329 get_actor(actorID);
2330
2331 return ApiStatus_DONE2;
2332}
2333
2334API_CALLABLE(CreateCurrentPosTargetList) {
2335 Bytecode* args = script->ptrReadPos;
2336 Actor* actor = get_actor(script->owner1.actorID);
2337
2340
2341 return ApiStatus_DONE2;
2342}
2343
2344API_CALLABLE(CreateHomeTargetList) {
2345 Bytecode* args = script->ptrReadPos;
2346 Actor* actor = get_actor(script->owner1.actorID);
2347
2350
2351 return ApiStatus_DONE2;
2352}
2353
2354API_CALLABLE(InitTargetIterator) {
2355 Actor* actor = get_actor(script->owner1.actorID);
2357
2358 actor->targetActorID = selectableTarget->actorID;
2359 actor->targetPartID = selectableTarget->partID;
2360
2361 return ApiStatus_DONE2;
2362}
2363
2364API_CALLABLE(SetOwnerTarget) {
2365 Bytecode* args = script->ptrReadPos;
2366 Actor* actor = get_actor(script->owner1.enemyID);
2367 s16 actorID = evt_get_variable(script, *args++);
2368
2369 actor->targetPartID = evt_get_variable(script, *args++);
2370 actor->targetActorID = actorID;
2371
2372 return ApiStatus_DONE2;
2373}
2374
2375API_CALLABLE(ChooseNextTarget) {
2376 Bytecode* args = script->ptrReadPos;
2377 Actor* actor = get_actor(script->owner1.actorID);
2378 s32 mode = evt_get_variable(script, *args++);
2379 s32 temp = *args++;
2381 s32 length;
2382 s32 curIdx;
2383 s32 retVal;
2384
2385 if (mode == ITER_FIRST) {
2386 actor->selectedTargetIndex = 0;
2387 target = &actor->targetData[actor->targetIndexList[0]];
2388 actor->targetActorID = target->actorID;
2389 actor->targetPartID = target->partID;
2390 return ApiStatus_DONE2;
2391 }
2392
2393 if (mode == ITER_LAST) {
2394 actor->selectedTargetIndex = actor->targetListLength - 1;
2395 target = &actor->targetData[actor->targetIndexList[actor->selectedTargetIndex]];
2396 actor->targetActorID = target->actorID;
2397 actor->targetPartID = target->partID;
2398 return ApiStatus_DONE2;
2399 }
2400
2401 curIdx = actor->selectedTargetIndex;
2402 length = actor->targetListLength;
2404
2405 if (mode == ITER_NEXT) {
2406 curIdx++;
2407 } else {
2408 curIdx--;
2409 }
2410
2411 if (curIdx < 0) {
2412 curIdx = length - 1;
2414 }
2415
2416 if (curIdx >= length) {
2417 curIdx = 0;
2419 }
2420
2421 actor->selectedTargetIndex = curIdx;
2422 target = &actor->targetData[actor->targetIndexList[actor->selectedTargetIndex]];
2423 actor->targetActorID = target->actorID;
2424 actor->targetPartID = target->partID;
2426
2427 return ApiStatus_DONE2;
2428}
2429
2430API_CALLABLE(func_8026E558) {
2431 Bytecode* args = script->ptrReadPos;
2433 s32 mode;
2434 s32 outVar;
2435 Actor* actor;
2436 f32 x, y, z;
2437 s32 outVal;
2438 s32 row;
2439 s32 column;
2440 s32 layer;
2441 s32 i;
2442
2443 i = evt_get_variable(script, *args++);
2444 mode = evt_get_variable(script, *args++);
2445 outVar = *args++;
2446
2447 if (i == ACTOR_SELF) {
2448 i = script->owner1.actorID;
2449 }
2450
2451 actor = get_actor(i);
2452 x = actor->curPos.x;
2453 y = actor->curPos.y;
2454 z = actor->curPos.z;
2455
2456 outVal = -1;
2457
2458 if (y < 40.0f) {
2459 row = 0;
2460 } else if (y < 85.0f) {
2461 row = 1;
2462 } else if (y < 100.0f) {
2463 row = 2;
2464 } else {
2465 row = 3;
2466 }
2467
2468 if (x < 25.0f) {
2469 column = 0;
2470 } else if (x < 65.0f) {
2471 column = 1;
2472 } else if (x < 105.0f) {
2473 column = 2;
2474 } else {
2475 column = 3;
2476 }
2477
2478 if (z < -30.0f) {
2479 layer = 0;
2480 } else {
2481 layer = 1;
2482 }
2483
2484 switch (mode) {
2485 case 0:
2486 for (i = 0; i < actor->targetListLength; i++) {
2487 target = &actor->targetData[actor->targetIndexList[i]];
2488
2489 if (target->column == column && target->layer == layer && target->row < row) {
2490 actor->targetActorID = target->actorID;
2491 actor->targetPartID = target->partID;
2492 outVal = 0;
2493 }
2494 }
2495 break;
2496 case 1:
2497 for (i = 0; i < actor->targetListLength; i++) {
2498 target = &actor->targetData[actor->targetIndexList[i]];
2499
2500 if (target->column == column && target->layer == layer && target->row < row) {
2501 actor->targetActorID = target->actorID;
2502 actor->targetPartID = target->partID;
2503 outVal = 0;
2504 }
2505 }
2506 break;
2507 case -1:
2508 for (i = 0; i < actor->targetListLength; i++) {
2509 target = &actor->targetData[actor->targetIndexList[i]];
2510
2511 if (target->column == column && target->layer == layer && target->row < row) {
2512 actor->targetActorID = target->actorID;
2513 actor->targetPartID = target->partID;
2514 outVal = 0;
2515 }
2516 }
2517 break;
2518 }
2520 return ApiStatus_DONE2;
2521}
2522
2523API_CALLABLE(GetTargetListLength) {
2524 Bytecode* args = script->ptrReadPos;
2525
2526 evt_set_variable(script, *args++, get_actor(script->owner1.actorID)->targetListLength);
2527 return ApiStatus_DONE2;
2528}
2529
2530API_CALLABLE(GetOwnerTarget) {
2531 Bytecode* args = script->ptrReadPos;
2532 Actor* actor = get_actor(script->owner1.enemyID);
2533 s32 actorID = *args++;
2534 s32 partID = *args++;
2535
2536 evt_set_variable(script, actorID, actor->targetActorID);
2537 evt_set_variable(script, partID, actor->targetPartID);
2538
2539 return ApiStatus_DONE2;
2540}
2541
2542API_CALLABLE(func_8026E914) {
2543 Bytecode* args = script->ptrReadPos;
2544 s32 temp_v0 = *args++;
2545 s32 temp_s1 = *args++;
2546
2549
2550 return ApiStatus_DONE2;
2551}
2552
2553API_CALLABLE(GetPlayerActorID) {
2555 return ApiStatus_DONE2;
2556}
2557
2558API_CALLABLE(func_8026E9A0) {
2559 Bytecode* args = script->ptrReadPos;
2560 s32 actorID;
2561 s32 partID;
2562
2563 actorID = evt_get_variable(script, *args++);
2564 partID = evt_get_variable(script, *args++);
2565
2567 gBattleStatus.curTargetID2 = actorID;
2568
2569 return ApiStatus_DONE2;
2570}
2571
2572API_CALLABLE(GetDistanceToGoal) {
2573 Bytecode* args = script->ptrReadPos;
2574 s32 actorID = evt_get_variable(script, *args++);
2575 s32 outVar = *args++;
2576 Actor* actor;
2577 f32 dist;
2578
2579 if (actorID == ACTOR_SELF) {
2580 actorID = script->owner1.actorID;
2581 }
2582 actor = get_actor(actorID);
2583
2584 dist = dist2D(actor->curPos.x, actor->curPos.z, actor->state.goalPos.x, actor->state.goalPos.z);
2586 return ApiStatus_DONE2;
2587}
2588
2589API_CALLABLE(SetActorPaletteEffect) {
2590 Bytecode* args = script->ptrReadPos;
2591 s32 actorID = evt_get_variable(script, *args++);
2592 s32 partID = evt_get_variable(script, *args++);
2594 Actor* actor;
2596
2597 if (actorID == ACTOR_SELF) {
2598 actorID = script->owner1.actorID;
2599 }
2600 actor = get_actor(actorID);
2601 actorPart = get_actor_part(actor, partID);
2602
2604 return ApiStatus_DONE2;
2605}
2606
2607API_CALLABLE(SetActorPaletteSwapTimes) {
2608 Bytecode* args = script->ptrReadPos;
2609 s32 actorID = evt_get_variable(script, *args++);
2610 s32 partID = evt_get_variable(script, *args++);
2611 Actor* actor;
2613 DecorationTable* decorations;
2614
2615 if (actorID == ACTOR_SELF) {
2616 actorID = script->owner1.actorID;
2617 }
2618 actor = get_actor(actorID);
2619 actorPart = get_actor_part(actor, partID);
2620 decorations = actorPart->decorationTable;
2621
2622 decorations->blendPalA = evt_get_variable(script, *args++);
2623 decorations->blendPalB = evt_get_variable(script, *args++);
2624 decorations->palswapTimeHoldA = evt_get_variable(script, *args++);
2625 decorations->palswapTimeAtoB = evt_get_variable(script, *args++);
2626
2627 return ApiStatus_DONE2;
2628}
2629
2630API_CALLABLE(SetActorPaletteSwapParams) {
2631 Bytecode* args = script->ptrReadPos;
2632 s32 actorID = evt_get_variable(script, *args++);
2633 s32 partID = evt_get_variable(script, *args++);
2634 Actor* actor;
2637
2638 if (actorID == ACTOR_SELF) {
2639 actorID = script->owner1.actorID;
2640 }
2641 actor = get_actor(actorID);
2642 actorPart = get_actor_part(actor, partID);
2643 table = actorPart->decorationTable;
2644
2645 table->blendPalA = evt_get_variable(script, *args++);
2646 table->blendPalB = evt_get_variable(script, *args++);
2647 table->palswapTimeHoldA = evt_get_variable(script, *args++);
2648 table->palswapTimeAtoB = evt_get_variable(script, *args++);
2649 table->palswapTimeHoldB = evt_get_variable(script, *args++);
2650 table->palswapTimeBtoA = evt_get_variable(script, *args++);
2651 table->palswapUnused1 = evt_get_variable(script, *args++);
2652 table->palswapUnused2 = evt_get_variable(script, *args++);
2653
2654 return ApiStatus_DONE2;
2655}
2656
2657API_CALLABLE(EnableActorPaletteEffects) {
2658 Bytecode* args = script->ptrReadPos;
2659 s32 actorID = evt_get_variable(script, *args++);
2660 s32 partID = evt_get_variable(script, *args++);
2661 s32 enable = evt_get_variable(script, *args++);
2662 Actor* actor;
2664
2665 if (actorID == ACTOR_SELF) {
2666 actorID = script->owner1.actorID;
2667 }
2668 actor = get_actor(actorID);
2669 actorPart = get_actor_part(actor, partID);
2670
2671 if (enable) {
2673 } else {
2675 }
2676
2677 return ApiStatus_DONE2;
2678}
2679
2680API_CALLABLE(func_8026EDE4) {
2681 Bytecode* args = script->ptrReadPos;
2682 s32 actorID = evt_get_variable(script, *args++);
2683 s32 partID = evt_get_variable(script, *args++);
2684 s32 temp_s3 = evt_get_variable(script, *args++);
2685 Actor* actor;
2687
2688 if (actorID == ACTOR_SELF) {
2689 actorID = script->owner1.actorID;
2690 }
2691 actor = get_actor(actorID);
2692 actorPart = get_actor_part(actor, partID);
2693
2695
2696 return ApiStatus_DONE2;
2697}
2698
2699API_CALLABLE(AddActorDecoration) {
2700 Bytecode* args = script->ptrReadPos;
2701 s32 actorID = evt_get_variable(script, *args++);
2702 s32 partID = evt_get_variable(script, *args++);
2704 s32 decorationType = evt_get_variable(script, *args++);
2705 Actor* actor;
2707
2708 if (actorID == ACTOR_SELF) {
2709 actorID = script->owner1.actorID;
2710 }
2711 actor = get_actor(actorID);
2712 actorPart = get_actor_part(actor, partID);
2713
2715 return ApiStatus_DONE2;
2716}
2717
2718API_CALLABLE(RemoveActorDecoration) {
2719 Bytecode* args = script->ptrReadPos;
2720 s32 actorID = evt_get_variable(script, *args++);
2721 s32 partID = evt_get_variable(script, *args++);
2723 Actor* actor;
2725
2726 if (actorID == ACTOR_SELF) {
2727 actorID = script->owner1.enemyID;
2728 }
2729 actor = get_actor(actorID);
2730 actorPart = get_actor_part(actor, partID);
2731
2733 return ApiStatus_DONE2;
2734}
2735
2736API_CALLABLE(ModifyActorDecoration) {
2737 Bytecode* args = script->ptrReadPos;
2738 s32 actorID = evt_get_variable(script, *args++);
2739 s32 partID = evt_get_variable(script, *args++);
2740 s32 idx = evt_get_variable(script, *args++);
2743 Actor* actor;
2744
2745 if (actorID == ACTOR_SELF) {
2746 actorID = script->owner1.actorID;
2747 }
2748 actor = get_actor(actorID);
2749 actorPart = get_actor_part(actor, partID);
2750 decorationtable = actorPart->decorationTable;
2751
2752 decorationtable->decorData[idx].raw[0] = evt_get_variable(script, *args++);
2753 decorationtable->decorData[idx].raw[1] = evt_get_variable(script, *args++);
2754 decorationtable->decorData[idx].raw[2] = evt_get_variable(script, *args++);
2755 decorationtable->decorData[idx].raw[3] = evt_get_variable(script, *args++);
2756 return ApiStatus_DONE2;
2757}
2758
2759API_CALLABLE(UseIdleAnimation) {
2760 Actor* actor;
2761 Bytecode* args = script->ptrReadPos;
2762 s32 actorID = evt_get_variable(script, *args++);
2763 s32 useIdle = evt_get_variable(script, *args++);
2764
2765 if (actorID == ACTOR_SELF) {
2766 actorID = script->owner1.actorID;
2767 }
2768
2769 actor = get_actor(actorID);
2770 if (!useIdle) {
2774 } else {
2776 }
2777
2778 return ApiStatus_DONE2;
2779}
2780
2781API_CALLABLE(func_8026F1A0) {
2782 Bytecode* args = script->ptrReadPos;
2783 s32 actorID = evt_get_variable(script, *args++);
2785 Actor* actor;
2786
2787 if (actorID == ACTOR_SELF) {
2788 actorID = script->owner1.actorID;
2789 }
2790
2791 actor = get_actor(actorID);
2792
2793 if (temp_s0_3 == 0) {
2796 }
2797
2798 return ApiStatus_DONE2;
2799}
2800
2801API_CALLABLE(GetStatusFlags) {
2802 Bytecode* args = script->ptrReadPos;
2804 s32 actorID = evt_get_variable(script, *args++);
2805 s32 outVar = *args++;
2806 Actor* actor;
2808 s8 debuff;
2809 ActorPart* partsTable;
2810 s32 flags;
2811
2812 if (actorID == ACTOR_SELF) {
2813 actorID = script->owner1.actorID;
2814 }
2815 actor = get_actor(actorID);
2816 debuff = actor->debuff;
2818 flags = 0;
2819
2820 if (debuff != 0) {
2821 if (debuff == STATUS_KEY_STOP) {
2823 }
2824 if (debuff == STATUS_KEY_FROZEN) {
2826 }
2827 if (debuff == STATUS_KEY_SLEEP) {
2829 }
2830 if (debuff == STATUS_KEY_PARALYZE) {
2832 }
2833 if (debuff == STATUS_KEY_DIZZY) {
2835 }
2836 if (debuff == STATUS_KEY_UNUSED) {
2838 }
2839 if (debuff == STATUS_KEY_POISON) {
2841 }
2842 if (debuff == STATUS_KEY_SHRINK) {
2844 }
2845 }
2846
2847 if (actor->staticStatus == STATUS_KEY_STATIC) {
2849 }
2850
2851 if (actor->stoneStatus == STATUS_KEY_STONE) {
2853 }
2854
2855 if (actor->koStatus == STATUS_KEY_KO) {
2857 }
2858
2861 }
2862
2863 for (partsTable = actor->partsTable; partsTable != nullptr; partsTable = partsTable->nextPart) {
2864 if (partsTable->flags & ACTOR_PART_FLAG_TRANSPARENT) {
2866 }
2867 if (partsTable->eventFlags & ACTOR_EVENT_FLAG_ILLUSORY) {
2869 }
2870 }
2871
2872 switch (actorClass) {
2873 case ACTOR_CLASS_PLAYER:
2875 if (battleStatus->outtaSightActive) {
2877 }
2878 break;
2879 case ACTOR_CLASS_ENEMY:
2880 break;
2881 }
2882
2883 if (actor->isGlowing) {
2885 }
2886
2887 if (actor->attackBoost) {
2889 }
2890
2891 if (actor->defenseBoost) {
2893 }
2894
2895 if (actor->chillOutAmount) {
2897 }
2898
2901 }
2902
2904 return ApiStatus_DONE2;
2905}
2906
2907API_CALLABLE(RemovePlayerBuffs) {
2908 remove_player_buffs(*script->ptrReadPos);
2909 return ApiStatus_DONE2;
2910}
2911
2912API_CALLABLE(SetPartAlpha) {
2913 Actor* actor;
2914 Bytecode* args = script->ptrReadPos;
2915 s32 actorID = evt_get_variable(script, *args++);
2916 s32 partID = evt_get_variable(script, *args++);
2917 s32 opacity = evt_get_variable(script, *args++);
2918
2919 if (actorID == ACTOR_SELF) {
2920 actorID = script->owner1.actorID;
2921 }
2922
2923 actor = get_actor(actorID);
2924 get_actor_part(actor, partID)->opacity = opacity;
2925
2927 return ApiStatus_DONE2;
2928}
2929
2930API_CALLABLE(CreatePartShadow) {
2931 Bytecode* args = script->ptrReadPos;
2932 s32 actorID = evt_get_variable(script, *args++);
2933 s32 partID = evt_get_variable(script, *args++);
2934
2935 if (actorID == ACTOR_SELF) {
2936 actorID = script->owner1.actorID;
2937 }
2938
2939 create_part_shadow(actorID, partID);
2940 return ApiStatus_DONE2;
2941}
2942
2943API_CALLABLE(RemovePartShadow) {
2944 Bytecode* args = script->ptrReadPos;
2945 s32 actorID = evt_get_variable(script, *args++);
2946 s32 partID = evt_get_variable(script, *args++);
2947
2948 if (actorID == ACTOR_SELF) {
2949 actorID = script->owner1.actorID;
2950 }
2951
2952 remove_part_shadow(actorID, partID);
2953 return ApiStatus_DONE2;
2954}
2955
2956API_CALLABLE(SetEndBattleFadeOutRate) {
2958 return ApiStatus_DONE2;
2959}
2960
2961API_CALLABLE(SetBattleVar) {
2962 Bytecode* args = script->ptrReadPos;
2963 s32 varIdx = evt_get_variable(script, *args++);
2964
2965 gBattleStatus.varTable[varIdx] = evt_get_variable(script, *args++);
2966
2967 return ApiStatus_DONE2;
2968}
2969
2970API_CALLABLE(GetBattleVar) {
2971 Bytecode* args = script->ptrReadPos;
2972 s32 varIdx = evt_get_variable(script, *args++);
2973
2974 evt_set_variable(script, *args++, gBattleStatus.varTable[varIdx]);
2975 return ApiStatus_DONE2;
2976}
2977
2978API_CALLABLE(ResetAllActorSounds) {
2979 s32 actorID = evt_get_variable(script, *script->ptrReadPos);
2980
2981 if (actorID == ACTOR_SELF) {
2982 actorID = script->owner1.actorID;
2983 }
2984
2986 return ApiStatus_DONE2;
2987}
2988
2989API_CALLABLE(SetActorSounds) {
2990 Bytecode* args = script->ptrReadPos;
2991 s32 actorID = evt_get_variable(script, *args++);
2992 Actor* actor;
2993 s32 soundType;
2994 s32 sound1;
2995 s32 sound2;
2996
2997 if (actorID == ACTOR_SELF) {
2998 actorID = script->owner1.actorID;
2999 }
3000
3001 soundType = evt_get_variable(script, *args++);
3002 sound1 = evt_get_variable(script, *args++);
3003 sound2 = evt_get_variable(script, *args++);
3004 actor = get_actor(actorID);
3005
3006 switch (soundType) {
3007 case ACTOR_SOUND_WALK:
3008 actor->actorTypeData1[0] = sound1;
3009 actor->actorTypeData1[1] = sound2;
3010 break;
3011 case ACTOR_SOUND_FLY:
3012 actor->actorTypeData1[2] = sound1;
3013 actor->actorTypeData1[3] = sound2;
3014 break;
3015 case ACTOR_SOUND_JUMP:
3016 actor->actorTypeData1[4] = sound1;
3017 break;
3018 case ACTOR_SOUND_HURT:
3019 actor->actorTypeData1[5] = sound1;
3020 break;
3022 actor->actorTypeData1b[0] = sound1;
3023 break;
3025 actor->actorTypeData1b[1] = sound1;
3026 break;
3027 }
3028
3029 return ApiStatus_DONE2;
3030}
3031
3032API_CALLABLE(ResetActorSounds) {
3033 Bytecode* args = script->ptrReadPos;
3034 s32 actorID = evt_get_variable(script, *args++);
3035 Actor* actor;
3036 s32 soundType;
3037 s32 sound1;
3038 s32 sound2;
3039
3040 if (actorID == ACTOR_SELF) {
3041 actorID = script->owner1.actorID;
3042 }
3043
3044 soundType = evt_get_variable(script, *args++);
3045 sound1 = evt_get_variable(script, *args++);
3046 sound2 = evt_get_variable(script, *args++);
3047 actor = get_actor(actorID);
3048
3049 switch (soundType) {
3050 case ACTOR_SOUND_WALK:
3051 actor->actorTypeData1[0] = bActorSoundTable[actor->actorType].walk[0];
3052 actor->actorTypeData1[1] = bActorSoundTable[actor->actorType].walk[1];
3053 break;
3054 case ACTOR_SOUND_FLY:
3055 actor->actorTypeData1[2] = bActorSoundTable[actor->actorType].fly[0];
3056 actor->actorTypeData1[3] = bActorSoundTable[actor->actorType].fly[1];
3057 break;
3058 case ACTOR_SOUND_JUMP:
3059 actor->actorTypeData1[4] = bActorSoundTable[actor->actorType].jump;
3060 break;
3061 case ACTOR_SOUND_HURT:
3062 actor->actorTypeData1[5] = bActorSoundTable[actor->actorType].hurt;
3063 break;
3065 actor->actorTypeData1b[0] = bActorSoundTable[actor->actorType].delay[0];
3066 break;
3068 actor->actorTypeData1b[1] = bActorSoundTable[actor->actorType].delay[1];
3069 break;
3070 }
3071
3072 return ApiStatus_DONE2;
3073}
3074
3075API_CALLABLE(SetPartSounds) {
3076 Bytecode* args = script->ptrReadPos;
3077 s32 actorID = evt_get_variable(script, *args++);
3079 s32 partID;
3080 s32 soundType;
3081 s32 sound1;
3082 s32 sound2;
3083
3084 if (actorID == ACTOR_SELF) {
3085 actorID = script->owner1.actorID;
3086 }
3087
3088 partID = evt_get_variable(script, *args++);
3089 soundType = evt_get_variable(script, *args++);
3090 sound1 = evt_get_variable(script, *args++);
3091 sound2 = evt_get_variable(script, *args++);
3092 actorPart = get_actor_part(get_actor(actorID), partID);
3093
3094 switch (soundType) {
3095 case ACTOR_SOUND_WALK:
3096 actorPart->partTypeData[0] = sound1;
3097 actorPart->partTypeData[1] = sound2;
3098 break;
3099 case ACTOR_SOUND_FLY:
3100 actorPart->partTypeData[2] = sound1;
3101 actorPart->partTypeData[3] = sound2;
3102 break;
3103 case ACTOR_SOUND_JUMP:
3104 actorPart->partTypeData[4] = sound1;
3105 break;
3106 case ACTOR_SOUND_HURT:
3107 actorPart->partTypeData[5] = sound1;
3108 break;
3110 actorPart->actorTypeData2b[0] = sound1;
3111 break;
3113 actorPart->actorTypeData2b[1] = sound1;
3114 break;
3115 }
3116
3117 return ApiStatus_DONE2;
3118}
3119
3120API_CALLABLE(SetActorType) {
3121 Bytecode* args = script->ptrReadPos;
3122 s32 actorID = evt_get_variable(script, *args++);
3123 Actor* enemy;
3124 s32 actorType;
3125
3126 if (actorID == ACTOR_SELF) {
3127 actorID = script->owner1.actorID;
3128 }
3129
3130 actorType = evt_get_variable(script, *args++);
3131 enemy = get_actor(actorID);
3132
3133 if (is_actor_health_bar_visible(enemy)) {
3134 load_tattle_flags(actorType);
3135 }
3136
3137 enemy->actorType = actorType;
3138 return ApiStatus_DONE2;
3139}
3140
3141API_CALLABLE(ShowShockEffect) {
3142 s32 actorID = evt_get_variable(script, *script->ptrReadPos);
3143
3144 if (actorID == ACTOR_SELF) {
3145 actorID = script->owner1.actorID;
3146 }
3147
3148 apply_shock_effect(get_actor(actorID));
3149 return ApiStatus_DONE2;
3150}
3151
3152API_CALLABLE(GetActorAttackBoost) {
3153 Bytecode* args = script->ptrReadPos;
3154 s32 enemyID = evt_get_variable(script, *args++);
3155 Bytecode attackBoost;
3156
3157 if (enemyID == ACTOR_SELF) {
3158 enemyID = script->owner1.enemyID;
3159 }
3160
3161 attackBoost = *args++;
3162 evt_set_variable(script, attackBoost, get_actor(enemyID)->attackBoost);
3163 return ApiStatus_DONE2;
3164}
3165
3166API_CALLABLE(GetActorDefenseBoost) {
3167 Bytecode* args = script->ptrReadPos;
3168 s32 enemyID = evt_get_variable(script, *args++);
3169 Bytecode defenseBoost;
3170
3171 if (enemyID == ACTOR_SELF) {
3172 enemyID = script->owner1.enemyID;
3173 }
3174
3175 defenseBoost = *args++;
3176 evt_set_variable(script, defenseBoost, get_actor(enemyID)->defenseBoost);
3177 return ApiStatus_DONE2;
3178}
3179
3180API_CALLABLE(BoostAttack) {
3181 Bytecode* args = script->ptrReadPos;
3182 s32 actorID;
3183 Actor* actor;
3184 s32 flags;
3185 s32 flags2;
3186 f32 x1, y1, z1;
3187 f32 x2, y2, z2;
3188 s32 attackBoost;
3189
3190 if (isInitialCall) {
3191 script->functionTemp[0] = 0;
3192 }
3193
3194 if (script->functionTemp[0] == 0) {
3195 actorID = evt_get_variable(script, *args++);
3196 if (actorID == ACTOR_SELF) {
3197 actorID = script->owner1.actorID;
3198 }
3199 attackBoost = evt_get_variable(script, *args++);
3200 actor = get_actor(actorID);
3201 script->functionTempPtr[1] = actor;
3202 script->functionTemp[2] = attackBoost;
3203
3207 btl_cam_set_zoom(250);
3208 btl_cam_move(10);
3210 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3212 }
3213 ApplyingBuff = true;
3214 script->functionTemp[3] = 5;
3215 script->functionTemp[0] = 1;
3216 }
3217 get_actor(script->owner1.actorID);
3218 actor = script->functionTempPtr[1];
3219 attackBoost = script->functionTemp[2];
3220
3221 flags = actor->flags;
3222 x1 = actor->curPos.x + actor->headOffset.x;
3224 y1 = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3225 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3226 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3227 } else {
3228 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3229 }
3230 z1 = actor->curPos.z + actor->headOffset.z + 10.0f;
3231
3232 flags2 = actor->flags;
3233 x2 = actor->curPos.x + actor->headOffset.x + actor->size.x / 2;
3234 if (flags2 & ACTOR_FLAG_UPSIDE_DOWN) {
3235 y2 = actor->curPos.y + actor->headOffset.y - actor->size.y;
3236 } else if (!(flags2 & ACTOR_FLAG_HALF_HEIGHT)) {
3237 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3238 } else {
3239 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y * 2;
3240 }
3241 z2 = actor->curPos.z + actor->headOffset.z + 10.0f;
3242
3243 switch (script->functionTemp[0]) {
3244 case 1:
3245 if (script->functionTemp[3] == 0) {
3246 fx_radial_shimmer(2, x1, y1, z1, 1.0f, 30);
3248 script->functionTemp[3] = 30;
3249 script->functionTemp[0] = 2;
3250 } else {
3251 script->functionTemp[3]--;
3252 break;
3253 }
3254 break;
3255 case 2:
3256 if (script->functionTemp[3] == 0) {
3259 btl_cam_move(15);
3260 actor->isGlowing = true;
3261 actor->attackBoost += attackBoost;
3262 if (actor->attackBoost > 20) {
3263 actor->attackBoost = 20;
3264 }
3265 fx_stat_change(attackBoost - 1, x2, y2, z2, 1.0f, 60);
3266 script->functionTemp[3] = 15;
3267 script->functionTemp[0] = 3;
3268 } else {
3269 script->functionTemp[3]--;
3270 break;
3271 }
3272 break;
3273 case 3:
3274 if (script->functionTemp[3] == 0) {
3276 script->functionTemp[0] = 4;
3277 } else {
3278 script->functionTemp[3]--;
3279 break;
3280 }
3281 break;
3282 case 4:
3283 if (btl_is_popup_displayed() == 0) {
3285 script->functionTemp[3] = 10;
3286 script->functionTemp[0] = 5;
3287 }
3288 break;
3289 case 5:
3290 if (script->functionTemp[3] != 0) {
3291 script->functionTemp[3]--;
3292 break;
3293 }
3294 if ((actor->handleEventScript != nullptr) && does_script_exist(actor->handleEventScriptID)) {
3295 break;
3296 }
3297 ApplyingBuff = false;
3298 return ApiStatus_DONE2;
3299 }
3300 return ApiStatus_BLOCK;
3301}
3302
3303API_CALLABLE(BoostDefense) {
3304 Bytecode* args = script->ptrReadPos;
3305 s32 actorID;
3306 Actor* actor;
3307 f32 x1, y1, z1;
3308 f32 x2, y2, z2;
3309 s32 defenseBoost;
3310 s32 flags;
3311 s32 flags2;
3312
3313 if (isInitialCall) {
3314 script->functionTemp[0] = 0;
3315 }
3316
3317 if (script->functionTemp[0] == 0) {
3318 actorID = evt_get_variable(script, *args++);
3319 if (actorID == ACTOR_SELF) {
3320 actorID = script->owner1.actorID;
3321 }
3322 defenseBoost = evt_get_variable(script, *args++);
3323 actor = get_actor(actorID);
3324 script->functionTempPtr[1] = actor;
3325 script->functionTemp[2] = defenseBoost;
3326
3330 btl_cam_set_zoom(250);
3331 btl_cam_move(10);
3333 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3335 }
3336
3337 ApplyingBuff = true;
3338 script->functionTemp[3] = 5;
3339 script->functionTemp[0] = 1;
3340 }
3341 get_actor(script->owner1.actorID);
3342 actor = script->functionTempPtr[1];
3343 defenseBoost = script->functionTemp[2];
3344
3345 flags = actor->flags;
3346 x1 = actor->curPos.x + actor->headOffset.x;
3348 y1 = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3349 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3350 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3351 } else {
3352 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3353 }
3354 z1 = actor->curPos.z + actor->headOffset.z + 10.0f;
3355
3356 flags2 = actor->flags;
3357 x2 = actor->curPos.x + actor->headOffset.x + actor->size.x / 2;
3358 if (flags2 & ACTOR_FLAG_UPSIDE_DOWN) {
3359 y2 = actor->curPos.y + actor->headOffset.y - actor->size.y;
3360 } else if (!(flags2 & ACTOR_FLAG_HALF_HEIGHT)) {
3361 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3362 } else {
3363 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y * 2;
3364 }
3365 z2 = actor->curPos.z + actor->headOffset.z + 10.0f;
3366
3367 switch (script->functionTemp[0]) {
3368 case 1:
3369 if (script->functionTemp[3] == 0) {
3370 fx_radial_shimmer(2, x1, y1, z1, 1.0f, 30);
3372 script->functionTemp[3] = 30;
3373 script->functionTemp[0] = 2;
3374 } else {
3375 script->functionTemp[3]--;
3376 break;
3377 }
3378 break;
3379 case 2:
3380 if (script->functionTemp[3] == 0) {
3383 btl_cam_move(15);
3384 actor->isGlowing = true;
3385 actor->defenseBoost += defenseBoost;
3386 if (actor->defenseBoost > 20) {
3387 actor->defenseBoost = 20;
3388 }
3389 fx_stat_change(defenseBoost + 5, x2, y2, z2, 1.0f, 60);
3390 script->functionTemp[3] = 15;
3391 script->functionTemp[0] = 3;
3392 } else {
3393 script->functionTemp[3]--;
3394 break;
3395 }
3396 break;
3397 case 3:
3398 if (script->functionTemp[3] == 0) {
3400 script->functionTemp[0] = 4;
3401 } else {
3402 script->functionTemp[3]--;
3403 break;
3404 }
3405 break;
3406 case 4:
3407 if (btl_is_popup_displayed() == 0) {
3409 script->functionTemp[3] = 10;
3410 script->functionTemp[0] = 5;
3411 }
3412 break;
3413 case 5:
3414 if (script->functionTemp[3] != 0) {
3415 script->functionTemp[3]--;
3416 break;
3417 }
3418 if ((actor->handleEventScript != nullptr) && does_script_exist(actor->handleEventScriptID)) {
3419 break;
3420 }
3421 ApplyingBuff = false;
3422 return ApiStatus_DONE2;
3423 }
3424 return ApiStatus_BLOCK;
3425}
3426
3427API_CALLABLE(VanishActor) {
3428 Bytecode* args = script->ptrReadPos;
3429 s32 actorID;
3430 Actor* actor;
3431 f32 x, y, z;
3432 s32 vanished;
3433 s32 flags;
3434
3435 if (isInitialCall) {
3436 script->functionTemp[0] = 0;
3437 }
3438
3439 if (script->functionTemp[0] == 0) {
3440 actorID = evt_get_variable(script, *args++);
3441 if (actorID == ACTOR_SELF) {
3442 actorID = script->owner1.actorID;
3443 }
3444 vanished = evt_get_variable(script, *args++);
3445 actor = get_actor(actorID);
3446 script->functionTemp[1] = (s32) actor;
3447 script->functionTemp[2] = vanished;
3448
3452 btl_cam_set_zoom(250);
3453 btl_cam_move(10);
3455 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3457 }
3458
3459 ApplyingBuff = true;
3460 script->functionTemp[3] = 5;
3461 script->functionTemp[0] = 1;
3462 }
3463 get_actor(script->owner1.actorID);
3464 actor = script->functionTempPtr[1];
3465 vanished = script->functionTemp[2];
3466
3467 flags = actor->flags;
3468 x = actor->curPos.x + actor->headOffset.x;
3470 y = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3471 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3472 y = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3473 } else {
3474 y = actor->curPos.y + actor->headOffset.y + actor->size.y;
3475 }
3476 z = actor->curPos.z + actor->headOffset.z + 10.0f;
3477
3478 switch (script->functionTemp[0]) {
3479 case 1:
3480 if (script->functionTemp[3] == 0) {
3481 fx_radial_shimmer(3, x, y, z, 1.0f, 30);
3483 script->functionTemp[3] = 30;
3484 script->functionTemp[0] = 2;
3485 } else {
3486 script->functionTemp[3]--;
3487 break;
3488 }
3489 break;
3490 case 2:
3491 if (script->functionTemp[3] == 0) {
3494 btl_cam_move(15);
3496 script->functionTemp[3] = 15;
3497 script->functionTemp[0] = 3;
3498 } else {
3499 script->functionTemp[3]--;
3500 break;
3501 }
3502 break;
3503 case 3:
3504 if (script->functionTemp[3] == 0) {
3506 script->functionTemp[0] = 4;
3507 } else {
3508 script->functionTemp[3]--;
3509 break;
3510 }
3511 break;
3512 case 4:
3513 if (btl_is_popup_displayed() == 0) {
3515 script->functionTemp[3] = 10;
3516 script->functionTemp[0] = 5;
3517 }
3518 break;
3519 case 5:
3520 if (script->functionTemp[3] != 0) {
3521 script->functionTemp[3]--;
3522 break;
3523 }
3524 if ((actor->handleEventScript != nullptr) && does_script_exist(actor->handleEventScriptID)) {
3525 break;
3526 }
3527 ApplyingBuff = false;
3528 return ApiStatus_DONE2;
3529 }
3530 return ApiStatus_BLOCK;
3531}
3532
3533API_CALLABLE(ElectrifyActor) {
3534 Bytecode* args = script->ptrReadPos;
3535 s32 actorID;
3536 Actor* actor;
3537 f32 x, y, z;
3539 s32 flags;
3540
3541 if (isInitialCall) {
3542 script->functionTemp[0] = 0;
3543 }
3544
3545 if (script->functionTemp[0] == 0) {
3546 actorID = evt_get_variable(script, *args++);
3547 if (actorID == ACTOR_SELF) {
3548 actorID = script->owner1.actorID;
3549 }
3551 actor = get_actor(actorID);
3552 script->functionTempPtr[1] = actor;
3553 script->functionTemp[2] = electrified;
3554
3558 btl_cam_set_zoom(250);
3559 btl_cam_move(10);
3561 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3563 }
3564
3565 ApplyingBuff = true;
3566 script->functionTemp[3] = 5;
3567 script->functionTemp[0] = 1;
3568 }
3569 get_actor(script->owner1.actorID);
3570 actor = script->functionTempPtr[1];
3571 electrified = script->functionTemp[2];
3572
3573 flags = actor->flags;
3574 x = actor->curPos.x + actor->headOffset.x;
3576 y = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3577 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3578 y = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3579 } else {
3580 y = actor->curPos.y + actor->headOffset.y + actor->size.y;
3581 }
3582 z = actor->curPos.z + actor->headOffset.z + 10.0f;
3583
3584 switch (script->functionTemp[0]) {
3585 case 1:
3586 if (script->functionTemp[3] == 0) {
3587 fx_snaking_static(8, x, y, z, 1.0f, 30);
3589 script->functionTemp[3] = 30;
3590 script->functionTemp[0] = 2;
3591 } else {
3592 script->functionTemp[3]--;
3593 break;
3594 }
3595 break;
3596 case 2:
3597 if (script->functionTemp[3] == 0) {
3600 btl_cam_move(15);
3602 script->functionTemp[3] = 15;
3603 script->functionTemp[0] = 3;
3604 } else {
3605 script->functionTemp[3]--;
3606 break;
3607 }
3608 break;
3609 case 3:
3610 if (script->functionTemp[3] == 0) {
3612 script->functionTemp[0] = 4;
3613 } else {
3614 script->functionTemp[3]--;
3615 break;
3616 }
3617 break;
3618 case 4:
3619 if (btl_is_popup_displayed() == 0) {
3621 script->functionTemp[3] = 10;
3622 script->functionTemp[0] = 5;
3623 }
3624 break;
3625 case 5:
3626 if (script->functionTemp[3] != 0) {
3627 script->functionTemp[3]--;
3628 break;
3629 }
3630 if ((actor->handleEventScript != nullptr) && does_script_exist(actor->handleEventScriptID)) {
3631 break;
3632 }
3633 ApplyingBuff = false;
3634 return ApiStatus_DONE2;
3635 }
3636 return ApiStatus_BLOCK;
3637}
3638
3639API_CALLABLE(HealActor) {
3640 Bytecode* args = script->ptrReadPos;
3641 s32 actorID;
3642 Actor* actor;
3643 f32 x1, y1, z1;
3644 f32 x2, y2, z2;
3645 s32 hpBoost;
3646 s32 flags;
3647 s32 flags2;
3648 s32 message;
3649
3650 if (isInitialCall) {
3651 script->functionTemp[0] = 0;
3652 }
3653
3654 if (script->functionTemp[0] == 0) {
3655 actorID = evt_get_variable(script, *args++);
3656 if (actorID == ACTOR_SELF) {
3657 actorID = script->owner1.enemyID;
3658 }
3659 hpBoost = evt_get_variable(script, *args++);
3661 actor = get_actor(actorID);
3662 script->functionTempPtr[1] = actor;
3663 script->functionTemp[2] = hpBoost;
3664
3668 btl_cam_move(10);
3670
3671 ApplyingBuff = true;
3672 script->functionTemp[3] = 5;
3673 script->functionTemp[0] = 1;
3674 }
3675 get_actor(script->owner1.enemyID);
3676 actor = script->functionTempPtr[1];
3677 hpBoost = script->functionTemp[2];
3678
3679 flags = actor->flags;
3680 x1 = actor->curPos.x + actor->headOffset.x;
3682 y1 = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3683 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3684 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3685 } else {
3686 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3687 }
3688 z1 = actor->curPos.z + actor->headOffset.z + 10.0f;
3689
3690 flags2 = actor->flags;
3691 x2 = actor->curPos.x + actor->headOffset.x + actor->size.x / 2;
3692 if (flags2 & ACTOR_FLAG_UPSIDE_DOWN) {
3693 y2 = actor->curPos.y + actor->headOffset.y - actor->size.y;
3694 } else if (!(flags2 & ACTOR_FLAG_HALF_HEIGHT)) {
3695 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3696 } else {
3697 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y * 2;
3698 }
3699 z2 = actor->curPos.z + actor->headOffset.z + 10.0f;
3700
3701 switch (script->functionTemp[0]) {
3702 case 1:
3703 if (script->functionTemp[3] == 0) {
3705 fx_recover(0, x2, y2, z2, hpBoost);
3707 script->functionTemp[3] = 30;
3708 script->functionTemp[0] = 2;
3709 } else {
3710 script->functionTemp[3]--;
3711 break;
3712 }
3713 break;
3714 case 2:
3715 if (script->functionTemp[3] == 0) {
3717 btl_cam_move(15);
3718 actor->curHP += hpBoost;
3719 if (actor->maxHP < actor->curHP) {
3720 actor->curHP = actor->maxHP;
3721 }
3723 script->functionTemp[3] = 15;
3724 script->functionTemp[0] = 3;
3725 } else {
3726 script->functionTemp[3]--;
3727 break;
3728 }
3729 break;
3730 case 3:
3731 if (script->functionTemp[3] == 0) {
3732 message = BTL_MSG_HEAL_ALL;
3733 if (!IsGroupHeal) {
3734 message = BTL_MSG_HEAL_ONE;
3735 }
3737 script->functionTemp[0] = 4;
3738 } else {
3739 script->functionTemp[3]--;
3740 break;
3741 }
3742 break;
3743 case 4:
3744 if (btl_is_popup_displayed() == 0) {
3745 script->functionTemp[3] = 10;
3746 script->functionTemp[0] = 5;
3747 }
3748 break;
3749 case 5:
3750 if (script->functionTemp[3] != 0) {
3751 script->functionTemp[3]--;
3752 break;
3753 }
3754 if ((actor->handleEventScript != nullptr) && does_script_exist(actor->handleEventScriptID)) {
3755 break;
3756 }
3757 ApplyingBuff = false;
3758 return ApiStatus_DONE2;
3759 }
3760 return ApiStatus_BLOCK;
3761}
3762
3763API_CALLABLE(WaitForBuffDone) {
3764 if (!ApplyingBuff) {
3765 return ApiStatus_DONE2;
3766 } else {
3767 return ApiStatus_BLOCK;
3768 }
3769}
3770
3771API_CALLABLE(CopyBuffs) {
3772 Bytecode* args = script->ptrReadPos;
3773 s32 actorID = evt_get_variable(script, *args++);
3775 Actor* actorTo;
3776
3777 if (actorID == ACTOR_SELF) {
3778 actorID = script->owner1.enemyID;
3779 }
3780 actorFrom = get_actor(actorID);
3781
3782 actorID = evt_get_variable(script, *args++);
3783 if (actorID == ACTOR_SELF) {
3784 actorID = script->owner1.enemyID;
3785 }
3786 actorTo = get_actor(actorID);
3787
3788 actorTo->isGlowing = actorFrom->isGlowing;
3789 actorTo->attackBoost = actorFrom->attackBoost;
3790 actorTo->defenseBoost = actorFrom->defenseBoost;
3791 actorTo->chillOutAmount = actorFrom->chillOutAmount;
3792 actorTo->chillOutTurns = actorFrom->chillOutTurns;
3793
3794 return ApiStatus_DONE2;
3795}
Actor * create_actor(Formation formation)
Definition 190B20.c:1407
BSS s32 PopupMenu_SelectedIndex
void set_actor_home_position(s32 actorID, f32 x, f32 y, f32 z)
Definition actor_api.c:147
s32 count_targets(Actor *actor, s32 targetHomeIndex, s32 targetSelectionFlags)
Definition actor_api.c:8
void set_part_absolute_position(s32 actorID, s32 partID, f32 x, f32 y, f32 z)
Definition actor_api.c:127
void set_part_goal_to_actor_part(ActorPartMovement *movement, s32 actorID, s32 partID)
Definition actor_api.c:83
s32 IsGroupHeal
Definition action_cmd.c:85
void set_actor_current_position(s32 actorID, f32 x, f32 y, f32 z)
Definition actor_api.c:119
Actor * get_actor(s32 actorID)
Definition actor_api.c:155
void set_goal_pos_to_part(ActorState *state, s32 actorID, s32 partID)
Definition actor_api.c:44
s32 get_nearest_home_index(f32 x, f32 y, f32 z)
Definition actor_api.c:17
s8 ApplyingBuff
Definition action_cmd.c:86
BattleArea gBattleAreas[]
When updating this, make sure you also update:
Definition battle.cpp:68
Vec2b statusIconOffset
s8 transparentStatus
struct ActorPartMovement * movement
Vec2b statusTextOffset
Vec2b healthBarOffset
struct ActorBlueprint * actorBlueprint
s32 elementalImmunities
s32 actorTypeData1[6]
s8 healthFraction
s8 selectedTargetIndex
Vec3s headOffset
f32 scalingFactor
ActorState state
struct Evt * handleEventScript
struct ActorPart * partsTable
s16 actorTypeData1b[2]
struct SelectableTarget targetData[24]
Vec3s rotPivotOffset
s16 targetActorID
Vec3f scaleModifier
Vec3s healthBarPos
s8 chillOutAmount
s32 b32
Vec3f homePos
Vec2bu size
s32 handleEventScriptID
ActorMovement fly
Vec3f curPos
s8 targetIndexList[24]
s8 targetListLength
struct ActorPart * nextPart
u32 AnimID
Vec3f scale
s8 flags
Definition demo_api.c:15
@ ACTOR_CLASS_ENEMY
Definition enums.h:2112
@ ACTOR_CLASS_PLAYER
Definition enums.h:2110
@ ACTOR_CLASS_PARTNER
Definition enums.h:2111
@ ACTOR_CLASS_MASK
Definition enums.h:2113
@ ACTOR_SOUND_WALK
Definition enums.h:2067
@ ACTOR_SOUND_WALK_INCREMENT
Definition enums.h:2071
@ ACTOR_SOUND_FLY
Definition enums.h:2068
@ ACTOR_SOUND_HURT
Definition enums.h:2070
@ ACTOR_SOUND_FLY_INCREMENT
Definition enums.h:2072
@ ACTOR_SOUND_JUMP
Definition enums.h:2069
@ BTL_MSG_HEAL_ONE
Definition enums.h:3731
@ BTL_MSG_HEAL_ALL
Definition enums.h:3732
@ BTL_MSG_DEFENCE_UP
Definition enums.h:3730
@ BTL_MSG_ATTACK_UP
Definition enums.h:3729
@ BTL_MSG_ENEMY_TRANSPARENT
Definition enums.h:3733
@ BTL_MSG_ENEMY_CHARGED
Definition enums.h:3734
@ ITER_FIRST
Definition enums.h:2057
@ ITER_HAS_MORE
Definition enums.h:2062
@ ITER_NO_MORE
Definition enums.h:2063
@ ITER_NEXT
Definition enums.h:2058
@ ITER_LAST
Definition enums.h:2060
@ ACTOR_EVENT_FLAG_ILLUSORY
Player attacks pass through and miss.
Definition enums.h:3408
@ STATUS_KEY_PARALYZE
Definition enums.h:2806
@ STATUS_KEY_FROZEN
Definition enums.h:2808
@ 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
@ STATUS_KEY_POISON
Definition enums.h:2810
@ BTL_CAM_DEFAULT
Definition enums.h:4409
@ BTL_CAM_ACTOR_SIMPLE
Definition enums.h:4415
@ BTL_CAM_REPOSITION
Definition enums.h:4426
@ BATTLE_STATE_NONE
Definition enums.h:3664
@ STATUS_FLAG_STOP
Definition enums.h:2855
@ STATUS_FLAG_RIGHT_ON
Definition enums.h:2863
@ STATUS_FLAG_FROZEN
Definition enums.h:2848
@ STATUS_FLAG_ATTACK_BOOST
Definition enums.h:2860
@ STATUS_FLAG_DEFENSE_BOOST
Definition enums.h:2861
@ STATUS_FLAG_STATIC
Definition enums.h:2847
@ STATUS_FLAG_SHRINK
Definition enums.h:2853
@ STATUS_FLAG_PARALYZE
Definition enums.h:2850
@ STATUS_FLAG_STONE
Definition enums.h:2854
@ STATUS_FLAG_KO
Definition enums.h:2857
@ STATUS_FLAG_DIZZY
Definition enums.h:2852
@ STATUS_FLAG_CHILL_OUT
Definition enums.h:2862
@ STATUS_FLAG_TRANSPARENT
Definition enums.h:2859
@ STATUS_FLAG_SLEEP
Definition enums.h:2846
@ STATUS_FLAG_POISON
Definition enums.h:2851
@ STATUS_FLAG_UNUSED
Definition enums.h:2849
@ STATUS_FLAG_GLOWING
Definition enums.h:2858
@ ABILITY_RIGHT_ON
Definition enums.h:458
@ RENDER_MODE_SURFACE_XLU_LAYER3
Definition enums.h:3333
@ RENDER_MODE_ALPHATEST
Definition enums.h:3310
@ ACTOR_PARTNER
Definition enums.h:2119
@ ACTOR_SELF
Definition enums.h:2117
@ ACTOR_FLAG_HALF_HEIGHT
Definition enums.h:3369
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3365
@ ACTOR_FLAG_USING_IDLE_ANIM
Definition enums.h:3376
@ EVENT_RECEIVE_BUFF
Definition enums.h:2211
@ ACTOR_PART_FLAG_HAS_PAL_EFFECT
Definition enums.h:3397
@ ACTOR_PART_FLAG_USE_ABSOLUTE_POSITION
Definition enums.h:3395
@ ACTOR_PART_FLAG_TRANSPARENT
Definition enums.h:3391
#define ApiStatus_DONE2
Definition evt.h:119
s32 Bytecode
Definition evt.h:7
#define ApiStatus_DONE1
Definition evt.h:118
#define ApiStatus_BLOCK
Definition evt.h:117
void btl_show_variable_battle_message(s32, s32, s32)
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1730
s32 player_team_is_ability_active(Actor *actor, s32 ability)
Definition 190B20.c:2495
void show_recovery_shimmer(f32 x, f32 y, f32 z, s32 arg3)
Definition fx_api.c:8
void reset_all_actor_sounds(Actor *)
Definition 190B20.c:2668
void remove_player_buffs(s32)
Definition 190B20.c:2536
void btl_cam_use_preset_immediately(s32)
Definition camera.c:1912
void hide_actor_health_bar(Actor *)
Definition 190B20.c:2240
void btl_cam_set_zoom(s16)
Definition camera.c:1984
f32 evt_set_float_variable(Evt *script, Bytecode var, f32 value)
Definition evt.c:2017
void dispatch_event_actor(Actor *, s32)
Definition 1A5830.c:102
void clear_actor_static_pal_adjustments(Actor *)
Definition 190B20.c:2354
void add_part_decoration(ActorPart *part, s32 decorationIndex, s32 decorationType)
Definition 190B20.c:2457
u32 dma_copy(Addr romStart, Addr romEnd, void *vramDest)
Definition 43F0.c:442
s32 evt_set_variable(Evt *script, Bytecode var, s32 value)
Definition evt.c:1887
void load_tattle_flags(s32)
Definition 181810.c:569
void set_part_glow_pal(ActorPart *, s32)
Definition 190B20.c:2372
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
Definition 43F0.c:670
void btl_cam_disable_clamp_x(void)
Definition camera.c:2006
void create_home_target_list(Actor *actor)
Definition 190B20.c:476
void btl_cam_use_preset(s32)
Definition camera.c:1919
void btl_cam_target_actor(s32)
Definition camera.c:1926
s32 inflict_status(Actor *, s32, s32)
Definition 190B20.c:1814
void btl_cam_set_zoffset(s16)
Definition camera.c:1996
ActorPart * get_actor_part(Actor *actor, s32 partID)
Definition 190B20.c:923
void show_start_recovery_shimmer(f32 x, f32 y, f32 z, s32 arg3)
Definition fx_api.c:4
void set_actor_anim(s32 actorID, s32 partID, AnimID animID)
Definition 190B20.c:737
void set_actor_anim_rate(s32 actorID, s32 partID, f32 rate)
Definition 190B20.c:800
void btl_cam_move(s16)
Definition camera.c:1953
void set_part_yaw(s32 actorID, s32 partID, s32 value)
Definition 190B20.c:827
void set_actor_yaw(s32 actorID, s32 yaw)
Definition 190B20.c:823
void remove_part_shadow(s32 actorID, s32 partID)
Definition 190B20.c:2523
s32 does_script_exist(s32 id)
f32 evt_get_float_variable(Evt *script, Bytecode var)
Definition evt.c:1970
void set_part_pal_adjustment(ActorPart *, s32)
Definition 190B20.c:2325
void btl_set_state(s32 battleState)
s32 btl_is_popup_displayed(void)
void apply_shock_effect(Actor *)
void create_current_pos_target_list(Actor *actor)
Definition 190B20.c:472
s32 is_actor_health_bar_visible(Actor *)
Definition 181810.c:503
void remove_part_decoration(ActorPart *part, s32 decorationIndex)
Definition 190B20.c:2480
void create_part_shadow(s32 actorID, s32 partID)
Definition 190B20.c:2515
#define ARRAY_COUNT(arr)
Definition macros.h:39
#define EVT_IGNORE_ARG
Definition macros.h:47
#define ACTOR_API_SKIP_ARG
Definition battle.h:274
s32 walk[2]
Definition battle.h:235
s16 delay[2]
Number of frames to wait between walk/fly sounds. Negative values are in distance.
Definition battle.h:239
s32 fly[2]
Definition battle.h:236
Vec2b healthBarOffset
Definition battle.h:149
EXTERN_C ActorSounds bActorSoundTable[]
Definition battle.h:242
struct Actor * partnerActor
struct Actor * playerActor
s32 gBattleState
Definition battle.cpp:13
BattleStatus gBattleStatus
Definition battle.cpp:14
Vec3s StandardActorHomePositions[]
Definition actors.c:165