mirror of
https://github.com/open-goal/jak-project
synced 2026-06-30 11:51:55 -04:00
Autosplitter - add per-level fly & orb counts (#2192)
Adds fields to the autosplit struct for the number of orbs and scout flies collected in each level. This can be used for autosplitting on orb/fly counts Tested together with https://github.com/open-goal/speedrunning/pull/8 [autosplit_orbs.mp4](https://user-images.githubusercontent.com/2515356/216900730-92b7b947-cc4a-4629-b7f2-1dc10248c9e9.mp4) [autosplit_fly.mp4](https://user-images.githubusercontent.com/2515356/216900759-e3042426-7cb0-4cb9-ae05-9c44827df6a0.mp4)  
This commit is contained in:
@@ -153,33 +153,54 @@
|
||||
;; maps options to a progress screen
|
||||
(define *options-remap* (new 'static 'boxed-array :type (array game-option) :length 0 :allocated-length (#if (not PC_PORT) 35 60)))
|
||||
|
||||
;; TODO probably an enum.
|
||||
;; added in PC port
|
||||
(defenum level-task-data-index
|
||||
:type int32
|
||||
(training 0)
|
||||
(village1 1)
|
||||
(beach 2)
|
||||
(jungle 3)
|
||||
(misty 4)
|
||||
(firecanyon 5)
|
||||
(village2 6)
|
||||
(sunken 7)
|
||||
(swamp 8)
|
||||
(rolling 9)
|
||||
(ogre 10)
|
||||
(village3 11)
|
||||
(snow 12)
|
||||
(cave 13)
|
||||
(lavatube 14)
|
||||
(citadel 15)
|
||||
(max 16)
|
||||
)
|
||||
|
||||
;; maps level-info indices to the appropriate offset in *level-task-data*
|
||||
(define *level-task-data-remap*
|
||||
(new 'static 'boxed-array :type int32
|
||||
0
|
||||
1
|
||||
2
|
||||
3 ;; jungle?
|
||||
3 ;; jungleb?
|
||||
4
|
||||
5
|
||||
6
|
||||
7 ;; sunken?
|
||||
7 ;; sunkenb?
|
||||
8
|
||||
9
|
||||
10
|
||||
11
|
||||
12
|
||||
13 ;; maincave?
|
||||
13 ;; robocave?
|
||||
13 ;; darkcave?
|
||||
14
|
||||
15 ;; citadel?
|
||||
15 ;; finalboss?
|
||||
4 ;; demo?
|
||||
4 ;; intro?
|
||||
(level-task-data-index training)
|
||||
(level-task-data-index village1)
|
||||
(level-task-data-index beach)
|
||||
(level-task-data-index jungle) ;; jungle?
|
||||
(level-task-data-index jungle) ;; jungleb?
|
||||
(level-task-data-index misty)
|
||||
(level-task-data-index firecanyon)
|
||||
(level-task-data-index village2)
|
||||
(level-task-data-index sunken) ;; sunken?
|
||||
(level-task-data-index sunken) ;; sunkenb?
|
||||
(level-task-data-index swamp)
|
||||
(level-task-data-index rolling)
|
||||
(level-task-data-index ogre)
|
||||
(level-task-data-index village3)
|
||||
(level-task-data-index snow)
|
||||
(level-task-data-index cave) ;; maincave?
|
||||
(level-task-data-index cave) ;; robocave?
|
||||
(level-task-data-index cave) ;; darkcave?
|
||||
(level-task-data-index lavatube)
|
||||
(level-task-data-index citadel) ;; citadel?
|
||||
(level-task-data-index citadel) ;; finalboss?
|
||||
(level-task-data-index misty) ;; demo?
|
||||
(level-task-data-index misty) ;; intro?
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -2041,7 +2041,7 @@
|
||||
|
||||
;; Custom or Modified Code
|
||||
(goal-src "pc/features/autosplit-h.gc")
|
||||
(goal-src "pc/features/autosplit.gc" "autosplit-h" "task-control-h")
|
||||
(goal-src "pc/features/autosplit.gc" "autosplit-h" "task-control-h" "progress-static")
|
||||
(goal-src "pc/features/speedruns.gc" "speedruns-h" "autosplit-h")
|
||||
(goal-src "pc/pckernel-h.gc" "dma-buffer")
|
||||
(goal-src "pc/util/pc-anim-util.gc" "target-h")
|
||||
|
||||
@@ -11,7 +11,41 @@
|
||||
(num-power-cells uint32)
|
||||
(num-orbs uint32)
|
||||
(num-scout-flies uint32)
|
||||
(padding-stats uint8 200) ;; padding for future growth
|
||||
;; orbs per-level
|
||||
(training-num-orbs uint8)
|
||||
(village1-num-orbs uint8)
|
||||
(beach-num-orbs uint8)
|
||||
(jungle-num-orbs uint8)
|
||||
(misty-num-orbs uint8)
|
||||
(firecanyon-num-orbs uint8)
|
||||
(village2-num-orbs uint8)
|
||||
(sunken-num-orbs uint8)
|
||||
(swamp-num-orbs uint8)
|
||||
(rolling-num-orbs uint8)
|
||||
(ogre-num-orbs uint8)
|
||||
(village3-num-orbs uint8)
|
||||
(snow-num-orbs uint8)
|
||||
(cave-num-orbs uint8)
|
||||
(lavatube-num-orbs uint8)
|
||||
(citadel-num-orbs uint8)
|
||||
;; scout flies per-level
|
||||
(training-num-scout-flies uint8)
|
||||
(village1-num-scout-flies uint8)
|
||||
(beach-num-scout-flies uint8)
|
||||
(jungle-num-scout-flies uint8)
|
||||
(misty-num-scout-flies uint8)
|
||||
(firecanyon-num-scout-flies uint8)
|
||||
(village2-num-scout-flies uint8)
|
||||
(sunken-num-scout-flies uint8)
|
||||
(swamp-num-scout-flies uint8)
|
||||
(rolling-num-scout-flies uint8)
|
||||
(ogre-num-scout-flies uint8)
|
||||
(village3-num-scout-flies uint8)
|
||||
(snow-num-scout-flies uint8)
|
||||
(cave-num-scout-flies uint8)
|
||||
(lavatube-num-scout-flies uint8)
|
||||
(citadel-num-scout-flies uint8)
|
||||
(padding-stats uint8 168) ;; padding for future growth
|
||||
;; loading/cutscene/control related info
|
||||
(game-hash uint32)
|
||||
(in-cutscene? symbol)
|
||||
|
||||
@@ -15,6 +15,41 @@
|
||||
(set! (-> *autosplit-info-jak1* num-orbs) (the int (-> *game-info* money-total)))
|
||||
(set! (-> *autosplit-info-jak1* num-scout-flies) (the int (-> *game-info* buzzer-total)))
|
||||
|
||||
;; per-level orb/fly counts
|
||||
(set! (-> *autosplit-info-jak1* training-num-orbs) (-> *game-info* money-per-level (level-task-data-index training)))
|
||||
(set! (-> *autosplit-info-jak1* village1-num-orbs) (-> *game-info* money-per-level (level-task-data-index village1)))
|
||||
(set! (-> *autosplit-info-jak1* beach-num-orbs) (-> *game-info* money-per-level (level-task-data-index beach)))
|
||||
(set! (-> *autosplit-info-jak1* jungle-num-orbs) (-> *game-info* money-per-level (level-task-data-index jungle)))
|
||||
(set! (-> *autosplit-info-jak1* misty-num-orbs) (-> *game-info* money-per-level (level-task-data-index misty)))
|
||||
(set! (-> *autosplit-info-jak1* firecanyon-num-orbs) (-> *game-info* money-per-level (level-task-data-index firecanyon)))
|
||||
(set! (-> *autosplit-info-jak1* village2-num-orbs) (-> *game-info* money-per-level (level-task-data-index village2)))
|
||||
(set! (-> *autosplit-info-jak1* sunken-num-orbs) (-> *game-info* money-per-level (level-task-data-index sunken)))
|
||||
(set! (-> *autosplit-info-jak1* swamp-num-orbs) (-> *game-info* money-per-level (level-task-data-index swamp)))
|
||||
(set! (-> *autosplit-info-jak1* rolling-num-orbs) (-> *game-info* money-per-level (level-task-data-index rolling)))
|
||||
(set! (-> *autosplit-info-jak1* ogre-num-orbs) (-> *game-info* money-per-level (level-task-data-index ogre)))
|
||||
(set! (-> *autosplit-info-jak1* village3-num-orbs) (-> *game-info* money-per-level (level-task-data-index village3)))
|
||||
(set! (-> *autosplit-info-jak1* snow-num-orbs) (-> *game-info* money-per-level (level-task-data-index snow)))
|
||||
(set! (-> *autosplit-info-jak1* cave-num-orbs) (-> *game-info* money-per-level (level-task-data-index cave)))
|
||||
(set! (-> *autosplit-info-jak1* lavatube-num-orbs) (-> *game-info* money-per-level (level-task-data-index lavatube)))
|
||||
(set! (-> *autosplit-info-jak1* citadel-num-orbs) (-> *game-info* money-per-level (level-task-data-index citadel)))
|
||||
|
||||
(set! (-> *autosplit-info-jak1* training-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index training) task-info (-> *level-task-data* (level-task-data-index training) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* village1-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index village1) task-info (-> *level-task-data* (level-task-data-index village1) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* beach-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index beach) task-info (-> *level-task-data* (level-task-data-index beach) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* jungle-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index jungle) task-info (-> *level-task-data* (level-task-data-index jungle) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* misty-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index misty) task-info (-> *level-task-data* (level-task-data-index misty) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* firecanyon-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index firecanyon) task-info (-> *level-task-data* (level-task-data-index firecanyon) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* village2-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index village2) task-info (-> *level-task-data* (level-task-data-index village2) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* sunken-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index sunken) task-info (-> *level-task-data* (level-task-data-index sunken) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* swamp-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index swamp) task-info (-> *level-task-data* (level-task-data-index swamp) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* rolling-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index rolling) task-info (-> *level-task-data* (level-task-data-index rolling) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* ogre-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index ogre) task-info (-> *level-task-data* (level-task-data-index ogre) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* village3-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index village3) task-info (-> *level-task-data* (level-task-data-index village3) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* snow-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index snow) task-info (-> *level-task-data* (level-task-data-index snow) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* cave-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index cave) task-info (-> *level-task-data* (level-task-data-index cave) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* lavatube-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index lavatube) task-info (-> *level-task-data* (level-task-data-index lavatube) buzzer-task-index) task-id)))
|
||||
(set! (-> *autosplit-info-jak1* citadel-num-scout-flies) (buzzer-count *game-info* (-> *level-task-data* (level-task-data-index citadel) task-info (-> *level-task-data* (level-task-data-index citadel) buzzer-task-index) task-id)))
|
||||
|
||||
;; loading/cutscene related flags
|
||||
(set! (-> *autosplit-info-jak1* in-cutscene?) (-> *pc-settings* movie?))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user