mirror of
https://github.com/zeldaret/af.git
synced 2026-09-26 13:33:16 -04:00
eb99af89c8
* implement kankyo * m_kankyo OK
166 lines
5.9 KiB
C
166 lines
5.9 KiB
C
#ifndef M_SCENE_H
|
|
#define M_SCENE_H
|
|
|
|
#include "ultra64.h"
|
|
#include "z64math.h"
|
|
#include "libc/stdint.h"
|
|
#include "m_std_dma.h"
|
|
|
|
struct Game_Play;
|
|
struct Game;
|
|
|
|
typedef struct ActorEntry {
|
|
/* 0x0 */ s16 id;
|
|
/* 0x2 */ s_xyz pos;
|
|
/* 0x8 */ s_xyz rot;
|
|
/* 0xE */ s16 params;
|
|
} ActorEntry; // size = 0x10
|
|
|
|
typedef struct ObjectStatus {
|
|
/* 0x00 */ s16 id;
|
|
/* 0x04 */ u8* segment;
|
|
/* 0x08 */ void* vram;
|
|
/* 0x0C */ uintptr_t vrom;
|
|
/* 0x10 */ size_t size;
|
|
/* 0x14 */ DmaRequest unk14;
|
|
/* 0x34 */ OSMesgQueue unk34;
|
|
/* 0x4C */ UNK_TYPE unk4C;
|
|
/* 0x50 */ s16 unk50;
|
|
/* 0x52 */ u8 unk52;
|
|
/* 0x53 */ u8 unk53;
|
|
} ObjectStatus; // size = 0x54
|
|
|
|
#define OBJECT_EXCHANGE_BANK_MAX 73 // Name taken from oot debug string
|
|
|
|
typedef struct ObjectExchangeBank {
|
|
/* 0x0000 */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX]; // Name taken from oot debug string
|
|
/* 0x17F4 */ s32 num; // Name taken from oot debug string
|
|
/* 0x17F8 */ UNK_TYPE unk17F8;
|
|
/* 0x17FC */ UNK_TYPE unk17FC;
|
|
/* 0x1800 */ UNK_TYPE unk1800;
|
|
/* 0x1804 */ UNK_TYPE unk1804;
|
|
/* 0x1808 */ s32 unk1808[2];
|
|
/* 0x1810 */ s32 unk1810[2];
|
|
/* 0x1818 */ UNK_PTR unk1818;
|
|
/* 0x181C */ UNK_TYPE unk181C;
|
|
/* 0x1820 */ UNK_TYPE unk1820;
|
|
} ObjectExchangeBank; // size = 0x1824
|
|
|
|
typedef struct DoorData {
|
|
/* 0x00 */ s32 nextSceneId;
|
|
/* 0x04 */ u8 exitOrientation;
|
|
/* 0x05 */ u8 exitType;
|
|
/* 0x06 */ u16 params;
|
|
/* 0x08 */ s_xyz exitPos;
|
|
/* 0x0E */ u16 fgName;
|
|
/* 0x10 */ u8 wipeType;
|
|
/* 0x11 */ u8 alignment[3];
|
|
} DoorData; // size = 0x14
|
|
|
|
typedef struct DoorInfo {
|
|
/* 0x00 */ u8 numDoors;
|
|
/* 0x04 */ DoorData* doorDataPtr;
|
|
} DoorInfo; // size = 0x8
|
|
|
|
typedef struct SceneDataDoor {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 numDoors;
|
|
/* 0x04 */ DoorData* doorDataPtr;
|
|
} SceneDataDoor; // size = 0x8
|
|
|
|
typedef struct SceneDataActor {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 numActors;
|
|
/* 0x04 */ ActorEntry* actorDataPtr;
|
|
} SceneDataActor; // size = 0x8
|
|
|
|
typedef struct SceneDataCtrlActor {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 numCtrlActors;
|
|
/* 0x04 */ s16* ctrlActorDataPtr;
|
|
} SceneDataCtrlActor; // size = 0x8
|
|
|
|
typedef struct SceneDataObjectBank {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 numBanks;
|
|
/* 0x04 */ s16* banksDataPtr;
|
|
} SceneDataObjectBank; // size = 0x8
|
|
|
|
|
|
typedef struct SceneDataField {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 itemType;
|
|
/* 0x02 */ u8 bgNum;
|
|
/* 0x04 */ u16 bgDispSize;
|
|
/* 0x06 */ u8 unk_06;
|
|
/* 0x07 */ u8 drawType;
|
|
} SceneDataField; // size = 0x8
|
|
|
|
typedef struct SceneDataArrangeFtr {
|
|
/* 0x00 */ u8 type;
|
|
/* 0x01 */ u8 arrangeFtrNum;
|
|
} SceneDataArrangeFtr; // size = 0x2
|
|
|
|
typedef struct SceneDataMisc {
|
|
/* 0x01 */ u8 type;
|
|
} SceneDataMisc; // size = 0x1
|
|
|
|
typedef union SceneData {
|
|
SceneDataMisc misc;
|
|
SceneDataActor actor;
|
|
SceneDataCtrlActor controlActor;
|
|
SceneDataObjectBank objectBank;
|
|
SceneDataDoor doorData;
|
|
SceneDataField field;
|
|
SceneDataArrangeFtr arrangeFtr;
|
|
} SceneData; // size = 0x8
|
|
|
|
typedef enum SceneFieldDrawType {
|
|
/* 0 */ FIELD_DRAW_TYPE_OUTDOORS,
|
|
/* 1 */ FIELD_DRAW_TYPE_INDOORS,
|
|
/* 2 */ FIELD_DRAW_TYPE_TRAIN,
|
|
/* 3 */ FIELD_DRAW_TYPE_PLAYER_SELECT,
|
|
/* 4 */ FIELD_DRAW_TYPE_MAX
|
|
} SceneFieldDrawType;
|
|
|
|
s32 func_800C59B0_jp(ObjectExchangeBank* objectExchangeBank);
|
|
s32 func_800C5A08_jp(ObjectExchangeBank* objectExchangeBank);
|
|
s32 func_800C5A60_jp(ObjectExchangeBank* objectExchangeBank);
|
|
s32 func_800C5AA0_jp(ObjectStatus* objectStatus, ObjectExchangeBank* objectExchangeBank, s16 objectBankIndex);
|
|
void mSc_set_bank_status_after(ObjectStatus* objectStatus);
|
|
void mSc_clear_bank_status(ObjectStatus* objectStatus);
|
|
s32 func_800C5B74_jp(ObjectExchangeBank* objectExchangeBank, s16 id);
|
|
void Object_Exchange_keep_new_Player(struct Game_Play* arg0);
|
|
u32 mSc_secure_exchange_keep_bank(ObjectExchangeBank* objectExchangeBank, s16 id, s32 size);
|
|
s32 func_800C5D68_jp(ObjectExchangeBank* objectExchangeBank);
|
|
void func_800C5E10_jp(ObjectExchangeBank* objectExchangeBank);
|
|
void func_800C5EA0_jp(ObjectExchangeBank* objectExchangeBank);
|
|
s32 func_800C5F0C_jp(ObjectStatus* objectStatus, ObjectExchangeBank* objectExchangeBank);
|
|
void mSc_dmacopy_data_bank(ObjectExchangeBank* objectExchangeBank);
|
|
s32 mSc_bank_regist_check(ObjectExchangeBank* objectExchangeBank, s16 id);
|
|
s32 func_800C6144_jp(ObjectExchangeBank* objectExchangeBank, s16 arg1);
|
|
void mSc_regist_initial_exchange_bank(struct Game_Play* game_play);
|
|
void mSc_dmacopy_all_exchange_bank_sub(ObjectStatus* status, ObjectExchangeBank* objectExchangeBank, s32 idx);
|
|
void mSc_dmacopy_all_exchange_bank(ObjectExchangeBank* exchange);
|
|
void mSc_data_bank_ct(struct Game_Play* game_play, ObjectExchangeBank* objectExchangeBank);
|
|
void mSc_decide_exchange_bank(ObjectExchangeBank* objectExchangeBank);
|
|
void Scene_player_select(s32 sceneNo, s32 npcActor);
|
|
void Scene_ct(struct Game_Play* play, SceneData* sceneData);
|
|
void Scene_Proc_Player_Ptr(struct Game_Play* play, SceneData* sceneData);
|
|
void Scene_Proc_CtrlActor_Ptr(struct Game_Play* play, SceneData* scene_data);
|
|
void Scene_Proc_Actor_Ptr(struct Game_Play* play, SceneData* sceneData);
|
|
void Scene_Proc_Object_Exchange_Bank_Ptr(struct Game_Play* play, SceneData* sceneData);
|
|
void Scene_Proc_Door_Data_Ptr(struct Game_Play* play, SceneData* sceneData);
|
|
void Door_info_ct(DoorInfo* door_info);
|
|
void Scene_Proc_Sound(struct Game_Play* play, SceneData* scene_data);
|
|
void set_item_info(struct Game_Play* play, SceneDataField* field);
|
|
void Scene_Proc_Field_ct(struct Game_Play* play, SceneData* sceneData);
|
|
void Scene_Proc_ArrangeRoom_ct(struct Game_Play* play, SceneData* data);
|
|
void Scene_Proc_ArrangeFurniture_ct(struct Game_Play* play, SceneData* data);
|
|
s32 goto_other_scene(struct Game_Play* play, DoorData* door_data, s32 updatePlayer);
|
|
s32 goto_next_scene(struct Game_Play* play, s32 nextScene, s32 updatePlayer);
|
|
s32 goto_emu_game(struct Game_Play* play, s16 famicomRomId);
|
|
void return_emu_game(struct Game* game);
|
|
|
|
#endif
|