summaryrefslogtreecommitdiff
path: root/include/m_clip.h
blob: 2c5d2ac7487764bb0a68e79f0a01df55c3f2a808 (plain)
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
#ifndef M_CLIP_H
#define M_CLIP_H

#include "ultra64.h"
#include "unk.h"
#include "color.h"

struct Actor;
struct ActorOverlay;
struct Clip_unk_040_unk_14_arg0;
struct Clip_unk_07C_unk_0_arg0;
struct FurnitureActor;
struct Game_Play;
struct Game;
struct ObjectExchangeBank;
struct ObjectStatus;
struct ShadowData;
struct struct_801161E8_jp;
struct struct_809AEFA4;
struct StructureActor;
struct StructureClip;
struct ToolClip;
struct WeatherClip;
struct xyz_t;
struct Arrange_Room;

typedef UNK_RET (*Clip_unk_040_unk_04)(struct ActorOverlay*, const u8*, size_t, s32);
typedef UNK_RET (*Clip_unk_040_unk_08)(void);
typedef UNK_PTR (*Clip_unk_040_unk_0C)(size_t, const u8*, s32);
typedef UNK_RET (*Clip_unk_040_unk_10)(struct Actor*);
typedef UNK_RET (*Clip_unk_040_unk_14)(struct Clip_unk_040_unk_14_arg0*, u16);
typedef UNK_RET (*Clip_unk_040_unk_BC)(struct Actor*, struct Game_Play*);
typedef void (*Clip_unk_040_unk_C0)(struct Actor*, struct Game_Play*, struct struct_809AEFA4*);
typedef UNK_RET (*Clip_unk_040_unk_C4)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_C8)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_CC)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_D0)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_E4)(struct Actor*, struct Game_Play*);
typedef UNK_RET (*Clip_unk_040_unk_E8)(void);
typedef UNK_RET (*Clip_unk_040_unk_EC)(struct ObjectStatus*, s16, s16);
typedef UNK_RET (*Clip_unk_040_unk_F0)(struct ObjectStatus*, struct Actor*);
typedef s32 (*Clip_unk_040_unk_F4)(struct ObjectStatus*, struct Actor*);
typedef UNK_RET (*Clip_unk_040_unk_104)(struct Actor*, UNK_TYPE4, UNK_TYPE, s32);
typedef UNK_RET (*Clip_unk_040_unk_110)(struct Actor*, struct Game_Play*, UNK_TYPE, UNK_TYPE);
typedef UNK_RET (*Clip_unk_040_unk_118)(struct Actor*);

typedef struct Clip_unk_040 {
    /* 0x000 */ UNK_TYPE1 unk_00[0x4];
    /* 0x004 */ Clip_unk_040_unk_04 unk_04;
    /* 0x008 */ Clip_unk_040_unk_08 unk_08;
    /* 0x00C */ Clip_unk_040_unk_0C unk_0C;
    /* 0x010 */ Clip_unk_040_unk_10 unk_10;
    /* 0x014 */ Clip_unk_040_unk_14 unk_14;
    /* 0x018 */ UNK_TYPE1 unk_18[0xA4];
    /* 0x0BC */ Clip_unk_040_unk_BC unk_BC;
    /* 0x0C0 */ Clip_unk_040_unk_C0 unk_C0;
    /* 0x0C4 */ Clip_unk_040_unk_C4 unk_C4;
    /* 0x0C8 */ Clip_unk_040_unk_C8 unk_C8;
    /* 0x0CC */ Clip_unk_040_unk_CC unk_CC;
    /* 0x0D0 */ Clip_unk_040_unk_D0 unk_D0;
    /* 0x0D4 */ UNK_TYPE1 unk_D4[0x10];
    /* 0x0E4 */ Clip_unk_040_unk_E4 unk_E4;
    /* 0x0E8 */ Clip_unk_040_unk_E8 unk_E8;
    /* 0x0EC */ Clip_unk_040_unk_EC unk_EC;
    /* 0x0F0 */ Clip_unk_040_unk_F0 unk_F0;
    /* 0x0F4 */ Clip_unk_040_unk_F4 unk_F4;
    /* 0x0F8 */ UNK_TYPE1 unk_F8[0xC];
    /* 0x104 */ Clip_unk_040_unk_104 unk_104;
    /* 0x108 */ UNK_TYPE1 unk_108[0x8];
    /* 0x110 */ Clip_unk_040_unk_110 unk_110;
    /* 0x114 */ UNK_TYPE1 unk_114[0x4];
    /* 0x118 */ Clip_unk_040_unk_118 unk_118;
} Clip_unk_040; // size >= 0x11C

typedef UNK_RET (*Clip_unk_060_unk_04)(void);
typedef struct Clip_unk_060 {
  /* 0x0 */ UNK_TYPE1 unk_0[0x4];
  /* 0x4 */ Clip_unk_060_unk_04 unk_4;
} Clip_unk_060; // size >= 0x4

typedef UNK_RET (*Clip_unk_068)(void);

typedef UNK_RET (*Clip_unk_06C_unk_00)(UNK_TYPE);
typedef UNK_RET (*Clip_unk_06C_unk_04)(UNK_TYPE);
typedef UNK_RET (*Clip_unk_06C_unk_08)(UNK_TYPE);

typedef struct Clip_unk_078 {
    /* 0x00 */ Clip_unk_06C_unk_00 unk_00;
    /* 0x04 */ Clip_unk_06C_unk_04 unk_04;
    /* 0x08 */ Clip_unk_06C_unk_08 unk_08;
} Clip_unk_06C; // size >= 0xC

typedef s32 (*Clip_unk_070_unk_0C)(void);
typedef struct Clip_unk_070 {
    /* 0x00 */ UNK_TYPE1 unk_0[0xC]; 
    /* 0x04 */ Clip_unk_070_unk_0C unk_C;
} Clip_unk_070; // size >= 0x10

typedef UNK_RET (*Clip_unk_074_unk_00)(UNK_TYPE);
typedef void (*Clip_unk_074_unk_04)(struct Game_Play* game_play, struct ShadowData* shadowData, s32 unk2);
typedef void (*Clip_unk_074_unk_30)(UNK_TYPE, UNK_TYPE, UNK_TYPE, UNK_TYPE);

typedef struct Clip_unk_074 {
    /* 0x00 */ Clip_unk_074_unk_00 unk_00;
    /* 0x04 */ Clip_unk_074_unk_04 unk_04;
    /* 0x08 */ UNK_TYPE1 unk_08[0x28];
    /* 0x30 */ Clip_unk_074_unk_30 unk_30;
    /* 0x34 */ UNK_TYPE1 unk_34[0x4];
    /* 0x38 */ s32 unk_38;
} Clip_unk_074; // size >= 0x8

typedef UNK_RET (*Clip_unk_07C_unk_0)(struct Clip_unk_07C_unk_0_arg0*, UNK_TYPE);
typedef void (*Clip_unk_07C_unk_4)(struct ObjectExchangeBank*);
typedef struct Clip_unk_07C {
    /* 0x00 */ Clip_unk_07C_unk_0 unk_0;
    /* 0x04 */ Clip_unk_07C_unk_4 unk_4;
} Clip_unk_07C; // size >= 0x8
typedef s32 (*Clip_unk_080_unk_04)(struct Game* game, u16 ftr, s32* utX, s32* utZ, u16* rotation,
                                            s32* squareOffs, s32* layer);
typedef void (*Clip_unk_080_unk_24)(void);
typedef s32 (*Clip_unk_080_unk_28)(struct Game* game, u16 ftr, s32 res,s32 utX, s32 utZ, u16 rotation,
                                            s32 squareOffs, s32 layer);
typedef UNK_RET (*Clip_unk_080_unk_34)(struct FurnitureActor* furnitureActor, struct Actor* myHouseActor, struct Game_Play* game_play, f32 arg0, f32 arg1);
typedef s32 (*Clip_unk_080_unk_5C)(struct xyz_t* pos);
typedef s32 (*Clip_unk_080_unk_68)(struct xyz_t* pos);
typedef struct MyRoomClip {
    /* 0x00 */ UNK_TYPE1 unk_00[0x4];
    /* 0x04 */ Clip_unk_080_unk_04 unk_04;
    /* 0x08 */ UNK_TYPE1 unk_08[0x24 - 0x08];
    /* 0x24 */ Clip_unk_080_unk_24 unk_24;
    /* 0x28 */ Clip_unk_080_unk_28 unk_28;
    /* 0x2C */ UNK_TYPE1 unk_2C[0x34 - 0x2C];
    /* 0x34 */ Clip_unk_080_unk_34 unk_34; // open close proc
    /* 0x38 */ s8 unk_38[0x5C - 0x38];
    /* 0x5C */ Clip_unk_080_unk_5C unk_5C;
    /* 0x60 */ UNK_TYPE1 unk_60[0x68 - 0x60];
    /* 0x68 */ Clip_unk_080_unk_68 unk_68;
} MyRoomClip; // size >= 0x6C

typedef struct StructureClipOverlayInfo {
    /* 0x00 */ s8* overlayPointer;
    /* 0x04 */ s32 used;
} StructureClipOverlayInfo; // size = 0x8

// Multiple instances of the same actor (or instances of different actors that share the same object/palette) can use the
// same `StructureClipSegmentInfo` to retrieve that object and palette. This struct represents a single instance of one
// such actor; the `StructureClipSegmentInfo` has a list of all instances that share the same object and palette.
typedef struct StructureClipInstanceInfo {
    /* 0x0 */ f32 posX;
    /* 0x4 */ f32 posZ;
    /* 0x8 */ s16 unk_08;
    /* 0xA */ u16 fgName;
} StructureClipInstanceInfo; // size = 0xC

typedef struct StructureClipSegmentInfo {
    /* 0x00 */ s16 type; // see `StructureType` and `StructurePalette`
    /* 0x02 */ u8 instanceCount;
    /* 0x03 */ u8 unk_03;
    /* 0x04 */ StructureClipInstanceInfo instances[9];
    /* 0x70 */ s32 segment;
} StructureClipSegmentInfo; // size = 0x74

typedef struct Actor* (*StructureClipSetupActorProc)(struct Game_Play*, u16, f32, f32, s16);
typedef void (*StructureClipGetOverlayAreaProc)(struct ActorOverlay*, size_t);
typedef void (*StructureClipFreeOverlayAreaProc)(struct ActorOverlay*);
typedef struct Actor* (*StructureClipGetActorAreaProc)(void);
typedef void (*StructureClipFreeActorAreaProc)(struct Actor*);
typedef void (*StructureClip_unk_A4)(struct ObjectExchangeBank*);
typedef void (*StructureClipRemoveInstanceProc)(StructureClipSegmentInfo*, s32, s16, struct Actor*);
// TODO: What should these *really* return?
typedef s32 (*StructureClipGetObjectSegment)(s16);
typedef u16* (*StructureClipGetPalSegment)(s16);
typedef s32 (*StructureClipGetShadowSegment)(s16);

#define STRUCTURE_CLIP_STRUCTURE_ACTOR_COUNT 9

typedef struct StructureClip {
    /* 0x000 */ StructureClipSetupActorProc setupActorProc;
    /* 0x004 */ StructureClipGetOverlayAreaProc getOverlayAreaProc;
    /* 0x008 */ StructureClipFreeOverlayAreaProc freeOverlayAreaProc;
    /* 0x00C */ StructureClipGetActorAreaProc getActorAreaProc;
    /* 0x010 */ StructureClipFreeActorAreaProc freeActorAreaProc;
    /* 0x014 */ struct StructureActor* structureActorTable[STRUCTURE_CLIP_STRUCTURE_ACTOR_COUNT];
    /* 0x038 */ s32 structureActorUsedTable[STRUCTURE_CLIP_STRUCTURE_ACTOR_COUNT];
    /* 0x05C */ StructureClipOverlayInfo overlayArea[STRUCTURE_CLIP_STRUCTURE_ACTOR_COUNT];
    /* 0x0A4 */ StructureClip_unk_A4 unk_A4;
    /* 0x0A8 */ StructureClipRemoveInstanceProc removeInstanceProc;
    /* 0x0AC */ StructureClipGetObjectSegment getObjectSegment;
    /* 0x0B0 */ StructureClipSegmentInfo objectSegmentTable[8];
    /* 0x450 */ StructureClipGetPalSegment getPalSegment;
    /* 0x454 */ StructureClipSegmentInfo paletteSegmentTable[9];
    /* 0x868 */ StructureClipGetShadowSegment getShadowSegment;
    /* 0x86C */ StructureClipSegmentInfo shadowSegmentTable[8];
    /* 0xC0C */ s32 objectExchangeBankNum;
    /* 0xC10 */ s32 unk_C10;
} StructureClip; // size = 0xC14

typedef void (*Clip_unk_090_unk_00)(s8, struct xyz_t, s32, s32, struct Game_Play*, s32, s32, s32);
typedef void (*Clip_unk_090_unk_30)(Color_RGBA8, s16,s16,s32);
typedef s32 (*Clip_unk_090_unk_3C)(Color_RGBA8*, s32*);
typedef struct Clip_unk_090 {
    /* 0x00 */ Clip_unk_090_unk_00 unk_00;
    /* 0x04 */ UNK_TYPE1 unk_04[0x2C];
    /* 0x30 */ Clip_unk_090_unk_30 unk_30;
    /* 0x34 */ s8 unk_34[0x8];
    /* 0x3C */ Clip_unk_090_unk_3C unk_3C;
} Clip_unk_090; // size >= 0x34

typedef void (*Clip_unk_09C_unk_C)(void);
typedef struct Clip_unk_09C {
    /* 0x00 */ UNK_TYPE1 unk_00[0xC];
    /* 0x0C */ Clip_unk_09C_unk_C unk_C;
} Clip_unk_09C; // size >= 0x10

typedef void (*Clip_unk_0A4_unk_4)(void);

typedef struct Clip_unk_0A4 {
    /* 0x00 */ UNK_TYPE1 unk_00[0x04];
    /* 0x04 */ Clip_unk_0A4_unk_4 unk_4;
} Clip_unk_0A4;

typedef UNK_RET (*Clip_unk_0A8_unk_4)(void*);
typedef void (*Clip_unk_0A8_unk_C)(struct xyz_t*, f32, UNK_TYPE);
typedef struct Clip_unk_0A8 {
    /* 0x00 */ UNK_TYPE1 unk_00[0x04];
    /* 0x04 */ Clip_unk_0A8_unk_4 unk_04;
    /* 0x08 */ UNK_TYPE1 unk_08[0x04];
    /* 0x0C */ Clip_unk_0A8_unk_C unk_0C;
} Clip_unk_0A8; // size >= 0x8

typedef void (*Clip_unk_0B4_unk_4)(void);
typedef struct Clip_unk_0B4 {
    /* 0x00 */ UNK_TYPE1 unk_00[0x04];
    /* 0x04 */ Clip_unk_0B4_unk_4 unk_4; 
} Clip_unk_0B4; // size >= 0x8

typedef void (*RedmaProc)(void);

typedef struct Arrange_RoomClip{
    /* 0x0 */ struct Arrange_Room* arrangeRoomActor;
    /* 0x4 */ RedmaProc proc;
} Arrange_RoomClip; // size = 0x8

typedef void (*Clip_unk_0D0)(void);

typedef void (*Clip_unk_0D8_unk_00)(struct Game_Play* game_play);
typedef struct Clip_unk_0D8 {
    /* 0x00 */ Clip_unk_0D8_unk_00 unk_00;
} Clip_unk_0D8; // size >= 0x4

typedef struct Clip_BoxTrickData {
    /* 0x000 */ u8 blockX;
    /* 0x001 */ u8 blockZ;
    /* 0x004 */ void* data;
} Clip_BoxTrickData; // size = 0x8

typedef struct Clip {
    /* 0x000 */ Clip_BoxTrickData boxTrickData[4];
    /* 0x020 */ s32 unk_020;
    /* 0x024 */ s8 unk_024[0x1C];
    /* 0x040 */ Clip_unk_040* unk_040;
    /* 0x044 */ s8 unk_044[0x1C]; 
    /* 0x060 */ Clip_unk_060* unk_060;
    /* 0x064 */ s8 unk_064[0x4]; 
    /* 0x068 */ Clip_unk_068 unk_068; 
    /* 0x06C */ Clip_unk_06C* unk_06C;
    /* 0x070 */ Clip_unk_070* unk_070;
    /* 0x074 */ Clip_unk_074* unk_074;
    /* 0x078 */ struct WeatherClip* weatherClip;
    /* 0x07C */ Clip_unk_07C* unk_07C; 
    /* 0x080 */ MyRoomClip* myRoomClip;
    /* 0x084 */ s8 unk_084[0x8];
    /* 0x08C */ struct StructureClip* structureClip; 
    /* 0x090 */ Clip_unk_090* unk_090;
    /* 0x094 */ struct ToolClip* toolClip;
    /* 0x098 */ s8 unk_098[0x4];
    /* 0x09C */ Clip_unk_09C* unk_09C;
    /* 0x0A0 */ s8 unk_0A0[0x4];
    /* 0x0A4 */ Clip_unk_0A4* unk_0A4;
    /* 0x0A8 */ Clip_unk_0A8* unk_0A8;
    /* 0x0AC */ s8 unk_0AC[0x8];
    /* 0x0B4 */ Clip_unk_0B4* unk_0B4;
    /* 0x0B8 */ Arrange_RoomClip* arrangeRoomClip;
    /* 0x0BC */ s8 unk_0BC[0x14];
    /* 0x0D0 */ Clip_unk_0D0 unk_0D0; 
    /* 0x0D4 */ s8 unk_0D4[0x4];
    /* 0x0D8 */ Clip_unk_0D8* unk_0D8; 
    /* 0x0DC */ u8 unk_0DC[0x24];
} Clip; // size = 0x100

void clip_clear(void);

#endif