update some notes; fix quest assembler bugs
This commit is contained in:
+13
-6
@@ -6201,7 +6201,7 @@ struct G_GiveExperience_Extension_BB_6xBF {
|
|||||||
le_uint16_t unused = 0;
|
le_uint16_t unused = 0;
|
||||||
} __packed_ws__(G_GiveExperience_Extension_BB_6xBF, 0x0C);
|
} __packed_ws__(G_GiveExperience_Extension_BB_6xBF, 0x0C);
|
||||||
|
|
||||||
// 6xC0: Sell item at shop (BB) (protected on V3/V4)
|
// 6xC0: Sell item at shop (BB) (protected)
|
||||||
|
|
||||||
struct G_SellItemAtShop_BB_6xC0 {
|
struct G_SellItemAtShop_BB_6xC0 {
|
||||||
G_UnusedHeader header;
|
G_UnusedHeader header;
|
||||||
@@ -6281,10 +6281,10 @@ struct G_AdjustPlayerMeseta_BB_6xC9 {
|
|||||||
|
|
||||||
// 6xCA: Request item reward from quest (BB; handled by server)
|
// 6xCA: Request item reward from quest (BB; handled by server)
|
||||||
|
|
||||||
struct G_ItemRewardRequest_BB_6xCA {
|
struct G_QuestCreateItem_BB_6xCA {
|
||||||
G_UnusedHeader header;
|
G_UnusedHeader header;
|
||||||
ItemData item_data;
|
ItemData item_data;
|
||||||
} __packed_ws__(G_ItemRewardRequest_BB_6xCA, 0x18);
|
} __packed_ws__(G_QuestCreateItem_BB_6xCA, 0x18);
|
||||||
|
|
||||||
// 6xCB: Transfer item via mail message (BB)
|
// 6xCB: Transfer item via mail message (BB)
|
||||||
|
|
||||||
@@ -6330,7 +6330,14 @@ struct G_ChallengeModeGraveRecoveryItemRequest_BB_6xD1 {
|
|||||||
le_uint16_t floor = 0;
|
le_uint16_t floor = 0;
|
||||||
le_uint16_t room_id = 0;
|
le_uint16_t room_id = 0;
|
||||||
VectorXZF pos;
|
VectorXZF pos;
|
||||||
le_uint32_t item_type = 0; // Should be < 6
|
// Values for item_type:
|
||||||
|
// 0 = Monomate x1
|
||||||
|
// 1 = Dimate x1
|
||||||
|
// 2 = Trimate x1
|
||||||
|
// 3 = Monofluid x1
|
||||||
|
// 4 = Difluid x1
|
||||||
|
// 5 = Trifluid x1
|
||||||
|
le_uint32_t item_type = 0;
|
||||||
} __packed_ws__(G_ChallengeModeGraveRecoveryItemRequest_BB_6xD1, 0x14);
|
} __packed_ws__(G_ChallengeModeGraveRecoveryItemRequest_BB_6xD1, 0x14);
|
||||||
|
|
||||||
// 6xD2: Set quest counter (BB)
|
// 6xD2: Set quest counter (BB)
|
||||||
@@ -6359,13 +6366,13 @@ struct G_Unknown_BB_6xD4 {
|
|||||||
// 6xD5: Exchange item in quest (BB; handled by server)
|
// 6xD5: Exchange item in quest (BB; handled by server)
|
||||||
// The client sends this when it executes an F953 quest opcode.
|
// The client sends this when it executes an F953 quest opcode.
|
||||||
|
|
||||||
struct G_ExchangeItemInQuest_BB_6xD5 {
|
struct G_QuestExchangeItem_BB_6xD5 {
|
||||||
G_ClientIDHeader header;
|
G_ClientIDHeader header;
|
||||||
ItemData find_item; // Only data1[0]-[2] are used
|
ItemData find_item; // Only data1[0]-[2] are used
|
||||||
ItemData replace_item; // Only data1[0]-[2] are used
|
ItemData replace_item; // Only data1[0]-[2] are used
|
||||||
le_uint16_t success_label = 0;
|
le_uint16_t success_label = 0;
|
||||||
le_uint16_t failure_label = 0;
|
le_uint16_t failure_label = 0;
|
||||||
} __packed_ws__(G_ExchangeItemInQuest_BB_6xD5, 0x30);
|
} __packed_ws__(G_QuestExchangeItem_BB_6xD5, 0x30);
|
||||||
|
|
||||||
// 6xD6: Wrap item (BB; handled by server)
|
// 6xD6: Wrap item (BB; handled by server)
|
||||||
|
|
||||||
|
|||||||
+7
-2
@@ -3351,10 +3351,15 @@ std::string disassemble_quest_script(
|
|||||||
} else {
|
} else {
|
||||||
dasm_line += "... ";
|
dasm_line += "... ";
|
||||||
|
|
||||||
if (def->args.size() != arg_stack_values.size()) {
|
if (def->args.size() > arg_stack_values.size()) {
|
||||||
dasm_line += std::format("/* matching error: expected {} arguments, received {} arguments */",
|
dasm_line += std::format("/* matching error: expected {} arguments, received {} arguments */",
|
||||||
def->args.size(), arg_stack_values.size());
|
def->args.size(), arg_stack_values.size());
|
||||||
} else {
|
} else {
|
||||||
|
if (def->args.size() < arg_stack_values.size()) {
|
||||||
|
dasm_line += std::format("/* warning: expected {} arguments, received {} arguments */",
|
||||||
|
def->args.size(), arg_stack_values.size());
|
||||||
|
}
|
||||||
|
|
||||||
bool is_first_arg = true;
|
bool is_first_arg = true;
|
||||||
for (size_t z = 0; z < def->args.size(); z++) {
|
for (size_t z = 0; z < def->args.size(); z++) {
|
||||||
const auto& arg_def = def->args[z];
|
const auto& arg_def = def->args[z];
|
||||||
@@ -3679,7 +3684,7 @@ std::string disassemble_quest_script(
|
|||||||
phosg::StringReader r = cmd_r.sub(l->offset, size);
|
phosg::StringReader r = cmd_r.sub(l->offset, size);
|
||||||
lines.emplace_back(" // As VectorXYZTF");
|
lines.emplace_back(" // As VectorXYZTF");
|
||||||
while (r.remaining() >= sizeof(VectorXYZTF)) {
|
while (r.remaining() >= sizeof(VectorXYZTF)) {
|
||||||
size_t offset = l->offset + cmd_r.where();
|
size_t offset = l->offset + r.where();
|
||||||
const auto& e = r.get<VectorXYZTF>();
|
const auto& e = r.get<VectorXYZTF>();
|
||||||
lines.emplace_back(std::format(" {:04X} vector x={:g}, y={:g}, z={:g}, t={:g}", offset, e.x, e.y, e.z, e.t));
|
lines.emplace_back(std::format(" {:04X} vector x={:g}, y={:g}, z={:g}, t={:g}", offset, e.x, e.y, e.z, e.t));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5683,6 +5683,4 @@ asio::awaitable<void> on_subcommand_multi(shared_ptr<Client> c, Channel::Message
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO; // Dark Falz EXP doesn't work
|
// NOCOMMIT: Make BB item creation opcodes use the quests' create masks
|
||||||
// TODO; // Guild Card Search doesn't work
|
|
||||||
// TODO; // Team Search doesn't work
|
|
||||||
|
|||||||
Reference in New Issue
Block a user