Compare commits

..

No commits in common. "main" and "v1" have entirely different histories.
main ... v1

7 changed files with 110 additions and 333 deletions

1
.gitignore vendored
View File

@ -18,4 +18,3 @@ wave
*.wav *.wav
*.mp4 *.mp4
scratch scratch
.kodiak.dat

Binary file not shown.

View File

@ -42,18 +42,17 @@
,set-sprite/layer LDR ORA .Screen/sprite DEOk DEOk DEO JMP2r ,set-sprite/layer LDR ORA .Screen/sprite DEOk DEOk DEO JMP2r
@draw-background ( -> ) @draw-background ( -> )
#01 .Screen/auto DEO #f2 .Screen/auto DEO
#0000 .Screen/y DEO2
;tiles #0200 ADD2 .Screen/addr DEO2 ;tiles #0200 ADD2 .Screen/addr DEO2
.height LDZ2 #03 SFT2 #0000 &yloop #0080 .Screen/x DEO2
draw-background/twice
#0000 .Screen/x DEO2 #0000 .Screen/x DEO2
.width LDZ2 #03 SFT2 #0000 &xloop &twice
#81 .Screen/sprite DEO #0000 .Screen/y DEO2
INC2 GTH2k ?&xloop #81 .Screen/sprite
POP2 POP2 DEOk DEOk DEOk DEOk DEOk DEOk DEOk DEOk
.Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 DEOk DEOk DEOk DEOk DEOk DEOk DEOk DEOk
INC2 GTH2k ?&yloop DEOk DEOk DEOk DEOk DEOk DEOk DEOk DEO JMP2r
POP2 POP2 JMP2r
@draw-spot-down ( -> ) @draw-spot-down ( -> )
#16 .Screen/auto DEO ( ; draw 2 tiles, increment x and addr ) #16 .Screen/auto DEO ( ; draw 2 tiles, increment x and addr )
@ -160,6 +159,10 @@
( - byte 3: x position ) ( - byte 3: x position )
( - byte 4: y position ) ( - byte 4: y position )
@cursor 80c0 e0f0 f8e0 1000
( @cursox 7f3f 1f0f 071f efff )
@blank 0000 0000 0000 0000
( @rng &x $2 &y $2 ) ( @rng &x $2 &y $2 )
@rng-x $2 @rng-x $2
@rng-y $2 @rng-y $2

Binary file not shown.

View File

@ -1,6 +1,8 @@
( kodiak.tal ) ( kodiak.tal )
( TODO ) ( TODO )
( * display message on win )
( * make bear react to moving cards )
( * buttons, stock flash when clicked ) ( * buttons, stock flash when clicked )
( * save game file? stats? ) ( * save game file? stats? )
( * card sounds? ) ( * card sounds? )
@ -33,7 +35,7 @@
( - #6c queen of hearts, face down ) ( - #6c queen of hearts, face down )
( - #93 three of diamonds, held ) ( - #93 three of diamonds, held )
( zero page - currently using 254 of 256 bytes ) ( zero page - currently using 232 of 256 bytes )
|0000 |0000
@stock $34 ( draw pile - 52 bytes, 24 bytes at start ) @stock $34 ( draw pile - 52 bytes, 24 bytes at start )
@waste $18 ( face up pile - 24 bytes ) @waste $18 ( face up pile - 24 bytes )
@ -60,12 +62,6 @@
@about $1 ( is about screen visible? 01 start, ff resume ) @about $1 ( is about screen visible? 01 start, ff resume )
@audio [ $1 ( is audio enabled? ) @audio [ $1 ( is audio enabled? )
&pos $2 ] ( position in music ) &pos $2 ] ( position in music )
@easy $1 ( true: draw 1 card false: draw 3 cards )
@width $2 ( screen width )
@height $2 ( screen height )
@seconds $1 ( when to count time )
@tick $1 ( already counted? )
( 256 bytes )
|0100 |0100
( metadata ) ( metadata )
@ -76,8 +72,9 @@
#8d12 .System/g DEO2 #8d12 .System/g DEO2
#4d12 .System/b DEO2 #4d12 .System/b DEO2
load-scores ( 256x192 )
init-screen #0100 .Screen/w DEO2
#00c0 .Screen/h DEO2
( set up vectors ) ( set up vectors )
;on-mouse .Mouse/vect DEO2 ;on-mouse .Mouse/vect DEO2
@ -94,9 +91,6 @@
#0231 #0580 ;triangle #0004 #64 .Audio3 setup-audio #0231 #0580 ;triangle #0004 #64 .Audio3 setup-audio
#011f #00b0 ;noise #0200 #44 .Audio4 setup-audio #011f #00b0 ;noise #0200 #44 .Audio4 setup-audio
.DateTime/sec DEI .seconds STZ
#00 .tick STZ
start-audio start-audio
( display about window when first starting ) ( display about window when first starting )
@ -106,58 +100,17 @@
@metadata 00 @metadata 00
( title ) "kodiak 0a ( title ) "kodiak 0a
( details ) &details "klondike 20 "solitaire 20 "game 0a ( details ) &details "klondike 20 "solitaire 20 "game 0a
( author ) "by 20 "d6 0a ( author ) "by 20 "d_m 0a
( version ) "version 20 "4 0a ( version ) "version 20 "0 0a
( date ) "03 20 "sep 20 "2024 00 ( date ) "5 20 "aug 20 2024 00
01 ( 1 extended field ) 00
( icon ) 83 =icon-24
@score-file ".kodiak.dat 00 @icon-24x24
00 00 03 02 00 01 01 01 03 07 07 07 03 03 06 06
@score-data $a 00 00 00 00 00 c3 c3 c3 00 81 81 ff ff ff bd bd
00 00 c0 40 00 80 80 8e c0 e0 e0 e0 c0 c0 60 6e
@save-scores ( -> ) 00 00 00 00 00 00 00 00 07 07 07 03 03 01 00 00
LIT2r =score-data ( tbc... )
LIT2 "ko STH2kr STA2 INC2r INC2r
;draw-scores/games LDA2 STH2kr STA2 INC2r INC2r
;draw-scores/wins LDA2 STH2kr STA2 INC2r INC2r
;draw-scores/time LDA2 STH2kr STA2 INC2r INC2r
.easy LDZ #01 AND #00 STH2r STA2
;score-file .File1/name DEO2
#000a .File1/len DEO2
;score-data .File1/w DEO2
JMP2r
@load-scores ( -> )
;score-file .File1/name DEO2
#000a .File1/len DEO2
;score-data .File1/r DEO2
( dat file should be exactly 10 bytes )
.File1/ok DEI2 #000a NEQ2 ?&invalid
( first two bytes must be "ko" )
;score-data LDA2 LIT2 "ko NEQ2 ?&invalid
( next 6 bytes contains 3 shorts )
;score-data INC2 INC2
LDA2k ;draw-scores/games STA2 INC2 INC2
LDA2k ;draw-scores/wins STA2 INC2 INC2
LDA2k ;draw-scores/time STA2 INC2 INC2
( next byte contains easy/hard bit )
LDA #01 AND .easy STZ
( last byte ignored, for now )
JMP2r
&invalid
#0000 ;draw-scores/games STA2
#0000 ;draw-scores/wins STA2
#0000 ;draw-scores/time STA2
#00 .easy STZ
JMP2r
@setup-audio ( adsr* sample* slen* dur* vol^ dev^ -> ) @setup-audio ( adsr* sample* slen* dur* vol^ dev^ -> )
STHk #0e ORA DEO ( [dev^] ; <-vol ) STHk #0e ORA DEO ( [dev^] ; <-vol )
@ -167,13 +120,6 @@
STHr #08 ORA DEO2 ( ; <-adsr ) STHr #08 ORA DEO2 ( ; <-adsr )
JMP2r JMP2r
@inc-games ( -> )
;draw-scores/games LDA2k INC2 SWP2 STA2 JMP2r
@restart
is-game-won ?{ inc-games save-scores }
( >> )
@reset @reset
init-rng-from-datetime init-rng-from-datetime
init-stock init-stock
@ -194,25 +140,6 @@
.about LDZ ?draw-about .about LDZ ?draw-about
draw !auto-move draw !auto-move
@init-screen ( -> )
( our target resolution is 256x192. )
( )
( if the emulator's screen is more than twice that in )
( either dimension we'll request a resize to 256x192. )
( )
( this will faciliate zooming, which is better for )
( high resolution screens. )
.Screen/w DEI2 #0200 LTH2
.Screen/h DEI2 #0180 LTH2 AND ?&save
( resize to 256x192 )
#0100 .Screen/w DEO2 #00c0 .Screen/h DEO2
( save screen dimensions for future use )
&save
.Screen/w DEI2 .width STZ2
.Screen/h DEI2 .height STZ2 JMP2r
@clear-fg ( -> ) @clear-fg ( -> )
#0000 .Screen/x DEO2 #0000 .Screen/x DEO2
#0000 .Screen/y DEO2 #0000 .Screen/y DEO2
@ -220,10 +147,10 @@
JMP2r JMP2r
@quit ( -> brk ) @quit ( -> brk )
is-game-won ?{ inc-games } save-scores #010f DEO BRK #010f DEO BRK ( TODO: save game? save stats? )
@dump-byte ( byte^ -- ) @dump-byte ( byte^ -- )
DUP #04 SFT /hex #0f AND ( >> ) DUP #04 SFT ,&hex JSR #0f AND ,&hex JMP
&hex #30 ADD DUP #39 GTH #27 MUL ADD .Console/w DEO &hex #30 ADD DUP #39 GTH #27 MUL ADD .Console/w DEO
JMP2r JMP2r
@ -276,17 +203,17 @@
@draw ( -> ) @draw ( -> )
draw-background draw-background
draw-scores
draw-buttons draw-buttons
draw-decorations draw-decorations
draw-stock draw-stock
draw-waste draw-waste
draw-foundation draw-foundation
draw-tableau draw-tableau
!draw-curr-mouse draw-curr-mouse
JMP2r
@initialize ( start^ count^ -> ) @initialize ( start^ count^ -> )
OVR ADD STH STH #00 ( 0^ [lim=start+count^ start^] ) OVR ADD SWP STH2 #00 ( 0^ [lim=start+count^ start^] )
&loop DUP STHkr STZ INCr GTHkr STHr ?&loop ( 0^ [lim^ pos^] ) &loop DUP STHkr STZ INCr GTHkr STHr ?&loop ( 0^ [lim^ pos^] )
POP POP2r JMP2r ( ) POP POP2r JMP2r ( )
@ -391,7 +318,9 @@
#0030 .Screen/x DEO2 #00a8 .Screen/y DEO2 #14 draw-horiz #0030 .Screen/x DEO2 #00a8 .Screen/y DEO2 #14 draw-horiz
#0028 .Screen/x DEO2 #0018 .Screen/y DEO2 #12 draw-vert #0028 .Screen/x DEO2 #0018 .Screen/y DEO2 #12 draw-vert
#00d0 .Screen/x DEO2 #0018 .Screen/y DEO2 #12 !draw-vert #00d0 .Screen/x DEO2 #0018 .Screen/y DEO2 #12 draw-vert
JMP2r
@draw-logo ( -> ) @draw-logo ( -> )
#0054 .Screen/x DEO2 #0054 .Screen/x DEO2
@ -401,19 +330,12 @@
#80 .Screen/sprite DEOk DEO #80 .Screen/sprite DEOk DEO
JMP2r JMP2r
( @draw-face ( x* y* addr* -> ) @draw-face ( x* y* addr* -> )
.Screen/addr DEO2 .Screen/addr DEO2
.Screen/y DEO2 .Screen/y DEO2
.Screen/x DEO2 .Screen/x DEO2
#16 .Screen/auto DEO #16 .Screen/auto DEO
#80 .Screen/sprite DEOk DEO JMP2r ) #80 .Screen/sprite DEOk DEO JMP2r
@draw-mouth ( x* y* addr* -> )
#0020 ADD2 .Screen/addr DEO2
#0008 ADD2 .Screen/y DEO2
.Screen/x DEO2
#16 .Screen/auto DEO
#80 .Screen/sprite DEO JMP2r
@draw-about-content ( -> ) @draw-about-content ( -> )
@ -425,10 +347,10 @@
#0078 #0048 #3b draw-xyc #0078 #0048 #3b draw-xyc
#0060 #0038 #80 draw-bear #0060 #0038 #80 draw-bear
#0060 #0038 ;sprites #00c0 ADD2 draw-mouth #0060 #0038 ;sprites #00c0 ADD2 draw-face
#00a8 #0038 #90 draw-bear #00a8 #0038 #90 draw-bear
#0090 #0038 ;sprites #0100 ADD2 draw-mouth #0090 #0038 ;sprites #0100 ADD2 draw-face
#0038 #0070 ;line1 print-str #0038 #0070 ;line1 print-str
#0040 #0078 ;line2 print-str #0040 #0078 ;line2 print-str
@ -436,11 +358,11 @@
#0070 #0094 resume-button-addr draw-button #0070 #0094 resume-button-addr draw-button
JMP2r POP2 POP2 JMP2r
@line1 "klondike 20 "solitaire 00 @line1 "klondike 20 "solitaire 00
@line2 "version 20 "4 20 "by 20 "d6 00 @line2 "version 20 "1 20 "by 20 "d_m 00
@line3 "september 20 "3 20 "2024 00 @line3 "august 20 "6 20 "2024 00
@print-str ( x* y* s* -> ) @print-str ( x* y* s* -> )
STH2 .Screen/y DEO2 ( x* [s*] ) STH2 .Screen/y DEO2 ( x* [s*] )
@ -450,18 +372,6 @@
LDAk load-ch #00 .Screen/sprite DEO ( s* ) LDAk load-ch #00 .Screen/sprite DEO ( s* )
INC2 !&loop ( s+1* ) INC2 !&loop ( s+1* )
@print-dec ( x* y* n* -> )
#01 ,pr-digit/a STR
STH2 .Screen/y DEO2 .Screen/x DEO2
#01 .Screen/auto DEO
STH2r #2710 pr-digit #03e8 pr-digit #0064 pr-digit #000a pr-digit !pr-digit/emit
@pr-digit ( n* d* -> n%d* )
DIV2k STH2k MUL2 SUB2 STH2r
DUP2 #0000 EQU2 LIT [ &a 01 ] AND ?&leading-zero
&emit #00 ,&a STR NIP LIT "0 ADD load-ch #00 .Screen/sprite DEO JMP2r
&leading-zero POP2 #20 load-ch #00 .Screen/sprite DEO JMP2r
@load-ch ( c^ -> ) @load-ch ( c^ -> )
#00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2 JMP2r #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2 JMP2r
@ -493,63 +403,22 @@
#8a .Screen/sprite DEO JMP2r #8a .Screen/sprite DEO JMP2r
@restart-button-addr ( -> addr* ) @restart-button-addr ( -> addr* )
is-game-won ?&won ;restart-button JMP2r game-won ?&won ;restart-button JMP2r
&won ;new-game-button JMP2r &won ;new-game-button JMP2r
@audio-button-addr ( -> addr* ) @audio-button-addr ( -> addr* )
.audio LDZ ?&on ;audio-off-button JMP2r .audio LDZ ?&on ;audio-off-button JMP2r
&on ;audio-on-button JMP2r &on ;audio-on-button JMP2r
@difficulty-button-addr ( -> addr* ) @draw-buttons ( -> )
.easy LDZ ?&easy ;hard-button JMP2r #0008 #00b4 restart-button-addr draw-button
&easy ;easy-button JMP2r #0030 #00b4 ;quit-button draw-button
#0058 #00b4 audio-button-addr draw-button
@draw-scores ( -> ) #0080 #00b4 ;about-button draw-button
.width LDZ2 #002c SUB2 #0029 ;text/games print-str
.width LDZ2 #002c SUB2 #0032 LIT2 [ &games $2 ] print-dec
.width LDZ2 #002c SUB2 #0041 ;text/wins print-str
.width LDZ2 #002c SUB2 #004a LIT2 [ &wins $2 ] print-dec
.width LDZ2 #002c SUB2 #0059 ;text/time print-str
.width LDZ2 #002c SUB2 #0062 LIT2 [ &time $2 ] print-dec
JMP2r JMP2r
@text [ &n "12345 00 &games "games 00 &wins 20 "wins 00 &time 20 "time 00 ]
@draw-buttons ( -> )
.height LDZ2 #000c SUB2
#0008 OVR2 restart-button-addr draw-button
#0030 OVR2 ;quit-button draw-button
#0058 OVR2 audio-button-addr draw-button
#0080 OVR2 ;about-button draw-button
#00a8 SWP2 difficulty-button-addr !draw-button
@draw-bear-smile ( -> )
.width LDZ2 #0018 SUB2 .height LDZ2 #0028 SUB2 ;sprites #00c0 ADD2 !draw-mouth
@draw-bear-oh ( -> )
.width LDZ2 #0018 SUB2 .height LDZ2 #0028 SUB2 ;sprites #0100 ADD2 !draw-mouth
@draw-you-win ( -> )
draw-bear-smile
#0048 .Screen/x DEO2
#c6 .Screen/auto DEO
#8f #0008 draw-you-win/draw
#80 #0020 draw-you-win/draw
#85 #0038 draw-you-win/draw
#8a #0050 draw-you-win/draw
#85 #0068 draw-you-win/draw
#80 #0080 draw-you-win/draw
#8f #0098 !draw-you-win/draw
&draw ( tint^ y* -> )
.Screen/y DEO2 ;you-win .Screen/addr DEO2
.Screen/sprite DEOk DEO JMP2r
@draw-decorations ( -> ) @draw-decorations ( -> )
.width LDZ2 #0018 SUB2 .height LDZ2 #0028 SUB2 #80 draw-bear #00e8 #0098 #80 !draw-bear
is-game-won ?draw-you-win JMP2r
@draw-stock ( -> ) @draw-stock ( -> )
.stock LDZk #00 EQU ?&empty ( stock^ ) .stock LDZk #00 EQU ?&empty ( stock^ )
@ -605,7 +474,7 @@
@column-y ( col^ -> y* ) @column-y ( col^ -> y* )
bot-column DUP #13 find-top SWP SUB bot-column DUP #13 find-top SWP SUB
#00 SWP #30 SFT2 #0024 ADD2 JMP2r #00 SWP #0008 MUL2 #0024 ADD2 JMP2r
@draw-column ( idx^ -> ) @draw-column ( idx^ -> )
DUP column-x ,&x STR2 ( idx^ ; x<-32+24*idx ) DUP column-x ,&x STR2 ( idx^ ; x<-32+24*idx )
@ -622,7 +491,7 @@
&done POP POP2 JMP2r ( ) &done POP POP2 JMP2r ( )
@maybe-draw-c ( card^ -> ) @maybe-draw-c ( card^ -> )
DUP ?{ POP !draw-spot-down } ( >> ) DUP ?{ POP !draw-spot-down } !draw-c
( assumes x/y already set ) ( assumes x/y already set )
@draw-c ( card^ -> ) @draw-c ( card^ -> )
@ -686,10 +555,10 @@
.move/y1 LDZ2 .move/y0 LDZ2 !scale .move/y1 LDZ2 .move/y0 LDZ2 !scale
@max ( x* y* -> max* ) @max ( x* y* -> max* )
GTH2k [ JMP SWP2 POP2 ] JMP2r GTH2k JMP SWP2 POP2 JMP2r
@dist ( a* b* -> |a-b|* ) @dist ( a* b* -> |a-b|* )
GTH2k [ JMP SWP2 SUB2 ] JMP2r GTH2k JMP SWP2 SUB2 JMP2r
@move-duration ( -> duration* ) @move-duration ( -> duration* )
.move/x1 LDZ2 .move/x0 LDZ2 dist ( dx* ) .move/x1 LDZ2 .move/x0 LDZ2 dist ( dx* )
@ -761,15 +630,8 @@
@on-audio ( -> brk ) @on-audio ( -> brk )
.audio LDZ ?{ BRK } play-audio BRK .audio LDZ ?{ BRK } play-audio BRK
@update-time ( -> )
.DateTime/sec DEI .seconds LDZ EQU STHk
.tick LDZ AND ?{ STHr #00 EQU .tick STZ JMP2r }
;draw-scores/time LDA2k INC2 SWP2 STA2
#00 .tick STZ !draw
@on-refresh ( -> brk ) @on-refresh ( -> brk )
update-time .move/card LDZ #00 EQU ?{ update-move }
#00 .move/card LDZ EQU ?{ update-move }
on-refresh-bear ( ; possibly refresh bear ) on-refresh-bear ( ; possibly refresh bear )
.frame LDZk INC SWP STZ ( ; increment frame counter ) .frame LDZk INC SWP STZ ( ; increment frame counter )
BRK BRK
@ -779,7 +641,7 @@
DUP #e8 NEQ ?{ POP ;sprites #0040 ADD2 JMP2r } DUP #e8 NEQ ?{ POP ;sprites #0040 ADD2 JMP2r }
DUP #f0 NEQ ?{ POP ;sprites #0080 ADD2 JMP2r } DUP #f0 NEQ ?{ POP ;sprites #0080 ADD2 JMP2r }
DUP #f8 NEQ ?{ POP ;sprites #0040 ADD2 JMP2r } DUP #f8 NEQ ?{ POP ;sprites #0040 ADD2 JMP2r }
DUP ?{ POP ;sprites JMP2r } DUP #00 NEQ ?{ POP ;sprites JMP2r }
POP #0000 JMP2r POP #0000 JMP2r
@draw-bear-eyes ( addr* x* y* -> ) @draw-bear-eyes ( addr* x* y* -> )
@ -796,9 +658,13 @@
@on-refresh-bear ( -> ) @on-refresh-bear ( -> )
.about LDZ ?on-refresh-about-bears .about LDZ ?on-refresh-about-bears
#00 .dragging LDZ EQU ?{ draw-bear-oh } load-bear-frame ORAk ?&update POP2 JMP2r
load-bear-frame ORAk ?{ POP2 JMP2r } &update .Screen/addr DEO2 ( ; s/addr<-addr )
.width LDZ2 #0018 SUB2 .height LDZ2 #0028 SUB2 !draw-bear-eyes #0098 .Screen/y DEO2 ( ; s/x<-0x98 )
#00e8 .Screen/x DEO2 ( ; s/y<-0xe8 )
#16 .Screen/auto DEO ( ; draw 2 tiles, inc addr and y )
#80 .Screen/sprite DEO ( ; draw it! )
JMP2r
@on-mouse ( -> brk ) @on-mouse ( -> brk )
on-move on-move
@ -811,7 +677,6 @@
@on-move ( -> ) @on-move ( -> )
.Mouse/x DEI2 .prev/mouse-x LDZ2 NEQ2 ?draw-mouse .Mouse/x DEI2 .prev/mouse-x LDZ2 NEQ2 ?draw-mouse
.Mouse/y DEI2 .prev/mouse-y LDZ2 NEQ2 ?draw-mouse .Mouse/y DEI2 .prev/mouse-y LDZ2 NEQ2 ?draw-mouse
[ LIT &last $1 ] .Mouse/state DEI DUP ,&last STR EQU ?{ draw-mouse }
JMP2r JMP2r
@draw-mouse ( -> ) @draw-mouse ( -> )
@ -853,25 +718,23 @@
&done POP2 POP2r POP2r !set-bg ( ) &done POP2 POP2r POP2r !set-bg ( )
@clear-prev-mouse ( -> ) @clear-prev-mouse ( -> )
#00 .Screen/auto DEO
;blank .Screen/addr DEO2 ;blank .Screen/addr DEO2
.prev/mouse-x LDZ2 #0004 SUB2 .Screen/x DEO2 .prev/mouse-x LDZ2 .Screen/x DEO2
.prev/mouse-y LDZ2 #0005 SUB2 .Screen/y DEO2 .prev/mouse-y LDZ2 .Screen/y DEO2
[ LIT2 12 -Screen/auto ] DEO #41 .Screen/sprite DEO JMP2r
#41 .Screen/sprite DEOk DEO JMP2r
@draw-curr-mouse ( -> ) @draw-curr-mouse ( -> )
.Mouse/x DEI2 DUP2 .prev/mouse-x STZ2 #0004 SUB2 .Screen/x DEO2 .Mouse/x DEI2 DUP2 .prev/mouse-x STZ2 .Screen/x DEO2
.Mouse/y DEI2 DUP2 .prev/mouse-y STZ2 #0005 SUB2 .Screen/y DEO2 .Mouse/y DEI2 DUP2 .prev/mouse-y STZ2 .Screen/y DEO2
.dragging LDZ ?&skip .dragging LDZ ?&skip
( | draw ) ;cursor .Screen/addr DEO2
[ LIT2 16 -Screen/auto ] DEO .about LDZ ?{ #43 .Screen/sprite DEO !&skip } #41 .Screen/sprite DEO
;touch-chr #00 [ LIT2 00 -Mouse/state ] DEI NEQ #60 SFT2 ADD2 .Screen/addr DEO2
#cf .Screen/sprite DEOk DEO
&skip JMP2r &skip JMP2r
@on-click-down ( -> ) @on-click-down ( -> )
.Mouse/state DEI ( state^ ) .Mouse/state DEI ( state^ )
#ff .prev/mouse-state LDZ EOR AND ( down^ ) .prev/mouse-state LDZ #ff EOR AND ( down^ )
#01 AND ?&ok JMP2r &ok #01 AND ?&ok JMP2r &ok
.about LDZ ?on-click-down-about .about LDZ ?on-click-down-about
maybe-select-button ?&skip maybe-select-button ?&skip
@ -1019,7 +882,7 @@
inc-unless-empty STH ( root^ src^ [dst^] ) inc-unless-empty STH ( root^ src^ [dst^] )
LDZk #40 EOR STHkr STZ #00 OVR STZ ( root^ src^ [dst^] ; dst<-src, src<-0 ) LDZk #40 EOR STHkr STZ #00 OVR STZ ( root^ src^ [dst^] ; dst<-src, src<-0 )
EQUk ?&done .easy LDZ ?&done #01 SUB INCr ( root^ src-1^ [dst+1] ) EQUk ?&done #01 SUB INCr ( root^ src-1^ [dst+1] )
LDZk #40 EOR STHkr STZ #00 OVR STZ ( root^ src-1^ [dst+1^] ; dst+1<-src-1, src-1<-0 ) LDZk #40 EOR STHkr STZ #00 OVR STZ ( root^ src-1^ [dst+1^] ; dst+1<-src-1, src-1<-0 )
EQUk ?&done #01 SUB INCr ( root^ src-2^ [dst+2] ) EQUk ?&done #01 SUB INCr ( root^ src-2^ [dst+2] )
@ -1031,7 +894,6 @@
.Mouse/x DEI2 #0008 LTH2 ?&no ( ; x<8 ) .Mouse/x DEI2 #0008 LTH2 ?&no ( ; x<8 )
.Mouse/x DEI2 #0017 GTH2 ?&no ( ; x>=23 ) .Mouse/x DEI2 #0017 GTH2 ?&no ( ; x>=23 )
.Mouse/y DEI2 #0020 GTH2 ?&no ( ; y>=32 ) .Mouse/y DEI2 #0020 GTH2 ?&no ( ; y>=32 )
.waste LDZ .stock LDZ ORA #00 EQU ?&no
deal-from-stock draw #01 JMP2r ( 1^ ) deal-from-stock draw #01 JMP2r ( 1^ )
&no #00 JMP2r ( 0^ ) &no #00 JMP2r ( 0^ )
@ -1063,18 +925,17 @@
ROT2 NIP DUP start-drag draw #01 JMP2r ROT2 NIP DUP start-drag draw #01 JMP2r
@maybe-select-waste ( -> bool^ ) @maybe-select-waste ( -> bool^ )
.waste LDZ #00 EQU ?&no1 .Mouse/y DEI2 #0008 LTH2 ?&no1 ( )
.Mouse/y DEI2 #0008 LTH2 ?&no1 ( ) .Mouse/y DEI2 #0020 GTH2 ?&no1 ( )
.Mouse/y DEI2 #0020 GTH2 ?&no1 ( ) top-waste STHk #00 EQU ?&no2 ( [t^] )
top-waste STHk #00 EQU ?&no2 ( [t^] ) #001c #00 STHkr .waste SUB #0008 MUL2 ADD2 ( w=0x1c+8*index* [t^ w*] )
#001c #00 STHkr .waste SUB #30 SFT2 ADD2 ( w=0x1c+8*index* [t^ w*] ) DUP2 ,&dx STR2 ( w* [t^ w*] ; dx<-w )
DUP2 ,&dx STR2 ( w* [t^ w*] ; dx<-w ) .Mouse/x DEI2 GTH2 ?&no2 ( [t^ w*] )
.Mouse/x DEI2 GTH2 ?&no2 ( [t^ w*] ) #002c #00 STHkr .waste SUB #0008 MUL2 ADD2 ( 0x2c+8*index* [t^ w*] )
#002c #00 STHkr .waste SUB #30 SFT2 ADD2 ( 0x2c+8*index* [t^ w*] ) .Mouse/x DEI2 LTH2 ?&no2 ( [t^] )
.Mouse/x DEI2 LTH2 ?&no2 ( [t^] ) LIT2 [ &dx $2 ] #0008 STHr DUP ( dx* dy=8* t^ t^ )
LIT2 [ &dx $2 ] #0008 STHr DUP ( dx* dy=8* t^ t^ ) start-drag draw #01 JMP2r ( 1^ )
start-drag draw #01 JMP2r ( 1^ ) &no2 POP2r POPr &no1 #00 JMP2r ( 0^ )
&no2 POP2r POPr &no1 #00 JMP2r ( 0^ )
@maybe-select-tableau ( -> bool^ ) @maybe-select-tableau ( -> bool^ )
.Mouse/y DEI2 #0024 LTH2 ?&no1 ( ) .Mouse/y DEI2 #0024 LTH2 ?&no1 ( )
@ -1089,7 +950,7 @@
INCr GTHkr STHr ?&loop ( y2 [lim i+1^] ) INCr GTHkr STHr ?&loop ( y2 [lim i+1^] )
&no2 POP2 POP2r &no1 #00 JMP2r ( 0^ ) &no2 POP2 POP2r &no1 #00 JMP2r ( 0^ )
&col ( x* [lim^ i^] ) &col ( x* [lim^ i^] )
POP2 NIPr STHr ( >> ) POP2 NIPr STHr !maybe-select-column ( bool^ )
@maybe-select-column ( i^ -> bool^ ) @maybe-select-column ( i^ -> bool^ )
.Mouse/y DEI2 #0024 LTH2 ?&no ( i^ ) .Mouse/y DEI2 #0024 LTH2 ?&no ( i^ )
@ -1099,27 +960,27 @@
GTHk ?&next !&done ( i^ top^ row^ [n*] ) GTHk ?&next !&done ( i^ top^ row^ [n*] )
&next ( i^ top^ row^ [n*] ) &next ( i^ top^ row^ [n*] )
.Mouse/y DEI2 ( i^ top^ row^ y* [n*] ) .Mouse/y DEI2 ( i^ top^ row^ y* [n*] )
STH2kr #30 SFT2 #0024 ADD2 ( i^ top^ row^ y* lim=36+8n* [n*] ) STH2kr #0008 MUL2 #0024 ADD2 ( i^ top^ row^ y* lim=36+8n* [n*] )
LTH2 ?&match INC INC2r !&loop ( i^ top^ row+1^ [n+1*] ) LTH2 ?&match INC INC2r !&loop ( i^ top^ row+1^ [n+1*] )
&done ( i^ top^ row^ [n*] ) &done ( i^ top^ row^ [n*] )
.Mouse/y DEI2 ( i^ top^ row^ y* [n*] ) .Mouse/y DEI2 ( i^ top^ row^ y* [n*] )
STH2kr #30 SFT2 #0034 ADD2 ( i^ top^ row^ y* lim=52+8n* [n*] ) STH2kr #0008 MUL2 #0034 ADD2 ( i^ top^ row^ y* lim=52+8n* [n*] )
LTH2 ?&match ( i^ top^ row^ [n*] ) LTH2 ?&match ( i^ top^ row^ [n*] )
POP2r POP2 &no POP #00 JMP2r ( 0^ ) POP2r POP2 &no POP #00 JMP2r ( 0^ )
&match ( i^ top^ row^ [n*] ) &match ( i^ top^ row^ [n*] )
LDZk #00 EQU ?&cancel ( i^ top^ row^ [n*] ) LDZk #00 EQU ?&cancel ( i^ top^ row^ [n*] )
LDZk #40 AND ?&cancel ( i^ top^ row^ [n*] ) LDZk #40 AND ?&cancel ( i^ top^ row^ [n*] )
STH2 SWP2r column-x ( x* [top^ row^ n*] ) STH2 SWP2r column-x ( x* [top^ row^ n*] )
STH2r #30 SFT2 #001c ADD2 ( x* y=28+8n* [top^ row^] ) STH2r #0008 MUL2 #001c ADD2 ( x* y=28+8n* [top^ row^] )
STHr STHr ( x* y* row^ top^ ) STH2r SWP ( x* y* row^ top^ )
start-drag draw #01 JMP2r ( 1^ ) start-drag draw #01 JMP2r ( 1^ )
&cancel ( i^ top^ row^ [n*] ) &cancel ( i^ top^ row^ [n*] )
POP2 POP POP2r #00 JMP2r ( 0^ ) POP2 POP POP2r #00 JMP2r ( 0^ )
@maybe-select-button ( -> bool^ ) @maybe-select-button ( -> bool^ )
.Mouse/y DEI2 .Mouse/y DEI2
DUP2 .height LDZ2 #000c SUB2 LTH2 ?&no DUP2 #00b4 LTH2 ?&no
DUP2 .height LDZ2 #0005 SUB2 GTH2 ?&no DUP2 #00bb GTH2 ?&no
POP2 .Mouse/x DEI2 POP2 .Mouse/x DEI2
DUP2 #0008 LTH2 ?&no DUP2 #0008 LTH2 ?&no
DUP2 #0028 LTH2 ?&restart DUP2 #0028 LTH2 ?&restart
@ -1129,21 +990,13 @@
DUP2 #0078 LTH2 ?&audio DUP2 #0078 LTH2 ?&audio
DUP2 #0080 LTH2 ?&no DUP2 #0080 LTH2 ?&no
DUP2 #00a0 LTH2 ?&about DUP2 #00a0 LTH2 ?&about
DUP2 #00a8 LTH2 ?&no
DUP2 #00c8 LTH2 ?&difficulty
&no POP2 #00 JMP2r &no POP2 #00 JMP2r
&restart POP2 restart #01 JMP2r &restart POP2 reset #01 JMP2r
&quit POP2 quit #01 JMP2r &quit POP2 quit #01 JMP2r
&audio POP2 toggle-audio #01 JMP2r &audio POP2 toggle-audio #01 JMP2r
&about POP2 open-about #01 JMP2r &about POP2 open-about #01 JMP2r
&difficulty POP2 toggle-difficulty #01 JMP2r
@on-game-win ( -> ) @game-won ( -> bool^ )
;draw-scores/games LDA2k INC2 SWP2 STA2
;draw-scores/wins LDA2k INC2 SWP2 STA2
save-scores !draw-buttons
@is-game-won ( -> bool^ )
.foundation #04 OVR ADD SWP ( lim^ start^ ) .foundation #04 OVR ADD SWP ( lim^ start^ )
&loop ( lim^ pos^ ) &loop ( lim^ pos^ )
LDZk #0f AND #0d NEQ ?&no ( lim^ pos^ ) LDZk #0f AND #0d NEQ ?&no ( lim^ pos^ )
@ -1157,31 +1010,15 @@
&disable stop-audio &disable stop-audio
&done !draw-buttons &done !draw-buttons
@toggle-difficulty ( -> )
.easy LDZk #00 EQU SWP STZ !draw-buttons
@min ( x^ y^ -> min[x,y]^ ) @min ( x^ y^ -> min[x,y]^ )
LTHk JMP SWP POP JMP2r LTHk JMP SWP POP JMP2r
( to automatically move a card, we need to know that )
( the alternate suits are both within 2 of its face )
( value, and that its "parallel" suit is within 3 )
( )
( for example, its not safe to auto-play 4h if it )
( might be needed for 3s, 3c, or 2d. )
@check-auto ( card^ -> ok^ ) @check-auto ( card^ -> ok^ )
DUP #30 AND ( card^ suit^ ) DUP #30 AND ( card^ suit^ )
#04 SFT .auto ADD LDZ INC ( card^ base+1^ ) #04 SFT .auto ADD LDZ INC ( card^ base+1^ )
OVR #0f AND EQU ?&ok ( card^ ; base+1=face? ) OVR #0f AND EQU ?&ok ( card^ ; base+1=face? )
POP #00 JMP2r ( 0^ ) POP #00 JMP2r ( 0^ )
&ok ( card^ suit^ ) &ok DUP #30 AND ( card^ suit^ )
DUP #30 AND ( card^ )
#04 SFT INC INC #03 AND ( card^ par^ )
.auto ADD LDZ #04 ADD ( card^ pface+4^ )
OVR #0f AND GTH ?&ok2 ( card^ )
POP #00 JMP2r ( 0^ )
&ok2 ( card^ )
DUP #30 AND ( card^ suit^ )
#04 SFT INC #03 AND ( card^ alt1^ ) #04 SFT INC #03 AND ( card^ alt1^ )
INCk INC #03 AND ( card^ alt1^ alt2^ ) INCk INC #03 AND ( card^ alt1^ alt2^ )
.auto ADD LDZ SWP ( card^ face2^ alt1^ ) .auto ADD LDZ SWP ( card^ face2^ alt1^ )
@ -1229,10 +1066,10 @@
SWP #0f AND SWP STZ JMP2r ( ; zp<-face ) SWP #0f AND SWP STZ JMP2r ( ; zp<-face )
@post-move ( -> ) @post-move ( -> )
auto-move is-game-won ?on-game-win JMP2r auto-move game-won ?draw-buttons JMP2r
@on-click-up ( -> ) @on-click-up ( -> )
#ff .Mouse/state DEI EOR ( not-state^ ) .Mouse/state DEI #ff EOR ( not-state^ )
.prev/mouse-state LDZ AND ( up^ ) .prev/mouse-state LDZ AND ( up^ )
#01 AND ?&ok JMP2r &ok #01 AND ?&ok JMP2r &ok
.dragging LDZ ?release .dragging LDZ ?release
@ -1243,9 +1080,12 @@
.Controller/button DEI .prev/button STZ .Controller/button DEI .prev/button STZ
BRK BRK
@on-release ( -> )
JMP2r
@on-press ( -> ) @on-press ( -> )
.Controller/key DEI #0d EQU ?dump-state ( ; 0x0d: return ) .Controller/key DEI #0d EQU ?dump-state ( ; 0x0d: return )
.Controller/key DEI #1b EQU ?restart ( ; 0x1b: esc ) .Controller/key DEI #1b EQU ?reset ( ; 0x1b: esc )
.Controller/key DEI #20 EQU ?auto-move ( ; 0x20: space ) .Controller/key DEI #20 EQU ?auto-move ( ; 0x20: space )
JMP2r JMP2r
@ -1253,81 +1093,55 @@
@sprites ~sprites.tal @sprites ~sprites.tal
@cursor 80c0 e0f0 f8e0 1000 @restart-button
@blank 0000 0000 0000 0000
@touch-chr [
0000 0000 0814 1417 0000 0000 0008 0808
0000 0000 0000 00c0 0000 0000 0000 0000
1010 2010 1008 0700 0f0f 1f0f 0f07 0000
2010 1010 2020 c000 c0e0 e0e0 c0c0 0000 ]
&down [
0000 0000 0000 0817 0000 0000 0000 0008
0000 0000 0000 00c0 0000 0000 0000 0000
1010 2010 1008 0700 0f0f 1f0f 0f07 0000
2010 1010 2020 c000 c0e0 e0e0 c0c0 0000 ]
@restart-button ( 4x1 tiles )
7f ff ff ff ff ff ff 7f 7f ce d5 cc d5 d6 ff 7f 7f ff ff ff ff ff ff 7f 7f ce d5 cc d5 d6 ff 7f
ff ff ff ff ff ff ff ff ff 62 df 67 fb 47 ff ff ff ff ff ff ff ff ff ff ff 62 df 67 fb 47 ff ff
ff ff ff ff ff ff ff ff ff 36 6a 62 6a 6a ff ff ff ff ff ff ff ff ff ff ff 36 6a 62 6a 6a ff ff
fe ff ff ff ff ff ff fe fe 63 b7 77 b7 b7 ff fe fe ff ff ff ff ff ff fe fe 63 b7 77 b7 b7 ff fe
@quit-button ( 4x1 tiles ) @quit-button
7f ff ff ff ff ff ff 7f 7f ff ff ff ff ff ff 7f 7f ff ff ff ff ff ff 7f 7f ff ff ff ff ff ff 7f
ff ff ff ff ff ff ff ff ff cd b5 b5 b5 cc f7 ff ff ff ff ff ff ff ff ff ff cd b5 b5 b5 cc f7 ff
ff ff ff ff ff ff ff ff ff 51 5b 5b 5b 5b ff ff ff ff ff ff ff ff ff ff ff 51 5b 5b 5b 5b ff ff
fe ff ff ff ff ff ff fe fe ff ff ff ff ff ff fe fe ff ff ff ff ff ff fe fe ff ff ff ff ff ff fe
@audio-off-button ( 4x1 tiles ) @audio-off-button
7f ff ff ff ff ff ff 7f 7f da aa 8a aa a8 ff 7f 7f ff ff ff ff ff ff 7f 7f da aa 8a aa a8 ff 7f
ff ff ff ff ff ff ff ff ff 9b aa aa aa 9b ff ff ff ff ff ff ff ff ff ff ff 9b aa aa aa 9b ff ff
ff ff ff ff ff ff ff ff ff 3e d5 dd d5 3e ff ff ff ff ff ff ff ff ff ff ff 3e d5 dd d5 3e ff ff
fe ff ff ff ff ff ff fe fe c9 5b 49 5b db ff fe fe ff ff ff ff ff ff fe fe c9 5b 49 5b db ff fe
@easy-button ( 4x1 tiles ) @audio-on-button
7f ff ff ff ff ff ff 7f 7f ff ff ff ff ff ff 7f
ff ff ff ff ff ff ff ff ff 1b 75 11 75 15 ff ff
ff ff ff ff ff ff ff ff ff 8a 7a 98 ed 1d ff ff
fe ff ff ff ff ff ff fe fe ff ff ff ff ff ff fe
@hard-button ( 4x1 tiles )
7f ff ff ff ff ff ff 7f 7f ff ff ff ff ff ff 7f
ff ff ff ff ff ff ff ff ff 5b 55 11 55 55 ff ff
ff ff ff ff ff ff ff ff ff 33 55 35 55 53 ff ff
fe ff ff ff ff ff ff fe fe ff ff ff ff ff ff fe
@audio-on-button ( 4x1 tiles )
7f ff ff ff ff ff ff 7f 7f da aa 8a aa a8 ff 7f 7f ff ff ff ff ff ff 7f 7f da aa 8a aa a8 ff 7f
ff ff ff ff ff ff ff ff ff 9b aa aa aa 9b ff ff ff ff ff ff ff ff ff ff ff 9b aa aa aa 9b ff ff
ff ff ff ff ff ff ff ff ff 3e d5 dd d5 3e ff ff ff ff ff ff ff ff ff ff ff 3e d5 dd d5 3e ff ff
fe ff ff ff ff ff ff fe fe cf 57 57 57 d7 ff fe fe ff ff ff ff ff ff fe fe cf 57 57 57 d7 ff fe
@about-button ( 4x1 tiles ) @about-button
7f ff ff ff ff ff ff 7f 7f fe fd fc fd fd ff 7f 7f ff ff ff ff ff ff 7f 7f fe fd fc fd fd ff 7f
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 ce 55 4d 55 4e ff ff
ff ff ff ff ff ff ff ff ff d4 56 56 56 c6 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 fe ff ff ff ff ff ff fe fe 7f ff ff ff ff ff fe
@new-game-button ( 4x1 tiles ) @new-game-button
7f ff ff ff ff ff ff 7f 7f 99 ab a9 ab a9 ff 7f 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 57 56 56 56 af ff ff
ff ff ff ff ff ff ff ff ff 37 ea a2 aa 2a 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 fe ff ff ff ff ff ff fe fe 59 ab a9 ab a9 ff fe
@start-button ( 4x1 tiles ) @start-button
7f ff ff ff ff ff ff 7f 7f fe fd fe ff fc ff 7f 7f ff ff ff ff ff ff 7f 7f fe fd fe ff fc ff 7f
ff ff ff ff ff ff ff ff ff 23 f6 76 b6 76 ff ff ff ff ff ff ff ff ff ff ff 23 f6 76 b6 76 ff ff
ff ff ff ff ff ff ff ff ff 66 ab 27 ab ab ff ff ff ff ff ff ff ff ff ff ff 66 ab 27 ab ab ff ff
fe ff ff ff ff ff ff fe fe 3f 7f 7f 7f 7f ff fe fe ff ff ff ff ff ff fe fe 3f 7f 7f 7f 7f ff fe
@resume-button ( 4x1 tiles ) @resume-button
7f ff ff ff ff ff ff 7f 7f e7 ea e6 ea eb ff 7f 7f ff ff ff ff ff ff 7f 7f e7 ea e6 ea eb ff 7f
ff ff ff ff ff ff ff ff ff 31 ef 33 fd 23 ff ff ff ff ff ff ff ff ff ff ff 31 ef 33 fd 23 ff ff
ff ff ff ff ff ff ff ff ff 5a 55 55 55 15 ff ff ff ff ff ff ff ff ff ff ff 5a 55 55 55 15 ff ff
fe ff ff ff ff ff ff fe fe e7 5f 47 5f 67 ff fe fe ff ff ff ff ff ff fe fe e7 5f 47 5f 67 ff fe
@logo ( 11x2 tiles ) @logo
6c fe 38 38 38 39 3b 7f 48 a4 20 20 20 21 22 40 6c fe 38 38 38 39 3b 7f 48 a4 20 20 20 21 22 40
6c fe 38 70 e0 c0 80 00 48 a4 20 40 80 00 00 00 6c fe 38 70 e0 c0 80 00 48 a4 20 40 80 00 00 00
00 07 1c 38 38 38 38 7c 00 04 10 20 20 20 20 40 00 07 1c 38 38 38 38 7c 00 04 10 20 20 20 20 40
@ -1351,45 +1165,6 @@
3f 3b 39 38 38 38 fe 6c 20 22 21 20 20 20 a4 48 3f 3b 39 38 38 38 fe 6c 20 22 21 20 20 20 a4 48
00 80 c0 e0 70 38 fe 6c 00 00 00 80 40 20 a4 48 00 80 c0 e0 70 38 fe 6c 00 00 00 80 40 20 a4 48
@you-win ( 13x2 tiles )
6c fe 38 1c 0e 07 03 03 24 5a 18 0c 06 03 01 01
6c fe 38 70 e0 c0 80 80 24 5a 18 30 60 c0 80 80
00 07 1c 38 38 38 38 7c 00 03 0c 18 18 18 18 3c
00 c0 70 38 38 38 38 7c 00 c0 30 18 18 18 18 3c
6c fe 38 38 38 38 38 7c 24 5a 18 18 18 18 18 3c
6c fe 38 38 38 38 38 7c 24 5a 18 18 18 18 18 3c
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6c fe 38 38 38 38 38 7c 24 5a 18 18 18 18 18 3c
6c fe 38 38 38 38 38 7c 24 5a 18 18 18 18 18 3c
6c fe 38 38 38 38 38 7c 24 5a 18 18 18 18 18 3c
6c fe 38 38 38 38 38 7c 24 5a 18 18 18 18 18 3c
6c fe 3c 3e 3f 3b 39 38 24 5a 1c 1e 1b 19 18 18
6c fe 38 38 38 b8 f8 f8 24 5a 18 18 18 98 d8 78
03 03 03 03 03 03 0f 06 01 01 01 01 01 01 05 02
80 80 80 80 80 80 e0 c0 80 80 80 80 80 80 a0 40
38 38 38 38 38 1c 07 00 18 18 18 18 18 0c 03 00
38 38 38 38 38 70 c0 00 18 18 18 18 18 30 c0 00
38 38 38 38 38 1c 07 00 18 18 18 18 18 0c 03 00
38 38 38 38 38 70 c0 00 18 18 18 18 18 30 c0 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
38 38 1c 0e 07 03 0f 06 18 18 0c 06 03 01 05 02
38 38 7c ee c7 83 ef c6 18 18 3c 66 c3 81 a5 42
38 38 70 e0 c0 80 e0 c0 18 18 30 60 c0 80 a0 40
38 38 38 38 38 38 fe 6c 18 18 18 18 18 18 5a 24
38 38 38 38 38 38 fe 6c 18 18 18 18 18 18 5a 24
78 38 38 38 38 38 fe 6c 38 18 18 18 18 18 5a 24
@icon-24 ( 3x3 tiles )
00 00 03 02 00 01 01 01 03 07 07 07 03 03 06 06
00 00 00 00 00 c3 c3 c3 00 81 81 ff ff ff bd bd
00 00 c0 40 00 80 80 8e c0 e0 e0 e0 c0 c0 60 6e
00 00 00 00 00 00 00 00 07 07 07 03 03 01 00 00
3c 18 00 18 00 00 00 00 ff ff ff ff ff ff ff ff
01 08 04 00 00 00 00 00 ef ef ef cf cf 8f 0f 1f
00 00 00 00 00 00 00 00 01 03 07 1f 3f 3f 7f 7f
00 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff
00 00 00 00 00 00 00 00 ff fe fe fc fc f8 f0 f0
@corner 00 00 00 1f 1f 18 18 18 @corner 00 00 00 1f 1f 18 18 18
@vert 18 18 18 18 18 18 18 18 @vert 18 18 18 18 18 18 18 18
@horiz 00 00 00 ff ff 00 00 00 @horiz 00 00 00 ff ff 00 00 00

BIN
logo.chr

Binary file not shown.

Binary file not shown.