mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
[collision] implement most of background collision, spawn target! (#1076)
* fill collide cache with bounding box working * yprobe fully working for background at least * target * final cleanup, add a bit more foreground mesh stuff that is untested * warnings, merge issues * tests * revert debug changes, format' * rendering perf
This commit is contained in:
parent
79ac3a0c3a
commit
e84b5a2346
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "mips2c.h"
|
#include "mips2c.h"
|
||||||
|
|
||||||
|
#include "common/symbols.h"
|
||||||
#include "common/util/print_float.h"
|
#include "common/util/print_float.h"
|
||||||
#include "decompiler/Disasm/InstructionMatching.h"
|
#include "decompiler/Disasm/InstructionMatching.h"
|
||||||
#include "decompiler/Function/Function.h"
|
#include "decompiler/Function/Function.h"
|
||||||
|
@ -570,8 +571,29 @@ Mips2C_Line handle_generic_op2_u16(const Instruction& i0, const std::string& ins
|
||||||
instr_str};
|
instr_str};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mips2C_Line handle_daddiu(Mips2C_Output& out, const Instruction& i0, const std::string& instr_str) {
|
||||||
|
if (i0.get_src(1).is_label()) {
|
||||||
|
return {instr_str, instr_str};
|
||||||
|
} else if (i0.get_src(0).is_reg(rs7()) && i0.get_src(1).is_sym("#t")) {
|
||||||
|
return {fmt::format("c->{}({}, {}, {});", i0.op_name_to_string(), reg_to_name(i0.get_dst(0)),
|
||||||
|
reg_to_name(i0.get_src(0)), FIX_SYM_TRUE),
|
||||||
|
instr_str};
|
||||||
|
} else if (i0.get_src(0).is_reg(rs7()) && i0.get_src(1).is_sym()) {
|
||||||
|
out.require_symbol(i0.get_src(1).get_sym());
|
||||||
|
return {fmt::format("c->load_symbol_addr({}, cache.{});", reg_to_name(i0.get_dst(0)),
|
||||||
|
goal_to_c_name(i0.get_src(1).get_sym())),
|
||||||
|
instr_str};
|
||||||
|
} else {
|
||||||
|
return handle_generic_op2_u16(i0, instr_str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Mips2C_Line handle_sw(Mips2C_Output& out, const Instruction& i0, const std::string& instr_str) {
|
Mips2C_Line handle_sw(Mips2C_Output& out, const Instruction& i0, const std::string& instr_str) {
|
||||||
if (i0.get_src(1).is_sym() && i0.get_src(2).is_reg(rs7())) {
|
if (i0.get_src(1).is_sym() && i0.get_src(2).is_reg(rs7())) {
|
||||||
|
out.require_symbol(i0.get_src(1).get_sym());
|
||||||
|
return {fmt::format("c->store_symbol({}, cache.{});", reg_to_name(i0.get_src(0)),
|
||||||
|
goal_to_c_name(i0.get_src(1).get_sym())),
|
||||||
|
instr_str};
|
||||||
return handle_unknown(instr_str);
|
return handle_unknown(instr_str);
|
||||||
// auto name = i0.get_src(1).get_sym();
|
// auto name = i0.get_src(1).get_sym();
|
||||||
// // store into symbol table!
|
// // store into symbol table!
|
||||||
|
@ -747,12 +769,22 @@ Mips2C_Line handle_likely_branch_bc(const Instruction& i0, const std::string& in
|
||||||
switch (i0.kind) {
|
switch (i0.kind) {
|
||||||
case InstructionKind::BLTZL:
|
case InstructionKind::BLTZL:
|
||||||
return {fmt::format("((s64){}) < 0", reg64_or_zero(i0.get_src(0))), instr_str};
|
return {fmt::format("((s64){}) < 0", reg64_or_zero(i0.get_src(0))), instr_str};
|
||||||
|
case InstructionKind::BGEZL:
|
||||||
|
return {fmt::format("((s64){}) >= 0", reg64_or_zero(i0.get_src(0))), instr_str};
|
||||||
|
case InstructionKind::BGTZL:
|
||||||
|
return {fmt::format("((s64){}) > 0", reg64_or_zero(i0.get_src(0))), instr_str};
|
||||||
case InstructionKind::BNEL:
|
case InstructionKind::BNEL:
|
||||||
return {fmt::format("((s64){}) != ((s64){})", reg64_or_zero(i0.get_src(0)),
|
return {fmt::format("((s64){}) != ((s64){})", reg64_or_zero(i0.get_src(0)),
|
||||||
reg64_or_zero(i0.get_src(1))),
|
reg64_or_zero(i0.get_src(1))),
|
||||||
instr_str};
|
instr_str};
|
||||||
|
case InstructionKind::BEQL:
|
||||||
|
return {fmt::format("((s64){}) == ((s64){})", reg64_or_zero(i0.get_src(0)),
|
||||||
|
reg64_or_zero(i0.get_src(1))),
|
||||||
|
instr_str};
|
||||||
case InstructionKind::BC1TL:
|
case InstructionKind::BC1TL:
|
||||||
return {"cop1_bc", instr_str};
|
return {"cop1_bc", instr_str};
|
||||||
|
case InstructionKind::BC1FL:
|
||||||
|
return {"!cop1_bc", instr_str};
|
||||||
default:
|
default:
|
||||||
return handle_unknown(instr_str);
|
return handle_unknown(instr_str);
|
||||||
}
|
}
|
||||||
|
@ -834,6 +866,12 @@ Mips2C_Line handle_cles(const Instruction& i0, const std::string& instr_string)
|
||||||
instr_string};
|
instr_string};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mips2C_Line handle_ceqs(const Instruction& i0, const std::string& instr_string) {
|
||||||
|
return {fmt::format("cop1_bc = c->fprs[{}] == c->fprs[{}];", reg_to_name(i0.get_src(0)),
|
||||||
|
reg_to_name(i0.get_src(1))),
|
||||||
|
instr_string};
|
||||||
|
}
|
||||||
|
|
||||||
Mips2C_Line handle_pmfhl_lh(const Instruction& i0, const std::string& instr_string) {
|
Mips2C_Line handle_pmfhl_lh(const Instruction& i0, const std::string& instr_string) {
|
||||||
return {fmt::format("c->pmfhl_lh({});", reg_to_name(i0.get_dst(0))), instr_string};
|
return {fmt::format("c->pmfhl_lh({});", reg_to_name(i0.get_dst(0))), instr_string};
|
||||||
}
|
}
|
||||||
|
@ -892,12 +930,16 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output,
|
||||||
return handle_generic_op2_mask(i0, instr_str, "vmove");
|
return handle_generic_op2_mask(i0, instr_str, "vmove");
|
||||||
case InstructionKind::VITOF0:
|
case InstructionKind::VITOF0:
|
||||||
return handle_generic_op2_mask(i0, instr_str, "vitof0");
|
return handle_generic_op2_mask(i0, instr_str, "vitof0");
|
||||||
|
case InstructionKind::VITOF12:
|
||||||
|
return handle_generic_op2_mask(i0, instr_str, "vitof12");
|
||||||
case InstructionKind::VFTOI0:
|
case InstructionKind::VFTOI0:
|
||||||
return handle_generic_op2_mask(i0, instr_str, "vftoi0");
|
return handle_generic_op2_mask(i0, instr_str, "vftoi0");
|
||||||
case InstructionKind::VFTOI4:
|
case InstructionKind::VFTOI4:
|
||||||
return handle_generic_op2_mask(i0, instr_str, "vftoi4");
|
return handle_generic_op2_mask(i0, instr_str, "vftoi4");
|
||||||
case InstructionKind::VFTOI12:
|
case InstructionKind::VFTOI12:
|
||||||
return handle_generic_op2_mask(i0, instr_str, "vftoi12");
|
return handle_generic_op2_mask(i0, instr_str, "vftoi12");
|
||||||
|
case InstructionKind::VABS:
|
||||||
|
return handle_generic_op2_mask(i0, instr_str, "vabs");
|
||||||
case InstructionKind::VADDQ:
|
case InstructionKind::VADDQ:
|
||||||
return handle_generic_op2_mask(i0, instr_str, "vaddq");
|
return handle_generic_op2_mask(i0, instr_str, "vaddq");
|
||||||
case InstructionKind::ANDI:
|
case InstructionKind::ANDI:
|
||||||
|
@ -956,6 +998,7 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output,
|
||||||
case InstructionKind::AND:
|
case InstructionKind::AND:
|
||||||
return handle_generic_op3(i0, instr_str, "and_"); // and isn't allowed in C++
|
return handle_generic_op3(i0, instr_str, "and_"); // and isn't allowed in C++
|
||||||
case InstructionKind::DADDIU:
|
case InstructionKind::DADDIU:
|
||||||
|
return handle_daddiu(output, i0, instr_str);
|
||||||
case InstructionKind::ADDIU:
|
case InstructionKind::ADDIU:
|
||||||
return handle_generic_op2_u16(i0, instr_str);
|
return handle_generic_op2_u16(i0, instr_str);
|
||||||
case InstructionKind::QMTC2:
|
case InstructionKind::QMTC2:
|
||||||
|
@ -996,6 +1039,8 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output,
|
||||||
return handle_generic_op2(i0, instr_str, "mtc1");
|
return handle_generic_op2(i0, instr_str, "mtc1");
|
||||||
case InstructionKind::NEGS:
|
case InstructionKind::NEGS:
|
||||||
return handle_generic_op2(i0, instr_str, "negs");
|
return handle_generic_op2(i0, instr_str, "negs");
|
||||||
|
case InstructionKind::MOVS:
|
||||||
|
return handle_generic_op2(i0, instr_str, "movs");
|
||||||
case InstructionKind::CVTWS:
|
case InstructionKind::CVTWS:
|
||||||
return handle_generic_op2(i0, instr_str, "cvtws");
|
return handle_generic_op2(i0, instr_str, "cvtws");
|
||||||
case InstructionKind::CVTSW:
|
case InstructionKind::CVTSW:
|
||||||
|
@ -1014,6 +1059,9 @@ Mips2C_Line handle_normal_instr(Mips2C_Output& output,
|
||||||
case InstructionKind::CLES:
|
case InstructionKind::CLES:
|
||||||
output.needs_cop1_bc = true;
|
output.needs_cop1_bc = true;
|
||||||
return handle_cles(i0, instr_str);
|
return handle_cles(i0, instr_str);
|
||||||
|
case InstructionKind::CEQS:
|
||||||
|
output.needs_cop1_bc = true;
|
||||||
|
return handle_ceqs(i0, instr_str);
|
||||||
case InstructionKind::VWAITQ:
|
case InstructionKind::VWAITQ:
|
||||||
return handle_plain_op(i0, instr_str, "vwaitq");
|
return handle_plain_op(i0, instr_str, "vwaitq");
|
||||||
case InstructionKind::VOPMULA:
|
case InstructionKind::VOPMULA:
|
||||||
|
|
|
@ -11238,6 +11238,7 @@
|
||||||
|
|
||||||
(declare-type collide-cache-prim structure)
|
(declare-type collide-cache-prim structure)
|
||||||
(declare-type collide-shape-prim-group basic)
|
(declare-type collide-shape-prim-group basic)
|
||||||
|
(declare-type collide-cache basic)
|
||||||
(deftype collide-shape-prim (basic)
|
(deftype collide-shape-prim (basic)
|
||||||
((cshape collide-shape :offset-assert 4)
|
((cshape collide-shape :offset-assert 4)
|
||||||
(prim-id uint32 :offset-assert 8)
|
(prim-id uint32 :offset-assert 8)
|
||||||
|
@ -11260,9 +11261,9 @@
|
||||||
(move-by-vector! (_type_ vector) none 9)
|
(move-by-vector! (_type_ vector) none 9)
|
||||||
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
|
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
|
||||||
(debug-draw-world-sphere (_type_) symbol 11)
|
(debug-draw-world-sphere (_type_) symbol 11)
|
||||||
(add-fg-prim-using-box (_type_ process-drawable) none 12)
|
(add-fg-prim-using-box (_type_ collide-cache) none 12)
|
||||||
(add-fg-prim-using-line-sphere (_type_ process-drawable) none 13)
|
(add-fg-prim-using-line-sphere (_type_ collide-cache) none 13)
|
||||||
(add-fg-prim-using-y-probe (_type_ process-drawable) none 14)
|
(add-fg-prim-using-y-probe (_type_ collide-cache) none 14)
|
||||||
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
|
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
|
||||||
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
|
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
|
||||||
(dummy-17 () none 17)
|
(dummy-17 () none 17)
|
||||||
|
@ -11357,10 +11358,10 @@
|
||||||
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
|
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
|
||||||
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40) ;; check if blocked??
|
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40) ;; check if blocked??
|
||||||
(dummy-41 (_type_ attack-info float) vector 41)
|
(dummy-41 (_type_ attack-info float) vector 41)
|
||||||
(compute-overlap (_type_ collide-shape collide-overlap-result) symbol 42)
|
(should-push-away (_type_ collide-shape collide-overlap-result) symbol 42)
|
||||||
(pull-rider! (_type_ pull-rider-info) none 43)
|
(pull-rider! (_type_ pull-rider-info) none 43)
|
||||||
(pull-riders! (_type_) symbol 44)
|
(pull-riders! (_type_) symbol 44)
|
||||||
(respond-to-collisions! (_type_) symbol 45)
|
(do-push-aways! (_type_) symbol 45)
|
||||||
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
|
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
|
||||||
(update-transforms! (_type_) symbol 47)
|
(update-transforms! (_type_) symbol 47)
|
||||||
(clear-collide-with-as (_type_) none 48)
|
(clear-collide-with-as (_type_) none 48)
|
||||||
|
@ -11516,6 +11517,15 @@
|
||||||
(unknown-float64 float :offset 1316) ;; from - logic-target::target-compute-slopes
|
(unknown-float64 float :offset 1316) ;; from - logic-target::target-compute-slopes
|
||||||
(unknown-dword20 int64 :offset 1320) ;; from target-util::turn-around? - TODO
|
(unknown-dword20 int64 :offset 1320) ;; from target-util::turn-around? - TODO
|
||||||
(unknown-dword21 int64 :offset 1328) ;; from target-util::turn-around? - TODO
|
(unknown-dword21 int64 :offset 1328) ;; from target-util::turn-around? - TODO
|
||||||
|
(unknown-dword-coverage int64 :offset 1336)
|
||||||
|
(unknown-float-coverage-0 float :offset 1344)
|
||||||
|
(unknown-float-coverage-1 float :offset 1348)
|
||||||
|
(unknown-float-coverage-2 float :offset 1352)
|
||||||
|
(unknown-u32-coverage-0 uint32 :offset 1356)
|
||||||
|
(unknown-vector-coverage-0 vector :inline :offset 1376)
|
||||||
|
(unknown-vector-coverage-1 vector :inline :offset 1392)
|
||||||
|
(unknown-vector-coverage-2 vector :inline :offset 1440)
|
||||||
|
(unknown-vector-coverage-3 vector :inline :offset 1472)
|
||||||
(unknown-vector60 vector :inline :offset 1456) ;; from - logic-target::add-thrust
|
(unknown-vector60 vector :inline :offset 1456) ;; from - logic-target::add-thrust
|
||||||
(unknown-vector61 vector :inline :offset 1504) ;; from - logic-target::add-thrust
|
(unknown-vector61 vector :inline :offset 1504) ;; from - logic-target::add-thrust
|
||||||
(unknown-float70 float :offset 1520) ;; from - logic-target::add-thrust
|
(unknown-float70 float :offset 1520) ;; from - logic-target::add-thrust
|
||||||
|
@ -11601,6 +11611,7 @@
|
||||||
(unknown-dword82 int64 :offset 18912) ;; from logic-target::reset-target-state
|
(unknown-dword82 int64 :offset 18912) ;; from logic-target::reset-target-state
|
||||||
(unknown-vector120 vector :inline :offset 18928) ;; from target::(code target-running-attack)
|
(unknown-vector120 vector :inline :offset 18928) ;; from target::(code target-running-attack)
|
||||||
(unknown-float150 float :offset 18944) ;; from target::(code target-wheel-flip)
|
(unknown-float150 float :offset 18944) ;; from target::(code target-wheel-flip)
|
||||||
|
(unknown-vector121 vector :inline :offset 18960) ;; from target collide response
|
||||||
(unknown-int60 uint32 :offset 18976) ;; from logic-target::print-target-stats
|
(unknown-int60 uint32 :offset 18976) ;; from logic-target::print-target-stats
|
||||||
(unknown-soundid00 sound-id :offset 18980) ;; from powerups::target-powerup-process
|
(unknown-soundid00 sound-id :offset 18980) ;; from powerups::target-powerup-process
|
||||||
(unknown-float141 float :offset 18984) ;; from powerups::target-powerup-process
|
(unknown-float141 float :offset 18984) ;; from powerups::target-powerup-process
|
||||||
|
@ -11790,7 +11801,7 @@
|
||||||
:flag-assert #xb00000810
|
:flag-assert #xb00000810
|
||||||
(:methods
|
(:methods
|
||||||
(debug-draw (_type_) object 9)
|
(debug-draw (_type_) object 9)
|
||||||
(dummy-10 () none 10)
|
(dummy-10 (_type_ collide-edge-hold-item) none 10)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11832,12 +11843,12 @@
|
||||||
(debug-draw-edges (_type_) object 10)
|
(debug-draw-edges (_type_) object 10)
|
||||||
(dummy-11 (_type_) none 11)
|
(dummy-11 (_type_) none 11)
|
||||||
(debug-draw-sphere (_type_) symbol 12)
|
(debug-draw-sphere (_type_) symbol 12)
|
||||||
(dummy-13 (_type_) none 13)
|
(dummy-13 (_type_ collide-edge-hold-item vector) none 13)
|
||||||
(dummy-14 (_type_ vector vector int) float 14)
|
(dummy-14 (_type_ vector vector int) float 14)
|
||||||
(dummy-15 (_type_) none 15)
|
(dummy-15 (_type_) none 15)
|
||||||
(dummy-16 (_type_) none 16)
|
(find-grabbable-tris! (_type_) none 16)
|
||||||
(dummy-17 (_type_) none 17)
|
(dummy-17 (_type_) none 17)
|
||||||
(dummy-18 (_type_) none 18)
|
(dummy-18 (_type_ collide-edge-hold-list edge-grab-info) none 18)
|
||||||
(dummy-19 (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
|
(dummy-19 (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -12482,8 +12493,8 @@
|
||||||
:size-assert #xc60
|
:size-assert #xc60
|
||||||
:flag-assert #xb00000c60
|
:flag-assert #xb00000c60
|
||||||
(:methods
|
(:methods
|
||||||
(dummy-9 () none 9)
|
(dummy-9 (_type_ object object) symbol 9)
|
||||||
(dummy-10 () none 10)
|
(dummy-10 (_type_ object object) symbol 10)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -12502,10 +12513,11 @@
|
||||||
(deftype collide-cache-tri (structure)
|
(deftype collide-cache-tri (structure)
|
||||||
((vertex vector 3 :inline :offset-assert 0)
|
((vertex vector 3 :inline :offset-assert 0)
|
||||||
;(extra-quad UNKNOWN 16 :offset-assert 48)
|
;(extra-quad UNKNOWN 16 :offset-assert 48)
|
||||||
(pat pat-surface :offset-assert 48)
|
(extra-quad uint128 :offset 48)
|
||||||
(prim-index uint16 :offset-assert 52)
|
(pat pat-surface :offset 48)
|
||||||
(user16 uint16 :offset-assert 54)
|
(prim-index uint16 :offset 52)
|
||||||
(user32 uint32 2 :offset-assert 56)
|
(user16 uint16 :offset 54)
|
||||||
|
(user32 uint32 2 :offset 56)
|
||||||
)
|
)
|
||||||
:method-count-assert 9
|
:method-count-assert 9
|
||||||
:size-assert #x40
|
:size-assert #x40
|
||||||
|
@ -12514,12 +12526,12 @@
|
||||||
|
|
||||||
(deftype collide-cache-prim (structure)
|
(deftype collide-cache-prim (structure)
|
||||||
((prim-core collide-prim-core :inline :offset-assert 0)
|
((prim-core collide-prim-core :inline :offset-assert 0)
|
||||||
;;(extra-quad UNKNOWN 16 :offset-assert 32)
|
(extra-quad uint128 :offset-assert 32)
|
||||||
(ccache collide-cache :offset-assert 32)
|
(ccache collide-cache :offset 32)
|
||||||
(prim collide-shape-prim :offset-assert 36)
|
(prim collide-shape-prim :offset 36)
|
||||||
(first-tri uint16 :offset-assert 40)
|
(first-tri uint16 :offset 40)
|
||||||
(num-tris uint16 :offset-assert 42)
|
(num-tris uint16 :offset 42)
|
||||||
(unused uint8 4 :offset-assert 44)
|
(unused uint8 4 :offset 44)
|
||||||
(world-sphere vector :inline :offset 0)
|
(world-sphere vector :inline :offset 0)
|
||||||
(collide-as collide-kind :offset 16)
|
(collide-as collide-kind :offset 16)
|
||||||
(action collide-action :offset 24)
|
(action collide-action :offset 24)
|
||||||
|
@ -12554,7 +12566,7 @@
|
||||||
(:methods
|
(:methods
|
||||||
(debug-draw (_type_) none 9)
|
(debug-draw (_type_) none 9)
|
||||||
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result int) float 10)
|
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result int) float 10)
|
||||||
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) none 11)
|
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) symbol 11)
|
||||||
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process collide-tri-result uint) float 12)
|
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process collide-tri-result uint) float 12)
|
||||||
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
|
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
|
||||||
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable int) none 14)
|
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable int) none 14)
|
||||||
|
@ -12562,20 +12574,20 @@
|
||||||
(fill-using-y-probe (_type_ vector float collide-kind process-drawable uint) none 16)
|
(fill-using-y-probe (_type_ vector float collide-kind process-drawable uint) none 16)
|
||||||
(initialize (_type_) none 17)
|
(initialize (_type_) none 17)
|
||||||
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result int) float 18)
|
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result int) float 18)
|
||||||
(probe-using-spheres (_type_) none 19)
|
(probe-using-spheres (_type_ collide-using-spheres-params) symbol 19)
|
||||||
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result uint) float 20)
|
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result uint) float 20)
|
||||||
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache none)) none 21) ;; second functiom is method 28
|
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache object none)) none 21) ;; second functiom is method 28
|
||||||
(fill-from-foreground-using-spheres (_type_) none 22)
|
(fill-from-foreground-using-box (_type_) none 22)
|
||||||
(fill-from-foreground-using-line-sphere (_type_) none 23)
|
(fill-from-foreground-using-line-sphere (_type_) none 23)
|
||||||
(fill-from-foreground-using-y-probe (_type_) none 24)
|
(fill-from-foreground-using-y-probe (_type_) none 24)
|
||||||
(fill-from-water (_type_ water-control) none 25) ;; or whatever is from 152 in the process passed to 16
|
(fill-from-water (_type_ water-control) none 25) ;; or whatever is from 152 in the process passed to 16
|
||||||
(dummy-26 (_type_) none 26)
|
(load-mesh-from-spad-in-box (_type_ collide-frag-mesh) none 26)
|
||||||
(dummy-27 (_type_) none 27)
|
(dummy-27 (_type_) none 27)
|
||||||
(dummy-28 (_type_) none 28)
|
(dummy-28 (_type_) none 28)
|
||||||
(dummy-29 (_type_ collide-frag-mesh) none 29)
|
(dummy-29 (_type_ collide-frag-mesh) none 29)
|
||||||
(dummy-30 (_type_) none 30)
|
(puyp-mesh (_type_ collide-puyp-work collide-cache-prim) none 30)
|
||||||
(dummy-31 (_type_ collide-puyp-work collide-cache-prim) vector 31)
|
(puyp-sphere (_type_ collide-puyp-work collide-cache-prim) vector 31)
|
||||||
(dummy-32 (_type_) none 32)
|
(unpack-background-collide-mesh (_type_ object object object) none 32) ;; helper for fill from background.
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14439,7 +14451,7 @@
|
||||||
(print-nth-point (_type_ int) none 11)
|
(print-nth-point (_type_ int) none 11)
|
||||||
(TODO-RENAME-12 (_type_) none 12)
|
(TODO-RENAME-12 (_type_) none 12)
|
||||||
(TODO-RENAME-13 (_type_ int) none 13)
|
(TODO-RENAME-13 (_type_ int) none 13)
|
||||||
(TODO-RENAME-14 (_type_ vector) none 14)
|
(TODO-RENAME-14 (_type_ tracking-spline-sampler) none 14)
|
||||||
(TODO-RENAME-15 (_type_) none 15)
|
(TODO-RENAME-15 (_type_) none 15)
|
||||||
(TODO-RENAME-16 (_type_ float) none 16)
|
(TODO-RENAME-16 (_type_ float) none 16)
|
||||||
(TODO-RENAME-17 (_type_ vector float float symbol) int 17) ; - return value is actually none but they do a manual `return`
|
(TODO-RENAME-17 (_type_ vector float float symbol) int 17) ; - return value is actually none but they do a manual `return`
|
||||||
|
@ -19940,7 +19952,7 @@
|
||||||
;; - Functions
|
;; - Functions
|
||||||
|
|
||||||
(define-extern collide-shape-moving-angle-set! (function collide-shape-moving vector vector none))
|
(define-extern collide-shape-moving-angle-set! (function collide-shape-moving vector vector none))
|
||||||
(define-extern target-collision-low-coverage (function control-info collide-shape-intersect vector (pointer int) (pointer int) (pointer symbol) uint)) ;; i think the pointers are lies - TODO
|
(define-extern target-collision-low-coverage (function control-info collide-shape-intersect vector (pointer uint32) (pointer uint64) (pointer symbol) uint)) ;; i think the pointers are lies - TODO
|
||||||
(define-extern poly-find-nearest-edge (function vector (inline-array vector) vector vector vector))
|
(define-extern poly-find-nearest-edge (function vector (inline-array vector) vector vector vector))
|
||||||
(define-extern target-collision-reaction (function control-info collide-shape-intersect vector vector none))
|
(define-extern target-collision-reaction (function control-info collide-shape-intersect vector vector none))
|
||||||
(define-extern target-collision-no-reaction (function control-info collide-shape-intersect vector vector none))
|
(define-extern target-collision-no-reaction (function control-info collide-shape-intersect vector vector none))
|
||||||
|
@ -20080,7 +20092,7 @@
|
||||||
(define-extern target-apply-tongue (function vector symbol :behavior target))
|
(define-extern target-apply-tongue (function vector symbol :behavior target))
|
||||||
(define-extern get-intersect-point (function vector touching-prims-entry control-info process vector))
|
(define-extern get-intersect-point (function vector touching-prims-entry control-info process vector))
|
||||||
(define-extern target-powerup-effect (function symbol none :behavior target))
|
(define-extern target-powerup-effect (function symbol none :behavior target))
|
||||||
(define-extern target-shoved (function meters meters process (state target) object :behavior target))
|
(define-extern target-shoved (function meters meters process (state object object target) object :behavior target))
|
||||||
(define-extern target-dangerous-event-handler (function process int symbol event-message-block object :behavior target))
|
(define-extern target-dangerous-event-handler (function process int symbol event-message-block object :behavior target))
|
||||||
(define-extern target-jump-event-handler (function process int symbol event-message-block object :behavior target))
|
(define-extern target-jump-event-handler (function process int symbol event-message-block object :behavior target))
|
||||||
(define-extern target-walk-event-handler (function process int symbol event-message-block object :behavior target))
|
(define-extern target-walk-event-handler (function process int symbol event-message-block object :behavior target))
|
||||||
|
|
|
@ -237,10 +237,10 @@
|
||||||
"(method 13 collide-edge-work)", // CFG
|
"(method 13 collide-edge-work)", // CFG
|
||||||
"(method 17 collide-edge-work)", // CFG
|
"(method 17 collide-edge-work)", // CFG
|
||||||
"(method 15 collide-edge-work)", // CFG
|
"(method 15 collide-edge-work)", // CFG
|
||||||
"(method 16 collide-edge-work)", // CFG
|
// CFG
|
||||||
"(method 9 edge-grab-info)", // CFG
|
"(method 9 edge-grab-info)", // CFG
|
||||||
"(method 18 collide-edge-work)", // CFG
|
"(method 18 collide-edge-work)", // CFG
|
||||||
"(method 10 collide-edge-hold-list)", // CFG
|
// CFG
|
||||||
|
|
||||||
|
|
||||||
"(method 12 collide-mesh)",
|
"(method 12 collide-mesh)",
|
||||||
|
@ -253,7 +253,7 @@
|
||||||
"ambient-inspect",
|
"ambient-inspect",
|
||||||
|
|
||||||
// target BUG
|
// target BUG
|
||||||
"target-falling-anim-trans", // CFG resolution
|
//"target-falling-anim-trans", // CFG resolution
|
||||||
|
|
||||||
// target2 BUG
|
// target2 BUG
|
||||||
"look-for-points-of-interest", // Failed to split nested sc - looks like dead code to me
|
"look-for-points-of-interest", // Failed to split nested sc - looks like dead code to me
|
||||||
|
@ -261,20 +261,14 @@
|
||||||
// collide-cache
|
// collide-cache
|
||||||
"(method 10 collide-puss-work)", // CFG
|
"(method 10 collide-puss-work)", // CFG
|
||||||
"(method 9 collide-puss-work)", // decompiler crash
|
"(method 9 collide-puss-work)", // decompiler crash
|
||||||
"(method 19 collide-cache)", // decompiler crash
|
// decompiler crash
|
||||||
"(method 10 collide-cache-prim)", // CFG
|
|
||||||
"(method 9 collide-cache-prim)", // CFG
|
// CFG
|
||||||
"(method 30 collide-cache)", // unsupported asm - c.le.s
|
// CFG
|
||||||
"(method 13 collide-shape-prim-group)", // CFG
|
// CFG
|
||||||
"(method 13 collide-shape-prim-mesh)", // CFG
|
|
||||||
"(method 14 collide-shape-prim-group)", // CFG
|
|
||||||
"(method 14 collide-shape-prim-mesh)", // CFG
|
|
||||||
"(method 12 collide-shape-prim-group)", // CFG
|
|
||||||
"(method 12 collide-shape-prim-mesh)", // CFG
|
|
||||||
"(method 27 collide-cache)", // CFG
|
|
||||||
// "(method 14 collide-cache)", // CFG
|
// "(method 14 collide-cache)", // CFG
|
||||||
"(method 28 collide-cache)", // CFG
|
// CFG
|
||||||
"(method 26 collide-cache)", // CFG
|
// "(method 26 collide-cache)", // CFG
|
||||||
//"(method 21 collide-cache)", // CFG
|
//"(method 21 collide-cache)", // CFG
|
||||||
"(method 32 collide-cache)", // CFG
|
"(method 32 collide-cache)", // CFG
|
||||||
|
|
||||||
|
@ -487,7 +481,20 @@
|
||||||
"(method 16 collide-shape-prim)" : [1, 2, 3, 4, 5, 6],
|
"(method 16 collide-shape-prim)" : [1, 2, 3, 4, 5, 6],
|
||||||
"(method 15 collide-shape-prim-sphere)" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
|
"(method 15 collide-shape-prim-sphere)" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
|
||||||
"(method 15 collide-shape-prim-mesh)" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 29],
|
"(method 15 collide-shape-prim-mesh)" : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 29],
|
||||||
"(method 35 collide-shape)" : [1]
|
"(method 35 collide-shape)" : [1],
|
||||||
|
"(method 22 collide-cache)":[2, 3, 4, 13, 14, 15, 23, 24, 25, 33, 34, 35],
|
||||||
|
"(method 12 collide-shape-prim-sphere)" : [0, 1],
|
||||||
|
"(method 12 collide-shape-prim-group)" : [1, 2, 3, 4],
|
||||||
|
"(method 24 collide-cache)" : [2, 3, 4, 13, 14, 15, 23, 24, 25, 33, 34, 35],
|
||||||
|
"(method 14 collide-shape-prim-sphere)" : [0, 1, 2, 3],
|
||||||
|
"(method 14 collide-shape-prim-group)" : [0, 1, 2, 3, 4],
|
||||||
|
"(method 23 collide-cache)" : [2, 3, 4, 13, 14, 15, 23, 24, 25, 33, 34, 35],
|
||||||
|
"(method 13 collide-shape-prim-sphere)" : [0, 1, 2],
|
||||||
|
"(method 13 collide-shape-prim-group)" : [0, 1, 2,3,4],
|
||||||
|
"(method 19 collide-cache)" : [0, 1, 3, 4, 5, 18, 19],
|
||||||
|
"(method 10 collide-mesh)" : [1, 2, 4, 5],
|
||||||
|
"target-falling-anim-trans" : [5, 6]
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Sometimes the game might use format strings that are fetched dynamically,
|
// Sometimes the game might use format strings that are fetched dynamically,
|
||||||
|
@ -539,7 +546,27 @@
|
||||||
"(method 12 collide-mesh)",
|
"(method 12 collide-mesh)",
|
||||||
"(method 11 collide-mesh)",
|
"(method 11 collide-mesh)",
|
||||||
"collide-probe-node",
|
"collide-probe-node",
|
||||||
"collide-probe-instance-tie"
|
"collide-probe-instance-tie",
|
||||||
|
"(method 32 collide-cache)",
|
||||||
|
"(method 28 collide-cache)",
|
||||||
|
"(method 26 collide-cache)",
|
||||||
|
"(method 27 collide-cache)",
|
||||||
|
"(method 29 collide-cache)",
|
||||||
|
"(method 12 collide-shape-prim-mesh)",
|
||||||
|
"(method 14 collide-shape-prim-mesh)",
|
||||||
|
"(method 13 collide-shape-prim-mesh)",
|
||||||
|
"(method 30 collide-cache)",
|
||||||
|
"(method 9 collide-cache-prim)",
|
||||||
|
"(method 10 collide-cache-prim)",
|
||||||
|
"(method 9 collide-puss-work)",
|
||||||
|
"(method 10 collide-puss-work)",
|
||||||
|
|
||||||
|
// these could easily be goal, but probably faster/easier this way.
|
||||||
|
"(method 14 collide-mesh)",
|
||||||
|
"(method 15 collide-mesh)",
|
||||||
|
|
||||||
|
"(method 16 collide-edge-work)",
|
||||||
|
"(method 10 collide-edge-hold-list)"
|
||||||
],
|
],
|
||||||
|
|
||||||
// there are some missing textures. I don't know what the game actually does here.
|
// there are some missing textures. I don't know what the game actually does here.
|
||||||
|
|
|
@ -696,7 +696,7 @@
|
||||||
[48, "collide-tri-result"]
|
[48, "collide-tri-result"]
|
||||||
],
|
],
|
||||||
|
|
||||||
"(method 20 collide-cache)": [[16, "vector"]],
|
"(method 20 collide-cache)": [[16, "collide-puyp-work"]],
|
||||||
|
|
||||||
"(method 12 wobbler)": [[16, "vector"]],
|
"(method 12 wobbler)": [[16, "vector"]],
|
||||||
|
|
||||||
|
@ -4366,7 +4366,7 @@
|
||||||
"target-collision-reaction": [
|
"target-collision-reaction": [
|
||||||
[16, "vector"],
|
[16, "vector"],
|
||||||
[32, "vector"],
|
[32, "vector"],
|
||||||
[48, "vector"],
|
[48, "matrix"],
|
||||||
[112, "vector"],
|
[112, "vector"],
|
||||||
[128, "vector"],
|
[128, "vector"],
|
||||||
[144, "vector"],
|
[144, "vector"],
|
||||||
|
@ -6082,6 +6082,15 @@
|
||||||
"(method 18 collide-shape-prim-sphere)" : [
|
"(method 18 collide-shape-prim-sphere)" : [
|
||||||
[16, "collide-tri-result"]
|
[16, "collide-tri-result"]
|
||||||
],
|
],
|
||||||
|
"target-collision-low-coverage" : [
|
||||||
|
[64, "collide-tri-result"],
|
||||||
|
[176, "vector"],
|
||||||
|
[192, "vector"],
|
||||||
|
[224, "vector"],
|
||||||
|
[240, "vector"],
|
||||||
|
[256, "vector"],
|
||||||
|
[288, "vector"]
|
||||||
|
],
|
||||||
|
|
||||||
"placeholder-do-not-add-below!": []
|
"placeholder-do-not-add-below!": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -5795,16 +5795,13 @@
|
||||||
],
|
],
|
||||||
|
|
||||||
"(method 9 collide-cache)": [
|
"(method 9 collide-cache)": [
|
||||||
[5, "gp", "collide-cache-tri"],
|
[[1,29], "gp", "collide-cache-tri"],
|
||||||
[19, "gp", "collide-cache-tri"],
|
[[29,56], "gp", "collide-cache-prim"],
|
||||||
[20, "gp", "collide-cache-tri"],
|
|
||||||
[21, "gp", "collide-cache-tri"],
|
|
||||||
[23, "gp", "(inline-array collide-cache-tri)"],
|
|
||||||
[33, "gp", "collide-cache-prim"],
|
|
||||||
[35, "gp", "collide-cache-prim"],
|
[35, "gp", "collide-cache-prim"],
|
||||||
[50, "gp", "collide-cache-prim"],
|
[50, "gp", "collide-cache-prim"],
|
||||||
[51, "gp", "collide-cache-prim"],
|
[51, "gp", "collide-cache-prim"],
|
||||||
[55, "gp", "(inline-array collide-cache-prim)"]
|
[55, "gp", "collide-cache-prim"],
|
||||||
|
[36, "v1", "collide-shape-prim-sphere"]
|
||||||
],
|
],
|
||||||
|
|
||||||
"(method 9 collide-mesh)": [
|
"(method 9 collide-mesh)": [
|
||||||
|
@ -7547,6 +7544,9 @@
|
||||||
[190, "v1", "(pointer int32)"],
|
[190, "v1", "(pointer int32)"],
|
||||||
[147, "v1", "collide-list-item"],
|
[147, "v1", "collide-list-item"],
|
||||||
[148, "v1", "collide-list-item"],
|
[148, "v1", "collide-list-item"],
|
||||||
|
[[91, 95], "v1", "dma-packet"],
|
||||||
|
[[112, 141], "v1", "dma-bank-spr"],
|
||||||
|
[[154, 188], "a2", "dma-bank-spr"],
|
||||||
[[217, 227], "s3", "collide-list-item"]
|
[[217, 227], "s3", "collide-list-item"]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -7590,5 +7590,63 @@
|
||||||
[[16, 55], "gp", "collide-shape-prim-mesh"]
|
[[16, 55], "gp", "collide-shape-prim-mesh"]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"(method 25 collide-cache)" : [
|
||||||
|
[[83, 104], "a2", "(inline-array collide-cache-tri)"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 22 collide-cache)" : [
|
||||||
|
[14, "v1", "connection"],
|
||||||
|
[[15,31], "v1", "collide-shape"],
|
||||||
|
[74, "v1", "connection"],
|
||||||
|
[[75, 91], "v1", "collide-shape"],
|
||||||
|
[130, "v1", "connection"],
|
||||||
|
[[131, 148], "v1", "collide-shape"],
|
||||||
|
[187, "v1", "connection"],
|
||||||
|
[[188, 205], "v1", "collide-shape"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 12 collide-shape-prim-sphere)" : [
|
||||||
|
[[13, 23], "t0", "collide-cache-prim"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 24 collide-cache)" : [
|
||||||
|
[14, "v1", "connection"],
|
||||||
|
[[15,31], "v1", "collide-shape"],
|
||||||
|
[74, "v1", "connection"],
|
||||||
|
[[75, 91], "v1", "collide-shape"],
|
||||||
|
[130, "v1", "connection"],
|
||||||
|
[[131, 148], "v1", "collide-shape"],
|
||||||
|
[187, "v1", "connection"],
|
||||||
|
[[188, 205], "v1", "collide-shape"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 14 collide-shape-prim-sphere)" : [
|
||||||
|
[[11, 23], "t0", "collide-cache-prim"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 23 collide-cache)" : [
|
||||||
|
[20, "v1", "connection"],
|
||||||
|
[[21,43], "v1", "collide-shape"],
|
||||||
|
[86, "v1", "connection"],
|
||||||
|
[[87,109], "v1", "collide-shape"],
|
||||||
|
[148, "v1", "connection"],
|
||||||
|
[[149, 174], "v1", "collide-shape"],
|
||||||
|
[211, "v1", "connection"],
|
||||||
|
[[212, 235], "v1", "collide-shape"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 13 collide-shape-prim-sphere)" : [
|
||||||
|
[[11, 23], "t0", "collide-cache-prim"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 31 collide-cache)" : [
|
||||||
|
[22, "v1", "collide-shape-prim-sphere"]
|
||||||
|
],
|
||||||
|
|
||||||
|
"(method 19 collide-cache)" : [
|
||||||
|
[[52, 94], "s4", "collide-cache-prim"],
|
||||||
|
[[1, 100], "s5", "collide-puss-work"]
|
||||||
|
],
|
||||||
|
|
||||||
"placeholder-do-not-add-below": []
|
"placeholder-do-not-add-below": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,6 +60,8 @@ set(RUNTIME_SOURCE
|
||||||
kernel/ksocket.cpp
|
kernel/ksocket.cpp
|
||||||
kernel/ksound.cpp
|
kernel/ksound.cpp
|
||||||
mips2c/mips2c_table.cpp
|
mips2c/mips2c_table.cpp
|
||||||
|
mips2c/functions/collide_cache.cpp
|
||||||
|
mips2c/functions/collide_edge_grab.cpp
|
||||||
mips2c/functions/collide_func.cpp
|
mips2c/functions/collide_func.cpp
|
||||||
mips2c/functions/collide_mesh.cpp
|
mips2c/functions/collide_mesh.cpp
|
||||||
mips2c/functions/collide_probe.cpp
|
mips2c/functions/collide_probe.cpp
|
||||||
|
|
|
@ -63,6 +63,9 @@ struct SharedRenderState {
|
||||||
bool dump_playback = false;
|
bool dump_playback = false;
|
||||||
|
|
||||||
bool use_sky_cpu = true;
|
bool use_sky_cpu = true;
|
||||||
|
|
||||||
|
bool has_camera_planes = false;
|
||||||
|
math::Vector4f camera_planes[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -120,6 +120,7 @@ void OpenGLRenderer::render(DmaFollower dma, const RenderOptions& settings) {
|
||||||
m_render_state.dump_playback = settings.playing_from_dump;
|
m_render_state.dump_playback = settings.playing_from_dump;
|
||||||
m_render_state.ee_main_memory = settings.playing_from_dump ? nullptr : g_ee_main_mem;
|
m_render_state.ee_main_memory = settings.playing_from_dump ? nullptr : g_ee_main_mem;
|
||||||
m_render_state.offset_of_s7 = offset_of_s7();
|
m_render_state.offset_of_s7 = offset_of_s7();
|
||||||
|
m_render_state.has_camera_planes = false;
|
||||||
|
|
||||||
{
|
{
|
||||||
auto prof = m_profiler.root()->make_scoped_child("frame-setup");
|
auto prof = m_profiler.root()->make_scoped_child("frame-setup");
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "third-party/imgui/imgui.h"
|
#include "third-party/imgui/imgui.h"
|
||||||
#include "SpriteRenderer.h"
|
#include "SpriteRenderer.h"
|
||||||
#include "game/graphics/opengl_renderer/dma_helpers.h"
|
#include "game/graphics/opengl_renderer/dma_helpers.h"
|
||||||
|
#include "game/graphics/opengl_renderer/tfrag/tfrag_common.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -99,12 +100,12 @@ SpriteRenderer::SpriteRenderer(const std::string& name, BucketId my_id)
|
||||||
* the table upload stuff that runs every frame, even if there are no sprites.
|
* the table upload stuff that runs every frame, even if there are no sprites.
|
||||||
*/
|
*/
|
||||||
void SpriteRenderer::render_distorter(DmaFollower& dma,
|
void SpriteRenderer::render_distorter(DmaFollower& dma,
|
||||||
SharedRenderState* render_state,
|
SharedRenderState* /*render_state*/,
|
||||||
ScopedProfilerNode& prof) {
|
ScopedProfilerNode& /*prof*/) {
|
||||||
// Next thing should be the sprite-distorter setup
|
// Next thing should be the sprite-distorter setup
|
||||||
// m_direct_renderer.reset_state();
|
// m_direct_renderer.reset_state();
|
||||||
while (dma.current_tag().qwc != 7) {
|
while (dma.current_tag().qwc != 7) {
|
||||||
auto direct_data = dma.read_and_advance();
|
dma.read_and_advance();
|
||||||
// m_direct_renderer.render_vif(direct_data.vif0(), direct_data.vif1(), direct_data.data,
|
// m_direct_renderer.render_vif(direct_data.vif0(), direct_data.vif1(), direct_data.data,
|
||||||
// direct_data.size_bytes, render_state, prof);
|
// direct_data.size_bytes, render_state, prof);
|
||||||
}
|
}
|
||||||
|
@ -194,10 +195,6 @@ void SpriteRenderer::render_2d_group0(DmaFollower& dma,
|
||||||
m_3d_matrix_data.hvdf_offset.data());
|
m_3d_matrix_data.hvdf_offset.data());
|
||||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "pfog0"),
|
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "pfog0"),
|
||||||
m_frame_data.pfog0);
|
m_frame_data.pfog0);
|
||||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "fog_min"),
|
|
||||||
m_frame_data.fog_min);
|
|
||||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "fog_max"),
|
|
||||||
m_frame_data.fog_max);
|
|
||||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "min_scale"),
|
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "min_scale"),
|
||||||
m_frame_data.min_scale);
|
m_frame_data.min_scale);
|
||||||
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "max_scale"),
|
glUniform1f(glGetUniformLocation(render_state->shaders[ShaderId::SPRITE].id(), "max_scale"),
|
||||||
|
@ -417,16 +414,10 @@ void SpriteRenderer::draw_debug_window() {
|
||||||
m_debug_stats.count_2d_grp0);
|
m_debug_stats.count_2d_grp0);
|
||||||
ImGui::Text("2D Group 1 (HUD) blocks: %d sprites: %d", m_debug_stats.blocks_2d_grp1,
|
ImGui::Text("2D Group 1 (HUD) blocks: %d sprites: %d", m_debug_stats.blocks_2d_grp1,
|
||||||
m_debug_stats.count_2d_grp1);
|
m_debug_stats.count_2d_grp1);
|
||||||
ImGui::Checkbox("Extra Debug", &m_extra_debug);
|
ImGui::Checkbox("Culling", &m_enable_culling);
|
||||||
ImGui::Checkbox("2d", &m_2d_enable);
|
ImGui::Checkbox("2d", &m_2d_enable);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Checkbox("3d", &m_3d_enable);
|
ImGui::Checkbox("3d", &m_3d_enable);
|
||||||
ImGui::SameLine();
|
|
||||||
ImGui::Checkbox("3d-debug", &m_3d_debug);
|
|
||||||
if (ImGui::TreeNode("direct")) {
|
|
||||||
// m_sprite_renderer.draw_debug_window();
|
|
||||||
ImGui::TreePop();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -471,8 +462,8 @@ void SpriteRenderer::flush_sprites(SharedRenderState* render_state, ScopedProfil
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::handle_tex0(u64 val,
|
void SpriteRenderer::handle_tex0(u64 val,
|
||||||
SharedRenderState* render_state,
|
SharedRenderState* /*render_state*/,
|
||||||
ScopedProfilerNode& prof) {
|
ScopedProfilerNode& /*prof*/) {
|
||||||
GsTex0 reg(val);
|
GsTex0 reg(val);
|
||||||
|
|
||||||
// update tbp
|
// update tbp
|
||||||
|
@ -495,8 +486,8 @@ void SpriteRenderer::handle_tex0(u64 val,
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::handle_tex1(u64 val,
|
void SpriteRenderer::handle_tex1(u64 val,
|
||||||
SharedRenderState* render_state,
|
SharedRenderState* /*render_state*/,
|
||||||
ScopedProfilerNode& prof) {
|
ScopedProfilerNode& /*prof*/) {
|
||||||
GsTex1 reg(val);
|
GsTex1 reg(val);
|
||||||
// for now, we aren't going to handle mipmapping. I don't think it's used with direct.
|
// for now, we aren't going to handle mipmapping. I don't think it's used with direct.
|
||||||
// assert(reg.mxl() == 0);
|
// assert(reg.mxl() == 0);
|
||||||
|
@ -512,8 +503,8 @@ void SpriteRenderer::handle_tex1(u64 val,
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::handle_zbuf(u64 val,
|
void SpriteRenderer::handle_zbuf(u64 val,
|
||||||
SharedRenderState* render_state,
|
SharedRenderState* /*render_state*/,
|
||||||
ScopedProfilerNode& prof) {
|
ScopedProfilerNode& /*prof*/) {
|
||||||
// note: we can basically ignore this. There's a single z buffer that's always configured the same
|
// note: we can basically ignore this. There's a single z buffer that's always configured the same
|
||||||
// way - 24-bit, at offset 448.
|
// way - 24-bit, at offset 448.
|
||||||
GsZbuf x(val);
|
GsZbuf x(val);
|
||||||
|
@ -524,8 +515,8 @@ void SpriteRenderer::handle_zbuf(u64 val,
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::handle_clamp(u64 val,
|
void SpriteRenderer::handle_clamp(u64 val,
|
||||||
SharedRenderState* render_state,
|
SharedRenderState* /*render_state*/,
|
||||||
ScopedProfilerNode& prof) {
|
ScopedProfilerNode& /*prof*/) {
|
||||||
if (!(val == 0b101 || val == 0 || val == 1 || val == 0b100)) {
|
if (!(val == 0b101 || val == 0 || val == 1 || val == 0b100)) {
|
||||||
fmt::print("clamp: 0x{:x}\n", val);
|
fmt::print("clamp: 0x{:x}\n", val);
|
||||||
assert(false);
|
assert(false);
|
||||||
|
@ -559,20 +550,20 @@ void SpriteRenderer::update_gl_blend(AdGifState& state) {
|
||||||
// unsupported blend: a 0 b 2 c 2 d 1
|
// unsupported blend: a 0 b 2 c 2 d 1
|
||||||
lg::error("unsupported blend: a {} b {} c {} d {}\n", (int)state.a, (int)state.b,
|
lg::error("unsupported blend: a {} b {} c {} d {}\n", (int)state.a, (int)state.b,
|
||||||
(int)state.c, (int)state.d);
|
(int)state.c, (int)state.d);
|
||||||
assert(false);
|
// assert(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::handle_alpha(u64 val,
|
void SpriteRenderer::handle_alpha(u64 val,
|
||||||
SharedRenderState* render_state,
|
SharedRenderState* /*render_state*/,
|
||||||
ScopedProfilerNode& prof) {
|
ScopedProfilerNode& /*prof*/) {
|
||||||
GsAlpha reg(val);
|
GsAlpha reg(val);
|
||||||
|
|
||||||
m_adgif_state.from_register(reg);
|
m_adgif_state.from_register(reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::update_gl_prim(SharedRenderState* render_state) {
|
void SpriteRenderer::update_gl_prim(SharedRenderState* /*render_state*/) {
|
||||||
// currently gouraud is handled in setup.
|
// currently gouraud is handled in setup.
|
||||||
const auto& state = m_prim_gl_state;
|
const auto& state = m_prim_gl_state;
|
||||||
if (state.fogging_enable) {
|
if (state.fogging_enable) {
|
||||||
|
@ -655,6 +646,16 @@ void SpriteRenderer::do_block_common(SpriteMode mode,
|
||||||
flush_sprites(render_state, prof);
|
flush_sprites(render_state, prof);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mode == Mode2D && render_state->has_camera_planes && m_enable_culling) {
|
||||||
|
// we can skip sprites that are out of view
|
||||||
|
// it's probably possible to do this for 3D as well.
|
||||||
|
auto bsphere = m_vec_data_2d[sprite_idx].xyz_sx;
|
||||||
|
bsphere.w() = std::max(bsphere.w(), m_vec_data_2d[sprite_idx].sy());
|
||||||
|
if (bsphere.w() == 0 || !sphere_in_view_ref(bsphere, render_state->camera_planes)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto& adgif = m_adgif[sprite_idx];
|
auto& adgif = m_adgif[sprite_idx];
|
||||||
// fmt::print("adgif: {:X} {:X} {:X} {:X}\n", adgif.tex0_data, adgif.tex1_data,
|
// fmt::print("adgif: {:X} {:X} {:X} {:X}\n", adgif.tex0_data, adgif.tex1_data,
|
||||||
// adgif.clamp_data, adgif.alpha_data); fmt::print("adgif regs: {} {} {} {} {}\n",
|
// adgif.clamp_data, adgif.alpha_data); fmt::print("adgif regs: {} {} {} {} {}\n",
|
||||||
|
|
|
@ -197,8 +197,7 @@ class SpriteRenderer : public BucketRenderer {
|
||||||
int count_2d_grp1 = 0;
|
int count_2d_grp1 = 0;
|
||||||
} m_debug_stats;
|
} m_debug_stats;
|
||||||
|
|
||||||
bool m_extra_debug = false;
|
bool m_enable_culling = true;
|
||||||
bool m_3d_debug = false;
|
|
||||||
|
|
||||||
bool m_2d_enable = true;
|
bool m_2d_enable = true;
|
||||||
bool m_3d_enable = true;
|
bool m_3d_enable = true;
|
||||||
|
|
|
@ -12,8 +12,6 @@ uniform mat4 hud_matrix;
|
||||||
uniform vec4 hud_hvdf_offset;
|
uniform vec4 hud_hvdf_offset;
|
||||||
uniform vec4 hud_hvdf_user[75];
|
uniform vec4 hud_hvdf_user[75];
|
||||||
uniform float pfog0;
|
uniform float pfog0;
|
||||||
uniform float fog_min;
|
|
||||||
uniform float fog_max;
|
|
||||||
uniform float min_scale;
|
uniform float min_scale;
|
||||||
uniform float max_scale;
|
uniform float max_scale;
|
||||||
uniform float bonus;
|
uniform float bonus;
|
||||||
|
@ -62,8 +60,6 @@ vec4 sprite_transform2(vec3 root, vec4 off, mat3 sprite_rot, float sx, float sy)
|
||||||
float Q = pfog0 / transformed_pos.w;
|
float Q = pfog0 / transformed_pos.w;
|
||||||
transformed_pos.xyz *= Q;
|
transformed_pos.xyz *= Q;
|
||||||
transformed_pos.xyz += hvdf_offset.xyz;
|
transformed_pos.xyz += hvdf_offset.xyz;
|
||||||
// transformed_pos.w = max(transformed_pos.w, fog_max);
|
|
||||||
// transformed_pos.w = min(transformed_pos.w, fog_min);
|
|
||||||
|
|
||||||
return transformed_pos;
|
return transformed_pos;
|
||||||
}
|
}
|
||||||
|
@ -108,8 +104,7 @@ void main() {
|
||||||
|
|
||||||
transformed_pos_vf02.xyz *= Q;
|
transformed_pos_vf02.xyz *= Q;
|
||||||
vec4 offset_pos_vf10 = transformed_pos_vf02 + hvdf_offset;
|
vec4 offset_pos_vf10 = transformed_pos_vf02 + hvdf_offset;
|
||||||
offset_pos_vf10.w = max(offset_pos_vf10.w, fog_max);
|
|
||||||
offset_pos_vf10.w = min(offset_pos_vf10.w, fog_min);
|
|
||||||
/* transformed_pos_vf02.w = offset_pos_vf10.w - fog_max;
|
/* transformed_pos_vf02.w = offset_pos_vf10.w - fog_max;
|
||||||
int fge = matrix == 0;
|
int fge = matrix == 0;
|
||||||
if (transformed_pos_vf02.w != 0) {
|
if (transformed_pos_vf02.w != 0) {
|
||||||
|
@ -136,8 +131,6 @@ void main() {
|
||||||
|
|
||||||
transformed_pos_vf02.xyz *= Q;
|
transformed_pos_vf02.xyz *= Q;
|
||||||
vec4 offset_pos_vf10 = transformed_pos_vf02 + (matrix == 0 ? hud_hvdf_offset : hud_hvdf_user[matrix - 1]);
|
vec4 offset_pos_vf10 = transformed_pos_vf02 + (matrix == 0 ? hud_hvdf_offset : hud_hvdf_user[matrix - 1]);
|
||||||
offset_pos_vf10.w = max(offset_pos_vf10.w, fog_max);
|
|
||||||
offset_pos_vf10.w = min(offset_pos_vf10.w, fog_min);
|
|
||||||
|
|
||||||
scales_vf01.z = min(max(scales_vf01.z, min_scale), max_scale);
|
scales_vf01.z = min(max(scales_vf01.z, min_scale), max_scale);
|
||||||
scales_vf01.w = min(max(scales_vf01.w, min_scale), max_scale);
|
scales_vf01.w = min(max(scales_vf01.w, min_scale), max_scale);
|
||||||
|
|
|
@ -111,7 +111,9 @@ void TFragment::render(DmaFollower& dma,
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
settings.planes[i] = m_pc_port_data.planes[i];
|
settings.planes[i] = m_pc_port_data.planes[i];
|
||||||
|
render_state->camera_planes[i] = m_pc_port_data.planes[i];
|
||||||
}
|
}
|
||||||
|
render_state->has_camera_planes = true;
|
||||||
|
|
||||||
if (m_override_time_of_day) {
|
if (m_override_time_of_day) {
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
|
|
|
@ -429,7 +429,9 @@ void Tie3::render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfi
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
settings.planes[i] = m_pc_port_data.planes[i];
|
settings.planes[i] = m_pc_port_data.planes[i];
|
||||||
|
render_state->camera_planes[i] = m_pc_port_data.planes[i];
|
||||||
}
|
}
|
||||||
|
render_state->has_camera_planes = true;
|
||||||
|
|
||||||
if (false) {
|
if (false) {
|
||||||
// for (int i = 0; i < 8; i++) {
|
// for (int i = 0; i < 8; i++) {
|
||||||
|
|
|
@ -44,6 +44,7 @@ void interp_time_of_day_fast(const float weights[8],
|
||||||
void cull_check_all_slow(const math::Vector4f* planes,
|
void cull_check_all_slow(const math::Vector4f* planes,
|
||||||
const std::vector<tfrag3::VisNode>& nodes,
|
const std::vector<tfrag3::VisNode>& nodes,
|
||||||
u8* out);
|
u8* out);
|
||||||
|
bool sphere_in_view_ref(const math::Vector4f& sphere, const math::Vector4f* planes);
|
||||||
|
|
||||||
struct TfragPcPortData {
|
struct TfragPcPortData {
|
||||||
math::Vector4f planes[4];
|
math::Vector4f planes[4];
|
||||||
|
|
|
@ -889,6 +889,7 @@ void ultimate_memcpy(void* dst, void* src, uint32_t size) {
|
||||||
auto sym = find_symbol_from_c("ultimate-memcpy");
|
auto sym = find_symbol_from_c("ultimate-memcpy");
|
||||||
if (sym->value == 0) {
|
if (sym->value == 0) {
|
||||||
memmove(dst, src, size);
|
memmove(dst, src, size);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
gfunc_774.offset = sym->value;
|
gfunc_774.offset = sym->value;
|
||||||
}
|
}
|
||||||
|
|
3277
game/mips2c/functions/collide_cache.cpp
Normal file
3277
game/mips2c/functions/collide_cache.cpp
Normal file
File diff suppressed because it is too large
Load diff
191
game/mips2c/functions/collide_edge_grab.cpp
Normal file
191
game/mips2c/functions/collide_edge_grab.cpp
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
|
||||||
|
//--------------------------MIPS2C---------------------
|
||||||
|
#include "game/mips2c/mips2c_private.h"
|
||||||
|
#include "game/kernel/kscheme.h"
|
||||||
|
namespace Mips2C {
|
||||||
|
namespace method_16_collide_edge_work {
|
||||||
|
struct Cache {
|
||||||
|
void* format; // format
|
||||||
|
} cache;
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
|
u64 execute(void* ctxt) {
|
||||||
|
auto* c = (ExecutionContext*)ctxt;
|
||||||
|
bool bc = false;
|
||||||
|
u32 call_addr = 0;
|
||||||
|
bool cop1_bc = false;
|
||||||
|
c->daddiu(sp, sp, -32); // daddiu sp, sp, -32
|
||||||
|
c->sd(ra, 0, sp); // sd ra, 0(sp)
|
||||||
|
c->sd(fp, 8, sp); // sd fp, 8(sp)
|
||||||
|
c->mov64(fp, t9); // or fp, t9, r0
|
||||||
|
c->sq(gp, 16, sp); // sq gp, 16(sp)
|
||||||
|
c->mov64(gp, a0); // or gp, a0, r0
|
||||||
|
c->fprs[f0] = 0.707; // lwc1 f0, L95(fp)
|
||||||
|
c->addiu(v1, r0, 5); // addiu v1, r0, 5
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->addiu(a0, r0, 56); // addiu a0, r0, 56
|
||||||
|
c->lwu(t3, 0, gp); // lwu t3, 0(gp)
|
||||||
|
c->addiu(a1, r0, 0); // addiu a1, r0, 0
|
||||||
|
c->daddiu(a2, gp, 6272); // daddiu a2, gp, 6272
|
||||||
|
c->addiu(a3, r0, 16); // addiu a3, r0, 16
|
||||||
|
c->lwu(t0, 0, t3); // lwu t0, 0(t3)
|
||||||
|
c->gprs[t1].du64[0] = 0; // or t1, r0, r0
|
||||||
|
c->lq(t2, 96, gp); // lq t2, 96(gp)
|
||||||
|
c->daddiu(t3, t3, 4908); // daddiu t3, t3, 4908
|
||||||
|
c->lq(t4, 112, gp); // lq t4, 112(gp)
|
||||||
|
|
||||||
|
block_1:
|
||||||
|
bc = c->sgpr64(t0) == 0; // beq t0, r0, L30
|
||||||
|
c->lwu(t5, 48, t3); // lwu t5, 48(t3)
|
||||||
|
if (bc) {goto block_14;} // branch non-likely
|
||||||
|
|
||||||
|
c->daddiu(t0, t0, -1); // daddiu t0, t0, -1
|
||||||
|
c->lqc2(vf1, 0, t3); // lqc2 vf1, 0(t3)
|
||||||
|
c->and_(t6, t5, a0); // and t6, t5, a0
|
||||||
|
c->lqc2(vf2, 16, t3); // lqc2 vf2, 16(t3)
|
||||||
|
bc = c->sgpr64(t6) == c->sgpr64(a1); // beq t6, a1, L29
|
||||||
|
c->lqc2(vf3, 32, t3); // lqc2 vf3, 32(t3)
|
||||||
|
if (bc) {goto block_5;} // branch non-likely
|
||||||
|
|
||||||
|
if (((s64)c->sgpr64(t6)) != ((s64)c->sgpr64(a3))) {// bnel t6, a3, L28
|
||||||
|
c->daddiu(t3, t3, 64); // daddiu t3, t3, 64
|
||||||
|
goto block_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
block_5:
|
||||||
|
c->and_(t6, t5, v1); // and t6, t5, v1
|
||||||
|
c->vmini(DEST::xyzw, vf7, vf1, vf2); // vmini.xyzw vf7, vf1, vf2
|
||||||
|
bc = c->sgpr64(t6) != 0; // bne t6, r0, L28
|
||||||
|
c->vmax(DEST::xyzw, vf8, vf1, vf2); // vmax.xyzw vf8, vf1, vf2
|
||||||
|
if (bc) {goto block_1;} // branch non-likely
|
||||||
|
|
||||||
|
c->vsub(DEST::xyz, vf4, vf2, vf1); // vsub.xyz vf4, vf2, vf1
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vsub(DEST::xyz, vf5, vf3, vf1); // vsub.xyz vf5, vf3, vf1
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vmini(DEST::xyzw, vf7, vf7, vf3); // vmini.xyzw vf7, vf7, vf3
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vmax(DEST::xyzw, vf8, vf8, vf3); // vmax.xyzw vf8, vf8, vf3
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vopmula(vf4, vf5); // vopmula.xyz acc, vf4, vf5
|
||||||
|
// 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
|
||||||
|
c->vopmsub(vf6, vf5, vf4); // vopmsub.xyz vf6, vf5, vf4
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->mov128_gpr_vf(t7, vf7); // qmfc2.i t7, vf7
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->mov128_gpr_vf(t6, vf8); // qmfc2.i t6, vf8
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->pcgtw(t7, t7, t4); // pcgtw t7, t7, t4
|
||||||
|
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||||
|
c->vmul(DEST::xyzw, vf9, vf6, vf6); // vmul.xyzw vf9, vf6, vf6
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->pcgtw(t6, t2, t6); // pcgtw t6, t2, t6
|
||||||
|
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||||
|
c->por(t6, t7, t6); // por t6, t7, t6
|
||||||
|
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||||
|
c->ppach(t6, r0, t6); // ppach t6, r0, t6
|
||||||
|
c->mfc1(r0, f31); // mfc1 r0, f31
|
||||||
|
c->dsll(t6, t6, 16); // dsll t6, t6, 16
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
if (((s64)c->sgpr64(t6)) != ((s64)0)) { // bnel t6, r0, L28
|
||||||
|
c->daddiu(t3, t3, 64); // daddiu t3, t3, 64
|
||||||
|
goto block_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// block_8:
|
||||||
|
c->vmula_bc(DEST::w, BC::x, vf0, vf9); // vmulax.w acc, vf0, vf9
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vmadda_bc(DEST::w, BC::y, vf0, vf9); // vmadday.w acc, vf0, vf9
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vmadd_bc(DEST::w, BC::z, vf9, vf0, vf9); // vmaddz.w vf9, vf0, vf9
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vrsqrt(vf0, BC::w, vf9, BC::w); // vrsqrt Q, vf0.w, vf9.w
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->dsll32(t5, t5, 12); // dsll32 t5, t5, 12
|
||||||
|
c->dsrl32(t5, t5, 26); // dsrl32 t5, t5, 26
|
||||||
|
c->addiu(t6, r0, 2); // addiu t6, r0, 2
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vwaitq(); // vwaitq
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->vmulq(DEST::xyz, vf6, vf6); // vmulq.xyz vf6, vf6, Q
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->mov128_gpr_vf(t7, vf6); // qmfc2.i t7, vf6
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->dsra32(t7, t7, 0); // dsra32 t7, t7, 0
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->mtc1(f1, t7); // mtc1 f1, t7
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
cop1_bc = c->fprs[f1] < c->fprs[f0]; // c.lt.s f1, f0
|
||||||
|
c->addiu(t7, r0, 48); // addiu t7, r0, 48
|
||||||
|
if (cop1_bc) { // bc1tl L28
|
||||||
|
c->daddiu(t3, t3, 64); // daddiu t3, t3, 64
|
||||||
|
goto block_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// block_10:
|
||||||
|
if (((s64)c->sgpr64(t5)) == ((s64)c->sgpr64(t6))) {// beql t5, t6, L28
|
||||||
|
c->daddiu(t3, t3, 64); // daddiu t3, t3, 64
|
||||||
|
goto block_1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// block_12:
|
||||||
|
bc = c->sgpr64(t1) == c->sgpr64(t7); // beq t1, t7, L31
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
if (bc) {goto block_15;} // branch non-likely
|
||||||
|
|
||||||
|
c->daddiu(t1, t1, 1); // daddiu t1, t1, 1
|
||||||
|
c->sw(t3, 0, a2); // sw t3, 0(a2)
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
c->sqc2(vf6, 16, a2); // sqc2 vf6, 16(a2)
|
||||||
|
c->daddiu(a2, a2, 32); // daddiu a2, a2, 32
|
||||||
|
// nop // sll r0, r0, 0
|
||||||
|
//beq r0, r0, L28 // beq r0, r0, L28
|
||||||
|
c->daddiu(t3, t3, 64); // daddiu t3, t3, 64
|
||||||
|
goto block_1; // branch always
|
||||||
|
|
||||||
|
|
||||||
|
block_14:
|
||||||
|
//beq r0, r0, L32 // beq r0, r0, L32
|
||||||
|
c->sw(t1, 16, gp); // sw t1, 16(gp)
|
||||||
|
goto block_16; // branch always
|
||||||
|
|
||||||
|
|
||||||
|
block_15:
|
||||||
|
c->load_symbol(t9, cache.format); // lw t9, format(s7)
|
||||||
|
c->addiu(a0, r0, 0); // addiu a0, r0, 0
|
||||||
|
//daddiu a1, fp, L88 // daddiu a1, fp, L88
|
||||||
|
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
|
||||||
|
printf("ERROR: Exceeded max # of grabbable tris\n");
|
||||||
|
c->addiu(v1, r0, 48); // addiu v1, r0, 48
|
||||||
|
c->sw(v1, 16, gp); // sw v1, 16(gp)
|
||||||
|
|
||||||
|
block_16:
|
||||||
|
c->gprs[v0].du64[0] = 0; // or v0, r0, r0
|
||||||
|
c->ld(ra, 0, sp); // ld ra, 0(sp)
|
||||||
|
c->ld(fp, 8, sp); // ld fp, 8(sp)
|
||||||
|
c->lq(gp, 16, sp); // lq gp, 16(sp)
|
||||||
|
//jr ra // jr ra
|
||||||
|
c->daddiu(sp, sp, 32); // daddiu sp, sp, 32
|
||||||
|
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.format = intern_from_c("format").c();
|
||||||
|
gLinkedFunctionTable.reg("(method 16 collide-edge-work)", execute, 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace method_16_collide_edge_work
|
||||||
|
} // namespace Mips2C
|
||||||
|
|
|
@ -375,3 +375,513 @@ void link() {
|
||||||
} // namespace method_11_collide_mesh
|
} // namespace method_11_collide_mesh
|
||||||
} // namespace Mips2C
|
} // namespace Mips2C
|
||||||
|
|
||||||
|
//--------------------------MIPS2C---------------------
|
||||||
|
#include "game/mips2c/mips2c_private.h"
|
||||||
|
#include "game/kernel/kscheme.h"
|
||||||
|
namespace Mips2C {
|
||||||
|
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, L20
|
||||||
|
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, L20
|
||||||
|
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, L19
|
||||||
|
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, 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace method_14_collide_mesh
|
||||||
|
} // namespace Mips2C
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------MIPS2C---------------------
|
||||||
|
#include "game/mips2c/mips2c_private.h"
|
||||||
|
#include "game/kernel/kscheme.h"
|
||||||
|
namespace Mips2C {
|
||||||
|
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, L17
|
||||||
|
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, L17
|
||||||
|
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, L16
|
||||||
|
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, 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace method_15_collide_mesh
|
||||||
|
} // namespace Mips2C
|
||||||
|
|
|
@ -833,7 +833,7 @@ u64 execute(void* ctxt) {
|
||||||
|
|
||||||
block_40:
|
block_40:
|
||||||
// Unknown instr: vcallms 54
|
// Unknown instr: vcallms 54
|
||||||
fmt::print("vcallms54\n");
|
// fmt::print("vcallms54\n");
|
||||||
// nop | maddx.xyz vf19, vf04, vf00
|
// nop | maddx.xyz vf19, vf04, vf00
|
||||||
c->vmadd_bc(DEST::xyz, BC::w, vf19, vf4, vf0);
|
c->vmadd_bc(DEST::xyz, BC::w, vf19, vf4, vf0);
|
||||||
// nop | mulaw.xyzw ACC, vf20, vf00
|
// nop | mulaw.xyzw ACC, vf20, vf00
|
||||||
|
|
|
@ -759,6 +759,15 @@ struct ExecutionContext {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vabs(DEST mask, int dst, int src) {
|
||||||
|
auto s = vf_src(src);
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
if ((u64)mask & (1 << i)) {
|
||||||
|
vfs[dst].f[i] = std::abs(s.f[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void vrnext(DEST mask, int dst) {
|
void vrnext(DEST mask, int dst) {
|
||||||
gRng.advance();
|
gRng.advance();
|
||||||
float r = gRng.R;
|
float r = gRng.R;
|
||||||
|
@ -988,7 +997,7 @@ struct ExecutionContext {
|
||||||
void adds(int dst, int src0, int src1) { fprs[dst] = fprs[src0] + fprs[src1]; }
|
void adds(int dst, int src0, int src1) { fprs[dst] = fprs[src0] + fprs[src1]; }
|
||||||
void subs(int dst, int src0, int src1) { fprs[dst] = fprs[src0] - fprs[src1]; }
|
void subs(int dst, int src0, int src1) { fprs[dst] = fprs[src0] - fprs[src1]; }
|
||||||
void divs(int dst, int src0, int src1) {
|
void divs(int dst, int src0, int src1) {
|
||||||
assert(fprs[src1] != 0);
|
// assert(fprs[src1] != 0);
|
||||||
fprs[dst] = fprs[src0] / fprs[src1];
|
fprs[dst] = fprs[src0] / fprs[src1];
|
||||||
}
|
}
|
||||||
void negs(int dst, int src) {
|
void negs(int dst, int src) {
|
||||||
|
@ -998,6 +1007,8 @@ struct ExecutionContext {
|
||||||
memcpy(&fprs[dst], &v, 4);
|
memcpy(&fprs[dst], &v, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void movs(int dst, int src) { fprs[dst] = fprs[src]; }
|
||||||
|
|
||||||
void cvtws(int dst, int src) {
|
void cvtws(int dst, int src) {
|
||||||
// float to int
|
// float to int
|
||||||
s32 value = fprs[src];
|
s32 value = fprs[src];
|
||||||
|
|
|
@ -124,6 +124,73 @@ namespace collide_probe_instance_tie {
|
||||||
extern void link();
|
extern void link();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace method_26_collide_cache {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_32_collide_cache {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace pc_upload_collide_frag {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_28_collide_cache {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_27_collide_cache {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_29_collide_cache {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_12_collide_shape_prim_mesh {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_14_collide_shape_prim_mesh {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_13_collide_shape_prim_mesh {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_30_collide_cache {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_9_collide_cache_prim {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_10_collide_cache_prim {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_10_collide_puss_work {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_9_collide_puss_work {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
namespace method_15_collide_mesh {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_14_collide_mesh {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace method_16_collide_edge_work {
|
||||||
|
extern void link();
|
||||||
|
}
|
||||||
|
|
||||||
LinkedFunctionTable gLinkedFunctionTable;
|
LinkedFunctionTable gLinkedFunctionTable;
|
||||||
Rng gRng;
|
Rng gRng;
|
||||||
std::unordered_map<std::string, std::vector<void (*)()>> gMips2CLinkCallbacks = {
|
std::unordered_map<std::string, std::vector<void (*)()>> gMips2CLinkCallbacks = {
|
||||||
|
@ -143,7 +210,17 @@ std::unordered_map<std::string, std::vector<void (*)()>> gMips2CLinkCallbacks =
|
||||||
{"time-of-day", {time_of_day_interp_colors_scratch::link}},
|
{"time-of-day", {time_of_day_interp_colors_scratch::link}},
|
||||||
{"collide-func", {collide_do_primitives::link, moving_sphere_triangle_intersect::link}},
|
{"collide-func", {collide_do_primitives::link, moving_sphere_triangle_intersect::link}},
|
||||||
{"collide-probe", {collide_probe_node::link, collide_probe_instance_tie::link}},
|
{"collide-probe", {collide_probe_node::link, collide_probe_instance_tie::link}},
|
||||||
{"collide-mesh", {method_12_collide_mesh::link, method_11_collide_mesh::link}}};
|
{"collide-mesh",
|
||||||
|
{method_12_collide_mesh::link, method_11_collide_mesh::link, method_15_collide_mesh::link,
|
||||||
|
method_14_collide_mesh::link}},
|
||||||
|
{"collide-cache",
|
||||||
|
{method_26_collide_cache::link, method_32_collide_cache::link, pc_upload_collide_frag::link,
|
||||||
|
method_28_collide_cache::link, method_27_collide_cache::link, method_29_collide_cache::link,
|
||||||
|
method_12_collide_shape_prim_mesh::link, method_14_collide_shape_prim_mesh::link,
|
||||||
|
method_13_collide_shape_prim_mesh::link, method_30_collide_cache::link,
|
||||||
|
method_9_collide_cache_prim::link, method_10_collide_cache_prim::link,
|
||||||
|
method_10_collide_puss_work::link, method_9_collide_puss_work::link}},
|
||||||
|
{"collide-edge-grab", {method_16_collide_edge_work::link}}};
|
||||||
|
|
||||||
void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) {
|
void LinkedFunctionTable::reg(const std::string& name, u64 (*exec)(void*), u32 stack_size) {
|
||||||
const auto& it = m_executes.insert({name, {exec, Ptr<u8>()}});
|
const auto& it = m_executes.insert({name, {exec, Ptr<u8>()}});
|
||||||
|
|
|
@ -85,6 +85,12 @@ void* RPC_Loader(unsigned int /*fno*/, void* data, int size) {
|
||||||
printf("IOP language: %s\n", gLanguage); // added.
|
printf("IOP language: %s\n", gLanguage); // added.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SoundCommand::LOAD_MUSIC:
|
||||||
|
printf("ignoring load music\n");
|
||||||
|
break;
|
||||||
|
case SoundCommand::UNLOAD_MUSIC:
|
||||||
|
printf("ignoring unload music\n");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
printf("Unhandled RPC Loader command %d\n", (int)cmd->command);
|
printf("Unhandled RPC Loader command %d\n", (int)cmd->command);
|
||||||
assert(false);
|
assert(false);
|
||||||
|
|
|
@ -50,3 +50,14 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(define-extern cam-debug-add-los-tri (function (inline-array collide-cache-tri) vector vector none))
|
||||||
|
(defun cam-debug-add-los-tri ((a (inline-array collide-cache-tri)) (b vector) (c vector))
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
(defun cam-collision-record-save ((a vector) (b vector) (c int) (d symbol) (e camera-slave))
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
(define-extern slave-los-state->string (function slave-los-state string))
|
||||||
|
(define-extern cam-debug-reset-coll-tri (function none)) ;; not confirmed
|
|
@ -1962,7 +1962,10 @@
|
||||||
(when *debug-segment*
|
(when *debug-segment*
|
||||||
(let ((a1-22 (new 'stack-no-clear 'vector)))
|
(let ((a1-22 (new 'stack-no-clear 'vector)))
|
||||||
(vector-! a1-22 (-> self good-point) (-> self string-trans))
|
(vector-! a1-22 (-> self good-point) (-> self string-trans))
|
||||||
(cam-collision-record-save (-> self string-trans) a1-22 -3 'jump self)
|
(when (nonzero? cam-collision-record-save)
|
||||||
|
;; HACK
|
||||||
|
(cam-collision-record-save (-> self string-trans) a1-22 -3 'jump self)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(set! (-> self desired-pos quad) (-> self good-point quad))
|
(set! (-> self desired-pos quad) (-> self good-point quad))
|
||||||
|
@ -2697,7 +2700,9 @@
|
||||||
|
|
||||||
(defbehavior cam-string-code camera-slave ()
|
(defbehavior cam-string-code camera-slave ()
|
||||||
(if *debug-segment*
|
(if *debug-segment*
|
||||||
(cam-debug-reset-coll-tri)
|
(when (nonzero? cam-debug-reset-coll-tri) ;; hack
|
||||||
|
(cam-debug-reset-coll-tri)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
(cam-string-follow)
|
(cam-string-follow)
|
||||||
(if (logtest? (-> self options) 512)
|
(if (logtest? (-> self options) 512)
|
||||||
|
|
|
@ -156,7 +156,7 @@
|
||||||
(print-nth-point (_type_ int) none 11)
|
(print-nth-point (_type_ int) none 11)
|
||||||
(TODO-RENAME-12 (_type_) none 12)
|
(TODO-RENAME-12 (_type_) none 12)
|
||||||
(TODO-RENAME-13 (_type_ int) none 13)
|
(TODO-RENAME-13 (_type_ int) none 13)
|
||||||
(TODO-RENAME-14 (_type_ vector) none 14)
|
(TODO-RENAME-14 (_type_ tracking-spline-sampler) none 14)
|
||||||
(TODO-RENAME-15 (_type_) none 15)
|
(TODO-RENAME-15 (_type_) none 15)
|
||||||
(TODO-RENAME-16 (_type_ float) none 16)
|
(TODO-RENAME-16 (_type_ float) none 16)
|
||||||
(TODO-RENAME-17 (_type_ vector float float symbol) int 17)
|
(TODO-RENAME-17 (_type_ vector float float symbol) int 17)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -10,11 +10,6 @@
|
||||||
(define-extern collide-cache-using-box-test (function vector symbol))
|
(define-extern collide-cache-using-box-test (function vector symbol))
|
||||||
|
|
||||||
|
|
||||||
;; The collide cache system tries to make collision queries faster by caching intermediate results.
|
|
||||||
;; Almost all collision operations are done by calling a method of the global *collide-cache*.
|
|
||||||
;; In cases where the collide cache does not have the data in its cache, it will fill itself
|
|
||||||
;; using the appropriate collision functions.
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Collide Helpers
|
;; Collide Helpers
|
||||||
|
@ -55,8 +50,8 @@
|
||||||
:size-assert #xc60
|
:size-assert #xc60
|
||||||
:flag-assert #xb00000c60
|
:flag-assert #xb00000c60
|
||||||
(:methods
|
(:methods
|
||||||
(dummy-9 () none 9)
|
(dummy-9 (_type_ object object) symbol 9)
|
||||||
(dummy-10 () none 10)
|
(dummy-10 (_type_ object object) symbol 10)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -81,10 +76,11 @@
|
||||||
;; This is a common return type of collision queries.
|
;; This is a common return type of collision queries.
|
||||||
(deftype collide-cache-tri (structure)
|
(deftype collide-cache-tri (structure)
|
||||||
((vertex vector 3 :inline :offset-assert 0) ;; actual locations
|
((vertex vector 3 :inline :offset-assert 0) ;; actual locations
|
||||||
(pat pat-surface :offset-assert 48) ;; metadata about the surface of this tri
|
(extra-quad uint128 :offset 48)
|
||||||
(prim-index uint16 :offset-assert 52) ;; in the collide-cache-prim list
|
(pat pat-surface :offset 48) ;; metadata about the surface of this tri
|
||||||
(user16 uint16 :offset-assert 54)
|
(prim-index uint16 :offset 52) ;; in the collide-cache-prim list
|
||||||
(user32 uint32 2 :offset-assert 56)
|
(user16 uint16 :offset 54)
|
||||||
|
(user32 uint32 2 :offset 56)
|
||||||
)
|
)
|
||||||
:method-count-assert 9
|
:method-count-assert 9
|
||||||
:size-assert #x40
|
:size-assert #x40
|
||||||
|
@ -94,18 +90,18 @@
|
||||||
;; The primitives stored in the cache.
|
;; The primitives stored in the cache.
|
||||||
;; The "core" is extracted from the normal collide-shape-prim and placed inline here.
|
;; The "core" is extracted from the normal collide-shape-prim and placed inline here.
|
||||||
(deftype collide-cache-prim (structure)
|
(deftype collide-cache-prim (structure)
|
||||||
((prim-core collide-prim-core :inline :offset-assert 0)
|
((prim-core collide-prim-core :inline :offset-assert 0)
|
||||||
(ccache collide-cache :offset-assert 32)
|
(extra-quad uint128 :offset-assert 32)
|
||||||
(prim collide-shape-prim :offset-assert 36)
|
(ccache collide-cache :offset 32)
|
||||||
(first-tri uint16 :offset-assert 40)
|
(prim collide-shape-prim :offset 36)
|
||||||
(num-tris uint16 :offset-assert 42)
|
(first-tri uint16 :offset 40)
|
||||||
(unused uint8 4 :offset-assert 44)
|
(num-tris uint16 :offset 42)
|
||||||
(world-sphere vector :inline :offset 0)
|
(unused uint8 4 :offset 44)
|
||||||
;; overlays of the core
|
(world-sphere vector :inline :offset 0)
|
||||||
(collide-as collide-kind :offset 16)
|
(collide-as collide-kind :offset 16)
|
||||||
(action collide-action :offset 24)
|
(action collide-action :offset 24)
|
||||||
(offense collide-offense :offset 28)
|
(offense collide-offense :offset 28)
|
||||||
(prim-type int8 :offset 29)
|
(prim-type int8 :offset 29)
|
||||||
)
|
)
|
||||||
:method-count-assert 11
|
:method-count-assert 11
|
||||||
:size-assert #x30
|
:size-assert #x30
|
||||||
|
@ -136,7 +132,7 @@
|
||||||
(:methods
|
(:methods
|
||||||
(debug-draw (_type_) none 9)
|
(debug-draw (_type_) none 9)
|
||||||
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result int) float 10)
|
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result int) float 10)
|
||||||
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) none 11)
|
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) symbol 11)
|
||||||
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process collide-tri-result uint) float 12)
|
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process collide-tri-result uint) float 12)
|
||||||
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
|
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
|
||||||
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable int) none 14)
|
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable int) none 14)
|
||||||
|
@ -144,20 +140,20 @@
|
||||||
(fill-using-y-probe (_type_ vector float collide-kind process-drawable uint) none 16)
|
(fill-using-y-probe (_type_ vector float collide-kind process-drawable uint) none 16)
|
||||||
(initialize (_type_) none 17)
|
(initialize (_type_) none 17)
|
||||||
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result int) float 18)
|
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result int) float 18)
|
||||||
(probe-using-spheres (_type_) none 19)
|
(probe-using-spheres (_type_ collide-using-spheres-params) symbol 19)
|
||||||
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result uint) float 20)
|
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result uint) float 20)
|
||||||
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache none)) none 21) ;; second functiom is method 28
|
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache object none)) none 21) ;; second functiom is method 28
|
||||||
(fill-from-foreground-using-spheres (_type_) none 22)
|
(fill-from-foreground-using-box (_type_) none 22)
|
||||||
(fill-from-foreground-using-line-sphere (_type_) none 23)
|
(fill-from-foreground-using-line-sphere (_type_) none 23)
|
||||||
(fill-from-foreground-using-y-probe (_type_) none 24)
|
(fill-from-foreground-using-y-probe (_type_) none 24)
|
||||||
(fill-from-water (_type_ water-control) none 25) ;; or whatever is from 152 in the process passed to 16
|
(fill-from-water (_type_ water-control) none 25) ;; or whatever is from 152 in the process passed to 16
|
||||||
(dummy-26 (_type_) none 26)
|
(load-mesh-from-spad-in-box (_type_ collide-frag-mesh) none 26)
|
||||||
(dummy-27 (_type_) none 27)
|
(dummy-27 (_type_) none 27)
|
||||||
(dummy-28 (_type_) none 28)
|
(dummy-28 (_type_) none 28)
|
||||||
(dummy-29 (_type_ collide-frag-mesh) none 29)
|
(dummy-29 (_type_ collide-frag-mesh) none 29)
|
||||||
(dummy-30 (_type_) none 30)
|
(puyp-mesh (_type_ collide-puyp-work collide-cache-prim) none 30)
|
||||||
(dummy-31 (_type_ collide-puyp-work collide-cache-prim) vector 31)
|
(puyp-sphere (_type_ collide-puyp-work collide-cache-prim) vector 31)
|
||||||
(dummy-32 (_type_) none 32)
|
(unpack-background-collide-mesh (_type_ object object object) none 32) ;; helper for fill from background.
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -83,7 +83,7 @@
|
||||||
:flag-assert #xb00000810
|
:flag-assert #xb00000810
|
||||||
(:methods
|
(:methods
|
||||||
(debug-draw (_type_) object 9)
|
(debug-draw (_type_) object 9)
|
||||||
(dummy-10 () none 10)
|
(dummy-10 (_type_ collide-edge-hold-item) none 10)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -125,12 +125,12 @@
|
||||||
(debug-draw-edges (_type_) object 10)
|
(debug-draw-edges (_type_) object 10)
|
||||||
(dummy-11 (_type_) none 11)
|
(dummy-11 (_type_) none 11)
|
||||||
(debug-draw-sphere (_type_) symbol 12)
|
(debug-draw-sphere (_type_) symbol 12)
|
||||||
(dummy-13 (_type_) none 13)
|
(dummy-13 (_type_ collide-edge-hold-item vector) none 13)
|
||||||
(dummy-14 (_type_ vector vector int) float 14)
|
(dummy-14 (_type_ vector vector int) float 14)
|
||||||
(dummy-15 (_type_) none 15)
|
(dummy-15 (_type_) none 15)
|
||||||
(dummy-16 (_type_) none 16)
|
(find-grabbable-tris! (_type_) none 16)
|
||||||
(dummy-17 (_type_) none 17)
|
(dummy-17 (_type_) none 17)
|
||||||
(dummy-18 (_type_) none 18)
|
(dummy-18 (_type_ collide-edge-hold-list edge-grab-info) none 18)
|
||||||
(dummy-19 (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
|
(dummy-19 (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -85,4 +85,10 @@
|
||||||
)
|
)
|
||||||
(set! (-> v1-2 touch-hook) nothing)
|
(set! (-> v1-2 touch-hook) nothing)
|
||||||
(set! (-> v1-2 active-hook) nothing)
|
(set! (-> v1-2 active-hook) nothing)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(defmethod find-edge-grabs! target ((obj target) (arg0 collide-cache))
|
||||||
|
(format *stdcon* "no edge grabs for you!~%")
|
||||||
|
(the object 0)
|
||||||
)
|
)
|
|
@ -105,4 +105,293 @@
|
||||||
:flag-assert #x900000030
|
:flag-assert #x900000030
|
||||||
)
|
)
|
||||||
|
|
||||||
(defmethod-mips2c "(method 11 collide-mesh)" 11 collide-mesh)
|
(defmethod-mips2c "(method 11 collide-mesh)" 11 collide-mesh)
|
||||||
|
|
||||||
|
(defmethod-mips2c "(method 14 collide-mesh)" 11 collide-mesh)
|
||||||
|
(defmethod-mips2c "(method 15 collide-mesh)" 11 collide-mesh)
|
||||||
|
|
||||||
|
(defmethod allocate! collide-mesh-cache ((obj collide-mesh-cache) (arg0 int))
|
||||||
|
(local-vars (a1-2 int) (a2-2 int))
|
||||||
|
(let* ((v1-0 (+ arg0 15))
|
||||||
|
(a1-1 (-> obj used-size))
|
||||||
|
(v1-1 (/ v1-0 16))
|
||||||
|
(a3-0 (-> obj data))
|
||||||
|
(a2-0 (-> obj max-size))
|
||||||
|
(v1-2 (* v1-1 16))
|
||||||
|
(a3-1 (&+ a3-0 a1-1))
|
||||||
|
)
|
||||||
|
(let ((t1-0 (- a2-0 (the-as uint v1-2)))
|
||||||
|
(t0-0 (-> obj id))
|
||||||
|
)
|
||||||
|
(b! (< (the-as int t1-0) 0) cfg-6 :delay (set! a1-2 (the-as int (+ a1-1 v1-2))))
|
||||||
|
(b! (>= (the-as int (- a2-0 (the-as uint a1-2))) 0) cfg-5 :delay (set! a2-2 (the-as int (+ t0-0 1))))
|
||||||
|
)
|
||||||
|
(b! (zero? (the-as uint a2-2)) cfg-4 :likely-delay (set! a2-2 1))
|
||||||
|
(label cfg-4)
|
||||||
|
(set! a1-2 v1-2)
|
||||||
|
(set! a3-1 (-> obj data))
|
||||||
|
(set! (-> obj id) (the-as uint a2-2))
|
||||||
|
(label cfg-5)
|
||||||
|
(set! (-> obj used-size) (the-as uint a1-2))
|
||||||
|
(let ((v0-0 a3-1))
|
||||||
|
(b! #t cfg-7 :delay (nop!))
|
||||||
|
(label cfg-6)
|
||||||
|
(format 0 "ERROR: Attempted to allocate something bigger than the entire mesh cache!~%")
|
||||||
|
(set! v0-0 (the-as (pointer uint8) #f))
|
||||||
|
(label cfg-7)
|
||||||
|
(the-as int v0-0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defmethod populate-cache! collide-mesh ((obj collide-mesh) (arg0 collide-mesh-cache-tri) (arg1 matrix))
|
||||||
|
(local-vars (t0-2 uint))
|
||||||
|
(rlet ((acc :class vf)
|
||||||
|
(Q :class vf)
|
||||||
|
(vf0 :class vf)
|
||||||
|
(vf1 :class vf)
|
||||||
|
(vf10 :class vf)
|
||||||
|
(vf11 :class vf)
|
||||||
|
(vf12 :class vf)
|
||||||
|
(vf2 :class vf)
|
||||||
|
(vf3 :class vf)
|
||||||
|
(vf4 :class vf)
|
||||||
|
(vf5 :class vf)
|
||||||
|
(vf6 :class vf)
|
||||||
|
(vf7 :class vf)
|
||||||
|
(vf8 :class vf)
|
||||||
|
(vf9 :class vf)
|
||||||
|
)
|
||||||
|
(init-vf0-vector)
|
||||||
|
(nop!)
|
||||||
|
(let ((t0-0 (scratchpad-object int))
|
||||||
|
(v1-0 (-> obj num-verts))
|
||||||
|
)
|
||||||
|
(nop!)
|
||||||
|
(let ((a3-0 (-> obj vertex-data)))
|
||||||
|
(b! (zero? v1-0) cfg-3 :delay (.lvf vf1 (&-> arg1 vector 0 quad)))
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf2 (&-> arg1 vector 1 quad))
|
||||||
|
(let ((t0-1 (+ t0-0 -64)))
|
||||||
|
(.lvf vf3 (&-> arg1 vector 2 quad))
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf4 (&-> arg1 vector 3 quad))
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf5 (&-> a3-0 0 quad))
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf6 (&-> a3-0 1 quad))
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf7 (&-> a3-0 2 quad))
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf8 (&-> a3-0 3 quad))
|
||||||
|
(label cfg-2)
|
||||||
|
(.mul.w.vf acc vf4 vf0)
|
||||||
|
(set! a3-0 (the-as (inline-array vector) (-> a3-0 4)))
|
||||||
|
(.add.mul.x.vf acc vf1 vf5 acc)
|
||||||
|
(+! t0-1 64)
|
||||||
|
(.add.mul.y.vf acc vf2 vf5 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.z.vf vf9 vf3 vf5 acc)
|
||||||
|
(nop!)
|
||||||
|
(.mul.w.vf acc vf4 vf0)
|
||||||
|
(.lvf vf5 (&-> a3-0 0 quad))
|
||||||
|
(.add.mul.x.vf acc vf1 vf6 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.y.vf acc vf2 vf6 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.z.vf vf10 vf3 vf6 acc)
|
||||||
|
(nop!)
|
||||||
|
(.mul.w.vf acc vf4 vf0)
|
||||||
|
(.lvf vf6 (&-> a3-0 1 quad))
|
||||||
|
(.add.mul.x.vf acc vf1 vf7 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.y.vf acc vf2 vf7 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.z.vf vf11 vf3 vf7 acc)
|
||||||
|
(nop!)
|
||||||
|
(.mul.w.vf acc vf4 vf0)
|
||||||
|
(.lvf vf7 (&-> a3-0 2 quad))
|
||||||
|
(.add.mul.x.vf acc vf1 vf8 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.y.vf acc vf2 vf8 acc)
|
||||||
|
(nop!)
|
||||||
|
(.add.mul.z.vf vf12 vf3 vf8 acc)
|
||||||
|
(nop!)
|
||||||
|
(nop!)
|
||||||
|
(.lvf vf8 (&-> a3-0 3 quad))
|
||||||
|
(+! v1-0 -4)
|
||||||
|
(.svf t0-1 vf9)
|
||||||
|
(nop!)
|
||||||
|
(.svf (+ t0-1 16) vf10)
|
||||||
|
(nop!)
|
||||||
|
(.svf (+ t0-1 32) vf11)
|
||||||
|
(b! (> (the-as int v1-0) 0) cfg-2 :delay (.svf (+ t0-1 48) vf12))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(label cfg-3)
|
||||||
|
(let ((v1-1 (the-as collide-mesh-tri (-> obj tris))))
|
||||||
|
(nop!)
|
||||||
|
(let ((a2-1 (scratchpad-object int))
|
||||||
|
(a0-1 (-> obj num-tris))
|
||||||
|
)
|
||||||
|
(b! (zero? a0-1) cfg-6 :delay (set! t0-2 (-> v1-1 vertex-index 0)))
|
||||||
|
(let* ((a1-1 (&+ arg0 -96))
|
||||||
|
(a3-1 (-> v1-1 vertex-index 1))
|
||||||
|
(t0-3 (* t0-2 16))
|
||||||
|
(t2-0 (-> v1-1 vertex-index 2))
|
||||||
|
(t1-0 (* a3-1 16))
|
||||||
|
(a3-2 (-> v1-1 pat))
|
||||||
|
)
|
||||||
|
(let* ((t2-1 (* t2-0 16))
|
||||||
|
(t0-4 (+ t0-3 a2-1))
|
||||||
|
(t1-1 (+ t1-0 a2-1))
|
||||||
|
(t2-2 (+ t2-1 a2-1))
|
||||||
|
)
|
||||||
|
(label cfg-5)
|
||||||
|
(+! a0-1 -1)
|
||||||
|
(.lvf vf1 t0-4)
|
||||||
|
(&+! v1-1 8)
|
||||||
|
(.lvf vf2 t1-1)
|
||||||
|
(&+! a1-1 96)
|
||||||
|
(.lvf vf3 t2-2)
|
||||||
|
(.sub.vf vf4 vf2 vf1)
|
||||||
|
(.svf (&-> a1-1 vertex 0 quad) vf1)
|
||||||
|
(.min.vf vf8 vf1 vf2)
|
||||||
|
(.svf (&-> a1-1 vertex 1 quad) vf2)
|
||||||
|
(.sub.vf vf5 vf3 vf1)
|
||||||
|
(.svf (&-> a1-1 vertex 2 quad) vf3)
|
||||||
|
(.max.vf vf9 vf1 vf2)
|
||||||
|
(let ((t1-2 (-> v1-1 vertex-index 0)))
|
||||||
|
(.outer.product.a.vf acc vf4 vf5)
|
||||||
|
(let ((t2-3 (-> v1-1 vertex-index 1)))
|
||||||
|
(.outer.product.b.vf vf6 vf5 vf4 acc)
|
||||||
|
(let ((t0-5 (-> v1-1 vertex-index 2)))
|
||||||
|
(.mul.vf vf7 vf6 vf6)
|
||||||
|
(nop!)
|
||||||
|
(.min.vf vf8 vf8 vf3)
|
||||||
|
(let ((t1-3 (* t1-2 16)))
|
||||||
|
(.max.vf vf9 vf9 vf3)
|
||||||
|
(let ((t2-4 (* t2-3 16)))
|
||||||
|
(.mul.x.vf acc vf0 vf7 :mask #b1000)
|
||||||
|
(let ((t3-0 (* t0-5 16)))
|
||||||
|
(.add.mul.y.vf acc vf0 vf7 acc :mask #b1000)
|
||||||
|
(set! t0-4 (+ t1-3 a2-1))
|
||||||
|
(.add.mul.z.vf vf7 vf0 vf7 acc :mask #b1000)
|
||||||
|
(set! t1-1 (+ t2-4 a2-1))
|
||||||
|
(.isqrt.vf Q vf0 vf7 :fsf #b11 :ftf #b11)
|
||||||
|
(set! t2-2 (+ t3-0 a2-1))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(.ftoi.vf vf8 vf8)
|
||||||
|
(nop!)
|
||||||
|
(.ftoi.vf vf9 vf9)
|
||||||
|
(nop!)
|
||||||
|
(nop!)
|
||||||
|
(.svf (&-> a1-1 bbox4w min quad) vf8)
|
||||||
|
(.wait.vf)
|
||||||
|
(.svf (&-> a1-1 bbox4w max quad) vf9)
|
||||||
|
(.mul.vf vf6 vf6 Q :mask #b111)
|
||||||
|
(nop!)
|
||||||
|
(nop!)
|
||||||
|
(.svf (&-> a1-1 normal quad) vf6)
|
||||||
|
(nop!)
|
||||||
|
(set! (-> a1-1 normal w) (the-as float a3-2))
|
||||||
|
(b! (nonzero? a0-1) cfg-5 :delay (set! a3-2 (-> v1-1 pat)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(label cfg-6)
|
||||||
|
0
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(defmethod overlap-test collide-mesh ((obj collide-mesh) (arg0 collide-mesh-cache-tri) (arg1 vector))
|
||||||
|
(local-vars
|
||||||
|
(zero uint128)
|
||||||
|
(v1-0 uint128)
|
||||||
|
(a0-1 uint128)
|
||||||
|
(a1-2 uint128)
|
||||||
|
(a1-3 uint128)
|
||||||
|
(a1-4 uint128)
|
||||||
|
(a1-7 uint)
|
||||||
|
(a2-1 uint128)
|
||||||
|
(a2-2 uint128)
|
||||||
|
)
|
||||||
|
(rlet ((acc :class vf)
|
||||||
|
(vf0 :class vf)
|
||||||
|
(vf1 :class vf)
|
||||||
|
(vf2 :class vf)
|
||||||
|
(vf3 :class vf)
|
||||||
|
(vf4 :class vf)
|
||||||
|
(vf5 :class vf)
|
||||||
|
(vf6 :class vf)
|
||||||
|
)
|
||||||
|
(init-vf0-vector)
|
||||||
|
(set! zero (the-as uint128 0))
|
||||||
|
(let ((s5-0 (new 'stack-no-clear 'matrix))
|
||||||
|
(s4-0 arg0)
|
||||||
|
)
|
||||||
|
(.lvf vf2 (&-> arg1 quad))
|
||||||
|
(let ((s3-0 (-> obj num-tris)))
|
||||||
|
(.sub.w.vf vf5 vf2 vf2)
|
||||||
|
(.add.w.vf vf6 vf2 vf2)
|
||||||
|
(.ftoi.vf vf5 vf5)
|
||||||
|
(.ftoi.vf vf6 vf6)
|
||||||
|
(.mov v1-0 vf5)
|
||||||
|
(.svf (&-> s5-0 vector 1 quad) vf5)
|
||||||
|
(.mov a0-1 vf6)
|
||||||
|
(.svf (&-> s5-0 vector 2 quad) vf6)
|
||||||
|
(label cfg-1)
|
||||||
|
(b! (zero? s3-0) cfg-7 :delay (set! a2-1 (-> s4-0 bbox4w min quad)))
|
||||||
|
(+! s3-0 -1)
|
||||||
|
)
|
||||||
|
(let ((a1-1 (-> s4-0 bbox4w max quad)))
|
||||||
|
(.pcgtw a2-2 a2-1 a0-1)
|
||||||
|
(.pcgtw a1-2 v1-0 a1-1)
|
||||||
|
)
|
||||||
|
(.por a1-3 a2-2 a1-2)
|
||||||
|
(nop!)
|
||||||
|
(.ppach a1-4 zero a1-3)
|
||||||
|
(let ((a1-5 (shl (the-as int a1-4) 16)))
|
||||||
|
(nop!)
|
||||||
|
(b! (nonzero? a1-5) cfg-1 :likely-delay (set! s4-0 (&+ s4-0 96)))
|
||||||
|
)
|
||||||
|
(closest-pt-in-triangle
|
||||||
|
(the-as vector (-> s5-0 vector))
|
||||||
|
arg1
|
||||||
|
(the-as matrix (-> s4-0 vertex))
|
||||||
|
(-> s4-0 normal)
|
||||||
|
)
|
||||||
|
(.lvf vf1 (&-> s5-0 vector 0 quad))
|
||||||
|
(.lvf vf2 (&-> arg1 quad))
|
||||||
|
(set! v1-0 (-> s5-0 vector 1 quad))
|
||||||
|
(set! a0-1 (-> s5-0 vector 2 quad))
|
||||||
|
(.sub.vf vf3 vf2 vf1)
|
||||||
|
(.mul.w.vf vf4 vf2 vf2 :mask #b1000)
|
||||||
|
(.mul.vf vf3 vf3 vf3)
|
||||||
|
(.mul.x.vf acc vf0 vf3 :mask #b1000)
|
||||||
|
(.add.mul.y.vf acc vf0 vf3 acc :mask #b1000)
|
||||||
|
(.add.mul.z.vf vf3 vf0 vf3 acc :mask #b1000)
|
||||||
|
(.sub.w.vf vf3 vf3 vf4 :mask #b1000)
|
||||||
|
(.add.w.vf vf3 vf0 vf3 :mask #b10)
|
||||||
|
(.mov a1-7 vf3)
|
||||||
|
(b! (>= (the-as int a1-7) 0) cfg-1 :delay (set! s4-0 (&+ s4-0 96)))
|
||||||
|
)
|
||||||
|
(let ((v0-1 #t))
|
||||||
|
(b! #t cfg-8 :delay (nop!))
|
||||||
|
(the-as none 0)
|
||||||
|
(label cfg-7)
|
||||||
|
(set! v0-1 #f)
|
||||||
|
(label cfg-8)
|
||||||
|
v0-1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
|
@ -11,3 +11,389 @@
|
||||||
|
|
||||||
;; TODO - for collide-reaction-racer
|
;; TODO - for collide-reaction-racer
|
||||||
(define-extern collide-shape-moving-angle-set! (function collide-shape-moving vector vector none)) ;; not confirmed
|
(define-extern collide-shape-moving-angle-set! (function collide-shape-moving vector vector none)) ;; not confirmed
|
||||||
|
|
||||||
|
(defun collide-shape-moving-angle-set! ((arg0 collide-shape-moving) (arg1 vector) (arg2 vector))
|
||||||
|
(set! (-> arg0 surface-normal quad) (-> arg1 quad))
|
||||||
|
(set! (-> arg0 surface-angle) (vector-dot arg1 (-> arg0 dynam gravity-normal)))
|
||||||
|
(set! (-> arg0 poly-angle) (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal)))
|
||||||
|
(set! (-> arg0 touch-angle)
|
||||||
|
(fmax
|
||||||
|
(-> arg0 touch-angle)
|
||||||
|
(vector-dot arg1 (vector-normalize! (vector-negate! (new-stack-vector0) arg2) 1.0))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
0
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun target-collision-low-coverage ((arg0 control-info)
|
||||||
|
(arg1 collide-shape-intersect)
|
||||||
|
(arg2 vector)
|
||||||
|
(arg3 (pointer uint32))
|
||||||
|
(arg4 (pointer uint64))
|
||||||
|
(arg5 (pointer symbol))
|
||||||
|
)
|
||||||
|
(local-vars
|
||||||
|
(sv-16 vector)
|
||||||
|
(sv-20 (pointer uint32))
|
||||||
|
(sv-24 (pointer uint64))
|
||||||
|
(sv-28 (pointer symbol))
|
||||||
|
(sv-32 uint)
|
||||||
|
(sv-40 uint)
|
||||||
|
(sv-48 symbol)
|
||||||
|
(sv-52 vector)
|
||||||
|
(sv-56 vector)
|
||||||
|
(sv-160 vector)
|
||||||
|
(sv-164 collide-tri-result)
|
||||||
|
(sv-208 vector)
|
||||||
|
(sv-212 vector)
|
||||||
|
(sv-272 vector)
|
||||||
|
(sv-276 vector)
|
||||||
|
)
|
||||||
|
(set! sv-16 arg2)
|
||||||
|
(set! sv-20 arg3)
|
||||||
|
(set! sv-24 arg4)
|
||||||
|
(set! sv-28 arg5)
|
||||||
|
(set! sv-32 (-> arg3 0))
|
||||||
|
(set! sv-40 (-> arg4 0))
|
||||||
|
(set! sv-48 (-> arg5 0))
|
||||||
|
(set! sv-52 (-> arg0 unknown-vector60))
|
||||||
|
(set! sv-56 (vector-cross! (-> arg0 unknown-vector-coverage-2) (-> arg0 poly-normal) sv-16))
|
||||||
|
(vector-normalize! sv-56 1.0)
|
||||||
|
(if (>= (fabs (vector-dot (-> arg0 dynam gravity-normal) sv-56)) 0.866)
|
||||||
|
(set! sv-32 (logior sv-32 512))
|
||||||
|
)
|
||||||
|
(vector-cross! sv-52 sv-16 sv-56)
|
||||||
|
(if (< 0.0 (vector-dot (-> arg0 dynam gravity-normal) sv-52))
|
||||||
|
(vector-negate! sv-52 sv-52)
|
||||||
|
)
|
||||||
|
(vector-normalize! sv-52 1.0)
|
||||||
|
(set! sv-160 (vector-flatten! (-> arg0 unknown-vector-coverage-3) sv-52 (-> arg0 dynam gravity-normal)))
|
||||||
|
(set! sv-164 (new 'stack 'collide-tri-result))
|
||||||
|
(vector-normalize! sv-160 1.0)
|
||||||
|
(if (< (vector-dot sv-160 sv-16) 0.0)
|
||||||
|
(vector-negate! sv-160 sv-160)
|
||||||
|
)
|
||||||
|
(set! (-> arg0 unknown-float-coverage-0) 4095996000.0)
|
||||||
|
(set! (-> arg0 unknown-float-coverage-2) 4095996000.0)
|
||||||
|
(set! sv-208 (vector+float*! (new 'stack-no-clear 'vector) (-> arg1 best-tri intersect) sv-160 2867.2))
|
||||||
|
(set! sv-212 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 dynam gravity-normal) -20480.0))
|
||||||
|
(vector+float*! sv-212 sv-212 sv-160 4096.0)
|
||||||
|
(when (>= (probe-using-line-sphere *collide-cache* sv-208 sv-212 409.6 (-> arg1 best-from-prim collide-with) sv-164 1)
|
||||||
|
0.0
|
||||||
|
)
|
||||||
|
(set! (-> arg0 unknown-float-coverage-0)
|
||||||
|
(vector-dot
|
||||||
|
(-> arg0 dynam gravity-normal)
|
||||||
|
(vector-! (new 'stack-no-clear 'vector) (-> arg1 best-tri intersect) (-> sv-164 intersect))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(set! (-> arg0 unknown-float-coverage-1) (the-as float (-> sv-164 pat)))
|
||||||
|
(set! (-> arg0 unknown-vector-coverage-0 quad) (-> sv-164 normal quad))
|
||||||
|
0
|
||||||
|
)
|
||||||
|
(set! sv-272 (vector+float*!
|
||||||
|
(new 'stack-no-clear 'vector)
|
||||||
|
(-> arg1 best-tri intersect)
|
||||||
|
(-> arg0 dynam gravity-normal)
|
||||||
|
819.2
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(set! sv-276 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 dynam gravity-normal) -20480.0))
|
||||||
|
(vector+float*! sv-272 sv-272 sv-160 -819.2)
|
||||||
|
(vector+float*! sv-276 sv-276 sv-160 -4096.0)
|
||||||
|
(when (>= (probe-using-line-sphere *collide-cache* sv-272 sv-276 409.6 (-> arg1 best-from-prim collide-with) sv-164 1)
|
||||||
|
0.0
|
||||||
|
)
|
||||||
|
(set! (-> arg0 unknown-float-coverage-2) (vector-vector-distance sv-272 (-> sv-164 intersect)))
|
||||||
|
(set! (-> arg0 unknown-u32-coverage-0) (the-as uint (-> sv-164 pat)))
|
||||||
|
(set! (-> arg0 unknown-vector-coverage-1 quad) (-> sv-164 normal quad))
|
||||||
|
0
|
||||||
|
)
|
||||||
|
(when (and (zero? (logand sv-32 512))
|
||||||
|
(and (or (< (* 1.25 (-> arg1 best-from-prim local-sphere w)) (-> arg0 unknown-float-coverage-0))
|
||||||
|
(= (shr (shl (the-as int (-> arg0 unknown-float-coverage-1)) 58) 61) 1)
|
||||||
|
)
|
||||||
|
(and (< (-> arg0 unknown-float-coverage-2) (* 2.0 (-> arg1 best-from-prim local-sphere w)))
|
||||||
|
(zero? (shr (shl (-> arg0 unknown-u32-coverage-0) 58) 61))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(set! sv-32 (logior sv-32 128))
|
||||||
|
(set! (-> arg0 unknown-dword-coverage) (-> *display* base-frame-counter))
|
||||||
|
(set! sv-40 (logior sv-40 128))
|
||||||
|
(set! (-> arg0 unknown-dword21) (-> *display* base-frame-counter))
|
||||||
|
(let ((f30-0 (vector-dot sv-52 (-> arg0 unknown-vector22)))
|
||||||
|
(f0-21 (if (logtest? sv-32 2)
|
||||||
|
(cos (- 16384.0 (acos (-> arg0 coverage))))
|
||||||
|
(-> arg0 coverage)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(f1-11 (vector-dot
|
||||||
|
(-> arg0 dynam gravity-normal)
|
||||||
|
(vector-! (new 'stack-no-clear 'vector) (-> arg0 trans) (-> arg1 best-tri intersect))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(if (or (zero? (logand sv-32 32)) (< 0.5 f0-21))
|
||||||
|
(set! sv-48 (the-as symbol #f))
|
||||||
|
)
|
||||||
|
(when (and (or (and (< f0-21 0.95) (>= f30-0 0.0))
|
||||||
|
(and (logtest? sv-32 32) (< f0-21 0.3))
|
||||||
|
(< f1-11 (* -0.25 (-> arg1 best-from-prim local-sphere w)))
|
||||||
|
)
|
||||||
|
(>= (vector-dot sv-52 sv-16) -0.000001)
|
||||||
|
)
|
||||||
|
(set! (-> arg0 surf) *edge-surface*)
|
||||||
|
(set! sv-32 (logior sv-32 1024))
|
||||||
|
(set! sv-48 (the-as symbol #f))
|
||||||
|
(when (logtest? sv-32 32)
|
||||||
|
(set! sv-48 #t)
|
||||||
|
(set! sv-32 (logior sv-32 4096))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(if (< (-> arg0 surface-angle) 0.0)
|
||||||
|
(set! sv-48 #t)
|
||||||
|
)
|
||||||
|
(when sv-48
|
||||||
|
(cond
|
||||||
|
((and (or (= (-> arg0 poly-pat mode) (pat-mode ground))
|
||||||
|
(and (logtest? sv-32 8)
|
||||||
|
(>= (* 1.25 (-> arg1 best-from-prim local-sphere w)) (-> arg0 unknown-float-coverage-0))
|
||||||
|
(zero? (shr (shl (the-as int (-> arg0 unknown-float-coverage-1)) 58) 61))
|
||||||
|
(< 0.3 (fabs (-> arg0 surface-angle)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(zero? (logand sv-32 128))
|
||||||
|
)
|
||||||
|
(set! sv-32 (logior sv-32 64))
|
||||||
|
(set! sv-40 (logior sv-40 128))
|
||||||
|
(set! (-> arg0 unknown-dword21) (-> *display* base-frame-counter))
|
||||||
|
(set! sv-48 (the-as symbol #f))
|
||||||
|
)
|
||||||
|
(#t
|
||||||
|
(set! sv-32 (logior sv-32 64))
|
||||||
|
(set! sv-40 (logior sv-40 128))
|
||||||
|
(set! (-> arg0 unknown-dword21) (-> *display* base-frame-counter))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(set! (-> sv-24 0) sv-40)
|
||||||
|
(set! (-> sv-20 0) sv-32)
|
||||||
|
(set! (-> sv-28 0) sv-48)
|
||||||
|
(the-as uint 0)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun target-collision-reaction ((arg0 control-info) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector))
|
||||||
|
(local-vars (sv-80 vector) (sv-84 vector) (sv-88 matrix) (sv-96 int) (sv-104 int) (sv-160 symbol))
|
||||||
|
(set! sv-80 (new-stack-vector0))
|
||||||
|
(set! sv-84 (new-stack-vector0))
|
||||||
|
(let ((v1-2 (new 'stack-no-clear 'matrix)))
|
||||||
|
(dotimes (a0-1 2)
|
||||||
|
(set! (-> v1-2 vector a0-1 quad) (the-as uint128 0))
|
||||||
|
)
|
||||||
|
(set! sv-88 v1-2)
|
||||||
|
)
|
||||||
|
(set! sv-96 0)
|
||||||
|
(set! sv-104 0)
|
||||||
|
(set! (-> sv-88 vector 0 quad) (-> arg3 quad))
|
||||||
|
(set! (-> sv-88 vector 1 quad) (-> arg3 quad))
|
||||||
|
(let ((a1-3 (new 'stack-no-clear 'vector)))
|
||||||
|
(vector-float*! a1-3 (-> arg1 move-vec) (-> arg1 best-u))
|
||||||
|
(move-by-vector! arg0 a1-3)
|
||||||
|
)
|
||||||
|
(set-and-handle-pat! arg0 (-> arg1 best-tri pat))
|
||||||
|
(if (= (-> arg0 poly-pat mode) (pat-mode wall))
|
||||||
|
(set! sv-104 (logior sv-104 1))
|
||||||
|
)
|
||||||
|
(if (logtest? (-> arg0 unknown-surface00 flags) 2048)
|
||||||
|
(set! sv-104 (logior sv-104 32))
|
||||||
|
)
|
||||||
|
(let ((v1-23 (new 'stack-no-clear 'vector)))
|
||||||
|
(set! (-> v1-23 quad) (-> arg1 best-from-prim prim-core world-sphere quad))
|
||||||
|
(vector-! sv-80 v1-23 (-> arg1 best-tri intersect))
|
||||||
|
)
|
||||||
|
(vector-normalize! sv-80 1.0)
|
||||||
|
(set! (-> arg0 coverage) (vector-dot sv-80 (-> arg1 best-tri normal)))
|
||||||
|
(when (< (-> arg0 coverage) 0.0)
|
||||||
|
(set! (-> arg0 coverage) 0.0)
|
||||||
|
(vector-flatten! sv-80 sv-80 (-> arg1 best-tri normal))
|
||||||
|
(vector-normalize! sv-80 1.0)
|
||||||
|
)
|
||||||
|
(if (< (-> arg0 coverage) 0.9999)
|
||||||
|
(set! sv-104 (logior sv-104 24))
|
||||||
|
)
|
||||||
|
(let ((v1-33 (-> sv-80 quad)))
|
||||||
|
(set! (-> sv-84 quad) v1-33)
|
||||||
|
)
|
||||||
|
(if (= (-> arg1 best-u) 0.0)
|
||||||
|
(move-by-vector! arg0 (vector-normalize-copy! (new-stack-vector0) sv-84 3.0))
|
||||||
|
)
|
||||||
|
(set! (-> arg0 poly-normal quad) (-> arg1 best-tri normal quad))
|
||||||
|
(collide-shape-moving-angle-set! arg0 sv-84 (the-as vector (-> sv-88 vector)))
|
||||||
|
(if (< (-> arg0 poly-angle) -0.2)
|
||||||
|
(set! sv-96 (logior sv-96 16))
|
||||||
|
)
|
||||||
|
(if (< (-> arg0 poly-angle) 0.0)
|
||||||
|
(set! sv-96 (logior sv-96 #x4000))
|
||||||
|
)
|
||||||
|
(set! sv-160 (< (fabs (-> arg0 surface-angle)) (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle)))
|
||||||
|
(if (and sv-160 (and (= (-> arg0 unknown-surface00 mode) 'dive) (< 0.2 (fabs (-> arg0 surface-angle)))))
|
||||||
|
(set! sv-160 (the-as symbol #f))
|
||||||
|
)
|
||||||
|
(if sv-160
|
||||||
|
(set! sv-104 (logior sv-104 2))
|
||||||
|
)
|
||||||
|
(if (logtest? sv-104 8)
|
||||||
|
(target-collision-low-coverage
|
||||||
|
arg0
|
||||||
|
arg1
|
||||||
|
sv-84
|
||||||
|
(the-as (pointer uint32) (& sv-104))
|
||||||
|
(the-as (pointer uint64) (& sv-96))
|
||||||
|
(& sv-160)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(when (zero? (logand (-> arg0 prev-status) 1))
|
||||||
|
(set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal))))
|
||||||
|
(set! sv-96 (logior sv-96 2048))
|
||||||
|
(when (not sv-160)
|
||||||
|
(let ((f30-0 (- 1.0 (-> arg0 surf impact-fric))))
|
||||||
|
(when (< f30-0 1.0)
|
||||||
|
(let ((s3-1 (new-stack-vector0))
|
||||||
|
(f28-0 (vector-dot (-> arg0 dynam gravity-normal) (the-as vector (-> sv-88 vector))))
|
||||||
|
)
|
||||||
|
0.0
|
||||||
|
(vector-! s3-1 (the-as vector (-> sv-88 vector)) (vector-float*! s3-1 (-> arg0 dynam gravity-normal) f28-0))
|
||||||
|
(let* ((f0-20 (vector-length s3-1))
|
||||||
|
(f1-9 f0-20)
|
||||||
|
)
|
||||||
|
(if (< f28-0 0.0)
|
||||||
|
(set! f28-0 (* f28-0 f30-0))
|
||||||
|
)
|
||||||
|
(vector+!
|
||||||
|
(the-as vector (-> sv-88 vector))
|
||||||
|
(vector-float*! (the-as vector (-> sv-88 vector)) (-> arg0 dynam gravity-normal) f28-0)
|
||||||
|
(vector-float*! s3-1 s3-1 (/ f0-20 f1-9))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(set! sv-96 (logior sv-96 4))
|
||||||
|
(cond
|
||||||
|
((-> arg1 best-to-prim)
|
||||||
|
(set! sv-96 (logior sv-96 32))
|
||||||
|
(set! (-> arg0 unknown-vector72 quad) (-> arg1 best-tri intersect quad))
|
||||||
|
(set! (-> arg0 unknown-vector73 quad) (-> arg0 poly-normal quad))
|
||||||
|
(set! (-> arg0 unknown-handle00) (process->handle (-> arg1 best-to-prim cshape process)))
|
||||||
|
)
|
||||||
|
((= (-> arg0 poly-pat material) (pat-material waterbottom))
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(set! sv-96 (logior sv-96 4096))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(cond
|
||||||
|
(sv-160
|
||||||
|
(set! sv-104 (logior sv-104 4))
|
||||||
|
(set! sv-96 (logior sv-96 8))
|
||||||
|
(set! (-> arg0 cur-pat mode) 1)
|
||||||
|
(set! (-> arg0 unknown-vector70 quad) (-> arg1 best-tri intersect quad))
|
||||||
|
(set! (-> arg0 unknown-vector71 quad) (-> arg0 poly-normal quad))
|
||||||
|
(set! (-> arg0 unknown-vector121 quad) (-> sv-84 quad))
|
||||||
|
(set! (-> arg0 unknown-int60) (the-as uint (-> arg1 best-tri pat)))
|
||||||
|
(-> arg0 history-data (logand (+ (-> arg0 unknown-halfword00) 127) 127))
|
||||||
|
(cond
|
||||||
|
(#f
|
||||||
|
(sound-play-by-name (static-sound-name "cursor-options") (new-sound-id) 1024 0 0 1 #t)
|
||||||
|
(set! sv-104 (logior sv-104 8192))
|
||||||
|
(vector-reflect-flat-above! arg2 (the-as vector (-> sv-88 vector)) sv-84)
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(vector-reflect-flat! arg2 (the-as vector (-> sv-88 vector)) sv-84)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(cond
|
||||||
|
((not
|
||||||
|
(and (>= (-> arg1 best-from-prim local-sphere w)
|
||||||
|
(vector-dot
|
||||||
|
(-> arg0 ground-poly-normal)
|
||||||
|
(vector-! (new 'stack-no-clear 'vector) (-> arg1 best-tri intersect) (-> arg0 ground-touch-point))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(and (< 0.0 (vector-dot (-> arg0 ground-poly-normal) arg2))
|
||||||
|
(< (- (-> *display* base-frame-counter) (-> arg0 unknown-dword10)) 90)
|
||||||
|
(zero? (logand sv-104 32))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(set! sv-104 (logior sv-104 256))
|
||||||
|
(set! sv-104 (logand -65 sv-104))
|
||||||
|
(let ((s3-4 (vector-cross! (new 'stack-no-clear 'vector) (-> arg0 poly-normal) (-> arg0 ground-poly-normal))))
|
||||||
|
(vector-normalize! s3-4 1.0)
|
||||||
|
(vector-float*! arg2 s3-4 (vector-dot (the-as vector (-> sv-88 vector)) s3-4))
|
||||||
|
)
|
||||||
|
(vector+! arg2 arg2 (-> arg0 poly-normal))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(set! sv-96 (logior sv-96 1))
|
||||||
|
(set! (-> arg0 cur-pat mode) 0)
|
||||||
|
(if (= (-> arg1 best-from-prim prim-id) 6)
|
||||||
|
(set! (-> arg0 local-normal quad) (-> sv-84 quad))
|
||||||
|
)
|
||||||
|
(vector-reflect-flat! arg2 (the-as vector (-> sv-88 vector)) sv-84)
|
||||||
|
(vector+! arg2 arg2 sv-84)
|
||||||
|
(set! (-> arg0 ground-touch-point w) 0.0)
|
||||||
|
(when (not (or (logtest? sv-104 15) (nonzero? (-> arg0 poly-pat event))))
|
||||||
|
(set! sv-96 (logior sv-96 2))
|
||||||
|
(set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad))
|
||||||
|
(set! (-> arg0 unknown-vector53 quad) (-> sv-84 quad))
|
||||||
|
(set! (-> arg0 unknown-float60) (vector-dot sv-84 (-> arg0 dynam gravity-normal)))
|
||||||
|
(set! (-> arg0 unknown-dword10) (-> *display* base-frame-counter))
|
||||||
|
(set! (-> arg0 ground-pat) (-> arg0 poly-pat))
|
||||||
|
(set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad))
|
||||||
|
(set! (-> arg0 unknown-vector55 quad) (-> arg1 best-from-prim prim-core world-sphere quad))
|
||||||
|
(set! sv-104 (logior sv-104 2048))
|
||||||
|
(if (= (-> arg0 poly-pat material) (pat-material waterbottom))
|
||||||
|
(set! sv-96 (logior sv-96 1024))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(logior! (-> arg0 status) sv-96)
|
||||||
|
(set! (-> arg0 reaction-flag) (the-as uint sv-104))
|
||||||
|
(update!
|
||||||
|
(-> arg0 history-data (-> arg0 unknown-halfword00))
|
||||||
|
arg0
|
||||||
|
(-> arg1 best-tri intersect)
|
||||||
|
(-> sv-88 vector 1)
|
||||||
|
arg2
|
||||||
|
)
|
||||||
|
(set! (-> arg0 unknown-halfword00) (logand (+ (-> arg0 unknown-halfword00) 1) 127))
|
||||||
|
sv-96
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; definition for function target-collision-no-reaction
|
||||||
|
;; INFO: Return type mismatch int vs none.
|
||||||
|
(defun target-collision-no-reaction ((arg0 control-info) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector))
|
||||||
|
(if (= (-> arg0 unknown-surface00 mode) 'air)
|
||||||
|
(logior! (-> arg0 reaction-flag) 32)
|
||||||
|
)
|
||||||
|
(let ((s5-0 (-> arg0 history-data (-> arg0 unknown-halfword00))))
|
||||||
|
(update! s5-0 arg0 (-> arg0 trans) arg3 arg2)
|
||||||
|
(logior! (-> s5-0 status) 256)
|
||||||
|
)
|
||||||
|
(set! (-> arg0 unknown-halfword00) (logand (+ (-> arg0 unknown-halfword00) 1) 127))
|
||||||
|
0
|
||||||
|
(none)
|
||||||
|
)
|
|
@ -9,8 +9,75 @@
|
||||||
;; A collide shape is a group of collision geometry. Typically, each actor will have a single collide shape.
|
;; A collide shape is a group of collision geometry. Typically, each actor will have a single collide shape.
|
||||||
;; Each collide shape may contain a number of collide-shape-prim's.
|
;; Each collide shape may contain a number of collide-shape-prim's.
|
||||||
|
|
||||||
;; There are many subclasses of collide-shape-prim for different types of collision primitives.
|
;; There are subclasses of collide-shape-prim for different types of collision primitives.
|
||||||
;; Some subclasses can contain multiple collide-shape-prims.
|
;; The types are:
|
||||||
|
;; - mesh. A foreground collision mesh. This has a fixed max size, so something have multiple meshes.
|
||||||
|
;; - group. A list of other prims.
|
||||||
|
;; - sphere. A sphere.
|
||||||
|
|
||||||
|
;; The non-sphere classes also store a bsphere that must contain all collision geometry.
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; New vs. Old Collide System
|
||||||
|
;; There are, effectively, two systems for collision queries.
|
||||||
|
|
||||||
|
;; Things that are shared:
|
||||||
|
;; Both systems use "collide-shape".
|
||||||
|
;; Both systems track foreground collision objects through the lists:
|
||||||
|
;; - collide-player-list
|
||||||
|
;; - collide-hit-by-player-list
|
||||||
|
;; - collide-usually-hit-by-player-list
|
||||||
|
|
||||||
|
;; The "old" system:
|
||||||
|
;; - generally uses recursive traversals through the collide shape tree
|
||||||
|
;; - uses "collide-mesh-cache".
|
||||||
|
;; - can't collide with water or the background.
|
||||||
|
|
||||||
|
|
||||||
|
;; The "new" system:
|
||||||
|
;; - is the only way to collide with the background/water
|
||||||
|
;; - uses "collide-cache"
|
||||||
|
;; - generally dumps stuff into the collide-cache, then uses collide-cache functions (not decompiled yet)
|
||||||
|
;; - does not support a few of the weirder collision checks
|
||||||
|
|
||||||
|
;; There is some duplicate implemenations because both the new and old system collide
|
||||||
|
;; foreground meshes.
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;; Collision queries:
|
||||||
|
|
||||||
|
;; Push Away.
|
||||||
|
;; Some objects move on fixed paths (like platforms). When these move forward, they should "push away"
|
||||||
|
;; things they hit (generally, Jak). Push Away only works between foreground objects and uses the old system.
|
||||||
|
;; The do-push-aways! function should be called after moving a shape to push away things that you hit.
|
||||||
|
;; Internally, this uses things called SPAT/should-push-away-test.
|
||||||
|
;; The push-aways use the collide resolve system (described below) to actually push things aways
|
||||||
|
;; (you can't push-away something through a wall, for example.)
|
||||||
|
|
||||||
|
;; Collide Resolve. (made up name)
|
||||||
|
;; Some objects (like Jak) do not move on fixed paths, and will be stopped by walls or other obstacles.
|
||||||
|
;; This works on background and foreground objects, and uses the new system.
|
||||||
|
;; The fill-cache-integrate-and-collide! function should be called, which will fill the collide cache
|
||||||
|
;; and then do an iterative collision algorithm.
|
||||||
|
;; This will call the reaction function. The default "default-collision-reaction" function is in collide-shape.gc
|
||||||
|
;; will fill the touching list.
|
||||||
|
|
||||||
|
|
||||||
|
;; Nav Enemy Collision (made up name)
|
||||||
|
;; dummy-58 and integrate-for-enemy-with-move-to-ground are nav-enemy specific.
|
||||||
|
;; the details aren't super well understood yet. But they basically try to go forward if they aren't blocked.
|
||||||
|
;; Uses find-overlapping-shapes as the detector. (old system)
|
||||||
|
|
||||||
|
;; Move To Ground.
|
||||||
|
;; move-to-ground. Does what it says. (new system)
|
||||||
|
|
||||||
|
;; detect-riders
|
||||||
|
;; for platforms, detect if somebody is on the platform. (on-platform-test)
|
||||||
|
;; uses old system. Sends event adds to rider list.
|
||||||
|
|
||||||
|
|
||||||
(declare-type touching-list structure)
|
(declare-type touching-list structure)
|
||||||
(declare-type collide-shape-prim basic)
|
(declare-type collide-shape-prim basic)
|
||||||
|
@ -242,6 +309,8 @@
|
||||||
(declare-type collide-shape basic)
|
(declare-type collide-shape basic)
|
||||||
(declare-type collide-cache-prim structure)
|
(declare-type collide-cache-prim structure)
|
||||||
(declare-type collide-shape-prim-group basic)
|
(declare-type collide-shape-prim-group basic)
|
||||||
|
(declare-type collide-cache basic)
|
||||||
|
|
||||||
;; the base class for collision shapes.
|
;; the base class for collision shapes.
|
||||||
(deftype collide-shape-prim (basic)
|
(deftype collide-shape-prim (basic)
|
||||||
((cshape collide-shape :offset-assert 4) ;; our parent collide-shape
|
((cshape collide-shape :offset-assert 4) ;; our parent collide-shape
|
||||||
|
@ -267,9 +336,9 @@
|
||||||
(move-by-vector! (_type_ vector) none 9)
|
(move-by-vector! (_type_ vector) none 9)
|
||||||
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
|
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
|
||||||
(debug-draw-world-sphere (_type_) symbol 11)
|
(debug-draw-world-sphere (_type_) symbol 11)
|
||||||
(add-fg-prim-using-box (_type_ process-drawable) none 12)
|
(add-fg-prim-using-box (_type_ collide-cache) none 12)
|
||||||
(add-fg-prim-using-line-sphere (_type_ process-drawable) none 13)
|
(add-fg-prim-using-line-sphere (_type_ collide-cache) none 13)
|
||||||
(add-fg-prim-using-y-probe (_type_ process-drawable) none 14)
|
(add-fg-prim-using-y-probe (_type_ collide-cache) none 14)
|
||||||
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
|
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
|
||||||
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
|
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
|
||||||
(dummy-17 () none 17)
|
(dummy-17 () none 17)
|
||||||
|
@ -392,10 +461,10 @@
|
||||||
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
|
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
|
||||||
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40) ;; check if blocked??
|
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40) ;; check if blocked??
|
||||||
(dummy-41 (_type_ attack-info float) vector 41)
|
(dummy-41 (_type_ attack-info float) vector 41)
|
||||||
(compute-overlap (_type_ collide-shape collide-overlap-result) symbol 42)
|
(should-push-away (_type_ collide-shape collide-overlap-result) symbol 42)
|
||||||
(pull-rider! (_type_ pull-rider-info) none 43)
|
(pull-rider! (_type_ pull-rider-info) none 43)
|
||||||
(pull-riders! (_type_) symbol 44)
|
(pull-riders! (_type_) symbol 44)
|
||||||
(respond-to-collisions! (_type_) symbol 45)
|
(do-push-aways! (_type_) symbol 45)
|
||||||
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
|
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
|
||||||
(update-transforms! (_type_) symbol 47)
|
(update-transforms! (_type_) symbol 47)
|
||||||
(clear-collide-with-as (_type_) none 48)
|
(clear-collide-with-as (_type_) none 48)
|
||||||
|
|
|
@ -8,18 +8,18 @@
|
||||||
;; The collide shape system is used to handle collision reactions.
|
;; The collide shape system is used to handle collision reactions.
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; OVERLAP
|
;; Should Push Away
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
;; The overlap algorithm determines if two collide shapes are in contact.
|
;; The overlap algorithm determines if the new position of obj should push away arg0.
|
||||||
|
|
||||||
;; If shapes are far away, it will abort early and just return #f.
|
;; If shapes are far away, it will abort early and just return #f.
|
||||||
;; overlap and "should push away" are the same thing.
|
|
||||||
;; both check collision flags and require "solid" flags. So this is only for solid collisions.
|
;; both check collision flags and require "solid" flags. So this is only for solid collisions.
|
||||||
;; the collision isn't symmetric [collide(a, b) != collide(b, a)] because the with/as flags.
|
;; the collision isn't symmetric [collide(a, b) != collide(b, a)] because the with/as flags.
|
||||||
;; so there's some weirdness to get all the method dispatch stuff to work around (you can only dispatch on one type)
|
;; so there's some weirdness to get all the method dispatch stuff to work around (you can only dispatch on one type)
|
||||||
|
|
||||||
|
|
||||||
(defmethod compute-overlap collide-shape ((obj collide-shape) (arg0 collide-shape) (arg1 collide-overlap-result))
|
(defmethod should-push-away collide-shape ((obj collide-shape) (arg0 collide-shape) (arg1 collide-overlap-result))
|
||||||
"Find the overlap between two collide shapes. This is the main entry point for the overlap algorithm.
|
"Find the overlap between two collide shapes. This is the main entry point for the overlap algorithm.
|
||||||
The result is returned in arg1. The obj is collided _with_ arg0 (meaning obj uses its collide-with, arg0 uses colide-as).
|
The result is returned in arg1. The obj is collided _with_ arg0 (meaning obj uses its collide-with, arg0 uses colide-as).
|
||||||
The best-dist is only valid if the result is #t (it should be negative then)"
|
The best-dist is only valid if the result is #t (it should be negative then)"
|
||||||
|
@ -1744,8 +1744,10 @@
|
||||||
;; fill with the gox
|
;; fill with the gox
|
||||||
(fill-using-bounding-box *collide-cache* s5-0 arg1 (-> obj process) (-> obj pat-ignore-mask))
|
(fill-using-bounding-box *collide-cache* s5-0 arg1 (-> obj process) (-> obj pat-ignore-mask))
|
||||||
;; only draw collide cache, if we're the target
|
;; only draw collide cache, if we're the target
|
||||||
(if (and *display-collide-cache* (= (-> obj process type) target))
|
(when (and *display-collide-cache* (= (-> obj process type) target))
|
||||||
(debug-draw *collide-cache*)
|
(debug-draw *collide-cache*)
|
||||||
|
;; NOTE: added
|
||||||
|
(add-debug-box #t (bucket-id debug-draw0) (-> s5-0 min) (-> s5-0 max) (new 'static 'rgba :a #x80 :b #x70 :g #x70))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(else
|
(else
|
||||||
|
@ -1861,7 +1863,6 @@
|
||||||
(vf31 :class vf)
|
(vf31 :class vf)
|
||||||
(vf4 :class vf)
|
(vf4 :class vf)
|
||||||
)
|
)
|
||||||
|
|
||||||
(load-bounding-box-work)
|
(load-bounding-box-work)
|
||||||
;; this first loop looks for a non-empty group.
|
;; this first loop looks for a non-empty group.
|
||||||
(let ((s4-0 (-> obj num-prims))
|
(let ((s4-0 (-> obj num-prims))
|
||||||
|
@ -2493,7 +2494,7 @@
|
||||||
#f
|
#f
|
||||||
)
|
)
|
||||||
|
|
||||||
(defmethod respond-to-collisions! collide-shape ((obj collide-shape))
|
(defmethod do-push-aways! collide-shape ((obj collide-shape))
|
||||||
"This is the main function to call to respond"
|
"This is the main function to call to respond"
|
||||||
(local-vars
|
(local-vars
|
||||||
(at-0 int)
|
(at-0 int)
|
||||||
|
@ -2541,12 +2542,12 @@
|
||||||
(when (!= (-> obj process) (-> s3-0 process)) ;; self check
|
(when (!= (-> obj process) (-> s3-0 process)) ;; self check
|
||||||
;; see if we collide!
|
;; see if we collide!
|
||||||
(let ((s2-0 (new 'stack-no-clear 'collide-overlap-result)))
|
(let ((s2-0 (new 'stack-no-clear 'collide-overlap-result)))
|
||||||
(when (and (compute-overlap obj s3-0 s2-0) (>= -81.92 (-> s2-0 best-dist))) ;; we collide!
|
(when (and (should-push-away obj s3-0 s2-0) (>= -81.92 (-> s2-0 best-dist))) ;; we collide!
|
||||||
;; fill the collide cache.
|
;; fill the collide cache.
|
||||||
(fill-cache-for-shape! s3-0 8192.0 (-> s3-0 root-prim collide-with))
|
(fill-cache-for-shape! s3-0 8192.0 (-> s3-0 root-prim collide-with))
|
||||||
;; 3 iterations to solve it.
|
;; 3 iterations to solve it.
|
||||||
(let ((s5-1 3))
|
(let ((s5-1 3))
|
||||||
(until (or (<= s5-1 0) (not (compute-overlap obj s3-0 s2-0))) ;; run until we're out.
|
(until (or (<= s5-1 0) (not (should-push-away obj s3-0 s2-0))) ;; run until we're out.
|
||||||
(let ((s1-0 (new 'stack-no-clear 'vector)))
|
(let ((s1-0 (new 'stack-no-clear 'vector)))
|
||||||
(let ((v1-19 (new 'stack-no-clear 'vector)))
|
(let ((v1-19 (new 'stack-no-clear 'vector)))
|
||||||
(set! (-> v1-19 quad) (-> s3-0 trans quad))
|
(set! (-> v1-19 quad) (-> s3-0 trans quad))
|
||||||
|
@ -2627,10 +2628,10 @@
|
||||||
(when (logtest? s5-0 (-> s3-1 root-prim prim-core collide-as))
|
(when (logtest? s5-0 (-> s3-1 root-prim prim-core collide-as))
|
||||||
(when (!= (-> obj process) (-> s3-1 process))
|
(when (!= (-> obj process) (-> s3-1 process))
|
||||||
(let ((s2-1 (new 'stack-no-clear 'collide-overlap-result)))
|
(let ((s2-1 (new 'stack-no-clear 'collide-overlap-result)))
|
||||||
(when (and (compute-overlap obj s3-1 s2-1) (>= -81.92 (-> s2-1 best-dist)))
|
(when (and (should-push-away obj s3-1 s2-1) (>= -81.92 (-> s2-1 best-dist)))
|
||||||
(fill-cache-for-shape! s3-1 8192.0 (-> s3-1 root-prim collide-with))
|
(fill-cache-for-shape! s3-1 8192.0 (-> s3-1 root-prim collide-with))
|
||||||
(let ((s5-2 3))
|
(let ((s5-2 3))
|
||||||
(until (or (<= s5-2 0) (not (compute-overlap obj s3-1 s2-1)))
|
(until (or (<= s5-2 0) (not (should-push-away obj s3-1 s2-1)))
|
||||||
(let ((s1-1 (new 'stack-no-clear 'vector)))
|
(let ((s1-1 (new 'stack-no-clear 'vector)))
|
||||||
(let ((v1-52 (new 'stack-no-clear 'vector)))
|
(let ((v1-52 (new 'stack-no-clear 'vector)))
|
||||||
(set! (-> v1-52 quad) (-> s3-1 trans quad))
|
(set! (-> v1-52 quad) (-> s3-1 trans quad))
|
||||||
|
@ -2704,10 +2705,10 @@
|
||||||
(when (logtest? s5-0 (-> s3-2 root-prim prim-core collide-as))
|
(when (logtest? s5-0 (-> s3-2 root-prim prim-core collide-as))
|
||||||
(when (!= (-> obj process) (-> s3-2 process))
|
(when (!= (-> obj process) (-> s3-2 process))
|
||||||
(let ((s2-2 (new 'stack-no-clear 'collide-overlap-result)))
|
(let ((s2-2 (new 'stack-no-clear 'collide-overlap-result)))
|
||||||
(when (and (compute-overlap obj s3-2 s2-2) (>= -81.92 (-> s2-2 best-dist)))
|
(when (and (should-push-away obj s3-2 s2-2) (>= -81.92 (-> s2-2 best-dist)))
|
||||||
(fill-cache-for-shape! s3-2 8192.0 (-> s3-2 root-prim collide-with))
|
(fill-cache-for-shape! s3-2 8192.0 (-> s3-2 root-prim collide-with))
|
||||||
(let ((s5-3 3))
|
(let ((s5-3 3))
|
||||||
(until (or (<= s5-3 0) (not (compute-overlap obj s3-2 s2-2)))
|
(until (or (<= s5-3 0) (not (should-push-away obj s3-2 s2-2)))
|
||||||
(let ((s1-2 (new 'stack-no-clear 'vector)))
|
(let ((s1-2 (new 'stack-no-clear 'vector)))
|
||||||
(let ((v1-84 (new 'stack-no-clear 'vector)))
|
(let ((v1-84 (new 'stack-no-clear 'vector)))
|
||||||
(set! (-> v1-84 quad) (-> s3-2 trans quad))
|
(set! (-> v1-84 quad) (-> s3-2 trans quad))
|
||||||
|
@ -2779,10 +2780,10 @@
|
||||||
(when (logtest? s5-0 (-> s3-3 root-prim prim-core collide-as))
|
(when (logtest? s5-0 (-> s3-3 root-prim prim-core collide-as))
|
||||||
(when (!= (-> obj process) (-> s3-3 process))
|
(when (!= (-> obj process) (-> s3-3 process))
|
||||||
(let ((s2-3 (new 'stack-no-clear 'collide-overlap-result)))
|
(let ((s2-3 (new 'stack-no-clear 'collide-overlap-result)))
|
||||||
(when (and (compute-overlap obj s3-3 s2-3) (>= -81.92 (-> s2-3 best-dist)))
|
(when (and (should-push-away obj s3-3 s2-3) (>= -81.92 (-> s2-3 best-dist)))
|
||||||
(fill-cache-for-shape! s3-3 8192.0 (-> s3-3 root-prim collide-with))
|
(fill-cache-for-shape! s3-3 8192.0 (-> s3-3 root-prim collide-with))
|
||||||
(let ((s5-4 3))
|
(let ((s5-4 3))
|
||||||
(until (or (<= s5-4 0) (not (compute-overlap obj s3-3 s2-3)))
|
(until (or (<= s5-4 0) (not (should-push-away obj s3-3 s2-3)))
|
||||||
(let ((s1-3 (new 'stack-no-clear 'vector)))
|
(let ((s1-3 (new 'stack-no-clear 'vector)))
|
||||||
(let ((v1-115 (new 'stack-no-clear 'vector)))
|
(let ((v1-115 (new 'stack-no-clear 'vector)))
|
||||||
(set! (-> v1-115 quad) (-> s3-3 trans quad))
|
(set! (-> v1-115 quad) (-> s3-3 trans quad))
|
||||||
|
|
|
@ -90,6 +90,15 @@
|
||||||
(unknown-float64 float :offset 1316) ;; from - logic-target::target-compute-slopes
|
(unknown-float64 float :offset 1316) ;; from - logic-target::target-compute-slopes
|
||||||
(unknown-dword20 int64 :offset 1320) ;; from target-util::turn-around? - TODO
|
(unknown-dword20 int64 :offset 1320) ;; from target-util::turn-around? - TODO
|
||||||
(unknown-dword21 int64 :offset 1328) ;; from target-util::turn-around? - TODO
|
(unknown-dword21 int64 :offset 1328) ;; from target-util::turn-around? - TODO
|
||||||
|
(unknown-dword-coverage int64 :offset 1336)
|
||||||
|
(unknown-float-coverage-0 float :offset 1344)
|
||||||
|
(unknown-float-coverage-1 float :offset 1348)
|
||||||
|
(unknown-float-coverage-2 float :offset 1352)
|
||||||
|
(unknown-u32-coverage-0 uint32 :offset 1356)
|
||||||
|
(unknown-vector-coverage-0 vector :inline :offset 1376)
|
||||||
|
(unknown-vector-coverage-1 vector :inline :offset 1392)
|
||||||
|
(unknown-vector-coverage-2 vector :inline :offset 1440)
|
||||||
|
(unknown-vector-coverage-3 vector :inline :offset 1472)
|
||||||
(unknown-vector60 vector :inline :offset 1456) ;; from - logic-target::add-thrust
|
(unknown-vector60 vector :inline :offset 1456) ;; from - logic-target::add-thrust
|
||||||
(unknown-vector61 vector :inline :offset 1504) ;; from - logic-target::add-thrust
|
(unknown-vector61 vector :inline :offset 1504) ;; from - logic-target::add-thrust
|
||||||
(unknown-float70 float :offset 1520) ;; from - logic-target::add-thrust
|
(unknown-float70 float :offset 1520) ;; from - logic-target::add-thrust
|
||||||
|
@ -175,6 +184,7 @@
|
||||||
(unknown-dword82 int64 :offset 18912) ;; from logic-target::reset-target-state
|
(unknown-dword82 int64 :offset 18912) ;; from logic-target::reset-target-state
|
||||||
(unknown-vector120 vector :inline :offset 18928) ;; from target::(code target-running-attack)
|
(unknown-vector120 vector :inline :offset 18928) ;; from target::(code target-running-attack)
|
||||||
(unknown-float150 float :offset 18944) ;; from target::(code target-wheel-flip)
|
(unknown-float150 float :offset 18944) ;; from target::(code target-wheel-flip)
|
||||||
|
(unknown-vector121 vector :inline :offset 18960) ;; from target collide response
|
||||||
(unknown-int60 uint32 :offset 18976) ;; from logic-target::print-target-stats
|
(unknown-int60 uint32 :offset 18976) ;; from logic-target::print-target-stats
|
||||||
(unknown-soundid00 sound-id :offset 18980) ;; from powerups::target-powerup-process
|
(unknown-soundid00 sound-id :offset 18980) ;; from powerups::target-powerup-process
|
||||||
(unknown-float141 float :offset 18984) ;; from powerups::target-powerup-process
|
(unknown-float141 float :offset 18984) ;; from powerups::target-powerup-process
|
||||||
|
|
|
@ -66,13 +66,7 @@
|
||||||
instance-sphere-box-intersect?
|
instance-sphere-box-intersect?
|
||||||
((arg0 drawable) (arg1 instance-tie) (arg2 bounding-box4w))
|
((arg0 drawable) (arg1 instance-tie) (arg2 bounding-box4w))
|
||||||
(local-vars
|
(local-vars
|
||||||
(r0-0 uint128)
|
(zero uint128)
|
||||||
(r0-1 int)
|
|
||||||
(r0-2 uint128)
|
|
||||||
(r0-3 int)
|
|
||||||
(r0-4 int)
|
|
||||||
(r0-5 uint128)
|
|
||||||
(r0-6 int)
|
|
||||||
(v1-3 uint128)
|
(v1-3 uint128)
|
||||||
(v1-4 uint128)
|
(v1-4 uint128)
|
||||||
(v1-5 uint128)
|
(v1-5 uint128)
|
||||||
|
@ -109,19 +103,17 @@
|
||||||
(let ((a3-0 (the-as uint128 (-> arg1 origin vector4h 3 long))))
|
(let ((a3-0 (the-as uint128 (-> arg1 origin vector4h 3 long))))
|
||||||
(nop!)
|
(nop!)
|
||||||
(let ((t2-0 (the-as uint128 (-> arg1 origin vector4h 0 long))))
|
(let ((t2-0 (the-as uint128 (-> arg1 origin vector4h 0 long))))
|
||||||
(.pextlh a3-1 a3-0 r0-0)
|
(.pextlh a3-1 a3-0 zero)
|
||||||
(let ((t0-0 (the-as uint128 (-> arg1 origin vector4h 1 long))))
|
(let ((t0-0 (the-as uint128 (-> arg1 origin vector4h 1 long))))
|
||||||
(.pw.sra t1-0 a3-1 10)
|
(.pw.sra t1-0 a3-1 10)
|
||||||
(let ((a3-2 (the-as uint128 (-> arg1 origin vector4h 2 long))))
|
(let ((a3-2 (the-as uint128 (-> arg1 origin vector4h 2 long))))
|
||||||
(.pextlh t2-1 t2-0 r0-0)
|
(.pextlh t2-1 t2-0 zero)
|
||||||
(.mov r0-1 f31-0)
|
|
||||||
(.pw.sra t2-2 t2-1 16)
|
(.pw.sra t2-2 t2-1 16)
|
||||||
(.mov r0-2 f31-0)
|
(.pextlh t0-1 t0-0 zero)
|
||||||
(.pextlh t0-1 t0-0 r0-2)
|
|
||||||
(.mov vf8 t1-0)
|
(.mov vf8 t1-0)
|
||||||
(.pw.sra t0-2 t0-1 16)
|
(.pw.sra t0-2 t0-1 16)
|
||||||
(.mov vf5 t2-2)
|
(.mov vf5 t2-2)
|
||||||
(.pextlh a3-3 a3-2 r0-2)
|
(.pextlh a3-3 a3-2 zero)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -172,14 +164,10 @@
|
||||||
(nop!)
|
(nop!)
|
||||||
(.pcgtw a1-2 a2-1 a1-1)
|
(.pcgtw a1-2 a2-1 a1-1)
|
||||||
)
|
)
|
||||||
(.mov r0-3 f31-0)
|
|
||||||
(.pcgtw v1-3 v1-2 a0-2)
|
(.pcgtw v1-3 v1-2 a0-2)
|
||||||
)
|
)
|
||||||
(.mov r0-4 f31-0)
|
|
||||||
(.por v1-4 a1-2 v1-3)
|
(.por v1-4 a1-2 v1-3)
|
||||||
(.mov r0-5 f31-0)
|
(.ppach v1-5 zero v1-4)
|
||||||
(.ppach v1-5 r0-5 v1-4)
|
|
||||||
(.mov r0-6 f31-0)
|
|
||||||
(let ((v1-6 (shl (the-as int v1-5) 16)))
|
(let ((v1-6 (shl (the-as int v1-5) 16)))
|
||||||
(nop!)
|
(nop!)
|
||||||
(zero? v1-6)
|
(zero? v1-6)
|
||||||
|
|
|
@ -297,20 +297,25 @@
|
||||||
;; gmerc
|
;; gmerc
|
||||||
;; shadow
|
;; shadow
|
||||||
;; eyes
|
;; eyes
|
||||||
(when (logtest? #x10000 *vu1-enable-user*)
|
(when (logtest? (vu1-renderer-mask sprite) *vu1-enable-user*)
|
||||||
(swap-fake-shadow-buffers)
|
(swap-fake-shadow-buffers)
|
||||||
(sprite-draw *display*)
|
(sprite-draw *display*)
|
||||||
)
|
)
|
||||||
;; lots more in this function.
|
;; lots more in this function.
|
||||||
(when *debug-segment*
|
(when *debug-segment*
|
||||||
(debug-draw-actors *level* *display-actor-marks*)
|
(debug-draw-actors *level* *display-actor-marks*)
|
||||||
;; collide-shape-debug
|
(collide-shape-draw-debug-marks)
|
||||||
)
|
)
|
||||||
(render-boundaries)
|
(render-boundaries)
|
||||||
;; boundaries
|
(send-events-for-touching-shapes *touching-list*)
|
||||||
;; touching
|
(free-all-prim-nodes *touching-list*)
|
||||||
|
|
||||||
(actors-update *level*)
|
(actors-update *level*)
|
||||||
;; collide stats
|
(when (not (paused?))
|
||||||
|
(if *stats-collide*
|
||||||
|
(print-collide-stats)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
||||||
|
@ -323,6 +328,17 @@
|
||||||
|
|
||||||
(define *draw-hook* main-draw-hook)
|
(define *draw-hook* main-draw-hook)
|
||||||
|
|
||||||
|
(defun-debug main-debug-hook ()
|
||||||
|
(when (not (or (= *master-mode* 'menu) (= *master-mode* 'progress)))
|
||||||
|
(execute-connections *debug-engine* #f)
|
||||||
|
;; (draw-instance-info *stdcon*)
|
||||||
|
)
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
|
||||||
|
;; definition for symbol *debug-hook*, type (function none)
|
||||||
|
(define *debug-hook* main-debug-hook)
|
||||||
|
|
||||||
(defun debug-init-buffer ((arg0 bucket-id) (arg1 gs-zbuf) (arg2 gs-test))
|
(defun debug-init-buffer ((arg0 bucket-id) (arg1 gs-zbuf) (arg2 gs-test))
|
||||||
"Initialize a bucket for debug draw with the given zbuf and test settings"
|
"Initialize a bucket for debug draw with the given zbuf and test settings"
|
||||||
(let* ((t0-0 (-> *display* frames (-> *display* on-screen) frame global-buf))
|
(let* ((t0-0 (-> *display* frames (-> *display* on-screen) frame global-buf))
|
||||||
|
@ -1139,6 +1155,16 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
(defmethod collide-ray drawable ((obj drawable) (arg0 int) (arg1 collide-list))
|
(defmethod collide-ray drawable ((obj drawable) (arg0 int) (arg1 collide-list))
|
||||||
|
0
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defmethod collide-with-box drawable ((obj drawable) (arg0 int) (arg1 collide-list))
|
||||||
|
0
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defmethod collide-y-probe drawable ((obj drawable) (arg0 int) (arg1 collide-list))
|
||||||
0
|
0
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
|
@ -889,8 +889,23 @@
|
||||||
(logclear! (-> self draw status) (draw-status drwf02 drwf04))
|
(logclear! (-> self draw status) (draw-status drwf02 drwf04))
|
||||||
(when (nonzero? (-> self skel))
|
(when (nonzero? (-> self skel))
|
||||||
;(dummy-19 self) TODO
|
;(dummy-19 self) TODO
|
||||||
|
|
||||||
|
(#when TARGET_STARTUP_HACKS
|
||||||
|
(when (eq? (-> self type) target)
|
||||||
|
(format *stdcon* "no bones for you~%")
|
||||||
|
(dotimes (i (length (-> self node-list)))
|
||||||
|
(matrix-identity! (-> self node-list data i bone transform))
|
||||||
|
(set! (-> self node-list data i bone position quad)
|
||||||
|
(-> (the-as target self) control trans quad)
|
||||||
|
)
|
||||||
|
(set! (-> self node-list data i bone position w) 1.0)
|
||||||
|
(+! (-> self node-list data i bone position y) (meters 0.0))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(when (or (logtest? (-> self skel status) 1) gp-1)
|
(when (or (logtest? (-> self skel status) 1) gp-1)
|
||||||
(dummy-17 self)
|
;; (dummy-17 self) TODO
|
||||||
(if (and gp-1 (type-type? (-> self root type) collide-shape))
|
(if (and gp-1 (type-type? (-> self root type) collide-shape))
|
||||||
(update-transforms! (the-as collide-shape (-> self root)))
|
(update-transforms! (the-as collide-shape (-> self root)))
|
||||||
)
|
)
|
||||||
|
@ -964,7 +979,7 @@
|
||||||
(let ((gp-0 (the-as collide-shape (-> self root))))
|
(let ((gp-0 (the-as collide-shape (-> self root))))
|
||||||
(update-transforms! gp-0)
|
(update-transforms! gp-0)
|
||||||
(pull-riders! gp-0)
|
(pull-riders! gp-0)
|
||||||
(respond-to-collisions! gp-0)
|
(do-push-aways! gp-0)
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
@ -973,7 +988,7 @@
|
||||||
(ja-post)
|
(ja-post)
|
||||||
(let ((gp-0 (the-as collide-shape (-> self root))))
|
(let ((gp-0 (the-as collide-shape (-> self root))))
|
||||||
(update-transforms! gp-0)
|
(update-transforms! gp-0)
|
||||||
(respond-to-collisions! gp-0)
|
(do-push-aways! gp-0)
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
|
|
@ -1253,6 +1253,21 @@
|
||||||
(define-extern collectable type)
|
(define-extern collectable type)
|
||||||
(define-extern ecovalve type)
|
(define-extern ecovalve type)
|
||||||
(define-extern crate type)
|
(define-extern crate type)
|
||||||
|
|
||||||
|
(defmacro heap-size-hack (info entity-type)
|
||||||
|
`(cond
|
||||||
|
((type-type? ,entity-type collectable)
|
||||||
|
#x1000
|
||||||
|
)
|
||||||
|
(else
|
||||||
|
(if ,info
|
||||||
|
(-> ,info heap-size)
|
||||||
|
#x4000
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(defmethod birth! entity-actor ((obj entity-actor))
|
(defmethod birth! entity-actor ((obj entity-actor))
|
||||||
"Create a process for this entity and start it."
|
"Create a process for this entity and start it."
|
||||||
|
|
||||||
|
@ -1272,10 +1287,7 @@
|
||||||
|
|
||||||
(let* ((entity-type (-> obj etype))
|
(let* ((entity-type (-> obj etype))
|
||||||
(info (entity-info-lookup entity-type))
|
(info (entity-info-lookup entity-type))
|
||||||
(entity-process (get-process *default-dead-pool* entity-type (if info
|
(entity-process (get-process *default-dead-pool* entity-type (heap-size-hack info entity-type) ;; hack, modified this.
|
||||||
(-> info heap-size)
|
|
||||||
#x4000
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -131,7 +131,7 @@
|
||||||
|
|
||||||
|
|
||||||
(defmethod initialize eco-collectable ((obj eco-collectable))
|
(defmethod initialize eco-collectable ((obj eco-collectable))
|
||||||
(stack-size-set! (-> obj main-thread) 128)
|
(stack-size-set! (-> obj main-thread) 256) ;; hack increased from 128
|
||||||
(logior! (-> obj mask) (process-mask actor-pause))
|
(logior! (-> obj mask) (process-mask actor-pause))
|
||||||
(set! (-> obj actor-pause) #t)
|
(set! (-> obj actor-pause) #t)
|
||||||
(set! (-> obj notify-parent) #f)
|
(set! (-> obj notify-parent) #f)
|
||||||
|
@ -1273,7 +1273,7 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
(defmethod initialize money ((obj money))
|
(defmethod initialize money ((obj money))
|
||||||
(stack-size-set! (-> obj main-thread) 128)
|
(stack-size-set! (-> obj main-thread) 256) ;; hack increased from 128
|
||||||
(let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
|
(let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player))))
|
||||||
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
|
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
|
||||||
(set! (-> s5-0 reaction) default-collision-reaction)
|
(set! (-> s5-0 reaction) default-collision-reaction)
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
;; dgos: GAME, ENGINE
|
;; dgos: GAME, ENGINE
|
||||||
|
|
||||||
;; Global engine settings:
|
;; Global engine settings:
|
||||||
|
(defglobalconstant TARGET_STARTUP_HACKS #t)
|
||||||
(define *stats-poly* #f)
|
(define *stats-poly* #f)
|
||||||
(define *stats-memory* #f)
|
(define *stats-memory* #f)
|
||||||
(define *stats-memory-short* #f)
|
(define *stats-memory-short* #f)
|
||||||
|
|
|
@ -556,6 +556,7 @@
|
||||||
(add-ee-profile-frame 'draw :r #x80)
|
(add-ee-profile-frame 'draw :r #x80)
|
||||||
(add-ee-profile-frame 'draw :r #x40 :b #x40)
|
(add-ee-profile-frame 'draw :r #x40 :b #x40)
|
||||||
;; debug hook
|
;; debug hook
|
||||||
|
(*debug-hook*)
|
||||||
(main-cheats)
|
(main-cheats)
|
||||||
(add-ee-profile-frame 'draw :r #x20 :g #x20)
|
(add-ee-profile-frame 'draw :r #x20 :g #x20)
|
||||||
(update-camera)
|
(update-camera)
|
||||||
|
|
|
@ -1129,22 +1129,24 @@
|
||||||
(spawn (-> obj part) (the-as vector (-> obj root-override root-prim prim-core)))
|
(spawn (-> obj part) (the-as vector (-> obj root-override root-prim prim-core)))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
(#when PC_DEBUG_SOUND_ENABLE
|
||||||
(set! (-> s5-0 command) (sound-command set-param))
|
(let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry))))
|
||||||
(set! (-> s5-0 id) (-> obj sound-id))
|
(set! (-> s5-0 command) (sound-command set-param))
|
||||||
(let ((a1-3 (-> obj root-override trans)))
|
(set! (-> s5-0 id) (-> obj sound-id))
|
||||||
(let ((gp-1 pp))
|
(let ((a1-3 (-> obj root-override trans)))
|
||||||
(when (= a1-3 #t)
|
(let ((gp-1 pp))
|
||||||
(if (and gp-1 (type-type? (-> gp-1 type) process-drawable) (nonzero? (-> (the-as process-drawable gp-1) root)))
|
(when (= a1-3 #t)
|
||||||
(set! a1-3 (-> (the-as process-drawable gp-1) root trans))
|
(if (and gp-1 (type-type? (-> gp-1 type) process-drawable) (nonzero? (-> (the-as process-drawable gp-1) root)))
|
||||||
(set! a1-3 (the-as vector #f))
|
(set! a1-3 (-> (the-as process-drawable gp-1) root trans))
|
||||||
)
|
(set! a1-3 (the-as vector #f))
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
(sound-trans-convert (-> s5-0 parms trans) a1-3)
|
||||||
)
|
)
|
||||||
(sound-trans-convert (-> s5-0 parms trans) a1-3)
|
(set! (-> s5-0 parms mask) (the-as uint 32))
|
||||||
|
(-> s5-0 id)
|
||||||
)
|
)
|
||||||
(set! (-> s5-0 parms mask) (the-as uint 32))
|
|
||||||
(-> s5-0 id)
|
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
(none)
|
(none)
|
||||||
|
|
|
@ -450,8 +450,10 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(#when PC_PORT
|
(#when PC_PORT
|
||||||
(set! (-> gp-0 aspect-ratio) (-> *pc-settings* aspect-setting))
|
(when (nonzero? (-> *pc-settings* aspect-setting))
|
||||||
)
|
(set! (-> gp-0 aspect-ratio) (-> *pc-settings* aspect-setting))
|
||||||
|
)
|
||||||
|
)
|
||||||
(if (zero? *boot-video-mode*)
|
(if (zero? *boot-video-mode*)
|
||||||
(set! (-> gp-0 video-mode) 'ntsc)
|
(set! (-> gp-0 video-mode) 'ntsc)
|
||||||
(set! (-> gp-0 video-mode) 'pal)
|
(set! (-> gp-0 video-mode) 'pal)
|
||||||
|
|
|
@ -172,7 +172,7 @@
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
|
||||||
(defmethod set-from-spheres! bounding-box ((obj bounding-box) (spheres (pointer sphere)) (count int))
|
(defmethod set-from-spheres! bounding-box ((obj bounding-box) (spheres-bad (pointer sphere)) (count int))
|
||||||
"Reset box to hold the given spheres. Note: this implementation could be optimized."
|
"Reset box to hold the given spheres. Note: this implementation could be optimized."
|
||||||
;; This is also unrolled, but does 7 at a time.
|
;; This is also unrolled, but does 7 at a time.
|
||||||
(rlet ((vf0 :class vf)
|
(rlet ((vf0 :class vf)
|
||||||
|
@ -186,13 +186,15 @@
|
||||||
;; init min/max. in the case we don't have any spheres, we should return (0,0,0,1) for min/max.
|
;; init min/max. in the case we don't have any spheres, we should return (0,0,0,1) for min/max.
|
||||||
(set! current-min vf0)
|
(set! current-min vf0)
|
||||||
(set! current-max vf0)
|
(set! current-max vf0)
|
||||||
|
|
||||||
|
(let ((spheres (the (inline-array sphere) spheres-bad)))
|
||||||
|
|
||||||
(dotimes (i count)
|
(dotimes (i count)
|
||||||
(.lvf sph (-> spheres i))
|
(.lvf sph (-> spheres i))
|
||||||
(.sub.w.vf sph-min sph sph :mask #b111)
|
(.sub.w.vf sph-min sph sph :mask #b111)
|
||||||
(.add.w.vf sph-max sph sph :mask #b111)
|
(.add.w.vf sph-max sph sph :mask #b111)
|
||||||
(cond
|
(cond
|
||||||
((zero? count)
|
((zero? i)
|
||||||
(set! current-min sph-min)
|
(set! current-min sph-min)
|
||||||
(set! current-max sph-max)
|
(set! current-max sph-max)
|
||||||
)
|
)
|
||||||
|
@ -202,6 +204,7 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(.svf (-> obj min) current-min)
|
(.svf (-> obj min) current-min)
|
||||||
(.svf (-> obj max) current-max)
|
(.svf (-> obj max) current-max)
|
||||||
|
|
|
@ -248,7 +248,7 @@
|
||||||
;; update colors, but only if needed
|
;; update colors, but only if needed
|
||||||
(when (not (or (zero? s0-0) (= s4-1 s0-0)))
|
(when (not (or (zero? s0-0) (= s4-1 s0-0)))
|
||||||
(flush-cache 0)
|
(flush-cache 0)
|
||||||
(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-0 (-> s1-0 mood))
|
;;(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-0 (-> s1-0 mood))
|
||||||
;; remember the previous colors
|
;; remember the previous colors
|
||||||
(set! s4-1 s0-0)
|
(set! s4-1 s0-0)
|
||||||
)
|
)
|
||||||
|
@ -277,7 +277,7 @@
|
||||||
(upload-vis-bits s1-1 gp-1 a2-6)
|
(upload-vis-bits s1-1 gp-1 a2-6)
|
||||||
(when (not (or (zero? s0-1) (= s4-1 s0-1)))
|
(when (not (or (zero? s0-1) (= s4-1 s0-1)))
|
||||||
(flush-cache 0)
|
(flush-cache 0)
|
||||||
(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-1 (-> s1-1 mood))
|
;;(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-1 (-> s1-1 mood))
|
||||||
(set! s4-1 s0-1)
|
(set! s4-1 s0-1)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -303,7 +303,7 @@
|
||||||
(upload-vis-bits s1-2 gp-1 a2-8)
|
(upload-vis-bits s1-2 gp-1 a2-8)
|
||||||
(when (not (or (zero? s0-2) (= s4-1 s0-2)))
|
(when (not (or (zero? s0-2) (= s4-1 s0-2)))
|
||||||
(flush-cache 0)
|
(flush-cache 0)
|
||||||
(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-2 (-> s1-2 mood))
|
;;(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-2 (-> s1-2 mood))
|
||||||
(set! s4-1 s0-2)
|
(set! s4-1 s0-2)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -331,7 +331,7 @@
|
||||||
(upload-vis-bits s1-3 gp-1 a2-10)
|
(upload-vis-bits s1-3 gp-1 a2-10)
|
||||||
(when (not (or (zero? s0-3) (= s4-1 s0-3)))
|
(when (not (or (zero? s0-3) (= s4-1 s0-3)))
|
||||||
(flush-cache 0)
|
(flush-cache 0)
|
||||||
(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-3 (-> s1-3 mood))
|
;;(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-3 (-> s1-3 mood))
|
||||||
(set! s4-1 s0-3)
|
(set! s4-1 s0-3)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -360,7 +360,7 @@
|
||||||
(upload-vis-bits s1-4 gp-1 a2-12)
|
(upload-vis-bits s1-4 gp-1 a2-12)
|
||||||
(when (not (or (zero? s0-4) (= s4-1 s0-4)))
|
(when (not (or (zero? s0-4) (= s4-1 s0-4)))
|
||||||
(flush-cache 0)
|
(flush-cache 0)
|
||||||
(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-4 (-> s1-4 mood))
|
;;(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-4 (-> s1-4 mood))
|
||||||
(set! s4-1 s0-4)
|
(set! s4-1 s0-4)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -382,7 +382,7 @@
|
||||||
(upload-vis-bits s1-5 gp-1 a2-14)
|
(upload-vis-bits s1-5 gp-1 a2-14)
|
||||||
(when (not (or (zero? s0-5) (= s4-1 s0-5)))
|
(when (not (or (zero? s0-5) (= s4-1 s0-5)))
|
||||||
(flush-cache 0)
|
(flush-cache 0)
|
||||||
(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-5 (-> s1-5 mood))
|
;;(time-of-day-interp-colors-scratch (scratchpad-ptr rgba :offset 6160) s0-5 (-> s1-5 mood))
|
||||||
(set! s4-1 s0-5)
|
(set! s4-1 s0-5)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
;; do the draw!
|
;; do the draw!
|
||||||
(reset! (-> *perf-stats* data 5))
|
(reset! (-> *perf-stats* data 5))
|
||||||
;;(format 0 "DRAW: ~D~%" s3-0)
|
;;(format 0 "DRAW: ~D~%" s3-0)
|
||||||
(draw-inline-array-tfrag sv-16 (the-as drawable-inline-array s4-1) s3-0 s1-0)
|
;; (draw-inline-array-tfrag sv-16 (the-as drawable-inline-array s4-1) s3-0 s1-0)
|
||||||
(read! (-> *perf-stats* data 5))
|
(read! (-> *perf-stats* data 5))
|
||||||
|
|
||||||
;; update stats for the draw
|
;; update stats for the draw
|
||||||
|
@ -252,7 +252,7 @@
|
||||||
lev
|
lev
|
||||||
)
|
)
|
||||||
(reset! (-> *perf-stats* data 5))
|
(reset! (-> *perf-stats* data 5))
|
||||||
(draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0)
|
;; (draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0)
|
||||||
(update-wait-stats (-> *perf-stats* data 5) (the-as uint 0) (-> *tfrag-work* wait-to-spr) (-> *tfrag-work* wait-from-spr))
|
(update-wait-stats (-> *perf-stats* data 5) (the-as uint 0) (-> *tfrag-work* wait-to-spr) (-> *tfrag-work* wait-from-spr))
|
||||||
(read! (-> *perf-stats* data 5))
|
(read! (-> *perf-stats* data 5))
|
||||||
(tfrag-end-buffer s2-0)
|
(tfrag-end-buffer s2-0)
|
||||||
|
@ -426,7 +426,7 @@
|
||||||
(tfrag-init-buffer s2-0 (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal)) 1 lev)
|
(tfrag-init-buffer s2-0 (new 'static 'gs-test :ate #x1 :afail #x1 :zte #x1 :ztst (gs-ztest greater-equal)) 1 lev)
|
||||||
(reset! (-> *perf-stats* data 5))
|
(reset! (-> *perf-stats* data 5))
|
||||||
|
|
||||||
(draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0)
|
;; (draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0)
|
||||||
(update-wait-stats
|
(update-wait-stats
|
||||||
(-> *perf-stats* data 5)
|
(-> *perf-stats* data 5)
|
||||||
(the-as uint 0)
|
(the-as uint 0)
|
||||||
|
@ -596,7 +596,7 @@
|
||||||
lev
|
lev
|
||||||
)
|
)
|
||||||
(reset! (-> *perf-stats* data 5))
|
(reset! (-> *perf-stats* data 5))
|
||||||
(draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0)
|
;; (draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0)
|
||||||
(update-wait-stats
|
(update-wait-stats
|
||||||
(-> *perf-stats* data 5)
|
(-> *perf-stats* data 5)
|
||||||
(the-as uint 0)
|
(the-as uint 0)
|
||||||
|
|
|
@ -7,22 +7,8 @@
|
||||||
|
|
||||||
;; contains various math helpers
|
;; contains various math helpers
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
;;;; float macros
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
|
|
||||||
|
|
||||||
(defmacro fabs (x)
|
|
||||||
"Floating point absolute value"
|
|
||||||
;; in GOAL this was implemented by the compiler.
|
|
||||||
;; at some point, this could be more optimized.
|
|
||||||
;; MIPS has an explicit abs.s instruction, but x86-64 doesn't.
|
|
||||||
;; modern clang on O3 does a comiss/branch and this is probably pretty close.
|
|
||||||
`(if (< (the float ,x) 0)
|
|
||||||
(- (the float ,x))
|
|
||||||
(the float ,x))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;;; float utility
|
;;;; float utility
|
||||||
|
|
|
@ -751,66 +751,83 @@
|
||||||
|
|
||||||
(defun vector-normalize! ((arg0 vector) (arg1 float))
|
(defun vector-normalize! ((arg0 vector) (arg1 float))
|
||||||
"Modify arg0 in place to have length arg1 for its xyz components. The w part is not changed."
|
"Modify arg0 in place to have length arg1 for its xyz components. The w part is not changed."
|
||||||
(rlet ((acc :class vf)
|
(let ((f0-0 (vector-length arg0)))
|
||||||
(Q :class vf)
|
(let ((v1-1 (/ arg1 f0-0)))
|
||||||
(vf0 :class vf)
|
(set! (-> arg0 data 0) (* (-> arg0 data 0) v1-1))
|
||||||
(vf1 :class vf)
|
(set! (-> arg0 data 1) (* (-> arg0 data 1) v1-1))
|
||||||
(vf2 :class vf)
|
(set! (-> arg0 data 2) (* (-> arg0 data 2) v1-1))
|
||||||
(vf3 :class vf)
|
)
|
||||||
)
|
|
||||||
(init-vf0-vector)
|
|
||||||
(.lvf vf1 (&-> arg0 quad))
|
|
||||||
(.mul.vf vf2 vf1 vf1 :mask #b111)
|
|
||||||
(let ((v1-0 arg1))
|
|
||||||
(.mov vf3 v1-0)
|
|
||||||
)
|
)
|
||||||
(.mul.x.vf acc vf0 vf2 :mask #b1000)
|
arg0
|
||||||
(.add.mul.y.vf acc vf0 vf2 acc :mask #b1000)
|
; (rlet ((acc :class vf)
|
||||||
(.add.mul.z.vf vf2 vf0 vf2 acc :mask #b1000)
|
; (Q :class vf)
|
||||||
(.isqrt.vf Q vf3 vf2 :fsf #b0 :ftf #b11)
|
; (vf0 :class vf)
|
||||||
(.wait.vf)
|
; (vf1 :class vf)
|
||||||
(.mul.vf vf1 vf1 Q :mask #b111)
|
; (vf2 :class vf)
|
||||||
(.nop.vf)
|
; (vf3 :class vf)
|
||||||
(.nop.vf)
|
; )
|
||||||
(.nop.vf)
|
; (init-vf0-vector)
|
||||||
(.svf (&-> arg0 quad) vf1)
|
; (.lvf vf1 (&-> arg0 quad))
|
||||||
arg0
|
; (.mul.vf vf2 vf1 vf1 :mask #b111)
|
||||||
)
|
; (let ((v1-0 arg1))
|
||||||
|
; (.mov vf3 v1-0)
|
||||||
|
; )
|
||||||
|
; (.mul.x.vf acc vf0 vf2 :mask #b1000)
|
||||||
|
; (.add.mul.y.vf acc vf0 vf2 acc :mask #b1000)
|
||||||
|
; (.add.mul.z.vf vf2 vf0 vf2 acc :mask #b1000)
|
||||||
|
; (.isqrt.vf Q vf3 vf2 :fsf #b0 :ftf #b11)
|
||||||
|
; (.wait.vf)
|
||||||
|
; (.mul.vf vf1 vf1 Q :mask #b111)
|
||||||
|
; (.nop.vf)
|
||||||
|
; (.nop.vf)
|
||||||
|
; (.nop.vf)
|
||||||
|
; (.svf (&-> arg0 quad) vf1)
|
||||||
|
; arg0
|
||||||
|
; )
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun vector-normalize-ret-len! ((arg0 vector) (arg1 float))
|
(defun vector-normalize-ret-len! ((arg0 vector) (arg1 float))
|
||||||
"Modify arg0 in place to have length arg1 for its xyz components.
|
"Modify arg0 in place to have length arg1 for its xyz components.
|
||||||
The w part isn't changed and the _original_ length is returned."
|
The w part isn't changed and the _original_ length is returned."
|
||||||
(local-vars (v1-1 float))
|
(let ((f0-0 (vector-length arg0)))
|
||||||
(rlet ((acc :class vf)
|
(let ((v1-1 (/ arg1 f0-0)))
|
||||||
(Q :class vf)
|
(set! (-> arg0 data 0) (* (-> arg0 data 0) v1-1))
|
||||||
(vf0 :class vf)
|
(set! (-> arg0 data 1) (* (-> arg0 data 1) v1-1))
|
||||||
(vf1 :class vf)
|
(set! (-> arg0 data 2) (* (-> arg0 data 2) v1-1))
|
||||||
(vf2 :class vf)
|
)
|
||||||
(vf3 :class vf)
|
f0-0
|
||||||
)
|
|
||||||
(init-vf0-vector)
|
|
||||||
(.lvf vf1 (&-> arg0 quad))
|
|
||||||
(.mul.vf vf2 vf1 vf1 :mask #b111)
|
|
||||||
(let ((v1-0 arg1))
|
|
||||||
(.mov vf3 v1-0)
|
|
||||||
)
|
)
|
||||||
(.mul.x.vf acc vf0 vf2 :mask #b1000)
|
|
||||||
(.add.mul.y.vf acc vf0 vf2 acc :mask #b1000)
|
; (local-vars (v1-1 float))
|
||||||
(.add.mul.z.vf vf2 vf0 vf2 acc :mask #b1000)
|
; (rlet ((acc :class vf)
|
||||||
(.isqrt.vf Q vf3 vf2 :fsf #b0 :ftf #b11)
|
; (Q :class vf)
|
||||||
(.add.w.vf vf2 vf0 vf2 :mask #b1)
|
; (vf0 :class vf)
|
||||||
(.mov v1-1 vf2)
|
; (vf1 :class vf)
|
||||||
(let ((v0-0 (sqrtf v1-1)))
|
; (vf2 :class vf)
|
||||||
(.wait.vf)
|
; (vf3 :class vf)
|
||||||
(.mul.vf vf1 vf1 Q :mask #b111)
|
; )
|
||||||
(.nop.vf)
|
; (init-vf0-vector)
|
||||||
(.nop.vf)
|
; (.lvf vf1 (&-> arg0 quad))
|
||||||
(.nop.vf)
|
; (.mul.vf vf2 vf1 vf1 :mask #b111)
|
||||||
(.svf (&-> arg0 quad) vf1)
|
; (let ((v1-0 arg1))
|
||||||
v0-0
|
; (.mov vf3 v1-0)
|
||||||
)
|
; )
|
||||||
)
|
; (.mul.x.vf acc vf0 vf2 :mask #b1000)
|
||||||
|
; (.add.mul.y.vf acc vf0 vf2 acc :mask #b1000)
|
||||||
|
; (.add.mul.z.vf vf2 vf0 vf2 acc :mask #b1000)
|
||||||
|
; (.isqrt.vf Q vf3 vf2 :fsf #b0 :ftf #b11)
|
||||||
|
; (.add.w.vf vf2 vf0 vf2 :mask #b1)
|
||||||
|
; (.mov v1-1 vf2)
|
||||||
|
; (let ((v0-0 (sqrtf v1-1)))
|
||||||
|
; (.wait.vf)
|
||||||
|
; (.mul.vf vf1 vf1 Q :mask #b111)
|
||||||
|
; (.nop.vf)
|
||||||
|
; (.nop.vf)
|
||||||
|
; (.nop.vf)
|
||||||
|
; (.svf (&-> arg0 quad) vf1)
|
||||||
|
; v0-0
|
||||||
|
; )
|
||||||
|
; )
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun vector-normalize-copy! ((arg0 vector) (arg1 vector) (arg2 float))
|
(defun vector-normalize-copy! ((arg0 vector) (arg1 vector) (arg2 float))
|
||||||
|
|
|
@ -1938,7 +1938,7 @@
|
||||||
(set! arg0 (get-or-create-continue! *game-info*))
|
(set! arg0 (get-or-create-continue! *game-info*))
|
||||||
)
|
)
|
||||||
(set-continue! *game-info* arg0)
|
(set-continue! *game-info* arg0)
|
||||||
(stack-size-set! (-> self main-thread) 1024)
|
(stack-size-set! (-> self main-thread) 4096) ;; changed for PC
|
||||||
(logior! (-> self mask) (process-mask target))
|
(logior! (-> self mask) (process-mask target))
|
||||||
(set! (-> self state-hook) (the-as (function none :behavior target) nothing))
|
(set! (-> self state-hook) (the-as (function none :behavior target) nothing))
|
||||||
(let ((s5-0 (new 'process 'control-info self (collide-list-enum player))))
|
(let ((s5-0 (new 'process 'control-info self (collide-list-enum player))))
|
||||||
|
@ -2079,8 +2079,8 @@
|
||||||
|
|
||||||
;; hack for not starting target.
|
;; hack for not starting target.
|
||||||
(defun start ((arg0 symbol) (arg1 continue-point))
|
(defun start ((arg0 symbol) (arg1 continue-point))
|
||||||
(set! *target* #f)
|
; (set! *target* #f)
|
||||||
(return *target*)
|
; (return *target*)
|
||||||
|
|
||||||
(set! (-> *level* border?) #f)
|
(set! (-> *level* border?) #f)
|
||||||
(set! (-> *setting-control* default border-mode) #f)
|
(set! (-> *setting-control* default border-mode) #f)
|
||||||
|
@ -2100,6 +2100,8 @@
|
||||||
(set! *target* #f)
|
(set! *target* #f)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
;; hack added.
|
||||||
|
(set! *display-target-marks* #t)
|
||||||
*target*
|
*target*
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -277,17 +277,21 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(let ((a0-26 (-> self skel effect)))
|
|
||||||
(if a0-26
|
(#unless TARGET_STARTUP_HACKS
|
||||||
(TODO-RENAME-9 a0-26)
|
(let ((a0-26 (-> self skel effect)))
|
||||||
)
|
(if a0-26
|
||||||
)
|
(TODO-RENAME-9 a0-26)
|
||||||
(if (logtest? (-> self skel status) 72)
|
)
|
||||||
(merc-blend-shape self)
|
)
|
||||||
)
|
(if (logtest? (-> self skel status) 72)
|
||||||
(if (logtest? (-> self skel status) 384)
|
(merc-blend-shape self)
|
||||||
(merc-eye-anim self)
|
)
|
||||||
)
|
(if (logtest? (-> self skel status) 384)
|
||||||
|
(merc-eye-anim self)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -862,6 +862,21 @@
|
||||||
(set! (-> gp-0 proc) #f)
|
(set! (-> gp-0 proc) #f)
|
||||||
(set! (-> gp-0 ignore-pat) (the-as uint 1))
|
(set! (-> gp-0 ignore-pat) (the-as uint 1))
|
||||||
(set! (-> gp-0 solid-only) #t)
|
(set! (-> gp-0 solid-only) #t)
|
||||||
|
|
||||||
|
;; NOTE: added this.
|
||||||
|
;; exit duck has failed for 2 reasons:
|
||||||
|
;; there seems to be a bogus triangle in the cache sometimes (rare)
|
||||||
|
;; sometimes it thinks we hit the spheres, but we don't.
|
||||||
|
; (dotimes (i 2)
|
||||||
|
; (add-debug-sphere
|
||||||
|
; #t
|
||||||
|
; (bucket-id debug-draw0)
|
||||||
|
; (-> (the (inline-array sphere) (-> gp-0 spheres)) i)
|
||||||
|
; (-> (the (inline-array sphere) (-> gp-0 spheres)) i w)
|
||||||
|
; (new 'static 'rgba :r #x80 :a #x80)
|
||||||
|
; )
|
||||||
|
; )
|
||||||
|
|
||||||
(if (fill-and-probe-using-spheres *collide-cache* gp-0)
|
(if (fill-and-probe-using-spheres *collide-cache* gp-0)
|
||||||
#f
|
#f
|
||||||
#t
|
#t
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -141,52 +141,34 @@
|
||||||
;; incrementing counter to make the test input move around.
|
;; incrementing counter to make the test input move around.
|
||||||
(define *debug-counter* 0)
|
(define *debug-counter* 0)
|
||||||
|
|
||||||
(defun debug-draw-collide-work ()
|
(defun debug-draw-collide-work ((my-off float))
|
||||||
|
(when (not (paused?))
|
||||||
(+! *debug-counter* 1)
|
(+! *debug-counter* 1)
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
;; create a test input that moves around sandover
|
;; create a test input that moves around sandover
|
||||||
(let ((origin (new 'static 'vector :y (meters 7.0) :x (meters 5.) :z (meters 0.0)))
|
(let ((origin (new 'static 'vector :y (meters 7.0) :x (meters 5.) :z (meters 0.0)))
|
||||||
(line (new 'static 'vector :y (meters 5.0) :x (meters -5.0)))
|
(line (new 'static 'vector :y (meters 5.0) :x (meters -5.0)))
|
||||||
(radius (meters 0.5))
|
(radius (meters 2.0))
|
||||||
|
(val (+ my-off (* 0.003 (the float *debug-counter*))))
|
||||||
)
|
)
|
||||||
|
|
||||||
(set! (-> line z) (* (sin (degrees (the float *debug-counter*))) (meters 15.0)))
|
(set! (-> line z) (* (sin (degrees val)) (meters 35.0)))
|
||||||
(set! (-> line x) (* (cos (degrees (the float *debug-counter*))) (meters 15.0)))
|
(set! (-> line x) (* (cos (degrees val)) (meters 35.0)))
|
||||||
|
|
||||||
(let ((dbg2 (/ (the float *debug-counter*) 2)))
|
(let ((dbg2 (/ val 2)))
|
||||||
(set! (-> origin x) (* (sin (degrees dbg2)) (meters 30.)))
|
(set! (-> origin x) (* (sin (degrees dbg2)) (meters 100.)))
|
||||||
(set! (-> origin z) (* (cos (* 3.0 (degrees dbg2))) (meters 30.)))
|
(set! (-> origin z) (* (cos (* 3.0 (degrees dbg2))) (meters 100.)))
|
||||||
(+! (-> origin x) (meters -50.))
|
(+! (-> origin x) (meters -50.))
|
||||||
)
|
)
|
||||||
|
#|
|
||||||
|
;;; PROBE (at the frag finding level)
|
||||||
|
|
||||||
;; setup the collide work
|
;; setup the collide work
|
||||||
(setup-collide-for-line-sphere origin line radius)
|
(setup-collide-for-line-sphere origin line radius)
|
||||||
|
|
||||||
;; draw the line we're going to check
|
|
||||||
(add-debug-line
|
|
||||||
#t
|
|
||||||
(bucket-id debug-draw0)
|
|
||||||
origin
|
|
||||||
(vector+! (new 'stack-no-clear 'vector) origin line)
|
|
||||||
(new 'static 'rgba :r #x80)
|
|
||||||
#f
|
|
||||||
(the rgba -1)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; debug draw spheres along the line
|
|
||||||
(dotimes (i 10)
|
|
||||||
(add-debug-sphere
|
|
||||||
#t
|
|
||||||
(bucket-id debug-draw0)
|
|
||||||
(vector-lerp! (new 'stack-no-clear 'vector)
|
|
||||||
origin
|
|
||||||
(vector+! (new 'stack-no-clear 'vector) origin line)
|
|
||||||
(/ (the float i) 9.0)
|
|
||||||
)
|
|
||||||
radius
|
|
||||||
(new 'static 'rgba :g #x80 :r #x80 :b #x80 :a #x80)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
;; clear collide list
|
;; clear collide list
|
||||||
(set! (-> *collide-list* num-items) 0)
|
(set! (-> *collide-list* num-items) 0)
|
||||||
|
@ -246,23 +228,150 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|#
|
||||||
|
|
||||||
|
;; CCACHE (fill from bounding box)
|
||||||
|
(let ((bbox-fake (new 'stack 'bounding-box))
|
||||||
|
(bbox (new 'stack 'bounding-box)))
|
||||||
|
|
||||||
|
;; make box
|
||||||
|
(set! (-> bbox-fake min quad) (-> origin quad))
|
||||||
|
(vector+! (-> bbox-fake max) origin line)
|
||||||
|
|
||||||
|
(dotimes (i 3)
|
||||||
|
(set! (-> bbox min data i) (fmin (-> bbox-fake min data i) (-> bbox-fake max data i)))
|
||||||
|
(set! (-> bbox max data i) (fmax (-> bbox-fake min data i) (-> bbox-fake max data i)))
|
||||||
|
)
|
||||||
|
(set! (-> bbox min w) 1.0)
|
||||||
|
(set! (-> bbox max w) 1.0)
|
||||||
|
|
||||||
|
;; BBOX
|
||||||
|
;; draw box
|
||||||
|
;(add-debug-box #t (bucket-id debug-draw0) (-> bbox min) (-> bbox max) (new 'static 'rgba :g #x30 :a #x80))
|
||||||
|
;; now fill!
|
||||||
|
; (fill-using-bounding-box *collide-cache*
|
||||||
|
; bbox
|
||||||
|
; (collide-kind background)
|
||||||
|
; (the process-drawable #f)
|
||||||
|
; (the pat-surface 0)
|
||||||
|
; )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Y PROBE
|
||||||
|
; (+! (-> bbox min y) (meters 8.0))
|
||||||
|
; (let ((vec (new 'stack-no-clear 'vector)))
|
||||||
|
; (set! (-> vec quad) (-> bbox min quad))
|
||||||
|
; (-! (-> vec y) (meters 20.0))
|
||||||
|
; (add-debug-line
|
||||||
|
; #t
|
||||||
|
; (bucket-id debug-draw0)
|
||||||
|
; (-> bbox min)
|
||||||
|
; vec
|
||||||
|
; (new 'static 'rgba :r #x80 :a #x80)
|
||||||
|
; #f
|
||||||
|
; (the rgba -1)
|
||||||
|
; )
|
||||||
|
; )
|
||||||
|
; (fill-using-y-probe *collide-cache* (-> bbox min) (meters 20.0) (collide-kind background) (the process-drawable #f) (the uint 0))
|
||||||
|
|
||||||
|
;; LINE SPHERE
|
||||||
|
; (fill-using-line-sphere *collide-cache* origin line radius (collide-kind background) (the process-drawable #f) 0)
|
||||||
|
; ;; draw the line we're going to check
|
||||||
|
; (add-debug-line
|
||||||
|
; #t
|
||||||
|
; (bucket-id debug-draw0)
|
||||||
|
; origin
|
||||||
|
; (vector+! (new 'stack-no-clear 'vector) origin line)
|
||||||
|
; (new 'static 'rgba :r #x80)
|
||||||
|
; #f
|
||||||
|
; (the rgba -1)
|
||||||
|
; )
|
||||||
|
|
||||||
|
; ;; debug draw spheres along the line
|
||||||
|
; (dotimes (i 10)
|
||||||
|
; (add-debug-sphere
|
||||||
|
; #t
|
||||||
|
; (bucket-id debug-draw0)
|
||||||
|
; (vector-lerp! (new 'stack-no-clear 'vector)
|
||||||
|
; origin
|
||||||
|
; (vector+! (new 'stack-no-clear 'vector) origin line)
|
||||||
|
; (/ (the float i) 9.0)
|
||||||
|
; )
|
||||||
|
; radius
|
||||||
|
; (new 'static 'rgba :g #x80 :r #x80 :b #x80 :a #x80)
|
||||||
|
; )
|
||||||
|
; )
|
||||||
|
|
||||||
|
;; Y probe (actual probe)
|
||||||
|
(+! (-> bbox min y) (meters 8.0))
|
||||||
|
(let ((vec (new 'stack-no-clear 'vector)))
|
||||||
|
(set! (-> vec quad) (-> bbox min quad))
|
||||||
|
(-! (-> vec y) (meters 20.0))
|
||||||
|
; (add-debug-line
|
||||||
|
; #t
|
||||||
|
; (bucket-id debug-draw0)
|
||||||
|
; (-> bbox min)
|
||||||
|
; vec
|
||||||
|
; (new 'static 'rgba :r #x80 :a #x80)
|
||||||
|
; #f
|
||||||
|
; (the rgba -1)
|
||||||
|
; )
|
||||||
|
)
|
||||||
|
|
||||||
|
(let ((result (new 'stack-no-clear 'collide-tri-result)))
|
||||||
|
|
||||||
|
(let ((u (fill-and-probe-using-y-probe *collide-cache* (-> bbox min) (meters 20.0) (collide-kind background) (the process-drawable #f) result (the uint 0))))
|
||||||
|
(-! (-> bbox min y) (* u (meters 20.0)))
|
||||||
|
;; (format *stdcon* "u = ~f : ~`vector`P ~%" u (-> result vertex 0))
|
||||||
|
(add-debug-sphere
|
||||||
|
#t
|
||||||
|
(bucket-id debug-draw0)
|
||||||
|
(-> bbox min)
|
||||||
|
(meters 2.0)
|
||||||
|
(new 'static 'rgba :r #x80 :a #x80)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
;(add-debug-outline-triangle #t (bucket-id debug-draw1) (-> result vertex 0) (-> result vertex 1) (-> result vertex 2) (new 'static 'rgba :r #x80 :g #x80 :a #x80))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;(debug-draw *collide-cache*)
|
||||||
|
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
#f
|
#f
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
(defun start-debug-drawer ()
|
(defun start-debug-drawer ()
|
||||||
(kill-by-name 'debug-drawer *active-pool*)
|
;;(kill-by-name 'debug-drawer *active-pool*)
|
||||||
(let ((proc (get-process *nk-dead-pool* process 1024)))
|
(let ((proc (get-process *nk-dead-pool* process 1024)))
|
||||||
(activate proc *active-pool* 'debug-drawer *kernel-dram-stack*)
|
(activate proc *active-pool* 'debug-drawer *kernel-dram-stack*)
|
||||||
(run-next-time-in-process
|
(run-next-time-in-process
|
||||||
proc
|
proc
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(while #t
|
(let ((my-off (rand-vu-float-range 0.0 1000.0)))
|
||||||
(debug-draw-collide-work)
|
(while #t
|
||||||
(suspend)
|
(debug-draw-collide-work my-off)
|
||||||
|
(suspend)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
(defun start-100-debug-drawer ()
|
||||||
|
(dotimes (i 100)
|
||||||
|
(start-debug-drawer)
|
||||||
|
)
|
||||||
|
)
|
|
@ -257,6 +257,10 @@
|
||||||
"FUCV6"
|
"FUCV6"
|
||||||
"FUCV7"
|
"FUCV7"
|
||||||
"FUCV8"
|
"FUCV8"
|
||||||
|
"EIA1"
|
||||||
|
"EIA2"
|
||||||
|
"EIA3"
|
||||||
|
"EIA4"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -818,6 +818,25 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;;;; float macros
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
|
(defmacro fabs (x)
|
||||||
|
"Floating point absolute value"
|
||||||
|
;; in GOAL this was implemented by the compiler.
|
||||||
|
;; at some point, this could be more optimized.
|
||||||
|
;; MIPS has an explicit abs.s instruction, but x86-64 doesn't.
|
||||||
|
;; modern clang on O3 does a comiss/branch and this is probably pretty close.
|
||||||
|
`(if (< (the float ,x) 0)
|
||||||
|
(- (the float ,x))
|
||||||
|
(the float ,x))
|
||||||
|
)
|
||||||
|
|
||||||
|
(defmacro sqrtf (x)
|
||||||
|
`(sqrtf-no-fabs (fabs ,x))
|
||||||
|
)
|
||||||
|
|
||||||
;; load the default project
|
;; load the default project
|
||||||
(load-project "goal_src/game.gp")
|
(load-project "goal_src/game.gp")
|
||||||
|
|
|
@ -219,6 +219,7 @@
|
||||||
)
|
)
|
||||||
(else
|
(else
|
||||||
(msg-err "illegal attempt change stack size of ~A after more heap allocation has occured.~%" proc)
|
(msg-err "illegal attempt change stack size of ~A after more heap allocation has occured.~%" proc)
|
||||||
|
(break)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
16384.0
|
16384.0
|
||||||
)
|
)
|
||||||
(the-as object (if (zero? (logand (-> obj nav-enemy-flags) 256))
|
(the-as object (if (zero? (logand (-> obj nav-enemy-flags) 256))
|
||||||
(respond-to-collisions! (-> obj collide-info))
|
(do-push-aways! (-> obj collide-info))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -716,7 +716,7 @@
|
||||||
((the-as (function none) t9-0))
|
((the-as (function none) t9-0))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -656,7 +656,7 @@
|
||||||
(vector-seek! gp-0 a1-0 (* (-> self state-float 0) (-> *display* seconds-per-frame)))
|
(vector-seek! gp-0 a1-0 (* (-> self state-float 0) (-> *display* seconds-per-frame)))
|
||||||
(move-to-point! (-> self root-override) gp-0)
|
(move-to-point! (-> self root-override) gp-0)
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(seek-toward-heading-vec! (-> self root-override) (-> self path-vector) 131072.0 300)
|
(seek-toward-heading-vec! (-> self root-override) (-> self path-vector) 131072.0 300)
|
||||||
(spool-push *art-control* "pelican-spit-ext" 0 self -99.0)
|
(spool-push *art-control* "pelican-spit-ext" 0 self -99.0)
|
||||||
(none)
|
(none)
|
||||||
|
|
|
@ -1667,7 +1667,7 @@
|
||||||
(meters 2.0)
|
(meters 2.0)
|
||||||
(-> *TARGET-bank* smack-surface-height)
|
(-> *TARGET-bank* smack-surface-height)
|
||||||
(the-as process #f)
|
(the-as process #f)
|
||||||
(the-as (state target) target-flut-hit)
|
target-flut-hit
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(if (and (logtest? (-> self water flags) 512)
|
(if (and (logtest? (-> self water flags) 512)
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
(let ((v1-0 arg2))
|
(let ((v1-0 arg2))
|
||||||
(the-as object (cond
|
(the-as object (cond
|
||||||
((= v1-0 'touch)
|
((= v1-0 'touch)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(when (-> self dangerous)
|
(when (-> self dangerous)
|
||||||
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
||||||
(set! (-> a1-1 from) self)
|
(set! (-> a1-1 from) self)
|
||||||
|
@ -172,7 +172,7 @@
|
||||||
((!= v1-10 (-> self player-attack-id))
|
((!= v1-10 (-> self player-attack-id))
|
||||||
(set! (-> self player-attack-id) (the-as int v1-10))
|
(set! (-> self player-attack-id) (the-as int v1-10))
|
||||||
(when (-> self vulnerable)
|
(when (-> self vulnerable)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(go darkvine-retreat)
|
(go darkvine-retreat)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -143,7 +143,7 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(else
|
(else
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
||||||
(set! (-> a1-3 from) self)
|
(set! (-> a1-3 from) self)
|
||||||
(set! (-> a1-3 num-params) 2)
|
(set! (-> a1-3 num-params) 2)
|
||||||
|
@ -734,7 +734,7 @@ junglesnake-default-event-handler
|
||||||
(let ((v1-4 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) prims 0)))
|
(let ((v1-4 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) prims 0)))
|
||||||
(logior! (-> v1-4 prim-core action) (collide-action solid))
|
(logior! (-> v1-4 prim-core action) (collide-action solid))
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> obj root-override))
|
(do-push-aways! (-> obj root-override))
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
(none)
|
(none)
|
||||||
|
|
|
@ -2384,7 +2384,7 @@
|
||||||
:post
|
:post
|
||||||
(behavior ()
|
(behavior ()
|
||||||
(plant-boss-post)
|
(plant-boss-post)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -2424,7 +2424,7 @@
|
||||||
(let ((gp-1 (-> *display* base-frame-counter)))
|
(let ((gp-1 (-> *display* base-frame-counter)))
|
||||||
(until (>= (- (-> *display* base-frame-counter) gp-1) 1500)
|
(until (>= (- (-> *display* base-frame-counter) gp-1) 1500)
|
||||||
(transform-post)
|
(transform-post)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(suspend)
|
(suspend)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -469,7 +469,7 @@
|
||||||
(-> self root-overlay)
|
(-> self root-overlay)
|
||||||
(the-as uint 1)
|
(the-as uint 1)
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> self root-overlay))
|
(do-push-aways! (-> self root-overlay))
|
||||||
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
||||||
(set! (-> a1-3 from) self)
|
(set! (-> a1-3 from) self)
|
||||||
(set! (-> a1-3 num-params) 2)
|
(set! (-> a1-3 num-params) 2)
|
||||||
|
|
|
@ -363,7 +363,7 @@
|
||||||
(set! (-> gp-1 y) 0.0)
|
(set! (-> gp-1 y) 0.0)
|
||||||
(vector-normalize! gp-1 4096.0)
|
(vector-normalize! gp-1 4096.0)
|
||||||
(move-by-vector! (-> *target* control) gp-1)
|
(move-by-vector! (-> *target* control) gp-1)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(detect-riders! (-> self root-override))
|
(detect-riders! (-> self root-override))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -205,7 +205,7 @@
|
||||||
(set! (-> a1-0 to) (the-as process 1))
|
(set! (-> a1-0 to) (the-as process 1))
|
||||||
(set! (-> a1-0 from) (the-as process *touching-list*))
|
(set! (-> a1-0 from) (the-as process *touching-list*))
|
||||||
(if (find-overlapping-shapes (-> self root-override) (the-as overlaps-others-params a1-0))
|
(if (find-overlapping-shapes (-> self root-override) (the-as overlaps-others-params a1-0))
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(none)
|
(none)
|
||||||
|
|
|
@ -158,7 +158,7 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(when (and v1-2 (< 8192.0 (- (-> v1-2 root trans y) (-> self root-override trans y))))
|
(when (and v1-2 (< 8192.0 (- (-> v1-2 root trans y) (-> self root-override trans y))))
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(send-shove-back
|
(send-shove-back
|
||||||
(-> self root-override)
|
(-> self root-override)
|
||||||
arg0
|
arg0
|
||||||
|
|
|
@ -296,6 +296,11 @@ class Compiler {
|
||||||
u8 sa,
|
u8 sa,
|
||||||
Env* env,
|
Env* env,
|
||||||
IntegerMathKind kind);
|
IntegerMathKind kind);
|
||||||
|
Val* compile_floating_point_division(const goos::Object& form,
|
||||||
|
const TypeSpec& result_type,
|
||||||
|
RegVal* a,
|
||||||
|
RegVal* b,
|
||||||
|
Env* env);
|
||||||
|
|
||||||
Val* compile_format_string(const goos::Object& form,
|
Val* compile_format_string(const goos::Object& form,
|
||||||
Env* env,
|
Env* env,
|
||||||
|
|
|
@ -251,7 +251,7 @@ const std::unordered_map<
|
||||||
{"&+", &Compiler::compile_pointer_add},
|
{"&+", &Compiler::compile_pointer_add},
|
||||||
{"fmax", &Compiler::compile_fmax},
|
{"fmax", &Compiler::compile_fmax},
|
||||||
{"fmin", &Compiler::compile_fmin},
|
{"fmin", &Compiler::compile_fmin},
|
||||||
{"sqrtf", &Compiler::compile_sqrtf},
|
{"sqrtf-no-fabs", &Compiler::compile_sqrtf},
|
||||||
|
|
||||||
// BUILDER (build-dgo/build-cgo?)
|
// BUILDER (build-dgo/build-cgo?)
|
||||||
{"build-dgos", &Compiler::compile_build_dgo},
|
{"build-dgos", &Compiler::compile_build_dgo},
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "goalc/compiler/Compiler.h"
|
#include "goalc/compiler/Compiler.h"
|
||||||
#include "common/util/BitUtils.h"
|
#include "common/util/BitUtils.h"
|
||||||
|
#include <cfloat>
|
||||||
|
|
||||||
MathMode Compiler::get_math_mode(const TypeSpec& ts) {
|
MathMode Compiler::get_math_mode(const TypeSpec& ts) {
|
||||||
if (m_ts.tc(m_ts.make_typespec("binteger"), ts)) {
|
if (m_ts.tc(m_ts.make_typespec("binteger"), ts)) {
|
||||||
|
@ -371,6 +372,61 @@ Val* Compiler::compile_sub(const goos::Object& form, const goos::Object& rest, E
|
||||||
return get_none();
|
return get_none();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Val* Compiler::compile_floating_point_division(const goos::Object& form,
|
||||||
|
const TypeSpec& result_type,
|
||||||
|
RegVal* a,
|
||||||
|
RegVal* b,
|
||||||
|
Env* env) {
|
||||||
|
constexpr bool use_accurate = true;
|
||||||
|
auto result = env->make_fpr(result_type);
|
||||||
|
|
||||||
|
if (use_accurate) {
|
||||||
|
auto fenv = env->function_env();
|
||||||
|
auto end_label = fenv->alloc_unnamed_label();
|
||||||
|
end_label->func = fenv;
|
||||||
|
end_label->idx = -10; // placeholder
|
||||||
|
|
||||||
|
auto zero = compile_float(0.0, env, fenv->segment_for_static_data())->to_fpr(form, env);
|
||||||
|
Condition zero_check;
|
||||||
|
zero_check.kind = ConditionKind::EQUAL;
|
||||||
|
zero_check.a = zero;
|
||||||
|
zero_check.b = b;
|
||||||
|
zero_check.is_float = true;
|
||||||
|
|
||||||
|
// check for divide by zero
|
||||||
|
auto branch_ir = std::make_unique<IR_ConditionalBranch>(zero_check, Label());
|
||||||
|
auto branch_ir_ref = branch_ir.get();
|
||||||
|
env->emit(form, std::move(branch_ir));
|
||||||
|
|
||||||
|
// code for not dividing by zero
|
||||||
|
env->emit_ir<IR_RegSet>(form, result, a);
|
||||||
|
env->emit_ir<IR_FloatMath>(form, FloatMathKind::DIV_SS, result, b);
|
||||||
|
|
||||||
|
env->emit_ir<IR_GotoLabel>(form, end_label);
|
||||||
|
|
||||||
|
branch_ir_ref->mark_as_resolved();
|
||||||
|
branch_ir_ref->label.idx = fenv->code().size();
|
||||||
|
|
||||||
|
auto flt_max = compile_integer(0x7f7fffff, env)->to_gpr(form, env);
|
||||||
|
auto mask = compile_integer(0xf0000000, env)->to_gpr(form, env);
|
||||||
|
auto temp_int = env->make_gpr(result_type);
|
||||||
|
env->emit_ir<IR_RegSet>(form, temp_int, a);
|
||||||
|
env->emit_ir<IR_IntegerMath>(form, IntegerMathKind::AND_64, temp_int, mask);
|
||||||
|
env->emit_ir<IR_IntegerMath>(form, IntegerMathKind::XOR_64, flt_max, temp_int);
|
||||||
|
env->emit_ir<IR_RegSet>(form, temp_int, b);
|
||||||
|
env->emit_ir<IR_IntegerMath>(form, IntegerMathKind::AND_64, temp_int, mask);
|
||||||
|
env->emit_ir<IR_IntegerMath>(form, IntegerMathKind::XOR_64, flt_max, temp_int);
|
||||||
|
env->emit_ir<IR_RegSet>(form, result, flt_max);
|
||||||
|
|
||||||
|
end_label->idx = fenv->code().size();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
env->emit_ir<IR_RegSet>(form, result, a);
|
||||||
|
env->emit_ir<IR_FloatMath>(form, FloatMathKind::DIV_SS, result, b);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
Val* Compiler::compile_div(const goos::Object& form, const goos::Object& rest, Env* env) {
|
Val* Compiler::compile_div(const goos::Object& form, const goos::Object& rest, Env* env) {
|
||||||
auto args = get_va(form, rest);
|
auto args = get_va(form, rest);
|
||||||
if (!args.named.empty() || args.unnamed.size() != 2) {
|
if (!args.named.empty() || args.unnamed.size() != 2) {
|
||||||
|
@ -427,13 +483,10 @@ Val* Compiler::compile_div(const goos::Object& form, const goos::Object& rest, E
|
||||||
}
|
}
|
||||||
|
|
||||||
case MATH_FLOAT: {
|
case MATH_FLOAT: {
|
||||||
auto result = env->make_fpr(first_type);
|
auto a = first_val->to_fpr(form, env);
|
||||||
env->emit_ir<IR_RegSet>(form, result, first_val->to_fpr(form, env));
|
auto b = to_math_type(form, compile_error_guard(args.unnamed.at(1), env), math_type, env)
|
||||||
env->emit_ir<IR_FloatMath>(
|
->to_fpr(form, env);
|
||||||
form, FloatMathKind::DIV_SS, result,
|
return compile_floating_point_division(form, first_type, a, b, env);
|
||||||
to_math_type(form, compile_error_guard(args.unnamed.at(1), env), math_type, env)
|
|
||||||
->to_fpr(form, env));
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case MATH_INVALID:
|
case MATH_INVALID:
|
||||||
|
|
2
test/decompiler/reference/engine/camera/camera-h_REF.gc
generated
vendored
2
test/decompiler/reference/engine/camera/camera-h_REF.gc
generated
vendored
|
@ -139,7 +139,7 @@
|
||||||
(print-nth-point (_type_ int) none 11)
|
(print-nth-point (_type_ int) none 11)
|
||||||
(TODO-RENAME-12 (_type_) none 12)
|
(TODO-RENAME-12 (_type_) none 12)
|
||||||
(TODO-RENAME-13 (_type_ int) none 13)
|
(TODO-RENAME-13 (_type_ int) none 13)
|
||||||
(TODO-RENAME-14 (_type_ vector) none 14)
|
(TODO-RENAME-14 (_type_ tracking-spline-sampler) none 14)
|
||||||
(TODO-RENAME-15 (_type_) none 15)
|
(TODO-RENAME-15 (_type_) none 15)
|
||||||
(TODO-RENAME-16 (_type_ float) none 16)
|
(TODO-RENAME-16 (_type_ float) none 16)
|
||||||
(TODO-RENAME-17 (_type_ vector float float symbol) int 17)
|
(TODO-RENAME-17 (_type_ vector float float symbol) int 17)
|
||||||
|
|
20
test/decompiler/reference/engine/camera/camera_REF.gc
generated
vendored
20
test/decompiler/reference/engine/camera/camera_REF.gc
generated
vendored
|
@ -520,17 +520,17 @@
|
||||||
|
|
||||||
;; definition for method 14 of type tracking-spline
|
;; definition for method 14 of type tracking-spline
|
||||||
;; INFO: Return type mismatch int vs none.
|
;; INFO: Return type mismatch int vs none.
|
||||||
(defmethod TODO-RENAME-14 tracking-spline ((obj tracking-spline) (arg0 vector))
|
(defmethod TODO-RENAME-14 tracking-spline ((obj tracking-spline) (arg0 tracking-spline-sampler))
|
||||||
(let ((v1-0 (-> obj used-point)))
|
(let ((v1-0 (-> obj used-point)))
|
||||||
(set! (-> obj partial-point) (-> arg0 y))
|
(set! (-> obj partial-point) (-> arg0 partial-pt))
|
||||||
(when (= (-> obj next-to-last-point) v1-0)
|
(when (= (-> obj next-to-last-point) v1-0)
|
||||||
(set! (-> obj summed-len) (-> obj point v1-0 tp-length))
|
(set! (-> obj summed-len) (-> obj point v1-0 tp-length))
|
||||||
(if (= (-> arg0 x) (-> obj end-point))
|
(if (= (-> arg0 cur-pt) (-> obj end-point))
|
||||||
(set! (-> obj partial-point) 0.99999)
|
(set! (-> obj partial-point) 0.99999)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(when (!= (-> arg0 x) v1-0)
|
(when (!= (-> arg0 cur-pt) v1-0)
|
||||||
(while (and (!= (-> obj point v1-0 next) (-> arg0 x)) (!= (-> obj point v1-0 next) (-> obj next-to-last-point)))
|
(while (and (!= (-> obj point v1-0 next) (-> arg0 cur-pt)) (!= (-> obj point v1-0 next) (-> obj next-to-last-point)))
|
||||||
(set! (-> obj summed-len) (- (-> obj summed-len) (-> obj point v1-0 tp-length)))
|
(set! (-> obj summed-len) (- (-> obj summed-len) (-> obj point v1-0 tp-length)))
|
||||||
(+! (-> obj point v1-0 incarnation) 1)
|
(+! (-> obj point v1-0 incarnation) 1)
|
||||||
(+! (-> obj used-count) -1)
|
(+! (-> obj used-count) -1)
|
||||||
|
@ -541,13 +541,13 @@
|
||||||
(+! (-> obj used-count) -1)
|
(+! (-> obj used-count) -1)
|
||||||
(set! (-> obj point v1-0 next) (-> obj free-point))
|
(set! (-> obj point v1-0 next) (-> obj free-point))
|
||||||
(set! (-> obj free-point) (-> obj used-point))
|
(set! (-> obj free-point) (-> obj used-point))
|
||||||
(set! (-> obj used-point) (the-as int (-> arg0 x)))
|
(set! (-> obj used-point) (-> arg0 cur-pt))
|
||||||
(cond
|
(cond
|
||||||
((= (-> arg0 x) (-> obj end-point))
|
((= (-> arg0 cur-pt) (-> obj end-point))
|
||||||
(set! (-> obj partial-point) 0.0)
|
(set! (-> obj partial-point) 0.0)
|
||||||
(set! (-> obj summed-len) 0.0)
|
(set! (-> obj summed-len) 0.0)
|
||||||
)
|
)
|
||||||
((= (-> arg0 x) (-> obj next-to-last-point))
|
((= (-> arg0 cur-pt) (-> obj next-to-last-point))
|
||||||
(set! (-> obj summed-len) (-> obj point (-> obj next-to-last-point) tp-length))
|
(set! (-> obj summed-len) (-> obj point (-> obj next-to-last-point) tp-length))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -857,7 +857,7 @@
|
||||||
(set! (-> s4-0 cur-pt) v1-0)
|
(set! (-> s4-0 cur-pt) v1-0)
|
||||||
(set! (-> s4-0 partial-pt) f0-0)
|
(set! (-> s4-0 partial-pt) f0-0)
|
||||||
(TODO-RENAME-19 obj (* (-> obj max-move) (-> *display* time-adjust-ratio)) arg0 s4-0)
|
(TODO-RENAME-19 obj (* (-> obj max-move) (-> *display* time-adjust-ratio)) arg0 s4-0)
|
||||||
(TODO-RENAME-14 obj (the-as vector s4-0))
|
(TODO-RENAME-14 obj s4-0)
|
||||||
(dotimes (s3-0 63)
|
(dotimes (s3-0 63)
|
||||||
(TODO-RENAME-18 obj (* 0.015625 (-> obj sample-len)) arg0 s4-0)
|
(TODO-RENAME-18 obj (* 0.015625 (-> obj sample-len)) arg0 s4-0)
|
||||||
)
|
)
|
||||||
|
@ -888,7 +888,7 @@
|
||||||
(set! (-> s5-0 partial-pt) 0.0)
|
(set! (-> s5-0 partial-pt) 0.0)
|
||||||
(TODO-RENAME-19 obj (- (-> obj summed-len) arg0) a2-0 s5-0)
|
(TODO-RENAME-19 obj (- (-> obj summed-len) arg0) a2-0 s5-0)
|
||||||
)
|
)
|
||||||
(TODO-RENAME-14 obj (the-as vector s5-0))
|
(TODO-RENAME-14 obj s5-0)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
|
|
44
test/decompiler/reference/engine/collide/collide-cache-h_REF.gc
generated
vendored
44
test/decompiler/reference/engine/collide/collide-cache-h_REF.gc
generated
vendored
|
@ -57,8 +57,8 @@
|
||||||
:size-assert #xc60
|
:size-assert #xc60
|
||||||
:flag-assert #xb00000c60
|
:flag-assert #xb00000c60
|
||||||
(:methods
|
(:methods
|
||||||
(dummy-9 () none 9)
|
(dummy-9 (_type_ object object) symbol 9)
|
||||||
(dummy-10 () none 10)
|
(dummy-10 (_type_ object object) symbol 10)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -100,10 +100,11 @@
|
||||||
;; definition of type collide-cache-tri
|
;; definition of type collide-cache-tri
|
||||||
(deftype collide-cache-tri (structure)
|
(deftype collide-cache-tri (structure)
|
||||||
((vertex vector 3 :inline :offset-assert 0)
|
((vertex vector 3 :inline :offset-assert 0)
|
||||||
(pat pat-surface :offset-assert 48)
|
(extra-quad uint128 :offset 48)
|
||||||
(prim-index uint16 :offset-assert 52)
|
(pat pat-surface :offset 48)
|
||||||
(user16 uint16 :offset-assert 54)
|
(prim-index uint16 :offset 52)
|
||||||
(user32 uint32 2 :offset-assert 56)
|
(user16 uint16 :offset 54)
|
||||||
|
(user32 uint32 2 :offset 56)
|
||||||
)
|
)
|
||||||
:method-count-assert 9
|
:method-count-assert 9
|
||||||
:size-assert #x40
|
:size-assert #x40
|
||||||
|
@ -114,7 +115,7 @@
|
||||||
(defmethod inspect collide-cache-tri ((obj collide-cache-tri))
|
(defmethod inspect collide-cache-tri ((obj collide-cache-tri))
|
||||||
(format #t "[~8x] ~A~%" obj 'collide-cache-tri)
|
(format #t "[~8x] ~A~%" obj 'collide-cache-tri)
|
||||||
(format #t "~Tvertex[3] @ #x~X~%" (-> obj vertex))
|
(format #t "~Tvertex[3] @ #x~X~%" (-> obj vertex))
|
||||||
(format #t "~Textra-quad[16] @ #x~X~%" (&-> obj pat))
|
(format #t "~Textra-quad[16] @ #x~X~%" (&-> obj extra-quad))
|
||||||
(format #t "~Tpat: ~D~%" (-> obj pat))
|
(format #t "~Tpat: ~D~%" (-> obj pat))
|
||||||
(format #t "~Tprim-index: ~D~%" (-> obj prim-index))
|
(format #t "~Tprim-index: ~D~%" (-> obj prim-index))
|
||||||
(format #t "~Tuser16: ~D~%" (-> obj user16))
|
(format #t "~Tuser16: ~D~%" (-> obj user16))
|
||||||
|
@ -125,11 +126,12 @@
|
||||||
;; definition of type collide-cache-prim
|
;; definition of type collide-cache-prim
|
||||||
(deftype collide-cache-prim (structure)
|
(deftype collide-cache-prim (structure)
|
||||||
((prim-core collide-prim-core :inline :offset-assert 0)
|
((prim-core collide-prim-core :inline :offset-assert 0)
|
||||||
(ccache collide-cache :offset-assert 32)
|
(extra-quad uint128 :offset-assert 32)
|
||||||
(prim collide-shape-prim :offset-assert 36)
|
(ccache collide-cache :offset 32)
|
||||||
(first-tri uint16 :offset-assert 40)
|
(prim collide-shape-prim :offset 36)
|
||||||
(num-tris uint16 :offset-assert 42)
|
(first-tri uint16 :offset 40)
|
||||||
(unused uint8 4 :offset-assert 44)
|
(num-tris uint16 :offset 42)
|
||||||
|
(unused uint8 4 :offset 44)
|
||||||
(world-sphere vector :inline :offset 0)
|
(world-sphere vector :inline :offset 0)
|
||||||
(collide-as collide-kind :offset 16)
|
(collide-as collide-kind :offset 16)
|
||||||
(action collide-action :offset 24)
|
(action collide-action :offset 24)
|
||||||
|
@ -149,7 +151,7 @@
|
||||||
(defmethod inspect collide-cache-prim ((obj collide-cache-prim))
|
(defmethod inspect collide-cache-prim ((obj collide-cache-prim))
|
||||||
(format #t "[~8x] ~A~%" obj 'collide-cache-prim)
|
(format #t "[~8x] ~A~%" obj 'collide-cache-prim)
|
||||||
(format #t "~Tprim-core: #<collide-prim-core @ #x~X>~%" (-> obj prim-core))
|
(format #t "~Tprim-core: #<collide-prim-core @ #x~X>~%" (-> obj prim-core))
|
||||||
(format #t "~Textra-quad[16] @ #x~X~%" (&-> obj ccache))
|
(format #t "~Textra-quad[16] @ #x~X~%" (&-> obj extra-quad))
|
||||||
(format #t "~Tccache: ~A~%" (-> obj ccache))
|
(format #t "~Tccache: ~A~%" (-> obj ccache))
|
||||||
(format #t "~Tprim: ~A~%" (-> obj prim))
|
(format #t "~Tprim: ~A~%" (-> obj prim))
|
||||||
(format #t "~Tfirst-tri: ~D~%" (-> obj first-tri))
|
(format #t "~Tfirst-tri: ~D~%" (-> obj first-tri))
|
||||||
|
@ -182,7 +184,7 @@
|
||||||
(:methods
|
(:methods
|
||||||
(debug-draw (_type_) none 9)
|
(debug-draw (_type_) none 9)
|
||||||
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result int) float 10)
|
(fill-and-probe-using-line-sphere (_type_ vector vector float collide-kind process collide-tri-result int) float 10)
|
||||||
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) none 11)
|
(fill-and-probe-using-spheres (_type_ collide-using-spheres-params) symbol 11)
|
||||||
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process collide-tri-result uint) float 12)
|
(fill-and-probe-using-y-probe (_type_ vector float collide-kind process collide-tri-result uint) float 12)
|
||||||
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
|
(fill-using-bounding-box (_type_ bounding-box collide-kind process-drawable pat-surface) none 13)
|
||||||
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable int) none 14)
|
(fill-using-line-sphere (_type_ vector vector float collide-kind process-drawable int) none 14)
|
||||||
|
@ -190,20 +192,20 @@
|
||||||
(fill-using-y-probe (_type_ vector float collide-kind process-drawable uint) none 16)
|
(fill-using-y-probe (_type_ vector float collide-kind process-drawable uint) none 16)
|
||||||
(initialize (_type_) none 17)
|
(initialize (_type_) none 17)
|
||||||
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result int) float 18)
|
(probe-using-line-sphere (_type_ vector vector float collide-kind collide-tri-result int) float 18)
|
||||||
(probe-using-spheres (_type_) none 19)
|
(probe-using-spheres (_type_ collide-using-spheres-params) symbol 19)
|
||||||
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result uint) float 20)
|
(probe-using-y-probe (_type_ vector float collide-kind collide-tri-result uint) float 20)
|
||||||
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache none)) none 21)
|
(fill-from-background (_type_ (function bsp-header int collide-list none) (function collide-cache object none)) none 21)
|
||||||
(fill-from-foreground-using-spheres (_type_) none 22)
|
(fill-from-foreground-using-box (_type_) none 22)
|
||||||
(fill-from-foreground-using-line-sphere (_type_) none 23)
|
(fill-from-foreground-using-line-sphere (_type_) none 23)
|
||||||
(fill-from-foreground-using-y-probe (_type_) none 24)
|
(fill-from-foreground-using-y-probe (_type_) none 24)
|
||||||
(fill-from-water (_type_ water-control) none 25)
|
(fill-from-water (_type_ water-control) none 25)
|
||||||
(dummy-26 (_type_) none 26)
|
(load-mesh-from-spad-in-box (_type_ collide-frag-mesh) none 26)
|
||||||
(dummy-27 (_type_) none 27)
|
(dummy-27 (_type_) none 27)
|
||||||
(dummy-28 (_type_) none 28)
|
(dummy-28 (_type_) none 28)
|
||||||
(dummy-29 (_type_ collide-frag-mesh) none 29)
|
(dummy-29 (_type_ collide-frag-mesh) none 29)
|
||||||
(dummy-30 (_type_) none 30)
|
(puyp-mesh (_type_ collide-puyp-work collide-cache-prim) none 30)
|
||||||
(dummy-31 (_type_ collide-puyp-work collide-cache-prim) vector 31)
|
(puyp-sphere (_type_ collide-puyp-work collide-cache-prim) vector 31)
|
||||||
(dummy-32 (_type_) none 32)
|
(unpack-background-collide-mesh (_type_ object object object) none 32)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
8
test/decompiler/reference/engine/collide/collide-edge-grab-h_REF.gc
generated
vendored
8
test/decompiler/reference/engine/collide/collide-edge-grab-h_REF.gc
generated
vendored
|
@ -124,7 +124,7 @@
|
||||||
:flag-assert #xb00000810
|
:flag-assert #xb00000810
|
||||||
(:methods
|
(:methods
|
||||||
(debug-draw (_type_) object 9)
|
(debug-draw (_type_) object 9)
|
||||||
(dummy-10 () none 10)
|
(dummy-10 (_type_ collide-edge-hold-item) none 10)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -176,12 +176,12 @@
|
||||||
(debug-draw-edges (_type_) object 10)
|
(debug-draw-edges (_type_) object 10)
|
||||||
(dummy-11 (_type_) none 11)
|
(dummy-11 (_type_) none 11)
|
||||||
(debug-draw-sphere (_type_) symbol 12)
|
(debug-draw-sphere (_type_) symbol 12)
|
||||||
(dummy-13 (_type_) none 13)
|
(dummy-13 (_type_ collide-edge-hold-item vector) none 13)
|
||||||
(dummy-14 (_type_ vector vector int) float 14)
|
(dummy-14 (_type_ vector vector int) float 14)
|
||||||
(dummy-15 (_type_) none 15)
|
(dummy-15 (_type_) none 15)
|
||||||
(dummy-16 (_type_) none 16)
|
(find-grabbable-tris! (_type_) none 16)
|
||||||
(dummy-17 (_type_) none 17)
|
(dummy-17 (_type_) none 17)
|
||||||
(dummy-18 (_type_) none 18)
|
(dummy-18 (_type_ collide-edge-hold-list edge-grab-info) none 18)
|
||||||
(dummy-19 (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
|
(dummy-19 (_type_ collide-edge-hold-item edge-grab-info) symbol 19)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
10
test/decompiler/reference/engine/collide/collide-shape-h_REF.gc
generated
vendored
10
test/decompiler/reference/engine/collide/collide-shape-h_REF.gc
generated
vendored
|
@ -228,9 +228,9 @@
|
||||||
(move-by-vector! (_type_ vector) none 9)
|
(move-by-vector! (_type_ vector) none 9)
|
||||||
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
|
(find-prim-by-id (_type_ uint) collide-shape-prim 10)
|
||||||
(debug-draw-world-sphere (_type_) symbol 11)
|
(debug-draw-world-sphere (_type_) symbol 11)
|
||||||
(add-fg-prim-using-box (_type_ process-drawable) none 12)
|
(add-fg-prim-using-box (_type_ collide-cache) none 12)
|
||||||
(add-fg-prim-using-line-sphere (_type_ process-drawable) none 13)
|
(add-fg-prim-using-line-sphere (_type_ collide-cache) none 13)
|
||||||
(add-fg-prim-using-y-probe (_type_ process-drawable) none 14)
|
(add-fg-prim-using-y-probe (_type_ collide-cache) none 14)
|
||||||
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
|
(overlaps-others-test (_type_ overlaps-others-params collide-shape-prim) symbol 15)
|
||||||
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
|
(overlaps-others-group (_type_ overlaps-others-params collide-shape-prim-group) symbol 16)
|
||||||
(dummy-17 () none 17)
|
(dummy-17 () none 17)
|
||||||
|
@ -406,10 +406,10 @@
|
||||||
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
|
(on-platform (_type_ collide-shape collide-overlap-result) symbol 39)
|
||||||
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40)
|
(find-overlapping-shapes (_type_ overlaps-others-params) symbol 40)
|
||||||
(dummy-41 (_type_ attack-info float) vector 41)
|
(dummy-41 (_type_ attack-info float) vector 41)
|
||||||
(compute-overlap (_type_ collide-shape collide-overlap-result) symbol 42)
|
(should-push-away (_type_ collide-shape collide-overlap-result) symbol 42)
|
||||||
(pull-rider! (_type_ pull-rider-info) none 43)
|
(pull-rider! (_type_ pull-rider-info) none 43)
|
||||||
(pull-riders! (_type_) symbol 44)
|
(pull-riders! (_type_) symbol 44)
|
||||||
(respond-to-collisions! (_type_) symbol 45)
|
(do-push-aways! (_type_) symbol 45)
|
||||||
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
|
(set-root-prim! (_type_ collide-shape-prim) collide-shape-prim 46)
|
||||||
(update-transforms! (_type_) symbol 47)
|
(update-transforms! (_type_) symbol 47)
|
||||||
(clear-collide-with-as (_type_) none 48)
|
(clear-collide-with-as (_type_) none 48)
|
||||||
|
|
300
test/decompiler/reference/engine/collide/collide-target-h_REF.gc
generated
vendored
300
test/decompiler/reference/engine/collide/collide-target-h_REF.gc
generated
vendored
|
@ -40,151 +40,161 @@
|
||||||
|
|
||||||
;; definition of type control-info
|
;; definition of type control-info
|
||||||
(deftype control-info (collide-shape-moving)
|
(deftype control-info (collide-shape-moving)
|
||||||
((unknown-vector00 vector :inline :offset 448)
|
((unknown-vector00 vector :inline :offset 448)
|
||||||
(unknown-vector01 vector :inline :offset 464)
|
(unknown-vector01 vector :inline :offset 464)
|
||||||
(unknown-vector02 vector :inline :offset 480)
|
(unknown-vector02 vector :inline :offset 480)
|
||||||
(unknown-quaternion00 quaternion :inline :offset 496)
|
(unknown-quaternion00 quaternion :inline :offset 496)
|
||||||
(unknown-quaternion01 quaternion :inline :offset 512)
|
(unknown-quaternion01 quaternion :inline :offset 512)
|
||||||
(unknown-float00 float :offset 528)
|
(unknown-float00 float :offset 528)
|
||||||
(unknown-float01 float :offset 532)
|
(unknown-float01 float :offset 532)
|
||||||
(unknown-float02 float :offset 536)
|
(unknown-float02 float :offset 536)
|
||||||
(unknown-vector10 vector :inline :offset 544)
|
(unknown-vector10 vector :inline :offset 544)
|
||||||
(unknown-vector11 vector :inline :offset 560)
|
(unknown-vector11 vector :inline :offset 560)
|
||||||
(unknown-vector12 vector :inline :offset 576)
|
(unknown-vector12 vector :inline :offset 576)
|
||||||
(unknown-vector13 vector :inline :offset 592)
|
(unknown-vector13 vector :inline :offset 592)
|
||||||
(unknown-vector14 vector :inline :offset 608)
|
(unknown-vector14 vector :inline :offset 608)
|
||||||
(unknown-vector15 vector :inline :offset 624)
|
(unknown-vector15 vector :inline :offset 624)
|
||||||
(unknown-vector16 vector :inline :offset 640)
|
(unknown-vector16 vector :inline :offset 640)
|
||||||
(unknown-dynamics00 dynamics :offset 656)
|
(unknown-dynamics00 dynamics :offset 656)
|
||||||
(unknown-surface00 surface :offset 660)
|
(unknown-surface00 surface :offset 660)
|
||||||
(unknown-surface01 surface :offset 664)
|
(unknown-surface01 surface :offset 664)
|
||||||
(unknown-cpad-info00 cpad-info :offset 668)
|
(unknown-cpad-info00 cpad-info :offset 668)
|
||||||
(unknown-float10 float :offset 672)
|
(unknown-float10 float :offset 672)
|
||||||
(unknown-float11 float :offset 676)
|
(unknown-float11 float :offset 676)
|
||||||
(unknown-float12 float :offset 680)
|
(unknown-float12 float :offset 680)
|
||||||
(unknown-float13 float :offset 684)
|
(unknown-float13 float :offset 684)
|
||||||
(unknown-vector20 vector :inline :offset 688)
|
(unknown-vector20 vector :inline :offset 688)
|
||||||
(unknown-vector21 vector :inline :offset 704)
|
(unknown-vector21 vector :inline :offset 704)
|
||||||
(unknown-vector22 vector :inline :offset 720)
|
(unknown-vector22 vector :inline :offset 720)
|
||||||
(unknown-vector23 vector :inline :offset 736)
|
(unknown-vector23 vector :inline :offset 736)
|
||||||
(unknown-vector-array00 vector 7 :inline :offset 752)
|
(unknown-vector-array00 vector 7 :inline :offset 752)
|
||||||
(unknown-vector30 vector :inline :offset 880)
|
(unknown-vector30 vector :inline :offset 880)
|
||||||
(unknown-vector31 vector :inline :offset 896)
|
(unknown-vector31 vector :inline :offset 896)
|
||||||
(unknown-float20 float :offset 912)
|
(unknown-float20 float :offset 912)
|
||||||
(unknown-float21 float :offset 916)
|
(unknown-float21 float :offset 916)
|
||||||
(unknown-dword00 uint64 :offset 920)
|
(unknown-dword00 uint64 :offset 920)
|
||||||
(unknown-matrix00 matrix :inline :offset 928)
|
(unknown-matrix00 matrix :inline :offset 928)
|
||||||
(unknown-matrix01 matrix :inline :offset 992)
|
(unknown-matrix01 matrix :inline :offset 992)
|
||||||
(unknown-matrix02 matrix :inline :offset 1056)
|
(unknown-matrix02 matrix :inline :offset 1056)
|
||||||
(unknown-qword00 uint128 :offset 1136)
|
(unknown-qword00 uint128 :offset 1136)
|
||||||
(unknown-float30 float :offset 1140)
|
(unknown-float30 float :offset 1140)
|
||||||
(unknown-vector40 vector :inline :offset 1152)
|
(unknown-vector40 vector :inline :offset 1152)
|
||||||
(unknown-float40 float :offset 1172)
|
(unknown-float40 float :offset 1172)
|
||||||
(unknown-float41 float :offset 1176)
|
(unknown-float41 float :offset 1176)
|
||||||
(unknown-int00 int32 :offset 1180)
|
(unknown-int00 int32 :offset 1180)
|
||||||
(unknown-float50 float :offset 1168)
|
(unknown-float50 float :offset 1168)
|
||||||
(unknown-vector50 vector :inline :offset 1184)
|
(unknown-vector50 vector :inline :offset 1184)
|
||||||
(unknown-vector51 vector :inline :offset 1200)
|
(unknown-vector51 vector :inline :offset 1200)
|
||||||
(unknown-vector52 vector :inline :offset 1216)
|
(unknown-vector52 vector :inline :offset 1216)
|
||||||
(unknown-vector53 vector :inline :offset 1232)
|
(unknown-vector53 vector :inline :offset 1232)
|
||||||
(last-known-safe-ground vector :inline :offset 1248)
|
(last-known-safe-ground vector :inline :offset 1248)
|
||||||
(unknown-vector55 vector :inline :offset 1264)
|
(unknown-vector55 vector :inline :offset 1264)
|
||||||
(unknown-dword10 int64 :offset 1280)
|
(unknown-dword10 int64 :offset 1280)
|
||||||
(unknown-dword11 int64 :offset 1288)
|
(unknown-dword11 int64 :offset 1288)
|
||||||
(unknown-float60 float :offset 1300)
|
(unknown-float60 float :offset 1300)
|
||||||
(unknown-float61 float :offset 1304)
|
(unknown-float61 float :offset 1304)
|
||||||
(unknown-float62 float :offset 1308)
|
(unknown-float62 float :offset 1308)
|
||||||
(unknown-float63 float :offset 1312)
|
(unknown-float63 float :offset 1312)
|
||||||
(unknown-float64 float :offset 1316)
|
(unknown-float64 float :offset 1316)
|
||||||
(unknown-dword20 int64 :offset 1320)
|
(unknown-dword20 int64 :offset 1320)
|
||||||
(unknown-dword21 int64 :offset 1328)
|
(unknown-dword21 int64 :offset 1328)
|
||||||
(unknown-vector60 vector :inline :offset 1456)
|
(unknown-dword-coverage int64 :offset 1336)
|
||||||
(unknown-vector61 vector :inline :offset 1504)
|
(unknown-float-coverage-0 float :offset 1344)
|
||||||
(unknown-float70 float :offset 1520)
|
(unknown-float-coverage-1 float :offset 1348)
|
||||||
(unknown-float71 float :offset 1524)
|
(unknown-float-coverage-2 float :offset 1352)
|
||||||
(unknown-vector70 vector :inline :offset 1536)
|
(unknown-u32-coverage-0 uint32 :offset 1356)
|
||||||
(unknown-vector71 vector :inline :offset 1552)
|
(unknown-vector-coverage-0 vector :inline :offset 1376)
|
||||||
(unknown-vector72 vector :inline :offset 1568)
|
(unknown-vector-coverage-1 vector :inline :offset 1392)
|
||||||
(unknown-vector73 vector :inline :offset 1584)
|
(unknown-vector-coverage-2 vector :inline :offset 1440)
|
||||||
(unknown-handle00 handle :offset 1600)
|
(unknown-vector-coverage-3 vector :inline :offset 1472)
|
||||||
(unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608)
|
(unknown-vector60 vector :inline :offset 1456)
|
||||||
(unknown-sphere00 collide-shape-prim-sphere :offset 1632)
|
(unknown-vector61 vector :inline :offset 1504)
|
||||||
(unknown-sphere01 collide-shape-prim-sphere :offset 1636)
|
(unknown-float70 float :offset 1520)
|
||||||
(unknown-sphere02 collide-shape-prim-sphere :offset 1640)
|
(unknown-float71 float :offset 1524)
|
||||||
(unknown-int50 int32 :offset 1656)
|
(unknown-vector70 vector :inline :offset 1536)
|
||||||
(unknown-dword30 int64 :offset 1664)
|
(unknown-vector71 vector :inline :offset 1552)
|
||||||
(unknown-dword31 int64 :offset 1672)
|
(unknown-vector72 vector :inline :offset 1568)
|
||||||
(unknown-dword32 int64 :offset 1680)
|
(unknown-vector73 vector :inline :offset 1584)
|
||||||
(unknown-dword33 int64 :offset 1688)
|
(unknown-handle00 handle :offset 1600)
|
||||||
(unknown-dword34 int64 :offset 1696)
|
(unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608)
|
||||||
(unknown-dword35 int64 :offset 1704)
|
(unknown-sphere00 collide-shape-prim-sphere :offset 1632)
|
||||||
(unknown-dword36 int64 :offset 1712)
|
(unknown-sphere01 collide-shape-prim-sphere :offset 1636)
|
||||||
(unknown-float80 float :offset 1724)
|
(unknown-sphere02 collide-shape-prim-sphere :offset 1640)
|
||||||
(unknown-float81 float :offset 1728)
|
(unknown-int50 int32 :offset 1656)
|
||||||
(unknown-float82 float :offset 1732)
|
(unknown-dword30 int64 :offset 1664)
|
||||||
(unknown-vector80 vector :inline :offset 1744)
|
(unknown-dword31 int64 :offset 1672)
|
||||||
(unknown-cspace00 cspace :inline :offset 1760)
|
(unknown-dword32 int64 :offset 1680)
|
||||||
(unknown-vector90 vector :inline :offset 1776)
|
(unknown-dword33 int64 :offset 1688)
|
||||||
(unknown-vector91 vector :inline :offset 1792)
|
(unknown-dword34 int64 :offset 1696)
|
||||||
(unknown-vector92 vector :inline :offset 1824)
|
(unknown-dword35 int64 :offset 1704)
|
||||||
(unknown-cspace10 cspace :inline :offset 1808)
|
(unknown-dword36 int64 :offset 1712)
|
||||||
(unknown-symbol00 symbol :offset 1840)
|
(unknown-float80 float :offset 1724)
|
||||||
(unknown-float90 float :offset 1844)
|
(unknown-float81 float :offset 1728)
|
||||||
(unknown-float91 float :offset 1848)
|
(unknown-float82 float :offset 1732)
|
||||||
(unknown-vector-array10 vector 16 :inline :offset 1856)
|
(unknown-vector80 vector :inline :offset 1744)
|
||||||
(unknown-float100 float :offset 2112)
|
(unknown-cspace00 cspace :inline :offset 1760)
|
||||||
(unknown-int10 int32 :offset 2116)
|
(unknown-vector90 vector :inline :offset 1776)
|
||||||
(unknown-float110 float :offset 2120)
|
(unknown-vector91 vector :inline :offset 1792)
|
||||||
(unknown-vector100 vector :inline :offset 2128)
|
(unknown-vector92 vector :inline :offset 1824)
|
||||||
(unknown-vector101 vector :inline :offset 2144)
|
(unknown-cspace10 cspace :inline :offset 1808)
|
||||||
(unknown-dword40 int64 :offset 2160)
|
(unknown-symbol00 symbol :offset 1840)
|
||||||
(unknown-dword41 int64 :offset 2168)
|
(unknown-float90 float :offset 1844)
|
||||||
(unknown-handle10 handle :offset 2176)
|
(unknown-float91 float :offset 1848)
|
||||||
(unknown-uint20 uint32 :offset 2184)
|
(unknown-vector-array10 vector 16 :inline :offset 1856)
|
||||||
(unknown-spoolanim00 spool-anim :offset 2184)
|
(unknown-float100 float :offset 2112)
|
||||||
(unknown-int20 int32 :offset 2184)
|
(unknown-int10 int32 :offset 2116)
|
||||||
(unknown-symbol20 symbol :offset 2184)
|
(unknown-float110 float :offset 2120)
|
||||||
(unknown-float120 float :offset 2184)
|
(unknown-vector100 vector :inline :offset 2128)
|
||||||
(unknown-int21 int32 :offset 2188)
|
(unknown-vector101 vector :inline :offset 2144)
|
||||||
(unknown-uint30 uint32 :offset 2188)
|
(unknown-dword40 int64 :offset 2160)
|
||||||
(unknown-float121 float :offset 2188)
|
(unknown-dword41 int64 :offset 2168)
|
||||||
(unknown-uint31 uint32 :offset 2192)
|
(unknown-handle10 handle :offset 2176)
|
||||||
(unknown-float122 float :offset 2196)
|
(unknown-uint20 uint32 :offset 2184)
|
||||||
(unknown-float123 float :offset 2200)
|
(unknown-spoolanim00 spool-anim :offset 2184)
|
||||||
(unknown-float124 float :offset 2204)
|
(unknown-int20 int32 :offset 2184)
|
||||||
(unknown-vector102 vector :inline :offset 2224)
|
(unknown-symbol20 symbol :offset 2184)
|
||||||
(unknown-vector103 vector :inline :offset 2240)
|
(unknown-float120 float :offset 2184)
|
||||||
(unknown-quaternion02 quaternion :inline :offset 2256)
|
(unknown-int21 int32 :offset 2188)
|
||||||
(unknown-quaternion03 quaternion :inline :offset 2272)
|
(unknown-uint30 uint32 :offset 2188)
|
||||||
(unknown-smush00 smush-control :inline :offset 2288)
|
(unknown-float121 float :offset 2188)
|
||||||
(unknown-vector110 vector :inline :offset 2320)
|
(unknown-uint31 uint32 :offset 2192)
|
||||||
(unknown-vector111 vector :inline :offset 2336)
|
(unknown-float122 float :offset 2196)
|
||||||
(unknown-symbol30 symbol :offset 2384)
|
(unknown-float123 float :offset 2200)
|
||||||
(unknown-int31 uint32 :offset 2384)
|
(unknown-float124 float :offset 2204)
|
||||||
(unknown-dword50 int64 :offset 2392)
|
(unknown-vector102 vector :inline :offset 2224)
|
||||||
(unknown-dword51 int64 :offset 2400)
|
(unknown-vector103 vector :inline :offset 2240)
|
||||||
(unknown-pointer00 pointer :offset 2416)
|
(unknown-quaternion02 quaternion :inline :offset 2256)
|
||||||
(unknown-symbol40 symbol :offset 2428)
|
(unknown-quaternion03 quaternion :inline :offset 2272)
|
||||||
(unknown-dword60 int64 :offset 2432)
|
(unknown-smush00 smush-control :inline :offset 2288)
|
||||||
(unknown-dword61 int64 :offset 2440)
|
(unknown-vector110 vector :inline :offset 2320)
|
||||||
(unknown-dword62 int64 :offset 2448)
|
(unknown-vector111 vector :inline :offset 2336)
|
||||||
(unknown-dword63 int64 :offset 2456)
|
(unknown-symbol30 symbol :offset 2384)
|
||||||
(unknown-halfword00 int16 :offset 2488)
|
(unknown-int31 uint32 :offset 2384)
|
||||||
(history-length int16 :offset 2490)
|
(unknown-dword50 int64 :offset 2392)
|
||||||
(history-data collide-history 128 :inline :offset-assert 2496)
|
(unknown-dword51 int64 :offset 2400)
|
||||||
(unknown-float140 float :offset 18944)
|
(unknown-pointer00 pointer :offset 2416)
|
||||||
(unknown-dword70 int64 :offset 18952)
|
(unknown-symbol40 symbol :offset 2428)
|
||||||
(unknown-int40 int32 :offset 18880)
|
(unknown-dword60 int64 :offset 2432)
|
||||||
(unknown-dword80 int64 :offset 18888)
|
(unknown-dword61 int64 :offset 2440)
|
||||||
(unknown-dword81 int64 :offset 18896)
|
(unknown-dword62 int64 :offset 2448)
|
||||||
(unknown-float130 float :offset 18904)
|
(unknown-dword63 int64 :offset 2456)
|
||||||
(unknown-float131 float :offset 18908)
|
(unknown-halfword00 int16 :offset 2488)
|
||||||
(unknown-dword82 int64 :offset 18912)
|
(history-length int16 :offset 2490)
|
||||||
(unknown-vector120 vector :inline :offset 18928)
|
(history-data collide-history 128 :inline :offset-assert 2496)
|
||||||
(unknown-float150 float :offset 18944)
|
(unknown-float140 float :offset 18944)
|
||||||
(unknown-int60 uint32 :offset 18976)
|
(unknown-dword70 int64 :offset 18952)
|
||||||
(unknown-soundid00 sound-id :offset 18980)
|
(unknown-int40 int32 :offset 18880)
|
||||||
(unknown-float141 float :offset 18984)
|
(unknown-dword80 int64 :offset 18888)
|
||||||
|
(unknown-dword81 int64 :offset 18896)
|
||||||
|
(unknown-float130 float :offset 18904)
|
||||||
|
(unknown-float131 float :offset 18908)
|
||||||
|
(unknown-dword82 int64 :offset 18912)
|
||||||
|
(unknown-vector120 vector :inline :offset 18928)
|
||||||
|
(unknown-float150 float :offset 18944)
|
||||||
|
(unknown-vector121 vector :inline :offset 18960)
|
||||||
|
(unknown-int60 uint32 :offset 18976)
|
||||||
|
(unknown-soundid00 sound-id :offset 18980)
|
||||||
|
(unknown-float141 float :offset 18984)
|
||||||
)
|
)
|
||||||
:method-count-assert 65
|
:method-count-assert 65
|
||||||
:size-assert #x4a2c
|
:size-assert #x4a2c
|
||||||
|
|
4
test/decompiler/reference/engine/draw/process-drawable_REF.gc
generated
vendored
4
test/decompiler/reference/engine/draw/process-drawable_REF.gc
generated
vendored
|
@ -1012,7 +1012,7 @@
|
||||||
(let ((gp-0 (the-as collide-shape (-> self root))))
|
(let ((gp-0 (the-as collide-shape (-> self root))))
|
||||||
(update-transforms! gp-0)
|
(update-transforms! gp-0)
|
||||||
(pull-riders! gp-0)
|
(pull-riders! gp-0)
|
||||||
(respond-to-collisions! gp-0)
|
(do-push-aways! gp-0)
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
@ -1022,7 +1022,7 @@
|
||||||
(ja-post)
|
(ja-post)
|
||||||
(let ((gp-0 (the-as collide-shape (-> self root))))
|
(let ((gp-0 (the-as collide-shape (-> self root))))
|
||||||
(update-transforms! gp-0)
|
(update-transforms! gp-0)
|
||||||
(respond-to-collisions! gp-0)
|
(do-push-aways! gp-0)
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
|
|
66
test/decompiler/reference/engine/target/target_REF.gc
generated
vendored
66
test/decompiler/reference/engine/target/target_REF.gc
generated
vendored
|
@ -111,7 +111,65 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
;; definition for function target-falling-anim-trans
|
;; definition for function target-falling-anim-trans
|
||||||
;; ERROR: function was not converted to expressions. Cannot decompile.
|
;; INFO: Return type mismatch int vs none.
|
||||||
|
(defbehavior target-falling-anim-trans target ()
|
||||||
|
(let ((v1-2 (if (> (-> self skel active-channels) 0)
|
||||||
|
(-> self skel root-channel 0 frame-group)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(b!
|
||||||
|
(or (= v1-2 (-> self draw art-group data 38)) (= v1-2 (-> self draw art-group data 35)))
|
||||||
|
cfg-7
|
||||||
|
:delay
|
||||||
|
(empty-form)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(ja-channel-push! 1 99)
|
||||||
|
(let ((v1-8 (-> self skel root-channel 0)))
|
||||||
|
(set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 38)))
|
||||||
|
)
|
||||||
|
(b! #t cfg-23 :delay (nop!))
|
||||||
|
(label cfg-7)
|
||||||
|
(cond
|
||||||
|
((and (logtest? (-> self control status) 1) (not (= (if (> (-> self skel active-channels) 0)
|
||||||
|
(-> self skel root-channel 0 frame-group)
|
||||||
|
)
|
||||||
|
(-> self draw art-group data 35)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(ja-channel-push! 1 6)
|
||||||
|
(let ((v1-21 (-> self skel root-channel 0)))
|
||||||
|
(set! (-> v1-21 frame-group) (the-as art-joint-anim (-> self draw art-group data 35)))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
((= (if (> (-> self skel active-channels) 0)
|
||||||
|
(-> self skel root-channel 0 frame-group)
|
||||||
|
)
|
||||||
|
(-> self draw art-group data 38)
|
||||||
|
)
|
||||||
|
(let ((a0-23 (-> self skel root-channel 0)))
|
||||||
|
(set! (-> a0-23 param 0) (-> (new 'static 'array float 1 1.0) 0))
|
||||||
|
(joint-control-channel-group-eval! a0-23 (the-as art-joint-anim #f) num-func-loop!)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
((= (if (> (-> self skel active-channels) 0)
|
||||||
|
(-> self skel root-channel 0 frame-group)
|
||||||
|
)
|
||||||
|
(-> self draw art-group data 35)
|
||||||
|
)
|
||||||
|
(let ((a0-28 (-> self skel root-channel 0)))
|
||||||
|
(set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1)))
|
||||||
|
(set! (-> a0-28 param 1) (-> (new 'static 'array float 1 1.0) 0))
|
||||||
|
(joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
(label cfg-23)
|
||||||
|
0
|
||||||
|
(none)
|
||||||
|
)
|
||||||
|
|
||||||
;; definition for function target-falling-trans
|
;; definition for function target-falling-trans
|
||||||
;; INFO: Return type mismatch int vs none.
|
;; INFO: Return type mismatch int vs none.
|
||||||
|
@ -3204,7 +3262,7 @@
|
||||||
(-> *TARGET-bank* smack-surface-dist)
|
(-> *TARGET-bank* smack-surface-dist)
|
||||||
(-> *TARGET-bank* smack-surface-height)
|
(-> *TARGET-bank* smack-surface-height)
|
||||||
(the-as process #f)
|
(the-as process #f)
|
||||||
(the-as (state target) target-hit)
|
target-hit
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(if (and (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) (pad-buttons x))
|
(if (and (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) (pad-buttons x))
|
||||||
|
@ -4275,7 +4333,7 @@
|
||||||
(-> *TARGET-bank* smack-surface-dist)
|
(-> *TARGET-bank* smack-surface-dist)
|
||||||
(-> *TARGET-bank* smack-surface-height)
|
(-> *TARGET-bank* smack-surface-height)
|
||||||
(the-as process #f)
|
(the-as process #f)
|
||||||
(the-as (state target) target-hit)
|
target-hit
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(if (zero? s5-0)
|
(if (zero? s5-0)
|
||||||
|
@ -4379,7 +4437,7 @@
|
||||||
(-> *TARGET-bank* smack-surface-dist)
|
(-> *TARGET-bank* smack-surface-dist)
|
||||||
(-> *TARGET-bank* smack-surface-height)
|
(-> *TARGET-bank* smack-surface-height)
|
||||||
(the-as process #f)
|
(the-as process #f)
|
||||||
(the-as (state target) target-hit)
|
target-hit
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(if (and (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
|
(if (and (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0)
|
||||||
|
|
2
test/decompiler/reference/levels/beach/lurkercrab_REF.gc
generated
vendored
2
test/decompiler/reference/levels/beach/lurkercrab_REF.gc
generated
vendored
|
@ -118,7 +118,7 @@
|
||||||
16384.0
|
16384.0
|
||||||
)
|
)
|
||||||
(the-as object (if (zero? (logand (-> obj nav-enemy-flags) 256))
|
(the-as object (if (zero? (logand (-> obj nav-enemy-flags) 256))
|
||||||
(respond-to-collisions! (-> obj collide-info))
|
(do-push-aways! (-> obj collide-info))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
2
test/decompiler/reference/levels/beach/mayor_REF.gc
generated
vendored
2
test/decompiler/reference/levels/beach/mayor_REF.gc
generated
vendored
|
@ -728,7 +728,7 @@
|
||||||
((the-as (function none) t9-0))
|
((the-as (function none) t9-0))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
2
test/decompiler/reference/levels/beach/pelican_REF.gc
generated
vendored
2
test/decompiler/reference/levels/beach/pelican_REF.gc
generated
vendored
|
@ -708,7 +708,7 @@
|
||||||
(vector-seek! gp-0 a1-0 (* (-> self state-float 0) (-> *display* seconds-per-frame)))
|
(vector-seek! gp-0 a1-0 (* (-> self state-float 0) (-> *display* seconds-per-frame)))
|
||||||
(move-to-point! (-> self root-override) gp-0)
|
(move-to-point! (-> self root-override) gp-0)
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(seek-toward-heading-vec! (-> self root-override) (-> self path-vector) 131072.0 300)
|
(seek-toward-heading-vec! (-> self root-override) (-> self path-vector) 131072.0 300)
|
||||||
(spool-push *art-control* "pelican-spit-ext" 0 self -99.0)
|
(spool-push *art-control* "pelican-spit-ext" 0 self -99.0)
|
||||||
(none)
|
(none)
|
||||||
|
|
7
test/decompiler/reference/levels/flut_common/target-flut_REF.gc
generated
vendored
7
test/decompiler/reference/levels/flut_common/target-flut_REF.gc
generated
vendored
|
@ -1702,12 +1702,7 @@
|
||||||
)
|
)
|
||||||
(!= (-> self control unknown-uint31) 1)
|
(!= (-> self control unknown-uint31) 1)
|
||||||
)
|
)
|
||||||
(target-shoved
|
(target-shoved (meters 2.0) (-> *TARGET-bank* smack-surface-height) (the-as process #f) target-flut-hit)
|
||||||
(meters 2.0)
|
|
||||||
(-> *TARGET-bank* smack-surface-height)
|
|
||||||
(the-as process #f)
|
|
||||||
(the-as (state target) target-flut-hit)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
(if (and (logtest? (-> self water flags) 512)
|
(if (and (logtest? (-> self water flags) 512)
|
||||||
(zero? (mod (- (-> *display* base-frame-counter) (-> self state-time)) 21))
|
(zero? (mod (- (-> *display* base-frame-counter) (-> self state-time)) 21))
|
||||||
|
|
4
test/decompiler/reference/levels/jungle/darkvine_REF.gc
generated
vendored
4
test/decompiler/reference/levels/jungle/darkvine_REF.gc
generated
vendored
|
@ -164,7 +164,7 @@
|
||||||
(let ((v1-0 arg2))
|
(let ((v1-0 arg2))
|
||||||
(the-as object (cond
|
(the-as object (cond
|
||||||
((= v1-0 'touch)
|
((= v1-0 'touch)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(when (-> self dangerous)
|
(when (-> self dangerous)
|
||||||
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
||||||
(set! (-> a1-1 from) self)
|
(set! (-> a1-1 from) self)
|
||||||
|
@ -184,7 +184,7 @@
|
||||||
((!= v1-10 (-> self player-attack-id))
|
((!= v1-10 (-> self player-attack-id))
|
||||||
(set! (-> self player-attack-id) (the-as int v1-10))
|
(set! (-> self player-attack-id) (the-as int v1-10))
|
||||||
(when (-> self vulnerable)
|
(when (-> self vulnerable)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(go darkvine-retreat)
|
(go darkvine-retreat)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
4
test/decompiler/reference/levels/jungle/junglesnake_REF.gc
generated
vendored
4
test/decompiler/reference/levels/jungle/junglesnake_REF.gc
generated
vendored
|
@ -178,7 +178,7 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(else
|
(else
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
||||||
(set! (-> a1-3 from) self)
|
(set! (-> a1-3 from) self)
|
||||||
(set! (-> a1-3 num-params) 2)
|
(set! (-> a1-3 num-params) 2)
|
||||||
|
@ -784,7 +784,7 @@ junglesnake-default-event-handler
|
||||||
(let ((v1-4 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) prims 0)))
|
(let ((v1-4 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) prims 0)))
|
||||||
(logior! (-> v1-4 prim-core action) (collide-action solid))
|
(logior! (-> v1-4 prim-core action) (collide-action solid))
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> obj root-override))
|
(do-push-aways! (-> obj root-override))
|
||||||
)
|
)
|
||||||
0
|
0
|
||||||
(none)
|
(none)
|
||||||
|
|
4
test/decompiler/reference/levels/jungleb/plant-boss_REF.gc
generated
vendored
4
test/decompiler/reference/levels/jungleb/plant-boss_REF.gc
generated
vendored
|
@ -2476,7 +2476,7 @@
|
||||||
:post
|
:post
|
||||||
(behavior ()
|
(behavior ()
|
||||||
(plant-boss-post)
|
(plant-boss-post)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(none)
|
(none)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -2517,7 +2517,7 @@
|
||||||
(let ((gp-1 (-> *display* base-frame-counter)))
|
(let ((gp-1 (-> *display* base-frame-counter)))
|
||||||
(until (>= (- (-> *display* base-frame-counter) gp-1) 1500)
|
(until (>= (- (-> *display* base-frame-counter) gp-1) 1500)
|
||||||
(transform-post)
|
(transform-post)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(suspend)
|
(suspend)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
2
test/decompiler/reference/levels/misty/balloonlurker_REF.gc
generated
vendored
2
test/decompiler/reference/levels/misty/balloonlurker_REF.gc
generated
vendored
|
@ -547,7 +547,7 @@
|
||||||
(-> self root-overlay)
|
(-> self root-overlay)
|
||||||
(the-as uint 1)
|
(the-as uint 1)
|
||||||
)
|
)
|
||||||
(respond-to-collisions! (-> self root-overlay))
|
(do-push-aways! (-> self root-overlay))
|
||||||
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
|
||||||
(set! (-> a1-3 from) self)
|
(set! (-> a1-3 from) self)
|
||||||
(set! (-> a1-3 num-params) 2)
|
(set! (-> a1-3 num-params) 2)
|
||||||
|
|
2
test/decompiler/reference/levels/sunken/helix-water_REF.gc
generated
vendored
2
test/decompiler/reference/levels/sunken/helix-water_REF.gc
generated
vendored
|
@ -404,7 +404,7 @@
|
||||||
(set! (-> gp-1 y) 0.0)
|
(set! (-> gp-1 y) 0.0)
|
||||||
(vector-normalize! gp-1 4096.0)
|
(vector-normalize! gp-1 4096.0)
|
||||||
(move-by-vector! (-> *target* control) gp-1)
|
(move-by-vector! (-> *target* control) gp-1)
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(detect-riders! (-> self root-override))
|
(detect-riders! (-> self root-override))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
2
test/decompiler/reference/levels/swamp/swamp-obs_REF.gc
generated
vendored
2
test/decompiler/reference/levels/swamp/swamp-obs_REF.gc
generated
vendored
|
@ -209,7 +209,7 @@
|
||||||
(set! (-> a1-0 to) (the-as process 1))
|
(set! (-> a1-0 to) (the-as process 1))
|
||||||
(set! (-> a1-0 from) (the-as process *touching-list*))
|
(set! (-> a1-0 from) (the-as process *touching-list*))
|
||||||
(if (find-overlapping-shapes (-> self root-override) (the-as overlaps-others-params a1-0))
|
(if (find-overlapping-shapes (-> self root-override) (the-as overlaps-others-params a1-0))
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(none)
|
(none)
|
||||||
|
|
2
test/decompiler/reference/levels/village1/yakow_REF.gc
generated
vendored
2
test/decompiler/reference/levels/village1/yakow_REF.gc
generated
vendored
|
@ -213,7 +213,7 @@
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
(when (and v1-2 (< 8192.0 (- (-> v1-2 root trans y) (-> self root-override trans y))))
|
(when (and v1-2 (< 8192.0 (- (-> v1-2 root trans y) (-> self root-override trans y))))
|
||||||
(respond-to-collisions! (-> self root-override))
|
(do-push-aways! (-> self root-override))
|
||||||
(send-shove-back
|
(send-shove-back
|
||||||
(-> self root-override)
|
(-> self root-override)
|
||||||
arg0
|
arg0
|
||||||
|
|
Loading…
Reference in a new issue