Files
af/include/m_common_data.h
T
kuchenmitsahne a4d5910cdb m_random_field OK (#241)
* 25 functions OK

* 10 functions OK

* Add block type and block kind enums/defines

* Formatting/style pass

* Move `FieldMakeBlockType` to `m_field_make`

* Remove unused/duplicate defines

* Split data out for `m_quest` and `m_random_field`; rename data symbols

* Generate `m_random_field.c` and rename function symbols.

* mRF_BlockTypeDirect2GateType, mRF_BlockTypeDirect2GateData OK

* mRF_Type2BlockInfo, mRF_Info2BlockType, mRF_GateType2GateCount, mRF_SearchPond, mRF_Attr2BeastRoadAttr, mRF_CheckBeastRoad OK

* mFI_GetUnitCol OK; mRF_PrintDebug and mRF_BlockInf2CheckBeastRoad OK (pending data import).

* Fix `m_random_field` code split; all newly included functions OK

* Fix mRF_Malloc return type; formatting pass

* Name m_random_field_ovl

* Rename data symbols (m_random_field_ovl).

* Rename symbols (all functions named)

* Import data

* Declare overlay segment; rename symbols

* mRF_MakeRandomField OK (all functions matching).

* Extract asset `data_combi_table`

* Clean up mRF_MakeRandomField; document m_field_make.h

* Rename mCoBG_unkStruct->unk6 as unitAttribute

* Misc cleanup and formatting.

* Rename additional data symbols (m_random_field_ovl).

* Formatting pass

* Improve documentation of BackgroundAttribute enum.

* Formatting pass; add omitted attribute.
2025-06-04 16:38:23 -07:00

212 lines
7.3 KiB
C

#ifndef M_COMMON_DATA_H
#define M_COMMON_DATA_H
#include "ultra64.h"
#include "lb_rtc.h"
#include "m_event.h"
#include "m_field_make.h"
#include "m_home.h"
#include "m_land.h"
#include "m_mail.h"
#include "m_npc.h"
#include "m_npc_walk.h"
#include "m_npc_schedule.h"
#include "m_private.h"
#include "m_quest.h"
#include "unk.h"
#include "m_snowman.h"
#include "m_clip.h"
#include "m_scene.h"
#include "m_demo.h"
#define COMMON_GET(name) (common_data.name)
#define COMMON_GET_POINTER(name) (&common_data.name)
#define COMMON_SET(name, value) (common_data.name = (value))
#define SAVE_GET(name) (COMMON_GET(save.name))
#define SAVE_GET_POINTER(name) (COMMON_GET_POINTER(save.name))
#define SAVE_SET(name, value) (COMMON_SET(save.name, value))
typedef enum Season {
/* 0 */ SPRING,
/* 1 */ SUMMER,
/* 2 */ FALL,
/* 3 */ WINTER
} Season;
typedef struct Time {
/* 0x00 */ u32 season;
/* 0x04 */ u32 termIdx;
/* 0x08 */ s16 bgitemProfile;
/* 0x0A */ s16 bgitemBank;
/* 0x0C */ s32 nowSec;
/* 0x10 */ lbRTC_time_c rtcTime;
/* 0x18 */ s16 radMin;
/* 0x1A */ s16 radHour;
/* 0x1C */ u8 timeSignal;
/* 0x1D */ u8 underSec;
/* 0x1E */ u8 disp;
/* 0x1F */ u8 rtcCrashed;
/* 0x20 */ s32 rtcEnabled;
/* 0x24 */ s32 addSec;
/* 0x28 */ s32 addIdx;
} Time; // size = 0x2C
typedef struct FamicomEmuCommonData {
/* 0x00 */ s16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ s16 unk04;
/* 0x06 */ s16 unk06;
/* 0x08 */ s16 unk08;
/* 0x0A */ s16 unk0A;
/* 0x0C */ s16 unk0C;
/* 0x0E */ s16 unk0E;
/* 0x10 */ s16 unk10;
/* 0x12 */ s16 unk12;
/* 0x14 */ s16 unk14;
/* 0x16 */ s16 unk16;
/* 0x18 */ s16 unk18;
/* 0x1A */ s16 unk1A;
/* 0x1C */ s16 unk1C;
/* 0x1E */ s16 unk1E;
/* 0x20 */ s16 unk20;
/* 0x22 */ s16 unk22;
/* 0x24 */ s16 unk24;
} FamicomEmuCommonData; // size >= 0x26
typedef struct Save {
/* 0x00000 */ u8 unk_00000[0x14];
/* 0x00014 */ s32 sceneNo;
/* 0x00018 */ u8 nowNpcMax;
/* 0x00019 */ u8 removeAnimalIdx;
/* 0x0001A */ u8 unk_1A[0x20 - 0x1A];
/* 0x00020 */ PrivateInfo saveFilePrivateInfo[PLAYER_NUM]; // player data
/* 0x02F60 */ LandInfo landInfo; // town name & id
/* 0x02F6A */ u8 unk_02F6A[0x61E];
/* 0x03588 */ mHm_hs_c homes[PLAYER_NUM];
/* 0x062A8 */ Foreground foreground[FG_BLOCK_Z_NUM][FG_BLOCK_X_NUM];
/* 0x09EA8 */ u8 unk_09EA8[0x70];
/* 0x09F18 */ Animal_c animals[ANIMAL_NUM_MAX]; // villagers in town
/* 0x0EC70 */ AnmPersonalID_c lastRemovedAnimalId;
/* 0x0EC7C */ u8 unk_0EC7C[0x128];
/* 0x0EDA4 */ EventSaveInfo eventSaveInfo;
/* 0x0EE40 */ u8 unk_0EE40[0x118];
/* 0x0EF58 */ u16 fruit;
/* 0x0EF5A */ UNK_TYPE1 unk_0EF5A[2];
/* 0x0EF5C */ lbRTC_time_c allGrowRenewTime;
/* 0x0EF64 */ UNK_TYPE1 unk_0EF64[0x4B8];
/* 0x0F41C */ SnowmanData snowmanData[SNOWMAN_SAVE_COUNT];
/* 0x0F428 */ u64 melody;
/* 0x0F430 */ UNK_TYPE1 unk_F430[0x4];
/* 0x0F434 */ lbRTC_ymd_t renewTime;
/* 0x0F438 */ u8 stationType;
/* 0x0F439 */ u8 saveWeather;
/* 0x0F440 */ u8 unk_F440[0x2];
/* 0x0F43C */ u16 deposit[FG_BLOCK_X_NUM * FG_BLOCK_Z_NUM][UT_Z_NUM]; // flags for which items are buried around town
/* 0x0F7FC */ lbRTC_time_c lastGrowTime;
/* 0x0F804 */ PrivateMotherMail motherMailInfo[PLAYER_NUM];
/* 0x0F83C */ u8 unk_0F83C[0x8];
/* 0x0F844 */ FamicomEmuCommonData famicomEmuCommonData;
/* 0x0F86A */ UNK_TYPE1 unk_0F86A[0x2];
/* 0x0F86C */ u8 npcUsedTable[32];
/* 0x0F88C */ UNK_TYPE1 unk_0F88A[0x10];
/* 0x0F89C */ lbRTC_time_c unk_0F89C;
/* 0x0F8A4 */ lbRTC_time_c unk_0F8A4;
/* 0x0F8AC */ UNK_TYPE1 unk_0F8AC;
/* 0x0F8AD */ u8 snowmanYear; // Year last snowman was built.
/* 0x0F8AE */ u8 snowmanMonth; // Month last snowman was built.
/* 0x0F8AF */ u8 snowmanDay; // Day last snowman was built.
/* 0x0F8B0 */ u8 snowmanHour; // Hour last snowman was built.
/* 0X0F8B1 */ u8 haniwaScheduled;
/* 0x0F8B2 */ UNK_TYPE1 unk_0F8B2[0x74E];
} Save; // size = 0x10000
typedef struct CommonData {
/* 0x00000 */ Save save;
/* 0x10000 */ u8 unk_10000; // named "game_started" in AC GCN decomp
/* 0x10001 */ u8 unk_10001;
/* 0x10002 */ u8 fieldDrawType;
/* 0x10003 */ u8 playerNumber;
/* 0x10004 */ s32 unk_10004; // named "last_scene_no" in AC GCN decomp
/* 0x10008 */ s32 playerDataMode;
/* 0x1000C */ Clip clip;
/* 0x1010C */ Time time;
/* 0x10138 */ PrivateInfo* privateInfo;
/* 0x1013C */ u8 unk_1013C[0x4];
/* 0x10140 */ u8 unk_10140;
/* 0x10141 */ u8 fish_location;
/* 0x10142 */ u8 unk_10142[0x6];
/* 0x10148 */ u8 unk_10148;
/* 0x10149 */ u8 fadeRate;
/* 0x1014A */ u8 wipeRate;
/* 0x1014B */ u8 unk_1014B; // named "wipeType" in AC GCN decomp
/* 0x1014C */ s16 unk_1014C;
/* 0x1014E */ s16 unk_1014E;
/* 0x10150 */ UNK_TYPE1 unk_10150[0x10];
/* 0x10160 */ NpcList npclist[ANIMAL_NUM_MAX];
/* 0x104A8 */ u16 houseOwnerName;
/* 0x104AA */ u16 lastFieldId;
/* 0x104AC */ u8 unk_104AC;
/* 0x104AD */ u8 unk_104AD;
/* 0x104AE */ u8 sunlightFlag;
/* 0x104AF */ UNK_TYPE1 unk_104AF[0x1];
/* 0x104B0 */ UNK_TYPE1 unk_104B0[0xBC];
/* 0x1056C */ s16 weather;
/* 0x1056E */ s16 weatherIntensity;
/* 0x10570 */ lbRTC_time_c weatherTime;
/* 0x10578 */ s_xyz wind;
/* 0x10580 */ f32 windSpeed;
/* 0x10584 */ UNK_TYPE1 unk10584[0x14];
/* 0x10598 */ mQst_not_saved_c quest;
/* 0x105A0 */ s32 sceneFromTitleDemo;
/* 0x105A4 */ NpsSchedule npcSchedule[ANIMAL_NUM_MAX];
/* 0x10694 */ NpcWalking npcWalk;
/* 0x10710 */ NpcEvent npcEvent[5];
/* 0x1074C */ s32 unk_1074C;
/* 0x10750 */ s16 moneyPower;
/* 0x10752 */ s16 goodsPower;
/* 0x10754 */ DoorData doorData;
/* 0x10764 */ DoorData structureExitDoorData;
/* 0x1077C */ DemoRequest startDemoRequest;
/* 0x1078C */ DoorData eventDoorData;
/* 0x107A0 */ DoorData famicomEmuDoorData;
/* 0x107B4 */ s8 unk_107B4;
/* 0x107B5 */ s8 floorIdx;
/* 0x107B6 */ s16 unk_107B6; // named "demo_profile" in AC GCN decomp (though it's an array of two s16s in that game)
/* 0x107B8 */ UNK_TYPE1 unk_107B8[0x27];
/* 0x107FF*/ s8 paymentType;
/* 0x107E0 */ s8 playerDecoyFlag;
/* 0x107E1 */ s8 unk_107E1;
/* 0x107E2 */ s16 unk_107E2;
/* 0x107E4 */ s16 unk_107E4;
/* 0x107E6 */ UNK_TYPE1 unk107E6[0x212];
/* 0x109F8 */ u8 unk109F8;
/* 0x109FC */ s8 unk109F9[0x3F];
/* 0x10A38 */ s8 beeStingFlag;
/* 0x10A39 */ s8 unk_10A39;
/* 0x10A3A */ u8 gokiShockedFlag;
/* 0x10A3B */ UNK_TYPE1 unk_10A3B[0x1];
/* 0x10A3C */ UNK_TYPE1 unk_10A3C[0x2C];
/* 0x10A68 */ u8 unk_10A68;
/* 0x10A69 */ UNK_TYPE1 unk_10A69[0x2];
/* 0x10A6B */ u8 unk10A6B;
/* 0x10A6C */ xyz_t unk_10A6C;
/* 0x10A78 */ u8 unk_10A78;
/* 0x10A79 */ UNK_TYPE1 unk_10A79[0x7];
/* 0x10A80 */ UNK_TYPE1 unk_10A80[0x2];
/* 0x10A82 */ s16 unk_10A82;
/* 0x10A84 */ UNK_TYPE1 unk_10A84[0x2C];
/* 0x10AB0 */ u8 unk_10AB0; // named "pad_connected" in AC GCN decomp
/* 0x10AB1 */ UNK_TYPE1 unk_10AB1;
/* 0x10AB2 */ s16 currentSoundEffect;
/* 0x10AB4 */ UNK_TYPE1 unk_10AB4[0x4];
} CommonData; // size = 0x10AB8
void common_data_reinit(void);
void common_data_init(void);
void common_data_clear(void);
extern CommonData common_data;
#endif