#ifndef BANJO_KAZOOIE_CORE1_ML_H
#define BANJO_KAZOOIE_CORE1_ML_H

f32 ml_acosf_deg(f32 x);
void ml_vec3f_sub_and_rotate(f32 vec1[3], f32 rotation[3], f32 vec2[3], f32 dst[3]);
f32 ml_vec3f_cos_between(f32 vec1[3], f32 vec2[3]);
void ml_vec3f_cross_product(f32 dst[3], f32 vec1[3], f32 vec2[3]);
void ml_vec3f_interpolate_fast(f32 dst[3], f32 start[3], f32 end[3], f32 t);
f32 ml_vec3f_dot_product(f32 vec1[3], f32 vec2[3]);
f32 ml_vec3f_distance(f32 vec1[3], f32 vec2[3]);
f32 ml_func_802560D0(f32 arg0[3], f32 arg1[3], f32 arg2[3]);
f32 ml_distanceSquared_vec3f(f32 vec1[3], f32 vec2[3]);
void func_802562DC(f32 vec1[3], f32 vec2[3], f32 vec3[3]);
f32 ml_vec3f_length_unused(f32 vec[3]);
void ml_vec3f_normalize_copy(f32 arg0[3], f32 arg1[3]);
void ml_vec3f_normalize(f32 vec[3]);
void ml_vec2f_normalize(f32 vec[2]);
void ml_3f_normalize(f32 *x, f32 *y, f32 *z);
void ml_vec3f_set_length_copy(f32 dst[3], f32 src[3], f32 len);
void func_80256664(f32 ptr[3]);
void func_80256740(f32 vec[3]);
void ml_vec3f_pitch_rotate_copy(f32 dst[3], f32 src[3], f32 pitch);
void ml_vec3f_yaw_rotate_copy(f32 dst[3], f32 src[3], f32 yaw);
void ml_vec3f_roll_rotate_copy(f32 dst[3], f32 src[3], f32 roll);
void ml_vec3f_set_length(f32 vec[3], f32 length);
f32 func_80256AB4(f32 x1, f32 y1, f32 x2, f32 y2);
f32 func_80256B54(f32 vec1[3], f32 vec2[3]);
f32 func_80256C60(f32 vec[3], s32 val);
void func_80256D0C(f32 val1, f32 val2, f32 x, f32 y, f32 z, f32 *dstX, f32 *dstY, f32 *dstZ);
void func_80256E24(f32 dst[3], f32 theta, f32 phi, f32 x, f32 y, f32 z);
void func_80256F44(f32 vec1[3], f32 vec2[3], f32 vec3[3], f32 dst[3]);
f32 ml_acosf(f32 x);
f32 func_8025715C(f32 val1, f32 val2);
f32 func_80257204(f32 val1, f32 val2, f32 val3, f32 val4);
f32 func_80257248(f32 vec1[3], f32 vec2[3]);
void func_8025727C(f32 x1, f32 y1, f32 z1, f32 x2, f32 y2, f32 z2, f32 *o1, f32 *o2);
void ml_init(void);
void ml_free(void);
f32 func_802575BC(f32 val);
f32 func_80257618(f32 val);
f32 func_80257658(f32 val);
f32 func_80257680(f32 val1, f32 val2, f32 val3);
void ml_defrag(void);
bool ml_timer_update(f32 *timer, f32 delta);
void func_8025778C(f32 dst[3], f32 arg1[3], f32 arg2[3][3]);
void func_802578A4(f32 dst[3], f32 vec1[3], f32 vec2[3]);
void func_80257918(f32 arg0[3], f32 arg1[3], f32 arg2[3], f32 arg3[3]);
bool func_802579B0(f32 vec[3], f32 x1, f32 z1, f32 x2, f32 z2);
f32 func_80257A44(f32 val1, f32 val2);
f32 func_80257A6C(f32 val1, f32 val2);
f32 func_80257AD4(f32 val1, f32 val2);
f32 ml_map_f(f32 val, f32 in_min, f32 in_max, f32 out_min, f32 out_max);
f32 ml_mapRange_f(f32 val, f32 in_min, f32 in_max, f32 out_min, f32 out_max);
f32 ml_interpolate_f(f32 arg0, f32 arg1, f32 arg2);
f32 ml_mapFunction_f(f32 a, f32 b, f32 c, f32 d, f32 e, f32 (*func)(f32));
f32 func_80257CC0(f32 a, f32 b, f32 c, f32 d, f32 e);
f32 func_80257CF8(f32 a, f32 b, f32 c, f32 d, f32 e);
f32 ml_mapAbsRange_f(f32 val, f32 in_min, f32 in_max, f32 out_min, f32 out_max);
void func_80257DB0(f32 arg0[3], f32 arg1[3], f32 arg2[3]);
void ml_setLength_vec3f(f32 v[3], f32 a);
s32 ml_clamp_w(s32 val, s32 min, s32 max);
f32 ml_clamp_f(f32 val, f32 min, f32 max);
int func_80257F18(f32 src[3], f32 target[3], f32 *yaw);
int func_8025801C(f32 target[3], f32 *yaw);
int func_80258108(f32 vec[3], f32 *arg1, f32 *arg2);
int func_80258210(f32 x, f32 y, f32 *dst);
bool ml_isZero_vec3f(f32 vec[3]);
bool ml_isNonzero_vec3f(f32 vec[3]);
bool ml_vec3f_not_on_vertical_axis(f32 vec[3]);
bool ml_vec3f_inside_box_f(f32 vec[3], f32 minX, f32 minY, f32 minZ, f32 maxX, f32 maxY, f32 maxZ);
bool ml_vec3f_inside_box_vec3f(f32 vec[3], f32 min[3], f32 max[3]);
bool ml_vec3w_inside_box_w(s32 vec[3], s32 minX, s32 minY, s32 minZ, s32 maxX, s32 maxY, s32 maxZ);
f32 ml_vec3f_horizontal_distance_zero_likely(f32 vec1[3], f32 vec2[3]);
f32 ml_vec3f_horizontal_distance_squared_zero_likely(f32 vec1[3], f32 vec2[3]);
f32 ml_vec3f_length(f32 vec1[3], f32 vec2[3]);
f32 ml_vec3f_length_sq(f32 vec1[3], f32 vec2[3]);
f32 ml_sin_deg(f32 angle_deg);
f32 ml_cos_deg(f32 angle_deg);
f32 mlNormalizeAngle(f32 angle);
f32 ml_remainder_f(f32 arg0, f32 arg1);
f32 ml_max_f(f32 arg0, f32 arg1);
f32 ml_min_f(f32 arg0, f32 arg1);
int ml_max_w(int arg0, int arg1);
int ml_min_w(int arg0, int arg1);
f32 mlAbsF(f32 arg0);
f32 func_80258994(f32 arg0[3]);
int ml_abs_w(int arg0);
void func_802589E4(f32 dst[3], f32 yaw, f32 length);
void func_80258A4C(f32 vec1[3], f32 arg1, f32 vec2[3], f32 *arg3, f32 *arg4, f32 *arg5);
void ml_vec3f_clear(f32 dst[3]);
void ml_vec3f_copy(f32 dst[3], f32 src[3]);
void ml_vec3f_diff_copy(f32 dst[3], f32 src1[3], f32 src2[3]);
void ml_vec3f_diff(f32 dst[3], f32 src[3]);
void ml_vec3f_assign(f32 dst[3], f32 x, f32 y, f32 z);
void ml_vec3f_add(f32 dst[3], f32 src1[3], f32 src2[3]);
void ml_vec3f_scale(f32 vec[3], f32 scale);
void ml_vec3f_scale_copy(f32 dst[3], f32 src[3], f32 scale);
void func_80258CDC(f32 vec1[3], f32 vec2[3]);
void ml_vec3w_to_vec3f(f32 dst[3], s32 src[3]);
void ml_vec3h_to_vec3f(f32 dst[3], s16 src[3]);
void ml_vec3f_to_vec3w(s32 dst[3], f32 src[3]);
void ml_vec3f_to_vec3h(s16 dst[3], f32 src[3]);
void ml_translate_y_local(f32 position[3], f32 rotation[3], f32 dy);
void ml_translate_z_local(f32 dst[3], f32 src[3], f32 dz);
void ml_translate_x_local(f32 dst[3], f32 src[3], f32 dx);
void func_8025901C(f32 arg0, f32 arg1[3], f32 arg2[3], f32 arg3);
f32 func_80259198(f32 arg0, f32 arg1);
f32 mlDiffDegF(f32 arg0, f32 arg1);
bool ml_vec3f_point_within_horizontal_distance(f32 vec[3], f32 x, f32 z, f32 distance);
bool ml_vec3f_within_horizontal_distance(f32 vec1[3], f32 vec2[3], f32 distance);
bool ml_vec3w_within_horizontal_distance(s32 vec1[3], s32 vec2[3], s32 distance);
bool ml_vec3f_within_distance(f32 vec1[3], f32 vec2[3], f32 distance);
bool ml_stub_80259400(f32 x);
void ml_sub_delta_time(f32 *x);
void func_8025947C(f32 a0[3], f32 a1[3], f32 a2[3], f32 a3[3]);
f32 func_80259554(f32 dst[3], f32 vec1[3], f32 vec2[3], f32 vec3[3]);
void func_802596AC(f32 a0[3], f32 a1[3], f32 a2[3], f32 a3[3]);
s32 ml_getViewportYawWithOffset(f32 x);
bool ml_isViewportYawWithOffsetNormalized(f32 x);
void ml_vec3f_interpolate(f32 dst[3], f32 start[3], f32 end[3], f32 t);

#endif
