From 2e155a9a2cf7c2cc703f22214b2146b9f4558b16 Mon Sep 17 00:00:00 2001 From: d_m Date: Wed, 31 Jul 2024 23:13:27 -0400 Subject: [PATCH] starting to write some music --- buttons.chr | Bin 4096 -> 4096 bytes kodiak.tal | 99 ++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 81 insertions(+), 18 deletions(-) diff --git a/buttons.chr b/buttons.chr index bc7a076942b94dad9b6e7f4d0d712f9ab1e43c22..499d2495e4a6e5c6d39438f469ddb48d9bfd3702 100644 GIT binary patch delta 77 zcmZorXi(VT!01r_9}Md2XRcnkdgXs87bq4U78bT1A_*qVUoBdt_5c4rh|s@(kzn=z KHajvl@Bsj0b~vU0 delta 16 XcmZorXi(VTz__`Qv7T@81V%>yFLMQ1 diff --git a/kodiak.tal b/kodiak.tal index 6be06e7..67946a7 100644 --- a/kodiak.tal +++ b/kodiak.tal @@ -1,8 +1,6 @@ ( kodiak.tal ) ( TODO ) -( * restart/quit game button ) -( * automatically moving safe cards to foundation? ) ( * make bear react to moving cards ) ( * move cards back from foundation? ) ( * music? ) @@ -14,6 +12,7 @@ |00 @System [ &vect $2 &expansion $2 &title $2 &metadata $2 &r $2 &g $2 &b $2 ] |10 @Console [ &vect $2 &r $1 &exec $2 &mode $1 &dead $1 &exit $1 &w $1 ] |20 @Screen [ &vect $2 &w $2 &h $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &px $1 &sprite $1 ] +|30 @Audio0 [ &vect $2 &pos $2 &out $1 &dur $2 &pad $1 &adsr $2 &len $2 &addr $2 &vol $1 &pitch $1 ] |80 @Controller [ &vect $2 &button $1 &key $1 &fn $1 ] |90 @Mouse [ &vect $2 &x $2 &y $2 &state $1 &pad $3 &scrollx $2 &scrolly $2 ] |a0 @File1 [ &vect $2 &ok $2 &stat $2 &del $1 &append $1 &name $2 &len $2 &r $2 &w $2 ] @@ -58,7 +57,8 @@ &y0 $2 ( starting y coord ) &x1 $2 ( ending x coord ) &y1 $2 ] ( ending y coord ) - @audio $1 ( is audio enabled? ) + @audio [ $1 ( is audio enabled? ) + &pos $2 ] ( position in music ) |0100 @@ -71,6 +71,22 @@ #0100 .Screen/w DEO2 #00c0 .Screen/h DEO2 + ( set up vectors ) + ;on-mouse .Mouse/vect DEO2 + ;on-key .Controller/vect DEO2 + ;on-refresh .Screen/vect DEO2 + ;on-audio .Audio0/vect DEO2 + + ( set up music ) + #0000 .audio/pos STZ2 ( ; music position ) + #0231 .Audio0/adsr DEO2 ( ; 6/15 second ) + #00a0 .Audio0/dur DEO2 + #0008 .Audio0/len DEO2 ( ; 2 bytes long ) + ;square .Audio0/addr DEO2 ( ; square wave ) + #77 .Audio0/vol DEO ( ; about 50% volume ) + +( #00 .Audio0/pitch DEO ( start ) ) + reset BRK @reset @@ -88,14 +104,8 @@ shuffle-stock deal-tableau - ( TODO: clear foreground ) draw - - ;on-mouse .Mouse/vect DEO2 - ;on-key .Controller/vect DEO2 - ;on-refresh .Screen/vect DEO2 - auto-move JMP2r @@ -228,12 +238,16 @@ #36 .Screen/auto DEO #8a .Screen/sprite DEO JMP2r +@restart-button-addr ( -> addr* ) + game-won ?&won ;restart-button JMP2r + &won ;new-game-button JMP2r + @audio-button-addr ( -> addr* ) .audio LDZ ?&on ;audio-off-button JMP2r &on ;audio-on-button JMP2r @draw-buttons ( -> ) - #0008 #00b4 ;restart-button draw-button + #0008 #00b4 restart-button-addr draw-button #0030 #00b4 ;quit-button draw-button #0058 #00b4 audio-button-addr draw-button #0080 #00b4 ;about-button draw-button @@ -415,6 +429,22 @@ .move #0e initialize ( ; zero out move ) post-move !draw ( ; finish move and draw ) +@stop-audio ( -> ) + #00 .audio STZ #00 .Audio0/pitch DEO JMP2r + +@start-audio ( -> ) + #01 .audio STZ #0000 .audio/pos STZ2 !play-audio + +@play-audio ( -> ) + .audio/pos LDZ2 ( pos* ) + ;music OVR2 ADD2 LDA ( pos* pitch^ ) + .Audio0/pitch DEO ( pos* ) + INC2 #0007 AND2 ( ) + .audio/pos STZ2 JMP2r ( ) + +@on-audio ( -> brk ) + .audio LDZ ?{ BRK } play-audio BRK + @on-refresh ( -> brk ) .move/card LDZ #00 EQU ?{ update-move } on-refresh-bear ( ; possibly refresh bear ) @@ -423,11 +453,11 @@ @on-refresh-bear ( -> ) .frame LDZ - DUP #e8 NEQ ?{ ;sprites #0040 ADD2 !&update } - DUP #f0 NEQ ?{ ;sprites #0080 ADD2 !&update } - DUP #f8 NEQ ?{ ;sprites #0040 ADD2 !&update } - DUP #00 NEQ ?{ ;sprites !&update } - JMP2r + DUP #e8 NEQ ?{ POP ;sprites #0040 ADD2 !&update } + DUP #f0 NEQ ?{ POP ;sprites #0080 ADD2 !&update } + DUP #f8 NEQ ?{ POP ;sprites #0040 ADD2 !&update } + DUP #00 NEQ ?{ POP ;sprites !&update } + POP JMP2r &update .Screen/addr DEO2 ( ; s/addr<-addr ) #0098 .Screen/y DEO2 ( ; s/x<-0x98 ) #00e8 .Screen/x DEO2 ( ; s/y<-0xe8 ) @@ -738,9 +768,19 @@ &audio POP2 toggle-audio #01 JMP2r &about POP2 #010e DEO #01 JMP2r +@game-won ( -> bool^ ) + .foundation #04 OVR ADD SWP ( lim^ start^ ) + &loop ( lim^ pos^ ) + LDZk #0f AND #0d NEQ ?&no ( lim^ pos^ ) + INC GTHk ?&loop ( lim^ pos+1^ ) + POP2 #01 JMP2r ( 1^ ) + &no POP2 #00 JMP2r ( 0^ ) + @toggle-audio ( -> ) - #0001 .audio LDZ JMP SWP POP .audio STZ - draw-buttons ( !draw-curr-mouse ) JMP2r + .audio LDZ ?&disable + start-audio !&done + &disable stop-audio + &done !draw-buttons @min ( x^ y^ -> min[x,y]^ ) LTHk JMP SWP POP JMP2r @@ -797,7 +837,7 @@ SWP #0f AND SWP STZ JMP2r ( ; zp<-face ) @post-move ( -> ) - auto-move JMP2r + auto-move game-won ?draw-buttons JMP2r @on-click-up ( -> ) .Mouse/state DEI #ff EOR ( not-state^ ) @@ -853,3 +893,26 @@ ff ff ff ff ff ff ff ff ff ce 55 4d 55 4e ff ff ff ff ff ff ff ff ff ff ff d4 56 56 56 c6 ff ff fe ff ff ff ff ff ff fe fe 7f ff ff ff ff ff fe + +@new-game-button + 7f ff ff ff ff ff ff 7f 7f 99 ab a9 ab a9 ff 7f + ff ff ff ff ff ff ff ff ff 57 56 56 56 af ff ff + ff ff ff ff ff ff ff ff ff 37 ea a2 aa 2a ff ff + fe ff ff ff ff ff ff fe fe 59 ab a9 ab a9 ff fe + +@square ff ff ff ff ff 00 00 00 + +( C C# D D# E F F# G G# A A# B ) +( 01 02 03 04 05 06 07 08 09 0a 0b ) +( 0c 0d 0e 0f 10 11 12 13 14 15 16 17 ) +( 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 ) +( 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f ) +( 30 31 32 33 34 35 36 37 38 39 3a 3b ) +( 3c 3d 3e 3f 40 41 42 43 44 45 46 47 ) +( 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 ) +( 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f ) +( 60 61 62 63 64 65 66 67 68 69 6a 6b ) +( 6c 6d 6e 6f 70 71 72 73 74 75 76 77 ) +( 78 79 7a 7b 7c 7d 7e 7f ) + +@music 18 18 1a 1b 1f 24 1a 1b