forked from n64decomp/sm64
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject_helpers.h
335 lines (325 loc) · 12.7 KB
/
object_helpers.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
#ifndef OBJECT_HELPERS_H
#define OBJECT_HELPERS_H
#include "types.h"
// used for chain chomp and wiggler
struct ChainSegment
{
f32 posX;
f32 posY;
f32 posZ;
s16 pitch;
s16 yaw;
s16 roll;
};
#define WATER_SPLASH_FLAG_RAND_ANGLE 0x02
#define WATER_SPLASH_FLAG_RAND_OFFSET_XZ 0x04
#define WATER_SPLASH_FLAG_RAND_OFFSET_XYZ 0x08
#define WATER_SPLASH_FLAG_SET_Y_TO_WATER_LEVEL 0x20
#define WATER_SPLASH_FLAG_RAND_ANGLE_INCR_PLUS_8000 0x40
#define WATER_SPLASH_FLAG_RAND_ANGLE_INCR 0x80
// Call spawn_water_splash with this struct to spawn an object.
struct WaterSplashParams
{
s16 flags; // spawn flags, see WATER_SPLASH_FLAG_* defines above
s16 model;
const BehaviorScript *behavior;
s16 moveAngleRange; // only used for flags 0x40 & 0x80
s16 moveRange; // only used for flags 0x04 & 0x08
f32 randForwardVelOffset;
f32 randForwardVelScale;
f32 randYVelOffset;
f32 randYVelScale;
f32 randSizeOffset;
f32 randSizeScale;
};
struct struct802A1230 {
/*0x00*/ s16 unk00;
/*0x02*/ s16 unk02;
};
struct Struct802A272C {
Vec3f vecF;
Vec3s vecS;
};
// TODO: Field names
struct SpawnParticlesInfo
{
/*0x00*/ s8 behParam;
/*0x01*/ s8 count;
/*0x02*/ u8 model;
/*0x03*/ s8 offsetY;
/*0x04*/ s8 forwardVelBase;
/*0x05*/ s8 forwardVelRange;
/*0x06*/ s8 velYBase;
/*0x07*/ s8 velYRange;
/*0x08*/ s8 gravity;
/*0x09*/ s8 dragStrength;
/*0x0C*/ f32 sizeBase;
/*0x10*/ f32 sizeRange;
};
// extern ? D_80336610;
extern struct GraphNode **gLoadedGraphNodes;
// extern ? sLevelsWithRooms;
// extern ? sGrabReleaseState;
// extern ? sMrIParticleActions;
// extern ? D_8032F124;
// extern ? sMrIActions;
// extern ? D_8032F134;
// extern const char* D_803366B0;
// extern ? sKingBobombActions;
// extern s16 gMarioShotFromCannon;
// extern ? sOpenedCannonActions;
// extern ? D_803366B4;
// extern ? D_803366BC;
// extern ? D_803366C4;
// extern ? sChuckyaActions;
// extern ? D_803366C8;
// extern ? D_8032F260;
// extern ? D_8032F273;
// extern ? D_8032F271;
// extern ? D_8032F270;
// extern ? D_8032F284;
// extern ? D_8032F294;
// extern ? sCoinInsideBooActions;
// extern s16 D_8035FEE4;
// extern ? sGrindelThwompActions;
// extern ? sTumblingBridgeParams;
// extern ? sTumblingBridgeActions;
// extern ? sElevatorActions;
// extern ? D_8032F3CC;
// extern ? D_8032F3E0;
// extern ? D_8032F3F4;
// extern ? D_8032F3FC;
// extern ? sUkikiCageActions;
// extern ? D_8032F420;
// extern ? D_8032F430;
// extern ? D_8032F440;
// extern ? D_8032F450;
// extern ? sHeaveHoActions;
// extern ? D_8032F498;
// extern ? sJumpingBoxActions;
// extern ? D_8032F4B0;
// extern ? D_8035FF10;
// extern ? sBetaBooKeyActions;
// extern ? D_8032F4CC;
// extern ? sBulletBillActions;
// extern ? sBowserTailAnchorActions;
extern void* D_060576FC;
// extern ? D_8032F50C;
// extern ? D_8032F510;
// extern ? sBowserActions;
// extern ? D_8032F5B8;
// extern ? sFallingBowserPlatformActions;
// extern ? D_8032F738;
// extern ? D_8032F728;
// extern ? D_8032F754;
extern s8 dddStatus;
// extern ? D_8035FEE8;
// extern ? sCageUkikiPath;
// extern ? sUkikiActions;
// extern ? sUkikiSoundStates;
// extern ? D_803366D8;
// extern ? D_803366E4;
// extern ? D_803366F0;
// extern ? sRotatingCwFireBarsActions;
// extern ? D_8032F8E0;
// extern ? sToxBoxActions;
// extern ? sPiranhaPlantActions;
// extern ? D_8032FB4C;
// extern ? sBowserPuzzlePieceActions;
// extern ? sTuxiesMotherActions;
// extern ? sSmallPenguinActions;
// extern ? D_0301C2B0;
// extern ? D_0600E264;
// extern ? sFishActions;
// extern ? sFishGroupActions;
// extern ? sBirdChirpChirpActions;
// extern ? sCheepCheepActions;
// extern ? D_8032FC30;
// extern ? sExclamationBoxContents;
// extern ? sExclamationBoxActions;
// extern ? D_8032FCD8;
// extern ? D_8032FCE8;
// extern ? D_803366FC;
// extern ? D_8032FCF8;
// extern ? sTweesterActions;
// extern ? sCourtyardBooTripletPositions;
// extern ? sBooActions;
// extern ? D_8032FD14;
// extern ? sBooGivingStarActions;
// extern ? sBooWithCageActions;
// extern ? D_8032FD74;
// extern ? sWhompActions;
// extern ? D_8032FDAC;
// extern ? D_8032FDF4;
// extern ? D_8032FE3C;
// extern ? D_8032FE4C;
// extern ? D_80336704;
// extern ? D_8033670C;
extern Gfx *Geo18_8029D890(s32 run, UNUSED struct GraphNode *node, f32 mtx[4][4]);
extern Gfx *Geo18_8029D924(s32 run, struct GraphNode *node, UNUSED void *context);
#ifdef AVOID_UB
extern Gfx *geo_switch_anim_state(s32 run, struct GraphNode *node, void *context);
extern Gfx *geo_switch_area(s32 run, struct GraphNode *node, void *context);
#else
extern Gfx *geo_switch_anim_state(s32 run, struct GraphNode *node);
extern Gfx *geo_switch_area(s32 run, struct GraphNode *node);
#endif
extern void func_8029D558(Mat4, struct Object *);
void apply_object_scale_to_matrix(struct Object *, Mat4, Mat4);
extern void func_8029D704(Mat4,Mat4,Mat4);
void set_object_held_state(struct Object *, const BehaviorScript *);
extern f32 lateral_dist_between_objects(struct Object *, struct Object *);
extern f32 dist_between_objects(struct Object *, struct Object *);
extern void obj_forward_vel_approach_upward(f32,f32);
extern s32 approach_f32_signed(f32*,f32,f32);
extern f32 approach_f32_symmetric(f32,f32,f32);
extern s16 approach_s16_symmetric(s16 arg0, s16 arg1, s16 arg2);
extern s32 obj_rotate_yaw_toward(s16,s16);
extern s16 angle_to_object(struct Object *, struct Object *);
extern s16 obj_turn_toward_object(struct Object *, struct Object *, s16, s16);
extern void set_object_parent_relative_pos(struct Object*,s16,s16,s16);
extern void set_object_pos(struct Object*,s16,s16,s16);
extern void set_object_angle(struct Object*,s16,s16,s16);
extern struct Object *spawn_object_abs_with_rot(struct Object *, s16, u32, const BehaviorScript *, s16, s16, s16, s16, s16, s16);
extern struct Object *spawn_object_rel_with_rot(struct Object *sp20, u32 sp24, const BehaviorScript *sp28, s16 sp2E, s16 sp32, s16 sp36, s16 sp3A, s16 sp3E, s16 sp42);
// extern ? Unknown8029E330(?);
extern struct Object *spawn_water_splash(struct Object *, struct WaterSplashParams *);
extern struct Object *spawn_object_at_origin(struct Object *, s32, u32, const BehaviorScript *);
extern struct Object *spawn_object(struct Object *, s32, const BehaviorScript *);
extern struct Object* try_to_spawn_object(s16,f32,struct Object*,s32,const BehaviorScript *);
extern struct Object* spawn_object_with_scale(struct Object*,s32,const BehaviorScript *,f32);
// extern ? build_relative_object_transform(?);
extern struct Object* spawn_object_relative(s16, s16, s16, s16, struct Object *, s32, const BehaviorScript *);
extern struct Object* spawn_object_relative_with_scale(s16,s16,s16,s16,f32,struct Object *,s32,const BehaviorScript *);
// extern ? obj_move_using_vel(?);
extern void copy_object_graph_y_offset(struct Object*,struct Object*);
extern void copy_object_pos_and_angle(struct Object *, struct Object *);
extern void copy_object_pos(struct Object*,struct Object*);
// extern ? copy_object_angle(?);
extern void func_8029EA0C(struct Object*);
// extern ? Unknown8029EA34(?);
extern void linear_mtxf_mul_vec3f(f32 [4][4], Vec3f, Vec3f);
extern void linear_mtxf_transpose_mul_vec3f(f32 [4][4], Vec3f, Vec3f);
// extern ? apply_scale_to_object_transform(?);
void copy_object_scale(struct Object *toObj, struct Object *fromObj);
extern void scale_object_xyz(struct Object* obj, f32 xScale, f32 yScale, f32 zScale);
extern void scale_object(struct Object *, f32);
extern void obj_scale(f32);
extern void set_obj_animation_and_sound_state(s32);
extern void func_8029ED98(u32, f32);
extern void SetObjAnimation(s32 arg0);
void func_8029EE20(struct Object *a0, struct Animation **a1, u32 a2);
// extern ? obj_enable_rendering_and_become_tangible(?);
extern void obj_enable_rendering(void);
// extern ? obj_disable_rendering_and_become_intangible(?);
extern void obj_disable_rendering(void);
extern void obj_unhide(void);
extern void obj_hide(void);
extern void obj_set_pos_relative(struct Object *MarioObj, f32, f32, f32);
// extern ? obj_set_pos_relative_to_parent(?);
extern void obj_enable_rendering_2(void);
// extern ? obj_unused_init_on_floor(?);
extern void obj_set_facing_to_move_angles(struct Object *);
u32 get_object_list_from_behavior(const BehaviorScript *behavior);
extern struct Object *obj_nearest_object_with_behavior(const BehaviorScript *);
f32 obj_dist_to_nearest_object_with_behavior(const BehaviorScript*);
extern struct Object *obj_find_nearest_object_with_behavior(const BehaviorScript *, f32 *);
extern struct Object *find_unimportant_object(void);
// extern ? count_unimportant_objects(?);
extern s32 count_objects_with_behavior(const BehaviorScript *behavior);
struct Object* obj_find_nearby_held_actor(const BehaviorScript *,f32);
// extern ? obj_reset_timer_and_subaction(?);
void obj_change_action(s32);
void func_8029F684(f32,f32);
BAD_RETURN(s16) func_8029F6F0(void);
extern BAD_RETURN(s32) func_8029F728(void);
extern s32 func_8029F788(void);
extern s32 func_8029F828(void);
extern s32 obj_check_anim_frame(s32);
extern s32 obj_check_anim_frame_in_range(s32, s32);
// extern ? Unknown8029F930(?);
s32 mario_is_in_air_action(void);
s32 mario_is_dive_sliding(void);
void func_8029FA1C(f32,s32);
void func_8029FA5C(s32,s32);
// extern ? obj_move_after_thrown_or_dropped(?);
void obj_get_thrown_or_placed(f32,f32,s32);
extern void obj_get_dropped(void);
extern void obj_set_model(s32);
// extern ? mario_set_flag(?);
s32 obj_clear_interact_status_flag(s32);
extern void mark_object_for_deletion(struct Object *);
void obj_disable(void);
extern void obj_become_intangible(void);
extern void obj_become_tangible(void);
void make_object_tangible(struct Object*);
void obj_update_floor_height(void);
struct Surface* obj_update_floor_height_and_get_floor(void);
// extern ? apply_drag_to_value(?);
void obj_apply_drag_xz(f32);
// extern ? obj_move_xz(?);
// extern ? obj_move_update_underwater_flags(?);
// extern ? obj_move_update_ground_air_flags(?);
// extern ? obj_move_y_and_get_water_level(?);
void obj_move_y(f32,f32,f32);
// extern ? clear_move_flag(?);
// extern ? obj_unused_resolve_wall_collisions(?);
extern s16 abs_angle_diff(s16, s16);
extern void obj_move_xz_using_fvel_and_yaw(void);
extern void obj_move_y_with_terminal_vel(void);
void obj_compute_vel_xz(void);
f32 func_802A0BF4(f32,f32,f32,f32);
extern s32 are_objects_collided(struct Object *, struct Object *);
void obj_set_behavior(const BehaviorScript *);
void set_object_behavior(struct Object *, const BehaviorScript *);
extern s32 obj_has_behavior(const BehaviorScript *);
s32 object_has_behavior(struct Object *, const BehaviorScript *);
f32 obj_lateral_dist_from_mario_to_home(void);
extern f32 obj_lateral_dist_to_home(void);
// extern ? obj_outside_home_square(?);
// extern ? obj_outside_home_rectangle(?);
extern void obj_set_pos_to_home(void);
void obj_set_pos_to_home_and_stop(void);
extern void obj_shake_y(f32);
void obj_start_cam_event(struct Object *obj, s32 cameraEvent);
// extern ? Unknown802A11E4(?);
void obj_set_billboard(struct Object *a0);
void obj_set_hitbox_radius_and_height(f32,f32);
void obj_set_hurtbox_radius_and_height(f32,f32);
// extern ? spawn_object_loot_coins(?);
// extern ? spawn_object_loot_blue_coins(?);
extern void spawn_object_loot_yellow_coins(struct Object *, s32, f32);
void obj_spawn_loot_coin_at_mario_pos(void);
// extern ? obj_abs_y_dist_to_home(?);
// extern ? Unknown802A1548(?);
// extern ? obj_detect_steep_floor(?);
s32 obj_resolve_wall_collisions(void);
// extern ? obj_update_floor(?);
// extern ? obj_update_floor_and_resolve_wall_collisions(?);
extern void obj_update_floor_and_walls(void);
extern void obj_move_standard(s16);
// extern ? obj_within_12k_bounds(?);
void obj_move_using_vel_and_gravity(void);
void obj_move_using_fvel_and_gravity(void);
// extern ? set_object_pos_relative(?);
s16 obj_angle_to_home(void);
void func_802A2008(struct Object*,struct Object*);
extern void translate_object_local(struct Object*,s16,s16);
extern void build_object_transform_from_pos_and_angle(struct Object *, s16, s16);
extern void func_802A2270(struct Object *);
extern void build_object_transform_relative_to_parent(struct Object *);
// extern ? Unknown802A2380(?);
// extern ? obj_rotate_move_angle_using_vel(?);
void obj_rotate_face_angle_using_vel(void);
// extern ? obj_set_face_angle_to_move_angle(?);
extern s32 obj_follow_path(UNUSED s32);
extern void chain_segment_init(struct ChainSegment *);
extern f32 random_f32_around_zero(f32);
void scale_object_random(struct Object*,f32,f32);
extern void translate_object_xyz_random(struct Object *, f32);
extern void translate_object_xz_random(struct Object *, f32);
// extern ? func_802A297C(?);
void func_802A2A38(void);
void obj_spawn_particles(struct SpawnParticlesInfo *sp28);
extern s16 obj_reflect_move_angle_off_wall(void);
#endif /* OBJECT_HELPERS_H */