3#include "sprite/npc/Lakitu.h"
6#ifndef AI_LAKITU_FIRST_SPINY_ID
7#error AI_LAKITU_FIRST_SPINY_ID must be defined for LakituAI
8#define AI_LAKITU_FIRST_SPINY_ID 0
10#ifndef AI_LAKITU_LAST_SPINY_ID
11#error AI_LAKITU_LAST_SPINY_ID must be defined for LakituAI
12#define AI_LAKITU_LAST_SPINY_ID 0
22 if (
get_enemy(npcID)->varTable[10] == 0) {
38 f32 var1 = enemy->varTable[4];
39 f32 var2 = enemy->varTable[3];
47 var3 = enemy->varTable[1];
57 enemy->varTable[2] =
clamp_angle(enemy->varTable[2] + 12);
60 if (
script->functionTemp[1] <= 0) {
71 script->functionTemp[0] = 12;
87 if (enemy->varTable[0] & 1) {
97 }
else if (
w < -2.0) {
102 enemy->varTable[4] = (
temp_f22 * 100.0);
108 script->functionTemp[0] = 2;
111 script->functionTemp[0] = 0;
121 f32 var1 = enemy->varTable[3];
130 var2 = enemy->varTable[1];
140 enemy->varTable[2] =
clamp_angle(enemy->varTable[2] + 12);
149 script->functionTemp[1]--;
150 if (
script->functionTemp[1] > 0) {
190 switch (
script->AI_TEMP_STATE) {
208 if (enemy->varTable[4] >= 0) {
214 script->AI_TEMP_STATE = 30;
218 switch (
script->AI_TEMP_STATE) {
230 switch (
script->AI_TEMP_STATE) {
BSS s32 PopupMenu_SelectedIndex
void N FlyingAI_ChaseInit(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
void N FlyingAI_LoiterInit(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
void N FlyingAI_Init(Npc *npc, Enemy *enemy, Evt *script, MobileAISettings *aiSettings)
void N FlyingAI_WanderInit(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
void N FlyingAI_Chase(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
void N FlyingAI_LosePlayer(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
#define AI_LAKITU_LAST_SPINY_ID
void N LakituAI_Loiter(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
#define AI_LAKITU_FIRST_SPINY_ID
void N LakituAI_Wander(Evt *script, MobileAISettings *aiSettings, EnemyDetectVolume *territory)
s32 N LakituAI_GetAvailableSpiny(void)
#define npc_raycast_down_sides
@ AI_STATE_PROJECTILE_HITBOX_30
@ AI_STATE_PROJECTILE_HITBOX_32
@ AI_STATE_PROJECTILE_HITBOX_31
@ AI_STATE_PROJECTILE_HITBOX_33
s32 evt_get_variable(Evt *script, Bytecode var)
f32 update_lerp(s32 easing, f32 start, f32 end, s32 elapsed, s32 duration)
b32 is_point_outside_territory(s32 shape, f32 pointX, f32 pointY, f32 centerX, f32 centerY, f32 sizeX, f32 sizeZ)
void ai_enemy_play_sound(Npc *npc, s32 arg1, s32 arg2)
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
enum TerritoryShape shape
enum TerritoryShape detectShape
b32 basic_ai_check_player_dist(EnemyDetectVolume *arg0, Enemy *arg1, f32 arg2, f32 arg3, s8 arg4)
Enemy * get_enemy(s32 npcID)
Looks for an enemy matching the specified npcID.
Npc * get_npc_unsafe(s32 npcID)
enum TerritoryShape wanderShape
void npc_move_heading(Npc *npc, f32 speed, f32 yaw)
s32 skipPlayerDetectChance
EnemyTerritoryWander wander
EnemyTerritory * territory
s16 turnAroundYawAdjustment
PlayerStatus * gPlayerStatusPtr