Skip to content

Conversation

@Yanis002
Copy link
Collaborator

@Yanis002 Yanis002 commented Jan 23, 2025

This is starting to get big so I'm opening this as a draft, I don't think there's an issue related to this (yet?)

BMG files are data defining message and how they make the game behave, this game is using 4 sections but the format itself supports 6
  • MID1: "Message ID", unused in this game
  • STR1: I think this one is probably "String", same as above; unused
  • INF1: "Informations", this is a table of offsets to the message strings and some flags that I don't know what they're doing yet
  • DAT1: "Data", this section is where the strings are
  • FLW1: "Flow", this is where the behavior is defined, for instance if it should branch to another text in the case of a conversation
  • FLI1: "Flow Index", I forgot what this is doing lol

a lot of things are already documented about the file format, thanks to different resources (zed, Twilight Princess decomp and some Mario Kart wikis) but a lot is missing


Progress update: a lot of things is matched but a lot is still missing, I might take a break from this because I'd like to work on something new (and not as complex as this system is)

@Yanis002 Yanis002 marked this pull request as ready for review June 29, 2025 20:15
@decomp-dev
Copy link

decomp-dev bot commented Jun 30, 2025

Report for eur (3fe4969 - d5ee59e)

Total code: 3622366 bytes (-684 bytes)
📈 Matched code: 1.06% (+0.11%, +3884 bytes)

✅ 90 new matches:
Unit Function Bytes Before After
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::UnkStruct_0203dae0(unsigned char) +152 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036bbc() +148 0.00% 100.00%
src/Main/Unknown/UnkStruct_02032f0c UnkStruct_02032f0c::UnkStruct_02032f0c() +120 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_020370e8(int, short, short, int) +112 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036888(UnkStruct_020386d8*) +108 0.00% 100.00%
src/Main/Message/BMG BMGGroups::func_020373ec(int) +96 0.00% 100.00%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_02038aa0::UnkStruct_02038aa0(unsigned char, unsigned char) +92 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036c50(int) +84 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036ce4(UnkStruct_020386d8*, int) +76 0.00% 100.00%
src/Main/Message/func_0203c358 MsgProc_Type2::vfunc_3C(int) +76 0.00% 100.00%
src/Main/Message/func_0203c358 MsgProc_Type2::vfunc_40(int, int) +76 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_0203665c() +74 0.00% 100.00%
src/Main/Unknown/UnkStruct_02035064 UnkStruct_02035064::UnkStruct_02035064() +72 0.00% 100.00%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::vfunc_14(int, int) +72 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036798() +68 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::UnkStruct_02037750(int, int) +68 0.00% 100.00%
src/Main/Message/func_0203c358 MsgProc_Type2::MsgProc_Type2(int, short, int) +68 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036ca4(int) +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::~UnkStruct_02037750() +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_020386d8::UnkStruct_020386d8() +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_020386d8::UnkStruct_020386d8() +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203dc74(int, int) +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02035064 UnkStruct_02035064::func_0203516c() +60 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036d6c() +60 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::vfunc_24(int) +60 0.00% 100.00%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_0203881c::UnkStruct_0203881c() +60 0.00% 100.00%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::vfunc_08(int, int, short*, int) +60 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02037178(UnkSubClass1_02256FF8*) +56 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::~UnkStruct_02037750() +56 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::~UnkStruct_02037750() +56 0.00% 100.00%

...and 60 more new matches

📈 558 improvements in unmatched functions:
Unit Function Bytes Before After
src/Main/Message/MessageManager MessageManager::func_0203690c(int, int, int) +680 0.00% 98.92%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::vfunc_28(int) +542 0.00% 55.58%
src/Main/Message/MessageManager MessageManager::func_02036490(int, int, int) +443 0.00% 96.51%
src/Main/Message/MessageManager MessageManager::func_02036f68(unsigned int, unsigned char*) +266 0.00% 74.10%
src/Main/Message/func_0203c72c MsgProc_Type3::MsgProc_Type3(int, short, int) +225 0.00% 82.96%
src/00_Core/Actor/Actor Actor::Actor() +194 51.33% 94.16%
src/Main/Message/BMG BMGGroups::func_020372f0(BMGFileIndex, short) +191 0.00% 97.56%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203dcfc(unsigned char, int, int, int) +189 0.00% 79.13%
src/Main/Message/BMG BMGFileInfo::func_020371c8(unsigned int*, short) +143 0.00% 99.97%
src/Main/Message/MessageManager MessageManager::func_02036edc(unsigned int, unsigned char) +126 0.00% 90.20%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203dc10(int) +98 0.00% 98.80%
src/00_Core/Actor/Dungeon/ActorActionObject ActorActionObject::Init() +97 3.23% 81.10%
src/Main/Message/func_0203c358 MsgProc_Type2::func_0203c39c(int, int) +83 0.00% 69.75%
src/00_Core/Player/PlayerControl PlayerControl::func_ov00_020b049c(Vec3p*, bool) +75 65.06% 87.95%
src/Main/Unknown/UnkStruct_02032f0c UnkStruct_02032f0c::vfunc_14(int, int) +72 0.00% 72.84%
src/00_Core/Map/MapBase MapBase::~MapBase() +66 6.90% 35.12%
src/00_Core/Map/MapBase MapBase::~MapBase() +65 3.57% 32.80%
src/00_Core/Map/MapBase MapBase::~MapBase() +65 3.57% 32.80%
src/00_Core/Actor/Actor Actor::GetHitbox(Cylinder*) +62 60.66% 86.31%
src/00_Core/Actor/Actor Actor::GetUnk_08c(Cylinder*) +62 60.66% 86.31%
src/14_Land/Actor/ActorRupee ActorRupee::Init() +59 12.50% 22.84%
src/Main/Message/BMG BMGFileInfo::func_0203728c(int) +59 0.00% 59.32%
src/Main/Message/MessageManager MessageManager::func_020366c4() +51 0.00% 85.87%
src/Main/Message/MessageManager MessageManager::func_02036700() +51 0.00% 85.87%
src/00_Core/Player/PlayerControl PlayerControl::func_ov00_020b0778(Vec3p*, unsigned int, int*) +48 92.75% 98.55%
src/Main/Message/MessageManager MessageManager::func_02036850() +47 0.00% 84.14%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203de24() +47 0.00% 91.08%
src/00_Core/Actor/Actor Actor::func_ov00_020c2ed4() +41 81.58% 95.33%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_02038aa0::vfunc_30(int, int) +18 0.00% 24.95%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_02038aa0::vfunc_70(int*, int*) +13 0.00% 20.69%

...and 528 more improvements in unmatched functions

📉 4840 regressions in unmatched functions:
Unit Function Bytes Before After
src/00_Core/Map/Course Course::Get_Unk_c8_00() -1 33.33% 33.33%
src/00_Core/Map/Course Course::Get_Unk_c8_04() -1 33.33% 33.33%
src/00_Core/Map/Course Course::FindMapData(unsigned int) -1 5.56% 5.56%
src/00_Core/Map/MapBase MapBase::GetTileStartX(int) -1 33.33% 33.33%
src/00_Core/Map/MapBase MapBase::GetTileStartZ(int) -1 33.33% 33.33%
src/00_Core/Map/MapBase MapBase::FindTrigger(int) -1 5.56% 5.56%
src/00_Core/Map/MapBase MapBase_Unk1::func_ov00_02080324(int, int, int) -1 3.33% 3.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_b0() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_1c() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_1d() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_02082d40() -1 7.69% 7.69%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_25c() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_86() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_87() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk28() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk2a() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMinX() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMinZ() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMaxX() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMaxZ() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833c4() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833d0() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833dc() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833e8() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk_d0() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk_d8() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_02083570(int, int) -1 16.67% 16.67%
src/00_Core/Map/MapManager MapManager::GetMapData_Unk_48() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetMapData_Unk_4c() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetMapData_Unk_0a() -1 33.33% 33.33%

...and 4810 more regressions in unmatched functions

@decomp-dev
Copy link

decomp-dev bot commented Jun 30, 2025

Report for usa (3fe4969 - d5ee59e)

Total code: 3622280 bytes (-668 bytes)
📈 Matched code: 1.06% (+0.11%, +3884 bytes)

✅ 90 new matches:
Unit Function Bytes Before After
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::UnkStruct_0203dae0(unsigned char) +152 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036bbc() +148 0.00% 100.00%
src/Main/Unknown/UnkStruct_02032f0c UnkStruct_02032f0c::UnkStruct_02032f0c() +120 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_020370e8(int, short, short, int) +112 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036888(UnkStruct_020386d8*) +108 0.00% 100.00%
src/Main/Message/BMG BMGGroups::func_020373ec(int) +96 0.00% 100.00%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_02038aa0::UnkStruct_02038aa0(unsigned char, unsigned char) +92 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036c50(int) +84 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036ce4(UnkStruct_020386d8*, int) +76 0.00% 100.00%
src/Main/Message/func_0203c358 MsgProc_Type2::vfunc_3C(int) +76 0.00% 100.00%
src/Main/Message/func_0203c358 MsgProc_Type2::vfunc_40(int, int) +76 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_0203665c() +74 0.00% 100.00%
src/Main/Unknown/UnkStruct_02035064 UnkStruct_02035064::UnkStruct_02035064() +72 0.00% 100.00%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::vfunc_14(int, int) +72 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036798() +68 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::UnkStruct_02037750(int, int) +68 0.00% 100.00%
src/Main/Message/func_0203c358 MsgProc_Type2::MsgProc_Type2(int, short, int) +68 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036ca4(int) +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::~UnkStruct_02037750() +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_020386d8::UnkStruct_020386d8() +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_020386d8::UnkStruct_020386d8() +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203dc74(int, int) +64 0.00% 100.00%
src/Main/Unknown/UnkStruct_02035064 UnkStruct_02035064::func_0203516c() +60 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02036d6c() +60 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::vfunc_24(int) +60 0.00% 100.00%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_0203881c::UnkStruct_0203881c() +60 0.00% 100.00%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::vfunc_08(int, int, short*, int) +60 0.00% 100.00%
src/Main/Message/MessageManager MessageManager::func_02037178(UnkSubClass1_02256FF8*) +56 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::~UnkStruct_02037750() +56 0.00% 100.00%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::~UnkStruct_02037750() +56 0.00% 100.00%

...and 60 more new matches

📈 558 improvements in unmatched functions:
Unit Function Bytes Before After
src/Main/Message/MessageManager MessageManager::func_0203690c(int, int, int) +680 0.00% 98.92%
src/Main/Unknown/UnkStruct_02037750 UnkStruct_02037750::vfunc_28(int) +542 0.00% 55.58%
src/Main/Message/MessageManager MessageManager::func_02036490(int, int, int) +443 0.00% 96.51%
src/Main/Message/MessageManager MessageManager::func_02036f68(unsigned int, unsigned char*) +266 0.00% 74.10%
src/Main/Message/func_0203c72c MsgProc_Type3::MsgProc_Type3(int, short, int) +225 0.00% 82.96%
src/00_Core/Actor/Actor Actor::Actor() +194 51.33% 94.16%
src/Main/Message/BMG BMGGroups::func_020372f0(BMGFileIndex, short) +191 0.00% 97.56%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203dcfc(unsigned char, int, int, int) +189 0.00% 79.13%
src/Main/Message/BMG BMGFileInfo::func_020371c8(unsigned int*, short) +143 0.00% 99.97%
src/Main/Message/MessageManager MessageManager::func_02036edc(unsigned int, unsigned char) +126 0.00% 90.20%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203dc10(int) +98 0.00% 98.80%
src/00_Core/Actor/Dungeon/ActorActionObject ActorActionObject::Init() +97 3.23% 81.10%
src/Main/Message/func_0203c358 MsgProc_Type2::func_0203c39c(int, int) +83 0.00% 69.75%
src/00_Core/Player/PlayerControl PlayerControl::func_ov00_020b049c(Vec3p*, bool) +75 65.06% 87.95%
src/Main/Unknown/UnkStruct_02032f0c UnkStruct_02032f0c::vfunc_14(int, int) +72 0.00% 72.84%
src/00_Core/Map/MapBase MapBase::~MapBase() +66 6.90% 35.12%
src/00_Core/Map/MapBase MapBase::~MapBase() +65 3.57% 32.80%
src/00_Core/Map/MapBase MapBase::~MapBase() +65 3.57% 32.80%
src/00_Core/Actor/Actor Actor::GetHitbox(Cylinder*) +62 60.66% 86.31%
src/00_Core/Actor/Actor Actor::GetUnk_08c(Cylinder*) +62 60.66% 86.31%
src/14_Land/Actor/ActorRupee ActorRupee::Init() +59 12.50% 22.84%
src/Main/Message/BMG BMGFileInfo::func_0203728c(int) +59 0.00% 59.32%
src/Main/Message/MessageManager MessageManager::func_020366c4() +51 0.00% 85.87%
src/Main/Message/MessageManager MessageManager::func_02036700() +51 0.00% 85.87%
src/00_Core/Player/PlayerControl PlayerControl::func_ov00_020b0778(Vec3p*, unsigned int, int*) +48 92.75% 98.55%
src/Main/Message/MessageManager MessageManager::func_02036850() +47 0.00% 84.14%
src/Main/Unknown/UnkStruct_0203dae0 UnkStruct_0203dae0::func_0203de24() +47 0.00% 91.08%
src/00_Core/Actor/Actor Actor::func_ov00_020c2ed4() +41 81.58% 95.33%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_02038aa0::vfunc_30(int, int) +18 0.00% 24.95%
src/Main/Unknown/UnkStruct_02038aa0 UnkStruct_02038aa0::vfunc_70(int*, int*) +13 0.00% 20.69%

...and 528 more improvements in unmatched functions

📉 4840 regressions in unmatched functions:
Unit Function Bytes Before After
src/00_Core/Map/Course Course::Get_Unk_c8_00() -1 33.33% 33.33%
src/00_Core/Map/Course Course::Get_Unk_c8_04() -1 33.33% 33.33%
src/00_Core/Map/Course Course::FindMapData(unsigned int) -1 5.56% 5.56%
src/00_Core/Map/MapBase MapBase::GetTileStartX(int) -1 33.33% 33.33%
src/00_Core/Map/MapBase MapBase::GetTileStartZ(int) -1 33.33% 33.33%
src/00_Core/Map/MapBase MapBase::FindTrigger(int) -1 5.56% 5.56%
src/00_Core/Map/MapBase MapBase_Unk1::func_ov00_02080324(int, int, int) -1 3.33% 3.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_b0() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_1c() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_1d() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_02082d40() -1 7.69% 7.69%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_25c() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_86() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseData_Unk_87() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk28() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk2a() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMinX() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMinZ() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMaxX() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetCourseMaxZ() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833c4() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833d0() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833dc() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_020833e8() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk_d0() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::Get_MapData_Unk_d8() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::func_ov00_02083570(int, int) -1 16.67% 16.67%
src/00_Core/Map/MapManager MapManager::GetMapData_Unk_48() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetMapData_Unk_4c() -1 33.33% 33.33%
src/00_Core/Map/MapManager MapManager::GetMapData_Unk_0a() -1 33.33% 33.33%

...and 4810 more regressions in unmatched functions

@AetiasHax AetiasHax merged commit cfb0123 into zeldaret:main Jun 30, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants