Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
MorsGames
GitHub Repository: MorsGames/sm64plus
Path: blob/master/src/engine/geo_layout.h
7857 views
1
#ifndef GEO_LAYOUT_H
2
#define GEO_LAYOUT_H
3
4
#include <PR/ultratypes.h>
5
6
#include "game/memory.h"
7
#include "macros.h"
8
#include "types.h"
9
10
#define GEO_CMD_FLAGS_RESET 0
11
#define GEO_CMD_FLAGS_SET 1
12
#define GEO_CMD_FLAGS_CLEAR 2
13
14
#define CMD_SIZE_SHIFT (sizeof(void *) >> 3)
15
#define CMD_PROCESS_OFFSET(offset) (((offset) &3) | (((offset) & ~3) << CMD_SIZE_SHIFT))
16
17
#define cur_geo_cmd_u8(offset) (gGeoLayoutCommand[CMD_PROCESS_OFFSET(offset)])
18
19
#define cur_geo_cmd_s16(offset) (*(s16 *) &gGeoLayoutCommand[CMD_PROCESS_OFFSET(offset)])
20
21
#define cur_geo_cmd_s32(offset) (*(s32 *) &gGeoLayoutCommand[CMD_PROCESS_OFFSET(offset)])
22
23
#define cur_geo_cmd_u32(offset) (*(u32 *) &gGeoLayoutCommand[CMD_PROCESS_OFFSET(offset)])
24
25
#define cur_geo_cmd_ptr(offset) (*(void **) &gGeoLayoutCommand[CMD_PROCESS_OFFSET(offset)])
26
27
extern struct AllocOnlyPool *gGraphNodePool;
28
extern struct GraphNode *gCurRootGraphNode;
29
extern UNUSED s32 D_8038BCA8;
30
extern struct GraphNode **gGeoViews;
31
extern u16 gGeoNumViews;
32
extern uintptr_t gGeoLayoutStack[];
33
extern struct GraphNode *gCurGraphNodeList[];
34
extern s16 gCurGraphNodeIndex;
35
extern s16 gGeoLayoutStackIndex;
36
extern UNUSED s16 D_8038BD7C;
37
extern s16 gGeoLayoutReturnIndex;
38
extern u8 *gGeoLayoutCommand;
39
extern struct GraphNode gObjParentGraphNode;
40
41
extern struct AllocOnlyPool *D_8038BCA0;
42
extern struct GraphNode *D_8038BCA4;
43
extern s16 D_8038BD78;
44
extern struct GraphNode *D_8038BCF8[];
45
46
void geo_layout_cmd_branch_and_link(void);
47
void geo_layout_cmd_end(void);
48
void geo_layout_cmd_branch(void);
49
void geo_layout_cmd_return(void);
50
void geo_layout_cmd_open_node(void);
51
void geo_layout_cmd_close_node(void);
52
void geo_layout_cmd_assign_as_view(void);
53
void geo_layout_cmd_update_node_flags(void);
54
void geo_layout_cmd_node_root(void);
55
void geo_layout_cmd_node_ortho_projection(void);
56
void geo_layout_cmd_node_perspective(void);
57
void geo_layout_cmd_node_start(void);
58
void geo_layout_cmd_nop3(void);
59
void geo_layout_cmd_node_master_list(void);
60
void geo_layout_cmd_node_level_of_detail(void);
61
void geo_layout_cmd_node_switch_case(void);
62
void geo_layout_cmd_node_camera(void);
63
void geo_layout_cmd_node_translation_rotation(void);
64
void geo_layout_cmd_node_translation(void);
65
void geo_layout_cmd_node_rotation(void);
66
void geo_layout_cmd_node_scale(void);
67
void geo_layout_cmd_nop2(void);
68
void geo_layout_cmd_node_animated_part(void);
69
void geo_layout_cmd_node_billboard(void);
70
void geo_layout_cmd_node_display_list(void);
71
void geo_layout_cmd_node_shadow(void);
72
void geo_layout_cmd_node_object_parent(void);
73
void geo_layout_cmd_node_generated(void);
74
void geo_layout_cmd_node_background(void);
75
void geo_layout_cmd_nop(void);
76
void geo_layout_cmd_copy_view(void);
77
void geo_layout_cmd_node_held_obj(void);
78
void geo_layout_cmd_node_culling_radius(void);
79
80
struct GraphNode *process_geo_layout(struct AllocOnlyPool *a0, void *segptr);
81
82
#endif // GEO_LAYOUT_H
83
84