Files
jak-project/goal_src/jak1/engine/ui/hud-classes.gc
T
Tyler Wilding c162c66118 g/j1: Cleanup all main issues in the formatter and format all of goal_src/jak1 (#3535)
This PR does two main things:
1. Work through the main low-hanging fruit issues in the formatter
keeping it from feeling mature and usable
2. Iterate and prove that point by formatting all of the Jak 1 code
base. **This has removed around 100K lines in total.**
- The decompiler will now format it's results for jak 1 to keep things
from drifting back to where they were. This is controlled by a new
config flag `format_code`.

How am I confident this hasn't broken anything?:
- I compiled the entire project and stored it's `out/jak1/obj` files
separately
- I then recompiled the project after formatting and wrote a script that
md5's each file and compares it (`compare-compilation-outputs.py`
- The results (eventually) were the same:

![Screenshot 2024-05-25
132900](https://github.com/open-goal/jak-project/assets/13153231/015e6f20-8d19-49b7-9951-97fa88ddc6c2)
> This proves that the only difference before and after is non-critical
whitespace for all code/macros that is actually in use.

I'm still aware of improvements that could be made to the formatter, as
well as general optimization of it's performance. But in general these
are for rare or non-critical situations in my opinion and I'll work
through them before doing Jak 2. The vast majority looks great and is
working properly at this point. Those known issues are the following if
you are curious:

![image](https://github.com/open-goal/jak-project/assets/13153231/0edfaba1-6d36-40f5-ab23-0642209867c4)
2024-06-05 22:17:31 -04:00

1517 lines
58 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
(bundles "ENGINE.CGO" "GAME.CGO")
(require "engine/ui/hud.gc")
;; note: changed for high fps
;; DECOMP BEGINS
(defpartgroup group-part-hud-pickup
:id 75
:flags (screen-space)
:bounds (static-bspherem 0 0 0 2)
:parts
((sp-item 303 :flags (launch-asap) :binding 304)
(sp-item 304 :flags (start-dead launch-asap) :binding 305)
(sp-item 305 :flags (start-dead launch-asap) :binding 306)
(sp-item 306 :flags (start-dead launch-asap) :binding 307)
(sp-item 306 :flags (start-dead launch-asap) :binding 307)
(sp-item 306 :flags (start-dead launch-asap) :binding 307)
(sp-item 306 :flags (start-dead launch-asap) :binding 307)
(sp-item 307 :fade-after (meters 40) :flags (start-dead))
(sp-item 307 :fade-after (meters 40) :flags (start-dead))
(sp-item 307 :fade-after (meters 40) :flags (start-dead))
(sp-item 307 :fade-after (meters 40) :flags (start-dead))))
(defpart 303
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:scale-x (meters 0.5))
(:scale-y :copy scale-x)
(:r 32.0 92.0)
(:g 128.0 128.0)
(:a 0.0)
(:timer (seconds -0.005))
(:flags (bit3 bit9))))
(defpart 304
:init-specs
((:texture (new 'static 'texture-id :page #x2))
(:num 1.0)
(:y (meters 0) (meters 16))
(:z (meters 0.03))
(:scale-x (meters 2.5))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 32.0 92.0)
(:g 128.0 128.0)
(:a 24.0)
(:omega 0.0 65536.0)
(:vel-x (meters 0.026666667) (meters 0.026666667))
(:vel-y (meters 0.0014814815))
(:vel-z (meters 0))
(:rotvel-z (degrees 0.2))
(:timer (seconds -0.005))
(:flags (bit7 bit9))))
(defpart 305
:init-specs
((:texture (new 'static 'texture-id :page #x2))
(:num 3.0)
(:y (meters 0) (meters 16))
(:z (meters 0.065))
(:scale-x (meters 1.5) (meters 0.4))
(:rot-z (degrees 0) (degrees 360))
(:scale-y :copy scale-x)
(:r 32.0 92.0)
(:g 128.0 128.0)
(:a 24.0)
(:omega 0.0 65536.0)
(:vel-x (meters 0.017777778) (meters 0.017777778))
(:vel-y (meters 0))
(:vel-z (meters 0))
(:rotvel-z (degrees -0.4) 1 (degrees 0.8))
(:timer (seconds -0.005))
(:flags (bit3 bit7 bit9))))
(defpart 306
:init-specs
((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 1.0)
(:y (meters 0) (meters 16))
(:z (meters 0.12))
(:scale-x (meters 0.4))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 255.0)
(:a 24.0)
(:omega 0.0 65536.0)
(:vel-x (meters 0.053333335) (meters 0.053333335))
(:vel-y (meters 0))
(:vel-z (meters 0))
(:timer (seconds -0.005))
(:flags (bit2 bit3 bit7 bit9))))
(defpart 307
:init-specs
((:texture (new 'static 'texture-id :index #xf :page #x2))
(:num 0.25)
(:scale-x (meters 0.35))
(:scale-y :copy scale-x)
(:r 255.0)
(:g 255.0)
(:b 0.0)
(:a 96.0)
(:scalevel-x (meters -0.0012500001))
(:scalevel-y :copy scalevel-x)
(:fade-r -2.125)
(:accel-y (meters -0.00002))
(:timer (seconds 0.1) (seconds 0.797))
(:flags (bit2 bit9))
(:next-time (seconds 0.4))
(:next-launcher 308)))
(defpart 308
:init-specs ((:fade-r 0.0)))
(deftype hud-pickups (hud) ())
(defmethod draw-hud ((this hud-pickups))
(let ((t9-0 (method-of-type hud draw-hud))) (t9-0 this))
(let* ((s5-0 (-> *display* frames (-> *display* on-screen) frame global-buf))
(gp-0 (-> s5-0 base)))
(let ((s4-0 draw-string-xy))
(format (clear *temp-string*) "~D" (-> this value))
(s4-0 *temp-string*
s5-0
(+ (-> this text-x) (* (-> this x-sgn) (-> this offset)))
(/ (* (+ (-> this text-y) (* (-> this y-sgn) (-> this offset)) (-> this y-offset))
(the int (-> *video-parms* relative-y-scale)))
2)
(font-color green)
(font-flags shadow kerning large)))
(let ((a3-7 (-> s5-0 base)))
(let ((v1-8 (the-as object (-> s5-0 base))))
(set! (-> (the-as (pointer int64) v1-8)) #x20000000)
(set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag))
(set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag))
(set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)))
(dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group)
(bucket-id debug)
gp-0
(the-as (pointer dma-tag) a3-7))))
0
(none))
(defmethod hud-update ((this hud-pickups))
(if *target* (tally-value this (the int (+ 0.5 (-> *target* fact eco-pill))) 0))
0
(none))
(defmethod init-particles! ((this hud-pickups) (arg0 int))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-0 (-> this nb-of-particles)))
(set! (-> this particles s5-0) (new 'static 'hud-particle))
(set! (-> this particles s5-0 part) (create-launch-control (-> *part-group-id-table* 75) this))
(set! (-> this particles s5-0 init-pos x) 110.0)
(set! (-> this particles s5-0 init-pos y) 55.0)
(set! (-> this particles s5-0 init-pos z) 1.0)
(set! (-> this particles s5-0 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(dotimes (s5-1 (-> this nb-of-particles))
(if (= (-> this particles s5-1 part matrix) -1) (set! (-> this particles s5-1 part matrix) (sprite-allocate-user-hvdf))))
(set! (-> this text-x) 118)
(set! (-> this text-y) 45)
(set! (-> this x-sgn) -1)
(set! (-> this y-sgn) -1)
(set! (-> this friend) 3)
0
(none))
(defpartgroup group-part-hud-health-1
:id 76
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 309 :flags (launch-asap))))
(defpartgroup group-part-hud-health-2
:id 77
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 310 :flags (launch-asap))))
(defpartgroup group-part-hud-health-3
:id 78
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 311 :flags (launch-asap))))
(defpart 309
:init-specs
((:texture (new 'static 'texture-id :index #x2d :page #x2))
(:num 1.0)
(:scale-x (meters 1.7))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-health-01-func)))
(defpart 310
:init-specs
((:texture (new 'static 'texture-id :index #x2e :page #x2))
(:num 1.0)
(:scale-x (meters 1.7))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-health-03-func)))
(defpart 311
:init-specs
((:texture (new 'static 'texture-id :index #x2f :page #x2))
(:num 1.0)
(:scale-x (meters 1.7))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-health-02-func)))
(deftype hud-health (hud)
((scale float)))
(defun part-hud-health-01-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* health 0 scale))) (set! (-> arg2 vector 0 w) f0-0) (set! (-> arg2 vector 1 w) f0-0))
(cond
((and *target* (< (-> *target* fact health) 1.0)) (set! (-> arg2 vector 2 w) 32.0))
(else
(let ((f0-3 128.0))
;; low health flashing
;; og:preserve-this modified to support high fps
(when (and *target* (= (-> *target* fact health) 1.0))
(let* ((scaled-frame-counter (the int (* DISPLAY_FPS_RATIO (-> *display* integral-frame-counter))))
(v1-16 (logand scaled-frame-counter 7)))
(set! f0-3
(if (not (logtest? scaled-frame-counter 8))
(+ 128.0 (* 18.142857 (the float v1-16)))
(- 255.0 (* 18.142857 (the float v1-16)))))))
(set! (-> arg2 vector 2 x) f0-3)
(set! (-> arg2 vector 2 y) f0-3)
(set! (-> arg2 vector 2 z) f0-3))
(set! (-> arg2 vector 2 w) 128.0)))
0
(none))
(defun part-hud-health-02-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* health 0 scale))) (set! (-> arg2 vector 0 w) f0-0) (set! (-> arg2 vector 1 w) f0-0))
(if (and *target* (< (-> *target* fact health) 2.0)) (set! (-> arg2 vector 2 w) 32.0) (set! (-> arg2 vector 2 w) 128.0))
0
(none))
(defun part-hud-health-03-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* health 0 scale))) (set! (-> arg2 vector 0 w) f0-0) (set! (-> arg2 vector 1 w) f0-0))
(if (and *target* (< (-> *target* fact health) 3.0)) (set! (-> arg2 vector 2 w) 32.0) (set! (-> arg2 vector 2 w) 128.0))
0
(none))
(defmethod draw-hud ((this hud-health))
((method-of-type hud draw-hud) this)
0
(none))
(defmethod hud-update ((this hud-health))
(if *target* (tally-value this (the int (-> *target* fact health)) (the-as int (-> *target* fact health-pickup-time))))
0
(none))
(defmethod init-particles! ((this hud-health) (arg0 int))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-0 (-> this nb-of-particles)))
(set! (-> this particles s5-0) (new 'static 'hud-particle))
(set! (-> this particles s5-0 part) (create-launch-control (-> *part-group-id-table* 76) this))
(set! (-> this particles s5-0 init-pos x) 61.0)
(set! (-> this particles s5-0 init-pos y) 55.0)
(set! (-> this particles s5-0 init-pos z) 5.0)
(set! (-> this particles s5-0 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-1 (-> this nb-of-particles)))
(set! (-> this particles s5-1) (new 'static 'hud-particle))
(set! (-> this particles s5-1 part) (create-launch-control (-> *part-group-id-table* 77) this))
(set! (-> this particles s5-1 init-pos x) 98.0)
(set! (-> this particles s5-1 init-pos y) 55.0)
(set! (-> this particles s5-1 init-pos z) 5.0)
(set! (-> this particles s5-1 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-2 (-> this nb-of-particles)))
(set! (-> this particles s5-2) (new 'static 'hud-particle))
(set! (-> this particles s5-2 part) (create-launch-control (-> *part-group-id-table* 78) this))
(set! (-> this particles s5-2 init-pos x) 70.0)
(set! (-> this particles s5-2 init-pos y) 76.0)
(set! (-> this particles s5-2 init-pos z) 5.0)
(set! (-> this particles s5-2 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(dotimes (s5-3 (-> this nb-of-particles))
(if (= (-> this particles s5-3 part matrix) -1) (set! (-> this particles s5-3 part matrix) (sprite-allocate-user-hvdf))))
(set-pos-and-scale this (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal))
(set! (-> this x-sgn) -1)
(set! (-> this y-sgn) -1)
(set! (-> this friend) 0)
0
(none))
(defmethod set-pos-and-scale ((this hud-health) (arg0 symbol) (arg1 symbol))
(cond
(arg0
(set! (-> this particles 0 init-pos x) 65.0)
(set! (-> this particles 0 init-pos y) 55.0)
(set! (-> this particles 1 init-pos x) 98.0)
(set! (-> this particles 1 init-pos y) 55.0)
(set! (-> this particles 2 init-pos x) 73.0)
(set! (-> this particles 2 init-pos y) 80.0)
(set! (-> this scale) 6144.0))
(else
(set! (-> this particles 0 init-pos x) 61.0)
(set! (-> this particles 0 init-pos y) 55.0)
(set! (-> this particles 1 init-pos x) 98.0)
(set! (-> this particles 1 init-pos y) 55.0)
(set! (-> this particles 2 init-pos x) 70.0)
(set! (-> this particles 2 init-pos y) 76.0)
(set! (-> this scale) 6963.2)
(with-pc
(when (not (-> *pc-settings* use-vis?))
(let ((base-x (-> this particles 0 init-pos x)))
(set! (-> this particles 1 init-pos x)
(+ base-x (* (-> *pc-settings* aspect-ratio-reciprocal) (- (-> this particles 1 init-pos x) base-x))))
(set! (-> this particles 2 init-pos x)
(+ base-x (* (-> *pc-settings* aspect-ratio-reciprocal) (- (-> this particles 2 init-pos x) base-x)))))))))
0
(none))
(defpartgroup group-part-hud-orb-all
:id 705
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 2964 :flags (launch-asap))))
(defpart 2964
:init-specs
((:texture (new 'static 'texture-id :index #x2c :page #x2))
(:num 1.0)
(:scale-x (meters 2.4))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))))
(deftype hud-money-all (hud)
((x-scale float)
(y-scale float)
(y-pos int32)
(total-orbs int32)
(level-index int32)
(start-time time-frame)))
(defmethod draw-hud ((this hud-money-all))
(let ((t9-0 (method-of-type hud draw-hud))) (t9-0 this))
0
(let ((s5-0 0))
(when (>= (-> this level-index) 0)
(let ((s5-1 (new 'stack
'font-context
*font-default-matrix*
(+ (* (-> this x-sgn) (-> this offset)) -60 (-> this text-x))
(+ (/ (* (+ (-> this text-y) (* (-> this y-sgn) (-> this offset)) (-> this y-offset))
(the int (-> *video-parms* relative-y-scale)))
2)
-17)
0.0
(font-color red)
(font-flags shadow kerning))))
(let ((v1-12 s5-1)) (set! (-> v1-12 width) (the float 228)))
(let ((v1-13 s5-1)) (set! (-> v1-13 height) (the float 45)))
(let ((v1-14 s5-1)) (set! (-> v1-14 scale) 0.6))
(set! (-> s5-1 flags) (font-flags shadow kerning middle middle-vert large))
(print-game-text (lookup-text! *common-text* (-> *level-task-data* (-> this level-index) level-name-id) #f)
s5-1
#f
128
18))
(set! s5-0 13))
(let* ((s1-0 50)
(s3-0 (-> *display* frames (-> *display* on-screen) frame global-buf))
(s4-1 (-> s3-0 base)))
(let ((s2-0 draw-string-xy))
(format (clear *temp-string*) "~D/~D" (-> this total-orbs) (-> this total-orbs))
(s2-0 *temp-string*
s3-0
(+ (-> this text-x) (* (-> this x-sgn) (-> this offset)) s1-0)
(+ (/ (* (+ (-> this text-y) (* (-> this y-sgn) (-> this offset)) (-> this y-offset))
(the int (-> *video-parms* relative-y-scale)))
2)
s5-0)
(font-color yellow)
(font-flags shadow kerning middle large)))
(let ((a3-12 (-> s3-0 base)))
(let ((v1-32 (the-as dma-packet (-> s3-0 base))))
(set! (-> v1-32 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
(set! (-> v1-32 vif0) (new 'static 'vif-tag))
(set! (-> v1-32 vif1) (new 'static 'vif-tag))
(set! (-> s3-0 base) (&+ (the-as pointer v1-32) 16)))
(dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) frame bucket-group)
(bucket-id debug)
s4-1
(the-as (pointer dma-tag) a3-12)))))
0
(none))
(defmethod hud-update ((this hud-money-all))
(when *target*
(hide-bottom-hud)
(when (!= *master-mode* 'pause)
(when (and (!= (-> this icons 0) 0) (-> this icons 0 icon))
(set! (-> this icons 0 scale-x) (-> this x-scale))
(set! (-> this icons 0 scale-y) (-> this y-scale))
(set! (-> this icons 0 icon-y) (* (-> this y-pos) (the int (-> *video-parms* relative-y-scale))))
(let ((a0-6 (-> this icons 0 icon 0 root)))
(set-yaw-angle-clear-roll-pitch! a0-6 (- (y-angle a0-6) (* 182.04445 (* 4.0 (-> *display* time-adjust-ratio))))))))
(if (>= (+ (current-time) (seconds -5)) (-> this start-time))
(set! (-> this deactivate-when-hidden) #t)
(tally-value this (the-as int (current-time)) 0)))
0
(none))
(defmethod init-particles! ((this hud-money-all) (arg0 int))
(when (< (-> this nb-of-icons) 6)
(let ((s4-0 (-> this nb-of-icons)))
(set! (-> this icons s4-0) (new 'static 'hud-icon))
(let ((s3-0 (manipy-spawn (new 'static 'vector :w 1.0) #f *money-sg* #f :to this)))
(when s3-0
(set! (-> (the-as process-drawable (-> s3-0 0)) draw dma-add-func) dma-add-process-drawable-hud)
(set-vector! (-> (the-as process-drawable (-> s3-0 0)) root trans) 0.0 0.0 0.0 1.0)
(set-vector! (-> (the-as process-drawable (-> s3-0 0)) root scale) 0.0095 -0.011 0.0095 1.0)
(if #f (send-event (ppointer->process s3-0) 'trans-hook #f)))
(set! (-> this icons s4-0 icon) (the-as (pointer manipy) s3-0))
(when s3-0
(logior! (-> s3-0 0 mask) (process-mask pause))
(logclear! (-> s3-0 0 mask) (process-mask menu progress))
(set! (-> (the-as process-drawable (-> s3-0 0)) root trans z) 1024.0)
(set! (-> this icons s4-0 icon-x) 170)
(set! (-> this icons s4-0 icon-y) 0)
(set! (-> this icons s4-0 icon-z) 0)
(set! (-> this icons s4-0 scale-x) 0.0095)
(set! (-> this icons s4-0 scale-y) -0.011))))
(+! (-> this nb-of-icons) 1))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s4-1 (-> this nb-of-particles)))
(set! (-> this particles s4-1) (new 'static 'hud-particle))
(set! (-> this particles s4-1 part) (create-launch-control (-> *part-group-id-table* 705) this))
(set! (-> this particles s4-1 init-pos x) 172.0)
(set! (-> this particles s4-1 init-pos y) 330.0)
(set! (-> this particles s4-1 init-pos z) 2.0)
(set! (-> this particles s4-1 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(set-pos-and-scale this (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal))
(dotimes (s4-3 (-> this nb-of-particles))
(if (= (-> this particles s4-3 part matrix) -1) (set! (-> this particles s4-3 part matrix) (sprite-allocate-user-hvdf))))
(set! (-> this text-x) 251)
(set! (-> this text-y) 305)
(set! (-> this x-sgn) 0)
(set! (-> this y-sgn) 1)
(hide-bottom-hud)
(let ((s4-4 0)
(s3-2 0)
(s2-2 0))
(dotimes (s1-0 (length *level-task-data*))
(let ((v1-83 (-> *level-task-data* s1-0)))
(when (!= v1-83 #f)
(when (or (= *kernel-boot-message* 'play) (= (-> v1-83 level-name-id) (text-id misty-level-name)))
(if (= s1-0 arg0) (set! s2-2 (the-as int (-> *game-info* money-per-level s1-0))))
(+! s3-2 (-> *game-info* money-per-level s1-0))
(+! s4-4 (-> (get-game-count s1-0) money-count))))))
(cond
((= s3-2 s4-4) (set! (-> this total-orbs) s4-4) (set! (-> this total-orbs) s4-4) (set! (-> this level-index) -1))
((begin (set! (-> this total-orbs) s2-2) (< arg0 (length *level-task-data*))) (set! (-> this level-index) arg0))
(else (set! (-> this level-index) -1))))
(set-time! (-> this start-time))
(sound-play "get-all-orbs")
0
(none))
(defmethod set-pos-and-scale ((this hud-money-all) (arg0 symbol) (arg1 symbol))
(cond
(arg0 (set! (-> this x-scale) 0.01845) (set! (-> this y-scale) -0.02175) (set! (-> this y-pos) (if arg1 374 373)))
(else (set! (-> this x-scale) 0.013499999) (set! (-> this y-scale) -0.01575) (set! (-> this y-pos) 361)))
(when arg1
(set! (-> this x-scale) (* 1.02 (-> this x-scale)))
(set! (-> this y-scale) (* 1.2 (-> this y-scale)))
(set! (-> this y-pos) (the int (* 1.21 (the float (-> this y-pos))))))
0
(none))
(defpartgroup group-part-hud-orb
:id 79
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 312 :flags (launch-asap))))
(defpart 312
:init-specs
((:texture (new 'static 'texture-id :index #x2c :page #x2))
(:num 1.0)
(:scale-x (meters 1.6))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))))
(deftype hud-money (hud)
((x-scale float)
(y-scale float)
(y-pos int32)))
(define-extern *game-counts* game-count-info)
(defmethod draw-hud ((this hud-money))
(let ((t9-0 (method-of-type hud draw-hud))) (t9-0 this))
(with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf)) (bucket-id debug))
(let* ((string-x (+ (-> this text-x) (* (-> this x-sgn) (-> this offset))))
(string-y (/ (* (+ (-> this text-y) (* (-> this y-sgn) (-> this offset)) (-> this y-offset))
(the int (-> *video-parms* relative-y-scale)))
2)))
(case *hud-collectable-view*
(((hud-collectable-view game-totals))
;; show orbs collected/total across entire game
(draw-string-xy-scaled (string-format "~D~%/~D"
(the int (-> *game-info* money-total))
2000 ;;(-> (the progress (-> *progress-process* 0)) total-nb-of-orbs)
)
buf
string-x
(- string-y 5)
(font-color yellow)
(font-flags shadow kerning large)
0.8))
(((hud-collectable-view level-totals))
(let ((lvl-idx (-> *level-task-data-remap* (+ (-> *target* current-level info index) -1))))
;; show orbs collected/total this level
(draw-string-xy-scaled (string-format "~D~%/~D" (-> *game-info* money-per-level lvl-idx) (-> *game-counts* data lvl-idx money-count))
buf
string-x
(- string-y 5)
(font-color yellow)
(font-flags shadow kerning large)
0.8)))
(((hud-collectable-view original))
;; show original (total collected, unspent orbs)
(draw-string-xy (string-format "~D" (-> this value))
buf
string-x
string-y
(font-color yellow)
(font-flags shadow kerning large))))))
0
(none))
(defmethod hud-update ((this hud-money))
(when *target*
(when (!= *master-mode* 'pause)
(when (and (!= (-> this icons 0) 0) (-> this icons 0 icon))
(set! (-> this icons 0 scale-x) (-> this x-scale))
(set! (-> this icons 0 scale-y) (-> this y-scale))
(set! (-> this icons 0 icon-y) (* (-> this y-pos) (the int (-> *video-parms* relative-y-scale))))
(let ((a0-6 (-> this icons 0 icon 0 root)))
(set-yaw-angle-clear-roll-pitch! a0-6 (- (y-angle a0-6) (* 182.04445 (* 4.0 (-> *display* time-adjust-ratio))))))))
(tally-value this (the int (+ 0.5 (-> *target* game money))) 0))
0
(none))
(defmethod init-particles! ((this hud-money) (arg0 int))
(when (< (-> this nb-of-icons) 6)
(let ((s5-0 (-> this nb-of-icons)))
(set! (-> this icons s5-0) (new 'static 'hud-icon))
(let ((s4-0 (manipy-spawn (new 'static 'vector :w 1.0) #f *money-sg* #f :to this)))
(when s4-0
(set! (-> (the-as process-drawable (-> s4-0 0)) draw dma-add-func) dma-add-process-drawable-hud)
(set-vector! (-> (the-as process-drawable (-> s4-0 0)) root trans) 0.0 0.0 0.0 1.0)
(set-vector! (-> (the-as process-drawable (-> s4-0 0)) root scale) 0.0095 -0.011 0.0095 1.0)
(if #f (send-event (ppointer->process s4-0) 'trans-hook #f)))
(set! (-> this icons s5-0 icon) (the-as (pointer manipy) s4-0))
(when s4-0
(logior! (-> s4-0 0 mask) (process-mask pause))
(logclear! (-> s4-0 0 mask) (process-mask menu progress))
(set! (-> (the-as process-drawable (-> s4-0 0)) root trans z) 1024.0)
(set! (-> this icons s5-0 icon-x) 399)
(set! (-> this icons s5-0 icon-y) 79)
(set! (-> this icons s5-0 icon-z) 0)
(set! (-> this icons s5-0 scale-x) 0.0095)
(set! (-> this icons s5-0 scale-y) -0.011))))
(+! (-> this nb-of-icons) 1))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-1 (-> this nb-of-particles)))
(set! (-> this particles s5-1) (new 'static 'hud-particle))
(set! (-> this particles s5-1 part) (create-launch-control (-> *part-group-id-table* 79) this))
(set! (-> this particles s5-1 init-pos x) 400.0)
(set! (-> this particles s5-1 init-pos y) 58.0)
(set! (-> this particles s5-1 init-pos z) 2.0)
(set! (-> this particles s5-1 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(set-pos-and-scale this (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal))
(dotimes (s5-3 (-> this nb-of-particles))
(if (= (-> this particles s5-3 part matrix) -1) (set! (-> this particles s5-3 part matrix) (sprite-allocate-user-hvdf))))
(set! (-> this text-x) 420)
(set! (-> this text-y) 45)
(set! (-> this x-sgn) 1)
(set! (-> this y-sgn) -1)
(set! (-> this increment-on-event) #t)
0
(none))
(defmethod set-pos-and-scale ((this hud-money) (arg0 symbol) (arg1 symbol))
(cond
(arg0 (set! (-> this x-scale) 0.0123) (set! (-> this y-scale) -0.0145) (set! (-> this y-pos) 86))
(else (set! (-> this x-scale) 0.0095) (set! (-> this y-scale) -0.011) (set! (-> this y-pos) 79)))
(when arg1
(set! (-> this x-scale) (* 1.1 (-> this x-scale)))
(set! (-> this y-scale) (* 1.2 (-> this y-scale)))
(set! (-> this y-pos) (the int (* (the float (-> this y-pos)) (if arg0 0.95 0.9)))))
0
(none))
(defmethod get-icon-pos-x ((this hud-money))
(-> this icons 0 icon-x))
(defmethod get-icon-pos-y ((this hud-money))
(-> this icons 0 icon-y))
(defmethod get-icon-scale-x ((this hud-money))
0.01)
(defmethod get-icon-scale-y ((this hud-money))
-0.011)
(defskelgroup *fuelcell-naked-sg*
fuelcell-naked
fuelcell-naked-lod0-jg
fuelcell-naked-idle-ja
((fuelcell-naked-lod0-mg (meters 999999)))
:bounds (static-spherem 0 1 0 1.6)
:texture-level 2)
(defpart 313
:init-specs
((:texture (new 'static 'texture-id :index #x31 :page #x2))
(:num 1.0)
(:scale-x (meters 0.4))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit9))
(:userdata 4.0)
(:func 'fuel-cell-hud-orbit-callback)))
(defpart 314
:init-specs
((:texture (new 'static 'texture-id :index #x31 :page #x2))
(:num 1.0)
(:scale-x (meters 0.4))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit9))
(:userdata 5.0)
(:func 'fuel-cell-hud-orbit-callback)))
(defpart 315
:init-specs
((:texture (new 'static 'texture-id :index #x31 :page #x2))
(:num 1.0)
(:scale-x (meters 0.4))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit9))
(:userdata 6.0)
(:func 'fuel-cell-hud-orbit-callback)))
(defpart 316
:init-specs
((:texture (new 'static 'texture-id :index #x31 :page #x2))
(:num 1.0)
(:scale-x (meters 0.4))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit9))
(:userdata 7.0)
(:func 'fuel-cell-hud-orbit-callback)))
(defpart 317
:init-specs
((:texture (new 'static 'texture-id :index #x31 :page #x2))
(:num 1.0)
(:scale-x (meters 0.2))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit9))
(:userdata 9.0)
(:func 'fuel-cell-hud-orbit-callback)))
(defpart 318
:init-specs
((:texture (new 'static 'texture-id :index #x30 :page #x2))
(:num 1.0)
(:scale-x (meters 1.8))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'fuel-cell-hud-center-callback)))
(defpartgroup group-part-hud-power-cell-whole
:id 80
:flags (use-local-clock screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts
((sp-item 318 :flags (launch-asap))
(sp-item 319 :fade-after (meters 35))
(sp-item 320 :fade-after (meters 20))
(sp-item 321 :flags (launch-asap) :period (seconds 12) :length (seconds 0.017))
(sp-item 322 :flags (launch-asap) :period (seconds 12) :length (seconds 0.017))
(sp-item 317 :flags (launch-asap))
(sp-item 313 :flags (launch-asap))
(sp-item 314 :flags (launch-asap))
(sp-item 315 :flags (launch-asap))
(sp-item 316 :flags (launch-asap))))
(defpart 323
:init-specs ((:fade-a -0.53333336)))
(defpart 319
:init-specs
((:texture (new 'static 'texture-id :index #x2 :page #x2))
(:num 0.5)
(:z (meters 22.5))
(:scale-x (meters 0.3) (meters 0.5))
(:rot-x 4)
(:rot-z (degrees 0) (degrees 360))
(:scale-y (meters 0.1) (meters 0.8))
(:r 0.0 1 255.0)
(:g 0.0 1 255.0)
(:b 0.0 1 255.0)
(:a 0.0)
(:scalevel-x (meters 0.009765625))
(:rotvel-z (degrees -0.15) (degrees 0.3))
(:scalevel-y (meters 0.009765625))
(:fade-a 0.35555556)
(:timer (seconds -0.005))
(:flags (bit2 bit3))
(:next-time (seconds 0.3))
(:next-launcher 232)))
(defpart 320
:init-specs
((:texture (new 'static 'texture-id :index #x2 :page #x2))
(:num 0.06)
(:z (meters 22.5))
(:scale-x (meters 1.5) (meters 0.5))
(:rot-x 4)
(:rot-z (degrees 0) (degrees 360))
(:scale-y (meters 0.2))
(:r 0.0 1 255.0)
(:g 0.0 1 255.0)
(:b 0.0 1 255.0)
(:a 0.0)
(:scalevel-x (meters 0.009765625))
(:rotvel-z (degrees -0.15) (degrees 0.3))
(:fade-a 0.32)
(:timer (seconds -0.005))
(:flags (bit2 bit3))
(:next-time (seconds 0.25))
(:next-launcher 232)))
(defpart 321
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:z (meters 22.5))
(:scale-x (meters 3.3))
(:rot-z (degrees 0))
(:scale-y (meters 2.8))
(:r 192.0)
(:g 192.0)
(:b 0.0 128.0)
(:a 64.0)
(:rotvel-z (degrees -0.4))
(:timer (seconds -0.005))
(:flags (bit2 bit3))
(:func 'fuel-cell-hud-starburst-3-callback)))
(defpart 322
:init-specs
((:texture (new 'static 'texture-id :index #x12 :page #x2))
(:num 1.0)
(:z (meters 22.5))
(:scale-x (meters 3.8))
(:rot-z (degrees 0))
(:scale-y (meters 3.3))
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 64.0)
(:rotvel-z (degrees 0.3))
(:timer (seconds -0.005))
(:flags (bit2 bit3))
(:func 'fuel-cell-hud-starburst-4-callback)))
(deftype hud-fuel-cell (hud)
((scale-starburst-3-x float)
(scale-starburst-3-y float)
(scale-starburst-4-x float)
(scale-starburst-4-y float)
(scale-icon float)
(scale-center float)
(icon-pos-y int32)))
(defmethod draw-hud ((this hud-fuel-cell))
(let ((t9-0 (method-of-type hud draw-hud))) (t9-0 this))
(with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf)) (bucket-id debug))
(let* ((string-x (+ (-> this text-x) (* (-> this x-sgn) (-> this offset))))
(string-y (/ (* (+ (-> this text-y) (* (-> this y-sgn) (-> this offset)) (-> this y-offset))
(the int (-> *video-parms* relative-y-scale)))
2)))
(case *hud-collectable-view*
(((hud-collectable-view game-totals))
;; show cells collected/total across entire game
(draw-string-xy-scaled (string-format "~D~%/~D"
(the int (-> *game-info* fuel))
101 ;;(-> (the progress (-> *progress-process* 0)) total-nb-of-power-cells)
)
buf
string-x
(- string-y 5)
(font-color yellow)
(font-flags shadow kerning large)
0.8))
(((hud-collectable-view level-totals))
(let ((lvl-idx (-> *level-task-data-remap* (+ (-> *target* current-level info index) -1)))
(completed-task-count 0))
;; determine number of cells collected in this level
(dotimes (task-idx (-> *level-task-data* lvl-idx nb-of-tasks))
(if (= (get-task-status (-> *level-task-data* lvl-idx task-info task-idx task-id)) (task-status invalid))
(+! completed-task-count 1)))
;; show cells/total collected this level
(draw-string-xy-scaled (string-format "~D~%/~D" completed-task-count (-> *level-task-data* lvl-idx nb-of-tasks))
buf
string-x
(- string-y 5)
(font-color yellow)
(font-flags shadow kerning large)
0.8)))
(((hud-collectable-view original))
;; show original (cells collected across entire game)
(draw-string-xy (string-format "~D" (-> this value))
buf
string-x
string-y
(font-color yellow)
(font-flags shadow kerning large))))))
0
(none))
(defun fuel-cell-hud-orbit-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((s3-0 (-> arg1 key proc))
(v1-1 (the int (-> arg1 user-float)))
(s5-0 (new 'stack-no-clear 'vector)))
(let ((s4-0 (new 'stack-no-clear 'vector)))
(vector<-cspace! s5-0 (-> (the-as hud-fuel-cell s3-0) icons 0 icon 0 node-list data v1-1))
(vector<-cspace! s4-0 (-> (the-as hud-fuel-cell s3-0) icons 0 icon 0 node-list data 3))
(vector-! s5-0 s5-0 s4-0))
(set! (-> arg2 vector 0 x) (* 60.0 (-> s5-0 x)))
(set! (-> arg2 vector 0 y) (* 60.0 (-> s5-0 y)))
(set! (-> arg2 vector 0 z) (* 1024.0 (-> s5-0 z))))
0
(none))
(defun fuel-cell-hud-starburst-3-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(set! (-> arg2 vector 0 w) (-> *hud-parts* fuel-cell 0 scale-starburst-3-x))
(set! (-> arg2 vector 1 w) (-> *hud-parts* fuel-cell 0 scale-starburst-3-y))
0
(none))
(defun fuel-cell-hud-starburst-4-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(set! (-> arg2 vector 0 w) (-> *hud-parts* fuel-cell 0 scale-starburst-4-x))
(set! (-> arg2 vector 1 w) (-> *hud-parts* fuel-cell 0 scale-starburst-4-y))
0
(none))
(defun fuel-cell-hud-center-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* fuel-cell 0 scale-icon))
(f1-0 (-> *hud-parts* fuel-cell 0 scale-center)))
(set-vector! (-> *hud-parts* fuel-cell 0 icons 0 icon 0 root scale) f0-0 f0-0 f0-0 1.0)
(set! (-> arg2 vector 0 w) f1-0)
(set! (-> arg2 vector 1 w) f1-0))
0
(none))
(defmethod hud-update ((this hud-fuel-cell))
(when *target*
(when (!= *master-mode* 'pause)
(let ((a0-2 (-> this icons 0 icon 0 root)))
(set-yaw-angle-clear-roll-pitch! a0-2 (+ (y-angle a0-2) (* 182.04445 (* 0.5 (-> *display* time-adjust-ratio)))))))
(set! (-> this icons 0 icon-y) (-> this icon-pos-y))
(tally-value this (the int (+ 0.5 (-> *target* game fuel))) 0)
(let ((s5-1 (new 'stack-no-clear 'vector)))
(vector<-cspace! s5-1 (-> this icons 0 icon 0 node-list data 3))
(set! (-> this particles 0 pos x) (-> s5-1 x))
(set! (-> this particles 0 pos y) (* 0.5 (-> s5-1 y)))
(set! (-> this particles 0 pos z) (+ 2.0 (* 0.05 (+ -2048.0 (-> s5-1 z)))))))
0
(none))
(defmethod init-particles! ((this hud-fuel-cell) (arg0 int))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-0 (-> this nb-of-particles)))
(set! (-> this particles s5-0) (new 'static 'hud-particle))
(set! (-> this particles s5-0 part) (create-launch-control (-> *part-group-id-table* 80) this))
(set! (-> this particles s5-0 init-pos x) 256.0)
(set! (-> this particles s5-0 init-pos y) 224.0)
(set! (-> this particles s5-0 init-pos z) 1.0)
(set! (-> this particles s5-0 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(dotimes (s5-1 (-> this nb-of-particles))
(if (= (-> this particles s5-1 part matrix) -1) (set! (-> this particles s5-1 part matrix) (sprite-allocate-user-hvdf))))
(when (< (-> this nb-of-icons) 6)
(let ((s5-2 (-> this nb-of-icons)))
(set! (-> this icons s5-2) (new 'static 'hud-icon))
(let ((s4-0 (manipy-spawn (new 'static 'vector :w 1.0) #f *fuelcell-naked-sg* #f :to this)))
(when s4-0
(set! (-> (the-as process-drawable (-> s4-0 0)) draw dma-add-func) dma-add-process-drawable-hud)
(set-vector! (-> (the-as process-drawable (-> s4-0 0)) root trans) 0.0 0.0 0.0 1.0)
(set-vector! (-> (the-as process-drawable (-> s4-0 0)) root scale) 0.009 0.009 0.009 1.0)
(if #f (send-event (ppointer->process s4-0) 'trans-hook #f)))
(set! (-> this icons s5-2 icon) (the-as (pointer manipy) s4-0))
(when s4-0
(logior! (-> s4-0 0 mask) (process-mask pause))
(logclear! (-> s4-0 0 mask) (process-mask menu progress))
(set! (-> (the-as process-drawable (-> s4-0 0)) root trans z) 2048.0)
(set! (-> this icons s5-2 icon-x) 256)
(set! (-> this icons s5-2 icon-y) 62)
(set! (-> this icons s5-2 icon-z) 0)
(set! (-> this icons s5-2 scale-x) 0.009)
(set! (-> this icons s5-2 scale-y) 0.009))))
(+! (-> this nb-of-icons) 1))
(set! (-> this text-x) 276)
(set! (-> this text-y) 45)
(set! (-> this x-sgn) 0)
(set! (-> this y-sgn) -1)
(set! (-> this increment-on-event) #t)
(set! (-> this skip-particle) -2)
(set-pos-and-scale this (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal))
(let ((s5-4 (new 'stack-no-clear 'quaternion)))
(quaternion-axis-angle! s5-4 0.0 1.0 0.0 16384.0)
(quaternion*! (-> this icons 0 icon 0 root quat) s5-4 (-> this icons 0 icon 0 root quat)))
0
(none))
(defmethod set-pos-and-scale ((this hud-fuel-cell) (arg0 symbol) (arg1 symbol))
(cond
(arg0
(set! (-> this scale-starburst-3-x) 10240.0)
(set! (-> this scale-starburst-3-y) 9420.8)
(set! (-> this scale-starburst-4-x) 9420.8)
(set! (-> this scale-starburst-4-y) 8192.0)
(set! (-> this scale-icon) 0.007)
(set! (-> this scale-center) 6144.0)
(set! (-> this icon-pos-y) 62))
(else
(set! (-> this scale-starburst-3-x) 12288.0)
(set! (-> this scale-starburst-3-y) 10240.0)
(set! (-> this scale-starburst-4-x) 12288.0)
(set! (-> this scale-starburst-4-y) 10240.0)
(set! (-> this scale-icon) 0.009)
(set! (-> this scale-center) 7372.8)
(set! (-> this icon-pos-y) 62)))
(if arg1 (set! (-> this icon-pos-y) (the int (* (the float (-> this icon-pos-y)) (if arg0 1.1 1.14)))))
0
(none))
(defpartgroup group-part-hud-buzzer
:id 81
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 324 :flags (launch-asap) :binding 325) (sp-item 325 :flags (start-dead launch-asap))))
(defpart 324
:init-specs
((:texture (new 'static 'texture-id :index #x2a :page #x2))
(:num 1.0)
(:scale-x (meters 2.2))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 0.0)
(:timer (seconds -0.005))
(:flags (bit9))))
(defpart 325
:init-specs
((:texture (new 'static 'texture-id :index #x2a :page #x2))
(:num 1.0)
(:x (meters 0))
(:y (meters 1.3333334))
(:z (meters 0.1))
(:scale-x (meters 1.8))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:omega 0.0)
(:vel-x (meters 0.053333335))
(:vel-z (meters 0))
(:timer (seconds -0.005))
(:flags (bit2 bit7 bit9))
(:func 'part-hud-buzzer-func)))
(deftype hud-buzzers (hud)
((scale float)
(text-y-offset int32)))
(defun part-hud-buzzer-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* buzzers 0 scale))) (set! (-> arg2 vector 0 w) f0-0) (set! (-> arg2 vector 1 w) f0-0))
(none))
(defmethod draw-hud ((this hud-buzzers))
(let ((t9-0 (method-of-type hud draw-hud))) (t9-0 this))
(set! (-> this text-y) (+ (if (nonzero? (-> this next-y-offset)) (-> this text-y-offset) 0) 362))
(with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf)) (bucket-id debug))
(let* ((string-x (+ (-> this text-x) (* (-> this x-sgn) (-> this offset))))
(string-y (/ (* (+ (-> this text-y) (* (-> this y-sgn) (-> this offset)) (-> this y-offset))
(the int (-> *video-parms* relative-y-scale)))
2)))
(case *hud-collectable-view*
(((hud-collectable-view game-totals))
;; show flies collected/total across entire game
(draw-string-xy-scaled (string-format " ~D~% /~D"
(the int (-> *game-info* buzzer-total))
112 ;; (-> (the progress (-> *progress-process* 0)) total-nb-of-buzzers)
)
buf
string-x
(- string-y 5)
(font-color yellow)
(font-flags shadow kerning large)
0.8))
(((hud-collectable-view level-totals))
(let ((lvl-idx (-> *level-task-data-remap* (+ (-> *target* current-level info index) -1))))
;; show flies collected/total this level
(draw-string-xy-scaled (string-format " ~D~% /~D"
(buzzer-count *game-info*
(-> *level-task-data* lvl-idx task-info (-> *level-task-data* lvl-idx buzzer-task-index) task-id))
(-> *game-counts* data lvl-idx buzzer-count))
buf
string-x
(- string-y 5)
(font-color yellow)
(font-flags shadow kerning large)
0.8)))
(((hud-collectable-view original))
;; show original (flies collected this level)
(draw-string-xy (string-format " ~D" (-> this value))
buf
string-x
string-y
(font-color yellow)
(font-flags shadow kerning large))))))
0
(none))
(defmethod hud-update ((this hud-buzzers))
(if *target* (tally-value this (the int (+ 0.5 (-> *target* fact buzzer))) 0))
0
(none))
(defmethod init-particles! ((this hud-buzzers) (arg0 int))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-0 (-> this nb-of-particles)))
(set! (-> this particles s5-0) (new 'static 'hud-particle))
(set! (-> this particles s5-0 part) (create-launch-control (-> *part-group-id-table* 81) this))
(set! (-> this particles s5-0 init-pos x) 60.0)
(set! (-> this particles s5-0 init-pos y) 380.0)
(set! (-> this particles s5-0 init-pos z) 1.0)
(set! (-> this particles s5-0 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(dotimes (s5-1 (-> this nb-of-particles))
(if (= (-> this particles s5-1 part matrix) -1) (set! (-> this particles s5-1 part matrix) (sprite-allocate-user-hvdf))))
(set-pos-and-scale this (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal))
(set! (-> this text-x) 85)
(set! (-> this text-y) 362)
(set! (-> this x-sgn) -1)
(set! (-> this y-sgn) 1)
(set! (-> this text-y-offset) 0)
(set! (-> this increment-on-event) #t)
0
(none))
(defmethod get-icon-pos-x ((this hud-buzzers))
(-> this text-x))
(defmethod get-icon-pos-y ((this hud-buzzers))
(+ (if (= (-> *setting-control* current video-mode) 'pal) (+ (-> this text-y) 120) (+ (-> this text-y) 50))
(-> this next-y-offset)))
(defmethod get-icon-scale-x ((this hud-buzzers))
0.008)
(defmethod get-icon-scale-y ((this hud-buzzers))
-0.008)
(defmethod set-pos-and-scale ((this hud-buzzers) (arg0 symbol) (arg1 symbol))
(cond
(arg0 (set! (-> this scale) 6553.6) (set! (-> this text-y-offset) -40))
(else (set! (-> this scale) 7372.8) (set! (-> this text-y-offset) 0) 0))
0
(none))
(defpartgroup group-part-hud-eco-timer
:id 82
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 327 :flags (launch-asap))))
(defpartgroup group-part-hud-eco-timer-backing
:id 83
:flags (screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 328 :flags (launch-asap))))
(defpart 327
:init-specs
((:texture (new 'static 'texture-id :index #x2b :page #x2))
(:num 1.0)
(:scale-x (meters 3.2))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 128.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-eco-timer-func)))
(defpart 328
:init-specs
((:texture (new 'static 'texture-id :index #x3 :page #x2))
(:num 1.0)
(:scale-x (meters 2.5))
(:scale-y :copy scale-x)
(:r 128.0)
(:g 100.0)
(:b 63.0)
(:a 64.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-eco-timer-backing-func)))
(defpartgroup group-part-hud-timer-blue
:id 84
:flags (use-local-clock screen-space)
:bounds (static-bspherem 0 0 0 100)
:parts ((sp-item 329 :flags (launch-asap)) (sp-item 330 :flags (launch-asap)) (sp-item 331 :flags (launch-asap))))
(defpart 329
:init-specs
((:texture (new 'static 'texture-id :index #x32 :page #x2))
(:num 1.0)
(:scale-x (meters 2))
(:scale-y :copy scale-x)
(:r 0.0)
(:g 32.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-eco-timer-01-func)))
(defpart 330
:init-specs
((:texture (new 'static 'texture-id :index #x32 :page #x2))
(:num 1.0)
(:scale-x (meters 2))
(:scale-y :copy scale-x)
(:r 0.0)
(:g 32.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-eco-timer-02-func)))
(defpart 331
:init-specs
((:texture (new 'static 'texture-id :index #x32 :page #x2))
(:num 1.0)
(:scale-x (meters 2))
(:scale-y :copy scale-x)
(:r 0.0)
(:g 32.0)
(:b 128.0)
(:a 128.0)
(:timer (seconds -0.005))
(:flags (bit2 bit9))
(:func 'part-hud-eco-timer-03-func)))
(deftype hud-power (hud)
((scale-timer float)
(scale-backing float)
(scale-blue float)))
(defun calculate-rotation-and-color-for-slice ((arg0 int) (arg1 float) (arg2 int) (arg3 int) (arg4 int) (arg5 matrix))
(cond
((>= 0.0 arg1) (set! (-> arg5 vector 1 z) -16566.045))
(else
(let ((v1-1 arg0))
(cond
((zero? v1-1)
(if (< 1.0 arg1)
(set! (-> arg5 vector 1 z) 910.2222)
(set! (-> arg5 vector 1 z) (* 182.04445 (+ 5.0 (* 263.0 (- 1.0 arg1)))))))
((= v1-1 1)
(if (< 0.6666667 arg1)
(set! (-> arg5 vector 1 z) 17294.223)
(set! (-> arg5 vector 1 z) (* 182.04445 (+ 95.0 (* 173.0 (- 1.0 (* 1.5 arg1))))))))
((= v1-1 2)
(if (< 0.33333334 arg1)
(set! (-> arg5 vector 1 z) 33678.223)
(set! (-> arg5 vector 1 z) (* 182.04445 (+ 185.0 (* 83.0 (- 1.0 (* 3.0 arg1))))))))))))
;; low eco flashing
;; og:preserve-this modified to support high fps
(if (and (< 0.0 arg1)
(and (< arg1 0.2) (zero? (logand (the int (* DISPLAY_FPS_RATIO (-> *display* integral-frame-counter))) 4))))
(set! arg3 (* arg3 2)))
(set! (-> arg5 vector 2 x) (the float arg2))
(set! (-> arg5 vector 2 y) (the float arg3))
(set! (-> arg5 vector 2 z) (the float arg4))
0
(none))
(defun part-hud-eco-timer-01-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-2 (/ (the float
(the-as uint
(- (-> *target* fact eco-timeout)
(the-as uint (- (-> *display* game-frame-counter) (-> *target* fact eco-pickup-time))))))
(the float (the-as uint (-> *FACT-bank* eco-full-timeout)))))
(a2-1 0)
(a3-0 64)
(t0-0 128))
(case (-> *target* fact eco-type)
(((pickup-type eco-yellow)) (set! a2-1 128) (set! a3-0 96) (set! t0-0 0))
(((pickup-type eco-red)) (set! a2-1 128) (set! a3-0 32) (set! t0-0 0))
(((pickup-type eco-green)) (set! a2-1 0) (set! a3-0 128) (set! t0-0 32)))
(calculate-rotation-and-color-for-slice 0 f0-2 a2-1 a3-0 t0-0 arg2))
(let ((f0-3 (-> *hud-parts* power 0 scale-blue))) (set! (-> arg2 vector 0 w) f0-3) (set! (-> arg2 vector 1 w) f0-3))
0
(none))
(defun part-hud-eco-timer-02-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-2 (/ (the float
(the-as uint
(- (-> *target* fact eco-timeout)
(the-as uint (- (-> *display* game-frame-counter) (-> *target* fact eco-pickup-time))))))
(the float (the-as uint (-> *FACT-bank* eco-full-timeout)))))
(a2-1 0)
(a3-0 64)
(t0-0 128))
(case (-> *target* fact eco-type)
(((pickup-type eco-yellow)) (set! a2-1 128) (set! a3-0 96) (set! t0-0 0))
(((pickup-type eco-red)) (set! a2-1 128) (set! a3-0 32) (set! t0-0 0))
(((pickup-type eco-green)) (set! a2-1 0) (set! a3-0 128) (set! t0-0 32)))
(calculate-rotation-and-color-for-slice 1 f0-2 a2-1 a3-0 t0-0 arg2))
(let ((f0-3 (-> *hud-parts* power 0 scale-blue))) (set! (-> arg2 vector 0 w) f0-3) (set! (-> arg2 vector 1 w) f0-3))
0
(none))
(defun part-hud-eco-timer-03-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-2 (/ (the float
(the-as uint
(- (-> *target* fact eco-timeout)
(the-as uint (- (-> *display* game-frame-counter) (-> *target* fact eco-pickup-time))))))
(the float (the-as uint (-> *FACT-bank* eco-full-timeout)))))
(a2-1 0)
(a3-0 64)
(t0-0 128))
(case (-> *target* fact eco-type)
(((pickup-type eco-yellow)) (set! a2-1 128) (set! a3-0 96) (set! t0-0 0))
(((pickup-type eco-red)) (set! a2-1 128) (set! a3-0 32) (set! t0-0 0))
(((pickup-type eco-green)) (set! a2-1 0) (set! a3-0 128) (set! t0-0 32)))
(calculate-rotation-and-color-for-slice 2 f0-2 a2-1 a3-0 t0-0 arg2))
(let ((f0-3 (-> *hud-parts* power 0 scale-blue))) (set! (-> arg2 vector 0 w) f0-3) (set! (-> arg2 vector 1 w) f0-3))
0
(none))
(defun part-hud-eco-timer-backing-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* power 0 scale-backing))) (set! (-> arg2 vector 0 w) f0-0) (set! (-> arg2 vector 1 w) f0-0))
0
(none))
(defun part-hud-eco-timer-func ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix))
(let ((f0-0 (-> *hud-parts* power 0 scale-timer))) (set! (-> arg2 vector 0 w) f0-0) (set! (-> arg2 vector 1 w) f0-0))
0
(none))
(defmethod hud-update ((this hud-power))
(if *target*
(tally-value this
(max 0
(min (the-as int
(- (-> *target* fact eco-timeout)
(the-as uint (- (-> *display* game-frame-counter) (-> *target* fact eco-pickup-time)))))
(the-as int (-> *target* fact eco-timeout))))
(the-as int (-> *target* fact eco-timeout))))
0
(none))
(defmethod init-particles! ((this hud-power) (arg0 int))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-0 (-> this nb-of-particles)))
(set! (-> this particles s5-0) (new 'static 'hud-particle))
(set! (-> this particles s5-0 part) (create-launch-control (-> *part-group-id-table* 83) this))
(set! (-> this particles s5-0 init-pos x) 435.0)
(set! (-> this particles s5-0 init-pos y) 370.0)
(set! (-> this particles s5-0 init-pos z) 10.0)
(set! (-> this particles s5-0 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-1 (-> this nb-of-particles)))
(set! (-> this particles s5-1) (new 'static 'hud-particle))
(set! (-> this particles s5-1 part) (create-launch-control (-> *part-group-id-table* 84) this))
(set! (-> this particles s5-1 init-pos x) 432.0)
(set! (-> this particles s5-1 init-pos y) 368.0)
(set! (-> this particles s5-1 init-pos z) 3.0)
(set! (-> this particles s5-1 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(when (< (-> this nb-of-particles) (-> this max-nb-of-particles))
(let ((s5-2 (-> this nb-of-particles)))
(set! (-> this particles s5-2) (new 'static 'hud-particle))
(set! (-> this particles s5-2 part) (create-launch-control (-> *part-group-id-table* 82) this))
(set! (-> this particles s5-2 init-pos x) 435.0)
(set! (-> this particles s5-2 init-pos y) 370.0)
(set! (-> this particles s5-2 init-pos z) 2.0)
(set! (-> this particles s5-2 part matrix) -1))
(+! (-> this nb-of-particles) 1))
(dotimes (s5-3 (-> this nb-of-particles))
(if (= (-> this particles s5-3 part matrix) -1) (set! (-> this particles s5-3 part matrix) (sprite-allocate-user-hvdf))))
(set-pos-and-scale this (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal))
(set! (-> this x-sgn) 1)
(set! (-> this y-sgn) 1)
0
(none))
(defmethod set-pos-and-scale ((this hud-power) (arg0 symbol) (arg1 symbol))
(cond
(arg0 (set! (-> this scale-blue) 7168.0) (set! (-> this scale-timer) 11468.8) (set! (-> this scale-backing) 8960.0))
(else (set! (-> this scale-blue) 8192.0) (set! (-> this scale-timer) 13107.2) (set! (-> this scale-backing) 10240.0)))
;; og:preserve-this
(#when PC_PORT
(let ((base-x (-> this particles 2 init-pos x)))
(+! base-x (* (- 512.0 base-x) (- 1.0 (-> *pc-settings* aspect-ratio-reciprocal))))
(set! (-> this particles 0 init-pos x) 435.0)
(set! (-> this particles 1 init-pos x) 432.0)
(set! (-> this particles 2 init-pos x) 435.0)
(when (not (-> *pc-settings* use-vis?))
(dotimes (i (-> this nb-of-particles))
(set! (-> this particles i init-pos x)
(+ base-x (* (-> *pc-settings* aspect-ratio-reciprocal) (- (-> this particles i init-pos x) base-x))))))))
0
(none))
(defun activate-hud ((arg0 process))
(set! (-> *hud-parts* pickups) (process-spawn hud-pickups :init hud-init-by-other 0 :to arg0))
(set! (-> *hud-parts* money) (process-spawn hud-money :init hud-init-by-other 0 :to arg0))
(set! (-> *hud-parts* fuel-cell) (process-spawn hud-fuel-cell :init hud-init-by-other 0 :to arg0))
(set! (-> *hud-parts* health) (process-spawn hud-health :init hud-init-by-other 0 :to arg0))
(set! (-> *hud-parts* buzzers) (process-spawn hud-buzzers :init hud-init-by-other 0 :to arg0))
(set! (-> *hud-parts* power) (process-spawn hud-power :init hud-init-by-other 0 :to arg0))
(set! (-> *hud-parts* bike-speed) (the-as (pointer hud-bike-speed) #f))
(set! (-> *hud-parts* bike-heat) (the-as (pointer hud-bike-heat) #f))
(set! (-> *hud-parts* money-all) (the-as (pointer hud-money-all) #f))
0
(none))
(defun hide-hud ()
(when *target*
(dotimes (gp-0 9)
(if (-> *hud-parts* parts gp-0) (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'hide))))
0
(none))
(defun hide-bottom-hud ()
(when *target*
(dotimes (gp-0 4)
(if (-> *hud-parts* parts (+ gp-0 4)) (send-event (ppointer->process (-> *hud-parts* parts (+ gp-0 4))) 'hide))))
0
(none))
(defun disable-hud ((arg0 int))
(when *target*
(dotimes (s5-0 9)
(when (-> *hud-parts* parts s5-0)
(if (or (!= (-> *hud-parts* parts s5-0) arg0) (zero? (-> (the-as (pointer hud) (-> *hud-parts* parts s5-0)) 0 value)))
(send-event (ppointer->process (-> *hud-parts* parts s5-0)) 'hide))
(if (!= (-> *hud-parts* parts s5-0) arg0) (send-event (ppointer->process (-> *hud-parts* parts s5-0)) 'disable)))))
0
(none))
(defun enable-hud ()
(when *target*
(dotimes (gp-0 9)
(if (-> *hud-parts* parts gp-0) (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'enable))))
0
(none))
(defun hide-hud-quick ()
(when *target*
(dotimes (gp-0 9)
(if (-> *hud-parts* parts gp-0) (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'hide-quick))))
0
(none))
(defun show-hud ()
(when (and *target* (or (not *progress-process*) (hidden? (-> *progress-process* 0))))
(dotimes (gp-0 9)
(if (-> *hud-parts* parts gp-0) (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'show))))
0
(none))
(defun set-hud-aspect-ratio ((arg0 symbol) (arg1 symbol))
(let ((gp-0 (= arg0 'aspect16x9))
(s5-0 (= arg1 'pal)))
(when *target*
(dotimes (s4-0 9)
(if (-> *hud-parts* parts s4-0) (set-pos-and-scale (-> (the-as (pointer hud) (-> *hud-parts* parts s4-0)) 0) gp-0 s5-0)))))
0
(none))
(defun hud-hidden? ()
(local-vars (gp-0 symbol))
(cond
(*target*
(set! gp-0 #t)
(dotimes (s5-0 9)
(when (-> *hud-parts* parts s5-0)
(if (not (hidden? (-> (the-as (pointer hud) (-> *hud-parts* parts s5-0)) 0))) (set! gp-0 #f)))))
(else (set! gp-0 #t)))
gp-0)
(defun bottom-hud-hidden? ()
(local-vars (gp-0 symbol))
(cond
(*target*
(set! gp-0 #t)
(dotimes (s5-0 4)
(when (-> *hud-parts* parts (+ s5-0 4))
(if (not (hidden? (-> (the-as (pointer hud) (-> *hud-parts* parts (+ s5-0 4))) 0))) (set! gp-0 #f)))))
(else (set! gp-0 #t)))
gp-0)
(defun activate-orb-all ((arg0 int))
(if (not (-> *hud-parts* money-all))
(set! (-> *hud-parts* money-all) (process-spawn hud-money-all :init hud-init-by-other arg0 :to *target*)))
0)
(defbehavior convert-to-hud-object process-drawable ((arg0 process-drawable) (arg1 hud))
(when arg1
(logclear! (-> arg0 mask) (process-mask actor-pause))
(let ((s4-0 (new 'stack-no-clear 'vector)))
(transform-point-vector-scale! s4-0 (-> arg0 root trans))
(set! (-> arg0 root trans x) (+ -2048.0 (-> s4-0 x)))
(set! (-> arg0 root trans y) (* 2.0 (+ -2048.0 (-> s4-0 y)))))
(set! (-> arg0 root trans z) 9999999.0)
(set! (-> arg0 root trans w) 1.0)
(set-vector! (-> arg0 root scale) (get-icon-scale-x arg1) (get-icon-scale-y arg1) (get-icon-scale-x arg1) 1.0)
(set! (-> arg0 draw dma-add-func) dma-add-process-drawable-hud)
(go hud-collecting (process->handle arg1)))
0
(none))