diff options
| author | Prakxo <87568477+Prakxo@users.noreply.github.com> | 2024-09-21 18:17:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-21 09:17:13 -0700 |
| commit | 2c7d61be83bedf7252cb0dccc0c681bfb6bb29da (patch) | |
| tree | 0bb4502456b7807f4529e5cf246545011bc7f4d1 | |
| parent | a12931233d710ca9d1336a1ecb5e63f7c941ce7d (diff) | |
m_land OK (#212)
| -rw-r--r-- | include/6B81C0.h | 2 | ||||
| -rw-r--r-- | include/m_land.h | 26 | ||||
| -rw-r--r-- | linker_scripts/jp/symbol_addrs_code.txt | 12 | ||||
| -rw-r--r-- | src/code/m_land.c | 147 | ||||
| -rw-r--r-- | yamls/jp/code.yaml | 2 |
5 files changed, 169 insertions, 20 deletions
diff --git a/include/6B81C0.h b/include/6B81C0.h index a897cd4..5394e33 100644 --- a/include/6B81C0.h +++ b/include/6B81C0.h @@ -4,7 +4,7 @@ #include "ultra64.h" // void func_80094520_jp(); -// void func_80094690_jp(); +void mHm_ClearAllHomeInfo(void); void mHm_SetNowHome(void); // void func_80094744_jp(); // void func_800947C0_jp(); diff --git a/include/m_land.h b/include/m_land.h index d2bf7ef..8174c8a 100644 --- a/include/m_land.h +++ b/include/m_land.h @@ -5,6 +5,7 @@ #include "unk.h" #define mLd_CHECK_LAND_ID(id) (((id) & 0xFF00) == 0x3000) +#define mLd_CHECK_ID(id) ((id & 0x3000) == 0x3000) // Town name character count #define LAND_NAME_SIZE 6 @@ -16,21 +17,22 @@ typedef struct LandInfo { /* 0x8 */ u16 id; } LandInfo; // size = 0xA -s32 mLd_NullCheckLandName(char*); -s32 mLd_CheckId(u16); -s32 mLd_CheckCmpLandName(char* name1, char* name2); -s32 mLd_CheckCmpLand(char* name1, u16 id1, char* name2, u16 id2); +s32 mLd_NullCheckLandName(char* landName); +s32 mLd_CheckId(u16 landId); +s32 mLd_CheckCmpLandName(char* nameA, char* nameB); +s32 mLd_CheckCmpLand(char* nameA, u16 idA, char* nameB, u16 idB); void mLd_ClearLandName(char* name); -void mLd_CopyLandName(char* arg0, char* arg1); -// void func_80094F24_jp(); -// void func_80094F84_jp(); -// void func_8009504C_jp(); +void mLd_CopyLandName(char* nameA, char* nameB); +size_t mLd_AddMuraString(char* name, size_t len); +size_t mLd_GetLandNameStringAddMura(char* buf); +void mLd_SetFreeStrLandMuraName(char* name, s32 freeStr); char* mLd_GetLandName(void); -// void func_800950E8_jp(); -s32 mLd_PlayerManKindCheckNo(u8 playerNumber); +u16 mLd_MakeLandId(void); +s32 mLd_PlayerManKindCheckNo(u8 playerNo); s32 mLd_PlayerManKindCheck(void); -s32 mLd_CheckThisLand(char* arg0, u16 arg1); -// void func_80095218_jp(); +s32 mLd_CheckThisLand(char* otherName, u16 otherId); +void mLd_LandInfoInit(void); void mLd_LandDataInit(void); + #endif diff --git a/linker_scripts/jp/symbol_addrs_code.txt b/linker_scripts/jp/symbol_addrs_code.txt index 9c14123..bd3b389 100644 --- a/linker_scripts/jp/symbol_addrs_code.txt +++ b/linker_scripts/jp/symbol_addrs_code.txt @@ -1638,7 +1638,7 @@ func_800942A0_jp = 0x800942A0; // type:func func_80094400_jp = 0x80094400; // type:func mHandbillz_load = 0x800944B8; // type:func func_80094520_jp = 0x80094520; // type:func -func_80094690_jp = 0x80094690; // type:func +mHm_ClearAllHomeInfo = 0x80094690; // type:func mHm_SetNowHome = 0x800946D0; // type:func func_80094744_jp = 0x80094744; // type:func func_800947C0_jp = 0x800947C0; // type:func @@ -1658,15 +1658,15 @@ mLd_CheckCmpLandName = 0x80094E38; // type:func mLd_CheckCmpLand = 0x80094E90; // type:func mLd_ClearLandName = 0x80094EE0; // type:func mLd_CopyLandName = 0x80094F04; // type:func -func_80094F24_jp = 0x80094F24; // type:func -func_80094F84_jp = 0x80094F84; // type:func -func_8009504C_jp = 0x8009504C; // type:func +mLd_AddMuraString = 0x80094F24; // type:func +mLd_GetLandNameStringAddMura = 0x80094F84; // type:func +mLd_SetFreeStrLandMuraName = 0x8009504C; // type:func mLd_GetLandName = 0x800950D8; // type:func -func_800950E8_jp = 0x800950E8; // type:func +mLd_MakeLandId = 0x800950E8; // type:func mLd_PlayerManKindCheckNo = 0x8009519C; // type:func mLd_PlayerManKindCheck = 0x800951C0; // type:func mLd_CheckThisLand = 0x800951E4; // type:func -func_80095218_jp = 0x80095218; // type:func +mLd_LandInfoInit = 0x80095218; // type:func mLd_LandDataInit = 0x8009524C; // type:func func_80095280_jp = 0x80095280; // type:func func_800952A4_jp = 0x800952A4; // type:func diff --git a/src/code/m_land.c b/src/code/m_land.c new file mode 100644 index 0000000..b8b39c1 --- /dev/null +++ b/src/code/m_land.c @@ -0,0 +1,147 @@ +#include "m_land.h" +#include "m_string.h" +#include "m_lib.h" +#include "m_msg_main.h" +#include "6B81C0.h" + +s32 mLd_NullCheckLandName(char* landName) { + s32 isNull = FALSE; + s32 i; + + for (i = 0; i < LAND_NAME_SIZE; i++) { + if (*landName != ' ') { + break; + } + landName++; + } + + if (i == LAND_NAME_SIZE) { + isNull = TRUE; + } + return isNull; +} + +s32 mLd_CheckId(u16 landId) { + s32 res = FALSE; + + if (mLd_CHECK_ID(landId)) { + res = TRUE; + } + + return res; +} + +s32 mLd_CheckCmpLandName(char* nameA, char* nameB) { + s32 equal = FALSE; + + if (mLd_NullCheckLandName(nameA) == FALSE && mLd_NullCheckLandName(nameB) == FALSE) { + equal = mem_cmp((u8*)nameA, (u8*)nameB, LAND_NAME_SIZE); + } + + return equal; +} + +s32 mLd_CheckCmpLand(char* nameA, u16 idA, char* nameB, u16 idB) { + s32 equal = FALSE; + + if (idA == idB && mLd_CheckCmpLandName(nameA, nameB) == TRUE) { + equal = TRUE; + } + + return equal; +} + +void mLd_ClearLandName(char* name) { + mem_clear((u8*)name, LAND_NAME_SIZE, ' '); +} + +void mLd_CopyLandName(char* nameA, char* nameB) { + mem_copy((u8*)nameA, (u8*)nameB, LAND_NAME_SIZE); +} + +size_t mLd_AddMuraString(char* name, size_t len) { + char buf[10]; + size_t size; + UNUSED s32 pad; + size_t lenNew; + + mString_Load_StringFromRom(buf, sizeof(buf), 484); + size = mMsg_Get_Length_String(buf, sizeof(buf)); + lenNew = size + len; + + mem_copy((u8*)(name + len), (u8*)buf, size); + + return lenNew; +} + +size_t mLd_GetLandNameStringAddMura(char* buf) { + char* name; + size_t size; + size_t muraSize; + s32 i; + + name = mLd_GetLandName(); + size = mMsg_Get_Length_String(name, LAND_NAME_SIZE); + + mem_copy((u8*)buf, (u8*)name, size); + muraSize = mLd_AddMuraString(buf, size); + + for (i = muraSize; i < LAND_NAME_MURA_SIZE; i++) { + buf[i] = ' '; + } + + return muraSize; +} + +void mLd_SetFreeStrLandMuraName(char* name, s32 freeStr) { + char str[8]; + size_t nameLen; + s32 i; + + for (i = 0; i < LAND_NAME_MURA_SIZE; i++) { + str[i] = ' '; + } + + nameLen = mMsg_Get_Length_String(name, LAND_NAME_SIZE); + mem_copy((u8*)str, (u8*)name, nameLen); + nameLen = mLd_AddMuraString(str, nameLen); + mMsg_Set_free_str(mMsg_Get_base_window_p(), freeStr, str, nameLen); +} + +char* mLd_GetLandName() { + return common_data.save.landInfo.name; +} + +u16 mLd_MakeLandId() { + return (u16)(RANDOM_F(256)) | 0x3000; +} + +s32 mLd_PlayerManKindCheckNo(u8 playerNo) { + s32 foreigner = TRUE; + + if (playerNo < PLAYER_NUM) { + foreigner = FALSE; + } + + return foreigner; +} + +s32 mLd_PlayerManKindCheck() { + return mLd_PlayerManKindCheckNo(common_data.playerNumber); +} + +s32 mLd_CheckThisLand(char* otherName, u16 otherId) { + return mLd_CheckCmpLand(otherName, otherId, common_data.save.landInfo.name, common_data.save.landInfo.id); +} + +void mLd_LandInfoInit() { + LandInfo* landInfo = &common_data.save.landInfo; + + landInfo->id = mLd_MakeLandId(); + landInfo->exists = TRUE; +} + +void mLd_LandDataInit() { + mLd_LandInfoInit(); + mHm_ClearAllHomeInfo(); +} diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml index fed4dbe..2ff8de6 100644 --- a/yamls/jp/code.yaml +++ b/yamls/jp/code.yaml @@ -42,7 +42,7 @@ - [0x6B6560, asm, code/m_handbill] - [0x6B81C0, asm, code/m_home] - [0x6B8880, asm, code/m_house] - - [0x6B8A70, asm, code/m_land] + - [0x6B8A70, c, code/m_land] - [0x6B8F20, asm, code/6B8F20] - [0x6BA3B0, asm, code/m_item_name] - [0x6BA500, asm, code/6BA500] |
