From a56759dbb1ba18e410f7fb494709265538b68db9 Mon Sep 17 00:00:00 2001 From: d_m Date: Sat, 27 Jul 2024 22:04:02 -0400 Subject: [PATCH] improved readme --- README.md | 32 +++++++++++++++++++++++++++++--- game1.png | Bin 0 -> 4458 bytes game2.png | Bin 0 -> 3977 bytes kodiak.tal | 3 --- start.png | Bin 2687 -> 3777 bytes 5 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 game1.png create mode 100644 game2.png diff --git a/README.md b/README.md index e2aac87..a836f62 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,36 @@ # kodiak +*Kodiak* is an implementation of [Klondike Solitaire](https://en.wikipedia.org/wiki/Klondike_(solitaire)) for the[Uxn/Varvara ecosystem](https://100r.co/site/uxn.html) virtual machine. + ![screenshot of initial solitaire deal](start.png) -## getting started +Currently *Kodiak* is very limited: + + - Can't move cards from the foundation + - Must manually move every card + - No undo functionality + - No scoring or timing + - No music or animations + - No splash screen + - No buttons to restart or quit + +Future releases may relax some or all of these constraints. + +![screenshot of solitarire mid-game](game1.png) + +Building the Kodiak ROM requires a Uxn assembler: ``` -uxnasm kodiak.tal kodiak.rom -uxnemu kodiak.rom +$ uxnasm kodiak.tal kodiak.rom +Assembled kodiak.rom in 10923 bytes(16.73% used), 253 labels, 0 macros. ``` + +Running the Kodiak ROM requires an emulator. For example: + +``` +$ uxnemu kodiak.rom +``` + +![another screenshot of solitaire](game2.png) + +Kodiak was built by d_m, 2023-2024 diff --git a/game1.png b/game1.png new file mode 100644 index 0000000000000000000000000000000000000000..5bca3cd49b409b8f4358fb04da1c095e66b61c39 GIT binary patch literal 4458 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 NexjqzeQTene*oQB^0NQ{ literal 0 HcmV?d00001 diff --git a/kodiak.tal b/kodiak.tal index df82e71..58eb7ab 100644 --- a/kodiak.tal +++ b/kodiak.tal @@ -439,8 +439,6 @@ @inc-unless-empty ( zp^ -> zp1^ ) LDZk #00 EQU JMP INC JMP2r -@release-held-cards-column ( col -> ) - @release ( -> ) clear-prev-hold ( ) try-release-foundation ?&done ( ) @@ -450,7 +448,6 @@ INC LTHk #00 EQU ?&loop POP2 ( ) &done .dragging #05 initialize ( ) #0000 .held STZ2 !draw ( ) - &ok ( ) .held LDZ2 SWP LITr 00 ( last^ first^ [zero^] ) &loop2 STHkr OVR STZ ( last^ pos^ [zero^] ; pos<-zero ) INC LTHk #00 EQU ?&loop2 ( last^ pos+1^ [zero^] ) diff --git a/start.png b/start.png index 5155be4acde8aa2f5d18ecf913b4289cbaa3e0b8..df3c58e922aa42364ed7bc658d6e1036635a5b21 100644 GIT binary patch literal 3777 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 delta 2601 zcmZ`*dpuO>8$UC1m|-+djcdpmyM-MxF>0D7Gvks=88Whjl(1QsrVUHVTz0Sxl`W)| zOXXUUL1-yPZ7W5&=C+!V6e_~1w4>iqzkhyz{Qfwf=bYzuzVG*Wp7(uaMxV7vCp|gN ztJK%30|2nf)y2^Z0MIx9K>Z405KX^CMf*3>Pkc>Htoe{tT>${7{pjk*_KqKVlZXGK z$V?+S5kH9b=iy)T-A|;Y&aFZ1ZniN;5OnWU6=-mm(nKH zaRjg*EjAKSn41DoLWm%cJ3M(HdV|85;IOL?y-r=&jzX)Ldqw8od(~@O#F4L(g|0!c{^k9)s!;o<}ntc3c6>(KTh6dLB^YU`yy!~>h zdpLi2Tkm9-@r!k6(5=)Z(bn5I=UHyHj;I$Z60xviSFgawbfGzz$Z?V_lL@IdxHLRu zR@J>4G$L4QV7*@URu4XFoI~OGCV3`($z6EtWU^rPK_V%}RC6Y#epS%qZ}aO^i2L5>*d=YqjDY<-f!E%=M@JX- ztS*pi?;JaH>*4LL@7y16k0{pNiz2->b<_;ch?brUzvddw->hY)jTED_t?UIyHKp?G zVxn~E^zG$S*<-(x`LHM5X`SZLvshU|fT^IW0T9}gjqK!6ciF#Rb`8?&u<T9wigAYkPbK<|kSl{jpxtxQO9z54rQj{J|! z$#)0qT56*1U+Fxr4wW5=VFmja){PzDhRuHLMwS>sbK&3o>>zp8^Z9fhXZu^5x#NK} z!2X0J9rh)!8*S1*zT8Dup(OGeOx^AWz`tV6Zk6HNKu z$w3SL;=EG)n0-hs^_k76?D_JNqB6lEZUx0b3AKQ|#i=t)T5yAChn2ag(m#E84fWRK z9icr6mhM!+X)O?of{wZ*+68pLC*2JV97}5lipj8837&AW0jc6$w0qAn7qzw~{~6u5 zp(+Ko0F_6wCyeKOhFa#ha|1pLF9hIGTY!qD#EVWt3!I3^*3mPm`A zG9V=8s3MH-{W3h3#q$a&9P&OV9dOpx;g_^6WTS@58gGUcUgzvzr8r=uyW@gJ z>b-1~{z!}M;l<<#^v}3G{WWp1!_n5Y1Cy4RL|U7HPGgJ;_^z9AKXTB5Q>QUNO}HEU zGz9}MxFwgGTSrKvOiP>pjJ`^YchD>z^W%MoMBUnu2-AP+s2Kfvd4Uq$^jw$ z3?ZHoyH01DG!(v*#lOOls|y2g+)|f=6<+?TWBwnJ4w+&w6_d6RQX-P^dlr=U(zFR8 zyyS--MN&i|^PXX%jA~`NSND&$H*-xX$t;~#n=6?7e!rYdb?8-b7s|ubvdGh%Rd{~FlyRHxulkl*P&GA# zZ|$C%GVKQ^#s0wIL14NoK-*&$p*rpSJ$oI8$v=qcqC$n2*vFIOghO@kSfES2Rx?)qx?eZ{d(BurkyJuCSrY%P|nhABu1ju+mNu;-z0n3*dhH z)rdp|BV}6yKMB5q8Lc4Z*u(e(9bKrOk=FbT5t=N>Sl@{Ey?}*?C-une2yY?St(l6q z>bS9Q=813BA)G%Ng^Cq@!-CTZyov?TDue+}ph0^HC=SVMIS~WE{0wR4h%*)tDSc;? z#F`L=4nQ~sfU^S+nkSqg03f3uj}u!81sT_fInhK_FdfkeKdK?1U49c}loK1WI|PC* zlmLFRkBbIdUjZyuo*W0^=82t4YR5@t@75UsI6dSMBTjOM+3VCE