42 {
46 f32 vt7 = (
f32)enemy->varTable[7] / 100.0;
47 f32 vt3 = (
f32)enemy->varTable[3] / 100.0;
48 f32 vt4 = (
f32)enemy->varTable[4] / 100.0;
49 f32 vt1 = (
f32)enemy->varTable[1] / 100.0;
52
53 enemy->varTable[4] = npc->pos.y * 100.0;
54
56
57 if ((enemy->varTable[0] & 0x11) == 1) {
60 enemy->varTable[0] |= 0x10;
61 }
62 } else {
63 posX = npc->pos.x;
64 posY = npc->pos.y;
65 posZ = npc->pos.z;
69 enemy->varTable[0] |= 0x10;
70 }
71 }
72 }
73
74 if ((enemy->varTable[0] & 0x11) == 0x11) {
77
82 } else {
83 posX = npc->pos.x;
85 posZ = npc->pos.z;
88
93 }
94
97 enemy->varTable[0] &= ~0x10;
98 }
99 } else {
100 if (enemy->varTable[1] > 0) {
102 s32 hit;
103
106 } else {
107 posX = npc->pos.x;
108 posY = npc->pos.y;
109 posZ = npc->pos.z;
112 }
113
114 if (hit) {
116 } else {
118 }
119
120 enemy->varTable[2] =
clamp_angle(enemy->varTable[2] + 10);
121 }
122 }
123
124 if (enemy->varTable[9] <= 0) {
126 if (
script->functionTemp[1] <= 0) {
130 {
133 npc->moveToPos.y = npc->pos.y;
135
138 } else {
140 }
141 return;
142 }
143 }
144 script->functionTemp[1]--;
145 }
146 } else {
147 enemy->varTable[9]--;
148 }
149
151 enemy->territory->wander.centerPos.x,
152 enemy->territory->wander.centerPos.z,
153 npc->pos.x, npc->pos.z,
154 enemy->territory->wander.wanderSize.x, enemy->territory->wander.wanderSize.z)) {
155 posW =
dist2D(enemy->territory->wander.centerPos.x, enemy->territory->wander.centerPos.z, npc->pos.x, npc->pos.z);
156 if (npc->moveSpeed <
posW) {
157 npc->yaw =
atan2(npc->pos.x, npc->pos.z, enemy->territory->wander.centerPos.x, enemy->territory->wander.centerPos.z);
159 }
160 }
161
162 if (enemy->territory->wander.wanderSize.x | enemy->territory->wander.wanderSize.z |
cond) {
163 if (npc->turnAroundYawAdjustment != 0) {
164 return;
165 }
167 }
168
169 enemy->varTable[4] = npc->pos.y * 100.0;
171 if ((npc->duration <= 0) || (--npc->duration <= 0)) {
176 }
177 }
178 }
179}
#define npc_raycast_down_sides
@ AI_ACTION_JUMP_WHEN_SEE_PLAYER
void ai_enemy_play_sound(Npc *npc, s32 arg1, s32 arg2)
f32 dist2D(f32 ax, f32 ay, f32 bx, f32 by)
b32 basic_ai_check_player_dist(EnemyDetectVolume *arg0, Enemy *arg1, f32 arg2, f32 arg3, s8 arg4)
void npc_move_heading(Npc *npc, f32 speed, f32 yaw)
PlayerStatus * gPlayerStatusPtr