diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index e6bf1e4f..b18da279 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -4175,9 +4175,9 @@ struct G_DragonBossActions_6x10_6x11 { template struct G_DragonBossActionsT_6x12 { G_EntityIDHeader header; - le_uint16_t unknown_a2 = 0; + le_uint16_t phase = 0; le_uint16_t unknown_a3 = 0; - le_uint32_t unknown_a4 = 0; + le_uint32_t target_client_id = 0xFFFF; // 0xFFFF (not 0xFFFFFFFF) means no target F32T x = 0.0f; F32T z = 0.0f; } __attribute__((packed)); @@ -4190,30 +4190,31 @@ check_struct_size(G_DragonBossActions_GC_6x12, 0x14); struct G_DeRolLeBossActions_6x13 { G_EntityIDHeader header; - le_uint16_t unknown_a2 = 0; + le_uint16_t phase = 0; le_uint16_t unknown_a3 = 0; } __packed_ws__(G_DeRolLeBossActions_6x13, 8); // 6x14: De Rol Le boss actions (not valid on Episode 3) -struct G_DeRolLeBossActions_6x14 { +struct G_DeRolLeBossActionsWithTarget_6x14 { G_EntityIDHeader header; - le_uint16_t unknown_a2 = 0; + le_uint16_t phase = 0; le_uint16_t unknown_a3 = 0; - le_uint32_t unknown_a4 = 0; -} __packed_ws__(G_DeRolLeBossActions_6x14, 0x0C); + le_uint32_t target_client_id = 0xFFFF; // See 6x12 +} __packed_ws__(G_DeRolLeBossActionsWithTarget_6x14, 0x0C); // 6x15: Vol Opt boss actions (not valid on Episode 3) struct G_VolOptBossActions_6x15 { G_EntityIDHeader header; - le_uint16_t unknown_a2 = 0; + le_uint16_t action = 0; le_uint16_t unknown_a3 = 0; le_uint16_t unknown_a4 = 0; le_uint16_t unknown_a5 = 0; } __packed_ws__(G_VolOptBossActions_6x15, 0x0C); -// 6x16: Vol Opt boss actions (not valid on Episode 3) +// 6x16: Set Vol Opt entity index table (not valid on Episode 3) +// This command is used for shuffling the pillars during the first phase. struct G_VolOptBossActions_6x16 { G_EntityIDHeader header; diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index 59f26cff..ca62c493 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -3674,7 +3674,7 @@ static asio::awaitable on_dragon_actions_6x12(shared_ptr c, Subcom } G_DragonBossActions_GC_6x12 sw_cmd = {{cmd.header.subcommand, cmd.header.size, cmd.header.entity_id.load()}, - cmd.unknown_a2.load(), cmd.unknown_a3.load(), cmd.unknown_a4.load(), cmd.x.load(), cmd.z.load()}; + cmd.phase.load(), cmd.unknown_a3.load(), cmd.target_client_id.load(), cmd.x.load(), cmd.z.load()}; bool sender_is_be = is_big_endian(c->version()); for (auto lc : l->clients) { if (lc && (lc != c)) { @@ -5471,7 +5471,7 @@ const vector subcommand_definitions{ /* 6x11 */ {0x0F, 0x0F, 0x11, forward_subcommand_with_entity_id_transcode_t}, /* 6x12 */ {0x10, 0x10, 0x12, on_dragon_actions_6x12}, /* 6x13 */ {0x11, 0x11, 0x13, forward_subcommand_with_entity_id_transcode_t}, - /* 6x14 */ {0x12, 0x12, 0x14, forward_subcommand_with_entity_id_transcode_t}, + /* 6x14 */ {0x12, 0x12, 0x14, forward_subcommand_with_entity_id_transcode_t}, /* 6x15 */ {0x13, 0x13, 0x15, forward_subcommand_with_entity_id_transcode_t}, /* 6x16 */ {0x14, 0x14, 0x16, on_vol_opt_actions_t}, /* 6x17 */ {0x15, 0x15, 0x17, on_set_entity_pos_and_angle_6x17},