From 126e5944f46e767ecb6dba21e2e5e5953bcb1a6e Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Tue, 14 Nov 2023 19:29:22 -0800 Subject: [PATCH] refine 6x70 structure --- src/CommandFormats.hh | 45 ++++++++++++++++++++++++++++++++----------- src/LevelTable.hh | 2 +- src/QuestScript.cc | 2 +- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index d2ef037f..564b935d 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -4577,21 +4577,44 @@ struct G_SyncPlayerDispAndInventory_DC_PC_GC_6x70 { /* 000E */ le_uint16_t unknown_a1 = 0; // [1] and [3] in this array (and maybe [2] also) appear to be le_floats; // they could be the player's current (x, y, z) coords - /* 0010 */ parray unknown_a2; - /* 002C */ parray unknown_a3; + /* 0010 */ le_uint32_t flags1; + /* 0014 */ le_float x; + /* 0018 */ le_float y; + /* 001C */ le_float z; + /* 0020 */ le_uint32_t angle_x; + /* 0024 */ le_uint32_t angle_y; + /* 0028 */ le_uint32_t angle_z; + /* 002C */ le_uint16_t unknown_a3a; + /* 002C */ le_uint16_t current_hp; + /* 002C */ le_uint16_t bonus_hp_from_materials; + /* 002C */ le_uint16_t bonus_tp_from_materials; /* 0034 */ parray, 5> unknown_a4; - /* 0070 */ le_uint32_t unknown_a5 = 0; + /* 0070 */ le_uint32_t language = 0; /* 0074 */ le_uint32_t player_tag = 0; /* 0078 */ le_uint32_t guild_card_number = 0; - /* 007C */ parray unknown_a6; + /* 007C */ le_uint32_t unknown_a6; + /* 0080 */ le_uint32_t battle_team_number; /* 0084 */ struct { - parray unknown_a1; - parray unknown_a2; - } __packed__ unknown_a7; + /* 0084 */ le_uint16_t client_id; + /* 0086 */ le_uint16_t unknown_a1; + /* 0088 */ le_uint32_t unknown_a2; + /* 008C */ le_float x; + /* 0090 */ le_float y; + /* 0094 */ le_float z; + /* 0098 */ le_uint32_t unknown_a3; + /* 009C */ parray unknown_a4; + } __packed__ telepipe; /* 00A0 */ le_uint32_t unknown_a8 = 0; - /* 00A4 */ parray unknown_a9; - /* 00B8 */ le_uint32_t unknown_a10 = 0; - /* 00BC */ le_uint32_t unknown_a11 = 0; + /* 00A4 */ struct { + /* 00A4 */ le_uint16_t unknown_a1; + /* 00A6 */ le_uint16_t unknown_a2; + /* 00A8 */ le_uint32_t unknown_a3; + /* 00AC */ le_uint32_t unknown_a4; + /* 00B0 */ le_uint32_t unknown_a5; + /* 00B4 */ le_uint32_t unknown_a6; + } __packed__ unknown_a9; + /* 00B8 */ le_uint32_t area = 0; + /* 00BC */ le_uint32_t flags2 = 0; /* 00C0 */ parray technique_levels_v1; // Last byte is uninitialized /* 00D4 */ PlayerVisualConfig visual; /* 0124 */ PlayerStats stats; @@ -4601,7 +4624,7 @@ struct G_SyncPlayerDispAndInventory_DC_PC_GC_6x70 { // the contents of a previous sync command) parray items; } __packed__ inventory; - /* 0494 */ le_uint32_t unknown_a15 = 0; + /* 0494 */ le_uint32_t floor = 0; /* 0498 */ } __packed__; diff --git a/src/LevelTable.hh b/src/LevelTable.hh index 62ff4f5d..8b1bfd5a 100644 --- a/src/LevelTable.hh +++ b/src/LevelTable.hh @@ -21,7 +21,7 @@ struct CharacterStats { struct PlayerStats { /* 00 */ CharacterStats char_stats; /* 0E */ le_uint16_t unknown_a1 = 0; - /* 10 */ le_float unknown_a2 = 0.0; + /* 10 */ le_float height = 0.0; /* 14 */ le_float unknown_a3 = 0.0; /* 18 */ le_uint32_t level = 0; /* 1C */ le_uint32_t experience = 0; diff --git a/src/QuestScript.cc b/src/QuestScript.cc index 541f1aeb..04f20c65 100644 --- a/src/QuestScript.cc +++ b/src/QuestScript.cc @@ -1387,7 +1387,7 @@ std::string disassemble_quest_script(const void* data, size_t size, QuestScriptV lines.emplace_back(string_printf(" %04zX ata %04hX /* %hu */", l->offset + offsetof(PlayerStats, char_stats.ata), stats.char_stats.ata.load(), stats.char_stats.ata.load())); lines.emplace_back(string_printf(" %04zX lck %04hX /* %hu */", l->offset + offsetof(PlayerStats, char_stats.lck), stats.char_stats.lck.load(), stats.char_stats.lck.load())); lines.emplace_back(string_printf(" %04zX a1 %04hX /* %hu */", l->offset + offsetof(PlayerStats, unknown_a1), stats.unknown_a1.load(), stats.unknown_a1.load())); - lines.emplace_back(string_printf(" %04zX a2 %08" PRIX32 " /* %g */", l->offset + offsetof(PlayerStats, unknown_a2), stats.unknown_a2.load_raw(), stats.unknown_a2.load())); + lines.emplace_back(string_printf(" %04zX height %08" PRIX32 " /* %g */", l->offset + offsetof(PlayerStats, height), stats.height.load_raw(), stats.height.load())); lines.emplace_back(string_printf(" %04zX a3 %08" PRIX32 " /* %g */", l->offset + offsetof(PlayerStats, unknown_a3), stats.unknown_a3.load_raw(), stats.unknown_a3.load())); lines.emplace_back(string_printf(" %04zX level %08" PRIX32 " /* level %" PRIu32 " */", l->offset + offsetof(PlayerStats, level), stats.level.load(), stats.level.load() + 1)); lines.emplace_back(string_printf(" %04zX experience %08" PRIX32 " /* %" PRIu32 " */", l->offset + offsetof(PlayerStats, experience), stats.experience.load(), stats.experience.load()));