describe quest opcode F8F2
This commit is contained in:
+21
-13
@@ -125,9 +125,12 @@ static string format_and_indent_data(const void* data, size_t size, uint64_t sta
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct UnknownF8F2Entry {
|
struct BezierCurveControlPoint {
|
||||||
parray<le_float, 4> unknown_a1;
|
le_float x;
|
||||||
} __packed_ws__(UnknownF8F2Entry, 0x10);
|
le_float y;
|
||||||
|
le_float z;
|
||||||
|
le_float t;
|
||||||
|
} __packed_ws__(BezierCurveControlPoint, 0x10);
|
||||||
|
|
||||||
struct QuestScriptOpcodeDefinition {
|
struct QuestScriptOpcodeDefinition {
|
||||||
struct Argument {
|
struct Argument {
|
||||||
@@ -158,7 +161,7 @@ struct QuestScriptOpcodeDefinition {
|
|||||||
ATTACK_DATA,
|
ATTACK_DATA,
|
||||||
MOVEMENT_DATA,
|
MOVEMENT_DATA,
|
||||||
IMAGE_DATA,
|
IMAGE_DATA,
|
||||||
UNKNOWN_F8F2_DATA,
|
BEZIER_CONTROL_POINT_DATA,
|
||||||
};
|
};
|
||||||
|
|
||||||
Type type;
|
Type type;
|
||||||
@@ -761,16 +764,21 @@ static const QuestScriptOpcodeDefinition opcode_defs[] = {
|
|||||||
{0xF8E6, "move_coords_object", "unknownF8E6", {REG, {REG_SET_FIXED, 3}}, F_V3_V4},
|
{0xF8E6, "move_coords_object", "unknownF8E6", {REG, {REG_SET_FIXED, 3}}, F_V3_V4},
|
||||||
{0xF8E7, "at_coords_call_ex", "unknownF8E7", {{REG_SET_FIXED, 5}, REG}, F_V3_V4},
|
{0xF8E7, "at_coords_call_ex", "unknownF8E7", {{REG_SET_FIXED, 5}, REG}, F_V3_V4},
|
||||||
{0xF8E8, "at_coords_talk_ex", "unknownF8E8", {{REG_SET_FIXED, 5}, REG}, F_V3_V4},
|
{0xF8E8, "at_coords_talk_ex", "unknownF8E8", {{REG_SET_FIXED, 5}, REG}, F_V3_V4},
|
||||||
{0xF8E9, "walk_to_coord_call_ex", "unknownF8E9", {{REG_SET_FIXED, 5}, REG}, F_V3_V4},
|
{0xF8E9, "npc_coords_call_ex", "unknownF8E9", {{REG_SET_FIXED, 5}, REG}, F_V3_V4},
|
||||||
{0xF8EA, "col_npcinr_ex", "unknownF8EA", {{REG_SET_FIXED, 6}, REG}, F_V3_V4},
|
{0xF8EA, "party_coords_call_ex", "unknownF8EA", {{REG_SET_FIXED, 6}, REG}, F_V3_V4},
|
||||||
{0xF8EB, "set_obj_param_ex", "unknownF8EB", {{REG_SET_FIXED, 6}, REG}, F_V3_V4},
|
{0xF8EB, "set_obj_param_ex", "unknownF8EB", {{REG_SET_FIXED, 6}, REG}, F_V3_V4},
|
||||||
{0xF8EC, "col_plinaw_ex", "unknownF8EC", {{REG_SET_FIXED, 9}, REG}, F_V3_V4},
|
{0xF8EC, "npc_check_straggle_ex", "unknownF8EC", {{REG_SET_FIXED, 9}, REG}, F_V3_V4},
|
||||||
{0xF8ED, "animation_check", nullptr, {REG, REG}, F_V3_V4},
|
{0xF8ED, "animation_check", nullptr, {REG, REG}, F_V3_V4},
|
||||||
{0xF8EE, "call_image_data", nullptr, {INT32, {LABEL16, Arg::DataType::IMAGE_DATA}}, F_V3_V4 | F_ARGS},
|
{0xF8EE, "call_image_data", nullptr, {INT32, {LABEL16, Arg::DataType::IMAGE_DATA}}, F_V3_V4 | F_ARGS},
|
||||||
{0xF8EF, "nop_F8EF", "unknownF8EF", {}, F_V3_V4},
|
{0xF8EF, "nop_F8EF", "unknownF8EF", {}, F_V3_V4},
|
||||||
{0xF8F0, "turn_off_bgm_p2", nullptr, {}, F_V3_V4},
|
{0xF8F0, "turn_off_bgm_p2", nullptr, {}, F_V3_V4},
|
||||||
{0xF8F1, "turn_on_bgm_p2", nullptr, {}, F_V3_V4},
|
{0xF8F1, "turn_on_bgm_p2", nullptr, {}, F_V3_V4},
|
||||||
{0xF8F2, "unknown_F8F2", "load_unk_data", {INT32, FLOAT32, FLOAT32, INT32, {REG_SET_FIXED, 4}, {LABEL16, Arg::DataType::UNKNOWN_F8F2_DATA}}, F_V3_V4 | F_ARGS}, // TODO (DX)
|
// argsA[0] is control point count
|
||||||
|
// argsA[1] and argsA[2] scale the control value sum
|
||||||
|
// argsA[3] determines whether the last point is included or not (0=excluded, 1=included)
|
||||||
|
// argsA[4] is the register set to return the result into (4 consecutive registers; x, y, z, success (0 or 1))
|
||||||
|
// argsA[5] points to the control point entries
|
||||||
|
{0xF8F2, "compute_bezier_curve_point", "load_unk_data", {INT32, FLOAT32, FLOAT32, INT32, {REG_SET_FIXED, 4}, {LABEL16, Arg::DataType::BEZIER_CONTROL_POINT_DATA}}, F_V3_V4 | F_ARGS},
|
||||||
{0xF8F3, "particle2", nullptr, {{REG_SET_FIXED, 3}, INT32, FLOAT32}, F_V3_V4 | F_ARGS},
|
{0xF8F3, "particle2", nullptr, {{REG_SET_FIXED, 3}, INT32, FLOAT32}, F_V3_V4 | F_ARGS},
|
||||||
{0xF901, "dec2float", nullptr, {REG, REG}, F_V3_V4},
|
{0xF901, "dec2float", nullptr, {REG, REG}, F_V3_V4},
|
||||||
{0xF902, "float2dec", nullptr, {REG, REG}, F_V3_V4},
|
{0xF902, "float2dec", nullptr, {REG, REG}, F_V3_V4},
|
||||||
@@ -1657,13 +1665,13 @@ std::string disassemble_quest_script(
|
|||||||
lines.emplace_back(format_and_indent_data(cmd_r.pgetv(compressed_end_offset, remaining_size), remaining_size, compressed_end_offset));
|
lines.emplace_back(format_and_indent_data(cmd_r.pgetv(compressed_end_offset, remaining_size), remaining_size, compressed_end_offset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (l->has_data_type(Arg::DataType::UNKNOWN_F8F2_DATA)) {
|
if (l->has_data_type(Arg::DataType::BEZIER_CONTROL_POINT_DATA)) {
|
||||||
phosg::StringReader r = cmd_r.sub(l->offset, size);
|
phosg::StringReader r = cmd_r.sub(l->offset, size);
|
||||||
lines.emplace_back(" // As F8F2 entries");
|
lines.emplace_back(" // As Bezier curve control points");
|
||||||
while (r.remaining() >= sizeof(UnknownF8F2Entry)) {
|
while (r.remaining() >= sizeof(BezierCurveControlPoint)) {
|
||||||
size_t offset = l->offset + cmd_r.where();
|
size_t offset = l->offset + cmd_r.where();
|
||||||
const auto& e = r.get<UnknownF8F2Entry>();
|
const auto& e = r.get<BezierCurveControlPoint>();
|
||||||
lines.emplace_back(phosg::string_printf(" %04zX entry %g, %g, %g, %g", offset, e.unknown_a1[0].load(), e.unknown_a1[1].load(), e.unknown_a1[2].load(), e.unknown_a1[3].load()));
|
lines.emplace_back(phosg::string_printf(" %04zX point x=%g, y=%g, z=%g, t=%g", offset, e.x.load(), e.y.load(), e.z.load(), e.t.load()));
|
||||||
}
|
}
|
||||||
if (r.remaining() > 0) {
|
if (r.remaining() > 0) {
|
||||||
size_t struct_end_offset = l->offset + r.where();
|
size_t struct_end_offset = l->offset + r.where();
|
||||||
|
|||||||
Reference in New Issue
Block a user