mirror of
https://github.com/open-goal/jak-project
synced 2026-07-06 05:54:45 -04:00
g/jak2: cleanup target-board a bit, add a new feature (#2154)
This commit is contained in:
@@ -450,6 +450,9 @@
|
||||
(set! (-> *game-info* timer) (the-as time-frame v1-15))
|
||||
)
|
||||
)
|
||||
;; Print trick text to screen if available
|
||||
(#when PC_PORT
|
||||
(render-combo *board-trick-tracker*))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
@@ -474,6 +477,9 @@
|
||||
)
|
||||
(change-parent self (ppointer->process s4-0))
|
||||
(try-update-focus (-> self focus) s5-2)
|
||||
(#when PC_PORT
|
||||
(end-combo! *board-trick-tracker*)
|
||||
(reset-combo! *board-trick-tracker*))
|
||||
(go-virtual enter)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -5908,6 +5908,7 @@
|
||||
'(menu
|
||||
"PC Settings"
|
||||
(flag "Discord RPC" #t ,(dm-lambda-boolean-flag (-> *pc-settings* discord-rpc?)))
|
||||
(flag "Jetboard Trick String" #t ,(dm-lambda-boolean-flag (-> *pc-settings* jetboard-trick-text?)))
|
||||
(function "Save" #f ,(lambda () (commit-to-file *pc-settings*)))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -29,6 +29,23 @@
|
||||
(darkjak-giant 18)
|
||||
)
|
||||
|
||||
(#when PC_PORT
|
||||
|
||||
(deftype board-trick-tracker (structure)
|
||||
((tricks-in-combo board-tricks 16)
|
||||
(num-tricks-in-combo uint32)
|
||||
(points-in-combo float)
|
||||
(combo-in-progress? symbol))
|
||||
(:methods
|
||||
(reset-combo! (_type_) none 9)
|
||||
(add-trick-to-combo! (_type_ board-tricks float) none 10)
|
||||
(render-combo (_type_) none 11)
|
||||
(end-combo! (_type_) none 12)))
|
||||
|
||||
(define-extern *board-trick-tracker* board-trick-tracker)
|
||||
|
||||
)
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(deftype board (process-drawable)
|
||||
|
||||
@@ -52,7 +52,139 @@
|
||||
(define-extern target-board-clone-anim (state handle target))
|
||||
(define-extern target-board-hit (state vector attack-info target))
|
||||
|
||||
;; decomp begins
|
||||
(#when PC_PORT
|
||||
|
||||
(define *board-trick-tracker* (new 'static 'board-trick-tracker))
|
||||
|
||||
(defmethod reset-combo! board-trick-tracker ((obj board-trick-tracker))
|
||||
(set! (-> obj num-tricks-in-combo) 0)
|
||||
(set! (-> obj points-in-combo) 0.0)
|
||||
(countdown (idx 16)
|
||||
(set! (-> obj tricks-in-combo idx) (board-tricks none)))
|
||||
(none))
|
||||
|
||||
(defmethod add-trick-to-combo! board-trick-tracker ((obj board-trick-tracker) (trick board-tricks) (points float))
|
||||
(when (not (-> obj combo-in-progress?))
|
||||
(set! (-> obj combo-in-progress?) #t)
|
||||
(reset-combo! obj))
|
||||
(when (< (-> obj num-tricks-in-combo) 15)
|
||||
(set! (-> obj tricks-in-combo (-> obj num-tricks-in-combo)) trick)
|
||||
(set! (-> obj num-tricks-in-combo) (inc (-> obj num-tricks-in-combo)))
|
||||
(set! (-> obj points-in-combo) (+ (-> obj points-in-combo) points)))
|
||||
(none))
|
||||
|
||||
|
||||
(defun board-trick->string ((trick board-tricks))
|
||||
"TODO - make a prefix removal function instead"
|
||||
(cond
|
||||
((= trick (board-tricks board-rail-jump))
|
||||
"rail-jump"
|
||||
)
|
||||
((= trick (board-tricks board-nosegrab))
|
||||
"nosegrab"
|
||||
)
|
||||
((= trick (board-tricks board-board-spin))
|
||||
"board-spin"
|
||||
)
|
||||
((= trick (board-tricks board-kickflip))
|
||||
"kickflip"
|
||||
)
|
||||
((= trick (board-tricks board-method))
|
||||
"method"
|
||||
)
|
||||
((= trick (board-tricks board-spin))
|
||||
"spin"
|
||||
)
|
||||
((= trick (board-tricks board-boost))
|
||||
"boost"
|
||||
)
|
||||
((= trick (board-tricks board-duck-jump))
|
||||
"duck-jump"
|
||||
)
|
||||
((= trick (board-tricks board-board-flip))
|
||||
"board-flip"
|
||||
)
|
||||
((= trick (board-tricks board-rail))
|
||||
"rail"
|
||||
)
|
||||
((= trick (board-tricks none))
|
||||
"none"
|
||||
)
|
||||
((= trick (board-tricks board-quick-jump))
|
||||
"quick-jump"
|
||||
)
|
||||
((= trick (board-tricks board-noseflip))
|
||||
"noseflip"
|
||||
)
|
||||
((= trick (board-tricks board-jump))
|
||||
"jump"
|
||||
)
|
||||
((= trick (board-tricks board-flip))
|
||||
"flip"
|
||||
)
|
||||
(else
|
||||
"*unknown*"
|
||||
)))
|
||||
|
||||
(defmethod render-combo board-trick-tracker ((obj board-trick-tracker))
|
||||
(when (not (-> *pc-settings* jetboard-trick-text?))
|
||||
(return 0))
|
||||
(clear *temp-string*)
|
||||
;; Also only print each trick type once
|
||||
(let ((freq (new 'stack-no-clear 'array 'uint32 19))
|
||||
(printed (new 'stack-no-clear 'array 'symbol 19))
|
||||
(idx 0)
|
||||
(text-entries 0))
|
||||
;; Initialize the arrays
|
||||
(countdown (i 19)
|
||||
(set! (-> freq i) 0)
|
||||
(set! (-> printed i) #f))
|
||||
;; Build up a frequency list, god i wish i had a map
|
||||
(while (< idx (-> obj num-tricks-in-combo))
|
||||
(let ((trick (-> obj tricks-in-combo idx)))
|
||||
(set! (-> freq trick) (inc (-> freq trick)))
|
||||
(set! idx (inc idx))))
|
||||
;; Now we can construct the string
|
||||
(set! idx 0)
|
||||
(while (< idx (-> obj num-tricks-in-combo))
|
||||
(let* ((trick (-> obj tricks-in-combo idx))
|
||||
(times (-> freq trick))
|
||||
(skip? (-> printed trick))
|
||||
(color (case trick
|
||||
(((board-tricks board-boost) (board-tricks board-jump) (board-tricks board-duck-jump) (board-tricks board-quick-jump))
|
||||
"~[~9L")
|
||||
(((board-tricks board-rail) (board-tricks board-rail-jump))
|
||||
"~[~3L")
|
||||
(((board-tricks board-spin) (board-tricks board-flip) (board-tricks board-board-flip) (board-tricks board-nosegrab))
|
||||
"~[~26L")
|
||||
(((board-tricks board-board-spin) (board-tricks board-method) (board-tricks board-noseflip) (board-tricks board-kickflip))
|
||||
"~[~15L")))
|
||||
(padding (if (= idx 0) "" " ")))
|
||||
(when (not skip?)
|
||||
(if (> times 0)
|
||||
(format *temp-string* "~S~S~S~S x ~D" padding color (board-trick->string trick) "~[~0L" times)
|
||||
(format *temp-string* "~S~S~S~S" padding color (board-trick->string trick) "~[~0L"))
|
||||
(set! (-> printed trick) #t)
|
||||
(set! text-entries (inc text-entries))
|
||||
(when (= (mod text-entries 4) 0)
|
||||
(format *temp-string* "~%"))
|
||||
))
|
||||
(set! idx (inc idx))))
|
||||
;; Add points
|
||||
(when (> (-> obj points-in-combo) 0.0)
|
||||
(format *temp-string* "~%~S~D" "~[~38L" (the int (-> obj points-in-combo))))
|
||||
;; Print it finally
|
||||
(let ((font-ctx (new 'stack 'font-context *font-default-matrix* 0 325 0.0 (font-color default-#cddbcd) (font-flags shadow kerning middle))))
|
||||
(print-game-text-scaled *temp-string* 1.0 font-ctx 320))
|
||||
(none))
|
||||
|
||||
(defmethod end-combo! board-trick-tracker ((obj board-trick-tracker))
|
||||
(set! (-> obj combo-in-progress?) #f)
|
||||
(none))
|
||||
|
||||
)
|
||||
|
||||
;; DECOMP BEGINS
|
||||
|
||||
(define *board-walk-mods*
|
||||
(new 'static 'surface
|
||||
@@ -2881,86 +3013,28 @@
|
||||
(let ((t9-4 format)
|
||||
(a0-29 #t)
|
||||
(a1-8 "trick: ~S (~D) ~,,0f")
|
||||
(v1-30 arg0)
|
||||
)
|
||||
(trick-name (enum->string board-tricks arg0)))
|
||||
(t9-4
|
||||
a0-29
|
||||
a1-8
|
||||
(cond
|
||||
((= v1-30 (board-tricks board-rail-jump))
|
||||
"board-rail-jump"
|
||||
)
|
||||
((= v1-30 (board-tricks board-nosegrab))
|
||||
"board-nosegrab"
|
||||
)
|
||||
((= v1-30 (board-tricks board-board-spin))
|
||||
"board-board-spin"
|
||||
)
|
||||
((= v1-30 (board-tricks board-kickflip))
|
||||
"board-kickflip"
|
||||
)
|
||||
((= v1-30 (board-tricks board-method))
|
||||
"board-method"
|
||||
)
|
||||
((= v1-30 (board-tricks board-spin))
|
||||
"board-spin"
|
||||
)
|
||||
((= v1-30 (board-tricks board-boost))
|
||||
"board-boost"
|
||||
)
|
||||
((= v1-30 (board-tricks darkjak))
|
||||
"darkjak"
|
||||
)
|
||||
((= v1-30 (board-tricks darkjak-giant))
|
||||
"darkjak-giant"
|
||||
)
|
||||
((= v1-30 (board-tricks board-duck-jump))
|
||||
"board-duck-jump"
|
||||
)
|
||||
((= v1-30 (board-tricks board-board-flip))
|
||||
"board-board-flip"
|
||||
)
|
||||
((= v1-30 (board-tricks board-rail))
|
||||
"board-rail"
|
||||
)
|
||||
((= v1-30 (board-tricks none))
|
||||
"none"
|
||||
)
|
||||
((= v1-30 (board-tricks darkjak-bomb0))
|
||||
"darkjak-bomb0"
|
||||
)
|
||||
((= v1-30 (board-tricks board-quick-jump))
|
||||
"board-quick-jump"
|
||||
)
|
||||
((= v1-30 (board-tricks board-noseflip))
|
||||
"board-noseflip"
|
||||
)
|
||||
((= v1-30 (board-tricks darkjak-bomb1))
|
||||
"darkjak-bomb1"
|
||||
)
|
||||
((= v1-30 (board-tricks board-jump))
|
||||
"board-jump"
|
||||
)
|
||||
((= v1-30 (board-tricks board-flip))
|
||||
"board-flip"
|
||||
)
|
||||
(else
|
||||
"*unknown*"
|
||||
)
|
||||
)
|
||||
trick-name
|
||||
s4-0
|
||||
s3-1
|
||||
)
|
||||
)
|
||||
(when (nonzero? (-> obj trick-count))
|
||||
(format #t " + combo ~,,0f" (-> obj trick-points-array (+ (-> obj trick-count) -1)))
|
||||
(+! (-> obj trick-points-array (+ (-> obj trick-count) -1))
|
||||
(-> obj trick-points-array (+ (-> obj trick-count) -1))
|
||||
)
|
||||
)
|
||||
(format #t "~%")
|
||||
(set! (-> obj trick-array (-> obj trick-count)) arg0)
|
||||
(set! (-> obj trick-points-array (-> obj trick-count)) s3-1)
|
||||
(let ((total-points s3-1))
|
||||
(when (nonzero? (-> obj trick-count))
|
||||
(format #t " + combo ~,,0f" (-> obj trick-points-array (+ (-> obj trick-count) -1)))
|
||||
(+! total-points (-> obj trick-points-array (+ (-> obj trick-count) -1)))
|
||||
(+! (-> obj trick-points-array (+ (-> obj trick-count) -1))
|
||||
(-> obj trick-points-array (+ (-> obj trick-count) -1))
|
||||
)
|
||||
)
|
||||
(format #t "~%")
|
||||
(set! (-> obj trick-array (-> obj trick-count)) arg0)
|
||||
(set! (-> obj trick-points-array (-> obj trick-count)) s3-1)
|
||||
(#when PC_PORT
|
||||
(add-trick-to-combo! *board-trick-tracker* arg0 total-points)))
|
||||
)
|
||||
)
|
||||
(+! (-> obj trick-count) 1)
|
||||
@@ -3003,7 +3077,8 @@
|
||||
)
|
||||
)
|
||||
(sound-play "trick-score")
|
||||
)
|
||||
(#when PC_PORT
|
||||
(end-combo! *board-trick-tracker*)))
|
||||
)
|
||||
(set! (-> obj trick-count) 0)
|
||||
0
|
||||
|
||||
@@ -1359,6 +1359,7 @@ This commonly includes things such as:
|
||||
- collision information
|
||||
- loading the skeleton group / bones
|
||||
- sounds"
|
||||
(stack-size-set! (-> obj main-thread) 1024)
|
||||
(local-vars (sv-16 res-tag))
|
||||
(set! sv-16 (new 'static 'res-tag))
|
||||
(let ((v1-1 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16))))
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
((version pckernel-version) ;; version of this settings
|
||||
|
||||
(discord-rpc? symbol) ;; enable discord rich presence integration
|
||||
(jetboard-trick-text? symbol) ;; enable rendering jetboard trick combo during minigame
|
||||
)
|
||||
|
||||
(:methods
|
||||
@@ -90,6 +91,7 @@
|
||||
"Set the default settings"
|
||||
(set! (-> obj version) PC_KERNEL_VERSION)
|
||||
(set! (-> obj discord-rpc?) #t)
|
||||
(set! (-> obj jetboard-trick-text?) #t)
|
||||
(none))
|
||||
|
||||
(defmacro with-pc (&rest body)
|
||||
|
||||
@@ -238,6 +238,7 @@
|
||||
(dosettings (file)
|
||||
(case-str *pc-temp-string*
|
||||
(("discord-rpc?") (set! (-> obj discord-rpc?) (file-stream-read-symbol file)))
|
||||
(("jetboard-trick-text?") (set! (-> obj jetboard-trick-text?) (file-stream-read-symbol file)))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -266,6 +267,7 @@
|
||||
|
||||
(format file "(settings #x~X~%" (-> obj version))
|
||||
(format file " (discord-rpc? ~A)~%" (-> obj discord-rpc?))
|
||||
(format file " (jetboard-trick-text? ~A)~%" (-> obj jetboard-trick-text?))
|
||||
(format file " )~%")
|
||||
(file-stream-close file)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user