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)


![image](https://user-images.githubusercontent.com/2515356/216901323-ffae97c8-3557-45f8-91db-cd86d76dd498.png)

![image](https://user-images.githubusercontent.com/2515356/216901026-59eb3fb6-281d-489d-a50c-010760246072.png)
This commit is contained in:
Matt Dallmeyer
2023-02-07 16:41:48 -08:00
committed by GitHub
parent 45f7770ca2
commit fc5c75534d
4 changed files with 116 additions and 26 deletions
@@ -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?
)
)
+1 -1
View File
@@ -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")
+35 -1
View File
@@ -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)
+35
View File
@@ -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?))