mirror of
https://github.com/open-goal/jak-project
synced 2026-07-09 06:53:45 -04:00
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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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]
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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]]
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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)"]]
|
||||
}
|
||||
|
||||
@@ -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())));
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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*
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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*
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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*
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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*
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)))
|
||||
|
||||
Generated
Vendored
+15
-16
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+1625
File diff suppressed because it is too large
Load Diff
+5
-5
@@ -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))
|
||||
|
||||
+887
@@ -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)
|
||||
)
|
||||
+1333
File diff suppressed because it is too large
Load Diff
+2941
File diff suppressed because it is too large
Load Diff
+4060
File diff suppressed because it is too large
Load Diff
+7
-5
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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)");
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user