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 = NULL;
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 Actor* actor;
816 s32 partID;
817 AnimID animID;
818
819 if (actorID == ACTOR_SELF) {
820 actorID = script->owner1.actorID;
821 }
822
823 partID = evt_get_variable(script, *args++);
824 animID = evt_get_variable(script, *args++);
825
826 set_actor_anim(actorID, partID, animID);
827
828 return ApiStatus_DONE2;
829}
830
831API_CALLABLE(GetAnimation) {
832 Bytecode* args = script->ptrReadPos;
833 s32 actorID = evt_get_variable(script, *args++);
834 s32 partID;
836 s32 outVar;
837
838 if (actorID == ACTOR_SELF) {
839 actorID = script->owner1.actorID;
840 }
841 partID = evt_get_variable(script, *args++);
842 outVar = *args++;
843
844 actorPart = get_actor_part(get_actor(actorID), partID);
845
846 if (actorPart != NULL) {
847 evt_set_variable(script, outVar, actorPart->curAnimation);
848 }
849 return ApiStatus_DONE2;
850}
851
852API_CALLABLE(SetAnimationRate) {
853 Bytecode* args = script->ptrReadPos;
854 s32 actorID = evt_get_variable(script, *args++);
855 Actor* actor;
856 s32 partID;
857 f32 rate;
858
859 if (actorID == ACTOR_SELF) {
860 actorID = script->owner1.actorID;
861 }
862
863 partID = evt_get_variable(script, *args++);
865
866 set_actor_anim_rate(actorID, partID, rate);
867
868 return ApiStatus_DONE2;
869}
870
871API_CALLABLE(SetActorYaw) {
872 Bytecode* args = script->ptrReadPos;
873 s32 actorID = evt_get_variable(script, *args++);
874
875 if (actorID == ACTOR_SELF) {
876 actorID = script->owner1.actorID;
877 }
878
879 set_actor_yaw(actorID, evt_get_variable(script, *args++));
880 return ApiStatus_DONE2;
881}
882
883API_CALLABLE(GetActorYaw) {
884 Bytecode* args = script->ptrReadPos;
885 s32 actorID = evt_get_variable(script, *args++);
886 s32 a1;
887
888 if (actorID == ACTOR_SELF) {
889 actorID = script->owner1.actorID;
890 }
891
892 a1 = *args++;
893
894 evt_set_variable(script, a1, get_actor(actorID)->yaw);
895 return ApiStatus_DONE2;
896}
897
898API_CALLABLE(SetPartYaw) {
899 Bytecode* args = script->ptrReadPos;
900 s32 actorID = evt_get_variable(script, *args++);
901 s32 partID;
902 s32 yaw;
903
904 if (actorID == ACTOR_SELF) {
905 actorID = script->owner1.actorID;
906 }
907
908 partID = evt_get_variable(script, *args++);
909 yaw = evt_get_variable(script, *args++);
910
911 set_part_yaw(actorID, partID, yaw);
912 return ApiStatus_DONE2;
913}
914
915API_CALLABLE(GetPartYaw) {
916 Bytecode* args = script->ptrReadPos;
917 s32 actorID = evt_get_variable(script, *args++);
918 s32 partID;
919 s32 a1;
920
921 if (actorID == ACTOR_SELF) {
922 actorID = script->owner1.actorID;
923 }
924
925 partID = evt_get_variable(script, *args++);
926 a1 = *args++;
927
928 evt_set_variable(script, a1, get_actor_part(get_actor(actorID), partID)->yaw);
929 return ApiStatus_DONE2;
930}
931
932API_CALLABLE(SetActorJumpGravity) {
933 Bytecode* args = script->ptrReadPos;
934 s32 actorID = evt_get_variable(script, *args++);
936
937 if (actorID == ACTOR_SELF) {
938 actorID = script->owner1.actorID;
939 }
940
943 return ApiStatus_DONE2;
944}
945
946API_CALLABLE(SetActorIdleJumpGravity) {
947 Bytecode* args = script->ptrReadPos;
948 s32 actorID = evt_get_variable(script, *args++);
950
951 if (actorID == ACTOR_SELF) {
952 actorID = script->owner1.actorID;
953 }
954
957 return ApiStatus_DONE2;
958}
959
960API_CALLABLE(SetActorSpeed) {
961 Bytecode* args = script->ptrReadPos;
962 s32 actorID = evt_get_variable(script, *args++);
963 f32 moveSpeed;
964
965 if (actorID == ACTOR_SELF) {
966 actorID = script->owner1.actorID;
967 }
968
969 moveSpeed = evt_get_float_variable(script, *args++);
970 get_actor(actorID)->state.speed = moveSpeed;
971 return ApiStatus_DONE2;
972}
973
974// SetActorFlySpeed?
975API_CALLABLE(SetActorIdleSpeed) {
976 Bytecode* args = script->ptrReadPos;
977 s32 actorID = evt_get_variable(script, *args++);
979
980 if (actorID == ACTOR_SELF) {
981 actorID = script->owner1.actorID;
982 }
983
985 get_actor(actorID)->fly.speed = flySpeed;
986 return ApiStatus_DONE2;
987}
988
989API_CALLABLE(SetPartJumpGravity) {
990 Bytecode* args = script->ptrReadPos;
991 s32 actorID = evt_get_variable(script, *args++);
992 s32 partID;
993 f32 jumpScale;
994
995 if (actorID == ACTOR_SELF) {
996 actorID = script->owner1.actorID;
997 }
998
999 partID = evt_get_variable(script, *args++);
1000 jumpScale = evt_get_float_variable(script, *args++);
1001
1002 get_actor_part(get_actor(actorID), partID)->movement->jumpScale = jumpScale;
1003 return ApiStatus_DONE2;
1004}
1005
1006API_CALLABLE(SetPartMoveSpeed) {
1007 Bytecode* args = script->ptrReadPos;
1008 s32 actorID = evt_get_variable(script, *args++);
1009 s32 partID;
1010 f32 moveSpeed;
1011
1012 if (actorID == ACTOR_SELF) {
1013 actorID = script->owner1.actorID;
1014 }
1015
1016 partID = evt_get_variable(script, *args++);
1017 moveSpeed = evt_get_float_variable(script, *args++);
1018
1019 get_actor_part(get_actor(actorID), partID)->movement->moveSpeed = moveSpeed;
1020 return ApiStatus_DONE2;
1021}
1022
1023API_CALLABLE(SetJumpAnimations) {
1024 Bytecode* args = script->ptrReadPos;
1025 s32 actorID = evt_get_variable(script, *args++);
1026 Actor* actor;
1027 s32 jumpPartIndex;
1028 s32 animJumpRise;
1029 s32 animJumpFall;
1030 s32 animJumpLand;
1031
1032 if (actorID == ACTOR_SELF) {
1033 actorID = script->owner1.actorID;
1034 }
1035
1036 jumpPartIndex = evt_get_variable(script, *args++);
1037 animJumpRise = *args++;
1038 animJumpFall = *args++;
1039 animJumpLand = *args++;
1040
1041 actor = get_actor(actorID);
1042 actor->state.jumpPartIndex = jumpPartIndex;
1043 actor->state.animJumpRise = animJumpRise;
1044 actor->state.animJumpFall = animJumpFall;
1045 actor->state.animJumpLand = animJumpLand;
1046
1047 return ApiStatus_DONE2;
1048}
1049
1050API_CALLABLE(AddActorPos) {
1051 Bytecode* args = script->ptrReadPos;
1052 s32 actorID = evt_get_variable(script, *args++);
1053 Actor* actor;
1054 f32 x, y, z;
1055
1056 if (actorID == ACTOR_SELF) {
1057 actorID = script->owner1.actorID;
1058 }
1059
1060 x = evt_get_float_variable(script, *args++);
1061 y = evt_get_float_variable(script, *args++);
1062 z = evt_get_float_variable(script, *args++);
1063
1064 actor = get_actor(actorID);
1065 actor->curPos.x += x;
1066 actor->curPos.y += y;
1067 actor->curPos.z += z;
1068
1069 return ApiStatus_DONE2;
1070}
1071
1072API_CALLABLE(SetActorDispOffset) {
1073 Bytecode* args = script->ptrReadPos;
1074 s32 actorID = evt_get_variable(script, *args++);
1075 Actor* actor;
1076 f32 x, y, z;
1077
1078 if (actorID == ACTOR_SELF) {
1079 actorID = script->owner1.actorID;
1080 }
1081
1082 x = evt_get_float_variable(script, *args++);
1083 y = evt_get_float_variable(script, *args++);
1084 z = evt_get_float_variable(script, *args++);
1085
1086 actor = get_actor(actorID);
1087 actor->headOffset.x = x;
1088 actor->headOffset.y = y;
1089 actor->headOffset.z = z;
1090
1091 return ApiStatus_DONE2;
1092}
1093
1094API_CALLABLE(GetPartDispOffset) {
1095 Bytecode* args = script->ptrReadPos;
1096 s32 actorID = evt_get_variable(script, *args++);
1098 s32 partID;
1099 s32 outX, outY, outZ;
1100 f32 x, y, z;
1101
1102 if (actorID == ACTOR_SELF) {
1103 actorID = script->owner1.actorID;
1104 }
1105
1106 partID = evt_get_variable(script, *args++);
1107 outX = *args++;
1108 outY = *args++;
1109 outZ = *args++;
1110
1111 actorPart = get_actor_part(get_actor(actorID), partID);
1112
1114 x = actorPart->partOffset.x;
1115 y = actorPart->partOffset.y;
1116 z = actorPart->partOffset.z;
1117 } else {
1118 x = actorPart->visualOffset.x;
1119 y = actorPart->visualOffset.y;
1120 z = actorPart->visualOffset.z;
1121 }
1122
1126
1127 return ApiStatus_DONE2;
1128}
1129
1130API_CALLABLE(SetPartDispOffset) {
1131 Bytecode* args = script->ptrReadPos;
1132 s32 actorID = evt_get_variable(script, *args++);
1134 s32 partID;
1135 f32 x, y, z;
1136
1137 if (actorID == ACTOR_SELF) {
1138 actorID = script->owner1.actorID;
1139 }
1140
1141 partID = evt_get_variable(script, *args++);
1142
1143 x = evt_get_float_variable(script, *args++);
1144 y = evt_get_float_variable(script, *args++);
1145 z = evt_get_float_variable(script, *args++);
1146 actorPart = get_actor_part(get_actor(actorID), partID);
1147
1149 actorPart->partOffset.x = x;
1150 actorPart->partOffset.y = y;
1151 actorPart->partOffset.z = z;
1152 } else {
1153 actorPart->visualOffset.x = x;
1154 actorPart->visualOffset.y = y;
1155 actorPart->visualOffset.z = z;
1156 }
1157
1158 return ApiStatus_DONE2;
1159}
1160
1161API_CALLABLE(AddPartDispOffset) {
1162 Bytecode* args = script->ptrReadPos;
1163 s32 actorID = evt_get_variable(script, *args++);
1165 s32 partID;
1166 f32 x, y, z;
1167
1168 if (actorID == ACTOR_SELF) {
1169 actorID = script->owner1.actorID;
1170 }
1171
1172 partID = evt_get_variable(script, *args++);
1173
1174 x = evt_get_float_variable(script, *args++);
1175 y = evt_get_float_variable(script, *args++);
1176 z = evt_get_float_variable(script, *args++);
1177 actorPart = get_actor_part(get_actor(actorID), partID);
1178
1180 actorPart->partOffset.x += x;
1181 actorPart->partOffset.y += y;
1182 actorPart->partOffset.z += z;
1183 } else {
1184 actorPart->visualOffset.x += x;
1185 actorPart->visualOffset.y += y;
1186 actorPart->visualOffset.z += z;
1187 }
1188
1189 return ApiStatus_DONE2;
1190}
1191
1192API_CALLABLE(FreezeBattleState) {
1195 Bytecode* args = script->ptrReadPos;
1197
1198 if (increaseFreeze) {
1199 battleStatus->stateFreezeCount++;
1200 } else if (battleStatus->stateFreezeCount > 0) {
1201 battleStatus2->stateFreezeCount--;
1202 }
1203
1204 return ApiStatus_DONE2;
1205}
1206
1207API_CALLABLE(GetActorVar) {
1208 Bytecode* args = script->ptrReadPos;
1209 s32 actorID = evt_get_variable(script, *args++);
1210 s32 var1;
1211 s32 a2;
1212
1213 if (actorID == ACTOR_SELF) {
1214 actorID = script->owner1.actorID;
1215 }
1216
1217 var1 = evt_get_variable(script, *args++);
1218 a2 = *args++;
1219
1220 evt_set_variable(script, a2, get_actor(actorID)->state.varTable[var1]);
1221
1222 return ApiStatus_DONE2;
1223}
1224
1225API_CALLABLE(SetActorVar) {
1226 Bytecode* args = script->ptrReadPos;
1227 s32 actorID = evt_get_variable(script, *args++);
1228 s32 index;
1229 s32 val;
1230
1231 if (actorID == ACTOR_SELF) {
1232 actorID = script->owner1.actorID;
1233 }
1234
1235 index = evt_get_variable(script, *args++);
1236 val = evt_get_variable(script, *args++);
1237
1238 get_actor(actorID)->state.varTable[index] = val;
1239
1240 return ApiStatus_DONE2;
1241}
1242
1243API_CALLABLE(AddActorVar) {
1244 Bytecode* args = script->ptrReadPos;
1245 s32 actorID = evt_get_variable(script, *args++);
1246 s32 index;
1247 s32 val;
1248 ActorState* state;
1249
1250 if (actorID == ACTOR_SELF) {
1251 actorID = script->owner1.actorID;
1252 }
1253
1254 index = evt_get_variable(script, *args++);
1255 val = evt_get_variable(script, *args++);
1256
1257 state = &get_actor(actorID)->state;
1258 state->varTable[index] += val;
1259
1260 return ApiStatus_DONE2;
1261}
1262
1263API_CALLABLE(GetPartMovementVar) {
1264 Bytecode* args = script->ptrReadPos;
1265 s32 actorID = evt_get_variable(script, *args++);
1266 s32 partID;
1268 s32 outVar;
1269
1270 if (actorID == ACTOR_SELF) {
1271 actorID = script->owner1.actorID;
1272 }
1273
1274 partID = evt_get_variable(script, *args++);
1276 outVar = *args++;
1277
1278 evt_set_variable(script, outVar, get_actor_part(get_actor(actorID), partID)->movement->varTable[tableIndex]);
1279
1280 return ApiStatus_DONE2;
1281}
1282
1283API_CALLABLE(SetPartMovementVar) {
1284 Bytecode* args = script->ptrReadPos;
1285 s32 actorID = evt_get_variable(script, *args++);
1286 s32 partID;
1288 s32 val;
1289
1290 if (actorID == ACTOR_SELF) {
1291 actorID = script->owner1.actorID;
1292 }
1293
1294 partID = evt_get_variable(script, *args++);
1296 val = evt_get_variable(script, *args++);
1297
1298 get_actor_part(get_actor(actorID), partID)->movement->varTable[tableIndex] = val;
1299
1300 return ApiStatus_DONE2;
1301}
1302
1303API_CALLABLE(AddPartMovementVar) {
1304 Bytecode* args = script->ptrReadPos;
1305 s32 actorID = evt_get_variable(script, *args++);
1306 s32 partID;
1308 s32 val;
1309
1310 if (actorID == ACTOR_SELF) {
1311 actorID = script->owner1.actorID;
1312 }
1313
1314 partID = evt_get_variable(script, *args++);
1316 val = evt_get_variable(script, *args++);
1317
1318 get_actor_part(get_actor(actorID), partID)->movement->varTable[tableIndex] += val;
1319
1320 return ApiStatus_DONE2;
1321}
1322
1323API_CALLABLE(SetActorRotation) {
1324 Bytecode* args = script->ptrReadPos;
1325 s32 actorID = evt_get_variable(script, *args++);
1326 Actor* actor;
1327 s32 x, y, z;
1328
1329 if (actorID == ACTOR_SELF) {
1330 actorID = script->owner1.actorID;
1331 }
1332
1333 x = evt_get_float_variable(script, *args++);
1334 y = evt_get_float_variable(script, *args++);
1335 z = evt_get_float_variable(script, *args++);
1336
1337 actor = get_actor(actorID);
1338
1339 if (x != EVT_IGNORE_ARG) {
1340 actor->rot.x = x;
1341 }
1342
1343 if (y != EVT_IGNORE_ARG) {
1344 actor->rot.y = y;
1345 }
1346
1347 if (z != EVT_IGNORE_ARG) {
1348 actor->rot.z = z;
1349 }
1350
1351 return ApiStatus_DONE2;
1352}
1353
1354API_CALLABLE(SetActorRotationOffset) {
1355 Bytecode* args = script->ptrReadPos;
1356 s32 actorID = evt_get_variable(script, *args++);
1357 Actor* actor;
1358 s32 x, y, z;
1359
1360 if (actorID == ACTOR_SELF) {
1361 actorID = script->owner1.actorID;
1362 }
1363
1364 x = evt_get_float_variable(script, *args++);
1365 y = evt_get_float_variable(script, *args++);
1366 z = evt_get_float_variable(script, *args++);
1367
1368 actor = get_actor(actorID);
1369
1370 actor->rotPivotOffset.x = x;
1371 actor->rotPivotOffset.y = y;
1372 actor->rotPivotOffset.z = z;
1373
1374 return ApiStatus_DONE2;
1375}
1376
1377API_CALLABLE(GetActorRotation) {
1378 Bytecode* args = script->ptrReadPos;
1379 s32 actorID = evt_get_variable(script, *args++);
1380 Actor* actor;
1381 s32 x, y, z;
1382
1383 if (actorID == ACTOR_SELF) {
1384 actorID = script->owner1.actorID;
1385 }
1386
1387 x = *args++;
1388 y = *args++;
1389 z = *args++;
1390
1391 actor = get_actor(actorID);
1392
1393 evt_set_variable(script, x, actor->rot.x);
1394 evt_set_variable(script, y, actor->rot.y);
1395 evt_set_variable(script, z, actor->rot.z);
1396
1397 return ApiStatus_DONE2;
1398}
1399
1400API_CALLABLE(SetPartRotation) {
1401 Bytecode* args = script->ptrReadPos;
1402 s32 actorID = evt_get_variable(script, *args++);
1403 s32 partID = evt_get_variable(script, *args++);
1405 s32 x, y, z;
1406
1407 if (actorID == ACTOR_SELF) {
1408 actorID = script->owner1.actorID;
1409 }
1410
1411 x = evt_get_float_variable(script, *args++);
1412 y = evt_get_float_variable(script, *args++);
1413 z = evt_get_float_variable(script, *args++);
1414
1415 actorPart = get_actor_part(get_actor(actorID), partID);
1416
1417 actorPart->rot.x = x;
1418 actorPart->rot.y = y;
1419 actorPart->rot.z = z;
1420
1421 return ApiStatus_DONE2;
1422}
1423
1424API_CALLABLE(SetPartRotationOffset) {
1425 Bytecode* args = script->ptrReadPos;
1426 s32 actorID = evt_get_variable(script, *args++);
1427 s32 partID = evt_get_variable(script, *args++);
1429 s32 x, y, z;
1430
1431 if (actorID == ACTOR_SELF) {
1432 actorID = script->owner1.actorID;
1433 }
1434
1435 x = evt_get_float_variable(script, *args++);
1436 y = evt_get_float_variable(script, *args++);
1437 z = evt_get_float_variable(script, *args++);
1438
1439 actorPart = get_actor_part(get_actor(actorID), partID);
1440
1441 actorPart->rotPivotOffset.x = x;
1442 actorPart->rotPivotOffset.y = y;
1443 actorPart->rotPivotOffset.z = z;
1444
1445 return ApiStatus_DONE2;
1446}
1447
1448API_CALLABLE(GetPartRotation) {
1449 Bytecode* args = script->ptrReadPos;
1450 s32 actorID = evt_get_variable(script, *args++);
1451 s32 partID = evt_get_variable(script, *args++);
1453 s32 x, y, z;
1454
1455 if (actorID == ACTOR_SELF) {
1456 actorID = script->owner1.actorID;
1457 }
1458
1459 x = *args++;
1460 y = *args++;
1461 z = *args++;
1462
1463 actorPart = get_actor_part(get_actor(actorID), partID);
1464
1468
1469 return ApiStatus_DONE2;
1470}
1471
1472API_CALLABLE(SetActorScale) {
1473 Bytecode* args = script->ptrReadPos;
1474 s32 actorID = evt_get_variable(script, *args++);
1475 Actor* actor;
1476 f32 x, y, z;
1477
1478 if (actorID == ACTOR_SELF) {
1479 actorID = script->owner1.actorID;
1480 }
1481
1482 x = evt_get_float_variable(script, *args++);
1483 y = evt_get_float_variable(script, *args++);
1484 z = evt_get_float_variable(script, *args++);
1485
1486 actor = get_actor(actorID);
1487
1488 actor->scale.x = x;
1489 actor->scale.y = y;
1490 actor->scale.z = z;
1491
1492 return ApiStatus_DONE2;
1493}
1494
1495API_CALLABLE(SetActorScaleModifier) {
1496 Bytecode* args = script->ptrReadPos;
1497 s32 actorID = evt_get_variable(script, *args++);
1498 Actor* actor;
1499 f32 x, y, z;
1500
1501 if (actorID == ACTOR_SELF) {
1502 actorID = script->owner1.actorID;
1503 }
1504
1505 x = evt_get_float_variable(script, *args++);
1506 y = evt_get_float_variable(script, *args++);
1507 z = evt_get_float_variable(script, *args++);
1508
1509 actor = get_actor(actorID);
1510
1511 actor->scaleModifier.x = x;
1512 actor->scaleModifier.y = y;
1513 actor->scaleModifier.z = z;
1514
1515 return ApiStatus_DONE2;
1516}
1517
1518API_CALLABLE(GetActorScale) {
1519 Bytecode* args = script->ptrReadPos;
1520 s32 actorID = evt_get_variable(script, *args++);
1521 Actor* actor;
1522 f32 x, y, z;
1523
1524 if (actorID == ACTOR_SELF) {
1525 actorID = script->owner1.actorID;
1526 }
1527
1528 x = *args++;
1529 y = *args++;
1530 z = *args++;
1531
1532 actor = get_actor(actorID);
1533
1537
1538 return ApiStatus_DONE2;
1539}
1540
1541API_CALLABLE(SetPartScale) {
1542 Bytecode* args = script->ptrReadPos;
1543 s32 actorID = evt_get_variable(script, *args++);
1544 s32 partID = evt_get_variable(script, *args++);
1546 f32 x, y, z;
1547
1548 if (actorID == ACTOR_SELF) {
1549 actorID = script->owner1.actorID;
1550 }
1551
1552 x = evt_get_float_variable(script, *args++);
1553 y = evt_get_float_variable(script, *args++);
1554 z = evt_get_float_variable(script, *args++);
1555
1556 actorPart = get_actor_part(get_actor(actorID), partID);
1557
1558 actorPart->scale.x = x;
1559 actorPart->scale.y = y;
1560 actorPart->scale.z = z;
1561
1562 return ApiStatus_DONE2;
1563}
1564
1565API_CALLABLE(GetPartScale) {
1566 Bytecode* args = script->ptrReadPos;
1567 s32 actorID = evt_get_variable(script, *args++);
1568 s32 partID = evt_get_variable(script, *args++);
1570 s32 x, y, z;
1571
1572 if (actorID == ACTOR_SELF) {
1573 actorID = script->owner1.actorID;
1574 }
1575
1576 x = *args++;
1577 y = *args++;
1578 z = *args++;
1579
1580 actorPart = get_actor_part(get_actor(actorID), partID);
1581
1585
1586 return ApiStatus_DONE2;
1587}
1588
1589API_CALLABLE(GetBattleFlags) {
1591 return ApiStatus_DONE2;
1592}
1593
1594API_CALLABLE(SetBattleFlagBits) {
1595 Bytecode* args = script->ptrReadPos;
1596 s32 bits = *args++;
1597 s32 mode = evt_get_variable(script, *args++);
1598
1599 if (mode) {
1601 } else {
1603 }
1604
1605 return ApiStatus_DONE2;
1606}
1607
1608API_CALLABLE(GetBattleFlags2) {
1610 return ApiStatus_DONE2;
1611}
1612
1613API_CALLABLE(SetBattleFlagBits2) {
1614 Bytecode* args = script->ptrReadPos;
1615 s32 bits = *args++;
1616 s32 mode = evt_get_variable(script, *args++);
1617
1618 if (mode) {
1620 } else {
1622 }
1623
1624 return ApiStatus_DONE2;
1625}
1626
1627API_CALLABLE(SetActorFlags) {
1628 Bytecode* args = script->ptrReadPos;
1629 s32 actorID = evt_get_variable(script, *args++);
1630 s32 flagBits;
1631
1632 if (actorID == ACTOR_SELF) {
1633 actorID = script->owner1.actorID;
1634 }
1635
1636 flagBits = *args++;
1637 get_actor(actorID)->flags = flagBits;
1638
1639 return ApiStatus_DONE2;
1640}
1641
1642API_CALLABLE(SetActorFlagBits) {
1643 Bytecode* args = script->ptrReadPos;
1644 s32 actorID = evt_get_variable(script, *args++);
1645 s32 bits;
1646 s32 mode;
1647 Actor* actor;
1648
1649 if (actorID == ACTOR_SELF) {
1650 actorID = script->owner1.actorID;
1651 }
1652
1653 bits = *args++;
1654 mode = evt_get_variable(script, *args++);
1655 actor = get_actor(actorID);
1656
1657 if (mode) {
1658 actor->flags |= bits;
1659 } else {
1660 actor->flags &= ~bits;
1661 }
1662
1663 return ApiStatus_DONE2;
1664}
1665
1666API_CALLABLE(GetActorFlags) {
1667 Bytecode* args = script->ptrReadPos;
1668 s32 actorID = evt_get_variable(script, *args++);
1669 s32 outVar;
1670
1671 if (actorID == ACTOR_SELF) {
1672 actorID = script->owner1.actorID;
1673 }
1674
1675 outVar = *args++;
1676
1678
1679 return ApiStatus_DONE2;
1680}
1681
1682API_CALLABLE(SetPartFlags) {
1683 Bytecode* args = script->ptrReadPos;
1684 s32 actorID = evt_get_variable(script, *args++);
1685 s32 flagBits;
1686 s32 partID;
1687
1688 if (actorID == ACTOR_SELF) {
1689 actorID = script->owner1.actorID;
1690 }
1691
1692 partID = evt_get_variable(script, *args++);
1693 flagBits = *args++;
1694
1695 get_actor_part(get_actor(actorID), partID)->flags = flagBits;
1696
1697 return ApiStatus_DONE2;
1698}
1699
1700API_CALLABLE(SetPartFlagBits) {
1701 Bytecode* args = script->ptrReadPos;
1702 s32 actorID = evt_get_variable(script, *args++);
1704 s32 bits;
1705 s32 partID;
1706 s32 mode;
1707
1708 if (actorID == ACTOR_SELF) {
1709 actorID = script->owner1.actorID;
1710 }
1711
1712 partID = evt_get_variable(script, *args++);
1713 bits = *args++;
1714 mode = evt_get_variable(script, *args++);
1715
1716 actorPart = get_actor_part(get_actor(actorID), partID);
1717
1718 if (mode) {
1719 actorPart->flags |= bits;
1720 } else {
1721 actorPart->flags &= ~bits;
1722 }
1723
1724 return ApiStatus_DONE2;
1725}
1726
1727API_CALLABLE(SetPartTargetFlags) {
1728 Bytecode* args = script->ptrReadPos;
1729 s32 actorID = evt_get_variable(script, *args++);
1731 s32 flagBits;
1732 s32 partID;
1733
1734 if (actorID == ACTOR_SELF) {
1735 actorID = script->owner1.actorID;
1736 }
1737
1738 partID = evt_get_variable(script, *args++);
1739 flagBits = *args++;
1740
1741 get_actor_part(get_actor(actorID), partID)->targetFlags = flagBits;
1742
1743 return ApiStatus_DONE2;
1744}
1745
1746API_CALLABLE(SetPartTargetFlagBits) {
1747 Bytecode* args = script->ptrReadPos;
1748 s32 actorID = evt_get_variable(script, *args++);
1750 s32 partID;
1751 s32 bits;
1752 s32 mode;
1753
1754 if (actorID == ACTOR_SELF) {
1755 actorID = script->owner1.actorID;
1756 }
1757
1758 partID = evt_get_variable(script, *args++);
1759 bits = *args++;
1760 mode = evt_get_variable(script, *args++);
1761
1762 actorPart = get_actor_part(get_actor(actorID), partID);
1763
1764 if (mode) {
1765 actorPart->targetFlags |= bits;
1766 } else {
1767 actorPart->targetFlags &= ~bits;
1768 }
1769
1770 return ApiStatus_DONE2;
1771}
1772
1773API_CALLABLE(GetPartFlags) {
1774 Bytecode* args = script->ptrReadPos;
1775 s32 actorID = evt_get_variable(script, *args++);
1776 s32 partID;
1778 s32 outVar;
1779
1780 if (actorID == ACTOR_SELF) {
1781 actorID = script->owner1.actorID;
1782 }
1783
1784 partID = evt_get_variable(script, *args++);
1785 outVar = *args++;
1786
1788
1789 return ApiStatus_DONE2;
1790}
1791
1792API_CALLABLE(GetPartTargetFlags) {
1793 Bytecode* args = script->ptrReadPos;
1794 s32 actorID = evt_get_variable(script, *args++);
1795 s32 partID;
1797 s32 outVar;
1798
1799 if (actorID == ACTOR_SELF) {
1800 actorID = script->owner1.actorID;
1801 }
1802
1803 partID = evt_get_variable(script, *args++);
1804 outVar = *args++;
1805
1806 evt_set_variable(script, outVar, get_actor_part(get_actor(actorID), partID)->targetFlags);
1807
1808 return ApiStatus_DONE2;
1809}
1810
1811API_CALLABLE(SetPartEventFlags) {
1812 Bytecode* args = script->ptrReadPos;
1813 s32 actorID = evt_get_variable(script, *args++);
1815 s32 flagBits;
1816 s32 partID;
1817
1818 if (actorID == ACTOR_SELF) {
1819 actorID = script->owner1.actorID;
1820 }
1821
1822 partID = evt_get_variable(script, *args++);
1823 flagBits = *args++;
1824
1825 get_actor_part(get_actor(actorID), partID)->eventFlags = flagBits;
1826
1827 return ApiStatus_DONE2;
1828}
1829
1830API_CALLABLE(SetPartEventBits) {
1831 Bytecode* args = script->ptrReadPos;
1832 s32 actorID = evt_get_variable(script, *args++);
1833 Actor* actor;
1834 ActorPart* part;
1835 s32 partID;
1836 s32 bits;
1837 s32 mode;
1838
1839 if (actorID == ACTOR_SELF) {
1840 actorID = script->owner1.actorID;
1841 }
1842
1843 partID = evt_get_variable(script, *args++);
1844 bits = *args++;
1845 mode = evt_get_variable(script, *args++);
1846
1847 actor = get_actor(actorID);
1848 part = get_actor_part(actor, partID);
1849
1850 if (mode) {
1851 part->eventFlags |= bits;
1852 } else {
1853 part->eventFlags &= ~bits;
1854 }
1855
1856 return ApiStatus_DONE2;
1857}
1858
1859API_CALLABLE(GetPartEventFlags) {
1860 Bytecode* args = script->ptrReadPos;
1861 s32 actorID = evt_get_variable(script, *args++);
1862 s32 partID;
1863 Actor* actor;
1864 ActorPart* part;
1865 s32 outVar;
1866
1867 if (actorID == ACTOR_SELF) {
1868 actorID = script->owner1.actorID;
1869 }
1870
1871 partID = evt_get_variable(script, *args++);
1872 outVar = *args++;
1873
1874 actor = get_actor(actorID);
1875 part = get_actor_part(actor, partID);
1876 evt_set_variable(script, outVar, part->eventFlags);
1877
1878 return ApiStatus_DONE2;
1879}
1880
1881API_CALLABLE(SetPartImmunityFlags) {
1882 Bytecode* args = script->ptrReadPos;
1883 s32 actorID = evt_get_variable(script, *args++);
1885 s32 flagBits;
1886 s32 partID;
1887
1888 if (actorID == ACTOR_SELF) {
1889 actorID = script->owner1.actorID;
1890 }
1891
1892 partID = evt_get_variable(script, *args++);
1893 flagBits = *args++;
1894
1896
1897 return ApiStatus_DONE2;
1898}
1899
1900API_CALLABLE(SetPartImmunityBits) {
1901 Bytecode* args = script->ptrReadPos;
1902 s32 actorID = evt_get_variable(script, *args++);
1903 Actor* actor;
1904 ActorPart* part;
1905 s32 partID;
1906 s32 bits;
1907 s32 mode;
1908
1909 if (actorID == ACTOR_SELF) {
1910 actorID = script->owner1.actorID;
1911 }
1912
1913 partID = evt_get_variable(script, *args++);
1914 bits = *args++;
1915 mode = evt_get_variable(script, *args++);
1916
1917 actor = get_actor(actorID);
1918 part = get_actor_part(actor, partID);
1919
1920 if (mode) {
1921 part->elementalImmunities |= bits;
1922 } else {
1923 part->elementalImmunities &= ~bits;
1924 }
1925
1926 return ApiStatus_DONE2;
1927}
1928
1929API_CALLABLE(HPBarToHome) {
1930 Bytecode* args = script->ptrReadPos;
1931 s32 actorID = evt_get_variable(script, *args++);
1932 Actor* actor;
1933
1934 if (actorID == ACTOR_SELF) {
1935 actorID = script->owner1.actorID;
1936 }
1937
1938 actor = get_actor(actorID);
1939 actor->healthBarPos.x = actor->homePos.x + actor->actorBlueprint->healthBarOffset.x;
1940 actor->healthBarPos.y = actor->homePos.y + actor->actorBlueprint->healthBarOffset.y;
1941 actor->healthBarPos.z = actor->homePos.z;
1942
1943 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
1944 actor->healthBarPos.y = actor->homePos.y - actor->size.y - actor->actorBlueprint->healthBarOffset.y;
1945 }
1946
1947 actor->healthFraction = (actor->curHP * 25) / actor->maxHP;
1948
1949 return ApiStatus_DONE2;
1950}
1951
1952API_CALLABLE(HPBarToCurrent) {
1953 Bytecode* args = script->ptrReadPos;
1954 s32 actorID = evt_get_variable(script, *args++);
1955 Actor* actor;
1956
1957 if (actorID == ACTOR_SELF) {
1958 actorID = script->owner1.actorID;
1959 }
1960
1961 actor = get_actor(actorID);
1962 actor->healthBarPos.x = actor->curPos.x + actor->actorBlueprint->healthBarOffset.x;
1963 actor->healthBarPos.y = actor->curPos.y + actor->actorBlueprint->healthBarOffset.y;
1964 actor->healthBarPos.z = actor->curPos.z;
1965
1966 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
1967 actor->healthBarPos.y = actor->curPos.y - actor->size.y - actor->actorBlueprint->healthBarOffset.y;
1968 }
1969
1970 actor->healthFraction = (actor->curHP * 25) / actor->maxHP;
1971
1972 return ApiStatus_DONE2;
1973}
1974
1975API_CALLABLE(HideHPBar) {
1976 Bytecode* args = script->ptrReadPos;
1977 s32 actorID = evt_get_variable(script, *args++);
1978
1979 if (actorID == ACTOR_SELF) {
1980 actorID = script->owner1.actorID;
1981 }
1982
1984
1985 return ApiStatus_DONE2;
1986}
1987
1988API_CALLABLE(SetHPBarOffset) {
1989 Bytecode* args = script->ptrReadPos;
1990 s32 actorID = evt_get_variable(script, *args++);
1991 Actor* actor;
1992 s32 x, y;
1993
1994 if (actorID == ACTOR_SELF) {
1995 actorID = script->owner1.actorID;
1996 }
1997
1998 x = evt_get_variable(script, *args++);
1999 y = evt_get_variable(script, *args++);
2000
2001 actor = get_actor(actorID);
2002
2003 actor->healthBarOffset.x = x;
2004 actor->healthBarOffset.y = y;
2005 actor->healthBarPos.x = actor->homePos.x + actor->actorBlueprint->healthBarOffset.x + actor->healthBarOffset.x;
2006 actor->healthBarPos.y = actor->homePos.y + actor->actorBlueprint->healthBarOffset.y + actor->healthBarOffset.y;
2007 actor->healthBarPos.z = actor->homePos.z;
2008
2009 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
2010 actor->healthBarPos.y = actor->homePos.y - actor->size.y;
2011 }
2012
2013 return ApiStatus_DONE2;
2014}
2015
2016API_CALLABLE(SetActorStatusOffsets) {
2017 Bytecode* args = script->ptrReadPos;
2018 s32 actorID = evt_get_variable(script, *args++);
2019 Actor* actor;
2021
2022 if (actorID == ACTOR_SELF) {
2023 actorID = script->owner1.actorID;
2024 }
2025
2026 iconX = evt_get_variable(script, *args++);
2027 iconY = evt_get_variable(script, *args++);
2028 textX = evt_get_variable(script, *args++);
2029 textY = evt_get_variable(script, *args++);
2030
2031 actor = get_actor(actorID);
2032 actor->statusIconOffset.x = iconX;
2033 actor->statusIconOffset.y = iconY;
2034 actor->statusTextOffset.x = textX;
2035 actor->statusTextOffset.y = textY;
2036
2037 return ApiStatus_DONE2;
2038}
2039
2040API_CALLABLE(SummonEnemy) {
2042 Bytecode* args = script->ptrReadPos;
2043 Actor* actor1;
2044 Actor* actor2;
2045 s16* enemyIDs;
2047 s32 i, j;
2051
2052 if (isInitialCall) {
2053 script->functionTemp[0] = 0;
2054 }
2055
2056 switch (script->functionTemp[0]) {
2057 case 0:
2058 script->functionTempPtr[1] = create_actor((FormationRow*)evt_get_variable(script, *args++));
2059 script->functionTemp[2] = evt_get_variable(script, *args++); // isLowPriority
2060 script->functionTemp[0] = 1;
2061 break;
2062 case 1:
2063 actor2 = script->functionTempPtr[1];
2064 if (does_script_exist(actor2->takeTurnScriptID)) {
2065 break;
2066 }
2067
2068 enemyIDs = battleStatus->enemyIDs;
2069 if (battleStatus->nextEnemyIndex == 0) {
2070 numEnemies = 0;
2071 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
2072 if (battleStatus->enemyActors[i]) {
2073 battleStatus->enemyIDs[numEnemies++] = i | ACTOR_CLASS_ENEMY;
2074 }
2075 }
2076 battleStatus->numEnemyActors = numEnemies;
2077 if (script->functionTemp[2]) {
2078 basePriority = -1000;
2079 } else {
2080 basePriority = 1000;
2081 }
2082 enemyIDs = battleStatus->enemyIDs;
2083 for (i = 0; i < numEnemies - 1; i++) {
2084 for (j = i + 1; j < numEnemies; j++) {
2085 enemyID1 = enemyIDs[i];
2086 actor1 = battleStatus->enemyActors[enemyID1 & 0xFF];
2087 priority1 = actor1->turnPriority;
2088 if (actor1 == actor2) {
2090 }
2091 enemyID2 = enemyIDs[j];
2092 actor1 = battleStatus->enemyActors[enemyID2 & 0xFF];
2093 priority2 = actor1->turnPriority;
2094 if (actor1 == actor2) {
2096 }
2097 if (priority1 < priority2) {
2098 enemyIDs[i] = enemyID2;
2099 enemyIDs[j] = enemyID1;
2100 }
2101 }
2102 }
2103 } else {
2104 numEnemies = battleStatus->numEnemyActors;
2105 for (i = 0; i < numEnemies; i++){
2106 if (battleStatus->enemyActors[enemyIDs[i] & 0xFF] == actor2) {
2107 enemyIDs[i] = -1;
2108 }
2109 }
2110 if (script->functionTemp[2] == 0) {
2111 for (i = numEnemies; i >= battleStatus->nextEnemyIndex; i--) {
2112 battleStatus->enemyIDs[i] = battleStatus->enemyIDs[i - 1];
2113 }
2114 battleStatus->enemyIDs[battleStatus->nextEnemyIndex - 1] = actor2->actorID;
2115 battleStatus->numEnemyActors++;
2116 battleStatus->nextEnemyIndex++;
2117 } else {
2118 battleStatus->enemyIDs[battleStatus->numEnemyActors] = actor2->actorID;
2119 battleStatus->numEnemyActors++;
2120 }
2121 }
2122 script->varTable[0] = actor2->actorID;
2123 return ApiStatus_DONE2;
2124 }
2125 return ApiStatus_BLOCK;
2126}
2127
2128API_CALLABLE(GetOwnerID) {
2129 Bytecode* args = script->ptrReadPos;
2130 s32 outVar = *args++;
2131
2132 evt_set_variable(script, outVar, script->owner1.actorID);
2133 return ApiStatus_DONE2;
2134}
2135
2136API_CALLABLE(SetOwnerID) {
2137 Bytecode* args = script->ptrReadPos;
2138 s32 actorID = evt_get_variable(script, *args++);
2139
2140 script->owner1.actorID = actorID;
2141 return ApiStatus_DONE2;
2142}
2143
2144API_CALLABLE(ActorExists) {
2146 Bytecode* args = script->ptrReadPos;
2147 s32 actorID = evt_get_variable(script, *args++);
2148 b32 exists;
2149
2150 if (actorID == ACTOR_SELF) {
2151 actorID = script->owner1.actorID;
2152 }
2153
2154 exists = get_actor(actorID) != NULL;
2155 if ((actorID == ACTOR_PARTNER) && (partner == NULL)) {
2156 exists = FALSE;
2157 }
2158
2159 evt_set_variable(script, *args++, exists);
2160 return ApiStatus_DONE2;
2161}
2162
2163API_CALLABLE(GetPartAnimInstanceID) {
2164 Bytecode* args = script->ptrReadPos;
2165 s32 actorID = evt_get_variable(script, *args++);
2166 s32 partID = evt_get_variable(script, *args++);
2167 s32 outVar = *args++;
2168 Actor* actor;
2169 ActorPart* part;
2170
2171 if (actorID == ACTOR_SELF) {
2172 actorID = script->owner1.actorID;
2173 }
2174
2175 actor = get_actor(actorID);
2176 part = get_actor_part(actor, partID);
2177 evt_set_variable(script, outVar, part->spriteInstanceID);
2178
2179 return ApiStatus_DONE2;
2180}
2181
2182API_CALLABLE(GetPartAnimNotify) {
2183 Bytecode* args = script->ptrReadPos;
2184 s32 actorID = evt_get_variable(script, *args++);
2185 s32 partID = evt_get_variable(script, *args++);
2186 s32 outVar = *args++;
2187 Actor* actor;
2188 ActorPart* part;
2189
2190 if (actorID == ACTOR_SELF) {
2191 actorID = script->owner1.actorID;
2192 }
2193
2194 actor = get_actor(actorID);
2195 part = get_actor_part(actor, partID);
2196 evt_set_variable(script, outVar, part->animNotifyValue);
2197
2198 return ApiStatus_DONE2;
2199}
2200
2201API_CALLABLE(SetBattleMenuEnabledFlags) {
2202 Bytecode* args = script->ptrReadPos;
2203 s32 flagsValue = *args++;
2204
2206 return ApiStatus_DONE2;
2207}
2208
2209API_CALLABLE(SetEnabledStarPowers) {
2210 Bytecode* args = script->ptrReadPos;
2211 s32 enabled = *args++;
2212
2214 return ApiStatus_DONE2;
2215}
2216
2217API_CALLABLE(SetBattleInputMask) {
2218 Bytecode* args = script->ptrReadPos;
2219 s32 mask = *args++;
2220
2222 return ApiStatus_DONE2;
2223}
2224
2225API_CALLABLE(SetBattleInputButtons) {
2226 Bytecode* args = script->ptrReadPos;
2228 s32 currentButtonsDown = *args++;
2229 s32 currentButtonsPressed = *args++;
2230 s32 currentButtonsHeld = *args++;
2231
2233 battleStatus->curButtonsPressed = currentButtonsPressed;
2234 battleStatus->curButtonsHeld = currentButtonsHeld;
2235
2236 return ApiStatus_DONE2;
2237}
2238
2239API_CALLABLE(CheckButtonPress) {
2240 Bytecode* args = script->ptrReadPos;
2241 Bytecode buttons = *args++;
2242 Bytecode outVar = *args++;
2244
2246 return ApiStatus_DONE2;
2247}
2248
2249API_CALLABLE(CheckButtonHeld) {
2250 Bytecode* args = script->ptrReadPos;
2251 Bytecode buttons = *args++;
2252 Bytecode outVar = *args++;
2254
2256 return ApiStatus_DONE2;
2257}
2258
2259API_CALLABLE(CheckButtonDown) {
2260 Bytecode* args = script->ptrReadPos;
2261 Bytecode buttons = *args++;
2262 Bytecode outVar = *args++;
2264
2266 return ApiStatus_DONE2;
2267}
2268
2269API_CALLABLE(GetBattleState) {
2270 Bytecode* args = script->ptrReadPos;
2271 s32 outVar = *args++;
2272
2274 return ApiStatus_DONE2;
2275}
2276
2277API_CALLABLE(SetBattleState) {
2278 Bytecode* args = script->ptrReadPos;
2279 s32 state = evt_get_variable(script, *args++);
2280
2281 btl_set_state(state);
2282 return ApiStatus_DONE2;
2283}
2284
2285API_CALLABLE(WaitForState) {
2286 Bytecode* args = script->ptrReadPos;
2288 s32 waitForState;
2289
2290 if (isInitialCall) {
2291 waitForState = evt_get_variable(script, *args++);
2292 if (waitForState == BATTLE_STATE_NONE) {
2293 battleStatus->waitForState = BATTLE_STATE_NONE;
2294 return ApiStatus_DONE2;
2295 }
2296 battleStatus->waitForState = waitForState;
2297 }
2298
2299 waitForState = battleStatus->waitForState;
2300 if (waitForState == BATTLE_STATE_NONE) {
2301 return ApiStatus_DONE2;
2302 }
2303
2304 if (gBattleState == waitForState) {
2305 return ApiStatus_DONE2;
2306 } else {
2307 return ApiStatus_BLOCK;
2308 }
2309}
2310
2311API_CALLABLE(CancelEnemyTurn) {
2312 Bytecode* args = script->ptrReadPos;
2315
2316 switch (cancelMode) {
2317 case 0:
2318 battleStatus->cancelTurnMode = 1;
2319 break;
2320 case 1:
2321 battleStatus->cancelTurnMode = -1;
2322 break;
2323 }
2324
2325 return ApiStatus_DONE2;
2326}
2327
2328API_CALLABLE(func_8026E260) {
2329 Bytecode* args = script->ptrReadPos;
2330 s32 actorID = evt_get_variable(script, *args++);
2331
2332 evt_get_variable(script, *args++);
2333 if (actorID == ACTOR_SELF) {
2334 actorID = script->owner1.actorID;
2335 }
2336 get_actor(actorID);
2337
2338 return ApiStatus_DONE2;
2339}
2340
2341API_CALLABLE(CreateCurrentPosTargetList) {
2342 Bytecode* args = script->ptrReadPos;
2343 Actor* actor = get_actor(script->owner1.actorID);
2344
2347
2348 return ApiStatus_DONE2;
2349}
2350
2351API_CALLABLE(CreateHomeTargetList) {
2352 Bytecode* args = script->ptrReadPos;
2353 Actor* actor = get_actor(script->owner1.actorID);
2354
2357
2358 return ApiStatus_DONE2;
2359}
2360
2361API_CALLABLE(InitTargetIterator) {
2362 Bytecode* args = script->ptrReadPos;
2363 Actor* actor = get_actor(script->owner1.actorID);
2365
2366 actor->targetActorID = selectableTarget->actorID;
2367 actor->targetPartID = selectableTarget->partID;
2368
2369 return ApiStatus_DONE2;
2370}
2371
2372API_CALLABLE(SetOwnerTarget) {
2373 Bytecode* args = script->ptrReadPos;
2374 Actor* actor = get_actor(script->owner1.enemyID);
2375 s16 actorID = evt_get_variable(script, *args++);
2376
2377 actor->targetPartID = evt_get_variable(script, *args++);
2378 actor->targetActorID = actorID;
2379
2380 return ApiStatus_DONE2;
2381}
2382
2383API_CALLABLE(ChooseNextTarget) {
2384 Bytecode* args = script->ptrReadPos;
2385 Actor* actor = get_actor(script->owner1.actorID);
2386 s32 mode = evt_get_variable(script, *args++);
2387 s32 temp = *args++;
2389 s32 length;
2390 s32 curIdx;
2391 s32 retVal;
2392
2393 if (mode == ITER_FIRST) {
2394 actor->selectedTargetIndex = 0;
2395 target = &actor->targetData[actor->targetIndexList[0]];
2396 actor->targetActorID = target->actorID;
2397 actor->targetPartID = target->partID;
2398 return ApiStatus_DONE2;
2399 }
2400
2401 if (mode == ITER_LAST) {
2402 actor->selectedTargetIndex = actor->targetListLength - 1;
2403 target = &actor->targetData[actor->targetIndexList[actor->selectedTargetIndex]];
2404 actor->targetActorID = target->actorID;
2405 actor->targetPartID = target->partID;
2406 return ApiStatus_DONE2;
2407 }
2408
2409 curIdx = actor->selectedTargetIndex;
2410 length = actor->targetListLength;
2412
2413 if (mode == ITER_NEXT) {
2414 curIdx++;
2415 } else {
2416 curIdx--;
2417 }
2418
2419 if (curIdx < 0) {
2420 curIdx = length - 1;
2422 }
2423
2424 if (curIdx >= length) {
2425 curIdx = 0;
2427 }
2428
2429 actor->selectedTargetIndex = curIdx;
2430 target = &actor->targetData[actor->targetIndexList[actor->selectedTargetIndex]];
2431 actor->targetActorID = target->actorID;
2432 actor->targetPartID = target->partID;
2434
2435 return ApiStatus_DONE2;
2436}
2437
2438API_CALLABLE(func_8026E558) {
2439 Bytecode* args = script->ptrReadPos;
2441 s32 mode;
2442 s32 outVar;
2443 Actor* actor;
2444 f32 x, y, z;
2445 s32 outVal;
2446 s32 row;
2447 s32 column;
2448 s32 layer;
2449 s32 i;
2450
2451 i = evt_get_variable(script, *args++);
2452 mode = evt_get_variable(script, *args++);
2453 outVar = *args++;
2454
2455 if (i == ACTOR_SELF) {
2456 i = script->owner1.actorID;
2457 }
2458
2459 actor = get_actor(i);
2460 x = actor->curPos.x;
2461 y = actor->curPos.y;
2462 z = actor->curPos.z;
2463
2464 outVal = -1;
2465
2466 if (y < 40.0f) {
2467 row = 0;
2468 } else if (y < 85.0f) {
2469 row = 1;
2470 } else if (y < 100.0f) {
2471 row = 2;
2472 } else {
2473 row = 3;
2474 }
2475
2476 if (x < 25.0f) {
2477 column = 0;
2478 } else if (x < 65.0f) {
2479 column = 1;
2480 } else if (x < 105.0f) {
2481 column = 2;
2482 } else {
2483 column = 3;
2484 }
2485
2486 if (z < -30.0f) {
2487 layer = 0;
2488 } else {
2489 layer = 1;
2490 }
2491
2492 switch (mode) {
2493 case 0:
2494 for (i = 0; i < actor->targetListLength; i++) {
2495 target = &actor->targetData[actor->targetIndexList[i]];
2496
2497 if (target->column == column && target->layer == layer && target->row < row) {
2498 actor->targetActorID = target->actorID;
2499 actor->targetPartID = target->partID;
2500 outVal = 0;
2501 }
2502 }
2503 break;
2504 case 1:
2505 for (i = 0; i < actor->targetListLength; i++) {
2506 target = &actor->targetData[actor->targetIndexList[i]];
2507
2508 if (target->column == column && target->layer == layer && target->row < row) {
2509 actor->targetActorID = target->actorID;
2510 actor->targetPartID = target->partID;
2511 outVal = 0;
2512 }
2513 }
2514 break;
2515 case -1:
2516 for (i = 0; i < actor->targetListLength; i++) {
2517 target = &actor->targetData[actor->targetIndexList[i]];
2518
2519 if (target->column == column && target->layer == layer && target->row < row) {
2520 actor->targetActorID = target->actorID;
2521 actor->targetPartID = target->partID;
2522 outVal = 0;
2523 }
2524 }
2525 break;
2526 }
2528 return ApiStatus_DONE2;
2529}
2530
2531API_CALLABLE(GetTargetListLength) {
2532 Bytecode* args = script->ptrReadPos;
2533
2534 evt_set_variable(script, *args++, get_actor(script->owner1.actorID)->targetListLength);
2535 return ApiStatus_DONE2;
2536}
2537
2538API_CALLABLE(GetOwnerTarget) {
2539 Bytecode* args = script->ptrReadPos;
2540 Actor* actor = get_actor(script->owner1.enemyID);
2541 s32 actorID = *args++;
2542 s32 partID = *args++;
2543
2544 evt_set_variable(script, actorID, actor->targetActorID);
2545 evt_set_variable(script, partID, actor->targetPartID);
2546
2547 return ApiStatus_DONE2;
2548}
2549
2550API_CALLABLE(func_8026E914) {
2551 Bytecode* args = script->ptrReadPos;
2552 s32 temp_v0 = *args++;
2553 s32 temp_s1 = *args++;
2554
2557
2558 return ApiStatus_DONE2;
2559}
2560
2561API_CALLABLE(GetPlayerActorID) {
2563 return ApiStatus_DONE2;
2564}
2565
2566API_CALLABLE(func_8026E9A0) {
2567 Bytecode* args = script->ptrReadPos;
2568 s32 actorID;
2569 s32 partID;
2570
2571 actorID = evt_get_variable(script, *args++);
2572 partID = evt_get_variable(script, *args++);
2573
2575 gBattleStatus.curTargetID2 = actorID;
2576
2577 return ApiStatus_DONE2;
2578}
2579
2580API_CALLABLE(GetDistanceToGoal) {
2581 Bytecode* args = script->ptrReadPos;
2582 s32 actorID = evt_get_variable(script, *args++);
2583 s32 outVar = *args++;
2584 Actor* actor;
2585 f32 dist;
2586
2587 if (actorID == ACTOR_SELF) {
2588 actorID = script->owner1.actorID;
2589 }
2590 actor = get_actor(actorID);
2591
2592 dist = dist2D(actor->curPos.x, actor->curPos.z, actor->state.goalPos.x, actor->state.goalPos.z);
2594 return ApiStatus_DONE2;
2595}
2596
2597API_CALLABLE(SetActorPaletteEffect) {
2598 Bytecode* args = script->ptrReadPos;
2599 s32 actorID = evt_get_variable(script, *args++);
2600 s32 partID = evt_get_variable(script, *args++);
2602 Actor* actor;
2604
2605 if (actorID == ACTOR_SELF) {
2606 actorID = script->owner1.actorID;
2607 }
2608 actor = get_actor(actorID);
2609 actorPart = get_actor_part(actor, partID);
2610
2612 return ApiStatus_DONE2;
2613}
2614
2615API_CALLABLE(SetActorPaletteSwapTimes) {
2616 Bytecode* args = script->ptrReadPos;
2617 s32 actorID = evt_get_variable(script, *args++);
2618 s32 partID = evt_get_variable(script, *args++);
2619 Actor* actor;
2621 DecorationTable* decorations;
2622
2623 if (actorID == ACTOR_SELF) {
2624 actorID = script->owner1.actorID;
2625 }
2626 actor = get_actor(actorID);
2627 actorPart = get_actor_part(actor, partID);
2628 decorations = actorPart->decorationTable;
2629
2630 decorations->blendPalA = evt_get_variable(script, *args++);
2631 decorations->blendPalB = evt_get_variable(script, *args++);
2632 decorations->palswapTimeHoldA = evt_get_variable(script, *args++);
2633 decorations->palswapTimeAtoB = evt_get_variable(script, *args++);
2634
2635 return ApiStatus_DONE2;
2636}
2637
2638API_CALLABLE(SetActorPaletteSwapParams) {
2639 Bytecode* args = script->ptrReadPos;
2640 s32 actorID = evt_get_variable(script, *args++);
2641 s32 partID = evt_get_variable(script, *args++);
2642 Actor* actor;
2645
2646 if (actorID == ACTOR_SELF) {
2647 actorID = script->owner1.actorID;
2648 }
2649 actor = get_actor(actorID);
2650 actorPart = get_actor_part(actor, partID);
2651 table = actorPart->decorationTable;
2652
2653 table->blendPalA = evt_get_variable(script, *args++);
2654 table->blendPalB = evt_get_variable(script, *args++);
2655 table->palswapTimeHoldA = evt_get_variable(script, *args++);
2656 table->palswapTimeAtoB = evt_get_variable(script, *args++);
2657 table->palswapTimeHoldB = evt_get_variable(script, *args++);
2658 table->palswapTimeBtoA = evt_get_variable(script, *args++);
2659 table->palswapUnused1 = evt_get_variable(script, *args++);
2660 table->palswapUnused2 = evt_get_variable(script, *args++);
2661
2662 return ApiStatus_DONE2;
2663}
2664
2665API_CALLABLE(EnableActorPaletteEffects) {
2666 Bytecode* args = script->ptrReadPos;
2667 s32 actorID = evt_get_variable(script, *args++);
2668 s32 partID = evt_get_variable(script, *args++);
2669 s32 enable = evt_get_variable(script, *args++);
2670 Actor* actor;
2672
2673 if (actorID == ACTOR_SELF) {
2674 actorID = script->owner1.actorID;
2675 }
2676 actor = get_actor(actorID);
2677 actorPart = get_actor_part(actor, partID);
2678
2679 if (enable) {
2681 } else {
2683 }
2684
2685 return ApiStatus_DONE2;
2686}
2687
2688API_CALLABLE(func_8026EDE4) {
2689 Bytecode* args = script->ptrReadPos;
2690 s32 actorID = evt_get_variable(script, *args++);
2691 s32 partID = evt_get_variable(script, *args++);
2692 s32 temp_s3 = evt_get_variable(script, *args++);
2693 Actor* actor;
2695
2696 if (actorID == ACTOR_SELF) {
2697 actorID = script->owner1.actorID;
2698 }
2699 actor = get_actor(actorID);
2700 actorPart = get_actor_part(actor, partID);
2701
2703
2704 return ApiStatus_DONE2;
2705}
2706
2707API_CALLABLE(AddActorDecoration) {
2708 Bytecode* args = script->ptrReadPos;
2709 s32 actorID = evt_get_variable(script, *args++);
2710 s32 partID = evt_get_variable(script, *args++);
2712 s32 decorationType = evt_get_variable(script, *args++);
2713 Actor* actor;
2715
2716 if (actorID == ACTOR_SELF) {
2717 actorID = script->owner1.actorID;
2718 }
2719 actor = get_actor(actorID);
2720 actorPart = get_actor_part(actor, partID);
2721
2723 return ApiStatus_DONE2;
2724}
2725
2726API_CALLABLE(RemoveActorDecoration) {
2727 Bytecode* args = script->ptrReadPos;
2728 s32 actorID = evt_get_variable(script, *args++);
2729 s32 partID = evt_get_variable(script, *args++);
2731 Actor* actor;
2733
2734 if (actorID == ACTOR_SELF) {
2735 actorID = script->owner1.enemyID;
2736 }
2737 actor = get_actor(actorID);
2738 actorPart = get_actor_part(actor, partID);
2739
2741 return ApiStatus_DONE2;
2742}
2743
2744API_CALLABLE(ModifyActorDecoration) {
2745 Bytecode* args = script->ptrReadPos;
2746 s32 actorID = evt_get_variable(script, *args++);
2747 s32 partID = evt_get_variable(script, *args++);
2748 s32 idx = evt_get_variable(script, *args++);
2751 Actor* actor;
2752
2753 if (actorID == ACTOR_SELF) {
2754 actorID = script->owner1.actorID;
2755 }
2756 actor = get_actor(actorID);
2757 actorPart = get_actor_part(actor, partID);
2758 decorationtable = actorPart->decorationTable;
2759
2760 decorationtable->decorData[idx].raw[0] = evt_get_variable(script, *args++);
2761 decorationtable->decorData[idx].raw[1] = evt_get_variable(script, *args++);
2762 decorationtable->decorData[idx].raw[2] = evt_get_variable(script, *args++);
2763 decorationtable->decorData[idx].raw[3] = evt_get_variable(script, *args++);
2764 return ApiStatus_DONE2;
2765}
2766
2767API_CALLABLE(UseIdleAnimation) {
2768 Actor* actor;
2769 Bytecode* args = script->ptrReadPos;
2770 s32 actorID = evt_get_variable(script, *args++);
2771 s32 useIdle = evt_get_variable(script, *args++);
2772
2773 if (actorID == ACTOR_SELF) {
2774 actorID = script->owner1.actorID;
2775 }
2776
2777 actor = get_actor(actorID);
2778 if (!useIdle) {
2782 } else {
2784 }
2785
2786 return ApiStatus_DONE2;
2787}
2788
2789API_CALLABLE(func_8026F1A0) {
2790 Bytecode* args = script->ptrReadPos;
2791 s32 actorID = evt_get_variable(script, *args++);
2793 Actor* actor;
2794
2795 if (actorID == ACTOR_SELF) {
2796 actorID = script->owner1.actorID;
2797 }
2798
2799 actor = get_actor(actorID);
2800
2801 if (temp_s0_3 == 0) {
2804 }
2805
2806 return ApiStatus_DONE2;
2807}
2808
2809API_CALLABLE(GetStatusFlags) {
2810 Bytecode* args = script->ptrReadPos;
2812 s32 actorID = evt_get_variable(script, *args++);
2813 s32 outVar = *args++;
2814 Actor* actor;
2816 s8 debuff;
2817 s8 staticStatus;
2818 s8 stoneStatus;
2819 s8 koStatus;
2821 ActorPart* partsTable;
2822 s32 flags;
2823
2824 if (actorID == ACTOR_SELF) {
2825 actorID = script->owner1.actorID;
2826 }
2827 actor = get_actor(actorID);
2828 debuff = actor->debuff;
2830 flags = 0;
2831
2832 if (debuff != 0) {
2833 if (debuff == STATUS_KEY_STOP) {
2835 }
2836 if (debuff == STATUS_KEY_FROZEN) {
2838 }
2839 if (debuff == STATUS_KEY_SLEEP) {
2841 }
2842 if (debuff == STATUS_KEY_PARALYZE) {
2844 }
2845 if (debuff == STATUS_KEY_DIZZY) {
2847 }
2848 if (debuff == STATUS_KEY_UNUSED) {
2850 }
2851 if (debuff == STATUS_KEY_POISON) {
2853 }
2854 if (debuff == STATUS_KEY_SHRINK) {
2856 }
2857 }
2858
2859 if (actor->staticStatus == STATUS_KEY_STATIC) {
2861 }
2862
2863 if (actor->stoneStatus == STATUS_KEY_STONE) {
2865 }
2866
2867 if (actor->koStatus == STATUS_KEY_KO) {
2869 }
2870
2873 }
2874
2875 for (partsTable = actor->partsTable; partsTable != NULL; partsTable = partsTable->nextPart) {
2876 if (partsTable->flags & ACTOR_PART_FLAG_TRANSPARENT) {
2878 }
2879 if (partsTable->eventFlags & ACTOR_EVENT_FLAG_ILLUSORY) {
2881 }
2882 }
2883
2884 switch (actorClass) {
2885 case ACTOR_CLASS_PLAYER:
2887 if (battleStatus->outtaSightActive) {
2889 }
2890 break;
2891 case ACTOR_CLASS_ENEMY:
2892 break;
2893 }
2894
2895 if (actor->isGlowing) {
2897 }
2898
2899 if (actor->attackBoost) {
2901 }
2902
2903 if (actor->defenseBoost) {
2905 }
2906
2907 if (actor->chillOutAmount) {
2909 }
2910
2913 }
2914
2916 return ApiStatus_DONE2;
2917}
2918
2919API_CALLABLE(RemovePlayerBuffs) {
2920 remove_player_buffs(*script->ptrReadPos);
2921 return ApiStatus_DONE2;
2922}
2923
2924API_CALLABLE(SetPartAlpha) {
2925 Actor* actor;
2926 Bytecode* args = script->ptrReadPos;
2927 s32 actorID = evt_get_variable(script, *args++);
2928 s32 partID = evt_get_variable(script, *args++);
2929 s32 opacity = evt_get_variable(script, *args++);
2930
2931 if (actorID == ACTOR_SELF) {
2932 actorID = script->owner1.actorID;
2933 }
2934
2935 actor = get_actor(actorID);
2936 get_actor_part(actor, partID)->opacity = opacity;
2937
2939 return ApiStatus_DONE2;
2940}
2941
2942API_CALLABLE(CreatePartShadow) {
2943 Bytecode* args = script->ptrReadPos;
2944 s32 actorID = evt_get_variable(script, *args++);
2945 s32 partID = evt_get_variable(script, *args++);
2946
2947 if (actorID == ACTOR_SELF) {
2948 actorID = script->owner1.actorID;
2949 }
2950
2951 create_part_shadow(actorID, partID);
2952 return ApiStatus_DONE2;
2953}
2954
2955API_CALLABLE(RemovePartShadow) {
2956 Bytecode* args = script->ptrReadPos;
2957 s32 actorID = evt_get_variable(script, *args++);
2958 s32 partID = evt_get_variable(script, *args++);
2959
2960 if (actorID == ACTOR_SELF) {
2961 actorID = script->owner1.actorID;
2962 }
2963
2964 remove_part_shadow(actorID, partID);
2965 return ApiStatus_DONE2;
2966}
2967
2968API_CALLABLE(SetEndBattleFadeOutRate) {
2970 return ApiStatus_DONE2;
2971}
2972
2973API_CALLABLE(SetBattleVar) {
2974 Bytecode* args = script->ptrReadPos;
2975 s32 varIdx = evt_get_variable(script, *args++);
2976
2977 gBattleStatus.varTable[varIdx] = evt_get_variable(script, *args++);
2978
2979 return ApiStatus_DONE2;
2980}
2981
2982API_CALLABLE(GetBattleVar) {
2983 Bytecode* args = script->ptrReadPos;
2984 s32 varIdx = evt_get_variable(script, *args++);
2985
2986 evt_set_variable(script, *args++, gBattleStatus.varTable[varIdx]);
2987 return ApiStatus_DONE2;
2988}
2989
2990API_CALLABLE(ResetAllActorSounds) {
2991 s32 actorID = evt_get_variable(script, *script->ptrReadPos);
2992
2993 if (actorID == ACTOR_SELF) {
2994 actorID = script->owner1.actorID;
2995 }
2996
2998 return ApiStatus_DONE2;
2999}
3000
3001API_CALLABLE(SetActorSounds) {
3002 Bytecode* args = script->ptrReadPos;
3003 s32 actorID = evt_get_variable(script, *args++);
3004 Actor* actor;
3005 s32 soundType;
3006 s32 sound1;
3007 s32 sound2;
3008
3009 if (actorID == ACTOR_SELF) {
3010 actorID = script->owner1.actorID;
3011 }
3012
3013 soundType = evt_get_variable(script, *args++);
3014 sound1 = evt_get_variable(script, *args++);
3015 sound2 = evt_get_variable(script, *args++);
3016 actor = get_actor(actorID);
3017
3018 switch (soundType) {
3019 case ACTOR_SOUND_WALK:
3020 actor->actorTypeData1[0] = sound1;
3021 actor->actorTypeData1[1] = sound2;
3022 break;
3023 case ACTOR_SOUND_FLY:
3024 actor->actorTypeData1[2] = sound1;
3025 actor->actorTypeData1[3] = sound2;
3026 break;
3027 case ACTOR_SOUND_JUMP:
3028 actor->actorTypeData1[4] = sound1;
3029 break;
3030 case ACTOR_SOUND_HURT:
3031 actor->actorTypeData1[5] = sound1;
3032 break;
3034 actor->actorTypeData1b[0] = sound1;
3035 break;
3037 actor->actorTypeData1b[1] = sound1;
3038 break;
3039 }
3040
3041 return ApiStatus_DONE2;
3042}
3043
3044API_CALLABLE(ResetActorSounds) {
3045 Bytecode* args = script->ptrReadPos;
3046 s32 actorID = evt_get_variable(script, *args++);
3047 Actor* actor;
3048 s32 soundType;
3049 s32 sound1;
3050 s32 sound2;
3051
3052 if (actorID == ACTOR_SELF) {
3053 actorID = script->owner1.actorID;
3054 }
3055
3056 soundType = evt_get_variable(script, *args++);
3057 sound1 = evt_get_variable(script, *args++);
3058 sound2 = evt_get_variable(script, *args++);
3059 actor = get_actor(actorID);
3060
3061 switch (soundType) {
3062 case ACTOR_SOUND_WALK:
3063 actor->actorTypeData1[0] = bActorSoundTable[actor->actorType].walk[0];
3064 actor->actorTypeData1[1] = bActorSoundTable[actor->actorType].walk[1];
3065 break;
3066 case ACTOR_SOUND_FLY:
3067 actor->actorTypeData1[2] = bActorSoundTable[actor->actorType].fly[0];
3068 actor->actorTypeData1[3] = bActorSoundTable[actor->actorType].fly[1];
3069 break;
3070 case ACTOR_SOUND_JUMP:
3071 actor->actorTypeData1[4] = bActorSoundTable[actor->actorType].jump;
3072 break;
3073 case ACTOR_SOUND_HURT:
3074 actor->actorTypeData1[5] = bActorSoundTable[actor->actorType].hurt;
3075 break;
3077 actor->actorTypeData1b[0] = bActorSoundTable[actor->actorType].delay[0];
3078 break;
3080 actor->actorTypeData1b[1] = bActorSoundTable[actor->actorType].delay[1];
3081 break;
3082 }
3083
3084 return ApiStatus_DONE2;
3085}
3086
3087API_CALLABLE(SetPartSounds) {
3088 Bytecode* args = script->ptrReadPos;
3089 s32 actorID = evt_get_variable(script, *args++);
3091 s32 partID;
3092 s32 soundType;
3093 s32 sound1;
3094 s32 sound2;
3095
3096 if (actorID == ACTOR_SELF) {
3097 actorID = script->owner1.actorID;
3098 }
3099
3100 partID = evt_get_variable(script, *args++);
3101 soundType = evt_get_variable(script, *args++);
3102 sound1 = evt_get_variable(script, *args++);
3103 sound2 = evt_get_variable(script, *args++);
3104 actorPart = get_actor_part(get_actor(actorID), partID);
3105
3106 switch (soundType) {
3107 case ACTOR_SOUND_WALK:
3108 actorPart->partTypeData[0] = sound1;
3109 actorPart->partTypeData[1] = sound2;
3110 break;
3111 case ACTOR_SOUND_FLY:
3112 actorPart->partTypeData[2] = sound1;
3113 actorPart->partTypeData[3] = sound2;
3114 break;
3115 case ACTOR_SOUND_JUMP:
3116 actorPart->partTypeData[4] = sound1;
3117 break;
3118 case ACTOR_SOUND_HURT:
3119 actorPart->partTypeData[5] = sound1;
3120 break;
3122 actorPart->actorTypeData2b[0] = sound1;
3123 break;
3125 actorPart->actorTypeData2b[1] = sound1;
3126 break;
3127 }
3128
3129 return ApiStatus_DONE2;
3130}
3131
3132API_CALLABLE(SetActorType) {
3133 Bytecode* args = script->ptrReadPos;
3134 s32 actorID = evt_get_variable(script, *args++);
3135 Actor* enemy;
3136 s32 actorType;
3137
3138 if (actorID == ACTOR_SELF) {
3139 actorID = script->owner1.actorID;
3140 }
3141
3142 actorType = evt_get_variable(script, *args++);
3143 enemy = get_actor(actorID);
3144
3145 if (is_actor_health_bar_visible(enemy)) {
3146 load_tattle_flags(actorType);
3147 }
3148
3149 enemy->actorType = actorType;
3150 return ApiStatus_DONE2;
3151}
3152
3153API_CALLABLE(ShowShockEffect) {
3154 s32 actorID = evt_get_variable(script, *script->ptrReadPos);
3155
3156 if (actorID == ACTOR_SELF) {
3157 actorID = script->owner1.actorID;
3158 }
3159
3160 apply_shock_effect(get_actor(actorID));
3161 return ApiStatus_DONE2;
3162}
3163
3164API_CALLABLE(GetActorAttackBoost) {
3165 Bytecode* args = script->ptrReadPos;
3166 s32 enemyID = evt_get_variable(script, *args++);
3167 Bytecode attackBoost;
3168
3169 if (enemyID == ACTOR_SELF) {
3170 enemyID = script->owner1.enemyID;
3171 }
3172
3173 attackBoost = *args++;
3174 evt_set_variable(script, attackBoost, get_actor(enemyID)->attackBoost);
3175 return ApiStatus_DONE2;
3176}
3177
3178API_CALLABLE(GetActorDefenseBoost) {
3179 Bytecode* args = script->ptrReadPos;
3180 s32 enemyID = evt_get_variable(script, *args++);
3181 Bytecode defenseBoost;
3182
3183 if (enemyID == ACTOR_SELF) {
3184 enemyID = script->owner1.enemyID;
3185 }
3186
3187 defenseBoost = *args++;
3188 evt_set_variable(script, defenseBoost, get_actor(enemyID)->defenseBoost);
3189 return ApiStatus_DONE2;
3190}
3191
3192API_CALLABLE(BoostAttack) {
3193 Bytecode* args = script->ptrReadPos;
3194 s32 actorID;
3195 Actor* actor;
3196 s32 flags;
3197 s32 flags2;
3198 f32 x1, y1, z1;
3199 f32 x2, y2, z2;
3200 s32 attackBoost;
3201
3202 if (isInitialCall) {
3203 script->functionTemp[0] = 0;
3204 }
3205
3206 if (script->functionTemp[0] == 0) {
3207 actorID = evt_get_variable(script, *args++);
3208 if (actorID == ACTOR_SELF) {
3209 actorID = script->owner1.actorID;
3210 }
3211 attackBoost = evt_get_variable(script, *args++);
3212 actor = get_actor(actorID);
3213 script->functionTempPtr[1] = actor;
3214 script->functionTemp[2] = attackBoost;
3215
3219 btl_cam_set_zoom(250);
3220 btl_cam_move(10);
3222 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3224 }
3226 script->functionTemp[3] = 5;
3227 script->functionTemp[0] = 1;
3228 }
3229 get_actor(script->owner1.actorID);
3230 actor = script->functionTempPtr[1];
3231 attackBoost = script->functionTemp[2];
3232
3233 flags = actor->flags;
3234 x1 = actor->curPos.x + actor->headOffset.x;
3236 y1 = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3237 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3238 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3239 } else {
3240 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3241 }
3242 z1 = actor->curPos.z + actor->headOffset.z + 10.0f;
3243
3244 flags2 = actor->flags;
3245 x2 = actor->curPos.x + actor->headOffset.x + actor->size.x / 2;
3246 if (flags2 & ACTOR_FLAG_UPSIDE_DOWN) {
3247 y2 = actor->curPos.y + actor->headOffset.y - actor->size.y;
3248 } else if (!(flags2 & ACTOR_FLAG_HALF_HEIGHT)) {
3249 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3250 } else {
3251 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y * 2;
3252 }
3253 z2 = actor->curPos.z + actor->headOffset.z + 10.0f;
3254
3255 switch (script->functionTemp[0]) {
3256 case 1:
3257 if (script->functionTemp[3] == 0) {
3258 fx_radial_shimmer(2, x1, y1, z1, 1.0f, 30);
3260 script->functionTemp[3] = 30;
3261 script->functionTemp[0] = 2;
3262 } else {
3263 script->functionTemp[3]--;
3264 break;
3265 }
3266 break;
3267 case 2:
3268 if (script->functionTemp[3] == 0) {
3271 btl_cam_move(15);
3272 actor->isGlowing = TRUE;
3273 actor->attackBoost += attackBoost;
3274 if (actor->attackBoost > 20) {
3275 actor->attackBoost = 20;
3276 }
3277 fx_stat_change(attackBoost - 1, x2, y2, z2, 1.0f, 60);
3278 script->functionTemp[3] = 15;
3279 script->functionTemp[0] = 3;
3280 } else {
3281 script->functionTemp[3]--;
3282 break;
3283 }
3284 break;
3285 case 3:
3286 if (script->functionTemp[3] == 0) {
3288 script->functionTemp[0] = 4;
3289 } else {
3290 script->functionTemp[3]--;
3291 break;
3292 }
3293 break;
3294 case 4:
3295 if (btl_is_popup_displayed() == 0) {
3297 script->functionTemp[3] = 10;
3298 script->functionTemp[0] = 5;
3299 }
3300 break;
3301 case 5:
3302 if (script->functionTemp[3] != 0) {
3303 script->functionTemp[3]--;
3304 break;
3305 }
3306 if ((actor->handleEventScript != NULL) && does_script_exist(actor->handleEventScriptID)) {
3307 break;
3308 }
3310 return ApiStatus_DONE2;
3311 }
3312 return ApiStatus_BLOCK;
3313}
3314
3315API_CALLABLE(BoostDefense) {
3316 Bytecode* args = script->ptrReadPos;
3317 s32 actorID;
3318 Actor* actor;
3319 f32 x1, y1, z1;
3320 f32 x2, y2, z2;
3321 s32 defenseBoost;
3322 s32 flags;
3323 s32 flags2;
3324
3325 if (isInitialCall) {
3326 script->functionTemp[0] = 0;
3327 }
3328
3329 if (script->functionTemp[0] == 0) {
3330 actorID = evt_get_variable(script, *args++);
3331 if (actorID == ACTOR_SELF) {
3332 actorID = script->owner1.actorID;
3333 }
3334 defenseBoost = evt_get_variable(script, *args++);
3335 actor = get_actor(actorID);
3336 script->functionTempPtr[1] = actor;
3337 script->functionTemp[2] = defenseBoost;
3338
3342 btl_cam_set_zoom(250);
3343 btl_cam_move(10);
3345 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3347 }
3348
3350 script->functionTemp[3] = 5;
3351 script->functionTemp[0] = 1;
3352 }
3353 get_actor(script->owner1.actorID);
3354 actor = script->functionTempPtr[1];
3355 defenseBoost = script->functionTemp[2];
3356
3357 flags = actor->flags;
3358 x1 = actor->curPos.x + actor->headOffset.x;
3360 y1 = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3361 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3362 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3363 } else {
3364 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3365 }
3366 z1 = actor->curPos.z + actor->headOffset.z + 10.0f;
3367
3368 flags2 = actor->flags;
3369 x2 = actor->curPos.x + actor->headOffset.x + actor->size.x / 2;
3370 if (flags2 & ACTOR_FLAG_UPSIDE_DOWN) {
3371 y2 = actor->curPos.y + actor->headOffset.y - actor->size.y;
3372 } else if (!(flags2 & ACTOR_FLAG_HALF_HEIGHT)) {
3373 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3374 } else {
3375 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y * 2;
3376 }
3377 z2 = actor->curPos.z + actor->headOffset.z + 10.0f;
3378
3379 switch (script->functionTemp[0]) {
3380 case 1:
3381 if (script->functionTemp[3] == 0) {
3382 fx_radial_shimmer(2, x1, y1, z1, 1.0f, 30);
3384 script->functionTemp[3] = 30;
3385 script->functionTemp[0] = 2;
3386 } else {
3387 script->functionTemp[3]--;
3388 break;
3389 }
3390 break;
3391 case 2:
3392 if (script->functionTemp[3] == 0) {
3395 btl_cam_move(15);
3396 actor->isGlowing = TRUE;
3397 actor->defenseBoost += defenseBoost;
3398 if (actor->defenseBoost > 20) {
3399 actor->defenseBoost = 20;
3400 }
3401 fx_stat_change(defenseBoost + 5, x2, y2, z2, 1.0f, 60);
3402 script->functionTemp[3] = 15;
3403 script->functionTemp[0] = 3;
3404 } else {
3405 script->functionTemp[3]--;
3406 break;
3407 }
3408 break;
3409 case 3:
3410 if (script->functionTemp[3] == 0) {
3412 script->functionTemp[0] = 4;
3413 } else {
3414 script->functionTemp[3]--;
3415 break;
3416 }
3417 break;
3418 case 4:
3419 if (btl_is_popup_displayed() == 0) {
3421 script->functionTemp[3] = 10;
3422 script->functionTemp[0] = 5;
3423 }
3424 break;
3425 case 5:
3426 if (script->functionTemp[3] != 0) {
3427 script->functionTemp[3]--;
3428 break;
3429 }
3430 if ((actor->handleEventScript != NULL) && does_script_exist(actor->handleEventScriptID)) {
3431 break;
3432 }
3434 return ApiStatus_DONE2;
3435 }
3436 return ApiStatus_BLOCK;
3437}
3438
3439API_CALLABLE(VanishActor) {
3440 Bytecode* args = script->ptrReadPos;
3441 s32 actorID;
3442 Actor* actor;
3443 f32 x, y, z;
3444 s32 vanished;
3445 s32 flags;
3446
3447 if (isInitialCall) {
3448 script->functionTemp[0] = 0;
3449 }
3450
3451 if (script->functionTemp[0] == 0) {
3452 actorID = evt_get_variable(script, *args++);
3453 if (actorID == ACTOR_SELF) {
3454 actorID = script->owner1.actorID;
3455 }
3456 vanished = evt_get_variable(script, *args++);
3457 actor = get_actor(actorID);
3458 script->functionTemp[1] = (s32) actor;
3459 script->functionTemp[2] = vanished;
3460
3464 btl_cam_set_zoom(250);
3465 btl_cam_move(10);
3467 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3469 }
3470
3472 script->functionTemp[3] = 5;
3473 script->functionTemp[0] = 1;
3474 }
3475 get_actor(script->owner1.actorID);
3476 actor = script->functionTempPtr[1];
3477 vanished = script->functionTemp[2];
3478
3479 flags = actor->flags;
3480 x = actor->curPos.x + actor->headOffset.x;
3482 y = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3483 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3484 y = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3485 } else {
3486 y = actor->curPos.y + actor->headOffset.y + actor->size.y;
3487 }
3488 z = actor->curPos.z + actor->headOffset.z + 10.0f;
3489
3490 switch (script->functionTemp[0]) {
3491 case 1:
3492 if (script->functionTemp[3] == 0) {
3493 fx_radial_shimmer(3, x, y, z, 1.0f, 30);
3495 script->functionTemp[3] = 30;
3496 script->functionTemp[0] = 2;
3497 } else {
3498 script->functionTemp[3]--;
3499 break;
3500 }
3501 break;
3502 case 2:
3503 if (script->functionTemp[3] == 0) {
3506 btl_cam_move(15);
3508 script->functionTemp[3] = 15;
3509 script->functionTemp[0] = 3;
3510 } else {
3511 script->functionTemp[3]--;
3512 break;
3513 }
3514 break;
3515 case 3:
3516 if (script->functionTemp[3] == 0) {
3518 script->functionTemp[0] = 4;
3519 } else {
3520 script->functionTemp[3]--;
3521 break;
3522 }
3523 break;
3524 case 4:
3525 if (btl_is_popup_displayed() == 0) {
3527 script->functionTemp[3] = 10;
3528 script->functionTemp[0] = 5;
3529 }
3530 break;
3531 case 5:
3532 if (script->functionTemp[3] != 0) {
3533 script->functionTemp[3]--;
3534 break;
3535 }
3536 if ((actor->handleEventScript != NULL) && does_script_exist(actor->handleEventScriptID)) {
3537 break;
3538 }
3540 return ApiStatus_DONE2;
3541 }
3542 return ApiStatus_BLOCK;
3543}
3544
3545API_CALLABLE(ElectrifyActor) {
3546 Bytecode* args = script->ptrReadPos;
3547 s32 actorID;
3548 Actor* actor;
3549 f32 x, y, z;
3551 s32 flags;
3552
3553 if (isInitialCall) {
3554 script->functionTemp[0] = 0;
3555 }
3556
3557 if (script->functionTemp[0] == 0) {
3558 actorID = evt_get_variable(script, *args++);
3559 if (actorID == ACTOR_SELF) {
3560 actorID = script->owner1.actorID;
3561 }
3563 actor = get_actor(actorID);
3564 script->functionTempPtr[1] = actor;
3565 script->functionTemp[2] = electrified;
3566
3570 btl_cam_set_zoom(250);
3571 btl_cam_move(10);
3573 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
3575 }
3576
3578 script->functionTemp[3] = 5;
3579 script->functionTemp[0] = 1;
3580 }
3581 get_actor(script->owner1.actorID);
3582 actor = script->functionTempPtr[1];
3583 electrified = script->functionTemp[2];
3584
3585 flags = actor->flags;
3586 x = actor->curPos.x + actor->headOffset.x;
3588 y = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3589 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3590 y = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3591 } else {
3592 y = actor->curPos.y + actor->headOffset.y + actor->size.y;
3593 }
3594 z = actor->curPos.z + actor->headOffset.z + 10.0f;
3595
3596 switch (script->functionTemp[0]) {
3597 case 1:
3598 if (script->functionTemp[3] == 0) {
3599 fx_snaking_static(8, x, y, z, 1.0f, 30);
3601 script->functionTemp[3] = 30;
3602 script->functionTemp[0] = 2;
3603 } else {
3604 script->functionTemp[3]--;
3605 break;
3606 }
3607 break;
3608 case 2:
3609 if (script->functionTemp[3] == 0) {
3612 btl_cam_move(15);
3614 script->functionTemp[3] = 15;
3615 script->functionTemp[0] = 3;
3616 } else {
3617 script->functionTemp[3]--;
3618 break;
3619 }
3620 break;
3621 case 3:
3622 if (script->functionTemp[3] == 0) {
3624 script->functionTemp[0] = 4;
3625 } else {
3626 script->functionTemp[3]--;
3627 break;
3628 }
3629 break;
3630 case 4:
3631 if (btl_is_popup_displayed() == 0) {
3633 script->functionTemp[3] = 10;
3634 script->functionTemp[0] = 5;
3635 }
3636 break;
3637 case 5:
3638 if (script->functionTemp[3] != 0) {
3639 script->functionTemp[3]--;
3640 break;
3641 }
3642 if ((actor->handleEventScript != NULL) && does_script_exist(actor->handleEventScriptID)) {
3643 break;
3644 }
3646 return ApiStatus_DONE2;
3647 }
3648 return ApiStatus_BLOCK;
3649}
3650
3651API_CALLABLE(HealActor) {
3652 Bytecode* args = script->ptrReadPos;
3653 s32 actorID;
3654 Actor* actor;
3655 f32 x1, y1, z1;
3656 f32 x2, y2, z2;
3657 s32 hpBoost;
3658 s32 flags;
3659 s32 flags2;
3660 s32 message;
3661
3662 if (isInitialCall) {
3663 script->functionTemp[0] = 0;
3664 }
3665
3666 if (script->functionTemp[0] == 0) {
3667 actorID = evt_get_variable(script, *args++);
3668 if (actorID == ACTOR_SELF) {
3669 actorID = script->owner1.enemyID;
3670 }
3671 hpBoost = evt_get_variable(script, *args++);
3673 actor = get_actor(actorID);
3674 script->functionTempPtr[1] = actor;
3675 script->functionTemp[2] = hpBoost;
3676
3680 btl_cam_move(10);
3682
3684 script->functionTemp[3] = 5;
3685 script->functionTemp[0] = 1;
3686 }
3687 get_actor(script->owner1.enemyID);
3688 actor = script->functionTempPtr[1];
3689 hpBoost = script->functionTemp[2];
3690
3691 flags = actor->flags;
3692 x1 = actor->curPos.x + actor->headOffset.x;
3694 y1 = actor->curPos.y + actor->headOffset.y - actor->size.y / 2;
3695 } else if (!(flags & ACTOR_FLAG_HALF_HEIGHT)) {
3696 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y / 2;
3697 } else {
3698 y1 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3699 }
3700 z1 = actor->curPos.z + actor->headOffset.z + 10.0f;
3701
3702 flags2 = actor->flags;
3703 x2 = actor->curPos.x + actor->headOffset.x + actor->size.x / 2;
3704 if (flags2 & ACTOR_FLAG_UPSIDE_DOWN) {
3705 y2 = actor->curPos.y + actor->headOffset.y - actor->size.y;
3706 } else if (!(flags2 & ACTOR_FLAG_HALF_HEIGHT)) {
3707 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y;
3708 } else {
3709 y2 = actor->curPos.y + actor->headOffset.y + actor->size.y * 2;
3710 }
3711 z2 = actor->curPos.z + actor->headOffset.z + 10.0f;
3712
3713 switch (script->functionTemp[0]) {
3714 case 1:
3715 if (script->functionTemp[3] == 0) {
3717 fx_recover(0, x2, y2, z2, hpBoost);
3719 script->functionTemp[3] = 30;
3720 script->functionTemp[0] = 2;
3721 } else {
3722 script->functionTemp[3]--;
3723 break;
3724 }
3725 break;
3726 case 2:
3727 if (script->functionTemp[3] == 0) {
3729 btl_cam_move(15);
3730 actor->curHP += hpBoost;
3731 if (actor->maxHP < actor->curHP) {
3732 actor->curHP = actor->maxHP;
3733 }
3735 script->functionTemp[3] = 15;
3736 script->functionTemp[0] = 3;
3737 } else {
3738 script->functionTemp[3]--;
3739 break;
3740 }
3741 break;
3742 case 3:
3743 if (script->functionTemp[3] == 0) {
3744 message = BTL_MSG_HEAL_ALL;
3745 if (!IsGroupHeal) {
3746 message = BTL_MSG_HEAL_ONE;
3747 }
3749 script->functionTemp[0] = 4;
3750 } else {
3751 script->functionTemp[3]--;
3752 break;
3753 }
3754 break;
3755 case 4:
3756 if (btl_is_popup_displayed() == 0) {
3757 script->functionTemp[3] = 10;
3758 script->functionTemp[0] = 5;
3759 }
3760 break;
3761 case 5:
3762 if (script->functionTemp[3] != 0) {
3763 script->functionTemp[3]--;
3764 break;
3765 }
3766 if ((actor->handleEventScript != NULL) && does_script_exist(actor->handleEventScriptID)) {
3767 break;
3768 }
3770 return ApiStatus_DONE2;
3771 }
3772 return ApiStatus_BLOCK;
3773}
3774
3775API_CALLABLE(WaitForBuffDone) {
3776 if (!ApplyingBuff) {
3777 return ApiStatus_DONE2;
3778 } else {
3779 return ApiStatus_BLOCK;
3780 }
3781}
3782
3783API_CALLABLE(CopyBuffs) {
3784 Bytecode* args = script->ptrReadPos;
3785 s32 actorID = evt_get_variable(script, *args++);
3787 Actor* actorTo;
3788
3789 if (actorID == ACTOR_SELF) {
3790 actorID = script->owner1.enemyID;
3791 }
3792 actorFrom = get_actor(actorID);
3793
3794 actorID = evt_get_variable(script, *args++);
3795 if (actorID == ACTOR_SELF) {
3796 actorID = script->owner1.enemyID;
3797 }
3798 actorTo = get_actor(actorID);
3799
3800 actorTo->isGlowing = actorFrom->isGlowing;
3801 actorTo->attackBoost = actorFrom->attackBoost;
3802 actorTo->defenseBoost = actorFrom->defenseBoost;
3803 actorTo->chillOutAmount = actorFrom->chillOutAmount;
3804 actorTo->chillOutTurns = actorFrom->chillOutTurns;
3805
3806 return ApiStatus_DONE2;
3807}
Actor * create_actor(Formation formation)
Definition 190B20.c:1408
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:1725
s32 player_team_is_ability_active(Actor *actor, s32 ability)
Definition 190B20.c:2497
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:2670
void remove_player_buffs(s32)
Definition 190B20.c:2538
void btl_cam_use_preset_immediately(s32)
Definition camera.c:1912
void hide_actor_health_bar(Actor *)
Definition 190B20.c:2242
void btl_cam_set_zoom(s16)
Definition camera.c:1984
f32 evt_set_float_variable(Evt *script, Bytecode var, f32 value)
Definition evt.c:2012
void dispatch_event_actor(Actor *, s32)
Definition 1A5830.c:102
void clear_actor_static_pal_adjustments(Actor *)
Definition 190B20.c:2356
void add_part_decoration(ActorPart *part, s32 decorationIndex, s32 decorationType)
Definition 190B20.c:2459
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:1882
void load_tattle_flags(s32)
Definition 181810.c:571
void set_part_glow_pal(ActorPart *, s32)
Definition 190B20.c:2374
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
Definition 43F0.c:668
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:1816
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:2525
s32 does_script_exist(s32 id)
f32 evt_get_float_variable(Evt *script, Bytecode var)
Definition evt.c:1965
void set_part_pal_adjustment(ActorPart *, s32)
Definition 190B20.c:2327
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:2482
void create_part_shadow(s32 actorID, s32 partID)
Definition 190B20.c:2517
#define ARRAY_COUNT(arr)
Definition macros.h:40
#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