Hamazing/source/hamazing/trackmo_script.asm
chrisly42 9c48c11cd1 Big "squashed" update to latest version of Framework.
- Bugfix: WaitForFrame was completely broken. Now also caters for race-condition that would have waited one extra frame.
- Bugfix: InitPart would overwrite innocent memory (reported by Gigabates and Losso)
- Bugfix: Palette LERP had wrong bias.
- Removed extra paths in include statement, use default include paths instead
- Added Raspberry Casket no-jitter background calc mode (FW_MUSIC_PLAYER_CHOICE = 6)
- Updated Raspberry Casket to V2.0 presto branch (WIP)
- Removed fw_FrameCounterLong, use fw_FrameCounter-2 for debug purposes
- Support for blue noise palette LERPing (like in Is Real). Provide your own blue noise table (4 KB), stuff it into fw_BlueNoiseTablePtr, set FW_PALETTE_LERP_SUPPORT to 2
- Music tick routine is now replaceable during runtime (fw_MusicTickRoutine)
- Support for softints and audio interrupts
- LMB exit can also be disabled dynamically when using FW_LMB_EXIT_SUPPORT = 2 and fw_DisableLMBExit != 0
- Added LSP Micro support and LSP Nano (custom format that uses note pitches instead of periods)
- Minor other things
2024-09-15 17:43:33 +02:00

439 lines
12 KiB
NASM

; Storyboard:
; Partname | Runtime | Pt | Chip Hunk + Dynamic = Total | Fast Hunk + Dynamic = Total | Disk Space | LOC
; Gotham | 0:13.5 | -- | 9 KB 28 KB 37 KB | 3 KB 16 KB 19 KB | 4+17 KB | 1200
; -----------------------------------------------------------------------------------------------------------
; Music | 2:35 | 19 | 156 KB | 15 KB | 91 KB |
; Bulb | 0:59 | 0 | 54 KB 177 KB 231 KB | 58 KB 194 KB 252 KB | 59 KB | 3700
; STHam | 0:28 | 7 | 87 KB 93 KB 180 KB | 9 KB 0 KB 9 KB | 70 KB | 1800
; Kaleidoscope | 0:54 |10.5| 148 KB 143 KB 291 KB | 19 KB 394 KB 413 KB | 150 KB | 6400
; Hexagon | 0:13 |17.5| 4 KB <64 KB <68 KB | 5 KB 18 KB 23 KB | 4 KB | 900
; -----------------------------------------------------------------------------------------------------------
; Music 2 | 2:35 | 21 | 172 KB | 22 KB | 123 KB |
; Rubbercube | 0:24 | 0 | 0 KB 291 KB 291 KB | 11 KB 44 KB 55 KB | 5 KB | 3000
; Virgillbars | 0:52 | 4 | 15 KB 204 KB 208 KB | 11 KB 244 KB 255 KB | 14 KB | 3300
; Blend | 1:15 | 11 | 43 KB 192 KB 234 KB | 25 KB 401 KB 426 KB | 50+xx KB | 5800
; -----------------------------------------------------------------------------------------------------------
; Music 3 | 1:45 | 14 | 45 KB | 12 KB | 24 KB |
; Endpart | | 0 | 5 KB 159 KB 164 KB | 2 KB 2 KB 4 KB | 3 KB | 900
;
trackmo:
PUTMSG 10,<"%d: Trackmo start!">,fw_FrameCounter-2(a6)
.restart
btst #6,$bfe001
bne.s .part1
lea .secondmusicandgouraudloadinghook(pc),a0
move.l a0,fw_PrePartLaunchHook(a6)
lea .gotham(pc),a0
CALLFW ExecuteNextPart
bra .part2
.part1
lea .gotham(pc),a0
lea .musicandbulbloadinghook(pc),a1
bsr .executenextwithhook
lea .bulb(pc),a0
lea .sthamloadinghook(pc),a1
bsr .executenextwithhook
lea .stham(pc),a0
lea .kaleidoscopeloadinghook(pc),a1
bsr .executenextwithhook
move.l #256*256*2,d0
CALLFW AllocFast
move.l a0,fw_GlobalUserData(a6)
PUTMSG 10,<"Kaleidoscope pattern %p">,a0
; this memory should not go away!
CALLFW PushMemoryState
lea .kaleidoscope(pc),a0
lea .hexagonpreploadinghook(pc),a1
bsr .executenextwithhook
lea .hexagon(pc),a0
lea .secondmusicloadinghook(pc),a1
bsr .executenextwithhook
CALLFW StopMusic
; High/Top memory
CALLFW FlipAllocationDirection
CALLFW PopMemoryState
CALLFW DropCurrentMemoryAllocations
lea .second_music_data(pc),a0
CALLFW FindFile
move.l de_MemorySize(a1),d0
; allocate LSP space
CALLFW AllocFast
move.l a0,fw_MusicData(a6)
; check how much ram we need for samples
lea .second_music_samples(pc),a0
CALLFW FindFile
move.l de_MemorySize(a1),d0
; allocate sample space
CALLFW AllocChip
move.l a0,fw_MusicSamples(a6)
; this memory should not go away!
CALLFW PushMemoryState
lea .decrunch2ndmusic(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
lea .gouraud(pc),a0
CALLFW PreloadPart
; Bottom/Low memory again
CALLFW FlipAllocationDirection
move.l fw_TrackloaderTask(a6),a1
CALLFW WaitUntilTaskFinished
; Free music packed
CALLFW PopMemoryState
; Free kaleidoscope memory
CALLFW PopMemoryState
CALLFW DropCurrentMemoryAllocations
.part2
lea .gouraud(pc),a0
lea .virgillbarsloadinghook(pc),a1
bsr .executenextwithhook
lea .virgillbars(pc),a0
lea .blendloadinghook(pc),a1
bsr .executenextwithhook
lea .blend(pc),a0
lea .unloadpreloaded(pc),a1
bsr .executenextwithhook
CALLFW FlipAllocationDirection
CALLFW PopMemoryState
CALLFW DropCurrentMemoryAllocations
CALLFW FlipAllocationDirection
CALLFW DropCurrentMemoryAllocations
.endpartpart
lea .end_music_data(pc),a0
CALLFW LoadAndDecrunchFile
move.l a0,fw_MusicData(a6)
lea .end_music_samples(pc),a0
CALLFW LoadAndDecrunchFile
move.l a0,fw_MusicSamples(a6)
CALLFW PushMemoryState
lea .endpart(pc),a0
CALLFW ExecuteNextPart
CALLFW StopMusic
CALLFW PopMemoryState
CALLFW DropCurrentMemoryAllocations
clr.w fw_FrameCounter(a6)
bra .restart
.executenextwithhook
move.l a1,fw_PrePartLaunchHook(a6)
CALLFW ExecuteNextPart
rts
;--------------------------------------------------------------------
.musicandbulbloadinghook
lea .psenough(pc),a0
CALLFW FindFile
move.l de_DiskLength(a1),d0
PUSHM a1
CALLFW AllocFast
POPM
move.l a0,fw_GlobalBonusData+gbd_PsPackedBuffer(a6)
move.l de_MemorySize(a1),d0
CALLFW AllocChip
move.l a0,fw_GlobalUserData(a6)
lea .loadmusicandbulb(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.sthamloadinghook
bsr.s .unloadpreloaded
lea .loadstham(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.kaleidoscopeloadinghook
lea .loadkaleidoscope(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.hexagonpreploadinghook
bsr.s .unloadpreloaded
lea .loadhexagon(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.secondmusicloadinghook
bsr.s .unloadpreloaded
lea .loadsecondmusic(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.unloadpreloaded
CALLFW FlipAllocationDirection
CALLFW DropCurrentMemoryAllocations
CALLFW FlipAllocationDirection
rts
.virgillbarsloadinghook
bsr.s .unloadpreloaded
lea .loadvirgillbars(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.blendloadinghook
bsr.s .unloadpreloaded
lea .loadblend(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.endpartloadinghook
bsr.s .unloadpreloaded
lea .loadendpart(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
.secondmusicandgouraudloadinghook
lea .psenough(pc),a0
CALLFW FindFile
move.l de_DiskLength(a1),d0
PUSHM a1
CALLFW AllocFast
POPM
move.l a0,fw_GlobalBonusData+gbd_PsPackedBuffer(a6)
move.l de_MemorySize(a1),d0
CALLFW AllocChip
move.l a0,fw_GlobalUserData(a6)
lea .loadmusicandgouraud(pc),a0
move.l fw_TrackloaderTask(a6),a1
CALLFW AddTask
rts
;--------------------------------------------------------------------
.loadmusicandbulb
lea .psenough(pc),a0
CALLFW FindFile
PUSHM a1
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
CALLFW LoadFileToBuffer
POPM
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
move.l fw_GlobalUserData(a6),a2
CALLFW DecrunchToBuffer
CALLFW FlipAllocationDirection
lea .first_music_data(pc),a0
CALLFW LoadAndDecrunchFile
move.l a0,fw_MusicData(a6)
lea .first_music_samples(pc),a0
CALLFW LoadAndDecrunchFile
move.l a0,fw_MusicSamples(a6)
; this memory should not go away!
CALLFW PushMemoryState
lea .bulb(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.loadstham
CALLFW FlipAllocationDirection
lea .stham(pc),a0
CALLFW PreloadPart
lea .hamphrey(pc),a0
CALLFW LoadFile
move.l a0,fw_GlobalUserData(a6)
CALLFW TrackloaderDiskMotorOff
rts
.loadkaleidoscope
CALLFW Yield
tst.l fw_GlobalUserData(a6)
bne.s .loadkaleidoscope
CALLFW FlipAllocationDirection
CALLFW DropCurrentMemoryAllocations
lea .kaleidoscope(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.loadhexagon
CALLFW FlipAllocationDirection
lea .hexagon(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.loadsecondmusic
lea .second_music_data(pc),a0
CALLFW LoadFile
move.l a0,fw_GlobalBonusData+gbd_LSPPackedBuffer(a6)
lea .second_music_samples(pc),a0
CALLFW LoadFile
move.l a0,fw_GlobalBonusData+gbd_SamplePackedBuffer(a6)
CALLFW PushMemoryState
CALLFW TrackloaderDiskMotorOff
rts
.decrunch2ndmusic
lea .second_music_data(pc),a0
CALLFW FindFile
move.l fw_GlobalBonusData+gbd_LSPPackedBuffer(a6),a0
move.l fw_MusicData(a6),a2
CALLFW DecrunchToBuffer
lea .second_music_samples(pc),a0
CALLFW FindFile
move.l fw_GlobalBonusData+gbd_SamplePackedBuffer(a6),a0
move.l fw_MusicSamples(a6),a2
CALLFW DecrunchToBuffer
rts
.loadvirgillbars
CALLFW FlipAllocationDirection
lea .virgillbars(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.loadendpart
CALLFW Yield
tst.l fw_GlobalUserData(a6)
beq.s .loadendpart
CALLFW FlipAllocationDirection
lea .endpart(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.loadmusicandgouraud
lea .psenough(pc),a0
CALLFW FindFile
PUSHM a1
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
CALLFW LoadFileToBuffer
POPM
move.l fw_GlobalBonusData+gbd_PsPackedBuffer(a6),a0
move.l fw_GlobalUserData(a6),a2
CALLFW DecrunchToBuffer
CALLFW FlipAllocationDirection
lea .second_music_data(pc),a0
CALLFW LoadAndDecrunchFile
move.l a0,fw_MusicData(a6)
lea .second_music_samples(pc),a0
CALLFW LoadAndDecrunchFile
move.l a0,fw_MusicSamples(a6)
; this memory should not go away!
CALLFW PushMemoryState
lea .gouraud(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.loadblend
CALLFW FlipAllocationDirection
lea .blend(pc),a0
CALLFW PreloadPart
CALLFW TrackloaderDiskMotorOff
rts
.gotham dc.b "Gotham",0
.bulb dc.b "Bulb",0
.kaleidoscope
dc.b "Kaleidoscope",0
.hexagon
dc.b "Hexagon",0
.gouraud
dc.b "Rubbercube",0
.virgillbars
dc.b "VirgillBars",0
.blend
dc.b "Blend",0
.stham
dc.b "STHam",0
.endpart
dc.b "Endpart",0
.psenough
dc.b "HamTech.smp",0
.hamphrey
dc.b "HAMphrey.raw",0
.first_music_data
dc.b "1st.lsmus",0
.first_music_samples
dc.b "1st.lsbnk",0
.second_music_data
dc.b "2nd.lsmus",0
.second_music_samples
dc.b "2nd.lsbnk",0
.end_music_data
dc.b "End.lsmus",0
.end_music_samples
dc.b "End.lsbnk",0
even
.end