From 2818b4ac2fa09a3dc5847365cdaab41e3bcb342f Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Tue, 14 Nov 2023 23:50:46 -0800 Subject: [PATCH] clean up bit cast --- TODO.md | 1 - src/ChatCommands.cc | 13 ++++++------- src/CommandFormats.hh | 5 ++++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/TODO.md b/TODO.md index e6795b95..e09d0698 100644 --- a/TODO.md +++ b/TODO.md @@ -48,7 +48,6 @@ - 6xC1, 6xC2, 6xCD, 6xCE - 6xCC: Exchange item for team points - 6xD8: Add S-rank weapon special - - 6xDE: Good Luck quest - 6xE1: Gallon's Plan quest - Implement teams - Implement story progress flags for unlocking quests diff --git a/src/ChatCommands.cc b/src/ChatCommands.cc index 3a9b942b..6e28e857 100644 --- a/src/ChatCommands.cc +++ b/src/ChatCommands.cc @@ -316,19 +316,18 @@ static void server_command_qsync(shared_ptr c, const std::string& args) return; } - uint16_t reg_num = stoul(tokens[0].substr(1), nullptr, 0); - uint32_t reg_val; + G_SyncQuestData_6x77 cmd; + cmd.header = {0x77, 0x03, 0x0000}; + cmd.register_number = stoul(tokens[0].substr(1), nullptr, 0); + cmd.unused = 0; if (tokens[0][0] == 'r') { - reg_val = stoul(tokens[1], nullptr, 0); + cmd.value.as_int = stoul(tokens[1], nullptr, 0); } else if (tokens[0][0] == 'f') { - float float_val = stof(tokens[1]); - reg_val = *reinterpret_cast(&float_val); + cmd.value.as_float = stof(tokens[1]); } else { send_text_message(c, "$C6First argument must\nbe a register"); return; } - - G_SyncQuestData_6x77 cmd = {{0x77, 0x03, 0x0000}, reg_num, 0, reg_val}; send_command_t(c, 0x60, 0x00, cmd); } diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index 09a5a639..de489995 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -4706,7 +4706,10 @@ struct G_SyncQuestData_6x77 { G_UnusedHeader header; le_uint16_t register_number = 0; // Must be < 0x100 le_uint16_t unused = 0; - le_uint32_t value = 0; + union { + le_uint32_t as_int; + le_float as_float; + } __packed__ value; } __packed__; // 6x78: Unknown