Configure Jukebox to exclusively play tracks from assets/music/jackbox
This commit is contained in:
parent
4c2428c367
commit
d4436674b4
10 changed files with 51 additions and 63 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -48,3 +48,5 @@ __pycache__/
|
||||||
/debug_render.png
|
/debug_render.png
|
||||||
/render_view.png
|
/render_view.png
|
||||||
/docs/*.zip
|
/docs/*.zip
|
||||||
|
|
||||||
|
/scratch/
|
||||||
|
|
|
||||||
BIN
assets/music/jackbox/BYBOLDEN. - Art Deco.mp3
Normal file
BIN
assets/music/jackbox/BYBOLDEN. - Art Deco.mp3
Normal file
Binary file not shown.
BIN
assets/music/jackbox/BYBOLDEN. - Art Deco.opus
Normal file
BIN
assets/music/jackbox/BYBOLDEN. - Art Deco.opus
Normal file
Binary file not shown.
BIN
assets/music/jackbox/BYBOLDEN. - Soft Hours.mp3
Normal file
BIN
assets/music/jackbox/BYBOLDEN. - Soft Hours.mp3
Normal file
Binary file not shown.
BIN
assets/music/jackbox/BYBOLDEN. - Soft Hours.opus
Normal file
BIN
assets/music/jackbox/BYBOLDEN. - Soft Hours.opus
Normal file
Binary file not shown.
Binary file not shown.
BIN
poker.exe
BIN
poker.exe
Binary file not shown.
|
|
@ -109,19 +109,21 @@ PlayJukeboxTrack3D PROC uses ebx trackIndex:DWORD
|
||||||
mov jboxIsPlaying, 0
|
mov jboxIsPlaying, 0
|
||||||
|
|
||||||
mov ebx, trackIndex
|
mov ebx, trackIndex
|
||||||
cmp ebx, 9
|
cmp ebx, 2
|
||||||
jae jbox_play_done
|
jae jbox_play_stop_selected
|
||||||
cmp ebx, JACKBOX_TRACK_COUNT
|
cmp ebx, JACKBOX_TRACK_COUNT
|
||||||
jae jbox_play_done
|
jae jbox_play_stop_selected
|
||||||
|
|
||||||
mov eax, jboxOpenCommands[ebx*4]
|
mov eax, jboxOpenCommands[ebx*4]
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz jbox_play_done
|
jz jbox_play_stop_selected
|
||||||
invoke mciSendStringA, eax, 0, 0, 0
|
invoke mciSendStringA, eax, 0, 0, 0
|
||||||
invoke mciSendStringA, OFFSET jboxPlayCmd, 0, 0, 0
|
invoke mciSendStringA, OFFSET jboxPlayCmd, 0, 0, 0
|
||||||
mov jboxCurrentTrack, ebx
|
mov jboxCurrentTrack, ebx
|
||||||
mov jboxIsPlaying, 1
|
mov jboxIsPlaying, 1
|
||||||
jbox_play_done:
|
ret
|
||||||
|
jbox_play_stop_selected:
|
||||||
|
mov jboxCurrentTrack, -1
|
||||||
ret
|
ret
|
||||||
PlayJukeboxTrack3D ENDP
|
PlayJukeboxTrack3D ENDP
|
||||||
|
|
||||||
|
|
@ -219,19 +221,19 @@ HandleJackbox3D PROC uses ebx esi
|
||||||
mov jboxSelectedTrack, 0
|
mov jboxSelectedTrack, 0
|
||||||
jmp jbox_play_selected
|
jmp jbox_play_selected
|
||||||
@@:
|
@@:
|
||||||
; Check track row click inside CRT screen: x in [46..274], y in [65..165]
|
; Track list click: x in [46..274], y in [66..108], step = 14
|
||||||
cmp mouseY3D, 65
|
cmp mouseY3D, 66
|
||||||
jb jbox_keys
|
jb jbox_keys
|
||||||
cmp mouseY3D, 165
|
cmp mouseY3D, 108
|
||||||
ja jbox_keys
|
ja jbox_keys
|
||||||
cmp mouseX3D, 46
|
cmp mouseX3D, 46
|
||||||
jb jbox_keys
|
jb jbox_keys
|
||||||
cmp mouseX3D, 274
|
cmp mouseX3D, 274
|
||||||
ja jbox_keys
|
ja jbox_keys
|
||||||
mov eax, mouseY3D
|
mov eax, mouseY3D
|
||||||
sub eax, 65
|
sub eax, 66
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
mov ebx, 10
|
mov ebx, 14
|
||||||
div ebx
|
div ebx
|
||||||
cmp eax, JACKBOX_TRACK_COUNT
|
cmp eax, JACKBOX_TRACK_COUNT
|
||||||
jae jbox_keys
|
jae jbox_keys
|
||||||
|
|
@ -285,12 +287,12 @@ jbox_keys:
|
||||||
invoke Pressed3D, 52h
|
invoke Pressed3D, 52h
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @F
|
jz @F
|
||||||
invoke RandomRange3D, 9
|
invoke RandomRange3D, 2
|
||||||
mov jboxSelectedTrack, eax
|
mov jboxSelectedTrack, eax
|
||||||
invoke PlayJukeboxTrack3D, eax
|
invoke PlayJukeboxTrack3D, eax
|
||||||
jmp jbox_handled
|
jmp jbox_handled
|
||||||
@@:
|
@@:
|
||||||
; Direct digit keys '1'..'9'
|
; Direct digit keys '1'..'2'
|
||||||
mov ebx, 31h ; '1'
|
mov ebx, 31h ; '1'
|
||||||
jbox_digit_loop:
|
jbox_digit_loop:
|
||||||
invoke Pressed3D, ebx
|
invoke Pressed3D, ebx
|
||||||
|
|
@ -303,15 +305,15 @@ jbox_digit_loop:
|
||||||
jmp jbox_handled
|
jmp jbox_handled
|
||||||
jbox_digit_next:
|
jbox_digit_next:
|
||||||
inc ebx
|
inc ebx
|
||||||
cmp ebx, 39h ; '9'
|
cmp ebx, 32h ; '2'
|
||||||
jbe jbox_digit_loop
|
jbe jbox_digit_loop
|
||||||
|
|
||||||
; '0' key for mute/stop
|
; '0' key for mute/stop
|
||||||
invoke Pressed3D, 30h
|
invoke Pressed3D, 30h
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz jbox_handled
|
jz jbox_handled
|
||||||
mov jboxSelectedTrack, 9
|
mov jboxSelectedTrack, 2
|
||||||
invoke PlayJukeboxTrack3D, 9
|
invoke PlayJukeboxTrack3D, 2
|
||||||
jmp jbox_handled
|
jmp jbox_handled
|
||||||
|
|
||||||
jbox_play_selected:
|
jbox_play_selected:
|
||||||
|
|
@ -344,38 +346,38 @@ RenderJackbox3D PROC uses ebx esi edi
|
||||||
jne jbox_top_lcd_stopped
|
jne jbox_top_lcd_stopped
|
||||||
cmp jboxCurrentTrack, -1
|
cmp jboxCurrentTrack, -1
|
||||||
je jbox_top_lcd_stopped
|
je jbox_top_lcd_stopped
|
||||||
cmp jboxCurrentTrack, 9
|
cmp jboxCurrentTrack, 2
|
||||||
jae jbox_top_lcd_stopped
|
jae jbox_top_lcd_stopped
|
||||||
invoke DrawString8x8, 42, 17, OFFSET jboxLcdPlay, 0050FF90h ; Green "ÈÃÐÀÅÒ"
|
invoke DrawString8x8, 42, 17, OFFSET jboxLcdPlay, 0050FF90h
|
||||||
jmp jbox_top_lcd_exit
|
jmp jbox_top_lcd_exit
|
||||||
jbox_top_lcd_stopped:
|
jbox_top_lcd_stopped:
|
||||||
invoke DrawString8x8, 45, 17, OFFSET jboxLcdStop, 008CB8A5h ; Dim green "ÑÒÎÏ"
|
invoke DrawString8x8, 45, 17, OFFSET jboxLcdStop, 008CB8A5h
|
||||||
jbox_top_lcd_exit:
|
jbox_top_lcd_exit:
|
||||||
; Right slot: exit button text
|
; Right slot: exit button text
|
||||||
invoke DrawString8x8, 241, 17, OFFSET jboxLcdExit, 00F2A648h ; Amber "ÂÛÕÎÄ"
|
invoke DrawString8x8, 241, 17, OFFSET jboxLcdExit, 00F2A648h
|
||||||
|
|
||||||
; 4. CRT Monitor Header: Now Playing Status
|
; 4. CRT Monitor Header: Now Playing Status
|
||||||
cmp jboxIsPlaying, 1
|
cmp jboxIsPlaying, 1
|
||||||
jne jbox_render_stopped
|
jne jbox_render_stopped
|
||||||
cmp jboxCurrentTrack, -1
|
cmp jboxCurrentTrack, -1
|
||||||
je jbox_render_stopped
|
je jbox_render_stopped
|
||||||
cmp jboxCurrentTrack, 9
|
cmp jboxCurrentTrack, 2
|
||||||
jae jbox_render_stopped
|
jae jbox_render_stopped
|
||||||
|
|
||||||
invoke DrawString8x8, 48, 52, OFFSET jboxHdrNow, 0050FF90h ; Green "ÑÅÉ×ÀÑ:"
|
invoke DrawString8x8, 48, 52, OFFSET jboxHdrNow, 0050FF90h
|
||||||
mov eax, jboxCurrentTrack
|
mov eax, jboxCurrentTrack
|
||||||
mov edx, jboxTrackNames[eax*4]
|
mov edx, jboxTrackNames[eax*4]
|
||||||
invoke DrawString8x8, 108, 52, edx, 00F0E6C3h
|
invoke DrawString8x8, 108, 52, edx, 00F0E6C3h
|
||||||
jmp jbox_render_divider
|
jmp jbox_render_divider
|
||||||
|
|
||||||
jbox_render_stopped:
|
jbox_render_stopped:
|
||||||
invoke DrawString8x8, 48, 52, OFFSET jboxHdrStop, 008CB8A5h ; Dim green "ÑÒÀÒÓÑ: ÎÑÒÀÍÎÂËÅÍ"
|
invoke DrawString8x8, 48, 52, OFFSET jboxHdrStop, 008CB8A5h
|
||||||
|
|
||||||
jbox_render_divider:
|
jbox_render_divider:
|
||||||
invoke DrawBox, 46, 62, 228, 1, 001C3828h
|
invoke DrawBox, 46, 62, 228, 1, 001C3828h
|
||||||
|
|
||||||
; 5. Track Selection List (10 rows, step Y = 10, from Y = 66)
|
; 5. Track Selection List (3 rows, step Y = 14, from Y = 70)
|
||||||
mov rowY, 66
|
mov rowY, 70
|
||||||
xor esi, esi
|
xor esi, esi
|
||||||
jbox_render_row:
|
jbox_render_row:
|
||||||
mov color, 008CB8A5h ; Default CRT phosphor pale cyan
|
mov color, 008CB8A5h ; Default CRT phosphor pale cyan
|
||||||
|
|
@ -383,7 +385,7 @@ jbox_render_row:
|
||||||
cmp esi, jboxSelectedTrack
|
cmp esi, jboxSelectedTrack
|
||||||
jne @F
|
jne @F
|
||||||
; Selected row: highlight box, golden cursor, bright white text
|
; Selected row: highlight box, golden cursor, bright white text
|
||||||
invoke DrawBox, 46, rowY, 228, 9, 00143526h
|
invoke DrawBox, 46, rowY, 228, 10, 00143526h
|
||||||
invoke DrawString8x8, 48, rowY, OFFSET jboxCursor, 00FFD700h
|
invoke DrawString8x8, 48, rowY, OFFSET jboxCursor, 00FFD700h
|
||||||
mov color, 00FFFFFFh
|
mov color, 00FFFFFFh
|
||||||
@@:
|
@@:
|
||||||
|
|
@ -398,7 +400,7 @@ jbox_render_row:
|
||||||
invoke DrawString8x8, 238, rowY, OFFSET jboxTagPlay, 0050FF90h
|
invoke DrawString8x8, 238, rowY, OFFSET jboxTagPlay, 0050FF90h
|
||||||
|
|
||||||
jbox_row_next:
|
jbox_row_next:
|
||||||
add rowY, 10
|
add rowY, 14
|
||||||
inc esi
|
inc esi
|
||||||
cmp esi, JACKBOX_TRACK_COUNT
|
cmp esi, JACKBOX_TRACK_COUNT
|
||||||
jb jbox_render_row
|
jb jbox_render_row
|
||||||
|
|
@ -408,4 +410,4 @@ jbox_row_next:
|
||||||
invoke DrawString8x8, 56, 170, OFFSET jboxFooterHelp, 0070AA90h
|
invoke DrawString8x8, 56, 170, OFFSET jboxFooterHelp, 0070AA90h
|
||||||
|
|
||||||
ret
|
ret
|
||||||
RenderJackbox3D ENDP
|
RenderJackbox3D ENDP
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ INTERACT_JACKBOX equ 48
|
||||||
|
|
||||||
JACKBOX_X equ FP_1*306/10
|
JACKBOX_X equ FP_1*306/10
|
||||||
JACKBOX_Y equ FP_1*235/10
|
JACKBOX_Y equ FP_1*235/10
|
||||||
JACKBOX_TRACK_COUNT equ 10
|
JACKBOX_TRACK_COUNT equ 3
|
||||||
|
|
||||||
MATERIAL_JACKBOX_FRONT equ 161
|
MATERIAL_JACKBOX_FRONT equ 161
|
||||||
MATERIAL_JACKBOX_SIDE equ 121
|
MATERIAL_JACKBOX_SIDE equ 121
|
||||||
|
|
@ -30,7 +30,7 @@ jackboxScreenArt3D AnimPack3D <>
|
||||||
jackboxWorldPath3D db "assets\animations\hall\jackbox-v1.bin",0
|
jackboxWorldPath3D db "assets\animations\hall\jackbox-v1.bin",0
|
||||||
jackboxScreenPath3D db "assets\animations\hall\jackbox-ui-v1.bin",0
|
jackboxScreenPath3D db "assets\animations\hall\jackbox-ui-v1.bin",0
|
||||||
|
|
||||||
; Prompt: "E: Âêëþ÷èòü àâòîìàò"
|
; Prompt: "E: Vkljuchit avtomat"
|
||||||
jackboxPrompt3D db 69,58,32,194,234,235,254,247,232,242,252,32,224,226,242,238,236,224,242,0
|
jackboxPrompt3D db 69,58,32,194,234,235,254,247,232,242,252,32,224,226,242,238,236,224,242,0
|
||||||
|
|
||||||
jboxCurrentTrack dd -1
|
jboxCurrentTrack dd -1
|
||||||
|
|
@ -41,45 +41,27 @@ jboxCloseCmd db "close jboxmusic",0
|
||||||
jboxStopCmd db "stop jboxmusic",0
|
jboxStopCmd db "stop jboxmusic",0
|
||||||
jboxPlayCmd db "play jboxmusic repeat",0
|
jboxPlayCmd db "play jboxmusic repeat",0
|
||||||
|
|
||||||
jboxOpen0 db 'open "assets\music\tower\Keygen_Church_-_Tenebre_Rosso_Sangue_ULTRAKILL_Original_Game_Soundtrack_79610890.mp3" type mpegvideo alias jboxmusic',0
|
jboxOpen0 db 'open "assets\music\jackbox\BYBOLDEN. - Art Deco.mp3" type mpegvideo alias jboxmusic',0
|
||||||
jboxOpen1 db 'open "assets\music\tower\KEYGEN_CHURCH_-_Hareklavit_75543927.mp3" type mpegvideo alias jboxmusic',0
|
jboxOpen1 db 'open "assets\music\jackbox\BYBOLDEN. - Soft Hours.mp3" type mpegvideo alias jboxmusic',0
|
||||||
jboxOpen2 db 'open "assets\music\tower\KEYGEN_CHURCH_-_Ladikerfos_75543991.mp3" type mpegvideo alias jboxmusic',0
|
|
||||||
jboxOpen3 db 'open "assets\music\tower\KEYGEN_CHURCH_-_Tilaskarot_75546826.mp3" type mpegvideo alias jboxmusic',0
|
|
||||||
jboxOpen4 db 'open "assets\music\tower\Mick_Gordon_-_BFG_Division_48126042.mp3" type mpegvideo alias jboxmusic',0
|
|
||||||
jboxOpen5 db 'open "assets\music\tower\Mick_Gordon_-_Rip_Tear_48126019.mp3" type mpegvideo alias jboxmusic',0
|
|
||||||
jboxOpen6 db 'open "assets\music\tower\Mick_Gordon_-_The_Only_Thing_They_Fear_Is_You_OST_DOOM_Eternal_72020713.mp3" type mpegvideo alias jboxmusic',0
|
|
||||||
jboxOpen7 db 'open "assets\audio\hakari_dance.wav" type waveaudio alias jboxmusic',0
|
|
||||||
jboxOpen8 db 'open "assets\audio\victory-tf2.wav" type waveaudio alias jboxmusic',0
|
|
||||||
|
|
||||||
jboxOpenCommands dd OFFSET jboxOpen0, OFFSET jboxOpen1, OFFSET jboxOpen2, OFFSET jboxOpen3
|
jboxOpenCommands dd OFFSET jboxOpen0, OFFSET jboxOpen1, 0
|
||||||
dd OFFSET jboxOpen4, OFFSET jboxOpen5, OFFSET jboxOpen6, OFFSET jboxOpen7
|
|
||||||
dd OFFSET jboxOpen8, 0
|
|
||||||
|
|
||||||
jboxName0 db "1. Keygen - Tenebre",0
|
jboxName0 db "1. Bolden - Art Deco",0
|
||||||
jboxName1 db "2. Keygen - Hareklavit",0
|
jboxName1 db "2. Bolden - Soft Hours",0
|
||||||
jboxName2 db "3. Keygen - Ladikerfos",0
|
; "0. [Vykljuchit zvuk]"
|
||||||
jboxName3 db "4. Keygen - Tilaskarot",0
|
jboxName2 db 48,46,32,91,194,251,234,235,254,247,232,242,252,32,231,226,243,234,93,0
|
||||||
jboxName4 db "5. Mick Gordon - BFG",0
|
|
||||||
jboxName5 db "6. Mick Gordon - Rip",0
|
|
||||||
jboxName6 db "7. Mick Gordon - Doom",0
|
|
||||||
jboxName7 db "8. Hakari Dance (Ost)",0
|
|
||||||
jboxName8 db "9. TF2 - Victory",0
|
|
||||||
; "0. [Âûêëþ÷èòü çâóê]"
|
|
||||||
jboxName9 db 48,46,32,91,194,251,234,235,254,247,232,242,252,32,231,226,243,234,93,0
|
|
||||||
|
|
||||||
jboxTrackNames dd OFFSET jboxName0, OFFSET jboxName1, OFFSET jboxName2, OFFSET jboxName3
|
jboxTrackNames dd OFFSET jboxName0, OFFSET jboxName1, OFFSET jboxName2
|
||||||
dd OFFSET jboxName4, OFFSET jboxName5, OFFSET jboxName6, OFFSET jboxName7
|
|
||||||
dd OFFSET jboxName8, OFFSET jboxName9
|
|
||||||
|
|
||||||
; Top Digital LCD Display Slots
|
; Top Digital LCD Display Slots
|
||||||
jboxLcdPlay db 200,195,208,192,197,210,0 ; "ÈÃÐÀÅÒ"
|
jboxLcdPlay db 200,195,208,192,197,210,0 ; "IGRAET"
|
||||||
jboxLcdStop db 209,210,206,207,0 ; "ÑÒÎÏ"
|
jboxLcdStop db 209,210,206,207,0 ; "STOP"
|
||||||
jboxLcdExit db 194,219,213,206,196,0 ; "ÂÛÕÎÄ"
|
jboxLcdExit db 194,219,213,206,196,0 ; "VYHOD"
|
||||||
|
|
||||||
; CRT Monitor Screen Text
|
; CRT Monitor Screen Text
|
||||||
jboxHdrNow db 209,197,201,215,192,209,58,0 ; "ÑÅÉ×ÀÑ:"
|
jboxHdrNow db 209,197,201,215,192,209,58,0 ; "SEJCHAS:"
|
||||||
jboxHdrStop db 209,210,192,210,211,209,58,32,206,209,210,192,205,206,194,203,197,205,0 ; "ÑÒÀÒÓÑ: ÎÑÒÀÍÎÂËÅÍ"
|
jboxHdrStop db 209,210,192,210,211,209,58,32,206,209,210,192,205,206,194,203,197,205,0 ; "STATUS: OSTANOVLEN"
|
||||||
jboxCursor db ">",0
|
jboxCursor db ">",0
|
||||||
jboxTagPlay db "[>]",0
|
jboxTagPlay db "[>]",0
|
||||||
; "ENTER:Ïóñê S:Ñòîï R:Ìèêñ"
|
; "ENTER:Pusk S:Stop R:Miks"
|
||||||
jboxFooterHelp db 69,78,84,69,82,58,207,243,241,234,32,32,83,58,209,242,238,239,32,32,82,58,204,232,234,241,0
|
jboxFooterHelp db 69,78,84,69,82,58,207,243,241,234,32,32,83,58,209,242,238,239,32,32,82,58,204,232,234,241,0
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,9 @@ def test_packed_assets():
|
||||||
def test_audio_tracks():
|
def test_audio_tracks():
|
||||||
data_inc = (ROOT / "src_graphics/jackbox_data.inc").read_bytes().decode("cp1251")
|
data_inc = (ROOT / "src_graphics/jackbox_data.inc").read_bytes().decode("cp1251")
|
||||||
open_cmds = re.findall(r'open\s+"([^"]+)"\s+type\s+(\w+)\s+alias\s+jboxmusic', data_inc)
|
open_cmds = re.findall(r'open\s+"([^"]+)"\s+type\s+(\w+)\s+alias\s+jboxmusic', data_inc)
|
||||||
assert len(open_cmds) == 9, f"Expected 9 audio tracks, got {len(open_cmds)}"
|
assert len(open_cmds) == 2, f"Expected 2 audio tracks, got {len(open_cmds)}"
|
||||||
|
for rel_path, media_type in open_cmds:
|
||||||
|
assert "assets\\music\\jackbox" in rel_path or "assets/music/jackbox" in rel_path, f"Track must be from jackbox directory: {rel_path}"
|
||||||
|
|
||||||
for rel_path, media_type in open_cmds:
|
for rel_path, media_type in open_cmds:
|
||||||
full_path = ROOT / rel_path
|
full_path = ROOT / rel_path
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue