mirror of
https://github.com/zeldaret/oot.git
synced 2025-02-26 19:04:20 +00:00
* move variables into z64environment.h * z_room.h * z64sram.h, z64ss_sram.h, z64font.h, kanread.h * z64lifemeter.h, z64debug.h, debug_arena.h * buffers.h * remove z_bgcheck global * gamealloc.h * suggestions * .bdd
174 lines
6.1 KiB
C
174 lines
6.1 KiB
C
#ifndef Z64ROOM_H
|
|
#define Z64ROOM_H
|
|
|
|
#include "ultra64.h"
|
|
#include "z64dma.h"
|
|
#include "z64math.h"
|
|
|
|
struct Input;
|
|
struct PlayState;
|
|
|
|
// Room shapes
|
|
|
|
typedef enum RoomShapeType {
|
|
/* 0 */ ROOM_SHAPE_TYPE_NORMAL,
|
|
/* 1 */ ROOM_SHAPE_TYPE_IMAGE,
|
|
/* 2 */ ROOM_SHAPE_TYPE_CULLABLE,
|
|
/* 3 */ ROOM_SHAPE_TYPE_MAX
|
|
} RoomShapeType;
|
|
|
|
typedef struct RoomShapeBase {
|
|
/* 0x00 */ u8 type;
|
|
} RoomShapeBase; // size = 0x01
|
|
|
|
typedef struct RoomShapeDListsEntry {
|
|
/* 0x00 */ Gfx* opa;
|
|
/* 0x04 */ Gfx* xlu;
|
|
} RoomShapeDListsEntry; // size = 0x08
|
|
|
|
typedef struct RoomShapeNormal {
|
|
/* 0x00 */ RoomShapeBase base;
|
|
/* 0x01 */ u8 numEntries;
|
|
/* 0x04 */ RoomShapeDListsEntry* entries;
|
|
/* 0x08 */ RoomShapeDListsEntry* entriesEnd;
|
|
} RoomShapeNormal; // size = 0x0C
|
|
|
|
typedef enum RoomShapeImageAmountType {
|
|
/* 1 */ ROOM_SHAPE_IMAGE_AMOUNT_SINGLE = 1,
|
|
/* 2 */ ROOM_SHAPE_IMAGE_AMOUNT_MULTI
|
|
} RoomShapeImageAmountType;
|
|
|
|
typedef struct RoomShapeImageBase {
|
|
/* 0x00 */ RoomShapeBase base;
|
|
/* 0x01 */ u8 amountType; // RoomShapeImageAmountType
|
|
/* 0x04 */ RoomShapeDListsEntry* entry;
|
|
} RoomShapeImageBase; // size = 0x08
|
|
|
|
typedef struct RoomShapeImageSingle {
|
|
/* 0x00 */ RoomShapeImageBase base;
|
|
/* 0x08 */ void* source;
|
|
/* 0x0C */ u32 unk_0C;
|
|
/* 0x10 */ void* tlut;
|
|
/* 0x14 */ u16 width;
|
|
/* 0x16 */ u16 height;
|
|
/* 0x18 */ u8 fmt;
|
|
/* 0x19 */ u8 siz;
|
|
/* 0x1A */ u16 tlutMode;
|
|
/* 0x1C */ u16 tlutCount;
|
|
} RoomShapeImageSingle; // size = 0x20
|
|
|
|
typedef struct RoomShapeImageMultiBgEntry {
|
|
/* 0x00 */ u16 unk_00;
|
|
/* 0x02 */ u8 bgCamIndex; // for which bg cam index is this entry for
|
|
/* 0x04 */ void* source;
|
|
/* 0x08 */ u32 unk_0C;
|
|
/* 0x0C */ void* tlut;
|
|
/* 0x10 */ u16 width;
|
|
/* 0x12 */ u16 height;
|
|
/* 0x14 */ u8 fmt;
|
|
/* 0x15 */ u8 siz;
|
|
/* 0x16 */ u16 tlutMode;
|
|
/* 0x18 */ u16 tlutCount;
|
|
} RoomShapeImageMultiBgEntry; // size = 0x1C
|
|
|
|
typedef struct RoomShapeImageMulti {
|
|
/* 0x00 */ RoomShapeImageBase base;
|
|
/* 0x08 */ u8 numBackgrounds;
|
|
/* 0x0C */ RoomShapeImageMultiBgEntry* backgrounds;
|
|
} RoomShapeImageMulti; // size = 0x10
|
|
|
|
typedef struct RoomShapeCullableEntry {
|
|
/* 0x00 */ Vec3s boundsSphereCenter;
|
|
/* 0x06 */ s16 boundsSphereRadius;
|
|
/* 0x08 */ Gfx* opa;
|
|
/* 0x0C */ Gfx* xlu;
|
|
} RoomShapeCullableEntry; // size = 0x10
|
|
|
|
#define ROOM_SHAPE_CULLABLE_MAX_ENTRIES 64
|
|
|
|
typedef struct RoomShapeCullable {
|
|
/* 0x00 */ RoomShapeBase base;
|
|
/* 0x01 */ u8 numEntries;
|
|
/* 0x04 */ RoomShapeCullableEntry* entries;
|
|
/* 0x08 */ RoomShapeCullableEntry* entriesEnd;
|
|
} RoomShapeCullable; // size = 0x0C
|
|
|
|
typedef union RoomShape {
|
|
RoomShapeBase base;
|
|
RoomShapeNormal normal;
|
|
union {
|
|
RoomShapeImageBase base;
|
|
RoomShapeImageSingle single;
|
|
RoomShapeImageMulti multi;
|
|
} image;
|
|
RoomShapeCullable cullable;
|
|
} RoomShape; // "Ground Shape"
|
|
|
|
typedef enum RoomType {
|
|
/* 0 */ ROOM_TYPE_NORMAL,
|
|
/* 1 */ ROOM_TYPE_DUNGEON, // Blocks Sun's Song's time advance effect. Not exclusively used by typical dungeon rooms.
|
|
/* 2 */ ROOM_TYPE_INDOORS, // Reduces player run speed and blocks player from attacking or jumping.
|
|
/* 3 */ ROOM_TYPE_3, // Unused. Color dithering is turned off when drawing the room and other things.
|
|
/* 4 */ ROOM_TYPE_4, // Unused. Prevents switching to CAM_SET_HORSE when mounting a horse.
|
|
/* 5 */ ROOM_TYPE_BOSS // Disables Environment_AdjustLights
|
|
} RoomType;
|
|
|
|
typedef enum RoomEnvironmentType {
|
|
/* 0 */ ROOM_ENV_DEFAULT,
|
|
/* 1 */ ROOM_ENV_COLD,
|
|
/* 2 */ ROOM_ENV_WARM,
|
|
/* 3 */ ROOM_ENV_HOT, // Enables hot room timer for the current room
|
|
/* 4 */ ROOM_ENV_UNK_STRETCH_1,
|
|
/* 5 */ ROOM_ENV_UNK_STRETCH_2,
|
|
/* 6 */ ROOM_ENV_UNK_STRETCH_3
|
|
} RoomEnvironmentType;
|
|
|
|
typedef enum LensMode {
|
|
/* 0 */ LENS_MODE_SHOW_ACTORS, // lens actors are invisible by default, and shown by using lens (for example, invisible enemies)
|
|
/* 1 */ LENS_MODE_HIDE_ACTORS // lens actors are visible by default, and hidden by using lens (for example, fake walls)
|
|
} LensMode;
|
|
|
|
typedef struct Room {
|
|
/* 0x00 */ s8 num; // -1 is invalid room
|
|
/* 0x01 */ u8 unk_01;
|
|
/* 0x02 */ u8 environmentType;
|
|
/* 0x03 */ u8 type;
|
|
/* 0x04 */ s8 echo;
|
|
/* 0x05 */ u8 lensMode;
|
|
/* 0x08 */ RoomShape* roomShape; // original name: "ground_shape"
|
|
/* 0x0C */ void* segment;
|
|
/* 0x10 */ char unk_10[0x4];
|
|
} Room; // size = 0x14
|
|
|
|
typedef struct RoomContext {
|
|
/* 0x00 */ Room curRoom;
|
|
/* 0x14 */ Room prevRoom;
|
|
/* 0x28 */ void* bufPtrs[2]; // Start and end pointers for the room buffer. Can be split into two pages, where page 0 is allocated from the start pointer and page 1 is allocated from the end pointer.
|
|
/* 0x30 */ u8 activeBufPage; // 0 - First page in memory, 1 - Last page in memory
|
|
/* 0x31 */ s8 status; // 0 - Free for new room request, 1 - DmaRequest for a new room is in progress
|
|
/* 0x34 */ void* roomRequestAddr; // Pointer to where the requested room segment will be stored
|
|
/* 0x38 */ DmaRequest dmaRequest;
|
|
/* 0x58 */ OSMesgQueue loadQueue;
|
|
/* 0x70 */ OSMesg loadMsg;
|
|
/* 0x74 */ s16 drawParams[2]; // context-specific data used by the current scene draw config
|
|
} RoomContext; // size = 0x78
|
|
|
|
typedef struct RoomList {
|
|
/* 0x00 */ u8 count;
|
|
/* 0x04 */ RomFile* romFiles; // Array of rom addresses for each room in a scene
|
|
} RoomList;
|
|
|
|
#define ROOM_DRAW_OPA (1 << 0)
|
|
#define ROOM_DRAW_XLU (1 << 1)
|
|
|
|
void func_80095AA0(struct PlayState* play, Room* room, struct Input* input, s32 arg3);
|
|
void Room_DrawBackground2D(Gfx** gfxP, void* tex, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 tlutMode,
|
|
u16 tlutCount, f32 offsetX, f32 offsetY);
|
|
void Room_Init(struct PlayState* play, Room* room);
|
|
u32 Room_SetupFirstRoom(struct PlayState* play, RoomContext* roomCtx);
|
|
s32 Room_RequestNewRoom(struct PlayState* play, RoomContext* roomCtx, s32 roomNum);
|
|
s32 Room_ProcessRoomRequest(struct PlayState* play, RoomContext* roomCtx);
|
|
void Room_Draw(struct PlayState* play, Room* room, u32 flags);
|
|
void Room_FinishRoomChange(struct PlayState* play, RoomContext* roomCtx);
|
|
|
|
#endif
|