g/jak2: cleanup target-board a bit, add a new feature (#2154)

This commit is contained in:
Tyler Wilding
2023-01-28 18:44:29 -05:00
committed by GitHub
parent be035181f0
commit 4876b6af21
7 changed files with 179 additions and 75 deletions
@@ -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)
+150 -75
View File
@@ -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))))
+2
View File
@@ -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)
+2
View File
@@ -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)
)