decomp: hint-control | menu | default-menu (as much as possible) (#632)

* decomp: mostly done `hint-control`

* decomp: Started and decent chunk of `menu` done

* temp stash

* decomp: escape from `menu` hell

* decomp: starting on `default-menu`

* decomp: As much as i can do in `default-menu` at this time

* decomp: clean up `hint-control`

* decomp: fix reference tests

* temp stash

* decomp: finalize `menu`

* decomp: add `menu` to goal_src

* decomp: finalize `hint-control`

* decomp: Resolve TypeConsistency issues

* and fix reference tests

* address feedback

* format and lint

* fix tests
This commit is contained in:
Tyler Wilding
2021-07-04 18:25:08 -04:00
committed by GitHub
parent a6eb51999b
commit 17aedd894d
34 changed files with 5617 additions and 366 deletions
+7
View File
@@ -21,6 +21,13 @@
"name" : "Tests - Draft Tests - Verbose",
"args" : ["--gtest_brief=0", "--gtest_filter=\"*Draft*\""]
},
{
"type" : "default",
"project" : "CMakeLists.txt",
"projectTarget" : "goalc-test.exe (bin\\goalc-test.exe)",
"name" : "Tests - TypeConsistency - Verbose",
"args" : ["--gtest_brief=0", "--gtest_filter=\"*TypeConsistency*\""]
},
{
"type" : "default",
"project" : "CMakeLists.txt",
+2 -1
View File
@@ -35,7 +35,7 @@ tasks:
- python ./scripts/cleanup-all-types.py
analyze-ee-memory:
cmds:
- ./out/build/Debug/bin/memory_dump_tool.exe "{{.FILE}}" ./ > ee-analysis.log
- ./out/build/Release/bin/memory_dump_tool.exe "{{.FILE}}" ./ > ee-analysis.log
watch-pcsx2:
cmds:
- watchmedo shell-command --drop --patterns="*.p2s" --recursive --command='task analyze-ee-memory FILE="${watch_src_path}"' "{{.SAVESTATE_DIR}}"
@@ -51,6 +51,7 @@ tasks:
- task: offline-tests
update-reference-tests:
cmds:
- cmd: python ./scripts/default-file-or-folder.py --path failures
- cmd: ./out/build/Release/bin/offline-test.exe "./iso_data/jak1" --dump-mode
ignore_error: true
- python ./scripts/update_decomp_reference.py ./failures ./test/decompiler/reference/
+259 -263
View File
@@ -4607,7 +4607,7 @@
)
(deftype shader-ptr (uint32)
((shader uint32 :offset 8 :size 24))
((shader uint32 :offset 8 :size 24)) ;; TODO this seems wrong - default-menu::all-texture-tweak-adjust
:method-count-assert 9
:size-assert #x4
:flag-assert #x900000004
@@ -4828,7 +4828,7 @@
(mem-usage-block basic :offset-assert 2496)
(mem-usage int32 :offset-assert 2500)
(code-memory-start pointer :offset-assert 2504)
(code-memory-end pointer :offset-assert 2508)
(code-memory-end pointer :offset-assert 2508) ;; NOTE - usually a texture-page
(texture-mask uint32 9 :offset-assert 2512)
(force-inside? symbol :offset-assert 2548)
(pad uint8 56)
@@ -4872,7 +4872,7 @@
(receiving-level basic :offset-assert 32)
(load-commands pair :offset-assert 36)
(play? symbol :offset-assert 40)
;; there's something? from 40 -> 96.
;; there's something? from 40 -> 96. ;; - Look at default-menu::debug-create-cam-restore
(_hack-pad uint8 :offset 90)
(level0 level :inline :offset-assert 96)
(level1 level :inline :offset-assert 2704)
@@ -5556,7 +5556,7 @@
(define-extern texture-page-common-boot-allocate (function texture-pool texture-page kheap int texture-page))
(define-extern texture-page-level-allocate (function texture-pool texture-page kheap int texture-page))
(define-extern relocate-later (function symbol))
(define-extern adgif-shader-update! function)
(define-extern adgif-shader-update! (function int texture none)) ;; todo - unconfirmed
(define-extern adgif-shader-login (function adgif-shader none))
(define-extern adgif-shader-login-no-remap (function adgif-shader none))
(define-extern adgif-shader-login-fast function)
@@ -5616,7 +5616,8 @@
(define-extern *draw-hook* (function none))
(define-extern *debug-hook* (function none))
(define-extern *menu-hook* (function none))
(declare-type debug-menu-context basic)
(define-extern *menu-hook* (function debug-menu-context))
(define-extern *progress-hook* (function none))
(define-extern *dma-timeout-hook* (function none))
@@ -5802,6 +5803,7 @@
(deftype drawable (basic)
((id int16 :offset-assert 4)
; (unknown basic :offset-assert 8) ;; - from default-menu::build-instance-list
(bsphere vector :inline :offset-assert 16)
)
:method-count-assert 18
@@ -6012,7 +6014,7 @@
;; inherited inspect of process
(:methods
(dummy-14 () none 14)
(dummy-15 () none 15)
(dummy-15 (_type_) symbol 15)
)
)
@@ -6068,7 +6070,7 @@
)
(deftype task-hint-control-group (structure)
((tasks basic :offset-assert 0)
((tasks (array task-hint-control) :offset-assert 0)
)
:method-count-assert 9
:size-assert #x4
@@ -8805,7 +8807,7 @@
(text-ids-seen bit-array :offset-assert 112)
(level-opened uint8 32 :offset-assert 116)
(hint-control (array level-hint-control) :offset-assert 148)
(task-hint-control array :offset-assert 152)
(task-hint-control (array task-hint-control-group) :offset-assert 152)
(total-deaths int32 :offset-assert 156)
(continue-deaths int32 :offset-assert 160)
(fuel-cell-deaths int32 :offset-assert 164)
@@ -9013,7 +9015,8 @@
(deftype instance (drawable)
((bucket-index uint16 :offset 6)
(origin matrix4h :inline :offset-assert 32)
(unknown uint32 :offset 8) ; TODO - from default-menu
(origin matrix4h :inline :offset-assert 32) ; TODO - this can also be a float, default-menu::lambda_62
(wind-index uint16 :offset 62)
)
:method-count-assert 18
@@ -10917,6 +10920,7 @@
(deftype control-info (collide-shape-moving)
(
(some-quaternion quaternion :offset 496)
(unknown-vector00 vector :inline :offset 576)
(unknown-surface surface :offset 660)
(unknown-symbol symbol :offset 664)
@@ -15053,7 +15057,7 @@
(define-extern internal-draw-debug-text-3d (function bucket-id string vector rgba vector2h pointer))
(define-extern get-debug-line (function debug-line))
(define-extern internal-draw-debug-line (function bucket-id vector vector rgba symbol rgba object))
(define-extern draw-string (function string dma-buffer int))
(define-extern draw-string (function string dma-buffer font-context int))
(define-extern transform-float-point (function vector vector vector))
(define-extern add-debug-point (function symbol bucket-id vector symbol)) ;; unused
(define-extern add-debug-outline-triangle (function symbol bucket-id vector vector vector rgba symbol))
@@ -15656,8 +15660,8 @@
;; - Functions
(define-extern get-string-length function)
(define-extern draw-string-adv function)
(define-extern get-string-length (function string font-context float))
(define-extern draw-string-adv (function string dma-buffer font-context none)) ;; TODO - ret value unconfirmed!
;; - Unknowns
@@ -16340,9 +16344,6 @@
(define-extern *kernel-boot-message* symbol)
(define-extern *level-load-list* pair)
;; - Unknowns
(define-extern *spawn-actors* symbol)
(define-extern *default-continue* continue-point)
@@ -16488,7 +16489,7 @@
;; - Functions
(define-extern auto-save-command function)
(define-extern auto-save-command (function symbol int int process-tree none)) ;; TODO - not confirmed
(define-extern auto-save-init-by-other function)
(define-extern progress-allowed? (function symbol))
(define-extern print-game-text (function string font-context symbol int int float)) ; TODO decomp error, this seems correct though
@@ -16955,7 +16956,7 @@
(define-extern update-sky-tng-data function)
(define-extern time-of-day-update function)
(define-extern start-time-of-day (function int))
(define-extern time-of-day-setup function)
(define-extern time-of-day-setup (function symbol int none)) ;; not confirmed
(define-extern set-time-of-day function)
(define-extern init-time-of-day-context function)
(define-extern update-time-of-day function)
@@ -17757,9 +17758,12 @@
(define-extern target-cam-pos function)
(define-extern cam-master-init function)
;; - Symbols
(define-extern cam-free-floating state)
;; - Unknowns
;;(define-extern cam-free-floating object) ;; unknown type
;;(define-extern cam-master-active object) ;; unknown type
;;(define-extern list-keeper-active object) ;; unknown type
;;(define-extern cam-fixed object) ;; unknown type
@@ -18349,7 +18353,7 @@
(define-extern cam-debug-add-coll-tri function)
(define-extern debug-euler function)
(define-extern bike-cam-limit function)
(define-extern external-cam-reset! function)
(define-extern external-cam-reset! (function none)) ;; TODO - unconfirmed
;; - Unknowns
@@ -18440,15 +18444,15 @@
;; - Functions
(define-extern find-hint-control-index function)
(define-extern start-hint-timer function)
(define-extern increment-success-for-hint function)
(define-extern can-hint-be-played? function)
(define-extern update-task-hints function)
(define-extern find-hint-control-index (function level-hint-control int))
(define-extern start-hint-timer (function level-hint-control none))
(define-extern increment-success-for-hint (function level-hint-control none))
(define-extern can-hint-be-played? (function int symbol))
(define-extern update-task-hints (function none))
;; - Unknowns
;; - Symbols
;;(define-extern *hint-semaphore* object) ;; unknown type
(define-extern *hint-semaphore* (pointer process-tree)) ;; likely a level-hint process
;; ----------------------
@@ -18475,7 +18479,7 @@
(define-extern level-hint-init-by-other function)
(define-extern voicebox-spawn function)
(define-extern hide-bottom-hud function)
(define-extern ambient-hint-init-by-other function)
(define-extern ambient-hint-init-by-other (function none))
(define-extern level-hint-process-cmd function)
(define-extern task-known? (function game-task symbol))
(define-extern can-grab-display? function)
@@ -19158,178 +19162,167 @@
;; - Types
; (deftype debug-menu-context (basic)
; ((is-active basic :offset-assert 4)
; (sel-length int32 :offset-assert 8)
; (sel-menu UNKNOWN 8 :offset-assert 12)
; (root-menu basic :offset-assert 44)
; (joypad-func basic :offset-assert 48)
; (joypad-item basic :offset-assert 52)
; (font basic :offset-assert 56)
; (is-hidden basic :offset-assert 60)
; )
; :method-count-assert 9
; :size-assert #x40
; :flag-assert #x900000040
; )
(declare-type debug-menu basic)
(deftype debug-menu-context (basic)
((is-active symbol :offset-assert 4)
(sel-length int32 :offset-assert 8)
(sel-menu debug-menu 8 :offset-assert 12)
(root-menu debug-menu :offset-assert 44)
(joypad-func (function basic none) :offset-assert 48)
(joypad-item basic :offset-assert 52) ;; is this more specific?
(font font-context :offset-assert 56)
(is-hidden symbol :offset-assert 60)
)
:method-count-assert 9
:size-assert #x40
:flag-assert #x900000040
(:methods
(new (symbol type) _type_ 0))
)
; (deftype debug-menu-node (basic)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; )
; :method-count-assert 9
; :size-assert #x14
; :flag-assert #x900000014
; )
(declare-type debug-menu basic)
(deftype debug-menu-node (basic)
((name string :offset-assert 4)
(parent debug-menu :offset-assert 8)
(refresh-delay int32 :offset-assert 12)
(refresh-ctr int32 :offset-assert 16)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
; (deftype debug-menu (debug-menu-node)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; (context basic :offset-assert 20)
; (selected-item basic :offset-assert 24)
; (pix-width int32 :offset-assert 28)
; (pix-height int32 :offset-assert 32)
; (items basic :offset-assert 36)
; )
; :method-count-assert 9
; :size-assert #x28
; :flag-assert #x900000028
; )
(declare-type debug-menu-item basic)
(deftype debug-menu (debug-menu-node)
((context debug-menu-context :offset-assert 20)
(selected-item debug-menu-item :offset-assert 24)
(pix-width int32 :offset-assert 28)
(pix-height int32 :offset-assert 32)
(items pair :offset-assert 36) ; list of debug-menu-item
)
:method-count-assert 9
:size-assert #x28
:flag-assert #x900000028
(:methods
(new (symbol type debug-menu-context string) _type_ 0))
)
; (deftype debug-menu-item (debug-menu-node)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; (id int32 :offset-assert 20)
; )
; :method-count-assert 9
; :size-assert #x18
; :flag-assert #x900000018
; )
(deftype debug-menu-item (debug-menu-node)
((id int32 :offset-assert 20)
)
:method-count-assert 9
:size-assert #x18
:flag-assert #x900000018
)
; (deftype debug-menu-item-submenu (debug-menu-item)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; (id int32 :offset-assert 20)
; (submenu basic :offset-assert 24)
; )
; :method-count-assert 9
; :size-assert #x1c
; :flag-assert #x90000001c
; )
(deftype debug-menu-item-submenu (debug-menu-item)
((submenu debug-menu :offset-assert 24)
)
:method-count-assert 9
:size-assert #x1c
:flag-assert #x90000001c
(:methods
(new (symbol type string debug-menu) _type_ 0))
)
; (deftype debug-menu-item-function (debug-menu-item)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; (id int32 :offset-assert 20)
; (activate-func basic :offset-assert 24)
; (hilite-timer int8 :offset-assert 28)
; )
; :method-count-assert 9
; :size-assert #x1d
; :flag-assert #x90000001d
; )
(deftype debug-menu-item-function (debug-menu-item)
((activate-func (function int int) :offset-assert 24) ;; func is kinda a guess, might be 2 ints
(hilite-timer int8 :offset-assert 28)
)
:method-count-assert 9
:size-assert #x1d
:flag-assert #x90000001d
(:methods
(new (symbol type string int function) _type_ 0))
)
; (deftype debug-menu-item-flag (debug-menu-item)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; (id int32 :offset-assert 20)
; (activate-func basic :offset-assert 24)
; (is-on basic :offset-assert 28)
; )
; :method-count-assert 9
; :size-assert #x20
; :flag-assert #x900000020
; )
(deftype debug-menu-item-flag (debug-menu-item)
((activate-func (function int int symbol) :offset-assert 24) ;; func is kinda a guess
(is-on symbol :offset-assert 28)
)
:method-count-assert 9
:size-assert #x20
:flag-assert #x900000020
(:methods
(new (symbol type string symbol function) _type_ 0))
)
; (deftype debug-menu-item-var (debug-menu-item)
; ((name basic :offset-assert 4)
; (parent basic :offset-assert 8)
; (refresh-delay int32 :offset-assert 12)
; (refresh-ctr int32 :offset-assert 16)
; (id int32 :offset-assert 20)
; (display-str basic :offset-assert 24)
; (grabbed-joypad-p basic :offset-assert 28)
; (float-p basic :offset-assert 32)
; (range-p basic :offset-assert 36)
; (show-len int32 :offset-assert 40)
; (inc-delay int32 :offset-assert 44)
; (inc-delay-ctr int32 :offset-assert 48)
; (step-delay-ctr int32 :offset-assert 52)
; (inc-dir int32 :offset-assert 56)
; (fval float :offset-assert 60)
; (fundo-val float :offset-assert 64)
; (frange-min float :offset-assert 68)
; (frange-max float :offset-assert 72)
; (fstart-inc float :offset-assert 76)
; (fstep float :offset-assert 80)
; (fprecision int32 :offset-assert 84)
; (factivate-func basic :offset-assert 88)
; (ival int32 :offset-assert 60)
; (iundo-val int32 :offset-assert 64)
; (irange-min int32 :offset-assert 68)
; (irange-max int32 :offset-assert 72)
; (istart-inc int32 :offset-assert 76)
; (istep int32 :offset-assert 80)
; (ihex-p basic :offset-assert 92)
; (iactivate-func basic :offset-assert 88)
; (ifloat-p basic :offset-assert 96)
; )
; :method-count-assert 9
; :size-assert #x64
; :flag-assert #x900000064
; )
(deftype debug-menu-item-var (debug-menu-item)
((display-str string :offset-assert 24)
(grabbed-joypad-p symbol :offset-assert 28)
(float-p symbol :offset-assert 32)
(range-p symbol :offset-assert 36)
(show-len int32 :offset-assert 40)
(inc-delay int32 :offset-assert 44)
(inc-delay-ctr int32 :offset-assert 48)
(step-delay-ctr int32 :offset-assert 52)
(inc-dir int32 :offset-assert 56)
(fval float :offset-assert 60)
(fundo-val float :offset-assert 64)
(frange-min float :offset-assert 68)
(frange-max float :offset-assert 72)
(fstart-inc float :offset-assert 76)
(fstep float :offset-assert 80)
(fprecision int32 :offset-assert 84)
; (function int (the id) int (some constant) <int/float> <int/float> (fval or ival)x2 <int/float>)
(factivate-func function :offset-assert 88)
(ival int32 :offset 60)
(iundo-val int32 :offset 64)
(irange-min int32 :offset 68)
(irange-max int32 :offset 72)
(istart-inc int32 :offset 76)
(istep int32 :offset 80)
(ihex-p symbol :offset-assert 92)
; (function int (the id) int (some constant) <int/float> <int/float> (fval or ival)x2 <int/float>)
(iactivate-func function :offset 88)
(ifloat-p symbol :offset-assert 96)
)
:method-count-assert 9
:size-assert #x64
:flag-assert #x900000064
(:methods
(new (symbol type string int int) _type_ 0))
)
;; - Functions
(define-extern debug-menus-active function)
(define-extern debug-menus-default-joypad-func function)
(define-extern debug-menu-context-render function)
(define-extern debug-menu-context-close-submenu function)
(define-extern debug-menu-context-activate-selection function)
(define-extern debug-menu-context-select-new-item function)
(define-extern debug-menu-item-send-msg function)
(define-extern debug-menu-send-msg function)
(define-extern debug-menu-context-send-msg function)
(define-extern debug-menu-item-submenu-msg function)
(define-extern debug-menu-item-function-msg function)
(define-extern debug-menu-item-flag-msg function)
(define-extern debug-menu-item-var-msg function)
(define-extern debug-menu-context-release-joypad function)
(define-extern debug-menu-context-grab-joypad function)
(define-extern debug-menu-item-var-joypad-handler function)
(define-extern debug-menu-item-var-update-display-str function)
(define-extern debug-menu-context-open-submenu function)
(define-extern debug-menu-context-select-next-or-prev-item function)
(define-extern debug-menu-render function)
(define-extern debug-menu-item-render function)
(define-extern debug-menu-item-submenu-render function)
(define-extern debug-menu-item-function-render function)
(define-extern debug-menu-item-flag-render function)
(define-extern debug-menu-item-var-render function)
(define-extern debug-menu-make-from-template function)
(define-extern debug-menu-append-item function)
(define-extern debug-menu-context-set-root-menu function)
(define-extern debug-menu-func-decode function)
(define-extern debug-menu-item-var-make-int function)
(define-extern debug-menu-item-var-make-float function)
(define-extern debug-menu-rebuild function)
(define-extern debug-menu-context-default-selection function)
(define-extern debug-menu-item-get-max-width function)
(define-extern debug-menu-remove-all-items function)
(define-extern debug-menu-find-from-template function)
(define-extern debug-menus-handler function)
(define-extern debug-menus-active (function debug-menu-context debug-menu-context))
(define-extern debug-menus-default-joypad-func (function debug-menu-context debug-menu-context))
(define-extern debug-menu-context-render (function debug-menu-context debug-menu-context))
(define-extern debug-menu-context-close-submenu (function debug-menu-context debug-menu-context))
(define-extern debug-menu-context-activate-selection (function debug-menu-context debug-menu-context))
(define-extern debug-menu-context-select-new-item (function debug-menu-context int debug-menu-context))
(define-extern debug-menu-item-send-msg (function debug-menu-item int debug-menu-item))
(define-extern debug-menu-send-msg (function debug-menu int symbol debug-menu))
(define-extern debug-menu-context-send-msg (function debug-menu-context int int debug-menu-context))
(define-extern debug-menu-item-submenu-msg (function debug-menu-item-submenu int debug-menu-item-submenu))
(define-extern debug-menu-item-function-msg (function debug-menu-item-function symbol debug-menu-item-function))
(define-extern debug-menu-item-flag-msg (function debug-menu-item-flag int debug-menu-item-flag))
(define-extern debug-menu-item-var-msg (function debug-menu-item-var int debug-menu-item-var))
(define-extern debug-menu-context-release-joypad (function debug-menu-context symbol)) ;; this is called with a second arg in places, but definitely not used!
(define-extern debug-menu-context-grab-joypad (function debug-menu-context basic function symbol))
(define-extern debug-menu-item-var-joypad-handler (function debug-menu-item-var debug-menu-item-var))
(define-extern debug-menu-item-var-update-display-str (function debug-menu-item-var debug-menu-item-var))
(define-extern debug-menu-context-open-submenu (function debug-menu-context debug-menu basic)) ;; can also return string error messages
(define-extern debug-menu-context-select-next-or-prev-item (function debug-menu-context int debug-menu-context))
(define-extern debug-menu-render (function debug-menu int int int int debug-menu))
(define-extern debug-menu-item-render (function debug-menu-item int int int symbol debug-menu-item))
(define-extern debug-menu-item-submenu-render (function debug-menu-item-submenu int int int symbol debug-menu-item-submenu))
(define-extern debug-menu-item-function-render (function debug-menu-item-function int int int symbol debug-menu-item-function))
(define-extern debug-menu-item-flag-render (function debug-menu-item-flag int int int symbol debug-menu-item-flag))
(define-extern debug-menu-item-var-render (function debug-menu-item-var int int int symbol debug-menu-item-var))
(define-extern debug-menu-make-from-template (function debug-menu-context pair debug-menu-node))
(define-extern debug-menu-append-item (function debug-menu debug-menu-item debug-menu-item))
(define-extern debug-menu-context-set-root-menu (function debug-menu-context debug-menu debug-menu-context))
(define-extern debug-menu-func-decode (function object function))
(define-extern debug-menu-item-var-make-int (function debug-menu-item-var (function int int int int int) int symbol int int symbol debug-menu-item-var))
(define-extern debug-menu-item-var-make-float (function debug-menu-item-var (function int int float float int) float symbol float float symbol debug-menu-item-var))
(define-extern debug-menu-rebuild (function debug-menu debug-menu))
(define-extern debug-menu-context-default-selection (function debug-menu-context symbol debug-menu-context))
(define-extern debug-menu-item-get-max-width (function debug-menu-item debug-menu int))
(define-extern debug-menu-remove-all-items (function debug-menu debug-menu))
(define-extern debug-menu-find-from-template (function debug-menu-context pair debug-menu))
(define-extern debug-menus-handler (function debug-menu-context debug-menu-context))
;; ----------------------
@@ -19350,11 +19343,11 @@
(define-extern real-main-draw-hook function)
(define-extern error-sphere function)
(define-extern draw-instance-info function)
(define-extern find-instance-by-name function)
(define-extern find-instance-by-name (function string instance)) ;; TODO - ret not verified
(define-extern prototype-bucket-type function)
(define-extern guard-band-cull function)
(define-extern find-instance-by-index function)
(define-extern prototype-bucket-recalc-fields function)
(define-extern prototype-bucket-recalc-fields (function instance none)) ;; TODO - ret not confirmed
(define-extern dma-add-process-drawable-hud function)
(define-extern foreground-engine-execute function)
(define-extern main-debug-hook function)
@@ -19369,6 +19362,10 @@
(define-extern cave-cam-restore function)
(define-extern paals-cam-restore function)
;; - Symbols
(define-extern *edit-instance* string)
;; - Unknowns
;;(define-extern syncv object) ;; unknown type
@@ -19376,7 +19373,6 @@
;;(define-extern *surrogate-dma-buffer* object) ;; unknown type
;;(define-extern *screen-shot* object) ;; unknown type
;;(define-extern *hud-lights* object) ;; unknown type
;;(define-extern *edit-instance* object) ;; unknown type
;;(define-extern *instance-mem-usage* object) ;; unknown type
;;(define-extern *add-sphere* object) ;; unknown type
;;(define-extern *generic-effect-mode* object) ;; unknown type
@@ -19454,7 +19450,7 @@
(define-extern entity-by-type (function type entity-actor))
(define-extern scf-get-territory (function int))
(define-extern pause-allowed? (function symbol))
(define-extern menu-respond-to-pause (function int))
(define-extern menu-respond-to-pause (function symbol))
(define-extern hide-progress-screen (function int))
(define-extern set-letterbox-frames (function uint uint))
(define-extern letterbox (function none))
@@ -21119,7 +21115,7 @@
;;(define-extern anim-tester-process object) ;; unknown type
;;(define-extern anim-test-field-highlight-lw object) ;; unknown type
;;(define-extern *DISP_LIST-bank* object) ;; unknown type
;;(define-extern *debug-menu-context* object) ;; unknown type
(define-extern *debug-menu-context* debug-menu-context)
;; ----------------------
@@ -21207,79 +21203,79 @@
;; - Functions
(define-extern build-continue-menu function)
(define-extern debug-menu-make-camera-menu function)
(define-extern debug-menu-make-shader-menu function)
(define-extern debug-menu-make-instance-menu function)
(define-extern debug-menu-make-task-menu function)
(define-extern dm-current-continue function)
(define-extern dm-task-get-money function)
(define-extern dm-levitator-ready function)
(define-extern dm-lavabike-ready function)
(define-extern dm-give-all-cells function)
(define-extern debug-menu-make-task-unknown-menu function)
(define-extern debug-menu-make-task-need-hint-menu function)
(define-extern debug-menu-make-task-need-introduction-menu function)
(define-extern debug-menu-make-task-need-reminder-a-menu function)
(define-extern debug-menu-make-task-need-reminder-menu function)
(define-extern debug-menu-make-task-need-reward-speech-menu function)
(define-extern debug-menu-make-task-need-resolution-menu function)
(define-extern dm-give-cell function)
(define-extern build-instance-list function)
(define-extern dm-edit-instance-toggle-pick-func function)
(define-extern dm-boolean-toggle-pick-func function)
(define-extern build-shader-list function)
(define-extern all-texture-tweak-adjust function)
(define-extern debug-menu-make-camera-mode-menu function)
(define-extern dm-cam-externalize function)
(define-extern dm-cam-render-float function)
(define-extern dm-cam-settings-func function)
(define-extern dm-cam-settings-func-int function)
(define-extern debug-create-cam-restore function)
(define-extern dm-cam-mode-func function)
(define-extern dm-instance-pick-func function)
(define-extern dm-enable-instance-func function)
(define-extern dm-shader-pick-func function)
(define-extern debug-menu-node<? function)
(define-extern dm-subdiv-float function)
(define-extern dm-subdiv-int function)
(define-extern dm-setting-language function)
(define-extern dm-subdiv-draw-func function)
(define-extern dm-ocean-subdiv-draw-func function)
(define-extern dm-time-of-day-func function)
(define-extern dm-time-of-day-func2 function)
(define-extern dm-time-of-day-pick-func function)
(define-extern dm-actor-marks-pick-func function)
(define-extern dm-compact-actor-pick-func function)
(define-extern dm-actor-vis-pick-func function)
(define-extern dm-game-mode-pick-func function)
(define-extern dm-vu1-user-toggle-pick-func function)
(define-extern dm-vu1-user-set-pick-func function)
(define-extern dm-texture-user-toggle-pick-func function)
(define-extern dm-texture-user-set-pick-func function)
(define-extern dm-strip-lines-toggle-pick-func function)
(define-extern dm-strip-lines-set-pick-func function)
(define-extern dm-task-unknown function)
(define-extern dm-task-hint function)
(define-extern dm-task-introduction function)
(define-extern dm-task-reminder-a function)
(define-extern dm-task-reminder function)
(define-extern dm-task-reward-speech function)
(define-extern dm-task-resolution function)
(define-extern dm-anim-tester-flag-func function)
(define-extern dm-anim-tester-func function)
(define-extern debug-menu-context-make-default-menus function)
(define-extern popup-menu-context-make-default-menus function)
(define-extern build-continue-menu (function debug-menu-context debug-menu-context)) ;; TODO - this is so simple...just iterating through a list of symbols...still confused though...
(define-extern debug-menu-make-camera-menu (function debug-menu-context debug-menu-item-submenu))
(define-extern debug-menu-make-shader-menu (function debug-menu-context debug-menu-item-submenu))
(define-extern debug-menu-make-instance-menu (function debug-menu-context debug-menu-item-submenu))
(define-extern debug-menu-make-task-menu (function debug-menu-context debug-menu-item-submenu))
(define-extern dm-current-continue (function function int object)) ;; TODO - game-info::17
(define-extern dm-task-get-money (function int int symbol))
(define-extern dm-levitator-ready (function int int symbol))
(define-extern dm-lavabike-ready (function int int symbol))
(define-extern dm-give-all-cells (function int int symbol))
(define-extern debug-menu-make-task-unknown-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern debug-menu-make-task-need-hint-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern debug-menu-make-task-need-introduction-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern debug-menu-make-task-need-reminder-a-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern debug-menu-make-task-need-reminder-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern debug-menu-make-task-need-reward-speech-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern debug-menu-make-task-need-resolution-menu (function debug-menu-context debug-menu-context debug-menu-item))
(define-extern dm-give-cell (function int none))
(define-extern build-instance-list (function none)) ;; TODO - drawable types aren't complete
(define-extern dm-edit-instance-toggle-pick-func (function int int symbol))
(define-extern dm-boolean-toggle-pick-func (function function int object)) ;; TODO
(define-extern build-shader-list (function object))
(define-extern all-texture-tweak-adjust (function texture-page-dir float object)) ;; TODO - texture related types
(define-extern debug-menu-make-camera-mode-menu (function int int object)) ;; TODO - depends on camera stuff yet merged
(define-extern dm-cam-externalize (function symbol int symbol))
(define-extern dm-cam-render-float (function int int float float float))
(define-extern dm-cam-settings-func (function int int symbol))
(define-extern dm-cam-settings-func-int (function int int debug-menu debug-menu debug-menu))
(define-extern debug-create-cam-restore (function none)) ;; TODO - level-group type isn't complete
(define-extern dm-cam-mode-func (function uint int object))
(define-extern dm-instance-pick-func (function string int basic))
(define-extern dm-enable-instance-func (function string int symbol))
(define-extern dm-shader-pick-func (function int int object)) ;; TODO - more texture stuff...
(define-extern debug-menu-node<? (function debug-menu debug-menu symbol))
(define-extern dm-subdiv-float (function symbol int float float float))
(define-extern dm-subdiv-int (function function int object)) ;; TODO - dependant on anim-tester
(define-extern dm-setting-language (function function int symbol))
(define-extern dm-subdiv-draw-func (function int int symbol))
(define-extern dm-ocean-subdiv-draw-func (function int int symbol))
(define-extern dm-time-of-day-func (function int int symbol))
(define-extern dm-time-of-day-func2 (function function int symbol)) ;; TODO
(define-extern dm-time-of-day-pick-func (function symbol int none)) ;; TODO - confirm time-of-day::time-of-day-setup
(define-extern dm-actor-marks-pick-func (function symbol int symbol))
(define-extern dm-compact-actor-pick-func (function int int object)) ;; TODO - what is *compact-actors*
(define-extern dm-actor-vis-pick-func (function symbol int symbol))
(define-extern dm-game-mode-pick-func (function symbol int symbol))
(define-extern dm-vu1-user-toggle-pick-func (function int int symbol))
(define-extern dm-vu1-user-set-pick-func (function int int symbol))
(define-extern dm-texture-user-toggle-pick-func (function int int symbol))
(define-extern dm-texture-user-set-pick-func (function int int symbol))
(define-extern dm-strip-lines-toggle-pick-func (function int int symbol))
(define-extern dm-strip-lines-set-pick-func (function int int symbol))
(define-extern dm-task-unknown (function int int symbol))
(define-extern dm-task-hint (function int int symbol))
(define-extern dm-task-introduction (function int int symbol))
(define-extern dm-task-reminder-a (function int int symbol))
(define-extern dm-task-reminder (function int int symbol))
(define-extern dm-task-reward-speech (function int int symbol))
(define-extern dm-task-resolution (function int int symbol))
(define-extern dm-anim-tester-flag-func (function int int none)) ;; TODO - *anim-tester*
(define-extern dm-anim-tester-func (function int none)) ;; TODO - *anim-tester*
(define-extern debug-menu-context-make-default-menus (function debug-menu-context debug-menu-context))
(define-extern popup-menu-context-make-default-menus (function debug-menu-context debug-menu-context))
;; - Unknowns
;;(define-extern *popup-menu-context* object) ;; unknown type
;;(define-extern *instance-shrub-menu* object) ;; unknown type
;;(define-extern *instance-tie-menu* object) ;; unknown type
;;(define-extern *enable-instance-tie-menu* object) ;; unknown type
;;(define-extern *shader-pick-menu* object) ;; unknown type
(define-extern *popup-menu-context* debug-menu-context) ;; unknown type
(define-extern *instance-shrub-menu* debug-menu) ;; unknown type
(define-extern *instance-tie-menu* debug-menu) ;; unknown type
(define-extern *enable-instance-tie-menu* debug-menu) ;; unknown type
(define-extern *shader-pick-menu* debug-menu) ;; unknown type
;;(define-extern cam-robotboss object) ;; unknown type
;;(define-extern *dm-cam-mode-interpolation* object) ;; unknown type
(define-extern *dm-cam-mode-interpolation* debug-menu) ;; unknown type
;; ----------------------
@@ -505,8 +505,67 @@
[496, "(function task-control symbol)"]
],
"game-info": [
[17, "(function symbol symbol continue-point symbol none)"]
"game-info": [[17, "(function symbol symbol continue-point symbol none)"]],
"default-menu": [
[3, "(function none)"],
[4, "(function int int symbol)"], // TODO - first arg is ignored - i think there's a decomp bug here
[5, "(function int int symbol)"], // TODO - first arg is ignored
[6, "(function int int target)"], // TODO - first arg is ignored
[8, "(function int)"],
[9, "(function continue-point)"],
[10, "(function none)"],
[11, "(function object)"],
[12, "(function object)"],
[13, "(function object)"],
[14, "(function quaternion)"],
[15, "(function quaternion)"],
[16, "(function int int basic)"], // TODO - first arg is ignored
[17, "(function int)"],
[18, "(function int)"],
[19, "(function int)"],
[20, "(function none)"],
[21, "(function int int basic)"], // TODO - first arg is ignored
[22, "(function int int basic)"], // TODO - first arg is ignored
[23, "(function int int basic)"], // TODO - first arg is ignored
[24, "(function int int float float)"], // TODO - first arg is ignored
[25, "(function int int float float)"], // TODO - first arg is ignored
[26, "(function int int float float)"], // TODO - first arg is ignored
[27, "(function int int target)"], // TODO - first arg is ignored
[28, "(function none)"],
[29, "(function none)"],
[30, "(function none)"],
[31, "(function none)"],
[32, "(function none)"],
[33, "(function none)"],
[34, "(function int)"],
[35, "(function int)"],
[60, "(function debug-menu int float float object)"], // TODO - instance type blocking this one, not 100% sure about the debug-menu, but it has a string at offset 0
[61, "(function debug-menu int float float object)"], // TODO - instance type blocking this one, not 100% sure about the debug-menu, but it has a string at offset 0
[63, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[64, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[65, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[66, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[67, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[68, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[69, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[70, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[71, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[72, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[73, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[74, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[75, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[76, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[77, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[78, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[79, "(function int int int basic object)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0) and a3 is a default return value it seems
[80, "(function object)"],
[81, "(function object)"],
[82, "(function int int float float none)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0)
[84, "(function int int none)"], // TODO - i don't know the first (is a basic/struct with an int32 at offset 0)
[88, "(function debug-menu debug-menu symbol)"], // not 100% sure about the debug-menu, but it has a string at offset 0
[89, "(function debug-menu debug-menu symbol)"], // not 100% sure about the debug-menu, but it has a string at offset 0
[90, "(function debug-menu debug-menu symbol)"] // not 100% sure about the debug-menu, but it has a string at offset 0
],
"placeholder-do-not-add-below": []
@@ -15,7 +15,7 @@
// this limits the number of cases in a cond. The first argument is the name of the function.
// the second argument is the name of the first condition in the cond. Use print_cfg to find it out.
// The third argument is the number of cases. If you set it too small it may fail to build the CFG.
"cond_with_else_max_lengths":[
"cond_with_else_max_lengths": [
["(method 20 res-lump)", "b0", 2],
["(method 11 res-lump)", "b0", 1],
["(method 12 res-lump)", "b0", 1]
@@ -472,7 +472,17 @@
"update-sound-banks",
"(method 16 level-group)",
"bg",
"(method 18 game-info)"
"(method 18 game-info)",
"debug-menu-context-default-selection",
"debug-menu-rebuild",
"debug-menu-func-decode",
"debug-menu-make-from-template",
"debug-menu-render",
"debug-menu-context-select-next-or-prev-item",
"debug-menu-context-select-new-item",
"debug-menu-send-msg",
"debug-menu-find-from-template",
"build-continue-menu"
],
// If format is used with the wrong number of arguments,
@@ -480,8 +490,8 @@
// that they used the correct number. This will override the decompiler's
// automatic detection.
"bad_format_strings": {
"ERROR: dma tag has data in reserved bits ~X~%":0,
"#<surface f0:~m f1:~f tf+:~f tf-:~f sf:~f tvv:~m":5,
"ERROR<GMJ>: value of symbol ~A in task-controls is not a task-control~%":0
"ERROR: dma tag has data in reserved bits ~X~%": 0,
"#<surface f0:~m f1:~f tf+:~f tf-:~f sf:~f tvv:~m": 5,
"ERROR<GMJ>: value of symbol ~A in task-controls is not a task-control~%": 0
}
}
@@ -1130,8 +1130,25 @@
["L195", "(array game-option)", true]
],
"tfrag-work": [
["L1", "tfrag-work", true]
"tfrag-work": [["L1", "tfrag-work", true]],
"menu": [["L334", "float", true]],
"default-menu": [
["L6251", "float", true],
["L6252", "float", true],
["L6253", "float", true],
["L6254", "float", true],
["L6256", "float", true],
["L6257", "float", true],
["L6264", "float", true],
["L6267", "float", true],
["L6268", "(array int)", true, 1] // printed as a float
],
"hint-control": [
["L45", "(array task-hint-control-group)", true],
["L100", "(array level-hint-control)", true]
],
// please do not add things after this entry! git is dumb.
@@ -396,6 +396,28 @@
"draw-ocean-transition": [[16, "sphere"]],
"dm-cam-mode-func": [[16, "event-message-block"]],
"dm-cam-settings-func": [[16, "event-message-block"]],
"dm-cam-render-float": [[16, "event-message-block"]],
"debug-create-cam-restore": [[16, "euler-angles"]],
"dm-task-resolution": [[16, "event-message-block"]],
"dm-task-get-money": [[16, "event-message-block"]],
"dm-give-all-cells": [[16, "event-message-block"]],
"dm-give-cell": [[16, "event-message-block"]],
"(anon-function 13 default-menu)": [[16, "event-message-block"]],
"(anon-function 12 default-menu)": [[16, "event-message-block"]],
"(anon-function 11 default-menu)": [[16, "event-message-block"]],
"(method 22 level)": [[16, "event-message-block"]],
"(method 9 level)": [[16, "event-message-block"]],
"(method 10 load-state)": [[16, "event-message-block"]],
@@ -408,8 +430,6 @@
[160, "vector"]
],
"draw-ocean-transition": [[16, "sphere"]],
"(anon-function 494 task-control)": [[16, "event-message-block"]],
"(anon-function 493 task-control)": [[16, "event-message-block"]],
"(anon-function 480 task-control)": [[16, "event-message-block"]],
@@ -770,7 +770,7 @@
[[0, 99999], "s6", "process-drawable"]
],
//"bg": [[[25, 52], "a0", "string"]],
"(anon-function 29 process-drawable)": [[[0, 999], "s6", "process-drawable"]],
"ja-done?": [[[0, 999], "s6", "process-drawable"]],
"ja-min?": [[[0, 999], "s6", "process-drawable"]],
@@ -785,7 +785,10 @@
"ja-group-size": [[[0, 999], "s6", "process-drawable"]],
"ja-eval": [[[0, 999], "s6", "process-drawable"]],
"ja-blend-eval": [[[0, 999], "s6", "process-drawable"]],
"ja-post": [[[0, 999], "s6", "process-drawable"], [54, "a1", "process"]],
"ja-post": [
[[0, 999], "s6", "process-drawable"],
[54, "a1", "process"]
],
"transform-post": [[[0, 999], "s6", "process-drawable"]],
"rider-trans": [[[0, 999], "s6", "process-drawable"]],
"rider-post": [[[0, 999], "s6", "process-drawable"]],
@@ -804,9 +807,7 @@
[[157, 162], "a1", "dma-packet"]
],
"(top-level-login task-control)" :[
[165, "v1", "symbol"]
],
"(top-level-login task-control)": [[165, "v1", "symbol"]],
"task-control-reset": [
[[7, 13], "a0", "task-control"],
@@ -890,11 +891,15 @@
[10, "s3", "continue-point"]
],
"(method 9 game-info)": [
[[270, 286], "s2", "(function cpu-thread function object object object object pointer)"]
],
"(method 9 game-info)": [
[
[270, 286],
"s2",
"(function cpu-thread function object object object object pointer)"
]
],
"(method 25 game-info)" :[
"(method 25 game-info)": [
[4, "v1", "game-save-tag"],
[53, "v1", "pointer"],
[[7, 53], "v1", "game-save-tag"],
@@ -946,6 +951,72 @@
[[203, 210], "s4", "game-save-tag"]
],
"debug-menu-item-var-update-display-str": [
[[44, 49], "v1", "int"],
[[61, 69], "v1", "int"]
],
"debug-menu-item-get-max-width": [[[18, 27], "a0", "debug-menu-item-var"]],
"debug-menu-send-msg": [
[[3, 14], "s2", "debug-menu-item"],
[[14, 21], "s2", "debug-menu-item-submenu"]
],
"debug-menu-item-var-joypad-handler": [
[29, "t9", "(function int int float float float)"],
[[39, 42], "a2", "int"],
[[40, 42], "a3", "int"],
[41, "t9", "(function int int int int int)"],
[175, "t9", "(function int int float float float)"],
[200, "t9", "(function int int int int int)"],
[138, "v1", "int"],
[143, "v1", "int"],
[[182, 187], "v1", "int"],
[[182, 187], "a1", "int"],
[[190, 194], "a0", "int"],
[[193, 195], "v1", "int"]
],
"debug-menu-find-from-template": [
[3, "s4", "debug-menu"],
[[4, 8], "s4", "debug-menu-item"],
[[41, 44], "s4", "debug-menu-node"],
[[7, 12], "s5", "debug-menu-item"],
[23, "s5", "debug-menu-item-submenu"]
],
"debug-menu-func-decode": [[[12, 14], "a0", "symbol"]],
"dm-cam-render-float": [[[71, 72], "v0", "float"]],
"build-continue-menu": [[4, "v1", "symbol"]],
"can-hint-be-played?": [
[[25, 28], "a0", "level-hint"] // kinda a guess, but its the only process that makes sense
],
"debug-menu-rebuild": [[[4, 13], "a0", "debug-menu-item"]],
"debug-menu-item-submenu-render": [[[39, 44], "v1", "dma-packet"]],
"debug-menu-item-function-render": [[[46, 51], "v1", "dma-packet"]],
"debug-menu-item-flag-render": [[[44, 49], "v1", "dma-packet"]],
"debug-menu-render": [
[[45, 48], "v1", "dma-packet"],
[[106, 110], "v1", "dma-packet"]
],
"debug-menu-item-var-msg": [
[52, "t9", "(function int int float float float)"],
[64, "t9", "(function int int int int int)"]
],
"debug-menu-item-var-make-int": [
[21, "t9", "(function int int int int int)"]
],
"placeholder-do-not-add-below": []
}
@@ -2209,5 +2209,11 @@
"s2-1":"prog-lev-idx",
"a2-13":"lev-name"
}
},
"debug-menu-func-decode": {
"vars": {
"v0-0": ["ret-val", "symbol"]
}
}
}
@@ -32,6 +32,7 @@
(deftype control-info (collide-shape-moving)
(
(some-quaternion quaternion :offset 496)
(unknown-vector00 vector :inline :offset 576)
(unknown-surface surface :offset 660)
(unknown-symbol symbol :offset 664)
+5 -3
View File
@@ -394,7 +394,7 @@
(s5-0 (-> s3-0 base))
)
(let
((v1-9
((a2-2
(new
'stack
'font-context
@@ -410,9 +410,11 @@
)
)
)
(set! (-> v1-9 origin z) (the float (/ (-> s2-0 z) 16)))
(let ((v1-9 a2-2))
(set! (-> v1-9 origin z) (the float (/ (-> s2-0 z) 16)))
)
(draw-string arg1 s3-0 a2-2)
)
(draw-string arg1 s3-0)
(let ((a3-4 (-> s3-0 base)))
(let ((v1-11 (the-as dma-packet (-> s3-0 base))))
(set! (-> v1-11 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -64,7 +64,7 @@
:flag-assert #x10004000a8
(:methods
(dummy-14 () none 14)
(dummy-15 () none 15)
(dummy-15 (_type_) symbol 15)
)
)
+1 -1
View File
@@ -251,7 +251,7 @@
(text-ids-seen bit-array :offset-assert 112)
(level-opened uint8 32 :offset-assert 116)
(hint-control (array level-hint-control) :offset-assert 148)
(task-hint-control array :offset-assert 152)
(task-hint-control (array task-hint-control-group) :offset-assert 152)
(total-deaths int32 :offset-assert 156)
(continue-deaths int32 :offset-assert 160)
(fuel-cell-deaths int32 :offset-assert 164)
+2 -1
View File
@@ -99,7 +99,8 @@
(define *teleport-count* 0)
(define *draw-hook* nothing)
(define *debug-hook* nothing)
(define *menu-hook* nothing)
(declare-type debug-menu-context basic)
(define-extern *menu-hook* (function debug-menu-context))
(define *progress-hook* nothing)
(define *dma-timeout-hook* nothing)
+1 -1
View File
@@ -30,7 +30,7 @@
)
(deftype task-hint-control-group (structure)
((tasks basic :offset-assert 0)
((tasks (array task-hint-control) :offset-assert 0)
)
:method-count-assert 9
:size-assert #x4
+527
View File
@@ -5,3 +5,530 @@
;; name in dgo: hint-control
;; dgos: GAME, ENGINE
(define-extern *hint-semaphore* (pointer process-tree)) ;; likely a level-hint process
;; failed to figure out what this is:
(set!
(-> *game-info* hint-control)
(the-as
(array level-hint-control)
(new
'static
'boxed-array
:type level-hint-control :length 25 :allocated-length 25
(new 'static 'level-hint-control
:id #x917
:num-attempts-before-playing 1
:num-success-before-killing 3
)
(new 'static 'level-hint-control
:id #x90a
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x284
:num-attempts-before-playing 3
:num-success-before-killing 3
)
(new 'static 'level-hint-control
:id #x285
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:id #x251
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:id #x2af
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x239
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x29d
:num-attempts-before-playing 1
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x25b
:num-attempts-before-playing 1
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x2a4
:num-attempts-before-playing 3
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x2aa
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x33a
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x1194
:id #x34b
:num-attempts-before-playing 3
:num-success-before-killing 2
)
(new 'static 'level-hint-control
:delay-before-playing #x4650
:id #x34a
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x34d
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x345
:num-attempts-before-playing 3
:num-success-before-killing 2
)
(new 'static 'level-hint-control
:id #x352
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x2328
:id #x347
:num-attempts-before-playing 3
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:id #x34e
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x444
:num-attempts-before-playing 5
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x438
:num-attempts-before-playing 1
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x433
:num-attempts-before-playing 4
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x70d
:num-attempts-before-playing 1
:num-success-before-killing 2
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x806
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x809
:num-attempts-before-playing 1
:num-success-before-killing 1
)
)
)
)
;; failed to figure out what this is:
(set!
(-> *game-info* task-hint-control)
(the-as
(array task-hint-control-group)
(new
'static
'boxed-array
:type task-hint-control-group :length 16 :allocated-length 16
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 3 :allocated-length 3
(new 'static 'task-hint-control :task #x5c :delay #x2bf20)
(new 'static 'task-hint-control :task #x5d :delay #x57e40)
(new 'static 'task-hint-control :task #x5e :delay #x83d60)
)
)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 3 :allocated-length 3
(new 'static 'task-hint-control :task #x15 :delay #x41eb0)
(new 'static 'task-hint-control :task #x16 :delay #x83d60)
(new 'static 'task-hint-control :task #x13 :delay #xc5c10)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 2 :allocated-length 2
(new 'static 'task-hint-control :task #x6 :delay #x57e40)
(new 'static 'task-hint-control :task #x8 :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 4 :allocated-length 4
(new 'static 'task-hint-control :task #x18 :delay #x57e40)
(new 'static 'task-hint-control :task #x19 :delay #x83d60)
(new 'static 'task-hint-control :task #x1d :delay #xafc80)
(new 'static 'task-hint-control :task #x1e :delay #xdbba0)
)
)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 3 :allocated-length 3
(new 'static 'task-hint-control :task #x33 :delay #x57e40)
(new 'static 'task-hint-control :task #x30 :delay #x83d60)
(new 'static 'task-hint-control :task #x2e :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x26 :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x38 :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x6e :delay #x107ac0)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x4a :delay #x107ac0)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 4 :allocated-length 4
(new 'static 'task-hint-control :task #x42 :delay #x57e40)
(new 'static 'task-hint-control :task #x43 :delay #x83d60)
(new 'static 'task-hint-control :task #x3f :delay #xafc80)
(new 'static 'task-hint-control :task #x40 :delay #xdbba0)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 4 :allocated-length 4
(new 'static 'task-hint-control :task #x50 :delay #x57e40)
(new 'static 'task-hint-control :task #x51 :delay #x83d60)
(new 'static 'task-hint-control :task #x52 :delay #xafc80)
(new 'static 'task-hint-control :task #x54 :delay #xdbba0)
)
)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group)
)
)
)
;; definition for function find-hint-control-index
(defun find-hint-control-index ((arg0 level-hint-control))
(let ((gp-0 -1))
(let ((v1-2 (length (-> *game-info* hint-control))))
(dotimes (a0-2 v1-2)
(when (= (-> *game-info* hint-control a0-2 id) arg0)
(set! gp-0 a0-2)
(set! a0-2 v1-2)
)
)
)
gp-0
)
)
;; definition for function start-hint-timer
;; INFO: Return type mismatch int vs none.
(defun start-hint-timer ((arg0 level-hint-control))
(let ((v1-0 (find-hint-control-index arg0)))
(when
(and
(>= v1-0 0)
(zero? (-> *game-info* hint-control v1-0 start-time))
(!= (-> *game-info* hint-control v1-0 num-attempts-before-playing) 1)
)
(set!
(-> *game-info* hint-control v1-0 start-time)
(-> *display* base-frame-counter)
)
0
)
)
0
(none)
)
;; definition for function increment-success-for-hint
;; INFO: Return type mismatch int vs none.
(defun increment-success-for-hint ((arg0 level-hint-control))
(let ((gp-0 (find-hint-control-index arg0)))
(when (>= gp-0 0)
(set!
(-> *game-info* hint-control gp-0 num-success)
(seekl (-> *game-info* hint-control gp-0 num-success) 127 1)
)
0
)
)
0
(none)
)
;; definition for function can-hint-be-played?
;; WARN: disable def twice: 139. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
(defun can-hint-be-played? ((arg0 int))
(let ((v1-0 (not (str-is-playing?))))
(if (and v1-0 (nonzero? arg0))
(set! v1-0 (not (seen-text? *game-info* (the-as game-text-id arg0))))
)
(when v1-0
(when *hint-semaphore*
(let ((v1-3 *hint-semaphore*))
(set! v1-0 (dummy-15 (the-as level-hint (if v1-3
(-> v1-3 0 self)
)
)
)
)
)
0
)
(when
(and
v1-0
(<
(the-as
int
(- (-> *display* base-frame-counter) (-> *game-info* hint-play-time))
)
30
)
)
(set! v1-0 #f)
0
)
(set!
v1-0
(and
v1-0
(not (-> *setting-control* current talking))
(not (-> *setting-control* current spooling))
(not (-> *setting-control* current hint))
(not (-> *setting-control* current ambient))
(>=
(the-as int (-> *display* base-frame-counter))
(the-as int (-> *game-info* blackout-time))
)
)
)
0
)
(cond
(v1-0
(let ((v1-16 (find-hint-control-index (the-as level-hint-control arg0))))
(cond
((< v1-16 0)
#t
)
(else
(let ((gp-1 (-> *game-info* hint-control v1-16))
(a0-24
(-
(-> *display* base-frame-counter)
(-> *game-info* hint-control v1-16 last-time-called)
)
)
(v1-21 #t)
)
(if
(and
(= (-> gp-1 num-attempts-before-playing) 1)
(< (the-as int a0-24) 30)
)
(set! (-> gp-1 start-time) (+ (-> gp-1 start-time) a0-24))
)
(cond
((and
(!= (-> gp-1 num-attempts-before-playing) 1)
(nonzero? (-> gp-1 last-time-called))
(<
(the-as
int
(- (-> *display* base-frame-counter) (-> gp-1 last-time-called))
)
150
)
)
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
#f
)
(else
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
(when (nonzero? (-> gp-1 delay-before-playing))
(if
(<
(the-as int (-> gp-1 start-time))
(the-as int (-> gp-1 delay-before-playing))
)
(set! v1-21 #f)
)
0
)
(cond
(v1-21
(set! (-> gp-1 num-attempts) (seekl (-> gp-1 num-attempts) 127 1))
(and
(>= (-> gp-1 num-attempts) (-> gp-1 num-attempts-before-playing))
(or
(= (-> gp-1 num-success-before-killing) -1)
(< (-> gp-1 num-success) (-> gp-1 num-success-before-killing))
)
)
)
(else
#f
)
)
)
)
)
)
)
)
)
(else
#f
)
)
)
)
;; definition for function reset-all-hint-controls
;; INFO: Return type mismatch int vs none.
(defun reset-all-hint-controls ()
(let ((v1-2 (length (-> *game-info* hint-control))))
(dotimes (a0-1 v1-2)
(let ((a1-2 (-> *game-info* hint-control a0-1)))
(set! (-> a1-2 start-time) (the-as uint 0))
(set! (-> a1-2 last-time-called) (the-as uint 0))
(set! (-> a1-2 num-attempts) 0)
(set! (-> a1-2 num-success) 0)
)
0
)
)
0
(none)
)
;; TODO - defined in progress-static
(define-extern *level-task-data-remap* (array int32))
;; definition for function update-task-hints
;; INFO: Return type mismatch int vs none.
(defun update-task-hints ()
(when *target*
(let ((a0-0 (+ (-> *target* current-level info index) -1))
(v1-7 (-> *game-info* task-hint-control))
)
(when (and (>= a0-0 0) (< a0-0 (-> *level-task-data-remap* length)))
(let ((a0-3 (-> *level-task-data-remap* a0-0)))
(when (< a0-3 (-> v1-7 length))
(let ((gp-0 (-> v1-7 a0-3 tasks)))
(when (and (!= gp-0 0) (nonzero? (-> gp-0 length)))
(let ((s5-0 (-> *game-info* in-level-time a0-3)))
(dotimes (s4-0 (-> gp-0 length))
(let
((v1-17 (get-task-status (the-as game-task (-> gp-0 s4-0 task)))))
(when
(or
(= v1-17 (task-status need-hint))
(= v1-17 (task-status unknown))
)
(if (< (-> gp-0 s4-0 delay) s5-0)
(close-specific-task!
(the-as game-task (-> gp-0 s4-0 task))
(task-status need-hint)
)
)
)
)
)
)
)
)
)
)
)
)
)
0
(none)
)
+1 -2
View File
@@ -5,7 +5,6 @@
;; name in dgo: font-h
;; dgos: GAME, ENGINE
(deftype char-verts (structure)
((pos vector 4 :inline :offset-assert 0)
(color vector 4 :inline :offset-assert 64)
@@ -663,5 +662,5 @@
)
(defun-extern draw-string string dma-buffer int)
(define-extern draw-string (function string dma-buffer font-context int))
+3
View File
@@ -5,3 +5,6 @@
;; name in dgo: font
;; dgos: GAME, ENGINE
;; TODO - for menu
(define-extern get-string-length (function string font-context float))
(define-extern draw-string-adv (function string dma-buffer font-context none)) ;; TODO - ret value unconfirmed!
+4 -3
View File
@@ -114,9 +114,10 @@
)
(deftype instance (drawable)
((bucket-index uint16 :offset 6)
(origin matrix4h :inline :offset-assert 32)
(wind-index uint16 :offset 62)
((bucket-index uint16 :offset 6)
(unknown uint32 :offset 8) ; TODO - from default-menu
(origin matrix4h :inline :offset-assert 32) ; TODO - this can also be a float, default-menu::lambda_62
(wind-index uint16 :offset 62)
)
:method-count-assert 18
:size-assert #x40
+1
View File
@@ -171,6 +171,7 @@
;; There are actually three levels. level0 and level1 correspond to the actual buffered levels
;; The level-default seems to be a fake level that can possibly be used by renderers that
;; don't belong to any level, for example to render Jak.
(declare-type entity-links structure)
(deftype level-group (basic)
((length int32 :offset-assert 4)
(unknown-level-1 level :offset-assert 8)
+15
View File
@@ -0,0 +1,15 @@
# Windows doesn't have the GNU toolchain by default, making it hard to write Taskfiles that are cross-platform
# This "solves" that
# Ensures it only will delete from the current directory
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--path")
args = parser.parse_args()
from os import path
import shutil
if path.exists("./{}".format(args.path)):
shutil.rmtree("./{}".format(args.path))
@@ -40,7 +40,8 @@
;; definition of type control-info
(deftype control-info (collide-shape-moving)
((unknown-vector00 vector :inline :offset 576)
((some-quaternion quaternion :offset 496)
(unknown-vector00 vector :inline :offset 576)
(unknown-surface surface :offset 660)
(unknown-symbol symbol :offset 664)
(unknown-qword uint128 :offset 1136)
File diff suppressed because it is too large Load Diff
@@ -74,7 +74,7 @@
:flag-assert #x10004000a8
(:methods
(dummy-14 () none 14)
(dummy-15 () none 15)
(dummy-15 (_type_) symbol 15)
)
)
@@ -161,50 +161,50 @@
;; definition of type game-info
(deftype game-info (basic)
((mode symbol :offset-assert 4)
(save-name basic :offset-assert 8)
(life float :offset-assert 12)
(life-max float :offset-assert 16)
(money float :offset-assert 20)
(money-total float :offset-assert 24)
(money-per-level uint8 32 :offset-assert 28)
(deaths-per-level uint8 32 :offset-assert 60)
(buzzer-total float :offset-assert 92)
(fuel float :offset-assert 96)
(perm-list entity-perm-array :offset-assert 100)
(task-perm-list entity-perm-array :offset-assert 104)
(current-continue continue-point :offset-assert 108)
(text-ids-seen bit-array :offset-assert 112)
(level-opened uint8 32 :offset-assert 116)
(hint-control (array level-hint-control) :offset-assert 148)
(task-hint-control array :offset-assert 152)
(total-deaths int32 :offset-assert 156)
(continue-deaths int32 :offset-assert 160)
(fuel-cell-deaths int32 :offset-assert 164)
(game-start-time uint64 :offset-assert 168)
(continue-time uint64 :offset-assert 176)
(death-time uint64 :offset-assert 184)
(hit-time uint64 :offset-assert 192)
(fuel-cell-pickup-time uint64 :offset-assert 200)
(fuel-cell-time (array uint64) :offset-assert 208)
(enter-level-time (array uint64) :offset-assert 212)
(in-level-time (array uint64) :offset-assert 216)
(blackout-time uint64 :offset-assert 224)
(letterbox-time uint64 :offset-assert 232)
(hint-play-time uint64 :offset-assert 240)
(display-text-time uint64 :offset-assert 248)
(display-text-handle uint64 :offset-assert 256)
(death-movie-tick int32 :offset-assert 264)
(want-auto-save symbol :offset-assert 268)
(auto-save-proc handle :offset-assert 272)
(auto-save-status uint32 :offset-assert 280)
(auto-save-card int32 :offset-assert 284)
(auto-save-which int32 :offset-assert 288)
(pov-camera-handle uint64 :offset-assert 296)
(other-camera-handle uint64 :offset-assert 304)
(death-pos vector-array :offset-assert 312)
(dummy basic :offset-assert 316)
(auto-save-count int32 :offset-assert 320)
((mode symbol :offset-assert 4)
(save-name basic :offset-assert 8)
(life float :offset-assert 12)
(life-max float :offset-assert 16)
(money float :offset-assert 20)
(money-total float :offset-assert 24)
(money-per-level uint8 32 :offset-assert 28)
(deaths-per-level uint8 32 :offset-assert 60)
(buzzer-total float :offset-assert 92)
(fuel float :offset-assert 96)
(perm-list entity-perm-array :offset-assert 100)
(task-perm-list entity-perm-array :offset-assert 104)
(current-continue continue-point :offset-assert 108)
(text-ids-seen bit-array :offset-assert 112)
(level-opened uint8 32 :offset-assert 116)
(hint-control (array level-hint-control) :offset-assert 148)
(task-hint-control (array task-hint-control-group) :offset-assert 152)
(total-deaths int32 :offset-assert 156)
(continue-deaths int32 :offset-assert 160)
(fuel-cell-deaths int32 :offset-assert 164)
(game-start-time uint64 :offset-assert 168)
(continue-time uint64 :offset-assert 176)
(death-time uint64 :offset-assert 184)
(hit-time uint64 :offset-assert 192)
(fuel-cell-pickup-time uint64 :offset-assert 200)
(fuel-cell-time (array uint64) :offset-assert 208)
(enter-level-time (array uint64) :offset-assert 212)
(in-level-time (array uint64) :offset-assert 216)
(blackout-time uint64 :offset-assert 224)
(letterbox-time uint64 :offset-assert 232)
(hint-play-time uint64 :offset-assert 240)
(display-text-time uint64 :offset-assert 248)
(display-text-handle uint64 :offset-assert 256)
(death-movie-tick int32 :offset-assert 264)
(want-auto-save symbol :offset-assert 268)
(auto-save-proc handle :offset-assert 272)
(auto-save-status uint32 :offset-assert 280)
(auto-save-card int32 :offset-assert 284)
(auto-save-which int32 :offset-assert 288)
(pov-camera-handle uint64 :offset-assert 296)
(other-camera-handle uint64 :offset-assert 304)
(death-pos vector-array :offset-assert 312)
(dummy basic :offset-assert 316)
(auto-save-count int32 :offset-assert 320)
)
:method-count-assert 29
:size-assert #x144
@@ -274,8 +274,8 @@
;; definition for symbol *debug-hook*, type (function none)
(define *debug-hook* nothing)
;; definition for symbol *menu-hook*, type (function none)
(define *menu-hook* nothing)
;; definition for symbol *menu-hook*, type (function debug-menu-context)
(define *menu-hook* (the-as (function debug-menu-context) nothing))
;; definition for symbol *progress-hook*, type (function none)
(define *progress-hook* nothing)
@@ -59,7 +59,7 @@
;; definition of type task-hint-control-group
(deftype task-hint-control-group (structure)
((tasks basic :offset-assert 0)
((tasks (array task-hint-control) :offset-assert 0)
)
:method-count-assert 9
:size-assert #x4
@@ -0,0 +1,525 @@
;;-*-Lisp-*-
(in-package goal)
;; failed to figure out what this is:
(set!
(-> *game-info* hint-control)
(the-as
(array level-hint-control)
(new
'static
'boxed-array
:type level-hint-control :length 25 :allocated-length 25
(new 'static 'level-hint-control
:id #x917
:num-attempts-before-playing 1
:num-success-before-killing 3
)
(new 'static 'level-hint-control
:id #x90a
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x284
:num-attempts-before-playing 3
:num-success-before-killing 3
)
(new 'static 'level-hint-control
:id #x285
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:id #x251
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:id #x2af
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x239
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x29d
:num-attempts-before-playing 1
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x25b
:num-attempts-before-playing 1
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x2a4
:num-attempts-before-playing 3
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x2aa
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x33a
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x1194
:id #x34b
:num-attempts-before-playing 3
:num-success-before-killing 2
)
(new 'static 'level-hint-control
:delay-before-playing #x4650
:id #x34a
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x34d
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x345
:num-attempts-before-playing 3
:num-success-before-killing 2
)
(new 'static 'level-hint-control
:id #x352
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x2328
:id #x347
:num-attempts-before-playing 3
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:id #x34e
:num-attempts-before-playing 3
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x444
:num-attempts-before-playing 5
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:delay-before-playing #x384
:id #x438
:num-attempts-before-playing 1
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x433
:num-attempts-before-playing 4
:num-success-before-killing -1
)
(new 'static 'level-hint-control
:id #x70d
:num-attempts-before-playing 1
:num-success-before-killing 2
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x806
:num-attempts-before-playing 1
:num-success-before-killing 1
)
(new 'static 'level-hint-control
:delay-before-playing #x5dc
:id #x809
:num-attempts-before-playing 1
:num-success-before-killing 1
)
)
)
)
;; failed to figure out what this is:
(set!
(-> *game-info* task-hint-control)
(the-as
(array task-hint-control-group)
(new
'static
'boxed-array
:type task-hint-control-group :length 16 :allocated-length 16
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 3 :allocated-length 3
(new 'static 'task-hint-control :task #x5c :delay #x2bf20)
(new 'static 'task-hint-control :task #x5d :delay #x57e40)
(new 'static 'task-hint-control :task #x5e :delay #x83d60)
)
)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 3 :allocated-length 3
(new 'static 'task-hint-control :task #x15 :delay #x41eb0)
(new 'static 'task-hint-control :task #x16 :delay #x83d60)
(new 'static 'task-hint-control :task #x13 :delay #xc5c10)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 2 :allocated-length 2
(new 'static 'task-hint-control :task #x6 :delay #x57e40)
(new 'static 'task-hint-control :task #x8 :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 4 :allocated-length 4
(new 'static 'task-hint-control :task #x18 :delay #x57e40)
(new 'static 'task-hint-control :task #x19 :delay #x83d60)
(new 'static 'task-hint-control :task #x1d :delay #xafc80)
(new 'static 'task-hint-control :task #x1e :delay #xdbba0)
)
)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 3 :allocated-length 3
(new 'static 'task-hint-control :task #x33 :delay #x57e40)
(new 'static 'task-hint-control :task #x30 :delay #x83d60)
(new 'static 'task-hint-control :task #x2e :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x26 :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x38 :delay #xafc80)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x6e :delay #x107ac0)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 1 :allocated-length 1
(new 'static 'task-hint-control :task #x4a :delay #x107ac0)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 4 :allocated-length 4
(new 'static 'task-hint-control :task #x42 :delay #x57e40)
(new 'static 'task-hint-control :task #x43 :delay #x83d60)
(new 'static 'task-hint-control :task #x3f :delay #xafc80)
(new 'static 'task-hint-control :task #x40 :delay #xdbba0)
)
)
(new 'static 'task-hint-control-group
:tasks
(new
'static
'boxed-array
:type task-hint-control :length 4 :allocated-length 4
(new 'static 'task-hint-control :task #x50 :delay #x57e40)
(new 'static 'task-hint-control :task #x51 :delay #x83d60)
(new 'static 'task-hint-control :task #x52 :delay #xafc80)
(new 'static 'task-hint-control :task #x54 :delay #xdbba0)
)
)
(new 'static 'task-hint-control-group)
(new 'static 'task-hint-control-group)
)
)
)
;; definition for function find-hint-control-index
(defun find-hint-control-index ((arg0 level-hint-control))
(let ((gp-0 -1))
(let ((v1-2 (length (-> *game-info* hint-control))))
(dotimes (a0-2 v1-2)
(when (= (-> *game-info* hint-control a0-2 id) arg0)
(set! gp-0 a0-2)
(set! a0-2 v1-2)
)
)
)
gp-0
)
)
;; definition for function start-hint-timer
;; INFO: Return type mismatch int vs none.
(defun start-hint-timer ((arg0 level-hint-control))
(let ((v1-0 (find-hint-control-index arg0)))
(when
(and
(>= v1-0 0)
(zero? (-> *game-info* hint-control v1-0 start-time))
(!= (-> *game-info* hint-control v1-0 num-attempts-before-playing) 1)
)
(set!
(-> *game-info* hint-control v1-0 start-time)
(-> *display* base-frame-counter)
)
0
)
)
0
(none)
)
;; definition for function increment-success-for-hint
;; INFO: Return type mismatch int vs none.
(defun increment-success-for-hint ((arg0 level-hint-control))
(let ((gp-0 (find-hint-control-index arg0)))
(when (>= gp-0 0)
(set!
(-> *game-info* hint-control gp-0 num-success)
(seekl (-> *game-info* hint-control gp-0 num-success) 127 1)
)
0
)
)
0
(none)
)
;; definition for function can-hint-be-played?
;; WARN: disable def twice: 139. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare.
(defun can-hint-be-played? ((arg0 int))
(let ((v1-0 (not (str-is-playing?))))
(if (and v1-0 (nonzero? arg0))
(set! v1-0 (not (seen-text? *game-info* (the-as game-text-id arg0))))
)
(when v1-0
(when *hint-semaphore*
(let ((v1-3 *hint-semaphore*))
(set! v1-0 (dummy-15 (the-as level-hint (if v1-3
(-> v1-3 0 self)
)
)
)
)
)
0
)
(when
(and
v1-0
(<
(the-as
int
(- (-> *display* base-frame-counter) (-> *game-info* hint-play-time))
)
30
)
)
(set! v1-0 #f)
0
)
(set!
v1-0
(and
v1-0
(not (-> *setting-control* current talking))
(not (-> *setting-control* current spooling))
(not (-> *setting-control* current hint))
(not (-> *setting-control* current ambient))
(>=
(the-as int (-> *display* base-frame-counter))
(the-as int (-> *game-info* blackout-time))
)
)
)
0
)
(cond
(v1-0
(let ((v1-16 (find-hint-control-index (the-as level-hint-control arg0))))
(cond
((< v1-16 0)
#t
)
(else
(let ((gp-1 (-> *game-info* hint-control v1-16))
(a0-24
(-
(-> *display* base-frame-counter)
(-> *game-info* hint-control v1-16 last-time-called)
)
)
(v1-21 #t)
)
(if
(and
(= (-> gp-1 num-attempts-before-playing) 1)
(< (the-as int a0-24) 30)
)
(set! (-> gp-1 start-time) (+ (-> gp-1 start-time) a0-24))
)
(cond
((and
(!= (-> gp-1 num-attempts-before-playing) 1)
(nonzero? (-> gp-1 last-time-called))
(<
(the-as
int
(- (-> *display* base-frame-counter) (-> gp-1 last-time-called))
)
150
)
)
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
#f
)
(else
(set! (-> gp-1 last-time-called) (-> *display* base-frame-counter))
(when (nonzero? (-> gp-1 delay-before-playing))
(if
(<
(the-as int (-> gp-1 start-time))
(the-as int (-> gp-1 delay-before-playing))
)
(set! v1-21 #f)
)
0
)
(cond
(v1-21
(set! (-> gp-1 num-attempts) (seekl (-> gp-1 num-attempts) 127 1))
(and
(>= (-> gp-1 num-attempts) (-> gp-1 num-attempts-before-playing))
(or
(= (-> gp-1 num-success-before-killing) -1)
(< (-> gp-1 num-success) (-> gp-1 num-success-before-killing))
)
)
)
(else
#f
)
)
)
)
)
)
)
)
)
(else
#f
)
)
)
)
;; definition for function reset-all-hint-controls
;; INFO: Return type mismatch int vs none.
(defun reset-all-hint-controls ()
(let ((v1-2 (length (-> *game-info* hint-control))))
(dotimes (a0-1 v1-2)
(let ((a1-2 (-> *game-info* hint-control a0-1)))
(set! (-> a1-2 start-time) (the-as uint 0))
(set! (-> a1-2 last-time-called) (the-as uint 0))
(set! (-> a1-2 num-attempts) 0)
(set! (-> a1-2 num-success) 0)
)
0
)
)
0
(none)
)
;; definition for function update-task-hints
;; INFO: Return type mismatch int vs none.
(defun update-task-hints ()
(when *target*
(let ((a0-0 (+ (-> *target* current-level info index) -1))
(v1-7 (-> *game-info* task-hint-control))
)
(when (and (>= a0-0 0) (< a0-0 (-> *level-task-data-remap* length)))
(let ((a0-3 (-> *level-task-data-remap* a0-0)))
(when (< a0-3 (-> v1-7 length))
(let ((gp-0 (-> v1-7 a0-3 tasks)))
(when (and (!= gp-0 0) (nonzero? (-> gp-0 length)))
(let ((s5-0 (-> *game-info* in-level-time a0-3)))
(dotimes (s4-0 (-> gp-0 length))
(let
((v1-17 (get-task-status (the-as game-task (-> gp-0 s4-0 task)))))
(when
(or
(= v1-17 (task-status need-hint))
(= v1-17 (task-status unknown))
)
(if (< (-> gp-0 s4-0 delay) s5-0)
(close-specific-task!
(the-as game-task (-> gp-0 s4-0 task))
(task-status need-hint)
)
)
)
)
)
)
)
)
)
)
)
)
)
0
(none)
)
@@ -114,7 +114,7 @@
(format #t "~Twind-index: ~D~%" (-> obj wind-index))
(format #t "~Tflat-normal: #<vector @ #x~X>~%" (-> obj flat-normal))
(format #t "~Tflat-hwidth: ~f~%" (-> obj flat-normal w))
(format #t "~Tcolor: ~D~%" (-> obj color))
(format #t "~Tcolor: ~D~%" (-> obj unknown))
obj
)
@@ -245,6 +245,7 @@
;; definition of type instance
(deftype instance (drawable)
((bucket-index uint16 :offset 6)
(unknown uint32 :offset 8)
(origin matrix4h :inline :offset-assert 32)
(wind-index uint16 :offset 62)
)
@@ -67,7 +67,7 @@
(format #t "~Tbucket-index: ~D~%" (-> obj bucket-index))
(format #t "~Torigin: #<matrix4h @ #x~X>~%" (-> obj origin))
(format #t "~Twind-index: ~D~%" (-> obj wind-index))
(format #t "~Tcolor-indices: #x~X~%" (-> obj color-indices))
(format #t "~Tcolor-indices: #x~X~%" (-> obj unknown))
(format #t "~Tbucket-ptr: ~A~%" (-> obj bucket-ptr))
(format #t "~Tmax-scale: ~D~%" (-> obj max-scale))
(format #t "~Tflags: ~D~%" (-> obj flags))
+9 -18
View File
@@ -46,35 +46,24 @@ const std::unordered_set<std::string> g_functions_expected_to_reject = {
"(method 9 bounding-box)", // handwritten asm loop
"(method 14 bounding-box)", // handwritten asm loop
// trig
"exp",
"atan0",
"sincos!",
"sincos-rad!",
"exp", "atan0", "sincos!", "sincos-rad!",
// matrix
"(method 9 matrix)", // handwritten asm loop
"matrix-axis-sin-cos!",
"matrix-axis-sin-cos-vu!",
"matrix-axis-sin-cos!", "matrix-axis-sin-cos-vu!",
// dma-h
"dma-count-until-done", // dma asm loop
"dma-sync-with-count",
"dma-send-no-scratch",
"dma-sync-fast",
"dma-sync-with-count", "dma-send-no-scratch", "dma-sync-fast",
// dma
"symlink2",
"symlink3",
"symlink2", "symlink3",
"dma-sync-hang", // handwritten asm
"vector=", // asm branching
// display
"vblank-handler", // asm
"vif1-handler",
"vif1-handler-debug",
"vif1-handler", "vif1-handler-debug",
// stats-h
"(method 11 perf-stat)",
"(method 12 perf-stat)",
"(method 11 perf-stat)", "(method 12 perf-stat)",
// ripple - asm
"ripple-execute-init",
"ripple-create-wave-table",
"ripple-apply-wave-table",
"ripple-execute-init", "ripple-create-wave-table", "ripple-apply-wave-table",
"ripple-matrix-scale",
// ripple - calls an asm function
"ripple-execute",
@@ -90,6 +79,8 @@ const std::unordered_set<std::string> g_functions_expected_to_reject = {
// actor-link-h
"(method 21 actor-link-info)", // BUG: sc cfg / cfg-ir bug
"(method 20 actor-link-info)",
"debug-menu-item-var-render" // asm
};
const std::unordered_set<std::string> g_functions_to_skip_compiling = {