decomp3: spawn target, add merc and particle buckets and some temporary hacks (#3445)

This includes all the collision stuff needed to spawn `target`,
decompiles the sparticle code and adds some of the PC hacks needed for
merc to run (it doesn't work quite right and looks bad, likely due to a
combination of code copied from Jak 2 and the time of day hacks).

There are a bunch of temporary hacks (see commits) in place to prevent
the game from crashing quite as much, but it is still extremely prone to
doing so due to lots of missing functions/potentially bad decomp.

---------

Co-authored-by: water <awaterford111445@gmail.com>
This commit is contained in:
Hat Kid
2024-04-05 06:07:39 +02:00
committed by GitHub
parent a7efd59919
commit 93afb02cf4
581 changed files with 117237 additions and 3689 deletions
+5 -5
View File
@@ -147,7 +147,7 @@ void apply_formatting_config(
// Find the maximum number of columns
int max_columns = 0;
for (const auto& field : curr_node.refs) {
if (field.refs.size() > max_columns) {
if ((int)field.refs.size() > max_columns) {
max_columns = field.refs.size();
}
}
@@ -156,7 +156,7 @@ void apply_formatting_config(
for (int col = 0; col < max_columns; col++) {
column_max_widths.push_back(0);
for (const auto& field : curr_node.refs) {
if (field.refs.size() > col) {
if ((int)field.refs.size() > col) {
const auto width = get_total_form_inlined_width(field.refs.at(col));
if (width > column_max_widths.at(col)) {
column_max_widths[col] = width;
@@ -271,7 +271,7 @@ std::vector<std::string> apply_formatting(const FormatterTreeNode& curr_node,
val = comments::format_block_comment(ref.token_str());
}
form_lines.push_back(val);
if (!curr_node.metadata.is_top_level && i == curr_node.refs.size() - 1 &&
if (!curr_node.metadata.is_top_level && i == (int)curr_node.refs.size() - 1 &&
(ref.metadata.is_comment)) {
// if there's an inline comment at the end of a form, we have to force the paren to the next
// line and do a new-line paren this is ugly, but we have no choice!
@@ -354,9 +354,9 @@ std::vector<std::string> apply_formatting(const FormatterTreeNode& curr_node,
// Add any column padding
if (!curr_node.formatting_config.list_element_column_widths.empty()) {
for (int i = 0; i < form_lines.size(); i++) {
for (int i = 0; i < (int)form_lines.size(); i++) {
const auto& token = form_lines.at(i);
if (i < form_lines.size() - 1) {
if (i < (int)form_lines.size() - 1) {
form_lines[i] = str_util::pad_right(
token, curr_node.formatting_config.list_element_column_widths.at(i), ' ');
}
+1 -1
View File
@@ -187,4 +187,4 @@ std::vector<T*> Trie<T>::get_all_nodes() const {
std::vector<T*> result;
m_root.get_all_children(result);
return result;
}
}
+1 -1
View File
@@ -247,7 +247,7 @@ std::string titlize(const std::string& str) {
}
std::string pad_right(const std::string& input, const int width, const char padding_char) {
if (input.length() >= width) {
if ((int)input.length() >= width) {
return input; // No need to pad if input length is already greater or equal to width
} else {
int padding_width = width - input.length();
@@ -5505,6 +5505,14 @@ FormElement* ConditionElement::make_generic(const Env& env,
casted);
}
case IR2_Condition::Kind::LEQ_ZERO_UNSIGNED: {
auto casted = make_casts_if_needed(source_forms, types, TypeSpec("uint"), pool, env);
auto zero = pool.form<SimpleAtomElement>(SimpleAtom::make_int_constant(0));
casted.push_back(zero);
return pool.alloc_element<GenericElement>(GenericOperator::make_fixed(FixedOperatorKind::LEQ),
casted);
}
case IR2_Condition::Kind::GEQ_ZERO_SIGNED: {
return make_geq_zero_signed_check_generic(env, pool, source_forms, types);
}
+1 -1
View File
@@ -570,7 +570,7 @@ void inspect_cloth_data_jak3(LetElement* let, DefskelgroupElement::StaticInfo& i
auto array_set = dynamic_cast<SetFormFormElement*>(when_body->at(0));
if (array_set) {
// get elements
auto elts = when_body->elts().size() - 2;
auto elts = (int)when_body->elts().size() - 2;
for (int i = 0; i < elts; i++) {
auto parms_form = dynamic_cast<SetFormFormElement*>(when_body->at(i + 1));
if (parms_form) {
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -8,7 +8,7 @@
// if you want to filter to only some object names.
// it will make the decompiler much faster.
"allowed_objects": [],
"banned_objects": ["collide-shape", "spatial-hash"],
"banned_objects": [],
////////////////////////////
// CODE ANALYSIS OPTIONS
@@ -151,8 +151,249 @@
[12, "(function object :behavior com-airlock)"]
],
"default-menu": [
[3, "(function none)"],
[4, "(function none)"]
[3, "(function object)"],
[4, "(function object)"],
[5, "(function object)"],
[6, "(function object)"],
[7, "(function int debug-menu-msg object)"],
[8, "(function object)"],
[9, "(function object)"],
[10, "(function object)"],
[11, "(function object)"],
[12, "(function object)"],
[13, "(function object)"],
[14, "(function object)"],
[15, "(function object)"],
[16, "(function object)"],
[17, "(function object)"],
[18, "(function int debug-menu-msg float object)"],
[20, "(function object)"],
[21, "(function object)"],
[22, "(function object)"],
[23, "(function object)"],
[24, "(function object)"],
[25, "(function object)"],
[26, "(function object)"],
[27, "(function int debug-menu-msg float object)"],
[28, "(function int debug-menu-msg float object)"],
[29, "(function object)"],
[30, "(function int debug-menu-msg float object)"],
[31, "(function int debug-menu-msg float object)"],
[32, "(function int debug-menu-msg float object)"],
[33, "(function int debug-menu-msg float object)"],
[34, "(function object)"],
[35, "(function object)"],
[36, "(function int debug-menu-msg float object)"],
[37, "(function int debug-menu-msg float object)"],
[38, "(function int debug-menu-msg float object)"],
[39, "(function int debug-menu-msg float object)"],
[40, "(function object)"],
[41, "(function object)"],
[42, "(function int debug-menu-msg float object)"],
[43, "(function int debug-menu-msg float object)"],
[44, "(function int debug-menu-msg float object)"],
[45, "(function int debug-menu-msg float object)"],
[46, "(function int debug-menu-msg float object)"],
[47, "(function int debug-menu-msg float object)"],
[48, "(function int debug-menu-msg float object)"],
[49, "(function int debug-menu-msg float object)"],
[50, "(function int debug-menu-msg float object)"],
[51, "(function int debug-menu-msg float object)"],
[52, "(function int debug-menu-msg float object)"],
[53, "(function int debug-menu-msg float object)"],
[54, "(function int debug-menu-msg float object)"],
[55, "(function int debug-menu-msg float object)"],
[56, "(function int debug-menu-msg float object)"],
[57, "(function int debug-menu-msg float object)"],
[58, "(function int debug-menu-msg float object)"],
[59, "(function int debug-menu-msg float object)"],
[60, "(function int debug-menu-msg float object)"],
[61, "(function int debug-menu-msg float object)"],
[62, "(function int debug-menu-msg float object)"],
[63, "(function int debug-menu-msg float object)"],
[64, "(function int debug-menu-msg float object)"],
[65, "(function int debug-menu-msg float object)"],
[66, "(function int debug-menu-msg float object)"],
[67, "(function int debug-menu-msg float object)"],
[68, "(function int debug-menu-msg float object)"],
[69, "(function int debug-menu-msg float object)"],
[70, "(function int debug-menu-msg float object)"],
[71, "(function int debug-menu-msg float object)"],
[72, "(function int debug-menu-msg float object)"],
[73, "(function int debug-menu-msg float object)"],
[74, "(function int debug-menu-msg float object)"],
[75, "(function int debug-menu-msg float object)"],
[76, "(function int debug-menu-msg float object)"],
[77, "(function int debug-menu-msg float object)"],
[78, "(function int debug-menu-msg float object)"],
[79, "(function int debug-menu-msg float object)"],
[80, "(function int debug-menu-msg float object)"],
[81, "(function int debug-menu-msg float object)"],
[82, "(function int debug-menu-msg float object)"],
[83, "(function int debug-menu-msg float object)"],
[84, "(function int debug-menu-msg float object)"],
[85, "(function int debug-menu-msg float object)"],
[86, "(function int debug-menu-msg float object)"],
[87, "(function int debug-menu-msg float object)"],
[88, "(function int debug-menu-msg float object)"],
[89, "(function int debug-menu-msg float object)"],
[90, "(function int debug-menu-msg float object)"],
[91, "(function int debug-menu-msg float object)"],
[92, "(function int debug-menu-msg float object)"],
[93, "(function int debug-menu-msg float object)"],
[94, "(function int debug-menu-msg float object)"],
[95, "(function int debug-menu-msg float object)"],
[96, "(function int debug-menu-msg float object)"],
[97, "(function int debug-menu-msg float object)"],
[98, "(function int debug-menu-msg float object)"],
[99, "(function int debug-menu-msg float object)"],
[100, "(function int debug-menu-msg float object)"],
[101, "(function int debug-menu-msg float object)"],
[102, "(function int debug-menu-msg float object)"],
[103, "(function int debug-menu-msg float object)"],
[104, "(function int debug-menu-msg float object)"],
[105, "(function int debug-menu-msg float object)"],
[106, "(function int debug-menu-msg float object)"],
[107, "(function int debug-menu-msg float object)"],
[108, "(function int debug-menu-msg float object)"],
[109, "(function int debug-menu-msg float object)"],
[110, "(function int debug-menu-msg float object)"],
[111, "(function int debug-menu-msg float object)"],
[112, "(function int debug-menu-msg float object)"],
[113, "(function int debug-menu-msg float object)"],
[114, "(function int debug-menu-msg float object)"],
[115, "(function int debug-menu-msg float object)"],
[116, "(function int debug-menu-msg float object)"],
[117, "(function int debug-menu-msg float object)"],
[118, "(function int debug-menu-msg float object)"],
[119, "(function int debug-menu-msg float object)"],
[120, "(function int debug-menu-msg float object)"],
[121, "(function int debug-menu-msg float object)"],
[122, "(function int debug-menu-msg float object)"],
[123, "(function int debug-menu-msg float object)"],
[124, "(function int debug-menu-msg float object)"],
[125, "(function int debug-menu-msg float object)"],
[126, "(function int debug-menu-msg float object)"],
[127, "(function int debug-menu-msg float object)"],
[128, "(function int debug-menu-msg float object)"],
[129, "(function int debug-menu-msg float object)"],
[130, "(function int debug-menu-msg float object)"],
[131, "(function int debug-menu-msg float object)"],
[132, "(function int debug-menu-msg float object)"],
[133, "(function int debug-menu-msg float object)"],
[134, "(function int debug-menu-msg float object)"],
[135, "(function int debug-menu-msg float object)"],
[136, "(function int debug-menu-msg float object)"],
[137, "(function int debug-menu-msg float object)"],
[138, "(function int debug-menu-msg float object)"],
[139, "(function int debug-menu-msg float object)"],
[140, "(function int debug-menu-msg float object)"],
[141, "(function int debug-menu-msg float object)"],
[142, "(function int debug-menu-msg float object)"],
[143, "(function int debug-menu-msg float object)"],
[144, "(function int debug-menu-msg float object)"],
[145, "(function int debug-menu-msg float object)"],
[146, "(function int debug-menu-msg float object)"],
[147, "(function int debug-menu-msg float object)"],
[148, "(function int debug-menu-msg float object)"],
[149, "(function int debug-menu-msg float object)"],
[150, "(function int debug-menu-msg float object)"],
[151, "(function int debug-menu-msg float object)"],
[152, "(function int debug-menu-msg float object)"],
[153, "(function int debug-menu-msg float object)"],
[154, "(function int debug-menu-msg float object)"],
[155, "(function int debug-menu-msg float object)"],
[156, "(function int debug-menu-msg float object)"],
[157, "(function int debug-menu-msg float object)"],
[158, "(function int debug-menu-msg float object)"],
[159, "(function int debug-menu-msg float object)"],
[160, "(function object)"],
[161, "(function object)"],
[162, "(function object)"],
[163, "(function object)"],
[164, "(function object)"],
[165, "(function object)"],
[166, "(function object)"],
[167, "(function object)"],
[168, "(function int debug-menu-msg object)"],
[169, "(function int debug-menu-msg object)"],
[170, "(function int debug-menu-msg object)"],
[171, "(function int debug-menu-msg object)"],
[172, "(function int debug-menu-msg object)"],
[173, "(function int debug-menu-msg float object)"],
[174, "(function int debug-menu-msg float object)"],
[175, "(function int debug-menu-msg float object)"],
[176, "(function int debug-menu-msg float object)"],
[177, "(function int debug-menu-msg float object)"],
[178, "(function int debug-menu-msg float object)"],
[179, "(function int debug-menu-msg float object)"],
[180, "(function int debug-menu-msg float object)"],
[181, "(function int debug-menu-msg float object)"],
[182, "(function int debug-menu-msg float object)"],
[183, "(function int debug-menu-msg float object)"],
[184, "(function int debug-menu-msg float object)"],
[185, "(function int debug-menu-msg float object)"],
[186, "(function int debug-menu-msg float object)"],
[187, "(function int debug-menu-msg float object)"],
[188, "(function int debug-menu-msg float object)"],
[189, "(function int debug-menu-msg float object)"],
[190, "(function int debug-menu-msg float object)"],
[191, "(function int debug-menu-msg float object)"],
[192, "(function int debug-menu-msg float object)"],
[193, "(function int debug-menu-msg float object)"],
[194, "(function int debug-menu-msg float object)"],
[195, "(function int debug-menu-msg float object)"],
[196, "(function int debug-menu-msg float object)"],
[197, "(function int debug-menu-msg float object)"],
[198, "(function int debug-menu-msg float object)"],
[199, "(function int debug-menu-msg float object)"],
[200, "(function int debug-menu-msg float object)"],
[201, "(function int debug-menu-msg float object)"],
[202, "(function int debug-menu-msg float object)"],
[203, "(function int debug-menu-msg float object)"],
[204, "(function int debug-menu-msg float object)"],
[205, "(function int debug-menu-msg float object)"],
[206, "(function int debug-menu-msg float object)"],
[207, "(function int debug-menu-msg float object)"],
[208, "(function int debug-menu-msg float object)"],
[209, "(function int debug-menu-msg float object)"],
[210, "(function int debug-menu-msg float object)"],
[211, "(function int debug-menu-msg float object)"],
[212, "(function int debug-menu-msg float object)"],
[213, "(function int debug-menu-msg float object)"],
[214, "(function int debug-menu-msg float object)"],
[215, "(function symbol debug-menu-msg float float object)"],
[216, "(function symbol debug-menu-msg float float object)"],
[217, "(function int debug-menu-msg float object)"],
[218, "(function symbol debug-menu-msg float float object)"],
[219, "(function symbol debug-menu-msg float float object)"],
[220, "(function symbol debug-menu-msg float float object)"],
[221, "(function symbol debug-menu-msg float float object)"],
[222, "(function symbol debug-menu-msg float float object)"],
[223, "(function symbol debug-menu-msg float float object)"],
[224, "(function symbol debug-menu-msg float float object)"],
[225, "(function symbol debug-menu-msg float float object)"],
[226, "(function symbol debug-menu-msg float float object)"],
[227, "(function symbol debug-menu-msg float float object)"],
[228, "(function symbol debug-menu-msg float float object)"],
[229, "(function symbol debug-menu-msg float float object)"],
[230, "(function symbol debug-menu-msg float float object)"],
[231, "(function symbol debug-menu-msg float float object)"],
[232, "(function symbol debug-menu-msg float float object)"],
[233, "(function symbol debug-menu-msg float float object)"],
[234, "(function symbol debug-menu-msg float float object)"],
[235, "(function object)"],
[236, "(function object)"],
[237, "(function symbol debug-menu-msg float float object)"],
[239, "(function symbol debug-menu-msg object)"],
[240, "(function int debug-menu-msg float object)"],
[241, "(function int debug-menu-msg float object)"],
[242, "(function int debug-menu-msg float object)"],
[243, "(function int debug-menu-msg float object)"],
[244, "(function debug-menu debug-menu symbol)"],
[245, "(function debug-menu debug-menu symbol)"],
[246, "(function debug-menu debug-menu symbol)"],
[247, "(function debug-menu debug-menu symbol)"]
],
"enemy-states": [[38, "(function object :behavior enemy)"]],
"scene-actor": [
@@ -176,5 +417,133 @@
[16, "(function process object)"],
[57, "(function process object)"],
[61, "(function process object)"]
]
],
"target-darkjak": [
[5, "(function object :behavior target)"],
[
20,
"(function (pointer float) (pointer int64) (pointer int64) object :behavior target)"
],
[21, "(function object :behavior target)"]
],
"memory-usage": [
[2, "(function process-drawable symbol)"],
[3, "(function basic symbol)"]
],
"bug-report": [
[0, "(function object :behavior bug-report)"],
[1, "(function object :behavior bug-report)"]
],
"script": [
[0, "(function script-context (pointer prim-beam-tracker))"],
[1, "(function script-context symbol)"],
[2, "(function script-context object)"],
[3, "(function script-context object)"],
[4, "(function script-context object)"],
[5, "(function script-context object)"],
[6, "(function script-context object)"],
[7, "(function script-context object)"],
[8, "(function script-context object)"],
[9, "(function script-context object)"],
[10, "(function script-context object)"],
[11, "(function script-context object)"],
[12, "(function script-context object)"],
[13, "(function script-context object)"],
[14, "(function script-context int)"],
[15, "(function script-context object)"],
[16, "(function script-context object)"],
[17, "(function script-context object)"],
[18, "(function script-context object)"],
[19, "(function script-context object)"],
[20, "(function script-context object)"],
[21, "(function script-context object)"],
[22, "(function script-context object)"],
[23, "(function script-context object)"],
[24, "(function script-context symbol)"],
[25, "(function script-context symbol)"],
[26, "(function script-context symbol)"],
[27, "(function script-context symbol)"],
[28, "(function script-context object)"],
[29, "(function script-context symbol)"],
[30, "(function script-context object)"],
[31, "(function script-context object)"],
[32, "(function script-context symbol)"],
[33, "(function script-context symbol)"],
[34, "(function script-context symbol)"],
[35, "(function script-context object)"],
[36, "(function script-context object)"],
[37, "(function script-context object)"],
[38, "(function script-context object)"],
[39, "(function script-context symbol)"],
[40, "(function script-context object)"],
[41, "(function script-context entity-perm-status)"],
[42, "(function script-context symbol)"],
[43, "(function basic symbol)"],
[44, "(function script-context (pointer process))"],
[45, "(function script-context int)"],
[46, "(function script-context object)"],
[47, "(function script-context object)"],
[48, "(function script-context object)"],
[49, "(function script-context symbol)"],
[50, "(function script-context region)"],
[51, "(function script-context drawable-region-prim)"],
[52, "(function script-context object)"],
[53, "(function script-context object)"],
[54, "(function script-context object)"],
[55, "(function script-context object)"],
[56, "(function script-context object)"],
[57, "(function script-context object)"],
[58, "(function script-context object)"],
[59, "(function script-context object)"],
[60, "(function script-context object)"],
[61, "(function script-context object)"],
[62, "(function script-context object)"],
[63, "(function script-context object)"],
[64, "(function script-context object)"],
[65, "(function script-context object)"],
[66, "(function script-context symbol)"],
[67, "(function script-context symbol)"],
[68, "(function script-context symbol)"],
[69, "(function script-context symbol)"],
[70, "(function script-context object)"],
[71, "(function script-context object)"],
[72, "(function script-context object)"],
[73, "(function script-context object)"],
[74, "(function script-context object)"],
[75, "(function script-context object)"],
[76, "(function script-context object)"],
[77, "(function script-context object)"],
[78, "(function script-context object)"],
[79, "(function script-context object)"],
[80, "(function script-context object)"],
[81, "(function script-context symbol)"],
[82, "(function script-context float)"],
[83, "(function script-context vector)"],
[84, "(function script-context meters)"],
[85, "(function script-context object)"],
[86, "(function script-context object)"],
[87, "(function script-context object)"],
[88, "(function script-context object)"],
[89, "(function script-context object)"],
[90, "(function script-context object)"],
[91, "(function script-context object)"],
[92, "(function script-context object)"],
[93, "(function script-context object)"],
[94, "(function script-context object)"],
[95, "(function script-context object)"],
[96, "(function script-context object)"],
[97, "(function script-context object)"],
[98, "(function script-context object)"],
[99, "(function script-context object)"],
[100, "(function script-context object)"],
[101, "(function script-context object)"],
[102, "(function script-context object)"],
[103, "(function script-context object)"],
[104, "(function script-context object)"],
[105, "(function script-context object)"],
[106, "(function script-context object)"],
[107, "(function script-context object)"],
[108, "(function script-context object)"]
],
"relocate": [[7, "(function sparticle-system sparticle-cpuinfo none)"]]
}
+42 -10
View File
@@ -105,8 +105,6 @@
"adgif-shader<-texture!",
// jak 3
"command-get-process",
"(anon-function 4 gun-states)",
"(method 10 manipulator)",
"(method 46 ff-squad-control)",
"(anon-function 65 temple-obs)",
@@ -114,7 +112,8 @@
"(method 33 rub-tower)",
"(method 261 crimson-guard)",
"(anon-function 25 volcanox-obs)",
"foreground-draw-hud"
"foreground-draw-hud",
"memcpy"
],
// these functions use pairs and the decompiler
@@ -355,7 +354,38 @@
"(method 9 los-control)": [0, 43],
"load-game-text-info": [19, 20, 21],
"draw-actor-marks": [8],
"find-nearest-entity": [7, 9]
"find-nearest-entity": [7, 9],
"(method 13 collide-cache)": [7, 9],
"(method 11 collide-mesh)": [2, 4],
"(method 12 collide-mesh-cache)": [0, 1, 2, 3, 4, 5],
"(method 10 collide-mesh)": [2],
"(method 42 collide-shape)": [0, 1, 2, 3, 4, 7],
"(method 18 collide-shape-prim-mesh)": [2, 3, 4, 5, 6, 7],
"(method 18 collide-shape-prim-sphere)": [2, 3, 4],
"(method 15 collide-shape-prim-sphere)": [1, 2, 3, 4, 5, 6],
"(method 16 collide-shape-prim-sphere)": [0, 1, 2, 3, 4],
"(method 36 collide-shape)": [8, 9],
"(method 45 collide-shape)": [33],
"(method 40 collide-shape)": [
0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32
],
"(method 12 collide-shape-prim-group)": [1, 2, 3, 4, 5, 6],
"(method 13 collide-shape-prim)": [1, 2, 3, 4, 5, 6],
"(method 12 collide-shape-prim-sphere)": [
1, 2, 3, 4, 5, 8, 10, 11, 13, 14, 15
],
"(method 12 collide-shape-prim-mesh)": [
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16
],
"update-actor-hash": [0, 2, 4],
"(method 24 grid-hash)": [39, 35, 22, 15],
"(anon-function 4 gun-states)": [
18, 128, 129, 131, 133, 135, 138, 139, 143
],
"(method 16 sparticle-launch-control)": [25, 35, 36, 48, 62, 65, 100, 102],
"(anon-function 17 target-ladder)": [0, 1],
"command-get-process": [46]
},
// Sometimes the game might use format strings that are fetched dynamically,
@@ -423,7 +453,6 @@
"fill-bg-using-box-new",
"fill-bg-using-line-sphere-new",
"(method 12 collide-mesh)",
"(method 11 collide-mesh)",
"(method 14 collide-mesh)",
"(method 15 collide-mesh)",
"(method 10 collide-edge-hold-list)",
@@ -448,11 +477,11 @@
"(method 30 sphere-hash)",
"(method 31 sphere-hash)",
"(method 32 sphere-hash)",
"(method 33 spatial-hash)",
"(method 39 spatial-hash)",
"(method 36 spatial-hash)",
"(method 37 spatial-hash)",
"(method 32 spatial-hash)",
"(method 34 spatial-hash)",
"(method 35 spatial-hash)",
"(method 36 spatial-hash)",
"(method 38 spatial-hash)",
"(method 10 collide-shape-prim-mesh)",
"(method 10 collide-shape-prim-sphere)",
"(method 10 collide-shape-prim-group)",
@@ -530,7 +559,10 @@
["pow", 0, 0],
["wasintro", 0, 0],
["lfacctyb", 0, 0],
["intpfall", 0, 0]
["intpfall", 0, 0],
["lfaccity", 0, 0],
["ltowcity", 0, 0],
["powergd", 0, 0]
],
// some object files have garbage pad data at the end which makes the decompiler
+3 -3
View File
@@ -11,7 +11,7 @@
//"CGO/ART.CGO",
"CGO/KERNEL.CGO",
// "CGO/ENGINE.CGO",
"CGO/GAME.CGO"
"CGO/GAME.CGO",
// "CGO/COMMON.CGO",
// "DGO/LJKDMPK.DGO",
// "DGO/LBBSDRP1.DGO",
@@ -188,7 +188,7 @@
// "DGO/DESC.DGO",
// "DGO/LDAMPECK.DGO",
// "DGO/LJAKSIG.DGO",
// "DGO/HALFPIPE.DGO",
"DGO/HALFPIPE.DGO",
// "DGO/DESRACE1.DGO",
// "DGO/SEN.DGO",
// "DGO/TEMP.DGO",
@@ -260,7 +260,7 @@
// "DGO/WASPALA.DGO",
// "DGO/LJAKNDAX.DGO",
// "DGO/WASSEEM.DGO",
// "DGO/WASALL.DGO",
"DGO/WASALL.DGO"
// "DGO/WCASEEM.DGO",
// "DGO/LSIG.DGO",
// "DGO/LFACTORY.DGO",
@@ -490,5 +490,75 @@
["L705", "uint64", true],
["L706", "uint64", true]
],
"gun-part": [["L537", "(pointer rgba)", 36]]
"gun-part": [["L537", "(pointer rgba)", 36]],
"target-darkjak": [
["L526", "uint64", true],
["L506", "uint64", true],
["L500", "uint64", true],
["L504", "uint64", true],
["L499", "uint64", true],
["L507", "uint64", true],
["L497", "uint64", true],
["L498", "uint64", true],
["L509", "uint64", true],
["L494", "uint64", true],
["L508", "uint64", true],
["L496", "uint64", true],
["L450", "attack-info"],
["L505", "uint64", true],
["L495", "uint64", true],
["L503", "uint64", true],
["L501", "uint64", true],
["L502", "uint64", true]
],
"gun-blue-shot": [
["L405", "(inline-array vector)", 20],
["L404", "(pointer int32)", 12]
],
"collide-shape": [
["L372", "attack-info"],
["L379", "vector"],
["L392", "attack-info"],
["L391", "attack-info"],
["L390", "attack-info"],
["L389", "attack-info"],
["L388", "attack-info"],
["L387", "attack-info"],
["L386", "attack-info"],
["L385", "attack-info"],
["L384", "attack-info"],
["L383", "attack-info"],
["L382", "attack-info"]
],
"collide-cache": [["L184", "vector"]],
"default-menu": [
["L6792", "attack-info"],
["L6786", "attack-info"],
["L7268", "uint64", true],
["L7274", "uint64", true],
["L7271", "uint64", true],
["L7267", "uint64", true],
["L7269", "uint64", true],
["L7273", "uint64", true],
["L7272", "uint64", true],
["L7270", "uint64", true]
],
"anim-tester": [
["L705", "uint64", true],
["L701", "uint64", true],
["L700", "uint64", true],
["L704", "uint64", true],
["L699", "uint64", true],
["L698", "uint64", true],
["L703", "uint64", true],
["L702", "uint64", true]
],
"target-part": [["L627", "uint64", true]],
"script": [
["L3032", "vector"],
["L1164", "attack-info"],
["L2329", "attack-info"],
["L2328", "attack-info"],
["L2578", "vector"]
]
}
@@ -1,4 +1,5 @@
// This overrides the stack size for calls to stack-size-set! in given functions.
{
"(method 29 target)": 2048
"(method 29 target)": 2048,
"(method 11 part-spawner)": 64
}
@@ -545,5 +545,176 @@
"(method 22 gun-gravity)": [
[112, ["array", "collide-shape", 384]],
[16, "vector"]
],
"target-bomb1-fire-shot": [
[96, "vector"],
[112, "vector"]
],
"(code target-darkjak-smack)": [[112, "projectile-init-by-other-params"]],
"(method 25 darkjak-ball)": [[32, "vector"]],
"sparticle-track-hadouken": [[16, "vector"]],
"sparticle-red-2-converge": [[16, "vector"]],
"(method 9 rope-constraint)": [
[16, "vector"],
[32, "vector"]
],
"(method 26 gun-blue-shot)": [[32, "vector"]],
"(method 24 gun-blue-shot)": [[96, "vector"]],
"gun-fire-blue-2": [[16, "gun-blue-lightning-command"]],
"gun-fire-blue-2-old": [
[16, "gun-blue-lightning-command"],
[752, "vector"],
[704, "vector"],
[736, "vector"],
[816, "vector"]
],
"find-gun-blue-2-target-old": [
[48, ["array", "collide-shape", 384]],
[16, "vector"]
],
"find-gun-blue-2-target": [
[48, ["array", "collide-shape", 384]],
[16, "vector"]
],
"(method 31 gun-blue-shot-3)": [[16, "light-trail-tracker-spawn-params"]],
"gun-blue-shot-3-move": [[160, "dist-dot-val"]],
"gun-fire-blue-3": [
[16, "projectile-init-by-other-params"],
[160, "vector"],
[3968, "vector"],
[176, ["inline-array", "target-quality-info", 384]],
[1312, ["array", "collide-shape", 384]]
],
"create-lightning-tracker-if-necessary": [
[16, "gun-blue-2-lightning-init-params"]
],
"(method 25 gun-blue-2-lightning-tracker)": [
[32, "gun-blue-lightning-command"],
[704, "vector"],
[736, "collide-query"]
],
"collide-list-fill-bg-using-line-sphere": [
[32, "matrix"],
[96, "collide-query"]
],
"collide-list-fill-bg-using-box": [
[32, "matrix"],
[96, "collide-query"]
],
"add-collide-debug-box": [[16, "bounding-box"]],
"(method 10 collide-mesh)": [[16, "oot-work"]],
"(method 9 touching-list)": [[16, "add-prims-touching-work"]],
"(method 9 collide-edge-edge)": [
[16, "matrix"],
[80, ["inline-array", "sphere", 6]],
[176, "collide-query"]
],
"(method 13 collide-edge-work)": [[16, "faei-stack-vars"]],
"(method 50 collide-shape)": [[32, "vector"]],
"(method 45 collide-shape)": [[16, "do-push-aways-work"]],
"(method 18 collide-shape-prim-mesh)": [[16, "collide-tri-result"]],
"(method 15 collide-shape-prim-sphere)": [[16, "collide-tri-result"]],
"cshape-reaction-update-state": [
[16, "vector"],
[32, "vector"]
],
"(method 37 control-info)": [[48, "vector"]],
"(method 23 grid-hash)": [
[16, "grid-hash-box"],
[32, "grid-hash-box"],
[48, "vector"],
[64, "vector"]
],
"(method 11 grid-hash)": [
[16, "vector"],
[32, "vector"]
],
"draw-grid": [
[16, "vector"],
[32, "vector"],
[48, "vector"]
],
"(method 9 actor-hash-buckets)": [
[16, ["inline-array", "vector", 2]],
[48, ["inline-array", "vector", 2]]
],
"(method 15 sphere-hash)": [[16, "vector"]],
"(method 33 spatial-hash)": [[16, ["inline-array", "vector", 2]]],
"(method 24 grid-hash)": [[16, "vector"]],
"(method 14 collide-cache)": [[16, "bounding-box"]],
"(method 16 collide-cache)": [[16, "collide-cache-tri"]],
"(method 20 collide-cache)": [[16, "matrix"]],
"col-rend-draw": [[16, "matrix"]],
"(method 11 collide-mesh)": [[16, "spat-work"]],
"(method 11 manipulator)": [[80, "vector"]],
"draw-axis": [
[32, "vector"],
[48, "vector"],
[64, "vector"],
[96, "vector"],
[112, "vector"]
],
"(method 16 bug-report)": [
[160, ["array", "float", 9]],
[48, "vector"],
[64, "vector"]
],
"particle-adgif-callback": [[16, ["inline-array", "vector", 4]]],
"sp-adjust-launch": [[16, "matrix"]],
"sp-launch-particles-death": [[16, "matrix"]],
"sp-relaunch-setup-fields": [[16, "matrix"]],
"sparticle-respawn-timer": [[16, "vector"]],
"sparticle-respawn-heights": [[16, "vector"]],
"sparticle-rotate-to-vel-3d": [[16, "vector"]],
"spt-func-turn-to-vel-radial": [[16, "vector"]],
"spt-func-relative-pos": [
[16, "vector"],
[32, "vector"],
[48, "vector"],
[64, "matrix"],
[128, "matrix"],
[192, "matrix"]
],
"sparticle-3d-rotate-xz-to-camera": [[16, "vector"]],
"sparticle-3d-rotate-xz-to-camera-eco-shaft": [[16, "vector"]],
"sparticle-2d-spline-align-instant": [[16, "vector"]],
"birth-func-converge": [[16, "vector"]],
"check-shell-level2": [[16, "vector"]],
"check-shell-level1": [[16, "vector"]],
"process-drawable-burn-effect": [[32, "rgbaf"]],
"birth-func-vector-orient": [
[16, "vector"],
[32, "vector"],
[48, "vector"]
],
"birth-func-target-orient": [[48, "vector"]],
"process-drawable-shock-skel-effect": [
[176, "matrix"],
[256, "vector"],
[272, "vector"],
[288, "vector"],
[304, "quaternion"],
[384, "vector"]
],
"process-drawable-shock-effect": [
[80, "collide-query"],
[16, "matrix"]
],
"process-drawable-shock-effect-replace": [
[80, "collide-query"],
[16, "matrix"]
],
"(trans target-ladder-walk-up)": [[96, "vector"]],
"(trans target-ladder-walk-down)": [[96, "vector"]],
"(post target-ladder)": [[96, "matrix"]],
"(anon-function 0 script)": [[16, "prim-beam-tracker-params"]],
"(anon-function 47 script)": [[16, "vector"]],
"(anon-function 48 script)": [
[16, "vector"],
[32, "vector"]
],
"(anon-function 49 script)": [
[128, "part-tracker-subsampler-init-params"],
[176, "part-tracker-init-params"]
]
}
+820 -4
View File
@@ -711,7 +711,7 @@
[
617,
"s0",
"(function symbol symbol continue-point game-save resetter-spec none :behavior process)"
"(function cpu-thread function symbol symbol continue-point game-save resetter-spec none)"
]
],
"(method 9 lod-set)": [["_stack_", 16, "res-tag"]],
@@ -1054,10 +1054,14 @@
[146, "v1", "region-prim-area"],
[129, "a1", "region-prim-area"],
[103, "v1", "region-prim-area"],
[[19, 29], "v1", "region-prim-area"]
[[19, 29], "v1", "region-prim-area"],
[39, "a0", "region-prim-area"],
[45, "a0", "region-prim-area"],
[51, "a0", "region-prim-area"],
[32, "a0", "region-prim-area"]
],
"(method 16 drawable-inline-array-region-prim)": [
[1, "v1", "drawable-region-prim"]
[[1, 7], "v1", "drawable-region-prim"]
],
"clone-anim-once": [
[22, "gp", "process-drawable"],
@@ -1234,7 +1238,10 @@
[45, "v1", "process-drawable"],
[54, "v1", "process-drawable"]
],
"local-space-proc-joint": [[12, "a2", "process-drawable"]],
"local-space-proc-joint": [
[12, "a2", "process-drawable"],
[14, "a1", "int"]
],
"part-tracker-init": [
[65, "s4", "particle-local-space-info"],
[68, "s4", "particle-local-space-info"],
@@ -3813,5 +3820,814 @@
[[255, 266], "t0", "vector4w"],
[[266, 273], "a1", "vector4w"],
[[274, 280], "v1", "vector4w"]
],
"darkjak-ball-move": [
[52, "v1", "collide-shape-prim-group"],
[56, "a0", "collide-shape-prim-group"]
],
"(code target-darkjak-get-on)": [[280, "v1", "art-joint-anim"]],
"(code target-darkjak-bomb0)": [
["_stack_", 16, "float"],
["_stack_", 20, "float"],
[37, "v1", "art-joint-anim"],
[133, "v1", "art-joint-anim"],
[213, "v1", "art-joint-anim"],
[692, "v1", "process-drawable"],
[793, "v1", "manipy"]
],
"darkjak-ball-slide-reaction": [[23, "v1", "darkjak-ball"]],
"(code target-darkjak-smack-charge)": [[95, "v1", "art-joint-anim"]],
"(exit target-darkjak-smack-charge)": [[61, "v0", "sound-rpc-set-param"]],
"(anon-function 21 target-darkjak)": [[62, "gp", "art-joint-anim"]],
"(code target-darkjak-running-attack)": [
[258, "gp", "process-focusable"],
["_stack_", 16, "float"],
["_stack_", 20, "float"],
["_stack_", 48, "float"],
["_stack_", 56, "handle"],
[577, "v1", "art-joint-anim"],
[605, "v1", "art-joint-anim"],
[633, "v1", "art-joint-anim"],
[673, "v1", "art-joint-anim"],
[701, "v1", "art-joint-anim"],
[897, "v1", "art-joint-anim"]
],
"(code target-darkjak-get-off)": [
[174, "v1", "art-joint-anim"],
[332, "v1", "art-joint-anim"],
[424, "v1", "art-joint-anim"]
],
"(anon-function 20 target-darkjak)": [
[120, "v1", "art-joint-anim"],
[151, "v1", "art-joint-anim"]
],
"(code target-darkjak-bomb1)": [
[419, "v1", "art-joint-anim"],
["_stack_", 160, "float"],
["_stack_", 164, "float"]
],
"target-bomb1-fire-shot": [[21, "s5", "process-focusable"]],
"(code target-darkjak-smack)": [
[70, "gp", "art-joint-anim"],
[314, "v1", "art-joint-anim"],
[173, "f28", "float"],
[206, "f28", "float"],
[211, "f28", "float"],
[285, "f0", "float"]
],
"(method 37 darkjak-ball)": [
[72, "s0", "process-focusable"],
[81, "s0", "process-focusable"]
],
"(method 9 lightning-bolt)": [[132, "v1", "float"]],
"(method 9 darkjak-info)": [[71, "v0", "sound-rpc-set-param"]],
"(event target-darkjak-bomb0)": [[51, "v1", "process"]],
"sparticle-track-hadouken": [[[1, 8], "a3", "darkjak-ball"]],
"gun-fire-blue-1": [[76, "v0", "process"]],
"(event inactive gun-blue-2-lightning-tracker)": [
[4, "v1", "gun-blue-lightning-command"]
],
"(event active gun-blue-2-lightning-tracker)": [
[15, "v1", "gun-blue-lightning-command"]
],
"cshape-reaction-blue-shot": [[15, "v1", "gun-blue-shot"]],
"(method 24 gun-blue-shot)": [[26, "v0", "vector"]],
"gun-fire-blue-2-old": [
[182, "s3", "process-focusable"],
[261, "s5", "process-focusable"],
[265, "a0", "process-focusable"],
[419, "v0", "process"],
[264, "s5", "process-focusable"]
],
"find-gun-blue-2-target-old": [[54, "s1", "process-focusable"]],
"find-gun-blue-2-target": [[49, "s2", "process-focusable"]],
"is-valid-blue-2-target": [
[17, "v0", "process"],
[22, "s5", "process-focusable"]
],
"(method 31 gun-blue-shot-3)": [[51, "v1", "float"]],
"gun-blue-shot-3-move": [
[43, "a0", "process-focusable"],
[46, "a0", "process-focusable"]
],
"gun-fire-blue-3": [
[570, "a0", "process-focusable"],
[573, "a0", "process-focusable"],
[696, "s5", "process"],
[722, "v0", "process"],
[80, "s4", "process-focusable"],
[112, "s4", "process-focusable"],
[143, "s4", "process-focusable"],
[194, "s4", "process-focusable"],
["_stack_", 1296, "float"],
[444, "v1", "float"],
[499, "v1", "float"],
[519, "v1", "float"],
[539, "v1", "float"],
[633, "v1", "float"],
[657, "v1", "float"]
],
"(method 25 gun-blue-2-lightning-tracker)": [
[183, "s2", "process-focusable"],
[358, "v0", "process"]
],
"(method 26 gun-blue-2-lightning-tracker)": [[101, "v0", "process"]],
"(method 9 rope-constraint)": [["_stack_", 64, "vector"]],
"(top-level-login target-darkjak)": [
[255, "a0", "(function none :behavior target)"],
[254, "a0", "(state target)"]
],
"collide-list-fill-bg-using-line-sphere": [
[261, "a0", "collide-hash-scratch"],
[[279, 285], "v1", "collide-hash-scratch"],
[[246, 251], "v1", "collide-hash-scratch"],
[293, "a0", "collide-hash-scratch"],
[102, "v1", "float"]
],
"collide-list-fill-bg-using-box": [
[223, "a0", "collide-hash-scratch"],
[255, "a0", "collide-hash-scratch"],
[208, "v1", "collide-hash-scratch"],
[210, "v1", "collide-hash-scratch"],
[212, "v1", "collide-hash-scratch"],
[241, "v1", "collide-hash-scratch"],
[243, "v1", "collide-hash-scratch"],
[246, "v1", "collide-hash-scratch"]
],
"(method 8 collide-hash)": [
[47, "a2", "collide-hash-scratch"],
[59, "a2", "collide-hash-scratch"],
[31, "a1", "collide-hash-scratch"],
[70, "a1", "collide-hash-scratch"],
[63, "a0", "int"],
[51, "a3", "int"]
],
"(method 9 collide-mesh)": [
[17, "s5", "collide-mesh-tri"],
[22, "s5", "collide-mesh-tri"],
[27, "s5", "collide-mesh-tri"],
[32, "s5", "collide-mesh-tri"],
[62, "s5", "collide-mesh-tri"]
],
"(method 10 collide-mesh)": [[[13, 51], "s4", "collide-mesh-cache-tri"]],
"(method 13 collide-mesh)": [
[21, "a3", "(inline-array vector)"],
[[22, 61], "a3", "vector"],
[[20, 61], "t0", "(inline-array vector)"],
[[76, 123], "v1", "collide-mesh-tri"]
],
"(method 13 touching-list)": [[[0, 77], "v0", "touching-shapes-entry"]],
"(method 11 touching-list)": [
[8, "s5", "touching-shapes-entry"],
[11, "s5", "touching-shapes-entry"],
[13, "s5", "touching-shapes-entry"],
[48, "s5", "touching-shapes-entry"],
[52, "s5", "touching-shapes-entry"],
[10, "s5", "touching-shapes-entry"],
[33, "s5", "touching-shapes-entry"],
[50, "s5", "touching-shapes-entry"]
],
"(method 10 touching-list)": [[[5, 11], "s5", "touching-shapes-entry"]],
"(method 12 touching-list)": [
[4, "gp", "touching-shapes-entry"],
[6, "gp", "touching-shapes-entry"],
[17, "gp", "touching-shapes-entry"],
[32, "gp", "touching-shapes-entry"],
[103, "gp", "touching-shapes-entry"]
],
"(method 9 collide-edge-work)": [
[[5, 47], "s4", "collide-edge-hold-item"],
[[6, 49], "s3", "collide-edge-edge"]
],
"(method 9 collide-edge-edge)": [[20, "a0", "collide-shape-moving"]],
"(method 13 collide-edge-work)": [[[8, 119], "s1", "collide-edge-edge"]],
"(method 20 collide-edge-work)": [
[100, "a0", "collide-shape-moving"],
[179, "v1", "int"],
[179, "a1", "int"]
],
"collide-shape-draw-debug-marks": [
[24, "v1", "connection"],
[[24, 41], "a0", "collide-shape"],
[56, "v1", "connection"],
[[56, 70], "a0", "collide-shape"],
[88, "v1", "connection"],
[[88, 104], "a0", "collide-shape"],
[71, "a0", "collide-shape"]
],
"(method 50 collide-shape)": [
[30, "gp", "process-drawable"],
[32, "a1", "collide-shape"],
[66, "gp", "process-focusable"],
[70, "gp", "process-focusable"],
[78, "gp", "process-focusable"],
[82, "gp", "process-focusable"],
[99, "gp", "process-focusable"]
],
"(method 36 collide-shape)": [[[1, 40], "v1", "collide-shape-prim"]],
"(method 38 collide-shape)": [
[[42, 80], "s5", "collide-shape-prim-mesh"],
[34, "v0", "(array collide-mesh)"]
],
"(method 40 collide-shape)": [
[30, "a0", "connection"],
[31, "a0", "collide-shape"],
[79, "a0", "connection"],
[80, "a0", "collide-shape-moving"],
[156, "s4", "(pointer uint64)"]
],
"(method 45 collide-shape)": [
[28, "a0", "connection"],
[29, "a0", "collide-shape"],
[79, "a0", "connection"],
[80, "a0", "collide-shape-moving"],
[[224, 235], "s1", "collide-shape-moving"]
],
"(method 12 collide-shape-prim-sphere)": [
[17, "gp", "collide-shape-prim-mesh"]
],
"(method 13 collide-shape-prim)": [[[12, 43], "s4", "collide-shape-prim"]],
"(method 12 collide-shape-prim-group)": [
[[12, 43], "s4", "collide-shape-prim"]
],
"cshape-reaction-update-state": [["_stack_", 56, "collide-status"]],
"(method 17 collide-shape-prim-mesh)": [
[[6, 11], "s2", "collide-shape-prim-group"]
],
"(method 19 collide-shape-prim)": [[[3, 32], "s4", "collide-shape-prim"]],
"(method 18 collide-shape-prim-sphere)": [
[79, "s4", "collide-shape-prim-mesh"]
],
"(method 66 collide-shape-moving)": [[[29, 58], "s0", "collide-cache-prim"]],
"(method 56 collide-shape-moving)": [
[73, "a0", "process-focusable"],
[176, "a0", "process-focusable"]
],
"(method 18 collide-shape-prim-group)": [
[[3, 32], "s4", "collide-shape-prim"]
],
"(method 35 collide-shape)": [
[27, "a0", "connection"],
[28, "a0", "collide-shape"],
[76, "a0", "connection"],
[77, "a0", "collide-shape"]
],
"(method 44 collide-shape)": [[25, "a0", "process-drawable"]],
"(method 11 grid-hash)": [
[[141, 147], "t6", "pointer"],
[128, "t1", "pointer"],
[149, "t4", "pointer"],
[152, "t1", "pointer"]
],
"(method 9 actor-hash-buckets)": [
[20, "a0", "connection"],
[22, "a0", "collide-shape"],
[121, "v1", "connection"],
[124, "s4", "collide-shape"],
[[16, 160], "s4", "collide-shape"],
[89, "a0", "collide-shape"]
],
"(method 10 grid-hash)": [[12, "a0", "(pointer uint128)"]],
"(method 27 sphere-hash)": [[44, "s2", "(pointer int8)"]],
"(method 24 grid-hash)": [
[78, "a0", "(pointer uint128)"],
[191, "a3", "(pointer int8)"],
[195, "a1", "(pointer uint8)"],
[237, "v1", "(pointer uint128)"]
],
"(method 16 collide-cache)": [
[47, "a0", "collide-shape-prim-sphere"],
[17, "s4", "collide-cache-prim"],
[23, "s4", "collide-cache-prim"],
[27, "s4", "collide-cache-prim"],
[46, "s4", "collide-cache-prim"],
[65, "s4", "(inline-array collide-cache-prim)"]
],
"(method 20 collide-cache)": [
[50, "v1", "connection"],
[51, "s1", "collide-shape"],
[114, "v1", "connection"],
[115, "s1", "collide-shape"]
],
"(method 19 collide-cache)": [
[26, "a0", "connection"],
[27, "a0", "collide-shape"],
[105, "a0", "connection"],
[106, "a0", "collide-shape"]
],
"(method 12 collide-cache)": [
[114, "v1", "process-drawable"],
[74, "a0", "hfragment"],
[78, "a0", "hfragment"]
],
"(method 21 collide-cache)": [
[[81, 105], "a3", "(inline-array collide-cache-tri)"]
],
"(method 13 collide-cache)": [
[305, "a0", "hfragment"],
[341, "v1", "process-drawable"],
[309, "a0", "hfragment"]
],
"col-rend-draw": [
[[161, 217], "s5", "collide-cache-prim"],
[164, "v1", "collide-shape-prim-sphere"],
[[14, 152], "s3", "collide-cache-tri"],
[68, "a3", "int"],
[191, "a3", "int"]
],
"(method 9 collide-cache)": [
//[[28, 56], "gp", "collide-shape-prim"],
[33, "gp", "collide-cache-prim"],
[35, "gp", "collide-shape-prim"],
[[50, 56], "gp", "collide-cache-prim"],
[36, "v1", "collide-shape-prim-sphere"],
[[4, 26], "gp", "collide-cache-tri"]
],
"(method 9 collide-mesh-cache)": [
[[10, 83], "s4", "collide-mesh-cache-entry"],
[58, "a1", "int"]
],
"command-get-float": [[20, "gp", "bfloat"]],
"command-get-int": [[17, "gp", "bfloat"]],
"(anon-function 2 memory-usage)": [[211, "v1", "collide-shape-moving"]],
"(method 8 process-tree)": [
[33, "v1", "symbol"]
// [6, "a3", "symbol"]
],
"(method 11 memory-usage-block)": [[112, "v1", "int"]],
"(method 14 draw-control)": [
[38, "t9", "(function object object object none)"]
],
"build-instance-list": [
[33, "v1", "drawable-tree-instance-shrub"],
[85, "v1", "drawable-tree-instance-tie"]
],
"debug-menu-make-continue-sub-menu": [
[5, "v1", "symbol"],
[10, "v1", "level-load-info"],
[13, "v1", "level-load-info"],
[21, "v1", "continue-point"],
[47, "v1", "continue-point"],
[56, "v1", "continue-point"]
],
"(anon-function 218 default-menu)": [
[[2, 13], "v1", "texture-id"],
[[18, 29], "a1", "adgif-shader"],
[34, "v1", "texture-id"],
[[42, 44], "v1", "adgif-shader"]
],
"(anon-function 219 default-menu)": [
[[2, 13], "v1", "texture-id"],
[[18, 29], "a1", "adgif-shader"],
[34, "v1", "texture-id"],
[[42, 44], "v1", "adgif-shader"]
],
"(anon-function 220 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 221 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 222 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 223 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 224 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 225 default-menu)": [
[[2, 13], "v1", "texture-id"],
[[18, 29], "a1", "adgif-shader"],
[34, "v1", "texture-id"],
[[42, 44], "v1", "adgif-shader"]
],
"(anon-function 226 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 227 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 228 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 229 default-menu)": [
[[2, 13], "v1", "texture-id"],
[[18, 29], "a1", "adgif-shader"],
[34, "v1", "texture-id"],
[[42, 44], "v1", "adgif-shader"]
],
"(anon-function 230 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 231 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 232 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 233 default-menu)": [
[[2, 13], "v1", "texture-id"],
[[18, 29], "a1", "adgif-shader"],
[34, "v1", "texture-id"],
[[42, 44], "v1", "adgif-shader"]
],
"(anon-function 234 default-menu)": [
[[3, 13], "v1", "texture-id"],
[[20, 28], "a1", "adgif-shader"],
[33, "v1", "texture-id"],
[41, "v1", "adgif-shader"]
],
"(anon-function 237 default-menu)": [
[[30, 37], "s5", "adgif-shader"],
[[5, 25], "s4", "texture-id"]
],
"dm-float-field-tie-vanish-far-func": [
[25, "s2", "prototype-bucket-tie"],
[31, "s2", "prototype-bucket-tie"],
[28, "s2", "prototype-bucket-tie"],
[54, "s2", "prototype-bucket-tie"],
[55, "s2", "prototype-bucket-tie"]
],
"dm-float-field-tie-rvanish-func": [[[25, 56], "s2", "prototype-bucket-tie"]],
"all-texture-tweak-adjust": [[[35, 44], "s0", "adgif-shader"]],
"dm-debug-actor-lod-dist": [
[7, "v1", "process-drawable"],
[13, "v1", "process-drawable"],
[40, "v1", "process-drawable"],
[50, "v0", "(pointer float)"],
["_stack_", 16, "res-tag"]
],
"debug-create-cam-restore": [
[232, "a0", "level"],
[235, "a0", "level"]
],
"(anon-function 107 default-menu)": [[7, "v1", "target-flags"]],
"glst-length-of-longest-name": [[5, "s5", "glst-named-node"]],
"glst-find-node-by-name": [[6, "s5", "glst-named-node"]],
"(code target-gun-stance)": [
[870, "v1", "art-joint-anim"],
[184, "v1", "art-joint-anim"],
[280, "v1", "art-joint-anim"],
[377, "v1", "art-joint-anim"],
[485, "v1", "art-joint-anim"],
[573, "v1", "art-joint-anim"],
[633, "v1", "art-joint-anim"],
[693, "v1", "art-joint-anim"]
],
"execute-part-engine": [
[11, "v1", "connection"],
[12, "a0", "process-drawable"],
[13, "v1", "connection"],
[[19, 53], "s0", "vector"],
[23, "v1", "connection"],
[28, "v1", "connection"],
[29, "v1", "int"],
[137, "a3", "vector"],
[35, "a0", "process-drawable"]
],
"sparticle-track-root-prim": [[3, "v1", "collide-shape"]],
"sparticle-mode-animate": [
[5, "v1", "(array symbol)"],
[[7, 16], "a1", "(array uint32)"],
[18, "a1", "vector4w"],
[21, "a1", "(pointer int32)"],
[26, "a1", "(array int32)"],
[28, "v1", "(array int32)"],
[32, "a0", "(pointer int64)"],
// [33, "a0", "(pointer int64)"],
[44, "v1", "(pointer int32)"],
[46, "v1", "(pointer int32)"]
],
"birth-func-texture-group": [[[2, 12], "s5", "(array int32)"]],
"(method 10 sparticle-launcher)": [[[28, 72], "gp", "(array int32)"]],
"sparticle-texture-animate": [[[0, 48], "v1", "(array int32)"]],
"sparticle-respawn-timer": [[[4, 35], "gp", "(array int32)"]],
"sparticle-respawn-heights": [[[2, 59], "gp", "(array int32)"]],
"sparticle-texture-day-night": [[[2, 78], "s2", "(array int32)"]],
"execute-particle-local-space-engine": [
[6, "v1", "connection"],
[9, "v1", "connection"],
[10, "v1", "connection"],
[11, "t9", "(function object)"],
[15, "s5", "connection"],
[[29, 34], "a1", "particle-local-space-info"]
],
"birth-func-flip-based-on-scale": [
[4, "v1", "int"],
[16, "v1", "int"]
],
"forall-particles-runner": [
[[19, 28], "s4", "sparticle-cpuinfo"],
[34, "s4", "pointer"],
[35, "s3", "pointer"]
],
"(method 2 sparticle-cpuinfo)": [[14, "f0", "float"]],
"sp-orbiter": [[[78, 89], "v1", "sprite-vec-data-2d"]],
"forall-particles-with-key-runner": [
[32, "s3", "(inline-array sparticle-cpuinfo)"],
[42, "s3", "(inline-array sparticle-cpuinfo)"]
],
"sp-process-particle-system": [[14, "a1", "vector"]],
"(method 3 sparticle-launch-control)": [[40, "f0", "float"]],
"sp-kill-particle": [
[7, "a1", "uint"],
[7, "v1", "uint"]
],
"sp-relaunch-setup-fields": [
["_stack_", 80, "(inline-array sp-field-init-spec)"]
],
"eco-track-root-prim-fadeout": [[3, "a0", "collide-shape"]],
"process-drawable-burn-effect": [
[28, "a0", "process-drawable"],
[108, "v1", "process-drawable"],
[49, "a0", "process-drawable"],
[64, "a0", "process-drawable"]
],
"birth-func-vector-orient": [[[6, 23], "s3", "sprite-vec-data-2d"]],
"process-drawable-shock-skel-effect": [
[87, "v0", "(array cspace)"],
[248, "v1", "lightning-tracker"],
[250, "v1", "lightning-tracker"]
],
"process-drawable2-shock-effect": [[94, "a0", "lightning-tracker"]],
"process-drawable-shock-effect": [
[211, "a0", "lightning-tracker"],
[200, "v1", "lightning-tracker"]
],
"process-drawable-shock-effect-replace": [
[208, "a0", "lightning-tracker"],
[197, "v1", "lightning-tracker"]
],
"board-zap-track": [[14, "v1", "process-drawable"]],
"(event active ladder)": [
[21, "v1", "float"],
[43, "v1", "vector"]
],
"(event idle ladder)": [
[32, "s2", "process-focusable"],
[14, "a0", "process-focusable"],
[35, "s2", "process-focusable"]
],
"(code target-ladder-stance)": [
[180, "v1", "art-joint-anim"],
[80, "v1", "art-joint-anim"]
],
"(code target-ladder-walk-down)": [
[88, "v0", "float"],
[89, "v1", "float"]
],
"(code target-ladder-switch)": [[16, "v1", "art-joint-anim"]],
"(code target-ladder-jump-off)": [[17, "v1", "art-joint-anim"]],
"(code target-ladder-slide-down)": [[73, "v1", "art-joint-anim"]],
"(exit target-ladder-slide-down)": [[2, "v0", "sound-rpc-set-param"]],
"(code target-ladder-walk-up)": [
[123, "v0", "float"],
[124, "v1", "float"]
],
"(trans target-ladder-walk-up)": [
[45, "v0", "float"],
[119, "v0", "float"],
[[46, 56], "v1", "float"]
],
"(post target-ladder-start)": [[28, "t9", "(function none)"]],
"(code target-ladder-start)": [
[20, "v1", "art-joint-anim"],
[77, "v1", "art-joint-anim"]
],
"(post target-ladder-slide-down)": [
[65, "t9", "(function none)"],
[3, "f0", "float"],
[34, "f0", "float"],
[51, "v0", "float"],
[52, "v1", "float"]
],
"(trans target-ladder-walk-down)": [
[45, "v0", "float"],
[[45, 56], "v1", "float"],
[118, "v0", "float"],
[119, "v1", "float"]
],
"(post target-ladder)": [[41, "v0", "matrix"]],
"(trans target-ladder)": [[100, "v0", "float"]],
"region-prim-lookup-by-id": [[45, "t6", "drawable-region-prim"]],
"(method 18 drawable-tree-region-prim)": [
[[22, 49], "s2", "drawable-region-prim"],
[5, "a0", "region-prim-area"]
],
"(method 9 region)": [
[[55, 60], "a0", "drawable-region-prim"],
[58, "v1", "region-prim-area"],
[4, "a0", "region-prim-area"],
[50, "v1", "drawable-region-prim"]
],
"(method 17 drawable-tree-region-prim)": [
[[23, 28], "a0", "drawable-region-prim"],
[4, "a0", "region-prim-area"]
],
"command-get-trans": [
[40, "v1", "process-drawable"],
[43, "v1", "process-drawable"],
[63, "s4", "process-drawable"],
[67, "s4", "process-drawable"],
[70, "s4", "process-drawable"],
[76, "v0", "joint"],
[78, "s4", "process-drawable"]
],
"command-get-entity": [[10, "gp", "process"]],
"command-get-param": [[122, "gp", "bfloat"]],
"command-get-time": [[119, "gp", "bfloat"]],
"(anon-function 0 script)": [
[48, "s0", "process-drawable"],
[53, "s0", "process-drawable"],
[55, "s0", "process-drawable"],
[61, "v0", "joint"],
[69, "s2", "process-drawable"],
[74, "s2", "process-drawable"],
[76, "s2", "process-drawable"],
[82, "v0", "joint"]
],
"(anon-function 29 script)": [
[12, "v1", "symbol"],
[10, "s4", "game-task-node-info"]
],
"(anon-function 38 script)": [
[16, "a0", "entity-actor"],
[20, "a0", "entity-actor"]
],
"(anon-function 42 script)": [[5, "v1", "symbol"]],
"(anon-function 47 script)": [
[44, "s4", "process-drawable"],
[48, "s4", "process-drawable"],
[53, "s4", "process-drawable"],
[59, "v0", "joint"],
[65, "s4", "process-drawable"],
[79, "s4", "process-drawable"],
[81, "s4", "process-drawable"],
[84, "s4", "process-drawable"],
[86, "s4", "process-drawable"],
[94, "gp", "(function process-drawable cspace none)"]
],
"(anon-function 48 script)": [
[94, "gp", "process-drawable"],
[101, "v0", "joint"],
[109, "gp", "process-drawable"],
[134, "s4", "process-drawable"],
[141, "v0", "joint"],
[149, "s4", "process-drawable"],
[169, "s4", "process-drawable"],
[163, "s4", "process-drawable"],
[123, "gp", "process-drawable"],
[129, "gp", "process-drawable"]
],
"(anon-function 49 script)": [
[131, "a0", "process-drawable"],
[137, "v1", "process-drawable"],
[140, "v1", "process-drawable"],
[146, "v0", "joint"],
[155, "a0", "process-drawable"],
[183, "a0", "process-drawable"],
[191, "a0", "process-drawable"],
[91, "s3", "drawable-region-prim"]
],
"(anon-function 62 script)": [[24, "v0", "float"]],
"(anon-function 65 script)": [
[10, "s4", "pair"],
[16, "s5", "entity-actor"],
[42, "s4", "pair"],
[43, "s4", "pair"]
],
"(anon-function 66 script)": [
[10, "gp", "pair"],
[55, "gp", "pair"],
[56, "gp", "pair"]
],
"(anon-function 69 script)": [
[14, "s5", "pair"],
[11, "s4", "process-focusable"],
[180, "s5", "pair"],
[181, "s5", "pair"]
],
"(anon-function 70 script)": [[49, "v1", "process"]],
"(anon-function 71 script)": [[66, "v1", "process"]],
"(anon-function 15 script)": [
[17, "v1", "pair"],
[30, "v1", "pair"],
[31, "v1", "pair"]
],
"(anon-function 9 script)": [
[35, "s5", "pair"],
[37, "a2", "symbol"],
[78, "v1", "process-drawable"],
[83, "a0", "process-drawable"],
[89, "v1", "process-drawable"],
[95, "v0", "joint"],
[67, "s5", "pair"],
[68, "s5", "pair"]
],
"(anon-function 84 script)": [[21, "v1", "bfloat"]],
"(method 9 script-context)": [[138, "a0", "symbol"]],
"(anon-function 101 script)": [
[3, "s5", "pair"],
[9, "s5", "pair"],
[10, "s5", "pair"]
],
"(anon-function 97 script)": [
[3, "s5", "pair"],
[13, "s5", "pair"],
[14, "s5", "pair"]
],
"(anon-function 96 script)": [
[3, "s5", "pair"],
[14, "s5", "pair"],
[15, "s5", "pair"]
],
"(anon-function 95 script)": [
[5, "s5", "pair"],
[11, "s5", "pair"],
[12, "s5", "pair"]
],
"(anon-function 94 script)": [
[5, "s5", "pair"],
[11, "s5", "pair"],
[12, "s5", "pair"]
],
"(anon-function 93 script)": [
[3, "s4", "pair"],
[6, "s3", "pair"],
[17, "s3", "pair"],
[18, "s4", "pair"],
[25, "s4", "pair"],
[26, "s4", "pair"],
[35, "s4", "pair"],
[36, "s4", "pair"]
],
"(anon-function 92 script)": [
[4, "s3", "pair"],
[7, "s2", "pair"],
[25, "s2", "pair"],
[26, "s4", "pair"],
[33, "s4", "pair"],
[34, "s4", "pair"],
[43, "s3", "pair"],
[44, "s3", "pair"]
],
"(anon-function 89 script)": [[3, "t9", "(function none)"]],
"(anon-function 91 script)": [[4, "v1", "symbol"]],
"(method 10 script-context)": [[22, "s3", "symbol"]],
"command-get-process": [
[37, "gp", "entity-actor"],
[83, "v1", "connection"],
[84, "a2", "game-task-node-info"],
[86, "v1", "connection"],
[104, "v1", "connection"],
[197, "s4", "process-drawable"],
[200, "s4", "process-drawable"],
[206, "s4", "process-drawable"],
[213, "s4", "process-drawable"],
[218, "s4", "process-drawable"]
],
"(anon-function 7 relocate)": [
[3, "a0", "int"],
[8, "a0", "int"]
],
"(method 7 process)": [
[[47, 88], "v1", "connection"],
[[120, 124], "a0", "basic"],
[[127, 130], "a0", "basic"]
]
}
@@ -1983,5 +1983,10 @@
"vars": {
"a0-9": ["enemy-option", "enemy-option"]
}
},
"(code target-darkjak-running-attack)": {
"vars": {
"t1-2": ["name", "sound-name"]
}
}
}
+3 -3
View File
@@ -38,9 +38,9 @@ struct AudioDir {
int entry_count() const { return entries.size(); }
void debug_print() const {
for (auto& e : entries) {
// lg::debug("\"{}\" 0x{:07x} - 0x{:07x}", e.name, e.start_byte, e.end_byte);
}
// for (auto& e : entries) {
// lg::debug("\"{}\" 0x{:07x} - 0x{:07x}", e.name, e.start_byte, e.end_byte);
// }
}
};
+4
View File
@@ -990,6 +990,10 @@ const std::unordered_map<
{{"launcher", ArrayFieldDecompMeta(TypeSpec("sparticle-group-item"), 32)}}},
{"simple-sprite-system",
{{"data", ArrayFieldDecompMeta(TypeSpec("sprite-glow-data"), 64)}}},
{"actor-hash-bucket",
{{"data", ArrayFieldDecompMeta(TypeSpec("actor-cshape-ptr"),
16,
ArrayFieldDecompMeta::Kind::REF_TO_INLINE_ARR)}}},
}}};
goos::Object decompile_structure(const TypeSpec& type,
+7
View File
@@ -196,6 +196,13 @@ set(RUNTIME_SOURCE
mips2c/jak3_functions/sky.cpp
mips2c/jak3_functions/texture.cpp
mips2c/jak3_functions/particle_curves.cpp
mips2c/jak3_functions/collide_cache.cpp
mips2c/jak3_functions/collide_hash.cpp
mips2c/jak3_functions/collide_edge_grab.cpp
mips2c/jak3_functions/collide_mesh.cpp
mips2c/jak3_functions/spatial_hash.cpp
mips2c/jak3_functions/sparticle.cpp
mips2c/jak3_functions/sparticle_launcher.cpp
mips2c/mips2c_table.cpp
overlord/common/dma.cpp
overlord/common/fake_iso.cpp
@@ -13,6 +13,9 @@ void BlitDisplays::init_textures(TexturePool& texture_pool, GameVersion version)
case GameVersion::Jak2:
tbp = 0x3300;
break;
case GameVersion::Jak3:
tbp = 0x3300; // assuming this for now...
break;
default:
ASSERT_NOT_REACHED();
}
@@ -129,10 +129,175 @@ void OpenGLRenderer::init_bucket_renderers_jak3() {
using namespace jak3;
m_bucket_renderers.resize((int)BucketId::MAX_BUCKETS);
m_bucket_categories.resize((int)BucketId::MAX_BUCKETS, BucketCategory::OTHER);
std::shared_ptr<TextureAnimator> texture_animator = nullptr; // todo tex anim
{
auto p = scoped_prof("render-inits");
// for now, for any unset renderers, just set them to an EmptyBucketRenderer.
m_blit_displays =
init_bucket_renderer<BlitDisplays>("blit", BucketCategory::OTHER, BucketId::BLIT_START);
// 4
init_bucket_renderer<TextureUploadHandler>("tex-lcom-sky-pre", BucketCategory::TEX,
BucketId::TEX_LCOM_SKY_PRE, texture_animator);
// 10
for (int i = 0; i < LEVEL_MAX; i++) {
#define GET_BUCKET_ID_FOR_LIST(bkt1, bkt2, idx) ((int)(bkt1) + ((int)(bkt2) - (int)(bkt1)) * (idx))
// 10
init_bucket_renderer<TextureUploadHandler>(
fmt::format("tex-l{}-tfrag", i), BucketCategory::TEX,
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_TFRAG, BucketId::TEX_L1_TFRAG, i),
texture_animator);
// 11
init_bucket_renderer<TFragment>(
fmt::format("tfrag-l{}-tfrag", i), BucketCategory::TFRAG,
GET_BUCKET_ID_FOR_LIST(BucketId::TFRAG_L0_TFRAG, BucketId::TFRAG_L1_TFRAG, i),
std::vector{tfrag3::TFragmentTreeKind::NORMAL}, false, i, anim_slot_array());
Tie3* tie = init_bucket_renderer<Tie3>(
fmt::format("tie-l{}-tfrag", i), BucketCategory::TIE,
GET_BUCKET_ID_FOR_LIST(BucketId::TIE_L0_TFRAG, BucketId::TIE_L1_TFRAG, i), i);
init_bucket_renderer<Tie3AnotherCategory>(
fmt::format("etie-l{}-tfrag", i), BucketCategory::TIE,
GET_BUCKET_ID_FOR_LIST(BucketId::ETIE_L0_TFRAG, BucketId::ETIE_L1_TFRAG, i), tie,
tfrag3::TieCategory::NORMAL_ENVMAP);
// 17
init_bucket_renderer<Merc2BucketRenderer>(
fmt::format("merc-l{}-tfrag", i), BucketCategory::MERC,
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_TFRAG, BucketId::MERC_L1_TFRAG, i), m_merc2);
init_bucket_renderer<TextureUploadHandler>(
fmt::format("tex-l{}-shrub", i), BucketCategory::TEX,
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_SHRUB, BucketId::TEX_L1_SHRUB, i),
m_texture_animator);
init_bucket_renderer<Shrub>(
fmt::format("shrub-l{}-shrub", i), BucketCategory::SHRUB,
GET_BUCKET_ID_FOR_LIST(BucketId::SHRUB_L0_SHRUB, BucketId::SHRUB_L1_SHRUB, i));
init_bucket_renderer<Merc2BucketRenderer>(
fmt::format("merc-l{}-shrub", i), BucketCategory::MERC,
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_SHRUB, BucketId::MERC_L1_SHRUB, i), m_merc2);
// 230
init_bucket_renderer<TextureUploadHandler>(
fmt::format("tex-l{}-alpha", i), BucketCategory::TEX,
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_ALPHA, BucketId::TEX_L1_ALPHA, i),
m_texture_animator);
init_bucket_renderer<TFragment>(
fmt::format("tfrag-t-l{}-alpha", i), BucketCategory::TFRAG,
GET_BUCKET_ID_FOR_LIST(BucketId::TFRAG_L0_ALPHA, BucketId::TFRAG_L1_ALPHA, i),
std::vector{tfrag3::TFragmentTreeKind::TRANS}, false, i, anim_slot_array());
init_bucket_renderer<Tie3AnotherCategory>(
fmt::format("tie-t-l{}-alpha", i), BucketCategory::TIE,
GET_BUCKET_ID_FOR_LIST(BucketId::TIE_L0_ALPHA, BucketId::TIE_L1_ALPHA, i), tie,
tfrag3::TieCategory::TRANS);
init_bucket_renderer<Tie3AnotherCategory>(
fmt::format("etie-l{}-alpha", i), BucketCategory::TIE,
GET_BUCKET_ID_FOR_LIST(BucketId::ETIE_L0_ALPHA, BucketId::ETIE_L1_ALPHA, i), tie,
tfrag3::TieCategory::TRANS_ENVMAP);
init_bucket_renderer<Merc2BucketRenderer>(
fmt::format("merc-l{}-alpha", i), BucketCategory::MERC,
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_ALPHA, BucketId::MERC_L1_ALPHA, i), m_merc2);
init_bucket_renderer<Tie3AnotherCategory>(
fmt::format("tie-w-l{}-water", i), BucketCategory::TIE,
GET_BUCKET_ID_FOR_LIST(BucketId::TIE_L0_WATER, BucketId::TIE_L1_WATER, i), tie,
tfrag3::TieCategory::WATER);
init_bucket_renderer<Tie3AnotherCategory>(
fmt::format("etie-l{}-water", i), BucketCategory::TIE,
GET_BUCKET_ID_FOR_LIST(BucketId::ETIE_L0_WATER, BucketId::ETIE_L1_WATER, i), tie,
tfrag3::TieCategory::WATER_ENVMAP);
}
// 340
init_bucket_renderer<TextureUploadHandler>("tex-lcom-tfrag", BucketCategory::TEX,
BucketId::TEX_LCOM_TFRAG, texture_animator);
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-tfrag", BucketCategory::MERC,
BucketId::MERC_LCOM_TFRAG, m_merc2);
// 345
init_bucket_renderer<TextureUploadHandler>("tex-lcom-shrub", BucketCategory::TEX,
BucketId::TEX_LCOM_SHRUB, texture_animator);
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-shrub", BucketCategory::MERC,
BucketId::MERC_LCOM_SHRUB, m_merc2);
// 351
for (int i = 0; i < LEVEL_MAX; i++) {
#define GET_BUCKET_ID_FOR_LIST(bkt1, bkt2, idx) ((int)(bkt1) + ((int)(bkt2) - (int)(bkt1)) * (idx))
init_bucket_renderer<TextureUploadHandler>(
fmt::format("tex-l{}-pris", i), BucketCategory::TEX,
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_PRIS, BucketId::TEX_L1_PRIS, i),
texture_animator);
init_bucket_renderer<TextureUploadHandler>(
fmt::format("tex-l{}-pris2", i), BucketCategory::TEX,
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_PRIS2, BucketId::TEX_L1_PRIS2, i),
texture_animator);
init_bucket_renderer<Merc2BucketRenderer>(
fmt::format("merc-l{}-pris", i), BucketCategory::MERC,
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_PRIS, BucketId::MERC_L1_PRIS, i), m_merc2);
init_bucket_renderer<Merc2BucketRenderer>(
fmt::format("merc-l{}-pris2", i), BucketCategory::MERC,
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_PRIS2, BucketId::MERC_L1_PRIS2, i), m_merc2);
}
// 401
init_bucket_renderer<TextureUploadHandler>("tex-lcom-pris", BucketCategory::TEX,
BucketId::TEX_LCOM_PRIS, texture_animator);
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-pris", BucketCategory::MERC,
BucketId::MERC_LCOM_PRIS, m_merc2);
// 461
init_bucket_renderer<TextureUploadHandler>("tex-lcom-sky-post", BucketCategory::TEX,
BucketId::TEX_LCOM_SKY_POST, texture_animator);
// 463
for (int i = 0; i < LEVEL_MAX; i++) {
#define GET_BUCKET_ID_FOR_LIST(bkt1, bkt2, idx) ((int)(bkt1) + ((int)(bkt2) - (int)(bkt1)) * (idx))
// 463
init_bucket_renderer<TextureUploadHandler>(
fmt::format("tex-l{}-water", i), BucketCategory::TEX,
GET_BUCKET_ID_FOR_LIST(BucketId::TEX_L0_WATER, BucketId::TEX_L1_WATER, i),
texture_animator);
init_bucket_renderer<Merc2BucketRenderer>(
fmt::format("merc-l{}-water", i), BucketCategory::MERC,
GET_BUCKET_ID_FOR_LIST(BucketId::MERC_L0_WATER, BucketId::MERC_L1_WATER, i), m_merc2);
// 466
init_bucket_renderer<TFragment>(
fmt::format("tfrag-l{}-water", i), BucketCategory::TFRAG,
GET_BUCKET_ID_FOR_LIST(BucketId::TFRAG_L0_WATER, BucketId::TFRAG_L1_WATER, i),
std::vector{tfrag3::TFragmentTreeKind::WATER}, false, i, anim_slot_array());
}
// 563
init_bucket_renderer<TextureUploadHandler>("tex-lcom-water", BucketCategory::TEX,
BucketId::TEX_LCOM_WATER, texture_animator);
init_bucket_renderer<Merc2BucketRenderer>("merc-lcom-water", BucketCategory::MERC,
BucketId::MERC_LCOM_WATER, m_merc2);
// 568
init_bucket_renderer<TextureUploadHandler>("tex-sprite", BucketCategory::TEX,
BucketId::TEX_SPRITE, texture_animator);
init_bucket_renderer<Sprite3>("particles", BucketCategory::SPRITE, BucketId::PARTICLES);
// 575
init_bucket_renderer<TextureUploadHandler>("tex-warp", BucketCategory::TEX, BucketId::TEX_WARP,
texture_animator);
init_bucket_renderer<TextureUploadHandler>("debug-no-zbuf1", BucketCategory::OTHER,
BucketId::DEBUG_NO_ZBUF1, m_texture_animator, true);
// 578
init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
// init_bucket_renderer<TextureUploadHandler>("tex-hud-hud-alpha", BucketCategory::TEX,
// BucketId::TEX_HUD_HUD_ALPHA, texture_animator);
// 583
init_bucket_renderer<DirectRenderer>("debug", BucketCategory::OTHER, BucketId::DEBUG, 0x8000);
// 584
init_bucket_renderer<DirectRenderer>("debug-no-zbuf2", BucketCategory::OTHER,
BucketId::DEBUG_NO_ZBUF2, 0x8000);
init_bucket_renderer<DirectRenderer>("debug-menu", BucketCategory::OTHER, BucketId::DEBUG_MENU,
0x8000);
// for any unset renderers, just set them to an EmptyBucketRenderer.
for (size_t i = 0; i < m_bucket_renderers.size(); i++) {
if (!m_bucket_renderers[i]) {
init_bucket_renderer<EmptyBucketRenderer>(fmt::format("bucket-{}", i),
@@ -1083,6 +1248,43 @@ void OpenGLRenderer::dispatch_buckets_jak2(DmaFollower dma,
// TODO ending data.
}
void OpenGLRenderer::dispatch_buckets_jak3(DmaFollower dma,
ScopedProfilerNode& prof,
bool sync_after_buckets) {
// The first thing the DMA chain should be a call to a common default-registers chain.
// this chain resets the state of the GS. After this is buckets
m_category_times.fill(0);
m_render_state.buckets_base = dma.current_tag_offset(); // starts at 0 in jak 2
m_render_state.next_bucket = m_render_state.buckets_base + 16;
m_render_state.bucket_for_vis_copy = (int)jak3::BucketId::BUCKET_2;
m_render_state.num_vis_to_copy = jak3::LEVEL_MAX;
for (size_t bucket_id = 0; bucket_id < m_bucket_renderers.size(); bucket_id++) {
auto& renderer = m_bucket_renderers[bucket_id];
auto bucket_prof = prof.make_scoped_child(renderer->name_and_id());
g_current_renderer = renderer->name_and_id();
// lg::info("Render: {} start", g_current_renderer);
renderer->render(dma, &m_render_state, bucket_prof);
if (sync_after_buckets) {
auto pp = scoped_prof("finish");
glFinish();
}
// lg::info("Render: {} end", g_current_renderer);
// should have ended at the start of the next chain
ASSERT(dma.current_tag_offset() == m_render_state.next_bucket);
m_render_state.next_bucket += 16;
vif_interrupt_callback(bucket_id + 1);
m_category_times[(int)m_bucket_categories[bucket_id]] += bucket_prof.get_elapsed_time();
// TODO: collision renderer
}
vif_interrupt_callback(m_bucket_renderers.size());
// TODO ending data.
}
/*!
* This function finds buckets and dispatches them to the appropriate part.
*/
@@ -1100,6 +1302,9 @@ void OpenGLRenderer::dispatch_buckets(DmaFollower dma,
case GameVersion::Jak2:
dispatch_buckets_jak2(dma, prof, sync_after_buckets);
break;
case GameVersion::Jak3:
dispatch_buckets_jak3(dma, prof, sync_after_buckets);
break;
default:
ASSERT(false);
}
@@ -46,7 +46,7 @@ struct RenderOptions {
bool internal_res_screenshot = false;
std::string screenshot_path;
float pmode_alp_register = 0.f;
float pmode_alp_register = 1.f;
// when enabled, does a `glFinish()` after each major rendering pass. This blocks until the GPU
// is done working, making it easier to profile GPU utilization.
@@ -75,6 +75,7 @@ class OpenGLRenderer {
void dispatch_buckets(DmaFollower dma, ScopedProfilerNode& prof, bool sync_after_buckets);
void dispatch_buckets_jak1(DmaFollower dma, ScopedProfilerNode& prof, bool sync_after_buckets);
void dispatch_buckets_jak2(DmaFollower dma, ScopedProfilerNode& prof, bool sync_after_buckets);
void dispatch_buckets_jak3(DmaFollower dma, ScopedProfilerNode& prof, bool sync_after_buckets);
void do_pcrtc_effects(float alp, SharedRenderState* render_state, ScopedProfilerNode& prof);
void blit_display();
@@ -99,7 +99,6 @@ void TFragment::render(DmaFollower& dma,
if (m_my_id == render_state->bucket_for_vis_copy &&
dma.current_tag_vifcode1().kind == VifCode::Kind::PC_PORT) {
DmaTransfer transfers[20];
for (int i = 0; i < render_state->num_vis_to_copy; i++) {
transfers[i] = dma.read_and_advance();
auto next0 = dma.read_and_advance();
@@ -319,7 +319,7 @@ bool Tie3::set_up_common_data_from_dma(DmaFollower& dma, SharedRenderState* rend
memcpy(&m_wind_data, wind_data.data, sizeof(WindWork));
}
if (render_state->version == GameVersion::Jak2) {
if (render_state->version >= GameVersion::Jak2) {
// jak 2 proto visibility
auto proto_mask_data = dma.read_and_advance();
m_common_data.proto_vis_data = proto_mask_data.data;
+651
View File
@@ -414,6 +414,657 @@ enum class BucketId {
namespace jak3 {
enum class BucketId {
BUCKET_2 = 2,
BLIT_START = 3,
TEX_LCOM_SKY_PRE = 4,
TEX_L0_TFRAG = 10,
TFRAG_L0_TFRAG = 11,
TIE_L0_TFRAG = 12,
ETIE_L0_TFRAG = 13,
TFRAG_SCISSOR_L0_TFRAG = 14,
TIE_SCISSOR_L0_TFRAG = 15,
ETIE_SCISSOR_L0_TFRAG = 16,
MERC_L0_TFRAG = 17,
EMERC_L0_TFRAG = 18,
GMERC_L0_TFRAG = 19,
TIE_VANISH_L0_TFRAG = 20,
GMERC2_L0_TFRAG = 21,
TEX_L1_TFRAG = 22,
TFRAG_L1_TFRAG = 23,
TIE_L1_TFRAG = 24,
ETIE_L1_TFRAG = 25,
TFRAG_SCISSOR_L1_TFRAG = 26,
TIE_SCISSOR_L1_TFRAG = 27,
ETIE_SCISSOR_L1_TFRAG = 28,
MERC_L1_TFRAG = 29,
EMERC_L1_TFRAG = 30,
GMERC_L1_TFRAG = 31,
TIE_VANISH_L1_TFRAG = 32,
GMERC2_L1_TFRAG = 33,
TEX_L2_TFRAG = 34,
TFRAG_L2_TFRAG = 35,
TIE_L2_TFRAG = 36,
ETIE_L2_TFRAG = 37,
TFRAG_SCISSOR_L2_TFRAG = 38,
TIE_SCISSOR_L2_TFRAG = 39,
ETIE_SCISSOR_L2_TFRAG = 40,
MERC_L2_TFRAG = 41,
EMERC_L2_TFRAG = 42,
GMERC_L2_TFRAG = 43,
TIE_VANISH_L2_TFRAG = 44,
GMERC2_L2_TFRAG = 45,
TEX_L3_TFRAG = 46,
TFRAG_L3_TFRAG = 47,
TIE_L3_TFRAG = 48,
ETIE_L3_TFRAG = 49,
TFRAG_SCISSOR_L3_TFRAG = 50,
TIE_SCISSOR_L3_TFRAG = 51,
ETIE_SCISSOR_L3_TFRAG = 52,
MERC_L3_TFRAG = 53,
EMERC_L3_TFRAG = 54,
GMERC_L3_TFRAG = 55,
TIE_VANISH_L3_TFRAG = 56,
GMERC2_L3_TFRAG = 57,
TEX_L4_TFRAG = 58,
TFRAG_L4_TFRAG = 59,
TIE_L4_TFRAG = 60,
ETIE_L4_TFRAG = 61,
TFRAG_SCISSOR_L4_TFRAG = 62,
TIE_SCISSOR_L4_TFRAG = 63,
ETIE_SCISSOR_L4_TFRAG = 64,
MERC_L4_TFRAG = 65,
EMERC_L4_TFRAG = 66,
GMERC_L4_TFRAG = 67,
TIE_VANISH_L4_TFRAG = 68,
GMERC2_L4_TFRAG = 69,
TEX_L5_TFRAG = 70,
TFRAG_L5_TFRAG = 71,
TIE_L5_TFRAG = 72,
ETIE_L5_TFRAG = 73,
TFRAG_SCISSOR_L5_TFRAG = 74,
TIE_SCISSOR_L5_TFRAG = 75,
ETIE_SCISSOR_L5_TFRAG = 76,
MERC_L5_TFRAG = 77,
EMERC_L5_TFRAG = 78,
GMERC_L5_TFRAG = 79,
TIE_VANISH_L5_TFRAG = 80,
GMERC2_L5_TFRAG = 81,
TEX_L6_TFRAG = 82,
TFRAG_L6_TFRAG = 83,
TIE_L6_TFRAG = 84,
ETIE_L6_TFRAG = 85,
TFRAG_SCISSOR_L6_TFRAG = 86,
TIE_SCISSOR_L6_TFRAG = 87,
ETIE_SCISSOR_L6_TFRAG = 88,
MERC_L6_TFRAG = 89,
EMERC_L6_TFRAG = 90,
GMERC_L6_TFRAG = 91,
TIE_VANISH_L6_TFRAG = 92,
GMERC2_L6_TFRAG = 93,
TEX_L7_TFRAG = 94,
TFRAG_L7_TFRAG = 95,
TIE_L7_TFRAG = 96,
ETIE_L7_TFRAG = 97,
TFRAG_SCISSOR_L7_TFRAG = 98,
TIE_SCISSOR_L7_TFRAG = 99,
ETIE_SCISSOR_L7_TFRAG = 100,
MERC_L7_TFRAG = 101,
EMERC_L7_TFRAG = 102,
GMERC_L7_TFRAG = 103,
TIE_VANISH_L7_TFRAG = 104,
GMERC2_L7_TFRAG = 105,
TEX_L8_TFRAG = 106,
TFRAG_L8_TFRAG = 107,
TIE_L8_TFRAG = 108,
ETIE_L8_TFRAG = 109,
TFRAG_SCISSOR_L8_TFRAG = 110,
TIE_SCISSOR_L8_TFRAG = 111,
ETIE_SCISSOR_L8_TFRAG = 112,
MERC_L8_TFRAG = 113,
EMERC_L8_TFRAG = 114,
GMERC_L8_TFRAG = 115,
TIE_VANISH_L8_TFRAG = 116,
GMERC2_L8_TFRAG = 117,
TEX_L9_TFRAG = 118,
TFRAG_L9_TFRAG = 119,
TIE_L9_TFRAG = 120,
ETIE_L9_TFRAG = 121,
TFRAG_SCISSOR_L9_TFRAG = 122,
TIE_SCISSOR_L9_TFRAG = 123,
ETIE_SCISSOR_L9_TFRAG = 124,
MERC_L9_TFRAG = 125,
EMERC_L9_TFRAG = 126,
GMERC_L9_TFRAG = 127,
TIE_VANISH_L9_TFRAG = 128,
GMERC2_L9_TFRAG = 129,
TEX_L0_SHRUB = 130,
SHRUB_L0_SHRUB = 131,
SHRUB_NEAR_L0_SHRUB = 132,
BILLBOARD_L0_SHRUB = 133,
SHRUB_VANISH_L0_SHRUB = 134,
SHRUB_NEAR_TRANS_L0_SHRUB = 135,
MERC_L0_SHRUB = 136,
EMERC_L0_SHRUB = 137,
GMERC_L0_SHRUB = 138,
GMERC2_L0_SHRUB = 139,
TEX_L1_SHRUB = 140,
SHRUB_L1_SHRUB = 141,
SHRUB_NEAR_L1_SHRUB = 142,
BILLBOARD_L1_SHRUB = 143,
SHRUB_VANISH_L1_SHRUB = 144,
SHRUB_NEAR_TRANS_L1_SHRUB = 145,
MERC_L1_SHRUB = 146,
EMERC_L1_SHRUB = 147,
GMERC_L1_SHRUB = 148,
GMERC2_L1_SHRUB = 149,
TEX_L2_SHRUB = 150,
SHRUB_L2_SHRUB = 151,
SHRUB_NEAR_L2_SHRUB = 152,
BILLBOARD_L2_SHRUB = 153,
SHRUB_VANISH_L2_SHRUB = 154,
SHRUB_NEAR_TRANS_L2_SHRUB = 155,
MERC_L2_SHRUB = 156,
EMERC_L2_SHRUB = 157,
GMERC_L2_SHRUB = 158,
GMERC2_L2_SHRUB = 159,
TEX_L3_SHRUB = 160,
SHRUB_L3_SHRUB = 161,
SHRUB_NEAR_L3_SHRUB = 162,
BILLBOARD_L3_SHRUB = 163,
SHRUB_VANISH_L3_SHRUB = 164,
SHRUB_NEAR_TRANS_L3_SHRUB = 165,
MERC_L3_SHRUB = 166,
EMERC_L3_SHRUB = 167,
GMERC_L3_SHRUB = 168,
GMERC2_L3_SHRUB = 169,
TEX_L4_SHRUB = 170,
SHRUB_L4_SHRUB = 171,
SHRUB_NEAR_L4_SHRUB = 172,
BILLBOARD_L4_SHRUB = 173,
SHRUB_VANISH_L4_SHRUB = 174,
SHRUB_NEAR_TRANS_L4_SHRUB = 175,
MERC_L4_SHRUB = 176,
EMERC_L4_SHRUB = 177,
GMERC_L4_SHRUB = 178,
GMERC2_L4_SHRUB = 179,
TEX_L5_SHRUB = 180,
SHRUB_L5_SHRUB = 181,
SHRUB_NEAR_L5_SHRUB = 182,
BILLBOARD_L5_SHRUB = 183,
SHRUB_VANISH_L5_SHRUB = 184,
SHRUB_NEAR_TRANS_L5_SHRUB = 185,
MERC_L5_SHRUB = 186,
EMERC_L5_SHRUB = 187,
GMERC_L5_SHRUB = 188,
GMERC2_L5_SHRUB = 189,
TEX_L6_SHRUB = 190,
SHRUB_L6_SHRUB = 191,
SHRUB_NEAR_L6_SHRUB = 192,
BILLBOARD_L6_SHRUB = 193,
SHRUB_VANISH_L6_SHRUB = 194,
SHRUB_NEAR_TRANS_L6_SHRUB = 195,
MERC_L6_SHRUB = 196,
EMERC_L6_SHRUB = 197,
GMERC_L6_SHRUB = 198,
GMERC2_L6_SHRUB = 199,
TEX_L7_SHRUB = 200,
SHRUB_L7_SHRUB = 201,
SHRUB_NEAR_L7_SHRUB = 202,
BILLBOARD_L7_SHRUB = 203,
SHRUB_VANISH_L7_SHRUB = 204,
SHRUB_NEAR_TRANS_L7_SHRUB = 205,
MERC_L7_SHRUB = 206,
EMERC_L7_SHRUB = 207,
GMERC_L7_SHRUB = 208,
GMERC2_L7_SHRUB = 209,
TEX_L8_SHRUB = 210,
SHRUB_L8_SHRUB = 211,
SHRUB_NEAR_L8_SHRUB = 212,
BILLBOARD_L8_SHRUB = 213,
SHRUB_VANISH_L8_SHRUB = 214,
SHRUB_NEAR_TRANS_L8_SHRUB = 215,
MERC_L8_SHRUB = 216,
EMERC_L8_SHRUB = 217,
GMERC_L8_SHRUB = 218,
GMERC2_L8_SHRUB = 219,
TEX_L9_SHRUB = 220,
SHRUB_L9_SHRUB = 221,
SHRUB_NEAR_L9_SHRUB = 222,
BILLBOARD_L9_SHRUB = 223,
SHRUB_VANISH_L9_SHRUB = 224,
SHRUB_NEAR_TRANS_L9_SHRUB = 225,
MERC_L9_SHRUB = 226,
EMERC_L9_SHRUB = 227,
GMERC_L9_SHRUB = 228,
GMERC2_L9_SHRUB = 229,
TEX_L0_ALPHA = 230,
TFRAG_L0_ALPHA = 231,
TIE_L0_ALPHA = 232,
ETIE_L0_ALPHA = 233,
MERC_L0_ALPHA = 234,
EMERC_L0_ALPHA = 235,
GMERC_L0_ALPHA = 236,
TFRAG_SCISSOR_L0_ALPHA = 237,
TIE_SCISSOR_L0_ALPHA = 238,
ETIE_SCISSOR_L0_ALPHA = 239,
GMERC2_L0_ALPHA = 240,
TEX_L1_ALPHA = 241,
TFRAG_L1_ALPHA = 242,
TIE_L1_ALPHA = 243,
ETIE_L1_ALPHA = 244,
MERC_L1_ALPHA = 245,
EMERC_L1_ALPHA = 246,
GMERC_L1_ALPHA = 247,
TFRAG_SCISSOR_L1_ALPHA = 248,
TIE_SCISSOR_L1_ALPHA = 249,
ETIE_SCISSOR_L1_ALPHA = 250,
GMERC2_L1_ALPHA = 251,
TEX_L2_ALPHA = 252,
TFRAG_L2_ALPHA = 253,
TIE_L2_ALPHA = 254,
ETIE_L2_ALPHA = 255,
MERC_L2_ALPHA = 256,
EMERC_L2_ALPHA = 257,
GMERC_L2_ALPHA = 258,
TFRAG_SCISSOR_L2_ALPHA = 259,
TIE_SCISSOR_L2_ALPHA = 260,
ETIE_SCISSOR_L2_ALPHA = 261,
GMERC2_L2_ALPHA = 262,
TEX_L3_ALPHA = 263,
TFRAG_L3_ALPHA = 264,
TIE_L3_ALPHA = 265,
ETIE_L3_ALPHA = 266,
MERC_L3_ALPHA = 267,
EMERC_L3_ALPHA = 268,
GMERC_L3_ALPHA = 269,
TFRAG_SCISSOR_L3_ALPHA = 270,
TIE_SCISSOR_L3_ALPHA = 271,
ETIE_SCISSOR_L3_ALPHA = 272,
GMERC2_L3_ALPHA = 273,
TEX_L4_ALPHA = 274,
TFRAG_L4_ALPHA = 275,
TIE_L4_ALPHA = 276,
ETIE_L4_ALPHA = 277,
MERC_L4_ALPHA = 278,
EMERC_L4_ALPHA = 279,
GMERC_L4_ALPHA = 280,
TFRAG_SCISSOR_L4_ALPHA = 281,
TIE_SCISSOR_L4_ALPHA = 282,
ETIE_SCISSOR_L4_ALPHA = 283,
GMERC2_L4_ALPHA = 284,
TEX_L5_ALPHA = 285,
TFRAG_L5_ALPHA = 286,
TIE_L5_ALPHA = 287,
ETIE_L5_ALPHA = 288,
MERC_L5_ALPHA = 289,
EMERC_L5_ALPHA = 290,
GMERC_L5_ALPHA = 291,
TFRAG_SCISSOR_L5_ALPHA = 292,
TIE_SCISSOR_L5_ALPHA = 293,
ETIE_SCISSOR_L5_ALPHA = 294,
GMERC2_L5_ALPHA = 295,
TEX_L6_ALPHA = 296,
TFRAG_L6_ALPHA = 297,
TIE_L6_ALPHA = 298,
ETIE_L6_ALPHA = 299,
MERC_L6_ALPHA = 300,
EMERC_L6_ALPHA = 301,
GMERC_L6_ALPHA = 302,
TFRAG_SCISSOR_L6_ALPHA = 303,
TIE_SCISSOR_L6_ALPHA = 304,
ETIE_SCISSOR_L6_ALPHA = 305,
GMERC2_L6_ALPHA = 306,
TEX_L7_ALPHA = 307,
TFRAG_L7_ALPHA = 308,
TIE_L7_ALPHA = 309,
ETIE_L7_ALPHA = 310,
MERC_L7_ALPHA = 311,
EMERC_L7_ALPHA = 312,
GMERC_L7_ALPHA = 313,
TFRAG_SCISSOR_L7_ALPHA = 314,
TIE_SCISSOR_L7_ALPHA = 315,
ETIE_SCISSOR_L7_ALPHA = 316,
GMERC2_L7_ALPHA = 317,
TEX_L8_ALPHA = 318,
TFRAG_L8_ALPHA = 319,
TIE_L8_ALPHA = 320,
ETIE_L8_ALPHA = 321,
MERC_L8_ALPHA = 322,
EMERC_L8_ALPHA = 323,
GMERC_L8_ALPHA = 324,
TFRAG_SCISSOR_L8_ALPHA = 325,
TIE_SCISSOR_L8_ALPHA = 326,
ETIE_SCISSOR_L8_ALPHA = 327,
GMERC2_L8_ALPHA = 328,
TEX_L9_ALPHA = 329,
TFRAG_L9_ALPHA = 330,
TIE_L9_ALPHA = 331,
ETIE_L9_ALPHA = 332,
MERC_L9_ALPHA = 333,
EMERC_L9_ALPHA = 334,
GMERC_L9_ALPHA = 335,
TFRAG_SCISSOR_L9_ALPHA = 336,
TIE_SCISSOR_L9_ALPHA = 337,
ETIE_SCISSOR_L9_ALPHA = 338,
GMERC2_L9_ALPHA = 339,
TEX_LCOM_TFRAG = 340,
MERC_LCOM_TFRAG = 341,
EMERC_LCOM_TFRAG = 342,
GMERC_LCOM_TFRAG = 343,
GMERC2_LCOM_TFRAG = 344,
TEX_LCOM_SHRUB = 345,
MERC_LCOM_SHRUB = 346,
EMERC_LCOM_SHRUB = 347,
GMERC_LCOM_SHRUB = 348,
GMERC2_LCOM_SHRUB = 349,
SHADOW = 350,
TEX_L0_PRIS = 351,
MERC_L0_PRIS = 352,
EMERC_L0_PRIS = 353,
GMERC_L0_PRIS = 354,
GMERC2_L0_PRIS = 355,
TEX_L1_PRIS = 356,
MERC_L1_PRIS = 357,
EMERC_L1_PRIS = 358,
GMERC_L1_PRIS = 359,
GMERC2_L1_PRIS = 360,
TEX_L2_PRIS = 361,
MERC_L2_PRIS = 362,
EMERC_L2_PRIS = 363,
GMERC_L2_PRIS = 364,
GMERC2_L2_PRIS = 365,
TEX_L3_PRIS = 366,
MERC_L3_PRIS = 367,
EMERC_L3_PRIS = 368,
GMERC_L3_PRIS = 369,
GMERC2_L3_PRIS = 370,
TEX_L4_PRIS = 371,
MERC_L4_PRIS = 372,
EMERC_L4_PRIS = 373,
GMERC_L4_PRIS = 374,
GMERC2_L4_PRIS = 375,
TEX_L5_PRIS = 376,
MERC_L5_PRIS = 377,
EMERC_L5_PRIS = 378,
GMERC_L5_PRIS = 379,
GMERC2_L5_PRIS = 380,
TEX_L6_PRIS = 381,
MERC_L6_PRIS = 382,
EMERC_L6_PRIS = 383,
GMERC_L6_PRIS = 384,
GMERC2_L6_PRIS = 385,
TEX_L7_PRIS = 386,
MERC_L7_PRIS = 387,
EMERC_L7_PRIS = 388,
GMERC_L7_PRIS = 389,
GMERC2_L7_PRIS = 390,
TEX_L8_PRIS = 391,
MERC_L8_PRIS = 392,
EMERC_L8_PRIS = 393,
GMERC_L8_PRIS = 394,
GMERC2_L8_PRIS = 395,
TEX_L9_PRIS = 396,
MERC_L9_PRIS = 397,
EMERC_L9_PRIS = 398,
GMERC_L9_PRIS = 399,
GMERC2_L9_PRIS = 400,
TEX_LCOM_PRIS = 401,
MERC_LCOM_PRIS = 402,
EMERC_LCOM_PRIS = 403,
GMERC_LCOM_PRIS = 404,
GMERC2_LCOM_PRIS = 405,
TEX_L0_PRIS2 = 406,
MERC_L0_PRIS2 = 407,
EMERC_L0_PRIS2 = 408,
GMERC_L0_PRIS2 = 409,
GMERC2_L0_PRIS2 = 410,
TEX_L1_PRIS2 = 411,
MERC_L1_PRIS2 = 412,
EMERC_L1_PRIS2 = 413,
GMERC_L1_PRIS2 = 414,
GMERC2_L1_PRIS2 = 415,
TEX_L2_PRIS2 = 416,
MERC_L2_PRIS2 = 417,
EMERC_L2_PRIS2 = 418,
GMERC_L2_PRIS2 = 419,
GMERC2_L2_PRIS2 = 420,
TEX_L3_PRIS2 = 421,
MERC_L3_PRIS2 = 422,
EMERC_L3_PRIS2 = 423,
GMERC_L3_PRIS2 = 424,
GMERC2_L3_PRIS2 = 425,
TEX_L4_PRIS2 = 426,
MERC_L4_PRIS2 = 427,
EMERC_L4_PRIS2 = 428,
GMERC_L4_PRIS2 = 429,
GMERC2_L4_PRIS2 = 430,
TEX_L5_PRIS2 = 431,
MERC_L5_PRIS2 = 432,
EMERC_L5_PRIS2 = 433,
GMERC_L5_PRIS2 = 434,
GMERC2_L5_PRIS2 = 435,
TEX_L6_PRIS2 = 436,
MERC_L6_PRIS2 = 437,
EMERC_L6_PRIS2 = 438,
GMERC_L6_PRIS2 = 439,
GMERC2_L6_PRIS2 = 440,
TEX_L7_PRIS2 = 441,
MERC_L7_PRIS2 = 442,
EMERC_L7_PRIS2 = 443,
GMERC_L7_PRIS2 = 444,
GMERC2_L7_PRIS2 = 445,
TEX_L8_PRIS2 = 446,
MERC_L8_PRIS2 = 447,
EMERC_L8_PRIS2 = 448,
GMERC_L8_PRIS2 = 449,
GMERC2_L8_PRIS2 = 450,
TEX_L9_PRIS2 = 451,
MERC_L9_PRIS2 = 452,
EMERC_L9_PRIS2 = 453,
GMERC_L9_PRIS2 = 454,
GMERC2_L9_PRIS2 = 455,
TEX_LCOM_PRIS2 = 456,
MERC_LCOM_PRIS2 = 457,
EMERC_LCOM_PRIS2 = 458,
GMERC_LCOM_PRIS2 = 459,
GMERC2_LCOM_PRIS2 = 460,
TEX_LCOM_SKY_POST = 461,
BUCKET462 = 462,
TEX_L0_WATER = 463,
MERC_L0_WATER = 464,
GMERC_L0_WATER = 465,
TFRAG_L0_WATER = 466,
TIE_L0_WATER = 467,
ETIE_L0_WATER = 468,
TIE_SCISSOR_L0_WATER = 469,
TFRAG_SCISSOR_L0_WATER = 470,
ETIE_SCISSOR_L0_WATER = 471,
GMERC2_L0_WATER = 472,
TEX_L1_WATER = 473,
MERC_L1_WATER = 474,
GMERC_L1_WATER = 475,
TFRAG_L1_WATER = 476,
TIE_L1_WATER = 477,
ETIE_L1_WATER = 478,
TIE_SCISSOR_L1_WATER = 479,
TFRAG_SCISSOR_L1_WATER = 480,
ETIE_SCISSOR_L1_WATER = 481,
GMERC2_L1_WATER = 482,
TEX_L2_WATER = 483,
MERC_L2_WATER = 484,
GMERC_L2_WATER = 485,
TFRAG_L2_WATER = 486,
TIE_L2_WATER = 487,
ETIE_L2_WATER = 488,
TIE_SCISSOR_L2_WATER = 489,
TFRAG_SCISSOR_L2_WATER = 490,
ETIE_SCISSOR_L2_WATER = 491,
GMERC2_L2_WATER = 492,
TEX_L3_WATER = 493,
MERC_L3_WATER = 494,
GMERC_L3_WATER = 495,
TFRAG_L3_WATER = 496,
TIE_L3_WATER = 497,
ETIE_L3_WATER = 498,
TIE_SCISSOR_L3_WATER = 499,
TFRAG_SCISSOR_L3_WATER = 500,
ETIE_SCISSOR_L3_WATER = 501,
GMERC2_L3_WATER = 502,
TEX_L4_WATER = 503,
MERC_L4_WATER = 504,
GMERC_L4_WATER = 505,
TFRAG_L4_WATER = 506,
TIE_L4_WATER = 507,
ETIE_L4_WATER = 508,
TIE_SCISSOR_L4_WATER = 509,
TFRAG_SCISSOR_L4_WATER = 510,
ETIE_SCISSOR_L4_WATER = 511,
GMERC2_L4_WATER = 512,
TEX_L5_WATER = 513,
MERC_L5_WATER = 514,
GMERC_L5_WATER = 515,
TFRAG_L5_WATER = 516,
TIE_L5_WATER = 517,
ETIE_L5_WATER = 518,
TIE_SCISSOR_L5_WATER = 519,
TFRAG_SCISSOR_L5_WATER = 520,
ETIE_SCISSOR_L5_WATER = 521,
GMERC2_L5_WATER = 522,
TEX_L6_WATER = 523,
MERC_L6_WATER = 524,
GMERC_L6_WATER = 525,
TFRAG_L6_WATER = 526,
TIE_L6_WATER = 527,
ETIE_L6_WATER = 528,
TIE_SCISSOR_L6_WATER = 529,
TFRAG_SCISSOR_L6_WATER = 530,
ETIE_SCISSOR_L6_WATER = 531,
GMERC2_L6_WATER = 532,
TEX_L7_WATER = 533,
MERC_L7_WATER = 534,
GMERC_L7_WATER = 535,
TFRAG_L7_WATER = 536,
TIE_L7_WATER = 537,
ETIE_L7_WATER = 538,
TIE_SCISSOR_L7_WATER = 539,
TFRAG_SCISSOR_L7_WATER = 540,
ETIE_SCISSOR_L7_WATER = 541,
GMERC2_L7_WATER = 542,
TEX_L8_WATER = 543,
MERC_L8_WATER = 544,
GMERC_L8_WATER = 545,
TFRAG_L8_WATER = 546,
TIE_L8_WATER = 547,
ETIE_L8_WATER = 548,
TIE_SCISSOR_L8_WATER = 549,
TFRAG_SCISSOR_L8_WATER = 550,
ETIE_SCISSOR_L8_WATER = 551,
GMERC2_L8_WATER = 552,
TEX_L9_WATER = 553,
MERC_L9_WATER = 554,
GMERC_L9_WATER = 555,
TFRAG_L9_WATER = 556,
TIE_L9_WATER = 557,
ETIE_L9_WATER = 558,
TIE_SCISSOR_L9_WATER = 559,
TFRAG_SCISSOR_L9_WATER = 560,
ETIE_SCISSOR_L9_WATER = 561,
GMERC2_L9_WATER = 562,
TEX_LCOM_WATER = 563,
MERC_LCOM_WATER = 564,
GMERC_LCOM_WATER = 565,
GMERC2_LCOM_WATER = 566,
BUCKET567 = 567,
TEX_SPRITE = 568,
GENERIC_SPRITE_1 = 569,
PARTICLES = 570,
GENERIC_SPRITE_2 = 571,
SHADOW2 = 572,
SHADOW3 = 573,
GENERIC_SPRITE_3 = 574,
TEX_WARP = 575,
GENERIC_WARP = 576,
DEBUG_NO_ZBUF1 = 577,
TEX_HUD_HUD_ALPHA = 578,
HUD_DRAW_HUD_ALPHA = 579,
TEX_HUD_PRIS2 = 580,
HUD_DRAW_PRIS2 = 581,
BUCKET582 = 582,
DEBUG = 583,
DEBUG_NO_ZBUF2 = 584,
DEBUG_MENU = 585,
BUCKET586 = 586,
MAX_BUCKETS = 587,
};
}
@@ -949,7 +949,7 @@ void Merc2::handle_merc_chain(DmaFollower& dma,
auto init = dma.read_and_advance();
int skip_count = 2;
if (render_state->version == GameVersion::Jak2) {
if (render_state->version >= GameVersion::Jak2) {
skip_count = 1;
}
@@ -170,7 +170,8 @@ void Sprite3::handle_sprite_frame_setup(DmaFollower& dma,
memcpy(&jak1_data, frame_data.data, sizeof(SpriteFrameDataJak1));
m_frame_data.from_jak1(jak1_data);
} break;
case GameVersion::Jak2: {
case GameVersion::Jak2:
case GameVersion::Jak3: {
render_state->shaders[ShaderId::SPRITE3].activate();
auto frame_data = dma.read_and_advance();
ASSERT(frame_data.size_bytes == (int)sizeof(SpriteFrameData)); // very cool
@@ -392,6 +393,7 @@ void Sprite3::render(DmaFollower& dma, SharedRenderState* render_state, ScopedPr
render_jak1(dma, render_state, prof);
break;
case GameVersion::Jak2:
case GameVersion::Jak3:
render_jak2(dma, render_state, prof);
break;
default:
@@ -212,6 +212,7 @@ void Sprite3::distort_dma(GameVersion version, DmaFollower& dma, ScopedProfilerN
expect_th = 8;
break;
case GameVersion::Jak2:
case GameVersion::Jak3:
expect_zbp = 0x130;
expect_th = 9;
break;
@@ -424,7 +425,7 @@ void Sprite3::distort_setup_instanced(ScopedProfilerNode& /*prof*/) {
for (int res = 3; res < 12; res++) {
int entry_index = m_sprite_distorter_sine_tables.ientry[res - 3].x() - 352;
ASSERT_MSG(entry_index >= 0, "weird sprite_distort startup crash happened again!");
// ASSERT_MSG(entry_index >= 0, "weird sprite_distort startup crash happened again!");
for (int i = 0; i < res; i++) {
math::Vector3f vf06 = m_sprite_distorter_sine_tables.entry[entry_index++].xyz();
+1 -1
View File
@@ -73,7 +73,7 @@ struct GraphicsData {
FrameLimiter frame_limiter;
Timer engine_timer;
double last_engine_time = 1. / 60.;
float pmode_alp = 0.f;
float pmode_alp = 1.f;
std::string imgui_log_filename, imgui_filename;
GameVersion version;
+2
View File
@@ -400,6 +400,8 @@ PcTextureId TexturePool::allocate_pc_port_texture(GameVersion version) {
return PcTextureId(get_jak1_tpage_dir().size() - 1, m_next_pc_texture_to_allocate++);
case GameVersion::Jak2:
return PcTextureId(get_jak2_tpage_dir().size() - 1, m_next_pc_texture_to_allocate++);
case GameVersion::Jak3:
return PcTextureId(get_jak3_tpage_dir().size() - 1, m_next_pc_texture_to_allocate++);
default:
ASSERT_NOT_REACHED();
}
+6 -3
View File
@@ -105,12 +105,14 @@ char* MakeFileName(int type, const char* name, int new_string) {
// plain GOAL data object file
case DATA_FILE_TYPE: // 0x20
sprintf(buf, "%sfinal/%s.go", prefix, name);
// sprintf(buf, "%sfinal/%s.go", prefix, name);
sprintf(buf, "%sout/jak3/obj/%s.go", prefix, name);
break;
// texture page
case TX_PAGE_FILE_TYPE: // 0x21
sprintf(buf, "%sdata/texture-page%d/%s.go", prefix, TX_PAGE_VERSION, name);
// sprintf(buf, "%sdata/texture-page%d/%s.go", prefix, TX_PAGE_VERSION, name);
sprintf(buf, "%sout/jak3/obj/%s.go", prefix, name);
break;
// joint animation
@@ -145,7 +147,8 @@ char* MakeFileName(int type, const char* name, int new_string) {
// Everybody's favorite "art group" file. Container of different art.
case ART_GROUP_FILE_TYPE: // 0x30
sprintf(buf, "%sfinal/art-group%d/%s-ag.go", prefix, ART_FILE_VERSION, name);
// sprintf(buf, "%sfinal/art-group%d/%s-ag.go", prefix, ART_FILE_VERSION, name);
sprintf(buf, "%sout/jak3/obj/%s.go", prefix, name);
break;
// GOAL data object file containing visibility data. This likely contained the visibility data
+20 -6
View File
@@ -147,9 +147,9 @@ void link_control::jak3_begin(Ptr<uint8_t> object_file,
m_flags = flags;
u16 version = l_hdr->core.version;
if (version == 4) {
if (version == 4 || version == 2) {
// it's a v4 produced by opengoal... lets just try using jak2's linker
m_version = 4;
m_version = version;
printf("got version 4, falling back to jak1/jak2\n");
jak1_jak2_begin(object_file, name, size, heap, flags);
return;
@@ -275,7 +275,7 @@ uint32_t link_control::jak3_work() {
ASSERT(!m_opengoal);
*(u32*)(((u8*)m_link_hdr) - 4) = *((s7 + jak3_symbols::FIX_SYM_LINK_BLOCK - 1).cast<u32>());
rv = jak3_work_v5();
} else if (m_version == 4) {
} else if (m_version == 4 || m_version == 2) {
// Note: this is a bit of a hack. Jak 3 doesn't support v2/v4. But, OpenGOAL generates data
// objects in this format. We will just try reusing the jak 2 v2/v4 linker here and see if it
// works. See corresponding call to jak1_jak2_begin in begin.
@@ -741,6 +741,7 @@ void link_control::jak3_finish(bool jump_from_c_to_goal) {
*EnableMethodSet = *EnableMethodSet + m_keep_debug;
// printf("finish %s\n", m_object_name);
if (m_opengoal) {
// setup mips2c functions
const auto& it = Mips2C::gMips2CLinkCallbacks[GameVersion::Jak3].find(m_object_name);
@@ -824,11 +825,24 @@ u32 link_busy() {
void link_reset() {
saved_link_control.m_busy = 0;
}
uint64_t link_begin(u64* /*args*/) {
ASSERT_NOT_REACHED();
uint64_t link_begin(u64* args) {
saved_link_control.jak3_begin(Ptr<u8>(args[0]), Ptr<char>(args[1]).c(), args[2],
Ptr<kheapinfo>(args[3]), args[4]);
auto work_result = saved_link_control.jak3_work();
// if we managed to finish in one shot, take care of calling finish
if (work_result) {
// called from goal
saved_link_control.jak3_finish(false);
}
return work_result != 0;
}
uint64_t link_resume() {
ASSERT_NOT_REACHED();
auto work_result = saved_link_control.jak3_work();
if (work_result) {
// called from goal
saved_link_control.jak3_finish(false);
}
return work_result != 0;
}
// Note: update_goal_fns changed to skip the hashtable lookup since symlink2/symlink3 are now fixed
+4 -2
View File
@@ -303,11 +303,13 @@ int ShutdownMachine() {
}
u32 KeybdGetData(u32 /*_mouse*/) {
ASSERT_NOT_REACHED();
return 0;
// ASSERT_NOT_REACHED();
}
u32 MouseGetData(u32 /*_mouse*/) {
ASSERT_NOT_REACHED();
// ASSERT_NOT_REACHED();
return 0;
}
/*!
+6
View File
@@ -664,6 +664,9 @@ Ptr<Symbol4<u32>> intern_from_c_ht(const char* name) {
*/
Ptr<Symbol4<u32>> find_symbol_from_c(uint16_t sym_id, const char* name) {
#ifdef JAK3_HASH_TABLE
if (!strcmp(name, "_empty_")) {
return (s7 + S7_OFF_FIX_SYM_EMPTY_PAIR).cast<Symbol4<u32>>();
}
return find_symbol_from_c_ht(name);
#endif
// sign extend
@@ -733,6 +736,9 @@ Ptr<Symbol4<u32>> find_symbol_from_c(uint16_t sym_id, const char* name) {
*/
Ptr<Symbol4<u32>> intern_from_c(int sym_id, int flags, const char* name) {
#ifdef JAK3_HASH_TABLE
if (!strcmp(name, "_empty_")) {
return (s7 + S7_OFF_FIX_SYM_EMPTY_PAIR).cast<Symbol4<u32>>();
}
return intern_from_c_ht(name);
#endif
// first, look up the symbol.
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+719
View File
@@ -0,0 +1,719 @@
//--------------------------MIPS2C---------------------
// clang-format off
#include "game/mips2c/mips2c_private.h"
#include "game/kernel/jak3/kscheme.h"
using ::jak3::intern_from_c;
namespace Mips2C::jak3 {
namespace method_12_collide_mesh {
struct Cache {
void* closest_pt_in_triangle; // closest-pt-in-triangle
} cache;
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
bool bc = false;
u32 call_addr = 0;
bool cop1_bc = false;
c->daddiu(sp, sp, -160); // daddiu sp, sp, -160
c->sd(ra, 0, sp); // sd ra, 0(sp)
c->sq(s1, 64, sp); // sq s1, 64(sp)
c->sq(s2, 80, sp); // sq s2, 80(sp)
c->sq(s3, 96, sp); // sq s3, 96(sp)
c->sq(s4, 112, sp); // sq s4, 112(sp)
c->sq(s5, 128, sp); // sq s5, 128(sp)
c->sq(gp, 144, sp); // sq gp, 144(sp)
c->mov64(gp, a2); // or gp, a2, r0
c->mov64(s5, a3); // or s5, a3, r0
c->mov64(s3, t0); // or s3, t0, r0
c->daddiu(s4, sp, 16); // daddiu s4, sp, 16
c->lui(v1, 17141); // lui v1, 17141
c->ori(v1, v1, 49807); // ori v1, v1, 49807
// nop // sll r0, r0, 0
c->mov64(s2, a1); // or s2, a1, r0
c->lqc2(vf3, 0, s5); // lqc2 vf3, 0(s5)
c->mov128_vf_gpr(vf14, v1); // qmtc2.i vf14, v1
c->lwu(s1, 4, a0); // lwu s1, 4(a0)
c->vadd_bc(DEST::w, BC::x, vf3, vf3, vf14); // vaddx.w vf3, vf3, vf14
// nop // sll r0, r0, 0
c->vsub_bc(DEST::xyzw, BC::w, vf12, vf3, vf3); // vsubw.xyzw vf12, vf3, vf3
// nop // sll r0, r0, 0
c->vadd_bc(DEST::xyzw, BC::w, vf13, vf3, vf3); // vaddw.xyzw vf13, vf3, vf3
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf12, vf12); // vftoi0.xyzw vf12, vf12
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf13, vf13); // vftoi0.xyzw vf13, vf13
// nop // sll r0, r0, 0
c->mov128_gpr_vf(v1, vf12); // qmfc2.i v1, vf12
c->sqc2(vf12, 16, s4); // sqc2 vf12, 16(s4)
c->mov128_gpr_vf(a0, vf13); // qmfc2.i a0, vf13
c->sqc2(vf13, 32, s4); // sqc2 vf13, 32(s4)
block_1:
bc = c->sgpr64(s1) == 0; // beq s1, r0, L34
c->lwu(a2, 60, s2); // lwu a2, 60(s2)
if (bc) {goto block_14;} // branch non-likely
c->addiu(a3, r0, 896); // addiu a3, r0, 896
c->addiu(a1, r0, 0); // addiu a1, r0, 0
c->and_(a2, a2, a3); // and a2, a2, a3
c->addiu(a3, r0, 256); // addiu a3, r0, 256
bc = c->sgpr64(a2) == c->sgpr64(a1); // beq a2, a1, L32
c->daddiu(s1, s1, -1); // daddiu s1, s1, -1
if (bc) {goto block_5;} // branch non-likely
if (((s64)c->sgpr64(a2)) != ((s64)c->sgpr64(a3))) {// bnel a2, a3, L31
c->daddiu(s2, s2, 96); // daddiu s2, s2, 96
goto block_1;
}
block_5:
// nop // sll r0, r0, 0
c->lq(a2, 64, s2); // lq a2, 64(s2)
// nop // sll r0, r0, 0
c->lq(a1, 80, s2); // lq a1, 80(s2)
c->pcgtw(a2, a2, a0); // pcgtw a2, a2, a0
c->mfc1(r0, f31); // mfc1 r0, f31
c->pcgtw(a1, v1, a1); // pcgtw a1, v1, a1
c->mfc1(r0, f31); // mfc1 r0, f31
c->por(a1, a2, a1); // por a1, a2, a1
// nop // sll r0, r0, 0
c->ppach(a1, r0, a1); // ppach a1, r0, a1
c->mfc1(r0, f31); // mfc1 r0, f31
c->dsll(a1, a1, 16); // dsll a1, a1, 16
// nop // sll r0, r0, 0
if (((s64)c->sgpr64(a1)) != ((s64)0)) { // bnel a1, r0, L31
c->daddiu(s2, s2, 96); // daddiu s2, s2, 96
goto block_1;
}
// block_7:
c->load_symbol2(t9, cache.closest_pt_in_triangle);// lw t9, closest-pt-in-triangle(s7)
c->daddu(a0, r0, s4); // daddu a0, r0, s4
c->mov64(a1, s5); // or a1, s5, r0
c->daddu(a2, r0, s2); // daddu a2, r0, s2
c->daddiu(a3, s2, 48); // daddiu a3, s2, 48
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
c->lqc2(vf2, 0, s4); // lqc2 vf2, 0(s4)
c->lqc2(vf3, 0, s5); // lqc2 vf3, 0(s5)
c->lqc2(vf1, 48, s2); // lqc2 vf1, 48(s2)
c->lq(v1, 16, s4); // lq v1, 16(s4)
c->lq(a0, 32, s4); // lq a0, 32(s4)
c->vsub(DEST::xyzw, vf4, vf3, vf2); // vsub.xyzw vf4, vf3, vf2
c->lwu(a1, 60, s2); // lwu a1, 60(s2)
c->vmul(DEST::xyzw, vf5, vf4, vf1); // vmul.xyzw vf5, vf4, vf1
c->lqc2(vf7, 0, s2); // lqc2 vf7, 0(s2)
c->vmul(DEST::xyzw, vf6, vf4, vf4); // vmul.xyzw vf6, vf4, vf4
c->lqc2(vf8, 16, s2); // lqc2 vf8, 16(s2)
c->vmove(DEST::w, vf1, vf0); // vmove.w vf1, vf0
c->lqc2(vf9, 32, s2); // lqc2 vf9, 32(s2)
c->vadd_bc(DEST::y, BC::x, vf5, vf5, vf5); // vaddx.y vf5, vf5, vf5
c->daddiu(s2, s2, 96); // daddiu s2, s2, 96
c->vadd_bc(DEST::x, BC::y, vf6, vf6, vf6); // vaddy.x vf6, vf6, vf6
c->mtc1(f5, s3); // mtc1 f5, s3
c->vadd_bc(DEST::y, BC::z, vf5, vf5, vf5); // vaddz.y vf5, vf5, vf5
c->lui(a2, 17141); // lui a2, 17141
c->ori(a2, a2, 49807); // ori a2, a2, 49807
c->mtc1(f3, a2); // mtc1 f3, a2
c->vadd_bc(DEST::x, BC::z, vf6, vf6, vf6); // vaddz.x vf6, vf6, vf6
c->lui(a2, -15232); // lui a2, -15232
c->mtc1(f4, a2); // mtc1 f4, a2
c->vsqrt(vf6, BC::x); // vsqrt Q, vf6.x
c->mov128_gpr_vf(a2, vf5); // qmfc2.i a2, vf5
c->vwaitq(); // vwaitq
c->lwc1(f1, 12, s5); // lwc1 f1, 12(s5)
c->vaddq(DEST::x, vf6, vf0); // vaddq.x vf6, vf0, Q
c->vmove(DEST::xyzw, vf10, vf6); // vmove.xyzw vf10, vf6
if (((s64)c->sgpr64(a2)) < 0) { // bltzl a2, L33
c->vsub(DEST::xyzw, vf10, vf0, vf10); // vsub.xyzw vf10, vf0, vf10
goto block_9;
}
block_9:
c->mov128_gpr_vf(a2, vf10); // qmfc2.i a2, vf10
c->mtc1(f2, a2); // mtc1 f2, a2
c->subs(f2, f2, f1); // sub.s f2, f2, f1
cop1_bc = c->fprs[f5] < c->fprs[f2]; // c.lt.s f5, f2
bc = cop1_bc; // bc1t L31
c->vdiv(vf0, BC::w, vf6, BC::x); // vdiv Q, vf0.w, vf6.x
if (bc) {goto block_1;} // branch non-likely
cop1_bc = c->fprs[f3] <= c->fprs[f2]; // c.le.s f3, f2
bc = cop1_bc; // bc1t L31
// nop // sll r0, r0, 0
if (bc) {goto block_1;} // branch non-likely
cop1_bc = c->fprs[f2] <= c->fprs[f4]; // c.le.s f2, f4
bc = cop1_bc; // bc1t L31
// nop // sll r0, r0, 0
if (bc) {goto block_1;} // branch non-likely
c->vwaitq(); // vwaitq
// nop // sll r0, r0, 0
c->vmulq(DEST::xyzw, vf11, vf4); // vmulq.xyzw vf11, vf4, Q
c->lui(a2, 16180); // lui a2, 16180
c->ori(a2, a2, 65012); // ori a2, a2, 65012
c->mtc1(f6, a2); // mtc1 f6, a2
c->vmul(DEST::xyzw, vf5, vf11, vf1); // vmul.xyzw vf5, vf11, vf1
c->vadd_bc(DEST::x, BC::y, vf5, vf5, vf5); // vaddy.x vf5, vf5, vf5
c->vadd_bc(DEST::x, BC::z, vf5, vf5, vf5); // vaddz.x vf5, vf5, vf5
c->mov128_gpr_vf(a2, vf5); // qmfc2.i a2, vf5
c->mtc1(f7, a2); // mtc1 f7, a2
cop1_bc = c->fprs[f7] < c->fprs[f6]; // c.lt.s f7, f6
bc = cop1_bc; // bc1t L31
// nop // sll r0, r0, 0
if (bc) {goto block_1;} // branch non-likely
c->mfc1(s3, f2); // mfc1 s3, f2
c->sqc2(vf7, 0, gp); // sqc2 vf7, 0(gp)
c->sqc2(vf8, 16, gp); // sqc2 vf8, 16(gp)
c->sqc2(vf9, 32, gp); // sqc2 vf9, 32(gp)
c->sqc2(vf2, 48, gp); // sqc2 vf2, 48(gp)
c->sqc2(vf1, 64, gp); // sqc2 vf1, 64(gp)
//beq r0, r0, L31 // beq r0, r0, L31
c->sw(a1, 80, gp); // sw a1, 80(gp)
goto block_1; // branch always
block_14:
c->mov64(v0, s3); // or v0, s3, r0
c->ld(ra, 0, sp); // ld ra, 0(sp)
c->lq(gp, 144, sp); // lq gp, 144(sp)
c->lq(s5, 128, sp); // lq s5, 128(sp)
c->lq(s4, 112, sp); // lq s4, 112(sp)
c->lq(s3, 96, sp); // lq s3, 96(sp)
c->lq(s2, 80, sp); // lq s2, 80(sp)
c->lq(s1, 64, sp); // lq s1, 64(sp)
//jr ra // jr ra
c->daddiu(sp, sp, 160); // daddiu sp, sp, 160
goto end_of_function; // return
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
end_of_function:
return c->gprs[v0].du64[0];
}
void link() {
cache.closest_pt_in_triangle = intern_from_c(-1, 0, "closest-pt-in-triangle").c();
gLinkedFunctionTable.reg("(method 12 collide-mesh)", execute, 256);
}
} // namespace method_12_collide_mesh
} // namespace Mips2C
//--------------------------MIPS2C---------------------
// clang-format off
#include "game/mips2c/mips2c_private.h"
#include "game/kernel/jak3/kscheme.h"
using ::jak3::intern_from_c;
namespace Mips2C::jak3 {
namespace method_14_collide_mesh {
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
bool bc = false;
u32 call_addr = 0;
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
c->lwu(v1, 12, a0); // lwu v1, 12(a0)
// nop // sll r0, r0, 0
c->lwu(a0, 8, a0); // lwu a0, 8(a0)
// nop // sll r0, r0, 0
c->lqc2(vf1, 0, a1); // lqc2 vf1, 0(a1)
// nop // sll r0, r0, 0
c->lqc2(vf2, 16, a1); // lqc2 vf2, 16(a1)
// nop // sll r0, r0, 0
c->lqc2(vf3, 32, a1); // lqc2 vf3, 32(a1)
// nop // sll r0, r0, 0
c->lqc2(vf4, 48, a1); // lqc2 vf4, 48(a1)
// nop // sll r0, r0, 0
c->lqc2(vf5, 0, v1); // lqc2 vf5, 0(v1)
// nop // sll r0, r0, 0
c->lqc2(vf6, 16, v1); // lqc2 vf6, 16(v1)
// nop // sll r0, r0, 0
c->lqc2(vf7, 32, v1); // lqc2 vf7, 32(v1)
// nop // sll r0, r0, 0
c->lqc2(vf8, 48, v1); // lqc2 vf8, 48(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->lqc2(vf9, 64, v1); // lqc2 vf9, 64(v1)
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
c->lqc2(vf10, 80, v1); // lqc2 vf10, 80(v1)
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
c->lqc2(vf11, 96, v1); // lqc2 vf11, 96(v1)
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf3, vf5); // vmaddz.xyzw vf5, vf3, vf5
c->lqc2(vf12, 112, v1); // lqc2 vf12, 112(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf3, vf6); // vmaddz.xyzw vf6, vf3, vf6
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf3, vf7); // vmaddz.xyzw vf7, vf3, vf7
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf3, vf8); // vmaddz.xyzw vf8, vf3, vf8
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf13, vf5); // vftoi0.xyzw vf13, vf5
c->sqc2(vf5, 0, a2); // sqc2 vf5, 0(a2)
c->vftoi0(DEST::xyzw, vf14, vf6); // vftoi0.xyzw vf14, vf6
c->sqc2(vf6, 32, a2); // sqc2 vf6, 32(a2)
c->vftoi0(DEST::xyzw, vf15, vf7); // vftoi0.xyzw vf15, vf7
c->sqc2(vf7, 64, a2); // sqc2 vf7, 64(a2)
c->vftoi0(DEST::xyzw, vf16, vf8); // vftoi0.xyzw vf16, vf8
c->sqc2(vf8, 96, a2); // sqc2 vf8, 96(a2)
// nop // sll r0, r0, 0
c->sqc2(vf13, 16, a2); // sqc2 vf13, 16(a2)
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
c->sqc2(vf14, 48, a2); // sqc2 vf14, 48(a2)
c->daddiu(v1, v1, 128); // daddiu v1, v1, 128
c->sqc2(vf15, 80, a2); // sqc2 vf15, 80(a2)
bc = ((s64)c->sgpr64(a0)) <= 0; // blez a0, L25
c->sqc2(vf16, 112, a2); // sqc2 vf16, 112(a2)
if (bc) {goto block_3;} // branch non-likely
block_1:
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->lqc2(vf5, 0, v1); // lqc2 vf5, 0(v1)
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf9); // vmaddax.xyzw acc, vf1, vf9
c->lqc2(vf6, 16, v1); // lqc2 vf6, 16(v1)
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf9); // vmadday.xyzw acc, vf2, vf9
c->lqc2(vf7, 32, v1); // lqc2 vf7, 32(v1)
c->vmadd_bc(DEST::xyzw, BC::z, vf9, vf3, vf9); // vmaddz.xyzw vf9, vf3, vf9
c->lqc2(vf8, 48, v1); // lqc2 vf8, 48(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf10); // vmaddax.xyzw acc, vf1, vf10
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf10); // vmadday.xyzw acc, vf2, vf10
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf3, vf10); // vmaddz.xyzw vf10, vf3, vf10
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf11); // vmaddax.xyzw acc, vf1, vf11
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf11); // vmadday.xyzw acc, vf2, vf11
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf3, vf11); // vmaddz.xyzw vf11, vf3, vf11
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf12); // vmaddax.xyzw acc, vf1, vf12
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf12); // vmadday.xyzw acc, vf2, vf12
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf3, vf12); // vmaddz.xyzw vf12, vf3, vf12
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf17, vf9); // vftoi0.xyzw vf17, vf9
c->sqc2(vf9, 128, a2); // sqc2 vf9, 128(a2)
c->vftoi0(DEST::xyzw, vf18, vf10); // vftoi0.xyzw vf18, vf10
c->sqc2(vf10, 160, a2); // sqc2 vf10, 160(a2)
c->vftoi0(DEST::xyzw, vf19, vf11); // vftoi0.xyzw vf19, vf11
c->sqc2(vf11, 192, a2); // sqc2 vf11, 192(a2)
c->vftoi0(DEST::xyzw, vf20, vf12); // vftoi0.xyzw vf20, vf12
c->sqc2(vf12, 224, a2); // sqc2 vf12, 224(a2)
// nop // sll r0, r0, 0
c->sqc2(vf17, 144, a2); // sqc2 vf17, 144(a2)
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
c->sqc2(vf18, 176, a2); // sqc2 vf18, 176(a2)
// nop // sll r0, r0, 0
c->sqc2(vf19, 208, a2); // sqc2 vf19, 208(a2)
bc = ((s64)c->sgpr64(a0)) <= 0; // blez a0, L25
c->sqc2(vf20, 240, a2); // sqc2 vf20, 240(a2)
if (bc) {goto block_3;} // branch non-likely
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->lqc2(vf9, 64, v1); // lqc2 vf9, 64(v1)
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
c->lqc2(vf10, 80, v1); // lqc2 vf10, 80(v1)
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
c->lqc2(vf11, 96, v1); // lqc2 vf11, 96(v1)
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf3, vf5); // vmaddz.xyzw vf5, vf3, vf5
c->lqc2(vf12, 112, v1); // lqc2 vf12, 112(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->daddiu(a2, a2, 256); // daddiu a2, a2, 256
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf3, vf6); // vmaddz.xyzw vf6, vf3, vf6
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf3, vf7); // vmaddz.xyzw vf7, vf3, vf7
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf3, vf8); // vmaddz.xyzw vf8, vf3, vf8
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf13, vf5); // vftoi0.xyzw vf13, vf5
c->sqc2(vf5, 0, a2); // sqc2 vf5, 0(a2)
c->vftoi0(DEST::xyzw, vf14, vf6); // vftoi0.xyzw vf14, vf6
c->sqc2(vf6, 32, a2); // sqc2 vf6, 32(a2)
c->vftoi0(DEST::xyzw, vf15, vf7); // vftoi0.xyzw vf15, vf7
c->sqc2(vf7, 64, a2); // sqc2 vf7, 64(a2)
c->vftoi0(DEST::xyzw, vf16, vf8); // vftoi0.xyzw vf16, vf8
c->sqc2(vf8, 96, a2); // sqc2 vf8, 96(a2)
// nop // sll r0, r0, 0
c->sqc2(vf13, 16, a2); // sqc2 vf13, 16(a2)
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
c->sqc2(vf14, 48, a2); // sqc2 vf14, 48(a2)
c->daddiu(v1, v1, 128); // daddiu v1, v1, 128
c->sqc2(vf15, 80, a2); // sqc2 vf15, 80(a2)
bc = ((s64)c->sgpr64(a0)) > 0; // bgtz a0, L24
c->sqc2(vf16, 112, a2); // sqc2 vf16, 112(a2)
if (bc) {goto block_1;} // branch non-likely
block_3:
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
//jr ra // jr ra
c->daddu(sp, sp, r0); // daddu sp, sp, r0
goto end_of_function; // return
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
end_of_function:
return c->gprs[v0].du64[0];
}
void link() {
gLinkedFunctionTable.reg("(method 14 collide-mesh)", execute, 256);
}
} // namespace method_14_collide_mesh
} // namespace Mips2C
//--------------------------MIPS2C---------------------
// clang-format off
#include "game/mips2c/mips2c_private.h"
#include "game/kernel/jak3/kscheme.h"
using ::jak3::intern_from_c;
namespace Mips2C::jak3 {
namespace method_15_collide_mesh {
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
bool bc = false;
u32 call_addr = 0;
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
c->lwu(v1, 12, a0); // lwu v1, 12(a0)
// nop // sll r0, r0, 0
c->lwu(a0, 8, a0); // lwu a0, 8(a0)
// nop // sll r0, r0, 0
c->lqc2(vf1, 0, a1); // lqc2 vf1, 0(a1)
// nop // sll r0, r0, 0
c->lqc2(vf2, 16, a1); // lqc2 vf2, 16(a1)
// nop // sll r0, r0, 0
c->lqc2(vf3, 32, a1); // lqc2 vf3, 32(a1)
// nop // sll r0, r0, 0
c->lqc2(vf4, 48, a1); // lqc2 vf4, 48(a1)
// nop // sll r0, r0, 0
c->lqc2(vf13, 0, a2); // lqc2 vf13, 0(a2)
// nop // sll r0, r0, 0
c->lqc2(vf14, 16, a2); // lqc2 vf14, 16(a2)
// nop // sll r0, r0, 0
c->lqc2(vf15, 32, a2); // lqc2 vf15, 32(a2)
// nop // sll r0, r0, 0
c->lqc2(vf16, 48, a2); // lqc2 vf16, 48(a2)
// nop // sll r0, r0, 0
c->lqc2(vf5, 0, v1); // lqc2 vf5, 0(v1)
// nop // sll r0, r0, 0
c->lqc2(vf6, 16, v1); // lqc2 vf6, 16(v1)
// nop // sll r0, r0, 0
c->lqc2(vf7, 32, v1); // lqc2 vf7, 32(v1)
// nop // sll r0, r0, 0
c->lqc2(vf8, 48, v1); // lqc2 vf8, 48(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->lqc2(vf9, 64, v1); // lqc2 vf9, 64(v1)
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
c->lqc2(vf10, 80, v1); // lqc2 vf10, 80(v1)
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
c->lqc2(vf11, 96, v1); // lqc2 vf11, 96(v1)
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf3, vf5); // vmaddz.xyzw vf5, vf3, vf5
c->lqc2(vf12, 112, v1); // lqc2 vf12, 112(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf3, vf6); // vmaddz.xyzw vf6, vf3, vf6
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf3, vf7); // vmaddz.xyzw vf7, vf3, vf7
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf3, vf8); // vmaddz.xyzw vf8, vf3, vf8
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
c->sqc2(vf5, 0, a3); // sqc2 vf5, 0(a3)
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf5); // vmaddax.xyzw acc, vf13, vf5
c->sqc2(vf6, 32, a3); // sqc2 vf6, 32(a3)
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf5); // vmadday.xyzw acc, vf14, vf5
c->sqc2(vf7, 64, a3); // sqc2 vf7, 64(a3)
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf15, vf5); // vmaddz.xyzw vf5, vf15, vf5
c->sqc2(vf8, 96, a3); // sqc2 vf8, 96(a3)
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf6); // vmaddax.xyzw acc, vf13, vf6
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf6); // vmadday.xyzw acc, vf14, vf6
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf15, vf6); // vmaddz.xyzw vf6, vf15, vf6
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf7); // vmaddax.xyzw acc, vf13, vf7
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf7); // vmadday.xyzw acc, vf14, vf7
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf15, vf7); // vmaddz.xyzw vf7, vf15, vf7
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf8); // vmaddax.xyzw acc, vf13, vf8
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf8); // vmadday.xyzw acc, vf14, vf8
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf15, vf8); // vmaddz.xyzw vf8, vf15, vf8
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf5, vf5); // vftoi0.xyzw vf5, vf5
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf6, vf6); // vftoi0.xyzw vf6, vf6
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf7, vf7); // vftoi0.xyzw vf7, vf7
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf8, vf8); // vftoi0.xyzw vf8, vf8
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
c->sqc2(vf5, 16, a3); // sqc2 vf5, 16(a3)
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
c->sqc2(vf6, 48, a3); // sqc2 vf6, 48(a3)
c->daddiu(v1, v1, 128); // daddiu v1, v1, 128
c->sqc2(vf7, 80, a3); // sqc2 vf7, 80(a3)
bc = ((s64)c->sgpr64(a0)) <= 0; // blez a0, L22
c->sqc2(vf8, 112, a3); // sqc2 vf8, 112(a3)
if (bc) {goto block_3;} // branch non-likely
block_1:
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->lqc2(vf5, 0, v1); // lqc2 vf5, 0(v1)
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf9); // vmaddax.xyzw acc, vf1, vf9
c->lqc2(vf6, 16, v1); // lqc2 vf6, 16(v1)
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf9); // vmadday.xyzw acc, vf2, vf9
c->lqc2(vf7, 32, v1); // lqc2 vf7, 32(v1)
c->vmadd_bc(DEST::xyzw, BC::z, vf9, vf3, vf9); // vmaddz.xyzw vf9, vf3, vf9
c->lqc2(vf8, 48, v1); // lqc2 vf8, 48(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf10); // vmaddax.xyzw acc, vf1, vf10
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf10); // vmadday.xyzw acc, vf2, vf10
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf3, vf10); // vmaddz.xyzw vf10, vf3, vf10
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf11); // vmaddax.xyzw acc, vf1, vf11
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf11); // vmadday.xyzw acc, vf2, vf11
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf3, vf11); // vmaddz.xyzw vf11, vf3, vf11
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf12); // vmaddax.xyzw acc, vf1, vf12
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf12); // vmadday.xyzw acc, vf2, vf12
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf3, vf12); // vmaddz.xyzw vf12, vf3, vf12
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
c->sqc2(vf9, 128, a3); // sqc2 vf9, 128(a3)
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf9); // vmaddax.xyzw acc, vf13, vf9
c->sqc2(vf10, 160, a3); // sqc2 vf10, 160(a3)
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf9); // vmadday.xyzw acc, vf14, vf9
c->sqc2(vf11, 192, a3); // sqc2 vf11, 192(a3)
c->vmadd_bc(DEST::xyzw, BC::z, vf9, vf15, vf9); // vmaddz.xyzw vf9, vf15, vf9
c->sqc2(vf12, 224, a3); // sqc2 vf12, 224(a3)
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf10); // vmaddax.xyzw acc, vf13, vf10
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf10); // vmadday.xyzw acc, vf14, vf10
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf15, vf10); // vmaddz.xyzw vf10, vf15, vf10
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf11); // vmaddax.xyzw acc, vf13, vf11
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf11); // vmadday.xyzw acc, vf14, vf11
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf15, vf11); // vmaddz.xyzw vf11, vf15, vf11
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf12); // vmaddax.xyzw acc, vf13, vf12
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf12); // vmadday.xyzw acc, vf14, vf12
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf15, vf12); // vmaddz.xyzw vf12, vf15, vf12
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf9, vf9); // vftoi0.xyzw vf9, vf9
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf10, vf10); // vftoi0.xyzw vf10, vf10
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf11, vf11); // vftoi0.xyzw vf11, vf11
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf12, vf12); // vftoi0.xyzw vf12, vf12
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
c->sqc2(vf9, 144, a3); // sqc2 vf9, 144(a3)
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
c->sqc2(vf10, 176, a3); // sqc2 vf10, 176(a3)
// nop // sll r0, r0, 0
c->sqc2(vf11, 208, a3); // sqc2 vf11, 208(a3)
bc = ((s64)c->sgpr64(a0)) <= 0; // blez a0, L22
c->sqc2(vf12, 240, a3); // sqc2 vf12, 240(a3)
if (bc) {goto block_3;} // branch non-likely
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->lqc2(vf9, 64, v1); // lqc2 vf9, 64(v1)
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf5); // vmaddax.xyzw acc, vf1, vf5
c->lqc2(vf10, 80, v1); // lqc2 vf10, 80(v1)
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf5); // vmadday.xyzw acc, vf2, vf5
c->lqc2(vf11, 96, v1); // lqc2 vf11, 96(v1)
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf3, vf5); // vmaddz.xyzw vf5, vf3, vf5
c->lqc2(vf12, 112, v1); // lqc2 vf12, 112(v1)
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
c->daddiu(a3, a3, 256); // daddiu a3, a3, 256
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf6); // vmaddax.xyzw acc, vf1, vf6
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf6); // vmadday.xyzw acc, vf2, vf6
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf3, vf6); // vmaddz.xyzw vf6, vf3, vf6
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf7); // vmaddax.xyzw acc, vf1, vf7
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf7); // vmadday.xyzw acc, vf2, vf7
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf3, vf7); // vmaddz.xyzw vf7, vf3, vf7
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf4, vf0); // vmulaw.xyzw acc, vf4, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf1, vf8); // vmaddax.xyzw acc, vf1, vf8
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf2, vf8); // vmadday.xyzw acc, vf2, vf8
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf3, vf8); // vmaddz.xyzw vf8, vf3, vf8
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
c->sqc2(vf5, 0, a3); // sqc2 vf5, 0(a3)
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf5); // vmaddax.xyzw acc, vf13, vf5
c->sqc2(vf6, 32, a3); // sqc2 vf6, 32(a3)
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf5); // vmadday.xyzw acc, vf14, vf5
c->sqc2(vf7, 64, a3); // sqc2 vf7, 64(a3)
c->vmadd_bc(DEST::xyzw, BC::z, vf5, vf15, vf5); // vmaddz.xyzw vf5, vf15, vf5
c->sqc2(vf8, 96, a3); // sqc2 vf8, 96(a3)
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf6); // vmaddax.xyzw acc, vf13, vf6
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf6); // vmadday.xyzw acc, vf14, vf6
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf6, vf15, vf6); // vmaddz.xyzw vf6, vf15, vf6
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf7); // vmaddax.xyzw acc, vf13, vf7
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf7); // vmadday.xyzw acc, vf14, vf7
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf7, vf15, vf7); // vmaddz.xyzw vf7, vf15, vf7
// nop // sll r0, r0, 0
c->vmula_bc(DEST::xyzw, BC::w, vf16, vf0); // vmulaw.xyzw acc, vf16, vf0
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::x, vf13, vf8); // vmaddax.xyzw acc, vf13, vf8
// nop // sll r0, r0, 0
c->vmadda_bc(DEST::xyzw, BC::y, vf14, vf8); // vmadday.xyzw acc, vf14, vf8
// nop // sll r0, r0, 0
c->vmadd_bc(DEST::xyzw, BC::z, vf8, vf15, vf8); // vmaddz.xyzw vf8, vf15, vf8
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf5, vf5); // vftoi0.xyzw vf5, vf5
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf6, vf6); // vftoi0.xyzw vf6, vf6
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf7, vf7); // vftoi0.xyzw vf7, vf7
// nop // sll r0, r0, 0
c->vftoi0(DEST::xyzw, vf8, vf8); // vftoi0.xyzw vf8, vf8
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
c->sqc2(vf5, 16, a3); // sqc2 vf5, 16(a3)
c->daddiu(a0, a0, -4); // daddiu a0, a0, -4
c->sqc2(vf6, 48, a3); // sqc2 vf6, 48(a3)
c->daddiu(v1, v1, 128); // daddiu v1, v1, 128
c->sqc2(vf7, 80, a3); // sqc2 vf7, 80(a3)
bc = ((s64)c->sgpr64(a0)) > 0; // bgtz a0, L21
c->sqc2(vf8, 112, a3); // sqc2 vf8, 112(a3)
if (bc) {goto block_1;} // branch non-likely
block_3:
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
//jr ra // jr ra
c->daddu(sp, sp, r0); // daddu sp, sp, r0
goto end_of_function; // return
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
end_of_function:
return c->gprs[v0].du64[0];
}
void link() {
gLinkedFunctionTable.reg("(method 15 collide-mesh)", execute, 256);
}
} // namespace method_15_collide_mesh
} // namespace Mips2C
+54
View File
@@ -327,6 +327,23 @@ struct Cache {
void* merc_global_stats; // *merc-global-stats*
} cache;
struct MercEffectBucketInfo {
u8 color_fade[4];
u8 merc_path;
u8 ignore_alpha;
u8 disable_draw;
u8 disable_envmap;
};
struct MercBucketInfo {
u8 lights[0x70];
u32 needs_clip;
u32 mercprime;
u32 mercneric;
MercEffectBucketInfo effects[64];
};
static_assert(sizeof(MercBucketInfo) == 0x27c);
// TODO: hack this up for pc merc rendering.
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
@@ -341,6 +358,7 @@ u64 execute(void* ctxt) {
c->sq(s4, 80, sp); // sq s4, 80(sp)
c->sq(s5, 96, sp); // sq s5, 96(sp)
c->sq(gp, 112, sp); // sq gp, 112(sp)
const MercBucketInfo* mbi = (const MercBucketInfo*)(g_ee_main_mem + c->sgpr64(t1));
c->mov64(t7, a3); // or t7, a3, r0
c->mov64(v1, t0); // or v1, t0, r0
c->lui(t0, 4096); // lui t0, 4096
@@ -444,6 +462,23 @@ block_6:
c->sw(a3, 12, a2); // sw a3, 12(a2)
c->srl(s0, s0, 2); // srl s0, s0, 2
c->sq(t1, 16, a2); // sq t1, 16(a2)
// pc hack
{
u16 use_pc_merc_bits = 0;
u16 ignore_alpha_bits = 0;
for (int i = 0; i < 16; i++) {
if (!mbi->effects[i].disable_draw) {
use_pc_merc_bits |= (1 << i);
}
if (mbi->effects[i].ignore_alpha) {
ignore_alpha_bits |= (1 << i);
}
}
memcpy(g_ee_main_mem + c->sgpr64(a2) + 28, &use_pc_merc_bits, 2);
memcpy(g_ee_main_mem + c->sgpr64(a2) + 30, &ignore_alpha_bits, 2);
}
c->xor_(t3, t3, s0); // xor t3, t3, s0
c->sq(t3, 48, a2); // sq t3, 48(a2)
c->xor_(t3, t3, s0); // xor t3, t3, s0
@@ -500,6 +535,21 @@ block_6:
c->sw(a3, 28, a2); // sw a3, 28(a2)
c->daddiu(a2, a2, 144); // daddiu a2, a2, 144
// PC ADD BONUS DATA (bonus!)
{
// 10 qw test
u64 dmatag = 5 | (1 << 28);
memcpy(g_ee_main_mem + c->sgpr64(a2), &dmatag, 8);
u32 vif = (0b1001 << 24);
memcpy(g_ee_main_mem + c->sgpr64(a2) + 8, &vif, 4);
for (int i = 0; i < 16; i++) {
memcpy(g_ee_main_mem + c->sgpr64(a2) + 16 + i * 4, mbi->effects[i].color_fade, 4);
}
c->gprs[a2].du32[0] += 6 * 16;
}
block_8:
bc = c->sgpr64(s3) == 0; // beq s3, r0, L116
c->addiu(s2, r0, 128); // addiu s2, r0, 128
@@ -513,6 +563,10 @@ block_10:
c->sq(t5, 0, a2); // sq t5, 0(a2)
c->lbu(s0, 1, gp); // lbu s0, 1(gp)
c->daddiu(gp, gp, 2); // daddiu gp, gp, 2
// HACK for PC PORT: stash the source matrix number in the unused bits of nop viftag.
c->sb(a3, 8, a2);
c->lbu(a3, 0, gp); // lbu a3, 0(gp)
c->daddiu(s3, s3, -1); // daddiu s3, s3, -1
c->sb(s0, 12, a2); // sb s0, 12(a2)
+712
View File
@@ -0,0 +1,712 @@
//--------------------------MIPS2C---------------------
// clang-format off
#include "game/mips2c/mips2c_private.h"
#include "game/kernel/jak3/kscheme.h"
using ::jak3::intern_from_c;
namespace Mips2C::jak3 {
namespace sp_process_block_2d {
struct Cache {
void* fake_scratchpad_data; // *fake-scratchpad-data*
void* add_to_sprite_aux_list; // add-to-sprite-aux-list
void* sp_free_particle; // sp-free-particle
void* sp_orbiter; // sp-orbiter
void* sp_relaunch_particle_2d; // sp-relaunch-particle-2d
} cache;
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
bool bc = false;
u32 call_addr = 0;
c->daddiu(sp, sp, -128); // daddiu sp, sp, -128
c->sd(ra, 0, sp); // sd ra, 0(sp)
c->sq(s0, 16, sp); // sq s0, 16(sp)
c->sq(s1, 32, sp); // sq s1, 32(sp)
c->sq(s2, 48, sp); // sq s2, 48(sp)
c->sq(s3, 64, sp); // sq s3, 64(sp)
c->sq(s4, 80, sp); // sq s4, 80(sp)
c->sq(s5, 96, sp); // sq s5, 96(sp)
c->sq(gp, 112, sp); // sq gp, 112(sp)
c->mov64(gp, a0); // or gp, a0, r0
c->mov64(s5, a1); // or s5, a1, r0
c->mov64(s4, a2); // or s4, a2, r0
c->mov64(s1, a3); // or s1, a3, r0
c->mov64(s3, t0); // or s3, t0, r0
c->mov64(s2, t1); // or s2, t1, r0
block_1:
c->lb(v1, 128, s5); // lb v1, 128(s5)
bc = c->sgpr64(v1) == 0; // beq v1, r0, L97
// nop // sll r0, r0, 0
if (bc) {goto block_32;} // branch non-likely
c->lb(a0, 129, s5); // lb a0, 129(s5)
get_fake_spad_addr2(v1, cache.fake_scratchpad_data, 0, c);// lui v1, 28672
c->dsll(a0, a0, 4); // dsll a0, a0, 4
c->daddu(v1, v1, a0); // daddu v1, v1, a0
c->lqc2(vf9, 0, v1); // lqc2 vf9, 0(v1)
c->mov128_gpr_vf(v1, vf9); // qmfc2.i v1, vf9
c->andi(s0, v1, 255); // andi s0, v1, 255
bc = c->sgpr64(s0) != 0; // bne s0, r0, L87
// nop // sll r0, r0, 0
if (bc) {goto block_9;} // branch non-likely
c->lw(v1, 104, s5); // lw v1, 104(s5)
// nop // sll r0, r0, 0
c->andi(v1, v1, 32896); // andi v1, v1, 32896
bc = c->sgpr64(v1) == 0; // beq v1, r0, L85
// nop // sll r0, r0, 0
if (bc) {goto block_5;} // branch non-likely
c->load_symbol2(t9, cache.add_to_sprite_aux_list);// lw t9, add-to-sprite-aux-list(s7)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a1, s5); // or a1, s5, r0
c->mov64(a2, s4); // or a2, s4, r0
c->mov64(a3, s1); // or a3, s1, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
block_5:
c->lw(v1, 100, s5); // lw v1, 100(s5)
c->addiu(a0, r0, -1); // addiu a0, r0, -1
bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L86
// nop // sll r0, r0, 0
if (bc) {goto block_7;} // branch non-likely
bc = c->sgpr64(v1) == 0; // beq v1, r0, L96
// nop // sll r0, r0, 0
if (bc) {goto block_31;} // branch non-likely
block_7:
c->lw(a0, 104, s5); // lw a0, 104(s5)
c->andi(v1, a0, 32); // andi v1, a0, 32
c->xor_(a0, a0, v1); // xor a0, a0, v1
bc = c->sgpr64(v1) == 0; // beq v1, r0, L97
c->sw(a0, 104, s5); // sw a0, 104(s5)
if (bc) {goto block_32;} // branch non-likely
c->lw(v1, 124, s5); // lw v1, 124(s5)
//beq r0, r0, L97 // beq r0, r0, L97
c->sw(v1, 44, s4); // sw v1, 44(s4)
goto block_32; // branch always
block_9:
c->lw(v1, 100, s5); // lw v1, 100(s5)
c->addiu(a0, r0, -1); // addiu a0, r0, -1
bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L88
c->dsubu(a0, v1, s0); // dsubu a0, v1, s0
if (bc) {goto block_12;} // branch non-likely
bc = c->sgpr64(v1) == 0; // beq v1, r0, L96
c->pmaxw(v1, a0, r0); // pmaxw v1, a0, r0
if (bc) {goto block_31;} // branch non-likely
c->sw(v1, 100, s5); // sw v1, 100(s5)
block_12:
c->lw(v1, 104, s5); // lw v1, 104(s5)
c->andi(a0, v1, 32); // andi a0, v1, 32
c->xor_(v1, v1, a0); // xor v1, v1, a0
bc = c->sgpr64(a0) == 0; // beq a0, r0, L89
c->sw(v1, 104, s5); // sw v1, 104(s5)
if (bc) {goto block_14;} // branch non-likely
c->lw(a0, 124, s5); // lw a0, 124(s5)
c->sw(a0, 44, s4); // sw a0, 44(s4)
block_14:
c->lw(t9, 112, s5); // lw t9, 112(s5)
c->andi(v1, v1, 32896); // andi v1, v1, 32896
c->load_symbol2(a0, cache.add_to_sprite_aux_list);// lw a0, add-to-sprite-aux-list(s7)
c->movn(t9, a0, v1); // movn t9, a0, v1
bc = c->sgpr64(t9) == 0; // beq t9, r0, L90
// nop // sll r0, r0, 0
if (bc) {goto block_16;} // branch non-likely
c->daddiu(sp, sp, -80); // daddiu sp, sp, -80
c->sq(gp, 0, sp); // sq gp, 0(sp)
c->sq(s5, 16, sp); // sq s5, 16(sp)
c->sq(s4, 32, sp); // sq s4, 32(sp)
c->sq(s1, 48, sp); // sq s1, 48(sp)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a1, s5); // or a1, s5, r0
c->mov64(a2, s4); // or a2, s4, r0
c->mov64(a3, s1); // or a3, s1, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sq(s3, 64, sp); // sq s3, 64(sp)
c->jalr(call_addr); // jalr ra, t9
c->lq(gp, 0, sp); // lq gp, 0(sp)
c->lq(s5, 16, sp); // lq s5, 16(sp)
c->lq(s4, 32, sp); // lq s4, 32(sp)
c->lq(s1, 48, sp); // lq s1, 48(sp)
c->lq(s3, 64, sp); // lq s3, 64(sp)
c->daddiu(sp, sp, 80); // daddiu sp, sp, 80
block_16:
c->lw(a1, 120, s5); // lw a1, 120(s5)
c->lw(v1, 116, s5); // lw v1, 116(s5)
bc = c->sgpr64(a1) == 0; // beq a1, r0, L91
c->dsubu(a0, v1, s0); // dsubu a0, v1, s0
if (bc) {goto block_19;} // branch non-likely
c->daddiu(v1, a0, -1); // daddiu v1, a0, -1
bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L91
c->sw(a0, 116, s5); // sw a0, 116(s5)
if (bc) {goto block_19;} // branch non-likely
c->daddiu(sp, sp, -96); // daddiu sp, sp, -96
c->sq(gp, 0, sp); // sq gp, 0(sp)
c->sq(s5, 16, sp); // sq s5, 16(sp)
c->sq(s4, 32, sp); // sq s4, 32(sp)
c->sq(s1, 48, sp); // sq s1, 48(sp)
c->sq(s3, 64, sp); // sq s3, 64(sp)
c->sq(s2, 80, sp); // sq s2, 80(sp)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a3, s4); // or a3, s4, r0
c->mov64(a2, s5); // or a2, s5, r0
c->load_symbol2(t9, cache.sp_relaunch_particle_2d);// lw t9, sp-relaunch-particle-2d(s7)
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
c->lq(gp, 0, sp); // lq gp, 0(sp)
c->lq(s5, 16, sp); // lq s5, 16(sp)
c->lq(s4, 32, sp); // lq s4, 32(sp)
c->lq(s1, 48, sp); // lq s1, 48(sp)
c->lq(s3, 64, sp); // lq s3, 64(sp)
c->lq(s2, 80, sp); // lq s2, 80(sp)
c->daddiu(sp, sp, 96); // daddiu sp, sp, 96
block_19:
c->lqc2(vf1, 0, s4); // lqc2 vf1, 0(s4)
c->lqc2(vf2, 16, s4); // lqc2 vf2, 16(s4)
c->lqc2(vf3, 32, s4); // lqc2 vf3, 32(s4)
c->lqc2(vf4, 16, s5); // lqc2 vf4, 16(s5)
c->lqc2(vf5, 32, s5); // lqc2 vf5, 32(s5)
c->lqc2(vf6, 48, s5); // lqc2 vf6, 48(s5)
c->lqc2(vf7, 64, s5); // lqc2 vf7, 64(s5)
c->lwc1(f0, 96, s5); // lwc1 f0, 96(s5)
c->mfc1(v1, f0); // mfc1 v1, f0
c->vmul_bc(DEST::xyzw, BC::z, vf7, vf7, vf9); // vmulz.xyzw vf7, vf7, vf9
bc = c->sgpr64(v1) == 0; // beq v1, r0, L92
c->vadd(DEST::xyz, vf4, vf4, vf7); // vadd.xyz vf4, vf4, vf7
if (bc) {goto block_21;} // branch non-likely
c->mov128_vf_gpr(vf8, v1); // qmtc2.i vf8, v1
c->vsub_bc(DEST::w, BC::x, vf8, vf0, vf8); // vsubx.w vf8, vf0, vf8
c->vmul_bc(DEST::xyzw, BC::w, vf8, vf8, vf9); // vmulw.xyzw vf8, vf8, vf9
c->vsub_bc(DEST::w, BC::w, vf8, vf0, vf8); // vsubw.w vf8, vf0, vf8
c->vmul_bc(DEST::xyz, BC::w, vf4, vf4, vf8); // vmulw.xyz vf4, vf4, vf8
block_21:
c->vmul_bc(DEST::xyzw, BC::y, vf10, vf4, vf9); // vmuly.xyzw vf10, vf4, vf9
c->vmul_bc(DEST::xyzw, BC::y, vf11, vf5, vf9); // vmuly.xyzw vf11, vf5, vf9
c->vmul_bc(DEST::xyzw, BC::y, vf12, vf6, vf9); // vmuly.xyzw vf12, vf6, vf9
c->vadd(DEST::xyzw, vf1, vf1, vf10); // vadd.xyzw vf1, vf1, vf10
c->vadd(DEST::zw, vf2, vf2, vf11); // vadd.zw vf2, vf2, vf11
c->vadd(DEST::xyzw, vf3, vf3, vf12); // vadd.xyzw vf3, vf3, vf12
c->vmax_bc(DEST::xyzw, BC::x, vf3, vf3, vf0); // vmaxx.xyzw vf3, vf3, vf0
c->sqc2(vf4, 16, s5); // sqc2 vf4, 16(s5)
c->sqc2(vf1, 0, s4); // sqc2 vf1, 0(s4)
c->sqc2(vf2, 16, s4); // sqc2 vf2, 16(s4)
c->sqc2(vf3, 32, s4); // sqc2 vf3, 32(s4)
c->lwc1(f0, 24, s4); // lwc1 f0, 24(s4)
c->cvtws(f0, f0); // cvt.w.s f0, f0
c->mfc1(v1, f0); // mfc1 v1, f0
c->dsll32(v1, v1, 16); // dsll32 v1, v1, 16
c->dsra32(v1, v1, 16); // dsra32 v1, v1, 16
c->mtc1(f0, v1); // mtc1 f0, v1
c->cvtsw(f0, f0); // cvt.s.w f0, f0
c->swc1(f0, 24, s4); // swc1 f0, 24(s4)
c->lw(v1, 104, s5); // lw v1, 104(s5)
c->andi(v1, v1, 64); // andi v1, v1, 64
bc = c->sgpr64(v1) == 0; // beq v1, r0, L93
c->load_symbol2(t9, cache.sp_orbiter); // lw t9, sp-orbiter(s7)
if (bc) {goto block_23;} // branch non-likely
c->daddiu(sp, sp, -96); // daddiu sp, sp, -96
c->sq(gp, 0, sp); // sq gp, 0(sp)
c->sq(s5, 16, sp); // sq s5, 16(sp)
c->sq(s4, 32, sp); // sq s4, 32(sp)
c->sq(s1, 48, sp); // sq s1, 48(sp)
c->sq(s3, 64, sp); // sq s3, 64(sp)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a1, s5); // or a1, s5, r0
c->mov64(a2, s4); // or a2, s4, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sq(s2, 80, sp); // sq s2, 80(sp)
c->jalr(call_addr); // jalr ra, t9
c->lq(gp, 0, sp); // lq gp, 0(sp)
c->lq(s5, 16, sp); // lq s5, 16(sp)
c->lq(s4, 32, sp); // lq s4, 32(sp)
c->lq(s1, 48, sp); // lq s1, 48(sp)
c->lq(s3, 64, sp); // lq s3, 64(sp)
c->lq(s2, 80, sp); // lq s2, 80(sp)
c->daddiu(sp, sp, 96); // daddiu sp, sp, 96
block_23:
c->lq(v1, 32, s4); // lq v1, 32(s4)
c->lw(a0, 104, s5); // lw a0, 104(s5)
c->andi(a1, a0, 2); // andi a1, a0, 2
bc = c->sgpr64(a1) == 0; // beq a1, r0, L94
c->andi(a1, a0, 4); // andi a1, a0, 4
if (bc) {goto block_26;} // branch non-likely
bc = c->sgpr64(v1) != 0; // bne v1, r0, L94
c->pextuw(t4, v1, r0); // pextuw t4, v1, r0
if (bc) {goto block_26;} // branch non-likely
bc = c->sgpr64(t4) == 0; // beq t4, r0, L96
// nop // sll r0, r0, 0
if (bc) {goto block_31;} // branch non-likely
block_26:
bc = c->sgpr64(a1) == 0; // beq a1, r0, L95
c->andi(a0, a0, 1); // andi a0, a0, 1
if (bc) {goto block_28;} // branch non-likely
c->pcpyud(t4, v1, r0); // pcpyud t4, v1, r0
c->pexew(t4, t4); // pexew t4, t4
bc = ((s64)c->sgpr64(t4)) <= 0; // blez t4, L96
// nop // sll r0, r0, 0
if (bc) {goto block_31;} // branch non-likely
block_28:
bc = c->sgpr64(a0) == 0; // beq a0, r0, L97
// nop // sll r0, r0, 0
if (bc) {goto block_32;} // branch non-likely
c->mov128_gpr_vf(v1, vf1); // qmfc2.i v1, vf1
c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0
c->pexew(v1, v1); // pexew v1, v1
bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L96
c->mov128_gpr_vf(v1, vf2); // qmfc2.i v1, vf2
if (bc) {goto block_31;} // branch non-likely
c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0
c->pexew(v1, v1); // pexew v1, v1
bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L97
// nop // sll r0, r0, 0
if (bc) {goto block_32;} // branch non-likely
block_31:
c->load_symbol2(t9, cache.sp_free_particle); // lw t9, sp-free-particle(s7)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a1, s1); // or a1, s1, r0
c->mov64(a2, s5); // or a2, s5, r0
c->mov64(a3, s4); // or a3, s4, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
block_32:
c->daddiu(s3, s3, -1); // daddiu s3, s3, -1
c->daddiu(s5, s5, 144); // daddiu s5, s5, 144
c->daddiu(s4, s4, 48); // daddiu s4, s4, 48
bc = c->sgpr64(s3) != 0; // bne s3, r0, L84
c->daddiu(s1, s1, 1); // daddiu s1, s1, 1
if (bc) {goto block_1;} // branch non-likely
c->mov64(v0, s1); // or v0, s1, r0
c->ld(ra, 0, sp); // ld ra, 0(sp)
c->lq(gp, 112, sp); // lq gp, 112(sp)
c->lq(s5, 96, sp); // lq s5, 96(sp)
c->lq(s4, 80, sp); // lq s4, 80(sp)
c->lq(s3, 64, sp); // lq s3, 64(sp)
c->lq(s2, 48, sp); // lq s2, 48(sp)
c->lq(s1, 32, sp); // lq s1, 32(sp)
c->lq(s0, 16, sp); // lq s0, 16(sp)
//jr ra // jr ra
c->daddiu(sp, sp, 128); // daddiu sp, sp, 128
goto end_of_function; // return
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
end_of_function:
return c->gprs[v0].du64[0];
}
void link() {
cache.fake_scratchpad_data = intern_from_c(-1, 0, "*fake-scratchpad-data*").c();
cache.add_to_sprite_aux_list = intern_from_c(-1, 0, "add-to-sprite-aux-list").c();
cache.sp_free_particle = intern_from_c(-1, 0, "sp-free-particle").c();
cache.sp_orbiter = intern_from_c(-1, 0, "sp-orbiter").c();
cache.sp_relaunch_particle_2d = intern_from_c(-1, 0, "sp-relaunch-particle-2d").c();
gLinkedFunctionTable.reg("sp-process-block-2d", execute, 256);
}
} // namespace sp_process_block_2d
} // namespace Mips2C
//--------------------------MIPS2C---------------------
// clang-format off
#include "game/mips2c/mips2c_private.h"
#include "game/kernel/jak3/kscheme.h"
using ::jak3::intern_from_c;
namespace Mips2C::jak3 {
namespace sp_process_block_3d {
struct Cache {
void* fake_scratchpad_data; // *fake-scratchpad-data*
void* quaternion; // quaternion*!
void* quaternion_normalize; // quaternion-normalize!
void* sp_free_particle; // sp-free-particle
void* sp_relaunch_particle_3d; // sp-relaunch-particle-3d
} cache;
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
bool bc = false;
u32 call_addr = 0;
bool cop1_bc = false;
c->daddiu(sp, sp, -176); // daddiu sp, sp, -176
c->sd(ra, 0, sp); // sd ra, 0(sp)
c->sq(s0, 64, sp); // sq s0, 64(sp)
c->sq(s1, 80, sp); // sq s1, 80(sp)
c->sq(s2, 96, sp); // sq s2, 96(sp)
c->sq(s3, 112, sp); // sq s3, 112(sp)
c->sq(s4, 128, sp); // sq s4, 128(sp)
c->sq(s5, 144, sp); // sq s5, 144(sp)
c->sq(gp, 160, sp); // sq gp, 160(sp)
c->mov64(gp, a0); // or gp, a0, r0
c->mov64(s5, a1); // or s5, a1, r0
c->mov64(s4, a2); // or s4, a2, r0
c->mov64(s0, a3); // or s0, a3, r0
c->mov64(s3, t0); // or s3, t0, r0
c->mov64(s2, t1); // or s2, t1, r0
c->daddiu(s1, sp, 16); // daddiu s1, sp, 16
c->sq(r0, 0, s1); // sq r0, 0(s1)
block_1:
c->lb(v1, 128, s5); // lb v1, 128(s5)
bc = c->sgpr64(v1) == 0; // beq v1, r0, L82
// nop // sll r0, r0, 0
if (bc) {goto block_33;} // branch non-likely
c->lb(a0, 129, s5); // lb a0, 129(s5)
get_fake_spad_addr2(v1, cache.fake_scratchpad_data, 0, c);// lui v1, 28672
c->dsll(a0, a0, 4); // dsll a0, a0, 4
c->daddu(v1, v1, a0); // daddu v1, v1, a0
c->lqc2(vf16, 0, v1); // lqc2 vf16, 0(v1)
c->mov128_gpr_vf(v1, vf16); // qmfc2.i v1, vf16
c->andi(v1, v1, 255); // andi v1, v1, 255
c->sq(v1, 32, sp); // sq v1, 32(sp)
c->lq(v1, 32, sp); // lq v1, 32(sp)
bc = c->sgpr64(v1) != 0; // bne v1, r0, L70
// nop // sll r0, r0, 0
if (bc) {goto block_7;} // branch non-likely
c->lw(v1, 100, s5); // lw v1, 100(s5)
c->addiu(a0, r0, -1); // addiu a0, r0, -1
bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L69
// nop // sll r0, r0, 0
if (bc) {goto block_5;} // branch non-likely
bc = c->sgpr64(v1) == 0; // beq v1, r0, L81
// nop // sll r0, r0, 0
if (bc) {goto block_32;} // branch non-likely
block_5:
c->lw(a0, 104, s5); // lw a0, 104(s5)
c->andi(v1, a0, 32); // andi v1, a0, 32
c->xor_(a0, a0, v1); // xor a0, a0, v1
bc = c->sgpr64(v1) == 0; // beq v1, r0, L82
c->sw(a0, 104, s5); // sw a0, 104(s5)
if (bc) {goto block_33;} // branch non-likely
c->lw(v1, 124, s5); // lw v1, 124(s5)
//beq r0, r0, L82 // beq r0, r0, L82
c->sw(v1, 44, s4); // sw v1, 44(s4)
goto block_33; // branch always
block_7:
c->lw(v1, 100, s5); // lw v1, 100(s5)
c->addiu(a0, r0, -1); // addiu a0, r0, -1
bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L71
c->lq(a0, 32, sp); // lq a0, 32(sp)
if (bc) {goto block_10;} // branch non-likely
c->dsubu(a0, v1, a0); // dsubu a0, v1, a0
bc = c->sgpr64(v1) == 0; // beq v1, r0, L81
c->pmaxw(v1, a0, r0); // pmaxw v1, a0, r0
if (bc) {goto block_32;} // branch non-likely
c->sw(v1, 100, s5); // sw v1, 100(s5)
block_10:
c->lw(a0, 104, s5); // lw a0, 104(s5)
c->andi(v1, a0, 32); // andi v1, a0, 32
c->xor_(a0, a0, v1); // xor a0, a0, v1
bc = c->sgpr64(v1) == 0; // beq v1, r0, L72
c->sw(a0, 104, s5); // sw a0, 104(s5)
if (bc) {goto block_12;} // branch non-likely
c->lw(v1, 124, s5); // lw v1, 124(s5)
c->sw(v1, 44, s4); // sw v1, 44(s4)
block_12:
c->lw(t9, 112, s5); // lw t9, 112(s5)
bc = c->sgpr64(t9) == 0; // beq t9, r0, L73
// nop // sll r0, r0, 0
if (bc) {goto block_14;} // branch non-likely
c->daddiu(sp, sp, -96); // daddiu sp, sp, -96
c->sq(gp, 0, sp); // sq gp, 0(sp)
c->sq(s5, 16, sp); // sq s5, 16(sp)
c->sq(s4, 32, sp); // sq s4, 32(sp)
c->sq(s0, 48, sp); // sq s0, 48(sp)
c->sq(s3, 64, sp); // sq s3, 64(sp)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a1, s5); // or a1, s5, r0
c->mov64(a2, s4); // or a2, s4, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sq(s2, 80, sp); // sq s2, 80(sp)
c->jalr(call_addr); // jalr ra, t9
c->lq(gp, 0, sp); // lq gp, 0(sp)
c->lq(s5, 16, sp); // lq s5, 16(sp)
c->lq(s4, 32, sp); // lq s4, 32(sp)
c->lq(s0, 48, sp); // lq s0, 48(sp)
c->lq(s3, 64, sp); // lq s3, 64(sp)
c->lq(s2, 80, sp); // lq s2, 80(sp)
c->daddiu(sp, sp, 96); // daddiu sp, sp, 96
block_14:
c->lw(a1, 120, s5); // lw a1, 120(s5)
c->lw(v1, 116, s5); // lw v1, 116(s5)
bc = c->sgpr64(a1) == 0; // beq a1, r0, L74
c->lq(a0, 32, sp); // lq a0, 32(sp)
if (bc) {goto block_17;} // branch non-likely
c->dsubu(v1, v1, a0); // dsubu v1, v1, a0
bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L74
c->sw(v1, 116, s5); // sw v1, 116(s5)
if (bc) {goto block_17;} // branch non-likely
c->daddiu(sp, sp, -96); // daddiu sp, sp, -96
c->sq(gp, 0, sp); // sq gp, 0(sp)
c->sq(s5, 16, sp); // sq s5, 16(sp)
c->sq(s4, 32, sp); // sq s4, 32(sp)
c->sq(s0, 48, sp); // sq s0, 48(sp)
c->sq(s3, 64, sp); // sq s3, 64(sp)
c->sq(s2, 80, sp); // sq s2, 80(sp)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a3, s4); // or a3, s4, r0
c->mov64(a2, s5); // or a2, s5, r0
c->load_symbol2(t9, cache.sp_relaunch_particle_3d);// lw t9, sp-relaunch-particle-3d(s7)
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
c->lq(gp, 0, sp); // lq gp, 0(sp)
c->lq(s5, 16, sp); // lq s5, 16(sp)
c->lq(s4, 32, sp); // lq s4, 32(sp)
c->lq(s0, 48, sp); // lq s0, 48(sp)
c->lq(s3, 64, sp); // lq s3, 64(sp)
c->lq(s2, 80, sp); // lq s2, 80(sp)
c->daddiu(sp, sp, 96); // daddiu sp, sp, 96
block_17:
c->lqc2(vf8, 0, s4); // lqc2 vf8, 0(s4)
c->lqc2(vf9, 16, s4); // lqc2 vf9, 16(s4)
c->lqc2(vf10, 32, s4); // lqc2 vf10, 32(s4)
c->lqc2(vf11, 16, s5); // lqc2 vf11, 16(s5)
c->lqc2(vf12, 32, s5); // lqc2 vf12, 32(s5)
c->lqc2(vf13, 48, s5); // lqc2 vf13, 48(s5)
c->lqc2(vf14, 64, s5); // lqc2 vf14, 64(s5)
c->lwc1(f0, 96, s5); // lwc1 f0, 96(s5)
c->mfc1(v1, f0); // mfc1 v1, f0
c->vmul_bc(DEST::xyzw, BC::z, vf14, vf14, vf16); // vmulz.xyzw vf14, vf14, vf16
bc = c->sgpr64(v1) == 0; // beq v1, r0, L75
c->vadd(DEST::xyz, vf11, vf11, vf14); // vadd.xyz vf11, vf11, vf14
if (bc) {goto block_19;} // branch non-likely
c->mov128_vf_gpr(vf15, v1); // qmtc2.i vf15, v1
c->vsub_bc(DEST::w, BC::x, vf15, vf0, vf15); // vsubx.w vf15, vf0, vf15
c->vmul_bc(DEST::xyzw, BC::w, vf15, vf15, vf16); // vmulw.xyzw vf15, vf15, vf16
c->vsub_bc(DEST::w, BC::w, vf15, vf0, vf15); // vsubw.w vf15, vf0, vf15
c->vmul_bc(DEST::xyz, BC::w, vf11, vf11, vf15); // vmulw.xyz vf11, vf11, vf15
block_19:
c->vmul_bc(DEST::xyzw, BC::y, vf17, vf11, vf16); // vmuly.xyzw vf17, vf11, vf16
c->vmul_bc(DEST::xyzw, BC::y, vf18, vf12, vf16); // vmuly.xyzw vf18, vf12, vf16
c->vmul_bc(DEST::xyzw, BC::y, vf19, vf13, vf16); // vmuly.xyzw vf19, vf13, vf16
c->vadd(DEST::xyzw, vf8, vf8, vf17); // vadd.xyzw vf8, vf8, vf17
c->vadd_bc(DEST::w, BC::w, vf9, vf9, vf18); // vaddw.w vf9, vf9, vf18
c->vadd(DEST::xyzw, vf10, vf10, vf19); // vadd.xyzw vf10, vf10, vf19
c->vmax_bc(DEST::xyzw, BC::x, vf10, vf10, vf0); // vmaxx.xyzw vf10, vf10, vf0
c->sqc2(vf11, 16, s5); // sqc2 vf11, 16(s5)
c->sqc2(vf8, 0, s4); // sqc2 vf8, 0(s4)
c->sqc2(vf9, 16, s4); // sqc2 vf9, 16(s4)
c->sqc2(vf10, 32, s4); // sqc2 vf10, 32(s4)
c->mov64(v1, s1); // or v1, s1, r0
c->mov64(a0, s4); // or a0, s4, r0
c->lwc1(f0, 16, a0); // lwc1 f0, 16(a0)
c->lwc1(f1, 20, a0); // lwc1 f1, 20(a0)
c->lwc1(f2, 24, a0); // lwc1 f2, 24(a0)
c->swc1(f0, 0, v1); // swc1 f0, 0(v1)
c->swc1(f1, 4, v1); // swc1 f1, 4(v1)
c->swc1(f2, 8, v1); // swc1 f2, 8(v1)
c->lui(a0, 16256); // lui a0, 16256
c->mtc1(f3, a0); // mtc1 f3, a0
c->muls(f2, f2, f2); // mul.s f2, f2, f2
c->subs(f2, f3, f2); // sub.s f2, f3, f2
c->muls(f1, f1, f1); // mul.s f1, f1, f1
c->subs(f1, f2, f1); // sub.s f1, f2, f1
c->muls(f0, f0, f0); // mul.s f0, f0, f0
c->subs(f0, f1, f0); // sub.s f0, f1, f0
c->sqrts(f0, f0); // sqrt.s f0, f0
c->swc1(f0, 12, v1); // swc1 f0, 12(v1)
c->mfc1(a0, f0); // mfc1 a0, f0
c->lq(v1, 32, sp); // lq v1, 32(sp)
c->mov64(v1, v1); // or v1, v1, r0
c->sq(v1, 48, sp); // sq v1, 48(sp)
block_20:
c->load_symbol2(t9, cache.quaternion); // lw t9, quaternion*!(s7)
c->mov64(a0, s1); // or a0, s1, r0
c->mov64(a1, s1); // or a1, s1, r0
c->daddiu(a2, s5, 80); // daddiu a2, s5, 80
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
c->lq(v1, 48, sp); // lq v1, 48(sp)
c->daddiu(v1, v1, -10); // daddiu v1, v1, -10
c->sq(v1, 48, sp); // sq v1, 48(sp)
// nop // sll r0, r0, 0
c->lq(v1, 48, sp); // lq v1, 48(sp)
bc = ((s64)c->sgpr64(v1)) > 0; // bgtz v1, L76
// nop // sll r0, r0, 0
if (bc) {goto block_20;} // branch non-likely
c->load_symbol2(t9, cache.quaternion_normalize); // lw t9, quaternion-normalize!(s7)
c->mov64(a0, s1); // or a0, s1, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
c->mov64(a0, s4); // or a0, s4, r0
c->mov64(v1, s1); // or v1, s1, r0
c->lwc1(f0, 12, v1); // lwc1 f0, 12(v1)
c->mtc1(f1, r0); // mtc1 f1, r0
cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1
bc = !cop1_bc; // bc1f L77
// nop // sll r0, r0, 0
if (bc) {goto block_23;} // branch non-likely
c->lqc2(vf1, 16, a0); // lqc2 vf1, 16(a0)
c->lqc2(vf2, 0, v1); // lqc2 vf2, 0(v1)
c->vsub(DEST::xyz, vf1, vf0, vf2); // vsub.xyz vf1, vf0, vf2
c->sqc2(vf1, 16, a0); // sqc2 vf1, 16(a0)
c->mov128_gpr_vf(a0, vf1); // qmfc2.i a0, vf1
//beq r0, r0, L78 // beq r0, r0, L78
// nop // sll r0, r0, 0
goto block_24; // branch always
block_23:
c->lqc2(vf1, 16, a0); // lqc2 vf1, 16(a0)
c->lqc2(vf2, 0, v1); // lqc2 vf2, 0(v1)
c->vadd(DEST::xyz, vf1, vf0, vf2); // vadd.xyz vf1, vf0, vf2
c->sqc2(vf1, 16, a0); // sqc2 vf1, 16(a0)
c->mov128_gpr_vf(a0, vf1); // qmfc2.i a0, vf1
block_24:
c->mov128_gpr_vf(v1, vf10); // qmfc2.i v1, vf10
c->lw(a0, 104, s5); // lw a0, 104(s5)
c->andi(a1, a0, 2); // andi a1, a0, 2
bc = c->sgpr64(a1) == 0; // beq a1, r0, L79
c->andi(a1, a0, 4); // andi a1, a0, 4
if (bc) {goto block_27;} // branch non-likely
bc = c->sgpr64(v1) != 0; // bne v1, r0, L79
c->pextuw(a2, v1, r0); // pextuw a2, v1, r0
if (bc) {goto block_27;} // branch non-likely
bc = c->sgpr64(a2) == 0; // beq a2, r0, L81
// nop // sll r0, r0, 0
if (bc) {goto block_32;} // branch non-likely
block_27:
bc = c->sgpr64(a1) == 0; // beq a1, r0, L80
c->andi(a0, a0, 1); // andi a0, a0, 1
if (bc) {goto block_29;} // branch non-likely
c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0
c->pexew(v1, v1); // pexew v1, v1
bc = ((s64)c->sgpr64(v1)) <= 0; // blez v1, L81
// nop // sll r0, r0, 0
if (bc) {goto block_32;} // branch non-likely
block_29:
bc = c->sgpr64(a0) == 0; // beq a0, r0, L82
// nop // sll r0, r0, 0
if (bc) {goto block_33;} // branch non-likely
c->mov128_gpr_vf(v1, vf8); // qmfc2.i v1, vf8
c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0
c->pexew(v1, v1); // pexew v1, v1
bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L81
c->mov128_gpr_vf(v1, vf9); // qmfc2.i v1, vf9
if (bc) {goto block_32;} // branch non-likely
c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0
c->pexew(v1, v1); // pexew v1, v1
bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L82
// nop // sll r0, r0, 0
if (bc) {goto block_33;} // branch non-likely
block_32:
c->load_symbol2(t9, cache.sp_free_particle); // lw t9, sp-free-particle(s7)
c->mov64(a0, gp); // or a0, gp, r0
c->mov64(a1, s0); // or a1, s0, r0
c->mov64(a2, s5); // or a2, s5, r0
c->mov64(a3, s4); // or a3, s4, r0
call_addr = c->gprs[t9].du32[0]; // function call:
c->sll(v0, ra, 0); // sll v0, ra, 0
c->jalr(call_addr); // jalr ra, t9
block_33:
c->daddiu(s3, s3, -1); // daddiu s3, s3, -1
c->daddiu(s5, s5, 144); // daddiu s5, s5, 144
c->daddiu(s4, s4, 48); // daddiu s4, s4, 48
bc = c->sgpr64(s3) != 0; // bne s3, r0, L68
c->daddiu(s0, s0, 1); // daddiu s0, s0, 1
if (bc) {goto block_1;} // branch non-likely
c->mov64(v0, s0); // or v0, s0, r0
c->ld(ra, 0, sp); // ld ra, 0(sp)
c->lq(gp, 160, sp); // lq gp, 160(sp)
c->lq(s5, 144, sp); // lq s5, 144(sp)
c->lq(s4, 128, sp); // lq s4, 128(sp)
c->lq(s3, 112, sp); // lq s3, 112(sp)
c->lq(s2, 96, sp); // lq s2, 96(sp)
c->lq(s1, 80, sp); // lq s1, 80(sp)
c->lq(s0, 64, sp); // lq s0, 64(sp)
//jr ra // jr ra
c->daddiu(sp, sp, 176); // daddiu sp, sp, 176
goto end_of_function; // return
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
end_of_function:
return c->gprs[v0].du64[0];
}
void link() {
cache.fake_scratchpad_data = intern_from_c(-1, 0, "*fake-scratchpad-data*").c();
cache.quaternion = intern_from_c(-1, 0, "quaternion*!").c();
cache.quaternion_normalize = intern_from_c(-1, 0, "quaternion-normalize!").c();
cache.sp_free_particle = intern_from_c(-1, 0, "sp-free-particle").c();
cache.sp_relaunch_particle_3d = intern_from_c(-1, 0, "sp-relaunch-particle-3d").c();
gLinkedFunctionTable.reg("sp-process-block-3d", execute, 512);
}
} // namespace sp_process_block_3d
} // namespace Mips2C
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+75 -1
View File
@@ -291,7 +291,50 @@ namespace foreground_merc { extern void link(); }
namespace foreground_generic_merc { extern void link(); }
namespace live_func_curve { extern void link(); }
namespace birth_func_curve { extern void link(); }
namespace method_11_collide_hash { extern void link(); }
namespace method_12_collide_hash { extern void link(); }
namespace fill_bg_using_box_new { extern void link(); }
namespace fill_bg_using_line_sphere_new { extern void link(); }
namespace method_12_collide_mesh { extern void link(); }
namespace method_14_collide_mesh { extern void link(); }
namespace method_15_collide_mesh { extern void link(); }
namespace method_10_collide_shape_prim_mesh { extern void link(); }
namespace method_10_collide_shape_prim_sphere { extern void link(); }
namespace method_10_collide_shape_prim_group { extern void link(); }
namespace method_11_collide_shape_prim_mesh { extern void link(); }
namespace method_11_collide_shape_prim_sphere { extern void link(); }
namespace method_11_collide_shape_prim_group { extern void link(); }
namespace method_9_collide_cache_prim { extern void link(); }
namespace method_10_collide_cache_prim { extern void link(); }
namespace method_17_collide_cache { extern void link(); }
namespace method_9_collide_puss_work { extern void link(); }
namespace method_10_collide_puss_work { extern void link(); }
namespace method_10_collide_edge_hold_list { extern void link(); }
namespace method_19_collide_edge_work { extern void link(); }
namespace method_9_edge_grab_info { extern void link(); }
namespace method_17_collide_edge_work { extern void link(); }
namespace method_16_collide_edge_work { extern void link(); }
namespace method_18_collide_edge_work { extern void link(); }
namespace method_18_grid_hash { extern void link(); }
namespace method_19_grid_hash { extern void link(); }
namespace method_20_grid_hash { extern void link(); }
namespace method_22_grid_hash { extern void link(); }
namespace method_28_sphere_hash { extern void link(); }
namespace method_32_sphere_hash { extern void link(); }
namespace method_29_sphere_hash { extern void link(); }
namespace method_30_sphere_hash { extern void link(); }
namespace method_31_sphere_hash { extern void link(); }
namespace method_32_spatial_hash { extern void link(); }
namespace method_38_spatial_hash { extern void link(); }
namespace method_35_spatial_hash { extern void link(); }
namespace method_36_spatial_hash { extern void link(); }
namespace method_34_spatial_hash { extern void link(); }
namespace sparticle_motion_blur { extern void link(); }
namespace sp_launch_particles_var { extern void link(); }
namespace particle_adgif { extern void link(); }
namespace sp_init_fields { extern void link(); }
namespace sp_process_block_2d { extern void link(); }
namespace sp_process_block_3d { extern void link(); }
}
// clang-format on
@@ -488,6 +531,37 @@ PerGameVersion<std::unordered_map<std::string, std::vector<void (*)()>>> gMips2C
{jak3::foreground_check_longest_edge_asm::link, jak3::foreground_generic_merc::link,
jak3::foreground_merc::link}},
{"particle-curves", {jak3::live_func_curve::link, jak3::birth_func_curve::link}},
{"collide-hash",
{jak3::method_11_collide_hash::link, jak3::method_12_collide_hash::link,
jak3::fill_bg_using_box_new::link, jak3::fill_bg_using_line_sphere_new::link}},
{"collide-mesh",
{jak3::method_12_collide_mesh::link, jak3::method_14_collide_mesh::link,
jak3::method_15_collide_mesh::link, jak3::method_10_collide_shape_prim_mesh::link}},
{"collide-cache",
{jak3::method_10_collide_shape_prim_mesh::link,
jak3::method_10_collide_shape_prim_sphere::link,
jak3::method_10_collide_shape_prim_group::link,
jak3::method_11_collide_shape_prim_mesh::link,
jak3::method_11_collide_shape_prim_sphere::link,
jak3::method_11_collide_shape_prim_group::link, jak3::method_9_collide_cache_prim::link,
jak3::method_10_collide_cache_prim::link, jak3::method_17_collide_cache::link,
jak3::method_9_collide_puss_work::link, jak3::method_10_collide_puss_work::link}},
{"collide-edge-grab",
{jak3::method_10_collide_edge_hold_list::link, jak3::method_19_collide_edge_work::link,
jak3::method_9_edge_grab_info::link, jak3::method_17_collide_edge_work::link,
jak3::method_16_collide_edge_work::link, jak3::method_18_collide_edge_work::link}},
{"spatial-hash",
{jak3::method_18_grid_hash::link, jak3::method_19_grid_hash::link,
jak3::method_20_grid_hash::link, jak3::method_22_grid_hash::link,
jak3::method_28_sphere_hash::link, jak3::method_32_sphere_hash::link,
jak3::method_29_sphere_hash::link, jak3::method_30_sphere_hash::link,
jak3::method_31_sphere_hash::link, jak3::method_32_spatial_hash::link,
jak3::method_38_spatial_hash::link, jak3::method_35_spatial_hash::link,
jak3::method_36_spatial_hash::link, jak3::method_34_spatial_hash::link}},
{"sparticle-launcher",
{jak3::sparticle_motion_blur::link, jak3::sp_launch_particles_var::link,
jak3::particle_adgif::link, jak3::sp_init_fields::link}},
{"sparticle", {jak3::sp_process_block_2d::link, jak3::sp_process_block_3d::link}},
}};
void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) {
+3 -1
View File
@@ -73,6 +73,7 @@ s32 iso_thread;
s32 dgo_thread;
s32 str_thread;
s32 play_thread;
constexpr int kRpcBuffSize = sizeof(RPC_Dgo_Cmd);
static RPC_Dgo_Cmd sRPCBuff[1];
DgoCommand sLoadDGO; // renamed from scmd to sLoadDGO in Jak 2
@@ -281,7 +282,8 @@ u32 DGOThread() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, DGO_RPC_ID[g_game_version], RPC_DGO, sRPCBuff, nullptr, nullptr, &dq);
sceSifRegisterRpc(&serve, DGO_RPC_ID[g_game_version], RPC_DGO, sRPCBuff, kRpcBuffSize, nullptr,
nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+4 -3
View File
@@ -34,7 +34,8 @@ u32 gMemSize; // Total memory of RAMDISK
u32 gMemFreeAtStart; // Memory free after allocation of RAMDISK
uint8_t* gMem; // Allocation for RAMDISK
uint8_t* gRamdiskRAM; // Also allocation for RAMDISK
uint8_t gRPCBuf[40]; // Buffer for RAMDISK RPC handler
constexpr int kRamdiskBufferSize = 40;
uint8_t gRPCBuf[kRamdiskBufferSize]; // Buffer for RAMDISK RPC handler
// Each file stored in the ramdisk has a file record:
struct RamdiskFileRecord {
@@ -100,8 +101,8 @@ u32 Thread_Server() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, RAMDISK_RPC_ID[g_game_version], RPC_Ramdisk, gRPCBuf, nullptr, nullptr,
&dq);
sceSifRegisterRpc(&serve, RAMDISK_RPC_ID[g_game_version], RPC_Ramdisk, gRPCBuf,
kRamdiskBufferSize, nullptr, nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+6 -5
View File
@@ -31,8 +31,9 @@ using namespace iop;
namespace jak1 {
constexpr int SRPC_MESSAGE_SIZE = 0x50;
constexpr int SRPC_MESSAGE_COUNT = 128;
static uint8_t gLoaderBuf[SRPC_MESSAGE_SIZE];
static uint8_t gPlayerBuf[SRPC_MESSAGE_SIZE * 128];
static uint8_t gPlayerBuf[SRPC_MESSAGE_SIZE * SRPC_MESSAGE_COUNT];
static u32 gInfoEE = 0; // EE address where we should send info on each frame.
s16 gFlava;
u32 gFreeMem = 0;
@@ -62,8 +63,8 @@ u32 Thread_Player() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, PLAYER_RPC_ID[g_game_version], RPC_Player, gPlayerBuf, nullptr, nullptr,
&dq);
sceSifRegisterRpc(&serve, PLAYER_RPC_ID[g_game_version], RPC_Player, gPlayerBuf,
SRPC_MESSAGE_SIZE * SRPC_MESSAGE_COUNT, nullptr, nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
@@ -79,8 +80,8 @@ u32 Thread_Loader() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, LOADER_RPC_ID[g_game_version], RPC_Loader, gLoaderBuf, nullptr, nullptr,
&dq);
sceSifRegisterRpc(&serve, LOADER_RPC_ID[g_game_version], RPC_Loader, gLoaderBuf,
SRPC_MESSAGE_SIZE, nullptr, nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+6 -2
View File
@@ -24,7 +24,9 @@
using namespace iop;
namespace jak1 {
constexpr int kStrBufSize = sizeof(RPC_Str_Cmd_Jak1);
static RPC_Str_Cmd_Jak1 sSTRBuf;
constexpr int kPlayBufSize = 2 * sizeof(RPC_Play_Cmd_Jak1);
static RPC_Play_Cmd_Jak1 sPLAYBuf[2];
void* RPC_STR(unsigned int fno, void* _cmd, int y);
@@ -66,7 +68,8 @@ u32 STRThread() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, STR_RPC_ID[g_game_version], RPC_STR, &sSTRBuf, nullptr, nullptr, &dq);
sceSifRegisterRpc(&serve, STR_RPC_ID[g_game_version], RPC_STR, &sSTRBuf, kStrBufSize, nullptr,
nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
@@ -79,7 +82,8 @@ u32 PLAYThread() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, PLAY_RPC_ID[g_game_version], RPC_PLAY, sPLAYBuf, nullptr, nullptr, &dq);
sceSifRegisterRpc(&serve, PLAY_RPC_ID[g_game_version], RPC_PLAY, sPLAYBuf, kPlayBufSize, nullptr,
nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+3 -1
View File
@@ -49,6 +49,7 @@ int ext_resume = 0;
CmdDgo sLoadDgo; // renamed from scmd to sLoadDGO in Jak 2
static RPC_Dgo_Cmd sRPCBuff[1];
constexpr int kRpcBuffSize = sizeof(RPC_Dgo_Cmd);
VagDir gVagDir;
/// The main buffer used for reading data and doing blzo decompression.
@@ -1097,7 +1098,8 @@ u32 DGOThread() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, DGO_RPC_ID[g_game_version], RPC_DGO, sRPCBuff, nullptr, nullptr, &dq);
sceSifRegisterRpc(&serve, DGO_RPC_ID[g_game_version], RPC_DGO, sRPCBuff, kRpcBuffSize, nullptr,
nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+8 -6
View File
@@ -24,8 +24,10 @@ static const char* languages[] = {"ENG", "FRE", "GER", "SPA", "ITA", "JAP", "KOR
static u32 gInfoEE = 0;
static u32 IopTicks = 0;
static SoundIopInfo info;
static uint8_t gPlayerBuf[0x50 * 128];
static uint8_t gLoaderBuf[0x50];
constexpr int kPlayerBufSize = 0x50 * 128;
static uint8_t gPlayerBuf[kPlayerBufSize];
constexpr int kLoaderBufSize = 0x50;
static uint8_t gLoaderBuf[kLoaderBufSize];
void srpc_init_globals() {}
@@ -575,8 +577,8 @@ u32 Thread_Player() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, PLAYER_RPC_ID[g_game_version], RPC_Player, gPlayerBuf, nullptr, nullptr,
&dq);
sceSifRegisterRpc(&serve, PLAYER_RPC_ID[g_game_version], RPC_Player, gPlayerBuf, kPlayerBufSize,
nullptr, nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
@@ -590,8 +592,8 @@ u32 Thread_Loader() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, LOADER_RPC_ID[g_game_version], RPC_Loader, gLoaderBuf, nullptr, nullptr,
&dq);
sceSifRegisterRpc(&serve, LOADER_RPC_ID[g_game_version], RPC_Loader, gLoaderBuf, kLoaderBufSize,
nullptr, nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+9 -3
View File
@@ -19,8 +19,12 @@
using namespace iop;
namespace jak2 {
constexpr int kStrBufSize = sizeof(RPC_Str_Cmd_Jak2);
static RPC_Str_Cmd_Jak2 sSTRBuf;
static RPC_Play_Cmd_Jak2 sPLAYBuf[2]; // called sRPCBuf2
// the size has been increased to 4 to fit jak3. This is a total hack, since the structures
// are probably just completely different.
constexpr int kPlayBufSize = 4 * sizeof(RPC_Play_Cmd_Jak2);
static RPC_Play_Cmd_Jak2 sPLAYBuf[4]; // called sRPCBuf2
struct CacheEntry {
FileRecord* fr = nullptr;
@@ -337,7 +341,8 @@ u32 STRThread() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, STR_RPC_ID[g_game_version], RPC_STR, &sSTRBuf, nullptr, nullptr, &dq);
sceSifRegisterRpc(&serve, STR_RPC_ID[g_game_version], RPC_STR, &sSTRBuf, kStrBufSize, nullptr,
nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
@@ -351,7 +356,8 @@ u32 PLAYThread() {
CpuDisableIntr();
sceSifInitRpc(0);
sceSifSetRpcQueue(&dq, GetThreadId());
sceSifRegisterRpc(&serve, PLAY_RPC_ID[g_game_version], RPC_PLAY, sPLAYBuf, nullptr, nullptr, &dq);
sceSifRegisterRpc(&serve, PLAY_RPC_ID[g_game_version], RPC_PLAY, sPLAYBuf, kPlayBufSize, nullptr,
nullptr, &dq);
CpuEnableIntr();
sceSifRpcLoop(&dq);
return 0;
+2
View File
@@ -133,12 +133,14 @@ void sceSifRegisterRpc(sceSifServeData* serve,
unsigned int request,
sceSifRpcFunc func,
void* buff,
int buff_size,
sceSifRpcFunc cfunc,
void* cbuff,
sceSifQueueData* qd) {
serve->command = request;
serve->func = func;
serve->buff = buff;
serve->buff_size = buff_size;
(void)cfunc;
(void)cbuff;
ASSERT(!cfunc);
+3
View File
@@ -39,6 +39,8 @@ struct sceSifServeData {
unsigned int command; // the RPC ID
sceSifRpcFunc func;
void* buff;
// added
int buff_size = 0;
};
struct sceSifQueueData {
@@ -116,6 +118,7 @@ void sceSifRegisterRpc(sceSifServeData* serve,
unsigned int request,
sceSifRpcFunc func,
void* buff,
int buff_size,
sceSifRpcFunc cfunc,
void* cbuff,
sceSifQueueData* qd);
+6
View File
@@ -2,6 +2,7 @@
#include <cstring>
#include "common/log/log.h"
#include "common/util/Assert.h"
#include "common/util/FileUtil.h"
@@ -337,6 +338,11 @@ void IOP_Kernel::sif_rpc(s32 rpcChannel,
ASSERT(rec->cmd.finished && rec->cmd.started);
// step 3 - memcpy!
if (rec->qd->serve_data->buff_size < sendSize) {
lg::die(
"Buffer overflow in EE -> IOP RPC. channel {}, fno {}, requested size {}, buffer size {}\n",
rpcChannel, fno, sendSize, rec->qd->serve_data->buff_size);
}
memcpy(rec->qd->serve_data->buff, sendBuff, sendSize);
// step 4 - setup command
+2 -2
View File
@@ -1,5 +1,5 @@
("ARENACST.DGO"
("tpage-1484.o"
("tpage-1484.go"
"tpage-1245.go"
"tpage-1248.go"
"tpage-1246.go"
@@ -14,5 +14,5 @@
"blue-gun-mod-one-ag.go"
"wstd-gate-pass-ag.go"
"yellow-barrel-ag.go"
"arenacst.o"
"arenacst.go"
))
+1 -1
View File
@@ -17,5 +17,5 @@
"farm-beetree-ag.go"
"farm-small-cabbage-ag.go"
"farm-sprinkler-barrels-ag.go"
"ctyfarma-vis.o"
"ctyfarma-vis.go"
))
+1 -1
View File
@@ -16,5 +16,5 @@
"farm-beetree-ag.go"
"farm-small-cabbage-ag.go"
"farm-sprinkler-barrels-ag.go"
"ctyfarmb-vis.o"
"ctyfarmb-vis.go"
))
+1 -1
View File
@@ -10,5 +10,5 @@
"city-flitter-ag.go"
"com-airlock-outer-ag.go"
"battle-amulet-ag.go"
"ctygenb-vis.o"
"ctygenb-vis.go"
))
+1 -1
View File
@@ -11,5 +11,5 @@
"com-airlock-outer-ag.go"
"ctyinda-evil-streetlamp-ag.go"
"vin-door-ctyinda-ag.go"
"ctyinda-vis.o"
"ctyinda-vis.go"
))
+1 -1
View File
@@ -7,5 +7,5 @@
"tpage-184.go"
"tpage-181.go"
"krimson-wall-ag.go"
"ctyindb-vis.o"
"ctyindb-vis.go"
))
+2 -2
View File
@@ -1,10 +1,10 @@
("CITYCAST.DGO"
("tpage-2094.o"
("tpage-2094.go"
"tpage-2095.go"
"daxter-highres-ag.go"
"jakc-highres-ag.go"
"torn-highres-ag.go"
"palmpilot-b-ag.go"
"particleman-ag.go"
"citycast.o"
"citycast.go"
))
+1 -1
View File
@@ -46,5 +46,5 @@
"kidmedallion-ag.go"
"particleman-ag.go"
"security-wall-ag.go"
"comba.o"
"comba.go"
))
+2 -2
View File
@@ -1,4 +1,4 @@
("COMBB.DGO"
("tpage-2189.o"
"combb.o"
("tpage-2189.go"
"combb.go"
))
+2 -2
View File
@@ -1,4 +1,4 @@
("COMBC.DGO"
("tpage-2191.o"
"combc.o"
("tpage-2191.go"
"combc.go"
))
+2 -2
View File
@@ -1,4 +1,4 @@
("COMBD.DGO"
("tpage-2199.o"
"combd.o"
("tpage-2199.go"
"combd.go"
))
+2 -2
View File
@@ -1,4 +1,4 @@
("COMBE.DGO"
("tpage-2599.o"
"combe.o"
("tpage-2599.go"
"combe.go"
))
+2 -2
View File
@@ -1,7 +1,7 @@
("COMBN.DGO"
("tpage-2210.o"
("tpage-2210.go"
"tpage-2595.go"
"tpage-2211.go"
"min-elevator-ag.go"
"combn.o"
"combn.go"
))
+1 -1
View File
@@ -9,5 +9,5 @@
"pecker-ingame-ag.go"
"jakc-highres-ag.go"
"tpl-elevator-ag.go"
"combx.o"
"combx.go"
))
+1 -1
View File
@@ -12,5 +12,5 @@
"mecha-daxter-ag.go"
"air-train-ag.go"
"hip-door-a-ag.go"
"ctyport-vis.o"
"ctyport-vis.go"
))
+1 -1
View File
@@ -7,5 +7,5 @@
"tpage-133.go"
"tpage-131.go"
"des-burning-bush-ag.go"
"ctysluma-vis.o"
"ctysluma-vis.go"
))
+1 -1
View File
@@ -6,5 +6,5 @@
"tpage-162.go"
"tpage-159.go"
"cty-door-ag.go"
"ctyslumb-vis.o"
"ctyslumb-vis.go"
))
+1 -1
View File
@@ -9,5 +9,5 @@
"cty-door-ag.go"
"cty-elevator-ag.go"
"ctyslumc-flag-ag.go"
"ctyslumc-vis.o"
"ctyslumc-vis.go"
))
+2 -2
View File
@@ -1,7 +1,7 @@
("CTYCARA.DGO"
("tpage-948.o"
("tpage-948.go"
"carc-ag.go"
"cara-ag.go"
"carb-ag.go"
"ctycara.o"
"ctycara.go"
))
+2 -2
View File
@@ -1,7 +1,7 @@
("CTYCARB.DGO"
("tpage-949.o"
("tpage-949.go"
"bikec-ag.go"
"bikeb-ag.go"
"bikea-ag.go"
"ctycarb.o"
"ctycarb.go"
))
+2 -2
View File
@@ -1,6 +1,6 @@
("CTYCARC.DGO"
("tpage-950.o"
("tpage-950.go"
"tpage-951.go"
"hellcat-ag.go"
"ctycarc.o"
"ctycarc.go"
))
+1 -1
View File
@@ -1,3 +1,3 @@
("CTYCARKG.DGO"
("ctycarkg.o"
("ctycarkg.go"
))
+2 -2
View File
@@ -1,7 +1,7 @@
("CTYPEPA.DGO"
("tpage-956.o"
("tpage-956.go"
"citizen-fat-ag.go"
"citizen-norm-ag.go"
"citizen-chick-ag.go"
"ctypepa.o"
"ctypepa.go"
))
+2 -2
View File
@@ -1,5 +1,5 @@
("CTYPEPB.DGO"
("tpage-958.o"
("tpage-958.go"
"predator-ag.go"
"ctypepb.o"
"ctypepb.go"
))
+1 -1
View File
@@ -1,3 +1,3 @@
("CTYPEPC.DGO"
("ctypepc.o"
("ctypepc.go"
))
+2 -2
View File
@@ -1,8 +1,8 @@
("CTYPESA.DGO"
("tpage-957.o"
("tpage-957.go"
"crimson-guard-ag.go"
"shield-sphere-explode-ag.go"
"shield-sphere-distort-ag.go"
"shield-sphere-ag.go"
"ctypesa.o"
"ctypesa.go"
))
+1 -1
View File
@@ -4,5 +4,5 @@
"tpage-1758.go"
"city-grunt-ag.go"
"city-flitter-ag.go"
"ctypesb.o"
"ctypesb.go"
))
+1 -1
View File
@@ -7,5 +7,5 @@
"spydroid-ag.go"
"kg-flying-turret-ag.go"
"kg-debris-ag.go"
"ctypesc.o"
"ctypesc.go"
))
+1 -1
View File
@@ -101,5 +101,5 @@
"searchlight-ag.go"
"burning-bush-ag.go"
"security-wall-ag.go"
"ctywide-vis.o"
"ctywide-vis.go"
))
+2 -2
View File
@@ -1,7 +1,7 @@
("DESA.DGO"
("tpage-1372.o"
("tpage-1372.go"
"tpage-3309.go"
"tpage-1579.go"
"jakc-scarf-ag.go"
"deserta-vis.o"
"deserta-vis.go"
))
+2 -2
View File
@@ -1,8 +1,8 @@
("DESB.DGO"
("tpage-1377.o"
("tpage-1377.go"
"tpage-1378.go"
"tpage-1379.go"
"wascity-airlock-ag.go"
"air-train-ag.go"
"desertb-vis.o"
"desertb-vis.go"
))
+1 -1
View File
@@ -17,5 +17,5 @@
"scorpion-gun-ag.go"
"quantum-reflector-ag.go"
"mh-flyer-missile-ag.go"
"desbattl.o"
"desbattl.go"
))
+2 -2
View File
@@ -1,5 +1,5 @@
("DESBCST.DGO"
("tpage-2762.o"
("tpage-2762.go"
"tpage-2764.go"
"tpage-2763.go"
"daxter-highres-ag.go"
@@ -11,5 +11,5 @@
"snake-wheel-fma-ag.go"
"particleman-ag.go"
"jakc-scarf-ag.go"
"desbcst.o"
"desbcst.go"
))
+1 -1
View File
@@ -19,5 +19,5 @@
"terraformer-mine-ag.go"
"particleman-ag.go"
"terraformer-target-ag.go"
"desboss1.o"
"desboss1.go"
))
+1 -1
View File
@@ -13,5 +13,5 @@
"particleman-ag.go"
"terraformer-laser-end-ag.go"
"terraformer-laser-ag.go"
"desboss2.o"
"desboss2.go"
))
+2 -2
View File
@@ -1,5 +1,5 @@
("DESC.DGO"
("tpage-1371.o"
("tpage-1371.go"
"tpage-1573.go"
"desertc-vis.o"
"desertc-vis.go"
))
+1 -1
View File
@@ -17,5 +17,5 @@
"interceptor-b-ag.go"
"pre-artifact-a-ag.go"
"catapult-target-ag.go"
"deschase.o"
"deschase.go"
))
+1 -1
View File
@@ -8,5 +8,5 @@
"tpage-3384.go"
"des-cactus-b-ag.go"
"des-cactus-a-ag.go"
"desertd-vis.o"
"desertd-vis.go"
))
+2 -2
View File
@@ -1,5 +1,5 @@
("DESE.DGO"
("tpage-1380.o"
("tpage-1380.go"
"tpage-1597.go"
"deserte-vis.o"
"deserte-vis.go"
))
+2 -2
View File
@@ -1,6 +1,6 @@
("DESERROL.DGO"
("tpage-3179.o"
("tpage-3179.go"
"tpage-3180.go"
"errol-ag.go"
"deserrol.o"
"deserrol.go"
))
+1 -1
View File
@@ -6,5 +6,5 @@
"des-draw-bridge-ag.go"
"des-jump-bridge-ag.go"
"des-garage-door-ag.go"
"desertf-vis.o"
"desertf-vis.go"
))
+1 -1
View File
@@ -8,5 +8,5 @@
"desert-eggwall-ag.go"
"des-cactus-obstacle-ag.go"
"particleman-ag.go"
"desertg-vis.o"
"desertg-vis.go"
))
+2 -2
View File
@@ -1,5 +1,5 @@
("DESH.DGO"
("tpage-1385.o"
("tpage-1385.go"
"tpage-1995.go"
"deserth-vis.o"
"deserth-vis.go"
))
+1 -1
View File
@@ -19,5 +19,5 @@
"snake-wheel-fma-ag.go"
"eco-crystal-dark-ag.go"
"particleman-ag.go"
"deshover.o"
"deshover.go"
))
+2 -2
View File
@@ -1,6 +1,6 @@
("DESHUNT.DGO"
("tpage-1809.o"
("tpage-1809.go"
"tpage-1808.go"
"sig-highres-ag.go"
"deshunt.o"
"deshunt.go"
))
+2 -2
View File
@@ -1,7 +1,7 @@
("DESINTER.DGO"
("tpage-1712.o"
("tpage-1712.go"
"tpage-1713.go"
"interceptor-ag.go"
"interceptor-b-ag.go"
"desinter.o"
"desinter.go"
))
+1 -1
View File
@@ -9,5 +9,5 @@
"interceptor-ag.go"
"wascity-airlock-debris-ag.go"
"beam-generator-ag.go"
"desjump.o"
"desjump.go"
))
+1 -1
View File
@@ -14,5 +14,5 @@
"flut-saddle-ag.go"
"snake-wheel-fma-ag.go"
"particleman-ag.go"
"desliz.o"
"desliz.go"
))

Some files were not shown because too many files have changed in this diff Show More