d/jak2: finish onin-game and resolve type-hinting (array object) elements (#2188)

Fixes https://github.com/open-goal/jak-project/issues/2047
This commit is contained in:
Tyler Wilding
2023-02-04 20:36:30 -05:00
committed by GitHub
parent fd6d59cd88
commit a83bd49426
69 changed files with 22021 additions and 539 deletions
+1 -1
View File
@@ -477,7 +477,7 @@ Type* TypeSystem::lookup_type_allow_partial_def(const std::string& name) const {
auto fwd_dec = m_forward_declared_types.find(current_name);
if (fwd_dec == m_forward_declared_types.end()) {
if (current_name == name) {
throw_typesystem_error("The type {} is unknown (2).\n", name);
throw_typesystem_error("The type '{}' is unknown (2).\n", name);
} else {
throw_typesystem_error("When looking up forward defined type {}, could not find a type {}.",
name, current_name);
+1 -1
View File
@@ -2483,7 +2483,7 @@ void DecompiledDataElement::do_decomp(const Env& env, const LinkedObjectFile* fi
if (m_label_info) {
m_description =
decompile_at_label_with_hint(*m_label_info, m_label, env.file->labels,
env.file->words_by_seg, *env.dts, file, env.version);
env.file->words_by_seg, env.dts->ts, file, env.version);
} else {
m_description = decompile_at_label_guess_type(m_label, env.file->labels, env.file->words_by_seg,
env.dts->ts, file, env.version);
+5 -1
View File
@@ -114,4 +114,8 @@ std::optional<int> LabelDB::try_get_index_by_offset(int seg, int offset) const {
int LabelDB::get_index_by_name(const std::string& name) const {
return m_labels_by_name.at(name);
}
} // namespace decompiler
bool LabelDB::label_exists_by_name(const std::string& name) const {
return m_labels_by_name.count(name) != 0;
}
} // namespace decompiler
+1
View File
@@ -35,6 +35,7 @@ class LabelDB {
int get_index_by_offset(int seg, int offset) const;
std::optional<int> try_get_index_by_offset(int seg, int offset) const;
int get_index_by_name(const std::string& name) const;
bool label_exists_by_name(const std::string& name) const;
LabelInfo set_and_get_previous(int idx,
const TypeSpec& type,
+4 -6
View File
@@ -282,16 +282,14 @@ void ObjectFileDB::ir2_top_level_pass(const Config& config) {
func.type = TypeSpec("function");
}
if (config.hacks.asm_functions_by_name.find(name) !=
config.hacks.asm_functions_by_name.end()) {
func.warnings.info("Flagged as asm by config");
func.suspected_asm = true;
}
if (config.hacks.mips2c_functions_by_name.find(name) !=
config.hacks.mips2c_functions_by_name.end()) {
func.warnings.info("Flagged as mips2c by config");
func.suspected_asm = true;
} else if (config.hacks.asm_functions_by_name.find(name) !=
config.hacks.asm_functions_by_name.end()) {
func.warnings.error("Flagged as asm by config");
func.suspected_asm = true;
}
}
}
-1
View File
@@ -58,7 +58,6 @@ bool try_convert_lambda(const Function& parent_function,
}
} // namespace
// TODO - important entry point!
int insert_static_refs(Form* top_level_form,
FormPool& pool,
const Function& function,
+135 -101
View File
@@ -6072,7 +6072,7 @@
(debug-draw-actors (_type_ symbol) none 15)
(assign-draw-indices (_type_) none 16)
(actors-update (_type_) none 17)
(update-nav-meshes (_type_) none 18)
(update-nav-meshes-method "Clashes with a function name" (_type_) none 18)
(level-update (_type_) none 19)
(level-get-target-inside (_type_) level 20)
(alloc-levels-if-needed (_type_ symbol) none 21)
@@ -8958,12 +8958,15 @@
;; traffic-h ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; +++traffic-h:traffic-danger-flags
(defenum traffic-danger-flags
:type uint8
:bitfield #t
(tdf0 0)
)
;; ---traffic-h:traffic-danger-flags
;; +++traffic-h:traffic-danger-type
(defenum traffic-danger-type
:type uint8
(tdt0 0)
@@ -8972,7 +8975,9 @@
(tdt3 3)
(tdt4 4)
(tdt5 5)
(tdt6 6)
)
;; ---traffic-h:traffic-danger-type
(deftype traffic-danger-info (structure)
((sphere sphere :inline :offset-assert 0)
@@ -20596,7 +20601,7 @@
(offset uint32 :offset-assert 20)
(accum float :offset-assert 24)
(spawn-time uint32 :offset-assert 28)
(control basic :offset-assert 32)
(control sparticle-launch-control :offset-assert 32)
(swarm basic :offset 20)
(seed uint32 :offset 24)
(time uint32 :offset 28)
@@ -22794,7 +22799,7 @@
(link-by-id "arg1 is a [[nav-mesh-link]] `id`" (_type_ uint) symbol 32)
(unlink-by-id "arg1 is a [[nav-mesh-link]] `id`" (_type_ uint) symbol 33)
(nav-mesh-method-34 (_type_ vector vector float) float 34)
(nav-mesh-method-35 (_type_ vector vector float) none 35)
(nav-mesh-method-35 (_type_ vector vector float) float 35)
(debug-draw-poly (_type_ nav-poly rgba) none 36)
(point-in-poly? (_type_ nav-poly vector) symbol 37)
(nav-mesh-method-38 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector 38)
@@ -31846,7 +31851,7 @@
:size-assert #x41c
:flag-assert #x150000041c
(:methods
(new (symbol type int string) _type_ 0)
(new (symbol type int symbol) _type_ 0)
(init-from-sql!
"Query the database and initialize the [[mysql-nav-graph]] and all it's related components"
(_type_ string string) symbol 9)
@@ -31893,7 +31898,7 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftype nav-graph-command (structure)
((com-type uint32 :offset-assert 0)
((com-type uint32 :offset-assert 0) ;; TODO - enum
(id int32 :offset-assert 4)
(index int32 :offset-assert 8)
(move-vec vector :inline :offset-assert 16)
@@ -31904,15 +31909,16 @@
)
(deftype nav-graph-command-array (inline-array-class)
((data nav-graph-command :dynamic :offset-assert 16))
((data nav-graph-command :inline :dynamic :offset-assert 16))
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype nav-graph-editor (process)
((nav-graph basic :offset-assert 128)
(mode uint32 :offset-assert 132)
((self-override nav-graph-editor :offset 32 :score 100)
(nav-graph mysql-nav-graph :offset-assert 128)
(mode symbol :offset-assert 132)
(command-id int32 :offset-assert 136)
(max-command int32 :offset-assert 140)
(selected-index int32 :offset-assert 144)
@@ -31930,14 +31936,14 @@
(edge-src int32 :offset-assert 256)
(edge-dst int32 :offset-assert 260)
(edge-visibility int32 :offset-assert 264)
(vehicle-edit-mode basic :offset-assert 268)
(hover-edit-mode basic :offset-assert 272)
(vehicle-edit-mode symbol :offset-assert 268)
(hover-edit-mode symbol :offset-assert 272)
(clipping-dist float :offset-assert 276)
(plane-height float :offset-assert 280)
(plane-height-hold float :offset-assert 284)
(default-node mysql-nav-node :inline :offset-assert 288)
(default-edge mysql-nav-edge :inline :offset-assert 356)
(command-array basic :offset-assert 424)
(command-array nav-graph-command-array :offset-assert 424)
)
:method-count-assert 64
:size-assert #x1ac
@@ -31957,57 +31963,57 @@
(adjust-edge-width () _type_ :state 25)
(adjust-edge-density () _type_ :state 26)
(draw-closest-minimap () _type_ :state 27)
(nav-graph-editor-method-28 () none 28)
(nav-graph-editor-method-29 () none 29)
(nav-graph-editor-method-30 () none 30)
(nav-graph-editor-method-31 () none 31)
(nav-graph-editor-method-32 () none 32)
(nav-graph-editor-method-33 () none 33)
(nav-graph-editor-method-34 () none 34)
(nav-graph-editor-method-35 () none 35)
(nav-graph-editor-method-36 () none 36)
(nav-graph-editor-method-37 () none 37)
(nav-graph-editor-method-38 () none 38)
(nav-graph-editor-method-39 () none 39)
(nav-graph-editor-method-40 () none 40)
(nav-graph-editor-method-41 () none 41)
(nav-graph-editor-method-42 () none 42)
(nav-graph-editor-method-43 () none 43)
(nav-graph-editor-method-44 () none 44)
(nav-graph-editor-method-45 () none 45)
(nav-graph-editor-method-46 () none 46)
(nav-graph-editor-method-47 () none 47)
(nav-graph-editor-method-48 () none 48)
(nav-graph-editor-method-49 () none 49)
(nav-graph-editor-method-50 () none 50)
(nav-graph-editor-method-51 () none 51)
(nav-graph-editor-method-52 () none 52)
(nav-graph-editor-method-53 () none 53)
(nav-graph-editor-method-54 () none 54)
(nav-graph-editor-method-55 () none 55)
(nav-graph-editor-method-56 () none 56)
(nav-graph-editor-method-57 () none 57)
(nav-graph-editor-method-58 () none 58)
(nav-graph-editor-method-59 () none 59)
(nav-graph-editor-method-60 () none 60)
(nav-graph-editor-method-61 () none 61)
(nav-graph-editor-method-28 (_type_) none 28)
(nav-graph-editor-method-29 (_type_ string string string) none 29)
(nav-graph-editor-method-30 (_type_ int) symbol 30)
(nav-graph-editor-method-31 (_type_ int) symbol 31)
(nav-graph-editor-method-32 (_type_ symbol int) none 32)
(nav-graph-editor-method-33 (_type_ int) none 33)
(nav-graph-editor-method-34 (_type_) object 34)
(nav-graph-editor-method-35 (_type_) none 35)
(nav-graph-editor-method-36 (_type_) none 36)
(nav-graph-editor-method-37 (_type_) none 37)
(nav-graph-editor-method-38 (_type_) none 38)
(nav-graph-editor-method-39 (_type_) none 39)
(nav-graph-editor-method-40 (_type_) none 40)
(nav-graph-editor-method-41 (_type_) none 41)
(nav-graph-editor-method-42 (_type_) symbol 42)
(nav-graph-editor-method-43 (_type_) none 43)
(nav-graph-editor-method-44 (_type_) symbol 44)
(nav-graph-editor-method-45 (_type_) none 45)
(nav-graph-editor-method-46 (_type_) pad-buttons 46)
(nav-graph-editor-method-47 (_type_) none 47)
(nav-graph-editor-method-48 "TODO - enum / com-type" (_type_ uint32) nav-graph-command 48)
(nav-graph-editor-method-49 (_type_) nav-graph-command 49)
(nav-graph-editor-method-50 (_type_) none 50)
(nav-graph-editor-method-51 (_type_) none 51)
(nav-graph-editor-method-52 (_type_) none 52)
(nav-graph-editor-method-53 (_type_ int int) none 53)
(nav-graph-editor-method-54 (_type_ int) none 54)
(nav-graph-editor-method-55 (_type_ int) none 55)
(nav-graph-editor-method-56 (_type_ int) none 56)
(nav-graph-editor-method-57 (_type_ int int) int 57)
(nav-graph-editor-method-58 (_type_) symbol 58)
(nav-graph-editor-method-59 (_type_) pad-buttons 59)
(nav-graph-editor-method-60 (_type_) none 60)
(nav-graph-editor-method-61 (_type_) none 61)
(nav-graph-editor-method-62 (_type_ symbol symbol) none 62)
(nav-graph-editor-method-63 () none 63)
(nav-graph-editor-method-63 (_type_) none 63)
)
)
(define-extern *nav-graph-editor* nav-graph-editor)
;; (define-extern nav-graph-editor-init-by-other function)
(define-extern run-nav-graph-editor (function symbol none))
(define-extern *nav-graph-editor* (pointer nav-graph-editor))
(define-extern nav-graph-editor-init-by-other (function int none :behavior nav-graph-editor))
(define-extern run-nav-graph-editor (function symbol (pointer process)))
(define-extern get-nav-graph-editor (function nav-graph-editor))
(define-extern exit-nav-graph-editor (function none))
;; (define-extern set-minimap-edge-flag function)
;; (define-extern set-vehicle-edit-mode function)
;; (define-extern translate-nav-graph function)
;; (define-extern update-nav-meshes function)
;; (define-extern smooth-nav-graph function)
;; (define-extern update-height function)
;; (define-extern update-width function)
(define-extern set-minimap-edge-flag (function nav-minimap-edge-flag uint))
(define-extern set-vehicle-edit-mode (function symbol none))
(define-extern translate-nav-graph (function float float float symbol))
(define-extern update-nav-meshes (function symbol))
(define-extern smooth-nav-graph (function string symbol))
(define-extern update-height (function string symbol))
(define-extern update-width (function string symbol))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; sampler ;;
@@ -33084,6 +33090,7 @@
(bounce-factor float :offset-assert 16)
(friction-factor float :offset-assert 20)
(bounce-mult-factor float :offset-assert 24)
(unknown-k1hbn23 float :offset-assert 28)
(cm-offset-joint vector :inline :offset-assert 32)
(inv-inertial-tensor matrix :inline :offset-assert 48)
(inertial-tensor matrix :inline :offset-assert 112)
@@ -33111,8 +33118,6 @@
(deftype rigid-body-object-constants (structure)
((info rigid-body-info :inline :offset-assert 0)
(mass float :offset 0)
(inv-mass float :offset 4)
(cm-joint vector :inline :offset 32)
(cm-joint-x meters :offset 32)
(cm-joint-y meters :offset 36)
@@ -33125,11 +33130,7 @@
(inertial-tensor-x meters :offset 176)
(inertial-tensor-y meters :offset 180)
(inertial-tensor-z meters :offset 184)
(extra rigid-body-object-extra-info :inline :offset-assert 188 :score -1)
(max-time-step float :offset 188)
(gravity meters :offset 192)
(idle-distance meters :offset 196)
(attack-force-scale float :offset 200)
(extra rigid-body-object-extra-info :inline :offset-assert 188)
(name symbol :offset-assert 204)
)
:method-count-assert 9
@@ -45109,7 +45110,6 @@
;; onin-game ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#|
(deftype onin-game-event (structure)
((min-count uint16 :offset-assert 0)
(max-count uint16 :offset-assert 2)
@@ -45120,20 +45120,19 @@
(max-wave uint16 :offset-assert 12)
(gravity meters :offset-assert 16)
)
:pack-me
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
|#
#|
(deftype onin-game-bubble (process-drawable)
((bubble-type int32 :offset-assert 196)
(bubble-start-time time-frame :offset-assert 204)
(gravity meters :offset-assert 212)
(dead? basic :offset-assert 216)
(angle float :offset-assert 220)
(height float :offset-assert 224)
((bubble-type int32 :offset-assert 200)
(bubble-start-time time-frame :offset-assert 208)
(gravity meters :offset-assert 216)
(dead? symbol :offset-assert 220)
(angle float :offset-assert 224)
(height float :offset-assert 228)
)
:method-count-assert 22
:size-assert #xe8
@@ -45143,7 +45142,6 @@
(fall () _type_ :state 21)
)
)
|#
(deftype onin-game (process-drawable)
((wave int32 :offset-assert 200)
@@ -45153,12 +45151,12 @@
(wave-length uint64 :offset-assert 224)
(event-time time-frame :offset-assert 232)
(event-length uint64 :offset-assert 240)
(hud-score uint64 :offset-assert 248)
(hud-goal uint64 :offset-assert 256)
(hud-miss uint64 :offset-assert 264)
(hud-score handle :offset-assert 248)
(hud-goal handle :offset-assert 256)
(hud-miss handle :offset-assert 264)
(score float :offset-assert 272)
(score-time time-frame :offset-assert 280)
(game uint32 :offset-assert 288)
(game (inline-array onin-game-event) :offset-assert 288)
(miss-max int32 :offset-assert 292)
(miss-count int32 :offset-assert 296)
(point-win float :offset-assert 300)
@@ -45174,20 +45172,20 @@
(:methods
(hide () _type_ :state 20)
(wait-for-start () _type_ :state 21)
(active () _type_ :state 22)
(active (symbol) _type_ :state 22)
(lose () _type_ :state 23)
(win () _type_ :state 24)
(onin-game-method-25 () none 25)
(onin-game-method-26 () none 26)
(onin-game-method-27 () none 27)
(onin-game-method-25 (_type_) none 25)
(onin-game-method-26 (_type_) none 26)
(onin-game-method-27 "TODO - bubble type" (_type_ int) none 27)
)
)
;; (define-extern *onin-game-data* array)
;; (define-extern birth-func-onin-bubble-pop (function int sparticle-cpuinfo sparticle-launchinfo none))
;; (define-extern birth-func-onin-bubble-birth-pop (function int sparticle-cpuinfo sparticle-launchinfo none))
;; (define-extern onin-game-bubble-init function)
(define-extern onin-game-init (function entity none))
(define-extern *onin-game-data* (array object))
(define-extern birth-func-onin-bubble-pop (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none))
(define-extern birth-func-onin-bubble-birth-pop (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none))
(define-extern onin-game-bubble-init "TODO - bubble type enum" (function vector int meters float float none :behavior onin-game-bubble))
(define-extern onin-game-init (function entity none :behavior onin-game))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; stadiumb-texture ;;
@@ -47415,19 +47413,28 @@
;; neon-praxis-part ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#|
(deftype city-neon-praxis (UNKNOWN)
()
:method-count-assert 0
:size-assert #x0
:flag-assert #x0
;; Failed to read fields.
(deftype city-neon-praxis (process-drawable)
(
(rot vector :inline :offset-assert 208)
(master-enable uint32 :offset-assert 224)
(unknown-k1jn23j1n23 uint32 3 :offset-assert 228)
(praxis-mode uint32 :offset-assert 240)
(back-mode uint32 :offset-assert 244)
(praxis-counter int32 :offset-assert 248)
(back-counter int32 :offset-assert 252)
(parts sparticle-launch-control 2 :offset-assert 256)
)
:method-count-assert 22
:size-assert #x108 ;; 264
:flag-assert #x1600900108
(:methods
(idle () _type_ :state 20)
(city-neon-praxis-method-21 (_type_) none 21))
)
|#
;; (define-extern *praxis* array)
;; (define-extern *praxis-backing* array)
;; (define-extern *city-neon-praxis-group-ids* array)
(define-extern *praxis* (array object))
(define-extern *praxis-backing* (array object))
(define-extern *city-neon-praxis-group-ids* (array int32))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ctypal-part ;;
@@ -48401,14 +48408,14 @@
(pad-ih12nb312 uint32 3 :offset-assert 228)
(mode uint32 :offset-assert 240)
(counter int32 :offset-assert 244)
(parts basic 1 :offset-assert 248)
(parts sparticle-launch-control 1 :offset-assert 248)
)
:method-count-assert 22
:size-assert #xfc
:flag-assert #x16008000fc
(:methods
(idle () _type_ :state 20)
(hiphog-exterior-marquee-method-21 () none 21))
(hiphog-exterior-marquee-method-21 (_type_) none 21))
)
(deftype farthy (process-drawable)
@@ -48420,7 +48427,7 @@
(idle () _type_ :state 20))
)
;; (define-extern check-drop-level-ctyport-drop-userdata (function sparticle-system sparticle-cpuinfo matrix none))
(define-extern check-drop-level-ctyport-drop-userdata (function sparticle-system sparticle-cpuinfo matrix none))
(define-extern *hiphog-exterior-marquee* (array object))
(define-extern *hiphog-exterior-marquee-group-ids* (array int32))
(define-extern *hiphog-exterior-marquee-daxter-group-ids* (array int32))
@@ -49956,6 +49963,7 @@
:flag-assert #x9000000c0
)
;; +++vehicle-guard:turret-flag
(defenum turret-flag
:bitfield #t
:type uint8
@@ -49966,6 +49974,33 @@
(display-marks 4)
(no-rot-y-clamp 5)
)
;; ---vehicle-guard:turret-flag
(deftype turret-unknown-stack-structure (structure)
"TODO - sigh...another one that i cant seem to find a fit"
((vec-1 vector :inline :offset-assert 0)
(vec-2 vector :inline :offset-assert 16)
(vec-3 vector :inline :offset-assert 32)
(vec-4 vector :inline :offset-assert 48)
(vec-5 vector :inline :offset-assert 64)
(vec-6 vector :inline :offset-assert 80)
(vec-7 vector :inline :offset-assert 96)
(mat-1 matrix :inline :offset-assert 112)
(vec-8 vector :inline :offset-assert 176)
(vec-9 vector :inline :offset-assert 192)
(vec-10 vector :inline :offset-assert 208)
(vec-11 vector :inline :offset-assert 224)
(vec-12 vector :inline :offset-assert 240))
)
(deftype turret-unknown-stack-structure2 (structure)
"TODO - another one! this one has an entity, but also a matrix!?"
((proj-params projectile-init-by-other-params :inline :offset-assert 0)
(mat-1 matrix :inline :offset-assert 96)
(vec-1 vector :inline :offset-assert 160)
(vec-2 vector :inline :offset-assert 176)
)
)
(deftype turret-control (structure)
(
@@ -50042,7 +50077,6 @@
:method-count-assert 159
:size-assert #x434
:flag-assert #x9f03c00434
;; Failed to read fields.
(:methods
(hostile () _type_ :state 144)
(stop-and-shoot () _type_ :state 145)
+3 -3
View File
@@ -44,7 +44,6 @@
"anim-test-anim-list-handler",
"anim-test-sequence-list-handler",
"anim-tester-get-playing-item",
"(method 58 nav-graph-editor)",
"start-pilot-recorder",
"(anon-function 10 pilot-recorder)",
"(method 0 hover-nav-control)",
@@ -106,7 +105,6 @@
"(method 154 vehicle-racer)",
"(method 228 hal-sewer)",
"(method 154 vehicle-city-racer)",
"(method 158 vehicle-guard)",
"(method 207 metalhead-predator)",
"test-to-from-spr",
"test-from-spr",
@@ -527,7 +525,9 @@
"(method 15 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11],
"(method 13 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11],
"(method 11 rigid-body-queue)": [0, 5, 6, 7, 8, 9, 10, 11, 17, 18, 25],
"(method 10 rigid-body-queue)": [0, 9, 10, 16, 24, 25, 26, 35, 36, 48]
"(method 10 rigid-body-queue)": [0, 9, 10, 16, 24, 25, 26, 35, 36, 48],
"(method 18 vehicle-controller)": [0, 1, 74, 75],
"(method 15 vehicle-controller)": [0, 3, 5, 6, 7, 10]
},
// Sometimes the game might use format strings that are fetched dynamically,
+3 -2
View File
@@ -226,7 +226,6 @@
"FORDUMPD.DGO",
"FRA.DGO",
"FRB.DGO",
"LBOMBBOT.DGO",
"GGA.DGO",
"HIDEOUT.DGO",
"HIPHOG.DGO",
@@ -235,6 +234,7 @@
"LASHGRD.DGO",
"LASHTHRN.DGO",
"LBBUSH.DGO",
"LBOMBBOT.DGO",
"LCGUARD.DGO",
"LCITYLOW.DGO",
"LDJAKBRN.DGO",
@@ -263,6 +263,7 @@
"LSACK.DGO",
"LSAMERGD.DGO",
"LSMYSBRT.DGO",
"LTENTOB.DGO",
"LTENTOUT.DGO",
"LTESS.DGO",
"LTHRNOUT.DGO",
@@ -273,10 +274,10 @@
"LWIDEA.DGO",
"LWIDEB.DGO",
"LWIDEC.DGO",
"LYSAMSAM.DGO",
"LYSKDCD.DGO",
"MTN.DGO",
"MTX.DGO",
"LYSAMSAM.DGO",
"NEB.DGO",
"NES.DGO",
"NESTT.DGO",
+155 -5
View File
@@ -732,11 +732,6 @@
["L1470", "vector"],
["L1469", "vector"]
],
"ctyport-part": [
["L591", "uint64", true],
["L592", "uint64", true],
["L590", "uint64", true]
],
"ruins-scenes": [["L30", "matrix3"]],
"hiphog-part": [
["L22", "(inline-array ripple-wave)", 6],
@@ -1380,5 +1375,160 @@
"vortex-data": [
["L25", "(inline-array vortex-vertex)", 1216],
["L24", "(pointer float)", 20]
],
"onin-game": [
["L422", "(inline-array onin-game-event)", 21],
["L423", "(inline-array onin-game-event)", 21]
],
"neon-praxis-part": [
// TODO - these types are probably wrong, but they are all just single words in a reference
["L33", "vector4w"],
["L34", "vector4w"],
["L36", "vector4w"],
["L37", "vector4w"],
["L38", "vector4w"],
["L39", "vector4w"],
["L41", "vector4w"],
["L42", "vector4w"],
["L43", "vector4w"],
["L44", "vector4w"],
["L45", "vector4w"],
["L46", "vector4w"],
["L48", "vector4w"],
["L49", "vector4w"],
["L50", "vector4w"],
["L51", "vector4w"],
["L52", "vector4w"],
["L53", "vector4w"],
["L54", "vector4w"],
["L55", "vector4w"],
["L56", "vector4w"],
["L57", "vector4w"],
["L59", "vector4w"],
["L60", "vector4w"],
["L61", "vector4w"],
["L62", "vector4w"],
["L63", "vector4w"],
["L64", "vector4w"],
["L65", "vector4w"],
["L66", "vector4w"],
["L67", "vector4w"],
["L68", "vector4w"],
["L70", "vector4w"],
["L71", "vector4w"],
["L72", "vector4w"],
["L73", "vector4w"],
["L74", "vector4w"],
["L75", "vector4w"],
["L76", "vector4w"],
["L77", "vector4w"],
["L78", "vector4w"],
["L79", "vector4w"],
["L80", "vector4w"],
["L81", "vector4w"],
["L83", "vector4w"],
["L85", "vector4w"],
["L91", "vector4w"],
["L92", "vector4w"],
["L93", "vector4w"],
["L94", "vector4w"],
["L95", "vector4w"],
["L96", "vector4w"],
["L97", "vector4w"],
["L98", "vector4w"],
["L99", "vector4w"],
["L100", "vector4w"],
["L101", "vector4w"],
["L102", "vector4w"],
["L104", "vector4w"],
["L105", "vector4w"],
["L106", "vector4w"],
["L107", "vector4w"],
["L108", "vector4w"],
["L109", "vector4w"],
["L110", "vector4w"],
["L111", "vector4w"],
["L112", "vector4w"],
["L113", "vector4w"],
["L114", "vector4w"],
["L115", "vector4w"],
["L117", "vector4w"],
["L118", "vector4w"],
["L119", "vector4w"],
["L120", "vector4w"],
["L121", "vector4w"],
["L122", "vector4w"],
["L123", "vector4w"],
["L124", "vector4w"],
["L125", "vector4w"],
["L126", "vector4w"],
["L127", "vector4w"],
["L128", "vector4w"],
["L130", "vector4w"],
["L132", "vector4w"],
["L238", "uint64", true]
],
"ctyport-part": [
// TODO - these types are probably wrong, but they are all just single words in a reference
["L215", "vector4w"],
["L216", "vector4w"],
["L218", "vector4w"],
["L219", "vector4w"],
["L220", "vector4w"],
["L221", "vector4w"],
["L223", "vector4w"],
["L224", "vector4w"],
["L225", "vector4w"],
["L226", "vector4w"],
["L227", "vector4w"],
["L228", "vector4w"],
["L229", "vector4w"],
["L230", "vector4w"],
["L231", "vector4w"],
["L233", "vector4w"],
["L234", "vector4w"],
["L235", "vector4w"],
["L236", "vector4w"],
["L237", "vector4w"],
["L238", "vector4w"],
["L239", "vector4w"],
["L240", "vector4w"],
["L241", "vector4w"],
["L242", "vector4w"],
["L244", "vector4w"],
["L245", "vector4w"],
["L246", "vector4w"],
["L247", "vector4w"],
["L248", "vector4w"],
["L249", "vector4w"],
["L250", "vector4w"],
["L251", "vector4w"],
["L252", "vector4w"],
["L253", "vector4w"],
["L254", "vector4w"],
["L255", "vector4w"],
["L256", "vector4w"],
["L257", "vector4w"],
["L258", "vector4w"],
["L259", "vector4w"],
["L261", "vector4w"],
["L262", "vector4w"],
["L263", "vector4w"],
["L264", "vector4w"],
["L265", "vector4w"],
["L266", "vector4w"],
["L267", "vector4w"],
["L268", "vector4w"],
["L269", "vector4w"],
["L270", "vector4w"],
["L271", "vector4w"],
["L272", "vector4w"],
["L273", "vector4w"],
["L274", "vector4w"],
["L276", "vector4w"],
["L278", "vector4w"],
["L591", "uint64", true],
["L592", "uint64", true],
["L590", "uint64", true]
]
}
+33 -6
View File
@@ -1535,12 +1535,12 @@
"(method 29 vehicle)": [
[16, ["inline-array", "matrix", 9]],
[640, ["inline-array", "vector", 5]],
[736, "rigid-body-vehicle-constants"]
[736, ["inline-array", "vehicle-control-point", 2]]
],
"vehicle-guard-choose-branch": [[16, ["inline-array", "vector", 5]]],
"(method 155 vehicle-guard)": [
[192, "rigid-body-impact"],
[256, ["inline-array", "vector", 8]]
[192, "traffic-danger-info"],
[256, "turret-unknown-stack-structure2"]
],
"(method 70 traffic-engine)": [
[16, ["inline-array", "traffic-suppression-box", 2]]
@@ -1572,7 +1572,7 @@
"(method 133 vehicle)": [[16, "mystery-vehicle-type"]],
"(method 153 vehicle-guard)": [[16, "vector"]],
"(method 150 vehicle-guard)": [[16, "vehicle-control-point"]],
"(method 9 turret-control)": [[16, "rigid-body-info"]],
"(method 9 turret-control)": [[16, "turret-unknown-stack-structure"]],
"(method 21 traffic-manager)": [[16, ["array", "int8", 21]]],
"(method 71 traffic-engine)": [[16, "vector"]],
"(method 18 city-level-info)": [[16, "bounding-box"]],
@@ -1732,7 +1732,7 @@
"(method 74 kid)": [[16, "vector"]],
"(trans idle vehicle-turret)": [[16, "vector"]],
"(anon-function 9 hal3-course)": [[96, "transport-params"]],
"(method 17 turret-control)": [[16, "attack-info"]],
"(method 17 turret-control)": [[16, "turret-unknown-stack-structure2"]],
"(code active lightning-tracker)": [[16, "vector"]],
"(anon-function 18 ctywide-bbush)": [
[64, "vector"],
@@ -1917,5 +1917,32 @@
"test-gen-perms": [[16, "gen-perms-context"]],
"gen-perms": [[16, "gen-perms-context"]],
"(method 11 hover-formation-control)": [[16, ["inline-array", "vector", 16]]],
"(method 11 hover-formation)": [[16, "vector"]]
"(method 11 hover-formation)": [[16, "vector"]],
"birth-func-onin-bubble-birth-pop": [[16, "vector"]],
"birth-func-onin-bubble-pop": [[16, "vector"]],
"(exit active onin-game)": [[96, ["array", "pointer", 3]]],
"(enter active onin-game)": [[16, ["array", "pointer", 3]]],
"check-drop-level-ctyport-drop-userdata": [[16, "vector"]],
"update-height": [[16, "vector"]],
"(method 30 nav-graph-editor)": [[16, "matrix"]],
"(method 31 nav-graph-editor)": [[16, "vector"]],
"(method 28 nav-graph-editor)": [
[16, "vector"],
[32, "vector"],
[48, ["inline-array", "vector", 2]]
],
"(method 34 nav-graph-editor)": [
[880, "matrix"],
[80, "vector"]
],
"(method 42 nav-graph-editor)": [[16, "vector"]],
"(method 45 nav-graph-editor)": [[16, "vector"]],
"(method 43 nav-graph-editor)": [[96, "vector"]],
"(method 32 nav-graph-editor)": [
[16, "vector"],
[32, "vector"]
],
"(post draw-closest-minimap nav-graph-editor)": [
[16, ["inline-array", "vector", 5]]
]
}
+13 -1
View File
@@ -8968,5 +8968,17 @@
[37, "s4", "process-focusable"],
[18, "v0", "path-control"]
],
"(method 10 hover-formation-control)": [[28, "s4", "process-focusable"]]
"(method 10 hover-formation-control)": [[28, "s4", "process-focusable"]],
"(method 27 onin-game)": [[15, "s1", "onin-game-bubble"]],
"(code idle hiphog-exterior-marquee)": [
[16, "a0", "(pointer int32)"],
[18, "a0", "(array object)"]
],
"(code idle city-neon-praxis)": [
[16, "a0", "(pointer int32)"],
[18, "a0", "(array object)"],
[49, "a0", "(pointer int32)"],
[51, "a0", "(array object)"]
],
"(method 7 nav-graph-editor)": [[9, "t9", "(function process int none)"]]
}
+45 -30
View File
@@ -25,7 +25,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
const DecompilerLabel& label,
const std::vector<DecompilerLabel>& labels,
const std::vector<std::vector<LinkedWord>>& words,
DecompilerTypeSystem& dts,
const TypeSystem& ts,
const LinkedObjectFile* file,
GameVersion version) {
const auto& type = hint.result_type;
@@ -35,7 +35,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
throw std::runtime_error(fmt::format(
"Label {} was marked as a value, but is being decompiled as a reference.", hint.name));
}
return decompile_at_label(type, label, labels, words, dts.ts, file, version);
return decompile_at_label(type, label, labels, words, ts, file, version);
}
if (type.base_type() == "pointer") {
@@ -43,7 +43,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
throw std::runtime_error(fmt::format(
"Label {} was marked as a value, but is being decompiled as a reference.", hint.name));
}
auto field_type_info = dts.ts.lookup_type(type.get_single_arg());
auto field_type_info = ts.lookup_type(type.get_single_arg());
if (field_type_info->is_reference()) {
throw std::runtime_error(
fmt::format("Type {} label {} is not yet supported by the data decompiler.", type.print(),
@@ -58,7 +58,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
words.at(label.target_segment).begin() + (label.offset / 4) + word_count);
return decompile_value_array(type.get_single_arg(), field_type_info, *hint.array_size, stride,
0, obj_words, dts.ts);
0, obj_words, ts);
}
}
@@ -67,7 +67,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
throw std::runtime_error(fmt::format(
"Label {} was marked as a value, but is being decompiled as a reference.", hint.name));
}
auto field_type_info = dts.ts.lookup_type(type.get_single_arg());
auto field_type_info = ts.lookup_type(type.get_single_arg());
if (!field_type_info->is_reference()) {
throw std::runtime_error(
fmt::format("Type {} for label {} is invalid, the element type is not inlineable.",
@@ -96,8 +96,8 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
fake_label.target_segment = label.target_segment;
fake_label.offset = label.offset + field_type_info->get_offset() + stride * elt;
fake_label.name = fmt::format("fake-label-{}-elt-{}", type.get_single_arg().print(), elt);
array_def.push_back(decompile_at_label(type.get_single_arg(), fake_label, labels, words,
dts.ts, file, version));
array_def.push_back(decompile_at_label(type.get_single_arg(), fake_label, labels, words, ts,
file, version));
}
return pretty_print::build_list(array_def);
}
@@ -191,28 +191,34 @@ goos::Object decompile_at_label(const TypeSpec& type,
const LinkedObjectFile* file,
GameVersion version,
bool in_static_pair) {
if (type == TypeSpec("string")) {
return decompile_string_at_label(label, words);
}
if (ts.tc(TypeSpec("function"), type)) {
return decompile_function_at_label(label, file, in_static_pair);
}
if (ts.tc(TypeSpec("array"), type)) {
std::optional<TypeSpec> content_type_spec;
if (type.has_single_arg()) {
content_type_spec = type.get_single_arg();
try {
if (type == TypeSpec("string")) {
return decompile_string_at_label(label, words);
}
return decompile_boxed_array(type, label, labels, words, ts, file, content_type_spec, version);
}
if (ts.tc(TypeSpec("structure"), type)) {
return decompile_structure(type, label, labels, words, ts, file, true, version);
}
if (ts.tc(TypeSpec("function"), type)) {
return decompile_function_at_label(label, file, in_static_pair);
}
if (type == TypeSpec("pair")) {
return decompile_pair(label, labels, words, ts, true, file, version);
if (ts.tc(TypeSpec("array"), type)) {
std::optional<TypeSpec> content_type_spec;
if (type.has_single_arg()) {
content_type_spec = type.get_single_arg();
}
return decompile_boxed_array(type, label, labels, words, ts, file, content_type_spec,
version);
}
if (ts.tc(TypeSpec("structure"), type)) {
return decompile_structure(type, label, labels, words, ts, file, true, version);
}
if (type == TypeSpec("pair")) {
return decompile_pair(label, labels, words, ts, true, file, version);
}
} catch (std::exception& ex) {
throw std::runtime_error(
fmt::format("Unable to 'decompile_at_label' {}, Reason: {}", label.name, ex.what()));
}
throw std::runtime_error(fmt::format(
@@ -1520,6 +1526,7 @@ goos::Object decompile_boxed_array(const TypeSpec& type,
if (type_ptr.kind() != LinkedWord::TYPE_PTR) {
throw std::runtime_error("Invalid basic in decompile_boxed_array");
}
// TODO - ideally this wouldn't be hard-coded
if (type_ptr.symbol_name() == "array" || type_ptr.symbol_name() == "texture-anim-array") {
auto content_type_ptr_word_idx = type_ptr_word_idx + 3;
auto& content_type_ptr = words.at(label.target_segment).at(content_type_ptr_word_idx);
@@ -1576,12 +1583,20 @@ goos::Object decompile_boxed_array(const TypeSpec& type,
if (word.kind() == LinkedWord::PLAIN_DATA && word.data == 0) {
result.push_back(pretty_print::to_symbol("0"));
} else if (word.kind() == LinkedWord::PTR) {
const auto& elt_label = labels.at(word.label_id());
if (content_type == TypeSpec("object")) {
result.push_back(decompile_at_label_guess_type(labels.at(word.label_id()), labels, words,
ts, file, version));
// if there is a type hint for the label, no need to guess!
if (file->label_db->label_exists_by_name(elt_label.name)) {
result.push_back(decompile_at_label_with_hint(file->label_db->lookup(elt_label.name),
elt_label, labels, words, ts, file,
version));
} else {
result.push_back(
decompile_at_label_guess_type(elt_label, labels, words, ts, file, version));
}
} else {
result.push_back(decompile_at_label(content_type, labels.at(word.label_id()), labels,
words, ts, file, version));
result.push_back(
decompile_at_label(content_type, elt_label, labels, words, ts, file, version));
}
} else if (word.kind() == LinkedWord::SYM_PTR) {
result.push_back(pretty_print::to_symbol(fmt::format("'{}", word.symbol_name())));
+1 -1
View File
@@ -32,7 +32,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint,
const DecompilerLabel& label,
const std::vector<DecompilerLabel>& labels,
const std::vector<std::vector<LinkedWord>>& words,
DecompilerTypeSystem& dts,
const TypeSystem& dts,
const LinkedObjectFile* file,
GameVersion version);
goos::Object decompile_at_label_guess_type(const DecompilerLabel& label,
+11 -8
View File
@@ -5,14 +5,7 @@
;; name in dgo: traffic-h
;; dgos: ENGINE, GAME
;; todo: some types, method names.
(defenum traffic-danger-flags
:type uint8
:bitfield #t
(tdf0 0)
)
;; +++traffic-danger-type
(defenum traffic-danger-type
:type uint8
(tdt0 0)
@@ -21,7 +14,17 @@
(tdt3 3)
(tdt4 4)
(tdt5 5)
(tdt6 6)
)
;; ---traffic-danger-type
;; +++traffic-danger-flags
(defenum traffic-danger-flags
:type uint8
:bitfield #t
(tdf0 0)
)
;; ---traffic-danger-flags
;; NOTE - for default-menu
(define-extern traffic-start (function none))
@@ -126,7 +126,7 @@
*y-vector*
(* (-> obj rbody state info mass)
(fmin 1.0 f30-0)
(/ (-> obj info-override gravity) (the float (-> obj info-override control-point-count)))
(/ (-> obj info-override extra gravity) (the float (-> obj info-override control-point-count)))
(-> obj info-override buoyancy-factor)
)
)
@@ -168,7 +168,7 @@
(defmethod rigid-body-platform-method-55 rigid-body-platform ((obj rigid-body-platform))
(let ((a1-0 (new 'stack-no-clear 'vector)))
(vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override gravity) (-> obj rbody state info mass)))
(vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override extra gravity) (-> obj rbody state info mass)))
(rigid-body-method-20 (-> obj rbody state) a1-0)
)
0
@@ -367,7 +367,7 @@
(set! (-> obj player-velocity quad) (-> *null-vector* quad))
(set! (-> obj player-velocity-prev quad) (-> *null-vector* quad))
(set! (-> obj root-override-2 max-iteration-count) (the-as uint 4))
(set! (-> obj max-time-step) (-> arg0 max-time-step))
(set! (-> obj max-time-step) (-> arg0 extra max-time-step))
(set! (-> obj water-anim) (the-as water-anim (entity-actor-lookup (-> obj entity) 'water-actor 0)))
0
(none)
@@ -413,10 +413,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4))
)
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*rigid-body-platform-constants*
:drag-factor 0.8
:buoyancy-factor 1.5
+3 -5
View File
@@ -2797,7 +2797,6 @@
)
(defun dm-play-task-with-continue ((arg0 game-task) (arg1 string))
(format 0 "hello world - ~D:~S~%" arg0 arg1)
(let* ((t9-0 play-task)
(a1-1 'debug)
(a2-0 (cond
@@ -2822,7 +2821,6 @@
)
(defun dm-play-task ((arg0 game-task))
(format 0 "DEBUG - ~D~%" arg0)
(dm-play-task-with-continue (the-as game-task (/ (the-as int arg0) 8)) (the-as string #f))
(none)
)
@@ -4133,7 +4131,7 @@
(function "Toggle Plane Mode" #f ,(lambda ()
(let ((a0-0 (get-nav-graph-editor)))
(if a0-0
((method-of-object a0-0 nav-graph-editor-method-60))
(nav-graph-editor-method-60 a0-0)
)
)
(none)
@@ -4142,7 +4140,7 @@
(function "Toggle Hover Mode" #f ,(lambda ()
(let ((a0-0 (get-nav-graph-editor)))
(if a0-0
((method-of-object a0-0 nav-graph-editor-method-61))
(nav-graph-editor-method-61 a0-0)
)
)
(none)
@@ -4208,7 +4206,7 @@
(function "Save" #f ,(lambda ()
(let ((a0-0 (get-nav-graph-editor)))
(if a0-0
((method-of-object a0-0 nav-graph-editor-method-63))
(nav-graph-editor-method-63 a0-0)
)
)
(none)
@@ -217,7 +217,7 @@
:size-assert #x41c
:flag-assert #x150000041c
(:methods
(new (symbol type int string) _type_ 0)
(new (symbol type int symbol) _type_ 0)
(init-from-sql! (_type_ string string) symbol 9)
(exec-sql! (_type_) symbol 10)
(indexof-nav-node (_type_ int) int 11)
@@ -235,7 +235,7 @@
;; WARN: Return type mismatch object vs mysql-nav-graph.
(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string))
(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 symbol))
(let ((gp-0 (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(if (zero? gp-0)
(return (the-as mysql-nav-graph 0))
@@ -8,14 +8,33 @@
;; NOTE - for default-menu
(declare-type nav-graph-editor process)
(define-extern get-nav-graph-editor (function nav-graph-editor))
(define-extern run-nav-graph-editor (function symbol none))
(define-extern run-nav-graph-editor (function symbol (pointer process)))
(define-extern exit-nav-graph-editor (function none))
;; DECOMP BEGINS
(deftype nav-graph-command (structure)
((com-type uint32 :offset-assert 0) ;; TODO - enum
(id int32 :offset-assert 4)
(index int32 :offset-assert 8)
(move-vec vector :inline :offset-assert 16)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
)
(deftype nav-graph-command-array (inline-array-class)
((data nav-graph-command :inline :dynamic :offset-assert 16))
:method-count-assert 9
:size-assert #x10
:flag-assert #x900000010
)
(deftype nav-graph-editor (process)
((nav-graph basic :offset-assert 128)
(mode uint32 :offset-assert 132)
((self-override nav-graph-editor :offset 32 :score 100)
(nav-graph mysql-nav-graph :offset-assert 128)
(mode symbol :offset-assert 132)
(command-id int32 :offset-assert 136)
(max-command int32 :offset-assert 140)
(selected-index int32 :offset-assert 144)
@@ -33,14 +52,14 @@
(edge-src int32 :offset-assert 256)
(edge-dst int32 :offset-assert 260)
(edge-visibility int32 :offset-assert 264)
(vehicle-edit-mode basic :offset-assert 268)
(hover-edit-mode basic :offset-assert 272)
(vehicle-edit-mode symbol :offset-assert 268)
(hover-edit-mode symbol :offset-assert 272)
(clipping-dist float :offset-assert 276)
(plane-height float :offset-assert 280)
(plane-height-hold float :offset-assert 284)
(default-node mysql-nav-node :inline :offset-assert 288)
(default-edge mysql-nav-edge :inline :offset-assert 356)
(command-array basic :offset-assert 424)
(command-array nav-graph-command-array :offset-assert 424)
)
:method-count-assert 64
:size-assert #x1ac
@@ -60,41 +79,41 @@
(adjust-edge-width () _type_ :state 25)
(adjust-edge-density () _type_ :state 26)
(draw-closest-minimap () _type_ :state 27)
(nav-graph-editor-method-28 () none 28)
(nav-graph-editor-method-29 () none 29)
(nav-graph-editor-method-30 () none 30)
(nav-graph-editor-method-31 () none 31)
(nav-graph-editor-method-32 () none 32)
(nav-graph-editor-method-33 () none 33)
(nav-graph-editor-method-34 () none 34)
(nav-graph-editor-method-35 () none 35)
(nav-graph-editor-method-36 () none 36)
(nav-graph-editor-method-37 () none 37)
(nav-graph-editor-method-38 () none 38)
(nav-graph-editor-method-39 () none 39)
(nav-graph-editor-method-40 () none 40)
(nav-graph-editor-method-41 () none 41)
(nav-graph-editor-method-42 () none 42)
(nav-graph-editor-method-43 () none 43)
(nav-graph-editor-method-44 () none 44)
(nav-graph-editor-method-45 () none 45)
(nav-graph-editor-method-46 () none 46)
(nav-graph-editor-method-47 () none 47)
(nav-graph-editor-method-48 () none 48)
(nav-graph-editor-method-49 () none 49)
(nav-graph-editor-method-50 () none 50)
(nav-graph-editor-method-51 () none 51)
(nav-graph-editor-method-52 () none 52)
(nav-graph-editor-method-53 () none 53)
(nav-graph-editor-method-54 () none 54)
(nav-graph-editor-method-55 () none 55)
(nav-graph-editor-method-56 () none 56)
(nav-graph-editor-method-57 () none 57)
(nav-graph-editor-method-58 () none 58)
(nav-graph-editor-method-59 () none 59)
(nav-graph-editor-method-60 () none 60)
(nav-graph-editor-method-61 () none 61)
(nav-graph-editor-method-28 (_type_) none 28)
(nav-graph-editor-method-29 (_type_ string string string) none 29)
(nav-graph-editor-method-30 (_type_ int) symbol 30)
(nav-graph-editor-method-31 (_type_ int) symbol 31)
(nav-graph-editor-method-32 (_type_ symbol int) none 32)
(nav-graph-editor-method-33 (_type_ int) none 33)
(nav-graph-editor-method-34 (_type_) object 34)
(nav-graph-editor-method-35 (_type_) none 35)
(nav-graph-editor-method-36 (_type_) none 36)
(nav-graph-editor-method-37 (_type_) none 37)
(nav-graph-editor-method-38 (_type_) none 38)
(nav-graph-editor-method-39 (_type_) none 39)
(nav-graph-editor-method-40 (_type_) none 40)
(nav-graph-editor-method-41 (_type_) none 41)
(nav-graph-editor-method-42 (_type_) symbol 42)
(nav-graph-editor-method-43 (_type_) none 43)
(nav-graph-editor-method-44 (_type_) symbol 44)
(nav-graph-editor-method-45 (_type_) none 45)
(nav-graph-editor-method-46 (_type_) pad-buttons 46)
(nav-graph-editor-method-47 (_type_) none 47)
(nav-graph-editor-method-48 "TODO - enum / com-type" (_type_ uint32) nav-graph-command 48)
(nav-graph-editor-method-49 (_type_) nav-graph-command 49)
(nav-graph-editor-method-50 (_type_) none 50)
(nav-graph-editor-method-51 (_type_) none 51)
(nav-graph-editor-method-52 (_type_) none 52)
(nav-graph-editor-method-53 (_type_ int int) none 53)
(nav-graph-editor-method-54 (_type_ int) none 54)
(nav-graph-editor-method-55 (_type_ int) none 55)
(nav-graph-editor-method-56 (_type_ int) none 56)
(nav-graph-editor-method-57 (_type_ int int) int 57)
(nav-graph-editor-method-58 (_type_) symbol 58)
(nav-graph-editor-method-59 (_type_) pad-buttons 59)
(nav-graph-editor-method-60 (_type_) none 60)
(nav-graph-editor-method-61 (_type_) none 61)
(nav-graph-editor-method-62 (_type_ symbol symbol) none 62)
(nav-graph-editor-method-63 () none 63)
(nav-graph-editor-method-63 (_type_) none 63)
)
)
+1 -1
View File
@@ -1507,7 +1507,7 @@
)
(with-profiler 'nav *profile-nav-color*
(update-nav-meshes *level*)
(update-nav-meshes-method *level*)
)
(with-profiler 'background *profile-background-color*
+3 -4
View File
@@ -238,7 +238,8 @@
)
)
(defmethod update-nav-meshes level-group ((obj level-group))
(defmethod update-nav-meshes-method level-group ((obj level-group))
"Clashes with a function name"
(when (not (paused?))
(dotimes (s5-0 (-> obj length))
(let ((v1-4 (-> obj level s5-0)))
@@ -2386,8 +2387,6 @@
)
)
;; ERROR: Unsupported inline assembly instruction kind - [mtc0 Count, r0]
;; ERROR: Unsupported inline assembly instruction kind - [sync.p]
;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s4, Count]
(defun-debug entity-speed-test ((arg0 string))
(local-vars (s4-0 int))
@@ -2397,7 +2396,7 @@
(reset-actors 'debug)
0
(disable-irq)
(.mtc0 Count r0)
(.mtc0 Count 0)
(.sync.p)
(birth! gp-0)
(.mfc0 s4-0 Count)
@@ -383,21 +383,21 @@
(deftype sparticle-launch-state (structure)
((group-item sparticle-group-item :offset-assert 0)
(flags sp-launch-state-flags :offset-assert 4)
(randomize uint16 :offset-assert 6)
(center vector :offset-assert 8)
(sprite3d sprite-vec-data-3d :offset-assert 12)
(sprite sparticle-cpuinfo :offset-assert 16)
(offset uint32 :offset-assert 20)
(accum float :offset-assert 24)
(spawn-time uint32 :offset-assert 28)
(control basic :offset-assert 32)
(swarm basic :offset 20)
(seed uint32 :offset 24)
(time uint32 :offset 28)
(spec basic :offset 16)
(id uint32 :offset 12)
((group-item sparticle-group-item :offset-assert 0)
(flags sp-launch-state-flags :offset-assert 4)
(randomize uint16 :offset-assert 6)
(center vector :offset-assert 8)
(sprite3d sprite-vec-data-3d :offset-assert 12)
(sprite sparticle-cpuinfo :offset-assert 16)
(offset uint32 :offset-assert 20)
(accum float :offset-assert 24)
(spawn-time uint32 :offset-assert 28)
(control sparticle-launch-control :offset-assert 32)
(swarm basic :offset 20)
(seed uint32 :offset 24)
(time uint32 :offset 28)
(spec basic :offset 16)
(id uint32 :offset 12)
)
:method-count-assert 9
:size-assert #x24
@@ -461,9 +461,3 @@
(set! (-> sparticle-launch-control heap-base) (the-as uint 48))
0
+1 -1
View File
@@ -409,7 +409,7 @@
(debug-draw-actors (_type_ symbol) none 15)
(assign-draw-indices (_type_) none 16)
(actors-update (_type_) none 17)
(update-nav-meshes (_type_) none 18)
(update-nav-meshes-method (_type_) none 18)
(level-update (_type_) none 19)
(level-get-target-inside (_type_) level 20)
(alloc-levels-if-needed (_type_ symbol) none 21)
+1 -1
View File
@@ -247,7 +247,7 @@ and declared out of order (cannot use forward declared structures in inline arra
(link-by-id (_type_ uint) symbol 32)
(unlink-by-id (_type_ uint) symbol 33)
(nav-mesh-method-34 (_type_ vector vector float) float 34)
(nav-mesh-method-35 (_type_ vector vector float) none 35)
(nav-mesh-method-35 (_type_ vector vector float) float 35)
(debug-draw-poly (_type_ nav-poly rgba) none 36)
(point-in-poly? (_type_ nav-poly vector) symbol 37)
(nav-mesh-method-38 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector 38)
-2
View File
@@ -2632,7 +2632,6 @@
)
)
;; WARN: Return type mismatch float vs none.
;; WARN: new jak 2 until loop case, check carefully
(defmethod nav-mesh-method-35 nav-mesh ((obj nav-mesh) (arg0 vector) (arg1 vector) (arg2 float))
(let ((gp-0 (new 'stack-no-clear 'inline-array 'nav-poly 3)))
@@ -2670,7 +2669,6 @@
)
(-> gp-0 2 vertex3 y)
)
(none)
)
(none)
+16 -21
View File
@@ -82,6 +82,7 @@
(bounce-factor float :offset-assert 16)
(friction-factor float :offset-assert 20)
(bounce-mult-factor float :offset-assert 24)
(unknown-k1hbn23 float :offset-assert 28)
(cm-offset-joint vector :inline :offset-assert 32)
(inv-inertial-tensor matrix :inline :offset-assert 48)
(inertial-tensor matrix :inline :offset-assert 112)
@@ -110,27 +111,21 @@
(deftype rigid-body-object-constants (structure)
((info rigid-body-info :inline :offset-assert 0)
(mass float :offset 0)
(inv-mass float :offset 4)
(cm-joint vector :inline :offset 32)
(cm-joint-x meters :offset 32)
(cm-joint-y meters :offset 36)
(cm-joint-z meters :offset 40)
(cm-joint-w meters :offset 44)
(linear-damping float :offset 8)
(angular-damping float :offset 12)
(bounce-factor float :offset 16)
(friction-factor float :offset 20)
(inertial-tensor-x meters :offset 176)
(inertial-tensor-y meters :offset 180)
(inertial-tensor-z meters :offset 184)
(extra rigid-body-object-extra-info :inline :offset-assert 188)
(max-time-step float :offset 188)
(gravity meters :offset 192)
(idle-distance meters :offset 196)
(attack-force-scale float :offset 200)
(name symbol :offset-assert 204)
((info rigid-body-info :inline :offset-assert 0)
(cm-joint vector :inline :offset 32)
(cm-joint-x meters :offset 32)
(cm-joint-y meters :offset 36)
(cm-joint-z meters :offset 40)
(cm-joint-w meters :offset 44)
(linear-damping float :offset 8)
(angular-damping float :offset 12)
(bounce-factor float :offset 16)
(friction-factor float :offset 20)
(inertial-tensor-x meters :offset 176)
(inertial-tensor-y meters :offset 180)
(inertial-tensor-z meters :offset 184)
(extra rigid-body-object-extra-info :inline :offset-assert 188)
(name symbol :offset-assert 204)
)
:method-count-assert 9
:size-assert #xd0
+11 -9
View File
@@ -898,7 +898,7 @@
(defmethod rigid-body-object-method-29 rigid-body-object ((obj rigid-body-object) (arg0 float))
(let ((a1-1 (new 'stack-no-clear 'vector)))
(vector-reset! a1-1)
(set! (-> a1-1 y) (* -1.0 (-> obj info gravity) (-> obj rbody state info mass)))
(set! (-> a1-1 y) (* -1.0 (-> obj info extra gravity) (-> obj rbody state info mass)))
(rigid-body-method-20 (-> obj rbody state) a1-1)
)
0
@@ -944,7 +944,7 @@
(method-of-object obj rigid-body-object-method-29)
)
(rigid-body-object-method-35 obj)
(set! (-> obj max-time-step) (-> arg0 max-time-step))
(set! (-> obj max-time-step) (-> arg0 extra max-time-step))
(set! (-> obj root-override-2 max-iteration-count) (the-as uint 4))
(let ((v1-15 (-> obj skel root-channel 0)))
(set! (-> v1-15 num-func) num-func-identity)
@@ -993,10 +993,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4))
)
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*rigid-body-object-constants*
)
)
@@ -1182,7 +1184,7 @@ This commonly includes things such as:
)
)
)
(set! (-> s5-0 impulse) (* f0-2 (-> obj info attack-force-scale)))
(set! (-> s5-0 impulse) (* f0-2 (-> obj info extra attack-force-scale)))
(apply-damage obj (* 0.667 f1-0) s5-0)
)
(rigid-body-object-method-42 obj)
@@ -1417,7 +1419,7 @@ This commonly includes things such as:
(defstate idle (rigid-body-object)
:virtual #t
:trans (behavior ()
(if (and *target* (and (>= (-> self info idle-distance)
(if (and *target* (and (>= (-> self info extra idle-distance)
(vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans))
)
(zero? (logand (focus-status teleporting) (-> *target* focus-status)))
@@ -1439,7 +1441,7 @@ This commonly includes things such as:
)
:trans (behavior ()
(if (or (not *target*)
(or (< (+ 4096.0 (-> self info idle-distance))
(or (< (+ 4096.0 (-> self info extra idle-distance))
(vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans))
)
(logtest? (focus-status teleporting) (-> *target* focus-status))
@@ -35,10 +35,12 @@
:cm-offset-joint (new 'static 'vector :z 8192.0 :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 16) (meters 6) (meters 20))
)
:max-time-step 0.033333335
:gravity (meters 40)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.033333335
:gravity (meters 40)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*barge-constants*
:flags #x8
:object-type #x11
@@ -505,7 +507,7 @@
(rigid-body-method-18 (-> v1-10 state) a1-9 (the-as vector a2-0))
)
(.svf (&-> (-> s4-0 vector) 0 quad) vf0)
(set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 gravity) (-> s2-0 info mass)))
(set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 extra gravity) (-> s2-0 info mass)))
(let ((a1-10 (-> s4-0 vector)))
(rigid-body-method-20 (-> s3-0 state) (the-as vector a1-10))
)
@@ -147,30 +147,34 @@
(let* ((s5-0 (-> obj branch dest-node))
(s4-0 (-> s5-0 branch-count))
)
(cond
((= s4-0 1)
(let ((v1-4 (-> s5-0 branch-array 0)))
(if (!= (-> v1-4 dest-node id) #xffff)
(set! gp-0 v1-4)
)
)
)
((< 1 s4-0)
(let ((v1-6 (rand-vu-int-count s4-0)))
(countdown (a0-8 s4-0)
(let ((a1-3 (-> s5-0 branch-array v1-6)))
(b! (not (!= (-> a1-3 dest-node id) #xffff)) cfg-8 :delay (empty-form))
(set! gp-0 a1-3)
)
(b! #t cfg-12 :delay (nop!))
(label cfg-8)
(+! v1-6 1)
(if (>= v1-6 s4-0)
(set! v1-6 0)
)
)
)
)
(b! (!= s4-0 1) cfg-4 :delay (empty-form))
(let ((v1-4 (-> s5-0 branch-array 0)))
(if (!= (-> v1-4 dest-node id) #xffff)
(set! gp-0 v1-4)
)
)
(b! #t cfg-12 :delay (nop!))
(label cfg-4)
(when (< 1 s4-0)
(let ((v1-6 (rand-vu-int-count s4-0))
(a0-8 s4-0)
)
(b! #t cfg-10 :delay (nop!))
(label cfg-6)
(+! a0-8 -1)
(let ((a1-3 (-> s5-0 branch-array v1-6)))
(b! (not (!= (-> a1-3 dest-node id) #xffff)) cfg-8 :delay (empty-form))
(set! gp-0 a1-3)
)
(b! #t cfg-12 :delay (nop!))
(label cfg-8)
(+! v1-6 1)
(if (>= v1-6 s4-0)
(set! v1-6 0)
)
(label cfg-10)
(b! (nonzero? a0-8) cfg-6 :delay (nop!))
)
)
)
(label cfg-12)
@@ -318,7 +322,7 @@
0
(set! sv-16 arg0)
(set! sv-20 arg3)
(set! sv-24 (-> arg2 info-override inv-mass))
(set! sv-24 (-> arg2 info-override info inv-mass))
(let ((gp-0 (new 'stack-no-clear 'inline-array 'vector 16)))
(set! (-> gp-0 15 x) (+ (-> obj target-speed) (-> obj target-speed-offset)))
(set! (-> gp-0 1 quad) (-> arg1 quad))
@@ -437,7 +441,7 @@
(vector-float*!
(-> gp-0 6)
(-> gp-0 14)
(* -0.5 (/ sv-24 (+ sv-24 (-> v1-70 info-override inv-mass))) sv-20 f1-14)
(* -0.5 (/ sv-24 (+ sv-24 (-> v1-70 info-override info inv-mass))) sv-20 f1-14)
)
(vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6))
)
File diff suppressed because it is too large Load Diff
@@ -6,3 +6,814 @@
;; dgos: CWI
;; DECOMP BEGINS
(defmethod vehicle-method-99 vehicle ((obj vehicle) (arg0 float))
(let ((s4-0 (new 'stack-no-clear 'vehicle-grab-rail-info))
(s3-0 (-> obj root-override-2 root-prim))
(s2-0 1)
)
(when (< (-> obj rbody state position y) (+ (-> obj water-height) (-> s3-0 local-sphere w)))
(when (= (-> s3-0 prim-core prim-type) (prim-type group))
(let ((v1-5 (the-as collide-shape-prim-group s3-0)))
(set! s3-0 (-> v1-5 child 0))
(set! s2-0 (the-as int (-> v1-5 num-children)))
)
)
(countdown (s1-0 s2-0)
(when (= (-> s3-0 prim-core prim-type) (prim-type sphere))
(let* ((s0-0 (-> s3-0 prim-core))
(f0-2 (- (-> s0-0 world-sphere y) (-> s0-0 world-sphere w)))
)
(when (< f0-2 (-> obj water-height))
(set! (-> s4-0 local-pos 0 quad) (-> s0-0 world-sphere quad))
(let ((f1-5 (fmin (-> obj water-height) (+ (-> s0-0 world-sphere y) (-> s0-0 world-sphere w)))))
0.0
(let* ((f2-5 (fmax -1.0 (fmin 1.0 (/ (- (-> obj water-height) (-> s0-0 world-sphere y)) (-> s0-0 world-sphere w)))))
(f30-0 (+ 0.5 (* -0.25 f2-5 f2-5 f2-5) (* 0.75 f2-5)))
)
(set! (-> s4-0 local-pos 0 y) (* 0.5 (+ f0-2 f1-5)))
(let ((v1-18 (-> obj rbody))
(a1-1 (-> s4-0 local-pos))
(a2-0 (-> s4-0 normal))
)
(rigid-body-method-22 (-> v1-18 state) (the-as vector a1-1) a2-0)
)
(let* ((f0-7 (* 0.062831804 (fmin 200.0 (vector-length (-> s4-0 normal))) f30-0))
(f1-8 (-> s0-0 world-sphere w))
(f0-8 (* f0-7 (* f1-8 f1-8)))
(f1-11 4096.0)
(f1-13 (* f1-11 f1-11))
(f0-10 (fmin (* f0-8 (/ 1.0 f1-13)) (/ (-> obj info-override info mass) (* 2.0 arg0 (the float s2-0)))))
)
(vector-float*! (-> s4-0 local-pos 1) (-> s4-0 normal) (* -1.0 f0-10))
)
(let ((v1-34 (-> obj rbody))
(a1-3 (-> s4-0 local-pos))
(a2-1 (-> s4-0 local-pos 1))
)
(rigid-body-method-18 (-> v1-34 state) (the-as vector a1-3) a2-1)
)
(vector-reset! (-> s4-0 local-pos 1))
(let* ((f0-12 549018.94)
(f1-19 4096.0)
(f2-13 4096.0)
(f1-20 (* f1-19 (* f2-13 f2-13)))
(f0-16 (* f0-12 (/ 1.0 f1-20) (-> obj info-override buoyancy-factor) f30-0 (-> s0-0 world-sphere w)))
(f1-25 (-> s0-0 world-sphere w))
)
(set! (-> s4-0 local-pos 1 y) (* f0-16 (* f1-25 f1-25)))
)
)
)
(let ((v1-46 (-> obj rbody))
(a1-4 (-> s4-0 local-pos))
(a2-2 (-> s4-0 local-pos 1))
)
(rigid-body-method-18 (-> v1-46 state) (the-as vector a1-4) a2-2)
)
)
)
)
(&+! s3-0 80)
)
)
)
0
(none)
)
(deftype vehicle-probe-work (structure)
((local-pos vector :inline :offset-assert 0)
(local-normal vector :inline :offset-assert 16)
(world-pos vector :inline :offset-assert 32)
(world-normal vector :inline :offset-assert 48)
(probe-pos vector :inline :offset-assert 64)
(ground-pos vector :inline :offset-assert 80)
(ground-normal vector :inline :offset-assert 96)
(velocity vector :inline :offset-assert 112)
(tire-force vector :inline :offset-assert 128)
(wheel-axis vector :inline :offset-assert 144)
)
:method-count-assert 9
:size-assert #xa0
:flag-assert #x9000000a0
)
(deftype vehicle-physics-work (structure)
((mat matrix :inline :offset-assert 0)
(force vector :inline :offset-assert 64)
(velocity vector :inline :offset-assert 80)
(world-pos vector :inline :offset-assert 96)
(world-normal vector :inline :offset-assert 112)
(local-pos vector :inline :offset-assert 128)
(steering-axis vector :inline :offset-assert 144)
(lift-dir vector :inline :offset-assert 160)
(normal vector :inline :offset-assert 176)
(tmp vector :inline :offset-assert 192)
(p-body vector :inline :offset-assert 208)
(axis vector :inline :offset-assert 224)
(dir vector :inline :offset-assert 240)
(ground-normal vector :inline :offset-assert 256)
(impulse float :offset-assert 272)
(vel-dot-norm float :offset-assert 276)
(friction-coef float :offset-assert 280)
(speed-factor float :offset-assert 284)
(probe-work-array vehicle-probe-work 2 :inline :offset-assert 288)
)
:method-count-assert 9
:size-assert #x260
:flag-assert #x900000260
)
(defmethod vehicle-method-100 vehicle ((obj vehicle) (arg0 float) (arg1 vehicle-physics-work))
(local-vars (v1-81 float) (v1-184 float))
(rlet ((acc :class vf)
(vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(vf7 :class vf)
)
(init-vf0-vector)
(+! (-> obj physics-counter) 1)
(let ((s3-0 (-> obj rbody)))
(mem-copy! (the-as pointer (-> arg1 mat)) (the-as pointer (-> s3-0 state matrix)) 64)
(let* ((f28-0 (* -1.0 (-> obj controls steering) (-> obj info-override tire-steering-angle)))
(f30-0 (cos f28-0))
(f0-2 (sin f28-0))
)
(set! (-> arg1 steering-axis x) f30-0)
(set! (-> arg1 steering-axis y) 0.0)
(set! (-> arg1 steering-axis z) f0-2)
)
(vector-rotate*! (-> arg1 steering-axis) (-> arg1 steering-axis) (-> arg1 mat))
(logior! (-> obj flags) (rigid-body-object-flag in-air))
(logclear! (-> obj flags) (rigid-body-object-flag on-ground on-flight-level))
(vector-reset! (-> arg1 ground-normal))
(set! (-> arg1 ground-normal y) 1.0)
(let ((f30-1 (-> obj info-override ground-probe-distance)))
(let ((s2-0 (new 'stack-no-clear 'collide-query)))
(vector-reset! (-> arg1 lift-dir))
(set! (-> arg1 lift-dir y) -1.0)
(set! (-> arg1 speed-factor)
(fmax 0.0 (fmin 0.9 (* 0.000008138021 (+ -40960.0 (vector-length (-> s3-0 state lin-velocity))))))
)
(when (logtest? (-> obj info-override flags) 1)
(vector-float*! (-> arg1 tmp) (-> arg1 mat vector 1) -1.0)
(let ((t9-4 vector-lerp!)
(a0-7 (-> arg1 lift-dir))
(a1-4 (-> arg1 lift-dir))
(a2-3 (-> arg1 tmp))
(f0-8 (-> arg1 speed-factor))
)
(t9-4 a0-7 a1-4 a2-3 (* f0-8 f0-8))
)
(vector-normalize! (-> arg1 lift-dir) 1.0)
)
(vector-float*! (-> s2-0 move-dist) (-> arg1 lift-dir) (the-as float f30-1))
(let ((v1-28 s2-0))
(set! (-> v1-28 radius) 409.6)
(set! (-> v1-28 collide-with) (collide-spec
backgnd
obstacle
hit-by-player-list
hit-by-others-list
water
collectable
blocking-plane
pusher
vehicle-mesh-probeable
)
)
(set! (-> v1-28 ignore-process0) #f)
(set! (-> v1-28 ignore-process1) #f)
(set! (-> v1-28 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nopilot #x1))
(set! (-> v1-28 action-mask) (collide-action solid))
)
(dotimes (s1-0 (-> obj info-override lift-thruster-count))
(let ((v1-31 (-> obj info-override lift-thruster-array s1-0))
(s0-0 (-> arg1 probe-work-array s1-0))
)
(vector-reset! (-> s0-0 tire-force))
(set! (-> s0-0 local-pos quad) (-> v1-31 local-pos quad))
(set! (-> s0-0 local-normal quad) (-> v1-31 normal quad))
(vector-matrix*! (-> s0-0 world-pos) (-> s0-0 local-pos) (-> arg1 mat))
(let ((a1-9 (-> s0-0 probe-pos)))
(let ((v1-34 (-> s0-0 world-pos)))
(let ((a0-22 (-> arg1 mat vector 1)))
(let ((a2-6 (-> obj info-override ground-probe-offset)))
(.mov vf7 a2-6)
)
(.lvf vf5 (&-> a0-22 quad))
)
(.lvf vf4 (&-> v1-34 quad))
)
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
(.mul.x.vf acc vf5 vf7 :mask #b111)
(.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111)
(.svf (&-> a1-9 quad) vf6)
)
(let ((v1-35 s3-0)
(a1-10 (-> s0-0 probe-pos))
(a2-7 (-> s0-0 velocity))
)
(rigid-body-method-22 (-> v1-35 state) a1-10 a2-7)
)
(set! (-> s0-0 wheel-axis quad) (-> (the-as vector (if (< 0.0 (-> s0-0 local-pos z))
(-> arg1 steering-axis)
(the-as vector (-> arg1 mat))
)
)
quad
)
)
(set! (-> s0-0 ground-pos quad) (-> s0-0 probe-pos quad))
(set! (-> s0-0 ground-pos y) 0.0)
(vector-reset! (-> s0-0 ground-normal))
(when (logtest? (-> obj flags) (rigid-body-object-flag enable-collision))
(set! (-> s2-0 start-pos quad) (-> s0-0 probe-pos quad))
(let ((f0-15 (probe-using-line-sphere *collide-cache* s2-0)))
(cond
((and (>= f0-15 0.0) (!= (-> s2-0 best-other-tri pat mode) 1))
(logclear! (-> obj flags) (rigid-body-object-flag in-air))
(logior! (-> obj flags) (rigid-body-object-flag on-ground))
(set! (-> s0-0 ground-pos y) (- (-> s0-0 probe-pos y) (* f0-15 f30-1)))
(set! (-> s0-0 ground-normal quad) (-> s2-0 best-other-tri normal quad))
(set! (-> arg1 ground-normal quad) (-> s0-0 ground-normal quad))
)
(else
(set! (-> s0-0 ground-pos y) (+ -81920.0 (-> s3-0 state position y)))
)
)
)
0
)
)
)
)
(set! (-> obj lift-thrust 0) 0.0)
(set! (-> obj lift-thrust 1) 0.0)
(set! (-> obj roll-thrust 0) 0.0)
(set! (-> obj roll-thrust 1) 0.0)
(set! (-> obj roll-thrust 0) 0.0)
(set! (-> obj roll-thrust 1) 0.0)
(when (>= 1 (-> obj force-level))
(dotimes (s2-1 (-> obj info-override lift-thruster-count))
(let ((s1-1 (-> arg1 probe-work-array s2-1)))
(set! (-> arg1 world-pos quad) (-> s1-1 world-pos quad))
(set! (-> arg1 velocity quad) (-> s1-1 velocity quad))
(let ((f28-1 (-> s1-1 probe-pos y)))
(when (> (-> obj flight-level-index) 0)
(set! f28-1 (- f28-1 (+ 6144.0 (-> obj flight-level))))
(when (>= 0.0 f28-1)
(logclear! (-> obj flags) (rigid-body-object-flag in-air))
(logior! (-> obj flags) (rigid-body-object-flag on-flight-level))
(.lvf vf1 (&-> (-> s1-1 ground-normal) quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov v1-81 vf1)
(if (= v1-81 0.0)
(set! (-> s1-1 ground-normal y) 1.0)
)
)
)
(when (or (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(and (> (-> obj flight-level-index) 0) (< f28-1 0.0))
)
(if (zero? (-> obj flight-level-index))
(set! f28-1 40960.0)
)
(let* ((f0-37 (* -1.0
(-> obj force-scale)
(-> obj info-override inv-lift-thruster-count)
(-> obj info-override info mass)
(-> obj info-override extra gravity)
(+ 1.0 (* 2.0 (the float (-> obj flight-level-index))))
)
)
(f1-17 -1.0)
(f2-4 1.0)
(f3-4 16384.0)
(f3-7 (* f28-1 (/ 1.0 f3-4)))
(f4-2 0.5)
(f5-0 81920.0)
(f0-38 (* f0-37 (fmax f1-17 (fmin f2-4 (+ f3-7 (* f4-2 (/ 1.0 f5-0) (-> arg1 velocity y)))))))
)
(let ((f1-20 (fmax 0.0 f0-38)))
(+! (-> obj lift-thrust s2-1) f1-20)
(when (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(+! (-> obj roll-thrust 0) (* 0.05 f1-20))
(+! (-> obj roll-thrust 1) (* 0.05 f1-20))
)
)
(vector-reset! (-> arg1 force))
(set! (-> arg1 force y) f0-38)
)
(let ((v1-122 s3-0)
(a1-12 (-> arg1 world-pos))
(a2-8 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-122 state) a1-12 a2-8)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
)
(let ((f0-40 (+ 4096.0 f28-1)))
(when (or (and (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(< 0.0 f0-40)
(< 0.0 (-> arg1 velocity y))
)
(and (> (-> obj flight-level-index) 0) (< f0-40 0.0) (< (-> arg1 velocity y) 0.0))
)
(vector-reset! (-> arg1 force))
(let ((f0-43 (* -0.25 (-> obj info-override inv-lift-thruster-count)))
(f1-28 arg0)
)
(set! (-> arg1 force y) (* f0-43 (/ 1.0 f1-28) (-> obj info-override info mass) (-> arg1 velocity y)))
)
(let ((v1-140 s3-0)
(a1-16 (-> arg1 world-pos))
(a2-9 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-140 state) a1-16 a2-9)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
)
)
)
(let* ((f1-36 (fmax 4096.0 (fmin (- (-> s1-1 probe-pos y) (-> s1-1 ground-pos y)) f30-1)))
(f28-2 (- 1.0 (/ (+ -4096.0 f1-36) (+ -4096.0 f30-1))))
)
(if (>= (-> obj info-override cos-ground-effect-angle)
(vector-dot (-> s1-1 ground-normal) (-> arg1 mat vector 1))
)
(set! f28-2 0.0)
)
(set! (-> arg1 tmp y) 0.0)
(set! (-> arg1 tmp x) (-> arg1 velocity z))
(set! (-> arg1 tmp z) (- (-> arg1 velocity x)))
(vector-normalize! (-> arg1 tmp) 1.0)
(vector+float*!
(-> arg1 normal)
(-> s1-1 ground-normal)
(-> arg1 tmp)
(- (vector-dot (-> s1-1 ground-normal) (-> arg1 tmp)))
)
(let ((v1-155 (-> arg1 force))
(a0-55 (-> arg1 normal))
(f0-58 (* 2.0 f28-2))
(f1-41 arg0)
)
(vector-float*! v1-155 a0-55 (* f0-58
(/ 1.0 f1-41)
(-> obj info-override inv-lift-thruster-count)
(-> obj info-override info mass)
(fmax 0.0 (- (vector-dot (-> arg1 velocity) (-> arg1 normal))))
)
)
)
(let ((v1-157 s3-0)
(a1-28 (-> arg1 world-pos))
(a2-13 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-157 state) a1-28 a2-13)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
(let ((f0-72 (* 8.0
(-> obj info-override info mass)
(-> obj info-override extra gravity)
(-> obj info-override inv-lift-thruster-count)
(+ (* (-> obj info-override spring-lift-factor) f28-2)
(* 0.75 (-> obj jump-thrust) (-> obj info-override jump-thrust-factor))
)
(- (+ 1.0 (* 2.0 (rand-vu) (-> obj power-fluctuation-factor))) (-> obj power-fluctuation-factor))
)
)
)
(+! (-> obj lift-thrust s2-1) f0-72)
(vector-float*! (-> arg1 force) (-> arg1 lift-dir) (* -1.0 f0-72))
)
)
(let ((v1-176 s3-0)
(a1-32 (-> arg1 world-pos))
(a2-14 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-176 state) a1-32 a2-14)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
(when (and (< 0.0 (-> obj info-override tire-friction-factor)) (let ((f0-75 0.0))
(.lvf vf1 (&-> (-> s1-1 ground-normal) quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov v1-184 vf1)
(< f0-75 v1-184)
)
)
(vector+float*!
(-> arg1 normal)
(-> s1-1 wheel-axis)
(-> s1-1 ground-normal)
(- (vector-dot (-> s1-1 wheel-axis) (-> s1-1 ground-normal)))
)
(vector-normalize! (-> arg1 normal) 1.0)
(set! (-> arg1 world-pos quad) (-> s3-0 state position quad))
(set! (-> arg1 velocity quad) (-> s3-0 state lin-velocity quad))
(vector-! (-> arg1 p-body) (-> arg1 world-pos) (-> s3-0 state position))
(vector-cross! (-> arg1 tmp) (-> arg1 p-body) (-> arg1 normal))
(vector-rotate*! (-> arg1 tmp) (-> arg1 tmp) (-> s3-0 state inv-i-world))
(vector-cross! (-> arg1 tmp) (-> arg1 tmp) (-> arg1 p-body))
(set! (-> arg1 vel-dot-norm) (vector-dot (-> arg1 velocity) (-> arg1 normal)))
(let ((f0-82 (fabs (-> arg1 vel-dot-norm))))
(set! (-> arg1 friction-coef)
(smooth-interp
(-> obj info-override tire-static-friction)
(-> obj info-override tire-dynamic-friction)
f0-82
(-> obj info-override tire-static-friction-speed)
(-> obj info-override tire-dynamic-friction-speed)
)
)
)
(set! (-> arg1 friction-coef)
(* (-> arg1 friction-coef) (+ 1.0 (* -0.75 (fmax 0.0 (fmin 1.0 (-> obj engine-thrust))))))
)
(let ((f0-90
(* (-> arg1 friction-coef)
(-> obj info-override tire-friction-factor)
(fmax 0.0 (vector-dot (-> s1-1 ground-normal) (-> s1-1 tire-force)))
)
)
)
(set! (-> arg1 impulse)
(/ (* -1.0 (-> arg1 vel-dot-norm))
(* arg0 (+ (-> s3-0 state info inv-mass) (vector-dot (-> arg1 normal) (-> arg1 tmp))))
)
)
(set! (-> arg1 impulse) (fmax (fmin (-> arg1 impulse) f0-90) (- f0-90)))
)
(vector-float*! (-> arg1 force) (-> arg1 normal) (-> arg1 impulse))
(let ((v1-213 s3-0)
(a1-45 (-> arg1 world-pos))
(a2-19 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-213 state) a1-45 a2-19)
)
)
)
)
)
)
)
0
(none)
)
)
(defmethod rigid-body-object-method-29 vehicle ((obj vehicle) (arg0 float))
(local-vars (sv-624 float) (sv-720 float) (sv-724 float))
(rlet ((vf0 :class vf))
(init-vf0-vector)
(let ((gp-0 (new 'stack-no-clear 'inline-array 'matrix 9))
(s5-0 (-> obj rbody))
(s4-0 (-> obj info-override))
)
(mem-copy! (the-as pointer (-> gp-0 0)) (the-as pointer (-> s5-0 state matrix)) 64)
(when (not (logtest? (-> obj flags) (rigid-body-object-flag dead)))
(vehicle-method-100 obj arg0 (the-as vehicle-physics-work gp-0))
(when (>= 1 (-> obj force-level))
(set! sv-624 (* (-> s4-0 info mass) (-> s4-0 extra gravity)))
(when (!= (-> s4-0 pitch-control-factor) 0.0)
(set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 quad 0))
(set! (-> gp-0 3 vector 2 y) 0.0)
(let ((f30-0 (vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity))))
(dotimes (s1-0 (-> s4-0 lift-thruster-count))
(let ((s0-0 (-> s4-0 lift-thruster-array s1-0)))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s0-0 local-pos) (-> gp-0 0))
(vector-rotate*! (-> gp-0 1 trans) (-> s0-0 normal) (-> gp-0 0))
(let* ((f0-5 -1.0)
(f1-2 1.0)
(f2-0 0.2)
(a0-9 (the-as number (-> s0-0 local-pos z)))
(a1-5 #xffffffff80000000)
(v1-16 #x3f800000)
(f0-7
(* (fmax
f0-5
(fmin
f1-2
(* f2-0 (the-as float (logior (logand (the-as uint a0-9) a1-5) v1-16)) (-> s4-0 pitch-control-factor) f30-0)
)
)
sv-624
)
)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f0-7))
)
)
(let ((v1-21 s5-0)
(a1-7 (-> gp-0 1 vector 2))
(a2-4 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-21 state) a1-7 (the-as vector a2-4))
)
)
)
)
(let ((s1-1 (new 'stack-no-clear 'inline-array 'vector 5)))
(let ((f0-12 (* -1.0 (-> obj controls steering) (-> gp-0 4 vector 1 w) (-> s4-0 roll-angle))))
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! f0-12 0.0)
)
(quaternion-vector-angle! (the-as quaternion (-> s1-1 0)) (-> gp-0 0 vector 2) f0-12)
)
(quaternion->matrix (the-as matrix (-> s1-1 1)) (the-as quaternion (-> s1-1 0)))
(set! (-> gp-0 3 trans quad) (-> s1-1 2 quad))
)
(let ((f0-14 (vector-dot (the-as vector (-> gp-0 0)) (-> gp-0 3 trans))))
(set! sv-720 (* (-> s4-0 info mass) (-> s4-0 extra gravity)))
(let ((f1-11 f0-14))
(set! sv-724
(+ (* f1-11 f1-11 f0-14) (* 0.075 (vector-dot (-> gp-0 0 vector 2) (-> s5-0 state ang-velocity))))
)
)
)
(dotimes (s1-2 (-> s4-0 roll-thruster-count))
(let* ((s0-1 (-> s4-0 roll-thruster-array s1-2))
(f0-17 0.0)
(f1-16 1.0)
(f2-7 -1.0)
(a0-19 (the-as number (-> s0-1 local-pos x)))
(a1-10 #xffffffff80000000)
(v1-44 #x3f800000)
(f30-1
(fmax f0-17 (fmin f1-16 (* f2-7 (the-as float (logior (logand (the-as uint a0-19) a1-10) v1-44)) sv-724)))
)
)
(when (< 0.0 f30-1)
(let ((f30-2
(* (+ f30-1 (+ (- (-> obj power-fluctuation-factor)) (* 2.0 (rand-vu) (-> obj power-fluctuation-factor))))
(-> s4-0 roll-control-factor)
sv-720
)
)
)
(+! (-> obj roll-thrust s1-2) (fmax 0.0 f30-2))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s0-1 local-pos) (-> gp-0 0))
(vector-rotate*! (-> gp-0 1 trans) (-> s0-1 normal) (-> gp-0 0))
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f30-2))
)
(let ((v1-56 s5-0)
(a1-14 (-> gp-0 1 vector 2))
(a2-8 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-56 state) a1-14 (the-as vector a2-8))
)
0
)
)
)
)
(when #t
(let* ((f0-30 (-> obj controls steering))
(f1-23 (-> s4-0 steering-thruster-half-gain-speed))
(f2-10 (-> s4-0 steering-thruster-half-gain-speed))
(v1-65 (-> s5-0 state lin-velocity))
(f2-12 (/ f1-23 (+ f2-10 (sqrtf (+ (* (-> v1-65 x) (-> v1-65 x)) (* (-> v1-65 z) (-> v1-65 z)))))))
)
(if (< (-> obj controls throttle) 0.0)
(set! f0-30 (* -1.0 f0-30))
)
(set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 vector 1 quad))
(let ((f30-3 (* 8192.0
(-> s4-0 info mass)
(-> obj power-level)
(- (* f0-30 f2-12 (-> s4-0 steering-thruster-max-gain))
(vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity))
)
(-> s4-0 steering-thruster-factor)
)
)
)
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! f30-3 (* f30-3 (-> s4-0 air-steering-factor)))
)
(let ((s1-3 (the-as object (-> s4-0 steering-thruster-array))))
(countdown (s0-2 (-> s4-0 steering-thruster-count))
(vector-matrix*! (-> gp-0 1 vector 2) (-> (the-as vehicle-control-point s1-3) local-pos) (-> gp-0 0))
(vector-rotate*!
(-> gp-0 1 trans)
(-> (the-as (inline-array vehicle-control-point) s1-3) 0 normal)
(-> gp-0 0)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f30-3)
(let ((v1-80 s5-0)
(a1-17 (-> gp-0 1 vector 2))
(a2-11 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-80 state) a1-17 (the-as vector a2-11))
)
(set! s1-3 (-> (the-as (inline-array vehicle-control-point) s1-3) 1))
)
)
)
)
)
(seek! (-> obj jump-thrust) 0.0 (* 6.0 arg0))
(when (logtest? (rigid-body-object-flag ignition) (-> obj flags))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 engine-thrust-local-pos) (-> gp-0 0))
(set! (-> gp-0 3 trans quad) (-> gp-0 0 vector 2 quad))
(let ((f0-45 (* (-> obj engine-thrust)
(-> s4-0 max-engine-thrust)
(-> s4-0 info mass)
(-> obj power-level)
(-> obj force-scale)
)
)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 3 trans) f0-45)
)
(when #t
(let ((v1-94 s5-0)
(a1-20 (-> gp-0 1 vector 2))
(a2-14 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-94 state) a1-20 (the-as vector a2-14))
)
)
)
(let ((f30-4 (-> obj controls brake)))
(when (< 0.0 f30-4)
(vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 brake-local-pos) (-> gp-0 0))
(let ((v1-98 s5-0)
(a1-22 (-> gp-0 1 vector 2))
(a2-16 (-> gp-0 1 vector 1))
)
(rigid-body-method-22 (-> v1-98 state) a1-22 a2-16)
)
(let* ((v1-101 (-> gp-0 1 vector 1))
(f1-38 (sqrtf (+ (* (-> v1-101 x) (-> v1-101 x)) (* (-> v1-101 z) (-> v1-101 z)))))
(f0-53 (* -98304.0 (-> s4-0 brake-factor) (-> s4-0 info mass)))
(f1-39 (fmax 16384.0 f1-38))
(f0-55 (* f0-53 (/ 1.0 f1-39) f30-4))
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 vector 1) f0-55)
)
(let ((v1-109 s5-0)
(a1-23 (-> gp-0 1 vector 2))
(a2-17 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-109 state) a1-23 (the-as vector a2-17))
)
)
)
)
(let ((s1-4 (new 'stack-no-clear 'inline-array 'vehicle-control-point 2)))
(quad-copy!
(the-as pointer s1-4)
(the-as pointer (-> s4-0 stabilizer-array))
(* (-> s4-0 stabilizer-count) 2)
)
(let ((s0-3 (-> s1-4 3 normal)))
(let ((f0-57 (* -3640.889 (-> obj controls lean-z))))
(vector-rotate-around-x! s0-3 s0-3 f0-57)
)
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! (-> s0-3 w) (* 10.0 (-> s0-3 w)))
)
(if (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(set! (-> s0-3 w) 0.0)
)
)
(let ((f30-5 (* -0.0000006103516 (-> obj force-scale) (-> s4-0 info mass) (-> s4-0 drag-force-factor))))
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! f30-5 (* f30-5 (-> s4-0 air-drag-factor)))
)
(let ((s1-5 (-> s1-4 0)))
(countdown (s0-4 (-> s4-0 stabilizer-count))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s1-5 local-pos) (-> gp-0 0))
(vector-rotate*! (-> gp-0 1 trans) (-> s1-5 normal) (-> gp-0 0))
(let ((v1-128 s5-0)
(a1-28 (-> gp-0 1 vector 2))
(a2-22 (-> gp-0 1 vector 1))
)
(rigid-body-method-22 (-> v1-128 state) a1-28 a2-22)
)
(let ((f0-70
(* -0.06125
(vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1))
(-> s1-5 normal w)
(-> obj force-scale)
(-> s4-0 info mass)
(-> s4-0 airfoil-factor)
)
)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f0-70)
)
(when (<= (-> obj force-level) 0)
(let ((v1-138 s5-0)
(a1-29 (-> gp-0 1 vector 2))
(a2-23 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-138 state) a1-29 (the-as vector a2-23))
)
)
(vector-float*!
(the-as vector (-> gp-0 1))
(-> gp-0 1 vector 1)
(* f30-5
(-> s1-5 normal w)
(+ (* 0.15 (vector-length (-> gp-0 1 vector 1))) (fabs (vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1))))
)
)
(when (<= (-> obj force-level) 0)
(let ((v1-145 s5-0)
(a1-35 (-> gp-0 1 vector 2))
(a2-25 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-145 state) a1-35 (the-as vector a2-25))
)
)
(&+! s1-5 32)
)
)
)
)
(.svf (&-> (-> gp-0 1) quad 0) vf0)
(set! (-> gp-0 1 vector 0 y) (* -1.0
(-> s4-0 extra gravity)
(if (< 1 (-> obj force-level))
2.0
1.0
)
(-> s4-0 info mass)
)
)
(let ((v1-154 s5-0)
(a1-36 (-> gp-0 1))
)
(rigid-body-method-20 (-> v1-154 state) (the-as vector a1-36))
)
(when (logtest? (-> obj flags) (rigid-body-object-flag riding))
(set! (-> gp-0 2 quad 0) (-> s4-0 info cm-offset-joint quad))
(+! (-> gp-0 2 vector 0 x) (* (-> obj controls steering) (-> s4-0 player-shift-x)))
(+! (-> gp-0 2 vector 0 z) (* (-> obj controls lean-z) (-> s4-0 player-shift-z)))
(vector-matrix*! (-> gp-0 1 vector 2) (the-as vector (-> gp-0 2)) (-> gp-0 0))
(.svf (&-> (-> gp-0 1) quad 0) vf0)
(set! (-> gp-0 1 vector 0 y) (- (-> s4-0 player-weight)))
(let ((v1-162 s5-0)
(a1-38 (-> gp-0 1 vector 2))
(a2-27 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-162 state) a1-38 (the-as vector a2-27))
)
0
)
(rigid-body-object-method-50 obj arg0)
(vehicle-method-99 obj arg0)
(when (not (logtest? (-> obj flags) (rigid-body-object-flag dead)))
(set! (-> gp-0 1 trans quad) (-> s5-0 state lin-momentum quad))
(set! (-> gp-0 1 trans y) 0.0)
(vector-normalize! (-> gp-0 1 trans) 1.0)
(let* ((v1-174 (-> s5-0 state lin-velocity))
(f0-90 (/ (sqrtf (+ (* (-> v1-174 x) (-> v1-174 x)) (* (-> v1-174 z) (-> v1-174 z)))) (-> s4-0 max-xz-speed)))
(v1-176 (-> gp-0 1))
(a0-65 (-> gp-0 1 trans))
(f1-67 -1.0)
(f2-29 (* (-> s4-0 speed-limiting-drag) (vector-dot (-> s5-0 state force) (-> gp-0 1 trans))))
(f3-19
(* (fabs (-> obj engine-thrust)) (-> s4-0 speed-scrubbing-drag) (vector-length (-> s5-0 state lin-momentum)))
)
(f4-6 (- 1.0 (fabs (vector-dot (-> s5-0 state matrix vector 2) (-> gp-0 1 trans)))))
)
(vector-float*! (the-as vector v1-176) a0-65 (* f1-67 (+ f2-29 (* f3-19 (* f4-6 f4-6))) (sqrtf f0-90)))
)
(let ((a1-51 (-> gp-0 1)))
(rigid-body-method-20 (-> s5-0 state) (the-as vector a1-51))
)
)
)
0
(none)
)
)
(defmethod vehicle-method-125 vehicle ((obj vehicle) (arg0 float))
(rigid-body-object-method-29 obj arg0)
(none)
)
(defmethod vehicle-method-126 vehicle ((obj vehicle) (arg0 float))
(rigid-body-object-method-29 obj arg0)
(none)
)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -5,6 +5,8 @@
;; name in dgo: ctypal-obs
;; dgos: CPA
;; og:update-with-merge:substr
;; DECOMP BEGINS
(deftype water-anim-ctypal (water-anim)
@@ -86,6 +88,7 @@ This commonly includes things such as:
- collision information
- loading the skeleton group / bones
- sounds"
(stack-size-set! (-> obj main-thread) 1024)
(let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player))))
(set! (-> s5-0 penetrated-by) (penetrate))
(let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0)))
File diff suppressed because it is too large Load Diff
@@ -18,10 +18,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 2) (meters 2))
)
:max-time-step 0.02
:gravity (meters 10)
:idle-distance (meters 200)
:attack-force-scale 2.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 10)
:idle-distance (meters 200)
:attack-force-scale 2.0
)
:name '*bombbot-body-constants*
)
)
@@ -2808,7 +2810,7 @@
(init-vf0-vector)
(let ((a1-0 (new 'stack-no-clear 'vector)))
(vector-reset! a1-0)
(set! (-> a1-0 y) (* -1.0 (-> obj info gravity) (-> obj rigidbody state info mass)))
(set! (-> a1-0 y) (* -1.0 (-> obj info extra gravity) (-> obj rigidbody state info mass)))
(rigid-body-method-20 (-> obj rigidbody state) a1-0)
)
(rigid-body-method-24 (-> obj rigidbody state))
+1 -1
View File
@@ -6,7 +6,7 @@
;; dgos: GAME, COMMON
(declare-type onin-game process-drawable)
(define-extern onin-game-init (function entity none))
(define-extern onin-game-init (function entity none :behavior onin-game))
;; DECOMP BEGINS
+6 -4
View File
@@ -75,10 +75,12 @@
:cm-offset-joint (new 'static 'vector :y -8192.0 :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 6) (meters 4) (meters 6))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
)
:name '*dig-sinking-platform-constants*
)
)
+6 -4
View File
@@ -385,10 +385,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
)
:name '*dig-bomb-crate-cylinder-constants*
)
)
+12 -8
View File
@@ -1347,10 +1347,12 @@ This commonly includes things such as:
:cm-offset-joint (new 'static 'vector :z -24576.0 :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 3) (meters 21))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*dig-tipping-rock-constants*
:drag-factor 2.0
:buoyancy-factor 1.2
@@ -1621,10 +1623,12 @@ This commonly includes things such as:
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 1.0
)
:name '*dig-stomp-block-constants*
)
)
+6 -4
View File
@@ -67,10 +67,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 1) (meters 2))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*ruins-sinking-platform-constants*
:drag-factor 2.0
:buoyancy-factor 1.5
+34 -31
View File
@@ -923,36 +923,39 @@ This commonly includes things such as:
(none)
)
(define *under-buoy-plat-platform-constants* (new 'static 'rigid-body-platform-constants
:mass 1.48
:inv-mass 0.6756757
:cm-joint (new 'static 'vector :w 1.0)
:linear-damping 0.8
:angular-damping 0.5
:friction-factor 0.1
:inertial-tensor-x (meters 5)
:inertial-tensor-y (meters 1)
:inertial-tensor-z (meters 5)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:name '*under-buoy-plat-platform-constants*
:drag-factor 2.0
:buoyancy-factor 2.3
:max-buoyancy-depth (meters 1.5)
:player-weight (meters 150)
:player-bonk-factor 0.5
:player-dive-factor 1.0
:player-force-distance (meters 2)
:player-force-clamp (meters 1000000)
:player-force-timeout #x1e
:explosion-force (meters 1000)
:control-point-count 5
:platform #t
:sound-name "ruins-plat"
)
)
(define *under-buoy-plat-platform-constants*
(new 'static 'rigid-body-platform-constants
:info (new 'static 'rigid-body-info
:mass 1.48
:inv-mass 0.6756757
:linear-damping 0.8
:angular-damping 0.5
:friction-factor 0.1
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 5) (meters 1) (meters 5))
)
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*under-buoy-plat-platform-constants*
:drag-factor 2.0
:buoyancy-factor 2.3
:max-buoyancy-depth (meters 1.5)
:player-weight (meters 150)
:player-bonk-factor 0.5
:player-dive-factor 1.0
:player-force-distance (meters 2)
:player-force-clamp (meters 1000000)
:player-force-timeout #x1e
:explosion-force (meters 1000)
:control-point-count 5
:platform #t
:sound-name "ruins-plat"
)
)
(defmethod rigid-body-platform-method-53 under-buoy-plat ((obj under-buoy-plat) (arg0 vector))
-220341.05
@@ -985,7 +988,7 @@ This commonly includes things such as:
(set! (-> obj orig-trans quad) (-> obj root-override-2 trans quad))
(set! (-> obj anchor-point quad) (-> obj root-override-2 trans quad))
(set! (-> obj surface-height) (-> obj root-override-2 trans y))
(set! (-> obj info-override cm-joint y) 6144.0)
(set! (-> obj info-override info cm-offset-joint y) 6144.0)
(let ((s5-1 (-> obj info-override control-point-count)))
(dotimes (s4-1 s5-1)
(let ((s3-0 (-> obj control-point-array data s4-1)))
+14 -12
View File
@@ -42,11 +42,11 @@
(format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x))
(format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y))
(format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z))
(format #t "~1Textra: #<rigid-body-object-extra-info @ #x~X>~%" (&-> obj max-time-step))
(format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step))
(format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity))
(format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance))
(format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale))
(format #t "~1Textra: #<rigid-body-object-extra-info @ #x~X>~%" (-> obj extra))
(format #t "~1Tmax-time-step: ~f~%" (-> obj extra max-time-step))
(format #t "~1Tgravity: (meters ~m)~%" (-> obj extra gravity))
(format #t "~1Tidle-distance: (meters ~m)~%" (-> obj extra idle-distance))
(format #t "~1Tattack-force-scale: ~f~%" (-> obj extra attack-force-scale))
(format #t "~1Tname: ~A~%" (-> obj name))
(format #t "~1Tdrag-factor: ~f~%" (-> obj drag-factor))
(format #t "~1Tbuoyancy-factor: ~f~%" (-> obj buoyancy-factor))
@@ -217,7 +217,7 @@
*y-vector*
(* (-> obj rbody state info mass)
(fmin 1.0 f30-0)
(/ (-> obj info-override gravity) (the float (-> obj info-override control-point-count)))
(/ (-> obj info-override extra gravity) (the float (-> obj info-override control-point-count)))
(-> obj info-override buoyancy-factor)
)
)
@@ -263,7 +263,7 @@
;; WARN: Return type mismatch int vs none.
(defmethod rigid-body-platform-method-55 rigid-body-platform ((obj rigid-body-platform))
(let ((a1-0 (new 'stack-no-clear 'vector)))
(vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override gravity) (-> obj rbody state info mass)))
(vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override extra gravity) (-> obj rbody state info mass)))
(rigid-body-method-20 (-> obj rbody state) a1-0)
)
0
@@ -476,7 +476,7 @@
(set! (-> obj player-velocity quad) (-> *null-vector* quad))
(set! (-> obj player-velocity-prev quad) (-> *null-vector* quad))
(set! (-> obj root-override-2 max-iteration-count) (the-as uint 4))
(set! (-> obj max-time-step) (-> arg0 max-time-step))
(set! (-> obj max-time-step) (-> arg0 extra max-time-step))
(set! (-> obj water-anim) (the-as water-anim (entity-actor-lookup (-> obj entity) 'water-actor 0)))
0
(none)
@@ -525,10 +525,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4))
)
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*rigid-body-platform-constants*
:drag-factor 0.8
:buoyancy-factor 1.5
+3 -3
View File
@@ -4214,7 +4214,7 @@
(function "Toggle Plane Mode" #f ,(lambda ()
(let ((a0-0 (get-nav-graph-editor)))
(if a0-0
((method-of-object a0-0 nav-graph-editor-method-60))
(nav-graph-editor-method-60 a0-0)
)
)
(none)
@@ -4223,7 +4223,7 @@
(function "Toggle Hover Mode" #f ,(lambda ()
(let ((a0-0 (get-nav-graph-editor)))
(if a0-0
((method-of-object a0-0 nav-graph-editor-method-61))
(nav-graph-editor-method-61 a0-0)
)
)
(none)
@@ -4289,7 +4289,7 @@
(function "Save" #f ,(lambda ()
(let ((a0-0 (get-nav-graph-editor)))
(if a0-0
((method-of-object a0-0 nav-graph-editor-method-63))
(nav-graph-editor-method-63 a0-0)
)
)
(none)
+2 -5
View File
@@ -271,7 +271,7 @@
:size-assert #x41c
:flag-assert #x150000041c
(:methods
(new (symbol type int string) _type_ 0)
(new (symbol type int symbol) _type_ 0)
(init-from-sql! (_type_ string string) symbol 9)
(exec-sql! (_type_) symbol 10)
(indexof-nav-node (_type_ int) int 11)
@@ -307,7 +307,7 @@
;; definition for method 0 of type mysql-nav-graph
;; WARN: Return type mismatch object vs mysql-nav-graph.
(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string))
(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 symbol))
(let ((gp-0 (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
(if (zero? gp-0)
(return (the-as mysql-nav-graph 0))
@@ -1374,6 +1374,3 @@ returns `-1` if none is found"
)
)
+1 -1
View File
@@ -1589,7 +1589,7 @@
)
0
)
(update-nav-meshes *level*)
(update-nav-meshes-method *level*)
(when *debug-segment*
(let ((gp-10 (-> *display* frames (-> *display* on-screen) profile-array data 0)))
(when (and *dproc* *debug-segment*)
+2 -2
View File
@@ -71,7 +71,6 @@
)
;; definition for method 3 of type actor-group
;; INFO: this function exists in multiple non-identical object files
(defmethod inspect actor-group ((obj actor-group))
(format #t "[~8x] ~A~%" obj (-> obj type))
(format #t "~Tlength: ~D~%" (-> obj length))
@@ -258,7 +257,8 @@
;; definition for method 18 of type level-group
;; WARN: Return type mismatch int vs none.
(defmethod update-nav-meshes level-group ((obj level-group))
(defmethod update-nav-meshes-method level-group ((obj level-group))
"Clashes with a function name"
(when (not (paused?))
(dotimes (s5-0 (-> obj length))
(let ((v1-4 (-> obj level s5-0)))
@@ -101,7 +101,6 @@
)
;; definition for method 3 of type sparticle-launcher
;; INFO: this function exists in multiple non-identical object files
(defmethod inspect sparticle-launcher ((obj sparticle-launcher))
(when (not obj)
(set! obj obj)
@@ -154,21 +153,21 @@
;; definition of type sparticle-launch-state
(deftype sparticle-launch-state (structure)
((group-item sparticle-group-item :offset-assert 0)
(flags sp-launch-state-flags :offset-assert 4)
(randomize uint16 :offset-assert 6)
(center vector :offset-assert 8)
(sprite3d sprite-vec-data-3d :offset-assert 12)
(sprite sparticle-cpuinfo :offset-assert 16)
(offset uint32 :offset-assert 20)
(accum float :offset-assert 24)
(spawn-time uint32 :offset-assert 28)
(control basic :offset-assert 32)
(swarm basic :offset 20)
(seed uint32 :offset 24)
(time uint32 :offset 28)
(spec basic :offset 16)
(id uint32 :offset 12)
((group-item sparticle-group-item :offset-assert 0)
(flags sp-launch-state-flags :offset-assert 4)
(randomize uint16 :offset-assert 6)
(center vector :offset-assert 8)
(sprite3d sprite-vec-data-3d :offset-assert 12)
(sprite sparticle-cpuinfo :offset-assert 16)
(offset uint32 :offset-assert 20)
(accum float :offset-assert 24)
(spawn-time uint32 :offset-assert 28)
(control sparticle-launch-control :offset-assert 32)
(swarm basic :offset 20)
(seed uint32 :offset 24)
(time uint32 :offset 28)
(spec basic :offset 16)
(id uint32 :offset 12)
)
:method-count-assert 9
:size-assert #x24
+1 -1
View File
@@ -694,7 +694,7 @@
(debug-draw-actors (_type_ symbol) none 15)
(assign-draw-indices (_type_) none 16)
(actors-update (_type_) none 17)
(update-nav-meshes (_type_) none 18)
(update-nav-meshes-method (_type_) none 18)
(level-update (_type_) none 19)
(level-get-target-inside (_type_) level 20)
(alloc-levels-if-needed (_type_ symbol) none 21)
+1 -1
View File
@@ -437,7 +437,7 @@ and declared out of order (cannot use forward declared structures in inline arra
(link-by-id (_type_ uint) symbol 32)
(unlink-by-id (_type_ uint) symbol 33)
(nav-mesh-method-34 (_type_ vector vector float) float 34)
(nav-mesh-method-35 (_type_ vector vector float) none 35)
(nav-mesh-method-35 (_type_ vector vector float) float 35)
(debug-draw-poly (_type_ nav-poly rgba) none 36)
(point-in-poly? (_type_ nav-poly vector) symbol 37)
(nav-mesh-method-38 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector 38)
-2
View File
@@ -2792,7 +2792,6 @@
;; definition for method 35 of type nav-mesh
;; INFO: Used lq/sq
;; WARN: Return type mismatch float vs none.
;; WARN: new jak 2 until loop case, check carefully
(defmethod nav-mesh-method-35 nav-mesh ((obj nav-mesh) (arg0 vector) (arg1 vector) (arg2 float))
(let ((gp-0 (new 'stack-no-clear 'inline-array 'nav-poly 3)))
@@ -2830,7 +2829,6 @@
)
(-> gp-0 2 vertex3 y)
)
(none)
)
;; failed to figure out what this is:
+21 -26
View File
@@ -10,6 +10,7 @@
(bounce-factor float :offset-assert 16)
(friction-factor float :offset-assert 20)
(bounce-mult-factor float :offset-assert 24)
(unknown-k1hbn23 float :offset-assert 28)
(cm-offset-joint vector :inline :offset-assert 32)
(inv-inertial-tensor matrix :inline :offset-assert 48)
(inertial-tensor matrix :inline :offset-assert 112)
@@ -75,27 +76,21 @@
;; definition of type rigid-body-object-constants
(deftype rigid-body-object-constants (structure)
((info rigid-body-info :inline :offset-assert 0)
(mass float :offset 0)
(inv-mass float :offset 4)
(cm-joint vector :inline :offset 32)
(cm-joint-x meters :offset 32)
(cm-joint-y meters :offset 36)
(cm-joint-z meters :offset 40)
(cm-joint-w meters :offset 44)
(linear-damping float :offset 8)
(angular-damping float :offset 12)
(bounce-factor float :offset 16)
(friction-factor float :offset 20)
(inertial-tensor-x meters :offset 176)
(inertial-tensor-y meters :offset 180)
(inertial-tensor-z meters :offset 184)
(extra rigid-body-object-extra-info :inline :offset-assert 188)
(max-time-step float :offset 188)
(gravity meters :offset 192)
(idle-distance meters :offset 196)
(attack-force-scale float :offset 200)
(name symbol :offset-assert 204)
((info rigid-body-info :inline :offset-assert 0)
(cm-joint vector :inline :offset 32)
(cm-joint-x meters :offset 32)
(cm-joint-y meters :offset 36)
(cm-joint-z meters :offset 40)
(cm-joint-w meters :offset 44)
(linear-damping float :offset 8)
(angular-damping float :offset 12)
(bounce-factor float :offset 16)
(friction-factor float :offset 20)
(inertial-tensor-x meters :offset 176)
(inertial-tensor-y meters :offset 180)
(inertial-tensor-z meters :offset 184)
(extra rigid-body-object-extra-info :inline :offset-assert 188)
(name symbol :offset-assert 204)
)
:method-count-assert 9
:size-assert #xd0
@@ -122,11 +117,11 @@
(format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x))
(format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y))
(format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z))
(format #t "~1Textra: #<rigid-body-object-extra-info @ #x~X>~%" (&-> obj max-time-step))
(format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step))
(format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity))
(format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance))
(format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale))
(format #t "~1Textra: #<rigid-body-object-extra-info @ #x~X>~%" (-> obj extra))
(format #t "~1Tmax-time-step: ~f~%" (-> obj extra max-time-step))
(format #t "~1Tgravity: (meters ~m)~%" (-> obj extra gravity))
(format #t "~1Tidle-distance: (meters ~m)~%" (-> obj extra idle-distance))
(format #t "~1Tattack-force-scale: ~f~%" (-> obj extra attack-force-scale))
(format #t "~1Tname: ~A~%" (-> obj name))
(label cfg-4)
obj
+11 -9
View File
@@ -957,7 +957,7 @@
(defmethod rigid-body-object-method-29 rigid-body-object ((obj rigid-body-object) (arg0 float))
(let ((a1-1 (new 'stack-no-clear 'vector)))
(vector-reset! a1-1)
(set! (-> a1-1 y) (* -1.0 (-> obj info gravity) (-> obj rbody state info mass)))
(set! (-> a1-1 y) (* -1.0 (-> obj info extra gravity) (-> obj rbody state info mass)))
(rigid-body-method-20 (-> obj rbody state) a1-1)
)
0
@@ -1013,7 +1013,7 @@
(method-of-object obj rigid-body-object-method-29)
)
(rigid-body-object-method-35 obj)
(set! (-> obj max-time-step) (-> arg0 max-time-step))
(set! (-> obj max-time-step) (-> arg0 extra max-time-step))
(set! (-> obj root-override-2 max-iteration-count) (the-as uint 4))
(let ((v1-15 (-> obj skel root-channel 0)))
(set! (-> v1-15 num-func) num-func-identity)
@@ -1065,10 +1065,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4))
)
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.033333335
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*rigid-body-object-constants*
)
)
@@ -1283,7 +1285,7 @@ This commonly includes things such as:
)
)
)
(set! (-> s5-0 impulse) (* f0-2 (-> obj info attack-force-scale)))
(set! (-> s5-0 impulse) (* f0-2 (-> obj info extra attack-force-scale)))
(apply-damage obj (* 0.667 f1-0) s5-0)
)
(rigid-body-object-method-42 obj)
@@ -1524,7 +1526,7 @@ This commonly includes things such as:
(defstate idle (rigid-body-object)
:virtual #t
:trans (behavior ()
(if (and *target* (and (>= (-> self info idle-distance)
(if (and *target* (and (>= (-> self info extra idle-distance)
(vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans))
)
(zero? (logand (focus-status teleporting) (-> *target* focus-status)))
@@ -1547,7 +1549,7 @@ This commonly includes things such as:
)
:trans (behavior ()
(if (or (not *target*)
(or (< (+ 4096.0 (-> self info idle-distance))
(or (< (+ 4096.0 (-> self info extra idle-distance))
(vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans))
)
(logtest? (focus-status teleporting) (-> *target* focus-status))
+7 -5
View File
@@ -45,10 +45,12 @@
:cm-offset-joint (new 'static 'vector :z 8192.0 :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 16) (meters 6) (meters 20))
)
:max-time-step 0.033333335
:gravity (meters 40)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.033333335
:gravity (meters 40)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*barge-constants*
:flags #x8
:object-type #x11
@@ -551,7 +553,7 @@
(rigid-body-method-18 (-> v1-10 state) a1-9 (the-as vector a2-0))
)
(.svf (&-> (-> s4-0 vector) 0 quad) vf0)
(set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 gravity) (-> s2-0 info mass)))
(set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 extra gravity) (-> s2-0 info mass)))
(let ((a1-10 (-> s4-0 vector)))
(rigid-body-method-20 (-> s3-0 state) (the-as vector a1-10))
)
+334 -2
View File
@@ -149,7 +149,45 @@
)
;; definition for method 15 of type vehicle-controller
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod vehicle-controller-method-15 vehicle-controller ((obj vehicle-controller))
(let ((gp-0 (the-as nav-branch #f)))
(let* ((s5-0 (-> obj branch dest-node))
(s4-0 (-> s5-0 branch-count))
)
(b! (!= s4-0 1) cfg-4 :delay (empty-form))
(let ((v1-4 (-> s5-0 branch-array 0)))
(if (!= (-> v1-4 dest-node id) #xffff)
(set! gp-0 v1-4)
)
)
(b! #t cfg-12 :delay (nop!))
(label cfg-4)
(when (< 1 s4-0)
(let ((v1-6 (rand-vu-int-count s4-0))
(a0-8 s4-0)
)
(b! #t cfg-10 :delay (nop!))
(label cfg-6)
(+! a0-8 -1)
(let ((a1-3 (-> s5-0 branch-array v1-6)))
(b! (not (!= (-> a1-3 dest-node id) #xffff)) cfg-8 :delay (empty-form))
(set! gp-0 a1-3)
)
(b! #t cfg-12 :delay (nop!))
(label cfg-8)
(+! v1-6 1)
(if (>= v1-6 s4-0)
(set! v1-6 0)
)
(label cfg-10)
(b! (nonzero? a0-8) cfg-6 :delay (nop!))
)
)
)
(label cfg-12)
gp-0
)
)
;; definition for method 14 of type vehicle-controller
;; INFO: Used lq/sq
@@ -261,7 +299,297 @@
)
;; definition for method 18 of type vehicle-controller
;; ERROR: function was not converted to expressions. Cannot decompile.
;; INFO: Used lq/sq
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 24 signed mismatch
;; WARN: Stack slot offset 20 signed mismatch
;; WARN: Return type mismatch int vs none.
(defmethod vehicle-controller-method-18 vehicle-controller ((obj vehicle-controller) (arg0 vector) (arg1 vector) (arg2 vehicle) (arg3 float))
(local-vars
(v1-24 float)
(v1-88 float)
(a0-35 float)
(a0-96 int)
(a0-98 int)
(sv-16 vector)
(sv-20 float)
(sv-24 float)
)
(rlet ((acc :class vf)
(vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
)
(init-vf0-vector)
(let* ((v1-1 (-> *perf-stats* data 21))
(a0-1 (-> v1-1 ctrl))
)
(+! (-> v1-1 count) 1)
(b! (zero? a0-1) cfg-2 :delay (nop!))
(.mtc0 Perf 0)
(.sync.l)
(.sync.p)
(.mtpc pcr0 0)
(.mtpc pcr1 0)
(.sync.l)
(.sync.p)
(.mtc0 Perf a0-1)
)
(.sync.l)
(.sync.p)
(label cfg-2)
0
(set! sv-16 arg0)
(set! sv-20 arg3)
(set! sv-24 (-> arg2 info-override info inv-mass))
(let ((gp-0 (new 'stack-no-clear 'inline-array 'vector 16)))
(set! (-> gp-0 15 x) (+ (-> obj target-speed) (-> obj target-speed-offset)))
(set! (-> gp-0 1 quad) (-> arg1 quad))
(set! (-> gp-0 0 quad) (-> arg2 root-override-2 trans quad))
(vector-z-quaternion! (-> gp-0 3) (-> arg2 root-override-2 quat))
(vector-reset! (-> gp-0 2))
(cond
((logtest? (-> obj flags) (vehicle-controller-flag on-straightaway))
(vector-! (-> gp-0 6) (-> obj turn-enter-point) (-> gp-0 0))
(let ((f0-5 (vector-dot (-> gp-0 6) (-> obj turn-enter-dir))))
(vector+float*! (-> gp-0 4) (-> obj turn-enter-point) (-> obj turn-enter-dir) (- f0-5))
(set! (-> gp-0 5 quad) (-> obj turn-enter-dir quad))
(if (>= 0.0 f0-5)
(logclear! (-> obj flags) (vehicle-controller-flag on-straightaway))
)
(when (not (logtest? (-> obj flags) (vehicle-controller-flag no-slowing-for-turns)))
(let ((f1-4 (* 0.5 (/ 1.0 (-> obj turn-accel)))))
(.lvf vf1 (&-> arg1 quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov v1-24 vf1)
(let ((f2-2 v1-24)
(f3-1 (-> obj max-turn-speed))
)
(if (>= (* f1-4 (- f2-2 (* f3-1 f3-1))) f0-5)
(set! (-> gp-0 15 x) (fmin (-> gp-0 15 x) (-> obj max-turn-speed)))
)
)
)
)
)
)
(else
(if (not (logtest? (-> obj flags) (vehicle-controller-flag no-slowing-for-turns)))
(set! (-> gp-0 15 x) (fmin (-> gp-0 15 x) (-> obj max-turn-speed)))
)
(vector-! (-> gp-0 6) (-> gp-0 0) (-> obj dest-circle))
(vector-normalize! (-> gp-0 6) 1.0)
(set! (-> gp-0 5 x) (- (-> gp-0 6 z)))
(set! (-> gp-0 5 y) 0.0)
(set! (-> gp-0 5 z) (-> gp-0 6 x))
(if (logtest? (-> obj flags) (vehicle-controller-flag left-turn))
(vector-float*! (-> gp-0 5) (-> gp-0 5) -1.0)
)
(vector-float*! (-> gp-0 6) (-> gp-0 6) (-> obj dest-circle w))
(vector+! (-> gp-0 4) (-> obj dest-circle) (-> gp-0 6))
(when (logtest? (-> obj flags) (vehicle-controller-flag attached))
(vector-! (-> gp-0 9) (-> obj turn-exit-point) (-> gp-0 0))
(when (and (< (vector-dot (-> obj turn-exit-dir) (-> gp-0 9)) 0.0)
(>= (vector-dot (-> obj turn-exit-dir) (-> gp-0 3)) (cos 8192.0))
)
(if (not (vehicle-controller-method-14 obj arg2))
(set! (-> gp-0 15 x) 0.0)
)
)
)
)
)
(set! (-> gp-0 4 y) (-> gp-0 0 y))
(when (and (nonzero? (-> obj traffic))
(not (logtest? (-> obj flags) (vehicle-controller-flag ignore-others)))
(let ((f0-22 (-> arg2 camera-dist2))
(f1-9 1228800.0)
)
(< f0-22 (* f1-9 f1-9))
)
)
(let ((s3-1 (new 'stack-no-clear 'array 'collide-shape 12))
(f30-1 (-> arg2 root-override-2 root-prim prim-core world-sphere w))
)
(countdown (s4-1 (fill-actor-list-for-line-sphere
(-> obj traffic object-hash)
(-> gp-0 0)
(-> gp-0 1)
(* 1.5 f30-1)
s3-1
10
(-> arg2 traffic-hash-id)
)
)
(let* ((s2-0 (the-as basic (-> s3-1 s4-1)))
(v1-70 (if (type? (the-as collide-shape s2-0) vehicle)
(the-as vehicle s2-0)
)
)
)
(when (and v1-70
(not (logtest? (-> v1-70 flags) (rigid-body-object-flag dead)))
(nonzero? (-> v1-70 flight-level-index))
)
(set! (-> gp-0 10 quad) (-> v1-70 root-override-2 trans quad))
(set! (-> gp-0 11 quad) (-> v1-70 root-override-2 transv quad))
(vector-! (-> gp-0 12) (-> gp-0 0) (-> gp-0 10))
(.lvf vf1 (&-> (-> gp-0 12) quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov a0-35 vf1)
(let ((f1-12 a0-35))
(vector-float*! (-> gp-0 14) (-> gp-0 12) (/ 1.0 (sqrtf f1-12)))
(when #t
(let* ((f0-28 (+ f30-1 (-> v1-70 root-override-2 root-prim prim-core world-sphere w)))
(f28-0 (* f0-28 f0-28))
)
(let ((f0-31 (fmax 0.0 (/ (- f28-0 f1-12) f28-0))))
(when (not (logtest? (-> v1-70 flags) (rigid-body-object-flag player-driving)))
(when (and (< 0.0 sv-20) (< f1-12 f28-0))
(vector-! (-> gp-0 13) (-> gp-0 1) (-> gp-0 11))
(let ((f1-14 (vector-dot (-> gp-0 14) (-> gp-0 13))))
(when (< f1-14 0.0)
(vector-float*!
(-> gp-0 6)
(-> gp-0 14)
(* -0.5 (/ sv-24 (+ sv-24 (-> v1-70 info-override info inv-mass))) sv-20 f1-14)
)
(vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6))
)
)
)
(vector-float*! (-> gp-0 6) (-> gp-0 14) (* 163840.0 f0-31))
(set! (-> gp-0 6 y) 0.0)
(vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6))
)
)
(when (< (cos 8192.0) (- (vector-dot (-> gp-0 3) (-> gp-0 14))))
(when (< (nearest-dist2-between-moving-points (-> gp-0 0) (-> gp-0 1) (-> gp-0 10) (-> gp-0 11) 2.0) f28-0)
(let ((f0-37 (fmax 0.0 (vector-dot (-> gp-0 3) (-> gp-0 11)))))
(set! (-> gp-0 15 x) (fmin (-> gp-0 15 x) f0-37))
)
)
)
)
)
)
)
)
)
)
)
(when (not (logtest? (-> obj flags) (vehicle-controller-flag ignore-others)))
(vector-! (-> gp-0 6) (-> gp-0 4) (-> gp-0 0))
(.lvf vf1 (&-> (-> gp-0 6) quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov v1-88 vf1)
(let ((f0-39 v1-88))
(logclear! (-> obj flags) (vehicle-controller-flag off-path))
(let ((f1-23 4096.0))
(when (< (* f1-23 f1-23) f0-39)
(logior! (-> obj flags) (vehicle-controller-flag off-path))
(let ((t9-8 vector-normalize!)
(a0-69 (-> gp-0 6))
(f1-26 12288.0)
(f2-12 4096.0)
)
(t9-8 a0-69 (fmin f1-26 (- f0-39 (* f2-12 f2-12))))
)
(vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6))
)
)
)
(vector+float*! (-> gp-0 6) (-> gp-0 1) (-> gp-0 5) (- (vector-dot (-> gp-0 5) (-> gp-0 1))))
(vector-! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6))
)
(cond
((logtest? (-> obj flags) (vehicle-controller-flag direct-mode))
(vector-! (-> gp-0 7) (-> obj turn-exit-point) (-> gp-0 0))
(vector-normalize! (-> gp-0 7) (-> gp-0 15 x))
(vector-! (-> gp-0 6) (-> gp-0 7) (-> gp-0 1))
(vector-float*! (-> gp-0 6) (-> gp-0 6) 3.0)
(let ((f0-48 (vector-dot (-> gp-0 3) (-> gp-0 6))))
(if (< f0-48 0.0)
(vector+float*! (-> gp-0 6) (-> gp-0 6) (-> gp-0 3) (* -0.875 f0-48))
)
)
)
(else
(vector+float*! (-> gp-0 8) (-> gp-0 0) (-> gp-0 1) 0.4)
(vector-! (-> gp-0 6) (-> gp-0 8) (-> obj turn-enter-point))
(cond
((< (vector-dot (-> gp-0 6) (-> obj turn-enter-dir)) 0.0)
(vector-! (-> gp-0 7) (-> obj turn-enter-point) (-> gp-0 0))
)
((begin
(vector-! (-> gp-0 6) (-> gp-0 8) (-> obj turn-exit-point))
(< (vector-dot (-> gp-0 6) (-> obj turn-exit-dir)) 0.0)
)
(vector-! (-> gp-0 6) (-> gp-0 8) (-> obj dest-circle))
(set! (-> gp-0 7 x) (- (-> gp-0 6 z)))
(set! (-> gp-0 7 y) 0.0)
(set! (-> gp-0 7 z) (-> gp-0 6 x))
(if (logtest? (-> obj flags) (vehicle-controller-flag left-turn))
(vector-float*! (-> gp-0 7) (-> gp-0 7) -1.0)
)
)
(else
(set! (-> gp-0 7 quad) (-> obj turn-exit-dir quad))
)
)
(let ((f0-60 (vector-length (-> gp-0 7))))
(if (< 0.1 f0-60)
(vector-float*! (-> gp-0 7) (-> gp-0 7) (/ (-> gp-0 15 x) f0-60))
)
)
(vector-! (-> gp-0 6) (-> gp-0 7) (-> gp-0 1))
(vector-float*! (-> gp-0 6) (-> gp-0 6) 2.0)
)
)
(vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6))
(set! (-> sv-16 quad) (-> gp-0 2 quad))
)
(let ((v1-145 (-> *perf-stats* data 21)))
(b! (zero? (-> v1-145 ctrl)) cfg-76 :delay (nop!))
(.mtc0 Perf 0)
(.sync.l)
(.sync.p)
(.mfpc a0-96 pcr0)
(+! (-> v1-145 accum0) a0-96)
(.mfpc a0-98 pcr1)
(+! (-> v1-145 accum1) a0-98)
)
(label cfg-76)
0
0
(none)
)
)
;; definition for method 10 of type vehicle-controller
;; WARN: Return type mismatch int vs none.
@@ -386,3 +714,7 @@
0
(none)
)
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -305,11 +305,11 @@
(format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x))
(format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y))
(format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z))
(format #t "~1Textra: #<rigid-body-object-extra-info @ #x~X>~%" (&-> obj max-time-step))
(format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step))
(format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity))
(format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance))
(format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale))
(format #t "~1Textra: #<rigid-body-object-extra-info @ #x~X>~%" (-> obj extra))
(format #t "~1Tmax-time-step: ~f~%" (-> obj extra max-time-step))
(format #t "~1Tgravity: (meters ~m)~%" (-> obj extra gravity))
(format #t "~1Tidle-distance: (meters ~m)~%" (-> obj extra idle-distance))
(format #t "~1Tattack-force-scale: ~f~%" (-> obj extra attack-force-scale))
(format #t "~1Tname: ~A~%" (-> obj name))
(format #t "~1Tflags: ~D~%" (-> obj flags))
(format #t "~1Tobject-type: ~D~%" (-> obj object-type))
@@ -0,0 +1,887 @@
;;-*-Lisp-*-
(in-package goal)
;; definition for method 99 of type vehicle
;; INFO: Used lq/sq
;; WARN: Return type mismatch int vs none.
(defmethod vehicle-method-99 vehicle ((obj vehicle) (arg0 float))
(let ((s4-0 (new 'stack-no-clear 'vehicle-grab-rail-info))
(s3-0 (-> obj root-override-2 root-prim))
(s2-0 1)
)
(when (< (-> obj rbody state position y) (+ (-> obj water-height) (-> s3-0 local-sphere w)))
(when (= (-> s3-0 prim-core prim-type) (prim-type group))
(let ((v1-5 (the-as collide-shape-prim-group s3-0)))
(set! s3-0 (-> v1-5 child 0))
(set! s2-0 (the-as int (-> v1-5 num-children)))
)
)
(countdown (s1-0 s2-0)
(when (= (-> s3-0 prim-core prim-type) (prim-type sphere))
(let* ((s0-0 (-> s3-0 prim-core))
(f0-2 (- (-> s0-0 world-sphere y) (-> s0-0 world-sphere w)))
)
(when (< f0-2 (-> obj water-height))
(set! (-> s4-0 local-pos 0 quad) (-> s0-0 world-sphere quad))
(let ((f1-5 (fmin (-> obj water-height) (+ (-> s0-0 world-sphere y) (-> s0-0 world-sphere w)))))
0.0
(let* ((f2-5 (fmax -1.0 (fmin 1.0 (/ (- (-> obj water-height) (-> s0-0 world-sphere y)) (-> s0-0 world-sphere w)))))
(f30-0 (+ 0.5 (* -0.25 f2-5 f2-5 f2-5) (* 0.75 f2-5)))
)
(set! (-> s4-0 local-pos 0 y) (* 0.5 (+ f0-2 f1-5)))
(let ((v1-18 (-> obj rbody))
(a1-1 (-> s4-0 local-pos))
(a2-0 (-> s4-0 normal))
)
(rigid-body-method-22 (-> v1-18 state) (the-as vector a1-1) a2-0)
)
(let* ((f0-7 (* 0.062831804 (fmin 200.0 (vector-length (-> s4-0 normal))) f30-0))
(f1-8 (-> s0-0 world-sphere w))
(f0-8 (* f0-7 (* f1-8 f1-8)))
(f1-11 4096.0)
(f1-13 (* f1-11 f1-11))
(f0-10 (fmin (* f0-8 (/ 1.0 f1-13)) (/ (-> obj info-override info mass) (* 2.0 arg0 (the float s2-0)))))
)
(vector-float*! (-> s4-0 local-pos 1) (-> s4-0 normal) (* -1.0 f0-10))
)
(let ((v1-34 (-> obj rbody))
(a1-3 (-> s4-0 local-pos))
(a2-1 (-> s4-0 local-pos 1))
)
(rigid-body-method-18 (-> v1-34 state) (the-as vector a1-3) a2-1)
)
(vector-reset! (-> s4-0 local-pos 1))
(let* ((f0-12 549018.94)
(f1-19 4096.0)
(f2-13 4096.0)
(f1-20 (* f1-19 (* f2-13 f2-13)))
(f0-16 (* f0-12 (/ 1.0 f1-20) (-> obj info-override buoyancy-factor) f30-0 (-> s0-0 world-sphere w)))
(f1-25 (-> s0-0 world-sphere w))
)
(set! (-> s4-0 local-pos 1 y) (* f0-16 (* f1-25 f1-25)))
)
)
)
(let ((v1-46 (-> obj rbody))
(a1-4 (-> s4-0 local-pos))
(a2-2 (-> s4-0 local-pos 1))
)
(rigid-body-method-18 (-> v1-46 state) (the-as vector a1-4) a2-2)
)
)
)
)
(&+! s3-0 80)
)
)
)
0
(none)
)
;; definition of type vehicle-probe-work
(deftype vehicle-probe-work (structure)
((local-pos vector :inline :offset-assert 0)
(local-normal vector :inline :offset-assert 16)
(world-pos vector :inline :offset-assert 32)
(world-normal vector :inline :offset-assert 48)
(probe-pos vector :inline :offset-assert 64)
(ground-pos vector :inline :offset-assert 80)
(ground-normal vector :inline :offset-assert 96)
(velocity vector :inline :offset-assert 112)
(tire-force vector :inline :offset-assert 128)
(wheel-axis vector :inline :offset-assert 144)
)
:method-count-assert 9
:size-assert #xa0
:flag-assert #x9000000a0
)
;; definition for method 3 of type vehicle-probe-work
(defmethod inspect vehicle-probe-work ((obj vehicle-probe-work))
(when (not obj)
(set! obj obj)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" obj 'vehicle-probe-work)
(format #t "~1Tlocal-pos: #<vector @ #x~X>~%" (-> obj local-pos))
(format #t "~1Tlocal-normal: #<vector @ #x~X>~%" (-> obj local-normal))
(format #t "~1Tworld-pos: #<vector @ #x~X>~%" (-> obj world-pos))
(format #t "~1Tworld-normal: #<vector @ #x~X>~%" (-> obj world-normal))
(format #t "~1Tprobe-pos: #<vector @ #x~X>~%" (-> obj probe-pos))
(format #t "~1Tground-pos: #<vector @ #x~X>~%" (-> obj ground-pos))
(format #t "~1Tground-normal: #<vector @ #x~X>~%" (-> obj ground-normal))
(format #t "~1Tvelocity: #<vector @ #x~X>~%" (-> obj velocity))
(format #t "~1Ttire-force: #<vector @ #x~X>~%" (-> obj tire-force))
(format #t "~1Twheel-axis: #<vector @ #x~X>~%" (-> obj wheel-axis))
(label cfg-4)
obj
)
;; definition of type vehicle-physics-work
(deftype vehicle-physics-work (structure)
((mat matrix :inline :offset-assert 0)
(force vector :inline :offset-assert 64)
(velocity vector :inline :offset-assert 80)
(world-pos vector :inline :offset-assert 96)
(world-normal vector :inline :offset-assert 112)
(local-pos vector :inline :offset-assert 128)
(steering-axis vector :inline :offset-assert 144)
(lift-dir vector :inline :offset-assert 160)
(normal vector :inline :offset-assert 176)
(tmp vector :inline :offset-assert 192)
(p-body vector :inline :offset-assert 208)
(axis vector :inline :offset-assert 224)
(dir vector :inline :offset-assert 240)
(ground-normal vector :inline :offset-assert 256)
(impulse float :offset-assert 272)
(vel-dot-norm float :offset-assert 276)
(friction-coef float :offset-assert 280)
(speed-factor float :offset-assert 284)
(probe-work-array vehicle-probe-work 2 :inline :offset-assert 288)
)
:method-count-assert 9
:size-assert #x260
:flag-assert #x900000260
)
;; definition for method 3 of type vehicle-physics-work
(defmethod inspect vehicle-physics-work ((obj vehicle-physics-work))
(when (not obj)
(set! obj obj)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" obj 'vehicle-physics-work)
(format #t "~1Tmat: #<matrix @ #x~X>~%" (-> obj mat))
(format #t "~1Tforce: #<vector @ #x~X>~%" (-> obj force))
(format #t "~1Tvelocity: #<vector @ #x~X>~%" (-> obj velocity))
(format #t "~1Tworld-pos: #<vector @ #x~X>~%" (-> obj world-pos))
(format #t "~1Tworld-normal: #<vector @ #x~X>~%" (-> obj world-normal))
(format #t "~1Tlocal-pos: #<vector @ #x~X>~%" (-> obj local-pos))
(format #t "~1Tsteering-axis: #<vector @ #x~X>~%" (-> obj steering-axis))
(format #t "~1Tlift-dir: #<vector @ #x~X>~%" (-> obj lift-dir))
(format #t "~1Tnormal: #<vector @ #x~X>~%" (-> obj normal))
(format #t "~1Ttmp: #<vector @ #x~X>~%" (-> obj tmp))
(format #t "~1Tp-body: #<vector @ #x~X>~%" (-> obj p-body))
(format #t "~1Taxis: #<vector @ #x~X>~%" (-> obj axis))
(format #t "~1Tdir: #<vector @ #x~X>~%" (-> obj dir))
(format #t "~1Tground-normal: #<vector @ #x~X>~%" (-> obj ground-normal))
(format #t "~1Timpulse: ~f~%" (-> obj impulse))
(format #t "~1Tvel-dot-norm: ~f~%" (-> obj vel-dot-norm))
(format #t "~1Tfriction-coef: ~f~%" (-> obj friction-coef))
(format #t "~1Tspeed-factor: ~f~%" (-> obj speed-factor))
(format #t "~1Tprobe-work-array[2] @ #x~X~%" (-> obj probe-work-array))
(label cfg-4)
obj
)
;; definition for method 100 of type vehicle
;; INFO: Used lq/sq
;; WARN: Return type mismatch int vs none.
(defmethod vehicle-method-100 vehicle ((obj vehicle) (arg0 float) (arg1 vehicle-physics-work))
(local-vars (v1-81 float) (v1-184 float))
(rlet ((acc :class vf)
(vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
(vf4 :class vf)
(vf5 :class vf)
(vf6 :class vf)
(vf7 :class vf)
)
(init-vf0-vector)
(+! (-> obj physics-counter) 1)
(let ((s3-0 (-> obj rbody)))
(mem-copy! (the-as pointer (-> arg1 mat)) (the-as pointer (-> s3-0 state matrix)) 64)
(let* ((f28-0 (* -1.0 (-> obj controls steering) (-> obj info-override tire-steering-angle)))
(f30-0 (cos f28-0))
(f0-2 (sin f28-0))
)
(set! (-> arg1 steering-axis x) f30-0)
(set! (-> arg1 steering-axis y) 0.0)
(set! (-> arg1 steering-axis z) f0-2)
)
(vector-rotate*! (-> arg1 steering-axis) (-> arg1 steering-axis) (-> arg1 mat))
(logior! (-> obj flags) (rigid-body-object-flag in-air))
(logclear! (-> obj flags) (rigid-body-object-flag on-ground on-flight-level))
(vector-reset! (-> arg1 ground-normal))
(set! (-> arg1 ground-normal y) 1.0)
(let ((f30-1 (-> obj info-override ground-probe-distance)))
(let ((s2-0 (new 'stack-no-clear 'collide-query)))
(vector-reset! (-> arg1 lift-dir))
(set! (-> arg1 lift-dir y) -1.0)
(set! (-> arg1 speed-factor)
(fmax 0.0 (fmin 0.9 (* 0.000008138021 (+ -40960.0 (vector-length (-> s3-0 state lin-velocity))))))
)
(when (logtest? (-> obj info-override flags) 1)
(vector-float*! (-> arg1 tmp) (-> arg1 mat vector 1) -1.0)
(let ((t9-4 vector-lerp!)
(a0-7 (-> arg1 lift-dir))
(a1-4 (-> arg1 lift-dir))
(a2-3 (-> arg1 tmp))
(f0-8 (-> arg1 speed-factor))
)
(t9-4 a0-7 a1-4 a2-3 (* f0-8 f0-8))
)
(vector-normalize! (-> arg1 lift-dir) 1.0)
)
(vector-float*! (-> s2-0 move-dist) (-> arg1 lift-dir) (the-as float f30-1))
(let ((v1-28 s2-0))
(set! (-> v1-28 radius) 409.6)
(set! (-> v1-28 collide-with) (collide-spec
backgnd
obstacle
hit-by-player-list
hit-by-others-list
water
collectable
blocking-plane
pusher
vehicle-mesh-probeable
)
)
(set! (-> v1-28 ignore-process0) #f)
(set! (-> v1-28 ignore-process1) #f)
(set! (-> v1-28 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nopilot #x1))
(set! (-> v1-28 action-mask) (collide-action solid))
)
(dotimes (s1-0 (-> obj info-override lift-thruster-count))
(let ((v1-31 (-> obj info-override lift-thruster-array s1-0))
(s0-0 (-> arg1 probe-work-array s1-0))
)
(vector-reset! (-> s0-0 tire-force))
(set! (-> s0-0 local-pos quad) (-> v1-31 local-pos quad))
(set! (-> s0-0 local-normal quad) (-> v1-31 normal quad))
(vector-matrix*! (-> s0-0 world-pos) (-> s0-0 local-pos) (-> arg1 mat))
(let ((a1-9 (-> s0-0 probe-pos)))
(let ((v1-34 (-> s0-0 world-pos)))
(let ((a0-22 (-> arg1 mat vector 1)))
(let ((a2-6 (-> obj info-override ground-probe-offset)))
(.mov vf7 a2-6)
)
(.lvf vf5 (&-> a0-22 quad))
)
(.lvf vf4 (&-> v1-34 quad))
)
(.add.x.vf vf6 vf0 vf0 :mask #b1000)
(.mul.x.vf acc vf5 vf7 :mask #b111)
(.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111)
(.svf (&-> a1-9 quad) vf6)
)
(let ((v1-35 s3-0)
(a1-10 (-> s0-0 probe-pos))
(a2-7 (-> s0-0 velocity))
)
(rigid-body-method-22 (-> v1-35 state) a1-10 a2-7)
)
(set! (-> s0-0 wheel-axis quad) (-> (the-as vector (if (< 0.0 (-> s0-0 local-pos z))
(-> arg1 steering-axis)
(the-as vector (-> arg1 mat))
)
)
quad
)
)
(set! (-> s0-0 ground-pos quad) (-> s0-0 probe-pos quad))
(set! (-> s0-0 ground-pos y) 0.0)
(vector-reset! (-> s0-0 ground-normal))
(when (logtest? (-> obj flags) (rigid-body-object-flag enable-collision))
(set! (-> s2-0 start-pos quad) (-> s0-0 probe-pos quad))
(let ((f0-15 (probe-using-line-sphere *collide-cache* s2-0)))
(cond
((and (>= f0-15 0.0) (!= (-> s2-0 best-other-tri pat mode) 1))
(logclear! (-> obj flags) (rigid-body-object-flag in-air))
(logior! (-> obj flags) (rigid-body-object-flag on-ground))
(set! (-> s0-0 ground-pos y) (- (-> s0-0 probe-pos y) (* f0-15 f30-1)))
(set! (-> s0-0 ground-normal quad) (-> s2-0 best-other-tri normal quad))
(set! (-> arg1 ground-normal quad) (-> s0-0 ground-normal quad))
)
(else
(set! (-> s0-0 ground-pos y) (+ -81920.0 (-> s3-0 state position y)))
)
)
)
0
)
)
)
)
(set! (-> obj lift-thrust 0) 0.0)
(set! (-> obj lift-thrust 1) 0.0)
(set! (-> obj roll-thrust 0) 0.0)
(set! (-> obj roll-thrust 1) 0.0)
(set! (-> obj roll-thrust 0) 0.0)
(set! (-> obj roll-thrust 1) 0.0)
(when (>= 1 (-> obj force-level))
(dotimes (s2-1 (-> obj info-override lift-thruster-count))
(let ((s1-1 (-> arg1 probe-work-array s2-1)))
(set! (-> arg1 world-pos quad) (-> s1-1 world-pos quad))
(set! (-> arg1 velocity quad) (-> s1-1 velocity quad))
(let ((f28-1 (-> s1-1 probe-pos y)))
(when (> (-> obj flight-level-index) 0)
(set! f28-1 (- f28-1 (+ 6144.0 (-> obj flight-level))))
(when (>= 0.0 f28-1)
(logclear! (-> obj flags) (rigid-body-object-flag in-air))
(logior! (-> obj flags) (rigid-body-object-flag on-flight-level))
(.lvf vf1 (&-> (-> s1-1 ground-normal) quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov v1-81 vf1)
(if (= v1-81 0.0)
(set! (-> s1-1 ground-normal y) 1.0)
)
)
)
(when (or (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(and (> (-> obj flight-level-index) 0) (< f28-1 0.0))
)
(if (zero? (-> obj flight-level-index))
(set! f28-1 40960.0)
)
(let* ((f0-37 (* -1.0
(-> obj force-scale)
(-> obj info-override inv-lift-thruster-count)
(-> obj info-override info mass)
(-> obj info-override extra gravity)
(+ 1.0 (* 2.0 (the float (-> obj flight-level-index))))
)
)
(f1-17 -1.0)
(f2-4 1.0)
(f3-4 16384.0)
(f3-7 (* f28-1 (/ 1.0 f3-4)))
(f4-2 0.5)
(f5-0 81920.0)
(f0-38 (* f0-37 (fmax f1-17 (fmin f2-4 (+ f3-7 (* f4-2 (/ 1.0 f5-0) (-> arg1 velocity y)))))))
)
(let ((f1-20 (fmax 0.0 f0-38)))
(+! (-> obj lift-thrust s2-1) f1-20)
(when (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(+! (-> obj roll-thrust 0) (* 0.05 f1-20))
(+! (-> obj roll-thrust 1) (* 0.05 f1-20))
)
)
(vector-reset! (-> arg1 force))
(set! (-> arg1 force y) f0-38)
)
(let ((v1-122 s3-0)
(a1-12 (-> arg1 world-pos))
(a2-8 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-122 state) a1-12 a2-8)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
)
(let ((f0-40 (+ 4096.0 f28-1)))
(when (or (and (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(< 0.0 f0-40)
(< 0.0 (-> arg1 velocity y))
)
(and (> (-> obj flight-level-index) 0) (< f0-40 0.0) (< (-> arg1 velocity y) 0.0))
)
(vector-reset! (-> arg1 force))
(let ((f0-43 (* -0.25 (-> obj info-override inv-lift-thruster-count)))
(f1-28 arg0)
)
(set! (-> arg1 force y) (* f0-43 (/ 1.0 f1-28) (-> obj info-override info mass) (-> arg1 velocity y)))
)
(let ((v1-140 s3-0)
(a1-16 (-> arg1 world-pos))
(a2-9 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-140 state) a1-16 a2-9)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
)
)
)
(let* ((f1-36 (fmax 4096.0 (fmin (- (-> s1-1 probe-pos y) (-> s1-1 ground-pos y)) f30-1)))
(f28-2 (- 1.0 (/ (+ -4096.0 f1-36) (+ -4096.0 f30-1))))
)
(if (>= (-> obj info-override cos-ground-effect-angle)
(vector-dot (-> s1-1 ground-normal) (-> arg1 mat vector 1))
)
(set! f28-2 0.0)
)
(set! (-> arg1 tmp y) 0.0)
(set! (-> arg1 tmp x) (-> arg1 velocity z))
(set! (-> arg1 tmp z) (- (-> arg1 velocity x)))
(vector-normalize! (-> arg1 tmp) 1.0)
(vector+float*!
(-> arg1 normal)
(-> s1-1 ground-normal)
(-> arg1 tmp)
(- (vector-dot (-> s1-1 ground-normal) (-> arg1 tmp)))
)
(let ((v1-155 (-> arg1 force))
(a0-55 (-> arg1 normal))
(f0-58 (* 2.0 f28-2))
(f1-41 arg0)
)
(vector-float*! v1-155 a0-55 (* f0-58
(/ 1.0 f1-41)
(-> obj info-override inv-lift-thruster-count)
(-> obj info-override info mass)
(fmax 0.0 (- (vector-dot (-> arg1 velocity) (-> arg1 normal))))
)
)
)
(let ((v1-157 s3-0)
(a1-28 (-> arg1 world-pos))
(a2-13 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-157 state) a1-28 a2-13)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
(let ((f0-72 (* 8.0
(-> obj info-override info mass)
(-> obj info-override extra gravity)
(-> obj info-override inv-lift-thruster-count)
(+ (* (-> obj info-override spring-lift-factor) f28-2)
(* 0.75 (-> obj jump-thrust) (-> obj info-override jump-thrust-factor))
)
(- (+ 1.0 (* 2.0 (rand-vu) (-> obj power-fluctuation-factor))) (-> obj power-fluctuation-factor))
)
)
)
(+! (-> obj lift-thrust s2-1) f0-72)
(vector-float*! (-> arg1 force) (-> arg1 lift-dir) (* -1.0 f0-72))
)
)
(let ((v1-176 s3-0)
(a1-32 (-> arg1 world-pos))
(a2-14 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-176 state) a1-32 a2-14)
)
(vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force))
(when (and (< 0.0 (-> obj info-override tire-friction-factor)) (let ((f0-75 0.0))
(.lvf vf1 (&-> (-> s1-1 ground-normal) quad))
(.add.w.vf vf2 vf0 vf0 :mask #b1)
(.mul.vf vf1 vf1 vf1)
(.mul.x.vf acc vf2 vf1 :mask #b1)
(.add.mul.y.vf acc vf2 vf1 acc :mask #b1)
(.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1)
(.mov v1-184 vf1)
(< f0-75 v1-184)
)
)
(vector+float*!
(-> arg1 normal)
(-> s1-1 wheel-axis)
(-> s1-1 ground-normal)
(- (vector-dot (-> s1-1 wheel-axis) (-> s1-1 ground-normal)))
)
(vector-normalize! (-> arg1 normal) 1.0)
(set! (-> arg1 world-pos quad) (-> s3-0 state position quad))
(set! (-> arg1 velocity quad) (-> s3-0 state lin-velocity quad))
(vector-! (-> arg1 p-body) (-> arg1 world-pos) (-> s3-0 state position))
(vector-cross! (-> arg1 tmp) (-> arg1 p-body) (-> arg1 normal))
(vector-rotate*! (-> arg1 tmp) (-> arg1 tmp) (-> s3-0 state inv-i-world))
(vector-cross! (-> arg1 tmp) (-> arg1 tmp) (-> arg1 p-body))
(set! (-> arg1 vel-dot-norm) (vector-dot (-> arg1 velocity) (-> arg1 normal)))
(let ((f0-82 (fabs (-> arg1 vel-dot-norm))))
(set! (-> arg1 friction-coef)
(smooth-interp
(-> obj info-override tire-static-friction)
(-> obj info-override tire-dynamic-friction)
f0-82
(-> obj info-override tire-static-friction-speed)
(-> obj info-override tire-dynamic-friction-speed)
)
)
)
(set! (-> arg1 friction-coef)
(* (-> arg1 friction-coef) (+ 1.0 (* -0.75 (fmax 0.0 (fmin 1.0 (-> obj engine-thrust))))))
)
(let ((f0-90
(* (-> arg1 friction-coef)
(-> obj info-override tire-friction-factor)
(fmax 0.0 (vector-dot (-> s1-1 ground-normal) (-> s1-1 tire-force)))
)
)
)
(set! (-> arg1 impulse)
(/ (* -1.0 (-> arg1 vel-dot-norm))
(* arg0 (+ (-> s3-0 state info inv-mass) (vector-dot (-> arg1 normal) (-> arg1 tmp))))
)
)
(set! (-> arg1 impulse) (fmax (fmin (-> arg1 impulse) f0-90) (- f0-90)))
)
(vector-float*! (-> arg1 force) (-> arg1 normal) (-> arg1 impulse))
(let ((v1-213 s3-0)
(a1-45 (-> arg1 world-pos))
(a2-19 (-> arg1 force))
)
(rigid-body-method-18 (-> v1-213 state) a1-45 a2-19)
)
)
)
)
)
)
)
0
(none)
)
)
;; definition for method 29 of type vehicle
;; INFO: Used lq/sq
;; WARN: Stack slot offset 624 signed mismatch
;; WARN: Stack slot offset 724 signed mismatch
;; WARN: Stack slot offset 720 signed mismatch
;; WARN: Stack slot offset 624 signed mismatch
;; WARN: Stack slot offset 724 signed mismatch
;; WARN: Stack slot offset 720 signed mismatch
;; WARN: Stack slot offset 624 signed mismatch
;; WARN: Stack slot offset 724 signed mismatch
;; WARN: Stack slot offset 720 signed mismatch
;; WARN: Stack slot offset 624 signed mismatch
;; WARN: Stack slot offset 724 signed mismatch
;; WARN: Stack slot offset 720 signed mismatch
;; WARN: Return type mismatch int vs none.
(defmethod rigid-body-object-method-29 vehicle ((obj vehicle) (arg0 float))
(local-vars (sv-624 float) (sv-720 float) (sv-724 float))
(rlet ((vf0 :class vf))
(init-vf0-vector)
(let ((gp-0 (new 'stack-no-clear 'inline-array 'matrix 9))
(s5-0 (-> obj rbody))
(s4-0 (-> obj info-override))
)
(mem-copy! (the-as pointer (-> gp-0 0)) (the-as pointer (-> s5-0 state matrix)) 64)
(when (not (logtest? (-> obj flags) (rigid-body-object-flag dead)))
(vehicle-method-100 obj arg0 (the-as vehicle-physics-work gp-0))
(when (>= 1 (-> obj force-level))
(set! sv-624 (* (-> s4-0 info mass) (-> s4-0 extra gravity)))
(when (!= (-> s4-0 pitch-control-factor) 0.0)
(set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 quad 0))
(set! (-> gp-0 3 vector 2 y) 0.0)
(let ((f30-0 (vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity))))
(dotimes (s1-0 (-> s4-0 lift-thruster-count))
(let ((s0-0 (-> s4-0 lift-thruster-array s1-0)))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s0-0 local-pos) (-> gp-0 0))
(vector-rotate*! (-> gp-0 1 trans) (-> s0-0 normal) (-> gp-0 0))
(let* ((f0-5 -1.0)
(f1-2 1.0)
(f2-0 0.2)
(a0-9 (the-as number (-> s0-0 local-pos z)))
(a1-5 #xffffffff80000000)
(v1-16 #x3f800000)
(f0-7
(* (fmax
f0-5
(fmin
f1-2
(* f2-0 (the-as float (logior (logand (the-as uint a0-9) a1-5) v1-16)) (-> s4-0 pitch-control-factor) f30-0)
)
)
sv-624
)
)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f0-7))
)
)
(let ((v1-21 s5-0)
(a1-7 (-> gp-0 1 vector 2))
(a2-4 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-21 state) a1-7 (the-as vector a2-4))
)
)
)
)
(let ((s1-1 (new 'stack-no-clear 'inline-array 'vector 5)))
(let ((f0-12 (* -1.0 (-> obj controls steering) (-> gp-0 4 vector 1 w) (-> s4-0 roll-angle))))
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! f0-12 0.0)
)
(quaternion-vector-angle! (the-as quaternion (-> s1-1 0)) (-> gp-0 0 vector 2) f0-12)
)
(quaternion->matrix (the-as matrix (-> s1-1 1)) (the-as quaternion (-> s1-1 0)))
(set! (-> gp-0 3 trans quad) (-> s1-1 2 quad))
)
(let ((f0-14 (vector-dot (the-as vector (-> gp-0 0)) (-> gp-0 3 trans))))
(set! sv-720 (* (-> s4-0 info mass) (-> s4-0 extra gravity)))
(let ((f1-11 f0-14))
(set! sv-724
(+ (* f1-11 f1-11 f0-14) (* 0.075 (vector-dot (-> gp-0 0 vector 2) (-> s5-0 state ang-velocity))))
)
)
)
(dotimes (s1-2 (-> s4-0 roll-thruster-count))
(let* ((s0-1 (-> s4-0 roll-thruster-array s1-2))
(f0-17 0.0)
(f1-16 1.0)
(f2-7 -1.0)
(a0-19 (the-as number (-> s0-1 local-pos x)))
(a1-10 #xffffffff80000000)
(v1-44 #x3f800000)
(f30-1
(fmax f0-17 (fmin f1-16 (* f2-7 (the-as float (logior (logand (the-as uint a0-19) a1-10) v1-44)) sv-724)))
)
)
(when (< 0.0 f30-1)
(let ((f30-2
(* (+ f30-1 (+ (- (-> obj power-fluctuation-factor)) (* 2.0 (rand-vu) (-> obj power-fluctuation-factor))))
(-> s4-0 roll-control-factor)
sv-720
)
)
)
(+! (-> obj roll-thrust s1-2) (fmax 0.0 f30-2))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s0-1 local-pos) (-> gp-0 0))
(vector-rotate*! (-> gp-0 1 trans) (-> s0-1 normal) (-> gp-0 0))
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f30-2))
)
(let ((v1-56 s5-0)
(a1-14 (-> gp-0 1 vector 2))
(a2-8 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-56 state) a1-14 (the-as vector a2-8))
)
0
)
)
)
)
(when #t
(let* ((f0-30 (-> obj controls steering))
(f1-23 (-> s4-0 steering-thruster-half-gain-speed))
(f2-10 (-> s4-0 steering-thruster-half-gain-speed))
(v1-65 (-> s5-0 state lin-velocity))
(f2-12 (/ f1-23 (+ f2-10 (sqrtf (+ (* (-> v1-65 x) (-> v1-65 x)) (* (-> v1-65 z) (-> v1-65 z)))))))
)
(if (< (-> obj controls throttle) 0.0)
(set! f0-30 (* -1.0 f0-30))
)
(set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 vector 1 quad))
(let ((f30-3 (* 8192.0
(-> s4-0 info mass)
(-> obj power-level)
(- (* f0-30 f2-12 (-> s4-0 steering-thruster-max-gain))
(vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity))
)
(-> s4-0 steering-thruster-factor)
)
)
)
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! f30-3 (* f30-3 (-> s4-0 air-steering-factor)))
)
(let ((s1-3 (the-as object (-> s4-0 steering-thruster-array))))
(countdown (s0-2 (-> s4-0 steering-thruster-count))
(vector-matrix*! (-> gp-0 1 vector 2) (-> (the-as vehicle-control-point s1-3) local-pos) (-> gp-0 0))
(vector-rotate*!
(-> gp-0 1 trans)
(-> (the-as (inline-array vehicle-control-point) s1-3) 0 normal)
(-> gp-0 0)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f30-3)
(let ((v1-80 s5-0)
(a1-17 (-> gp-0 1 vector 2))
(a2-11 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-80 state) a1-17 (the-as vector a2-11))
)
(set! s1-3 (-> (the-as (inline-array vehicle-control-point) s1-3) 1))
)
)
)
)
)
(seek! (-> obj jump-thrust) 0.0 (* 6.0 arg0))
(when (logtest? (rigid-body-object-flag ignition) (-> obj flags))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 engine-thrust-local-pos) (-> gp-0 0))
(set! (-> gp-0 3 trans quad) (-> gp-0 0 vector 2 quad))
(let ((f0-45 (* (-> obj engine-thrust)
(-> s4-0 max-engine-thrust)
(-> s4-0 info mass)
(-> obj power-level)
(-> obj force-scale)
)
)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 3 trans) f0-45)
)
(when #t
(let ((v1-94 s5-0)
(a1-20 (-> gp-0 1 vector 2))
(a2-14 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-94 state) a1-20 (the-as vector a2-14))
)
)
)
(let ((f30-4 (-> obj controls brake)))
(when (< 0.0 f30-4)
(vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 brake-local-pos) (-> gp-0 0))
(let ((v1-98 s5-0)
(a1-22 (-> gp-0 1 vector 2))
(a2-16 (-> gp-0 1 vector 1))
)
(rigid-body-method-22 (-> v1-98 state) a1-22 a2-16)
)
(let* ((v1-101 (-> gp-0 1 vector 1))
(f1-38 (sqrtf (+ (* (-> v1-101 x) (-> v1-101 x)) (* (-> v1-101 z) (-> v1-101 z)))))
(f0-53 (* -98304.0 (-> s4-0 brake-factor) (-> s4-0 info mass)))
(f1-39 (fmax 16384.0 f1-38))
(f0-55 (* f0-53 (/ 1.0 f1-39) f30-4))
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 vector 1) f0-55)
)
(let ((v1-109 s5-0)
(a1-23 (-> gp-0 1 vector 2))
(a2-17 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-109 state) a1-23 (the-as vector a2-17))
)
)
)
)
(let ((s1-4 (new 'stack-no-clear 'inline-array 'vehicle-control-point 2)))
(quad-copy!
(the-as pointer s1-4)
(the-as pointer (-> s4-0 stabilizer-array))
(* (-> s4-0 stabilizer-count) 2)
)
(let ((s0-3 (-> s1-4 3 normal)))
(let ((f0-57 (* -3640.889 (-> obj controls lean-z))))
(vector-rotate-around-x! s0-3 s0-3 f0-57)
)
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! (-> s0-3 w) (* 10.0 (-> s0-3 w)))
)
(if (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags))
(set! (-> s0-3 w) 0.0)
)
)
(let ((f30-5 (* -0.0000006103516 (-> obj force-scale) (-> s4-0 info mass) (-> s4-0 drag-force-factor))))
(if (logtest? (-> obj flags) (rigid-body-object-flag in-air))
(set! f30-5 (* f30-5 (-> s4-0 air-drag-factor)))
)
(let ((s1-5 (-> s1-4 0)))
(countdown (s0-4 (-> s4-0 stabilizer-count))
(vector-matrix*! (-> gp-0 1 vector 2) (-> s1-5 local-pos) (-> gp-0 0))
(vector-rotate*! (-> gp-0 1 trans) (-> s1-5 normal) (-> gp-0 0))
(let ((v1-128 s5-0)
(a1-28 (-> gp-0 1 vector 2))
(a2-22 (-> gp-0 1 vector 1))
)
(rigid-body-method-22 (-> v1-128 state) a1-28 a2-22)
)
(let ((f0-70
(* -0.06125
(vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1))
(-> s1-5 normal w)
(-> obj force-scale)
(-> s4-0 info mass)
(-> s4-0 airfoil-factor)
)
)
)
(vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f0-70)
)
(when (<= (-> obj force-level) 0)
(let ((v1-138 s5-0)
(a1-29 (-> gp-0 1 vector 2))
(a2-23 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-138 state) a1-29 (the-as vector a2-23))
)
)
(vector-float*!
(the-as vector (-> gp-0 1))
(-> gp-0 1 vector 1)
(* f30-5
(-> s1-5 normal w)
(+ (* 0.15 (vector-length (-> gp-0 1 vector 1))) (fabs (vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1))))
)
)
(when (<= (-> obj force-level) 0)
(let ((v1-145 s5-0)
(a1-35 (-> gp-0 1 vector 2))
(a2-25 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-145 state) a1-35 (the-as vector a2-25))
)
)
(&+! s1-5 32)
)
)
)
)
(.svf (&-> (-> gp-0 1) quad 0) vf0)
(set! (-> gp-0 1 vector 0 y) (* -1.0
(-> s4-0 extra gravity)
(if (< 1 (-> obj force-level))
2.0
1.0
)
(-> s4-0 info mass)
)
)
(let ((v1-154 s5-0)
(a1-36 (-> gp-0 1))
)
(rigid-body-method-20 (-> v1-154 state) (the-as vector a1-36))
)
(when (logtest? (-> obj flags) (rigid-body-object-flag riding))
(set! (-> gp-0 2 quad 0) (-> s4-0 info cm-offset-joint quad))
(+! (-> gp-0 2 vector 0 x) (* (-> obj controls steering) (-> s4-0 player-shift-x)))
(+! (-> gp-0 2 vector 0 z) (* (-> obj controls lean-z) (-> s4-0 player-shift-z)))
(vector-matrix*! (-> gp-0 1 vector 2) (the-as vector (-> gp-0 2)) (-> gp-0 0))
(.svf (&-> (-> gp-0 1) quad 0) vf0)
(set! (-> gp-0 1 vector 0 y) (- (-> s4-0 player-weight)))
(let ((v1-162 s5-0)
(a1-38 (-> gp-0 1 vector 2))
(a2-27 (-> gp-0 1))
)
(rigid-body-method-18 (-> v1-162 state) a1-38 (the-as vector a2-27))
)
0
)
(rigid-body-object-method-50 obj arg0)
(vehicle-method-99 obj arg0)
(when (not (logtest? (-> obj flags) (rigid-body-object-flag dead)))
(set! (-> gp-0 1 trans quad) (-> s5-0 state lin-momentum quad))
(set! (-> gp-0 1 trans y) 0.0)
(vector-normalize! (-> gp-0 1 trans) 1.0)
(let* ((v1-174 (-> s5-0 state lin-velocity))
(f0-90 (/ (sqrtf (+ (* (-> v1-174 x) (-> v1-174 x)) (* (-> v1-174 z) (-> v1-174 z)))) (-> s4-0 max-xz-speed)))
(v1-176 (-> gp-0 1))
(a0-65 (-> gp-0 1 trans))
(f1-67 -1.0)
(f2-29 (* (-> s4-0 speed-limiting-drag) (vector-dot (-> s5-0 state force) (-> gp-0 1 trans))))
(f3-19
(* (fabs (-> obj engine-thrust)) (-> s4-0 speed-scrubbing-drag) (vector-length (-> s5-0 state lin-momentum)))
)
(f4-6 (- 1.0 (fabs (vector-dot (-> s5-0 state matrix vector 2) (-> gp-0 1 trans)))))
)
(vector-float*! (the-as vector v1-176) a0-65 (* f1-67 (+ f2-29 (* f3-19 (* f4-6 f4-6))) (sqrtf f0-90)))
)
(let ((a1-51 (-> gp-0 1)))
(rigid-body-method-20 (-> s5-0 state) (the-as vector a1-51))
)
)
)
0
(none)
)
)
;; definition for method 125 of type vehicle
(defmethod vehicle-method-125 vehicle ((obj vehicle) (arg0 float))
(rigid-body-object-method-29 obj arg0)
(none)
)
;; definition for method 126 of type vehicle
(defmethod vehicle-method-126 vehicle ((obj vehicle) (arg0 float))
(rigid-body-object-method-29 obj arg0)
(none)
)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+7 -5
View File
@@ -13,10 +13,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 2) (meters 2))
)
:max-time-step 0.02
:gravity (meters 10)
:idle-distance (meters 200)
:attack-force-scale 2.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 10)
:idle-distance (meters 200)
:attack-force-scale 2.0
)
:name '*bombbot-body-constants*
)
)
@@ -2981,7 +2983,7 @@
(init-vf0-vector)
(let ((a1-0 (new 'stack-no-clear 'vector)))
(vector-reset! a1-0)
(set! (-> a1-0 y) (* -1.0 (-> obj info gravity) (-> obj rigidbody state info mass)))
(set! (-> a1-0 y) (* -1.0 (-> obj info extra gravity) (-> obj rigidbody state info mass)))
(rigid-body-method-20 (-> obj rigidbody state) a1-0)
)
(rigid-body-method-24 (-> obj rigidbody state))
+6 -4
View File
@@ -96,10 +96,12 @@
:cm-offset-joint (new 'static 'vector :y -8192.0 :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 6) (meters 4) (meters 6))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
)
:name '*dig-sinking-platform-constants*
)
)
+6 -4
View File
@@ -448,10 +448,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 2.0
)
:name '*dig-bomb-crate-cylinder-constants*
)
)
+12 -8
View File
@@ -1511,10 +1511,12 @@ This commonly includes things such as:
:cm-offset-joint (new 'static 'vector :z -24576.0 :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 3) (meters 21))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*dig-tipping-rock-constants*
:drag-factor 2.0
:buoyancy-factor 1.2
@@ -1833,10 +1835,12 @@ This commonly includes things such as:
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 200)
:attack-force-scale 1.0
)
:name '*dig-stomp-block-constants*
)
)
+6 -4
View File
@@ -81,10 +81,12 @@
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 1) (meters 2))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*ruins-sinking-platform-constants*
:drag-factor 2.0
:buoyancy-factor 1.5
+6 -4
View File
@@ -1054,10 +1054,12 @@ This commonly includes things such as:
:cm-offset-joint (new 'static 'vector :w 1.0)
:inertial-tensor-box (new 'static 'array meters 3 (meters 5) (meters 1) (meters 5))
)
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
:extra (new 'static 'rigid-body-object-extra-info
:max-time-step 0.02
:gravity (meters 80)
:idle-distance (meters 50)
:attack-force-scale 1.0
)
:name '*under-buoy-plat-platform-constants*
:drag-factor 2.0
:buoyancy-factor 2.3
+1 -1
View File
@@ -345,7 +345,7 @@ TEST_F(DataDecompTest, FloatArray) {
info.array_size = 7;
info.is_value = false;
auto decomp = decompile_at_label_with_hint(info, parsed.label("L63"), parsed.labels,
{parsed.words}, *dts, nullptr, GameVersion::Jak1);
{parsed.words}, dts->ts, nullptr, GameVersion::Jak1);
check_forms_equal(decomp.print(),
"(new 'static 'array float 7\n"
"1.0 0.0 1.0 0.0 1.0 0.0 1.0)");
+1
View File
@@ -19,6 +19,7 @@
"DGO/COB.DGO",
"DGO/CPA.DGO",
"DGO/CTA.DGO",
"DGO/CPO.DGO",
"DGO/CTB.DGO",
"DGO/CTC.DGO",
"DGO/CTYASHA.DGO",