4#define FIRST_BULLET_NPCID 50
5#define LAST_BULLET_NPCID 59
21#define AI_VAR_BULLET_BLASTER varTable[1]
22#define AI_VAR_BULLET_RANGE varTable[2]
24#define AI_VAR_BLASTER_BULLET varTable[0]
25#define AI_VAR_BLASTER_RANGE varTable[1]
27static s32 N(BillBlasterAI_GetIdleBulletNpcID)(
void) {
56 enemy->AI_VAR_BULLET_BLASTER = -1;
66 switch (
script->AI_TEMP_STATE) {
93 if (npc->
yaw < 180.0f) {
114 if (npc->
yaw < 180.0f) {
115 if (enemy->AI_VAR_BULLET_RANGE <=
nextX) {
183 switch (
script->AI_TEMP_STATE) {
191 bulletNpcID = N(BillBlasterAI_GetIdleBulletNpcID)();
197 bulletEnemy->AI_VAR_BULLET_RANGE = enemy->AI_VAR_BLASTER_RANGE;
BSS s32 PopupMenu_SelectedIndex
@ AI_STATE_BLASTER_COOLDOWN
@ AI_STATE_BLASTER_PREPARE
#define AI_VAR_BULLET_RANGE
#define LAST_BULLET_NPCID
#define FIRST_BULLET_NPCID
@ ENEMY_ANIM_INDEX_MELEE_PRE
@ AI_FLAG_SKIP_EMOTE_AFTER_FLEE
@ ENEMY_FLAG_ACTIVE_WHILE_OFFSCREEN
@ PROJECTILE_HITBOX_STATE_ACTIVE
@ PROJECTILE_HITBOX_STATE_NONE
@ PROJECTILE_HITBOX_STATE_INIT
@ PROJECTILE_HITBOX_STATE_DONE
@ PROJECTILE_HITBOX_STATE_PRE
@ SOUND_SEQ_BULLET_BILL_EXPLODE
@ NPC_FLAG_IGNORE_CAMERA_FOR_YAW
@ NPC_FLAG_DONT_UPDATE_SHADOW_Y
s32 evt_get_variable(Evt *script, Bytecode var)
void ai_enemy_play_sound(Npc *npc, s32 arg1, s32 arg2)
void add_vec2D_polar(f32 *x, f32 *y, f32 r, f32 theta)
Enemy * get_enemy(s32 npcID)
Looks for an enemy matching the specified npcID.
void enable_npc_shadow(Npc *npc)
void disable_npc_shadow(Npc *npc)
Npc * get_npc_unsafe(s32 npcID)
void npc_move_heading(Npc *npc, f32 speed, f32 yaw)
#define NPC_DISPOSE_POS_Z
#define NPC_DISPOSE_POS_X
#define NPC_DISPOSE_POS_Y
PlayerStatus * gPlayerStatusPtr