From c4a18d3557f1cf709d8bef882e7f0631593ff96a Mon Sep 17 00:00:00 2001 From: Joe R Date: Sun, 5 Nov 2023 13:12:02 -0500 Subject: [PATCH] Added Ishido game. --- contrib/customize_cardset.asciidoc | 2 + .../cards/bottoms/ishido/bottom02-n.png | Bin 0 -> 129 bytes data/images/cards/bottoms/ishido/bottom02.png | Bin 0 -> 129 bytes data/images/cards/finder/ishido/01a.gif | Bin 0 -> 193 bytes data/images/cards/finder/ishido/01a.png | Bin 0 -> 226 bytes data/images/cards/finder/ishido/01b.gif | Bin 0 -> 193 bytes data/images/cards/finder/ishido/01b.png | Bin 0 -> 226 bytes data/images/cards/finder/ishido/01c.gif | Bin 0 -> 193 bytes data/images/cards/finder/ishido/01c.png | Bin 0 -> 226 bytes data/images/cards/finder/ishido/01d.gif | Bin 0 -> 193 bytes data/images/cards/finder/ishido/01d.png | Bin 0 -> 226 bytes data/images/cards/finder/ishido/01e.gif | Bin 0 -> 193 bytes data/images/cards/finder/ishido/01e.png | Bin 0 -> 226 bytes data/images/cards/finder/ishido/01f.gif | Bin 0 -> 193 bytes data/images/cards/finder/ishido/01f.png | Bin 0 -> 226 bytes data/images/cards/finder/ishido/02a.gif | Bin 0 -> 210 bytes data/images/cards/finder/ishido/02a.png | Bin 0 -> 268 bytes data/images/cards/finder/ishido/02b.gif | Bin 0 -> 210 bytes data/images/cards/finder/ishido/02b.png | Bin 0 -> 268 bytes data/images/cards/finder/ishido/02c.gif | Bin 0 -> 210 bytes data/images/cards/finder/ishido/02c.png | Bin 0 -> 268 bytes data/images/cards/finder/ishido/02d.gif | Bin 0 -> 210 bytes data/images/cards/finder/ishido/02d.png | Bin 0 -> 268 bytes data/images/cards/finder/ishido/02e.gif | Bin 0 -> 210 bytes data/images/cards/finder/ishido/02e.png | Bin 0 -> 268 bytes data/images/cards/finder/ishido/02f.gif | Bin 0 -> 210 bytes data/images/cards/finder/ishido/02f.png | Bin 0 -> 268 bytes data/images/cards/finder/ishido/03a.gif | Bin 0 -> 215 bytes data/images/cards/finder/ishido/03a.png | Bin 0 -> 271 bytes data/images/cards/finder/ishido/03b.gif | Bin 0 -> 215 bytes data/images/cards/finder/ishido/03b.png | Bin 0 -> 271 bytes data/images/cards/finder/ishido/03c.gif | Bin 0 -> 215 bytes data/images/cards/finder/ishido/03c.png | Bin 0 -> 271 bytes data/images/cards/finder/ishido/03d.gif | Bin 0 -> 215 bytes data/images/cards/finder/ishido/03d.png | Bin 0 -> 271 bytes data/images/cards/finder/ishido/03e.gif | Bin 0 -> 215 bytes data/images/cards/finder/ishido/03e.png | Bin 0 -> 271 bytes data/images/cards/finder/ishido/03f.gif | Bin 0 -> 215 bytes data/images/cards/finder/ishido/03f.png | Bin 0 -> 271 bytes data/images/cards/finder/ishido/04a.gif | Bin 0 -> 213 bytes data/images/cards/finder/ishido/04a.png | Bin 0 -> 297 bytes data/images/cards/finder/ishido/04b.gif | Bin 0 -> 213 bytes data/images/cards/finder/ishido/04b.png | Bin 0 -> 297 bytes data/images/cards/finder/ishido/04c.gif | Bin 0 -> 213 bytes data/images/cards/finder/ishido/04c.png | Bin 0 -> 297 bytes data/images/cards/finder/ishido/04d.gif | Bin 0 -> 213 bytes data/images/cards/finder/ishido/04d.png | Bin 0 -> 297 bytes data/images/cards/finder/ishido/04e.gif | Bin 0 -> 213 bytes data/images/cards/finder/ishido/04e.png | Bin 0 -> 297 bytes data/images/cards/finder/ishido/04f.gif | Bin 0 -> 213 bytes data/images/cards/finder/ishido/04f.png | Bin 0 -> 297 bytes data/images/cards/finder/ishido/05a.gif | Bin 0 -> 214 bytes data/images/cards/finder/ishido/05a.png | Bin 0 -> 283 bytes data/images/cards/finder/ishido/05b.gif | Bin 0 -> 214 bytes data/images/cards/finder/ishido/05b.png | Bin 0 -> 283 bytes data/images/cards/finder/ishido/05c.gif | Bin 0 -> 214 bytes data/images/cards/finder/ishido/05c.png | Bin 0 -> 283 bytes data/images/cards/finder/ishido/05d.gif | Bin 0 -> 214 bytes data/images/cards/finder/ishido/05d.png | Bin 0 -> 283 bytes data/images/cards/finder/ishido/05e.gif | Bin 0 -> 214 bytes data/images/cards/finder/ishido/05e.png | Bin 0 -> 283 bytes data/images/cards/finder/ishido/05f.gif | Bin 0 -> 214 bytes data/images/cards/finder/ishido/05f.png | Bin 0 -> 283 bytes data/images/cards/finder/ishido/06a.gif | Bin 0 -> 220 bytes data/images/cards/finder/ishido/06a.png | Bin 0 -> 301 bytes data/images/cards/finder/ishido/06b.gif | Bin 0 -> 220 bytes data/images/cards/finder/ishido/06b.png | Bin 0 -> 301 bytes data/images/cards/finder/ishido/06c.gif | Bin 0 -> 220 bytes data/images/cards/finder/ishido/06c.png | Bin 0 -> 301 bytes data/images/cards/finder/ishido/06d.gif | Bin 0 -> 220 bytes data/images/cards/finder/ishido/06d.png | Bin 0 -> 301 bytes data/images/cards/finder/ishido/06e.gif | Bin 0 -> 220 bytes data/images/cards/finder/ishido/06e.png | Bin 0 -> 301 bytes data/images/cards/finder/ishido/06f.gif | Bin 0 -> 220 bytes data/images/cards/finder/ishido/06f.png | Bin 0 -> 301 bytes html-src/cardset_customization.html | 6 + html-src/glossary.html | 8 + html-src/rules/freeishido.html | 12 ++ html-src/rules/freeishidorelaxed.html | 14 ++ html-src/rules/ishido.html | 29 +++ html-src/rules/ishidorelaxed.html | 13 ++ po/de_pysol.po | 11 +- po/fr_pysol.po | 11 +- po/it_pysol.po | 11 +- po/pl_pysol.po | 11 +- po/pt_BR_pysol.po | 11 +- po/pysol.pot | 9 + po/ru_pysol.po | 11 +- pysollib/app.py | 4 + pysollib/gamedb.py | 9 +- pysollib/games/special/__init__.py | 1 + pysollib/games/special/ishido.py | 185 ++++++++++++++++++ pysollib/options.py | 3 + pysollib/resource.py | 21 +- scripts/cardset_viewer.py | 3 +- 95 files changed, 371 insertions(+), 14 deletions(-) create mode 100644 data/images/cards/bottoms/ishido/bottom02-n.png create mode 100644 data/images/cards/bottoms/ishido/bottom02.png create mode 100644 data/images/cards/finder/ishido/01a.gif create mode 100644 data/images/cards/finder/ishido/01a.png create mode 100644 data/images/cards/finder/ishido/01b.gif create mode 100644 data/images/cards/finder/ishido/01b.png create mode 100644 data/images/cards/finder/ishido/01c.gif create mode 100644 data/images/cards/finder/ishido/01c.png create mode 100644 data/images/cards/finder/ishido/01d.gif create mode 100644 data/images/cards/finder/ishido/01d.png create mode 100644 data/images/cards/finder/ishido/01e.gif create mode 100644 data/images/cards/finder/ishido/01e.png create mode 100644 data/images/cards/finder/ishido/01f.gif create mode 100644 data/images/cards/finder/ishido/01f.png create mode 100644 data/images/cards/finder/ishido/02a.gif create mode 100644 data/images/cards/finder/ishido/02a.png create mode 100644 data/images/cards/finder/ishido/02b.gif create mode 100644 data/images/cards/finder/ishido/02b.png create mode 100644 data/images/cards/finder/ishido/02c.gif create mode 100644 data/images/cards/finder/ishido/02c.png create mode 100644 data/images/cards/finder/ishido/02d.gif create mode 100644 data/images/cards/finder/ishido/02d.png create mode 100644 data/images/cards/finder/ishido/02e.gif create mode 100644 data/images/cards/finder/ishido/02e.png create mode 100644 data/images/cards/finder/ishido/02f.gif create mode 100644 data/images/cards/finder/ishido/02f.png create mode 100644 data/images/cards/finder/ishido/03a.gif create mode 100644 data/images/cards/finder/ishido/03a.png create mode 100644 data/images/cards/finder/ishido/03b.gif create mode 100644 data/images/cards/finder/ishido/03b.png create mode 100644 data/images/cards/finder/ishido/03c.gif create mode 100644 data/images/cards/finder/ishido/03c.png create mode 100644 data/images/cards/finder/ishido/03d.gif create mode 100644 data/images/cards/finder/ishido/03d.png create mode 100644 data/images/cards/finder/ishido/03e.gif create mode 100644 data/images/cards/finder/ishido/03e.png create mode 100644 data/images/cards/finder/ishido/03f.gif create mode 100644 data/images/cards/finder/ishido/03f.png create mode 100644 data/images/cards/finder/ishido/04a.gif create mode 100644 data/images/cards/finder/ishido/04a.png create mode 100644 data/images/cards/finder/ishido/04b.gif create mode 100644 data/images/cards/finder/ishido/04b.png create mode 100644 data/images/cards/finder/ishido/04c.gif create mode 100644 data/images/cards/finder/ishido/04c.png create mode 100644 data/images/cards/finder/ishido/04d.gif create mode 100644 data/images/cards/finder/ishido/04d.png create mode 100644 data/images/cards/finder/ishido/04e.gif create mode 100644 data/images/cards/finder/ishido/04e.png create mode 100644 data/images/cards/finder/ishido/04f.gif create mode 100644 data/images/cards/finder/ishido/04f.png create mode 100644 data/images/cards/finder/ishido/05a.gif create mode 100644 data/images/cards/finder/ishido/05a.png create mode 100644 data/images/cards/finder/ishido/05b.gif create mode 100644 data/images/cards/finder/ishido/05b.png create mode 100644 data/images/cards/finder/ishido/05c.gif create mode 100644 data/images/cards/finder/ishido/05c.png create mode 100644 data/images/cards/finder/ishido/05d.gif create mode 100644 data/images/cards/finder/ishido/05d.png create mode 100644 data/images/cards/finder/ishido/05e.gif create mode 100644 data/images/cards/finder/ishido/05e.png create mode 100644 data/images/cards/finder/ishido/05f.gif create mode 100644 data/images/cards/finder/ishido/05f.png create mode 100644 data/images/cards/finder/ishido/06a.gif create mode 100644 data/images/cards/finder/ishido/06a.png create mode 100644 data/images/cards/finder/ishido/06b.gif create mode 100644 data/images/cards/finder/ishido/06b.png create mode 100644 data/images/cards/finder/ishido/06c.gif create mode 100644 data/images/cards/finder/ishido/06c.png create mode 100644 data/images/cards/finder/ishido/06d.gif create mode 100644 data/images/cards/finder/ishido/06d.png create mode 100644 data/images/cards/finder/ishido/06e.gif create mode 100644 data/images/cards/finder/ishido/06e.png create mode 100644 data/images/cards/finder/ishido/06f.gif create mode 100644 data/images/cards/finder/ishido/06f.png create mode 100644 html-src/rules/freeishido.html create mode 100644 html-src/rules/freeishidorelaxed.html create mode 100644 html-src/rules/ishido.html create mode 100644 html-src/rules/ishidorelaxed.html create mode 100644 pysollib/games/special/ishido.py diff --git a/contrib/customize_cardset.asciidoc b/contrib/customize_cardset.asciidoc index cc1d5108..b85d5023 100644 --- a/contrib/customize_cardset.asciidoc +++ b/contrib/customize_cardset.asciidoc @@ -43,6 +43,7 @@ Cardsets Types: * Trumps Only = 9 * Matching = 10 * Puzzle = 11 +* Ishido = 12 *$C:* The number of cards in the cardset, generally 42, 48, 52, 68, 78, 96 or 120 @@ -66,6 +67,7 @@ Cardsets Styles: * Hanafuda = 12 * Hex A Deck = 29 * Holiday = 13 +* Ishido = 34 * Mahjongg = 28 * Matching = 32 * Movies = 14 diff --git a/data/images/cards/bottoms/ishido/bottom02-n.png b/data/images/cards/bottoms/ishido/bottom02-n.png new file mode 100644 index 0000000000000000000000000000000000000000..732d76760990a15d0d7f21c259a27535503be838 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_r)EAj~ML;ne^X6!Ua(46*P}mSA0+AkxzmXu!3CNkW2wErfy5 TN~X^rsDi=M)z4*}Q$iB}CEpr} literal 0 HcmV?d00001 diff --git a/data/images/cards/bottoms/ishido/bottom02.png b/data/images/cards/bottoms/ishido/bottom02.png new file mode 100644 index 0000000000000000000000000000000000000000..732d76760990a15d0d7f21c259a27535503be838 GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_r)EAj~ML;ne^X6!Ua(46*P}mSA0+AkxzmXu!3CNkW2wErfy5 TN~X^rsDi=M)z4*}Q$iB}CEpr} literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01a.gif b/data/images/cards/finder/ishido/01a.gif new file mode 100644 index 0000000000000000000000000000000000000000..93c1d9263eea152a518d862f78d44293cffb4fad GIT binary patch literal 193 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nk>g`419=0p>Q34R`(- zta4br*W&fk-S6+HcRkEVd%7|xQ+-dtpSrc8cNu2nJHP*b;2@vr5r!s@_>V!WWhS3k z>ieq2tyCdOS1PFv1*`qWw4Gw1ZoSK;bgvV?_`!5RRN(@Ssw literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01a.png b/data/images/cards/finder/ishido/01a.png new file mode 100644 index 0000000000000000000000000000000000000000..732a6d09cc87da4f8b74ab32ef9a4c78c9d4e0a2 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mgXPELI$Tl#3TMeXGOM?7@fr9@TesALo1`2Q%ctjR6 zFz_7$VMb96uLhu?x2KC^h=u>#D~5aw3LGqsA^-lT9gJyAH<=>h=b8{LI+dk6s%h$s zd0r{D2TmP5lh(wX+We>IPfy4xK8rUq4`)YiD4G*{<($#|1ut0iO4$}J;xecK8q476 L>gTe~DWM4fSV&6w literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01b.gif b/data/images/cards/finder/ishido/01b.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d5c48fcfbdc03c0dd7439d2d63175c4bafa2453 GIT binary patch literal 193 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wKmZa#0OmH24R`(-ta4br z*W&fk-S6+HcRkEVd%7|xQ+-dtpSrc8cNu2nJHP*b;2@vr5r!s@_>V!WWhS3k>ieq2 ztyCdOS1PFv1*`qWw4Gw1ZoSK;bgvV?_`!5RQM@k-nP literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01b.png b/data/images/cards/finder/ishido/01b.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8c6c3947a7eca020d1b8d4b7ed5ddee29287f3 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%61$YNm7D>*m~NU@d#`2~Xoe{bUp1`2Q%ctjR6Fz_7& zVa6R3v)=**y**tVLoEE?UNPijP~c#34Egsz?O;q}y2%s~Ki7n4(WxxmQB6~4%=1dI zJ#gyinY1S6)aE}ue|kbr@mai?c{n?AL(!brE9Z>vFL=SCSIV|<5tl&?&{zgfS3j3^ HP6+|z`(+w!vF*zu_hq>@87@wAOI4B1Lii54R`(-ta4br z*W&fk-S6+HcRkEVd%7|xQ+-dtpSrc8cNu2nJHP*b;2@vr5r!s@_>V!WWhS3k>ieq2 ztyCdOS1PFv1*`qWw4Gw1ZoSK;bgvV?_`!5RS4Sxegh literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01c.png b/data/images/cards/finder/ishido/01c.png new file mode 100644 index 0000000000000000000000000000000000000000..33803d38e3f3284f635e3e51a0752a66367bbe88 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB!)M$YgjTz$OKxSWANZg27_HxA6r71vm>lB8wRq_zr?F zRF>|jrl~XLd8ODM zICb<)S`%|>^PiqSJt3#~EZ)pKoE^ELXin^vb4K?UykOBQWm~w2%b*5mEQ6=3pUXO@ GgeCyj!%Rg0 literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01d.gif b/data/images/cards/finder/ishido/01d.gif new file mode 100644 index 0000000000000000000000000000000000000000..79cd668f9117af7ebe63d316609c9f8cda0eee36 GIT binary patch literal 193 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nr~^2Z_M}bDPJ8JO2z; zIjr7m@p|d*_jlC09%iIHT^W?AzNg?%-CEJR3^Veb-~T^wkk9l8Lz74R$Dq|RlTR%5 zebwSts*pY5)FZZeQL59##q#$&Fp`Qj6W*NrP(pP2{D*H%<7~~ZeNCyX^{H<*Yb|fA l>2$H+Z<92d#AFhuE$2IZ>MZSS!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg_xTTGGF14b9|TgYB|(0{K*9eEzqj!P0|ht>JR*x3 z82Esad+|z`(+w!vF*zu_hq>@87@w|Nn1d_zx0<0p>Q34R`(- zta4br*W&fk-S6+HcRkEVd%7|xQ+-dtpSrc8cNu2nJHP*b;2@vr5r!s@_>V!WWhS3k z>ieq2tyCdOS1PFv1*`qWw4Gw1ZoSK;bgvV?_`!5RRgRZETl literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01e.png b/data/images/cards/finder/ishido/01e.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c62a5f2a04589276119b84c62595d2cac6bd6a GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg-^B1A$ada-?<$aDEeY}q1`7UX_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_L^!9Xd46*Qkd&Q8CL4kwCG34L>w1Y8?=_XS|{9F^FMW?cKM>S2I zG0!W-_Q0v5XVRLOQ=9+v{OJif#b@zm=Hcwf4MlTeubeZwzu*OnUMbtcMO+3oKw}v^ MUHx3vIVCg!0EbykkpKVy literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01f.gif b/data/images/cards/finder/ishido/01f.gif new file mode 100644 index 0000000000000000000000000000000000000000..1fdb003c25caff740ea204cdc70c078f33c62501 GIT binary patch literal 193 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wK#&Czg9GL^j}3SJ8LVBEEIrpK2==Avy-+B4_$%va&+Te5_OlffDQdErY& literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/01f.png b/data/images/cards/finder/ishido/01f.png new file mode 100644 index 0000000000000000000000000000000000000000..0f5dc64c4e14c9664dbf65723b031c478203138d GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%6X3&>>n`)yqnkYX(f@(TtDGW_1g7Yr2OEbxddW?1GxKnEzopr0G(Y;w*UYD literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02a.gif b/data/images/cards/finder/ishido/02a.gif new file mode 100644 index 0000000000000000000000000000000000000000..75f09e71f00fd0bc2bc2d0eaa115acf2d0b20a0f GIT binary patch literal 210 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nk>g`419=0p{r*8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=Xruv?OKXq%>91M9U9C+}*`RJM8-Cr6`EO2o5u_|}b zIOREY(Hgf`#=9#Rv74v+Y@^}NcE80}Un}g8PCviAG=BGtbFbe^6l7Otm{&45 zH&(ZIy0x}7`{*^LddJ9_PjQ;oFvG%NlDyI4Inue>(^qKKteU&lX1zKCm*CcILYxfN E0DCc45dZ)H literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02a.png b/data/images/cards/finder/ishido/02a.png new file mode 100644 index 0000000000000000000000000000000000000000..851b107e838e71529f157ade9327b223d1e807f6 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mgXPELI$Tl#3TMeXGOM?7@fr9@TesALo1`2Q%ctjR6 zFz_7$VMb96uLhuCsi%u$h=u>#D;xP53^-f^*ZlpTKW(`QlP=44zI!JpB+I(23|4e= zSDaQfbsKB8mgK_Dj|@+HUeqv6k=&G{;G%fBYp&14v@prn_R}kM;VtH?|FEr$|Mie+|z`(+w!vF*zu_hq>@87@wKmZa#0Osi)8}9rwSmm&K zuf^-7yWihY?|PV#_H<=Xruv?OKXq%>91M9U9C+}*`RJM8-Cr6`EO2o5u_|}bIOREY z(Hgf`#=9#Rv74v+Y@^}NcE80}Un}g8PCviAG=BGtbFbe^6l7Otm{&45H&(ZI zy0x}7`{*^LddJ9_PjQ;oFvG%NlDyI4Inue>(^qKKteU&lX1zKCm*CcILYxfN02_N& AeES!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%61$YNm7D>*m~NU@d#`2~Xoe{bUp1`2Q%ctjR6Fz_7& zVa6R3v)=**OFdm2LoEE?UfIakV8G!TxaRNw{AtTgm~>gT^W8f+Az9XCWw4@~yW+H> zsoPkywImmIeq?ys^P+}nisYso1sBE3U2}aVriDpJOPw=d~(VfM8< zh424d^V&aC~%&FOtv7cV43vV%B{fBL3{I7>>6ILAYj0QS@!PC{xWt~$(698|n BWpDrh literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02c.gif b/data/images/cards/finder/ishido/02c.gif new file mode 100644 index 0000000000000000000000000000000000000000..24fd15d2c18039cc5ccfedc6bc44511147c03384 GIT binary patch literal 210 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wAOI4B1Lo--8}9rwSmm&K zuf^-7yWihY?|PV#_H<=Xruv?OKXq%>91M9U9C+}*`RJM8-Cr6`EO2o5u_|}bIOREY z(Hgf`#=9#Rv74v+Y@^}NcE80}Un}g8PCviAG=BGtbFbe^6l7Otm{&45H&(ZI zy0x}7`{*^LddJ9_PjQ;oFvG%NlDyI4Inue>(^qKKteU&lX1zKCm*CcILYxfN0K?K( Ad;kCd literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02c.png b/data/images/cards/finder/ishido/02c.png new file mode 100644 index 0000000000000000000000000000000000000000..4ddd87c3321121295836498b9749eaeb7e138d0e GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB!)M$YgjTz$OKxSWANZg27_HxA6r71vm>lB8wRq_zr?F zFEbFo|SkcX0aaz&T zZLHZ^k_$UOGCb{hQNuJva#N0ii{j<3xjqxq!X&@Xtz3Hd{JUvuDwp5emvp%>``Vqt z_kX{c{Jv2!al>xr)a=OEPp{O4x0tW~!?rU1*F&}mD~@FVdQ&MBb@0E&%e AiU0rr literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02d.gif b/data/images/cards/finder/ishido/02d.gif new file mode 100644 index 0000000000000000000000000000000000000000..37e01b10c6369a87b66dfcab77327a6dcd93bb3d GIT binary patch literal 210 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nr~^2Z_M}^K_35cm5fy za#+3B;`P$q@9(I0JTHBg^^qNw=W8}=II8AGqVPP;y-e~b0>0IsUE3|4>&0TA=UY&tUaO*Z9P6lfL DO!QXC literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02d.png b/data/images/cards/finder/ishido/02d.png new file mode 100644 index 0000000000000000000000000000000000000000..a091494ccc95267de4636f86f5b51818b1111691 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg_xTTGGF14b9|TgYB|(0{K*9eEzqj!P0|ht>JR*x3 z82EsadM`f`9 literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02e.gif b/data/images/cards/finder/ishido/02e.gif new file mode 100644 index 0000000000000000000000000000000000000000..62ca8ebad30f4664926685375ccaa2c4fb8a9c94 GIT binary patch literal 210 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nn1d_zx0<0p{r*8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=Xruv?OKXq%>91M9U9C+}*`RJM8-Cr6`EO2o5u_|}b zIOREY(Hgf`#=9#Rv74v+Y@^}NcE80}Un}g8PCviAG=BGtbFbe^6l7Otm{&45 zH&(ZIy0x}7`{*^LddJ9_PjQ;oFvG%NlDyI4Inue>(^qKKteU&lX1zKCm*CcILYxfN E0FSX(F8}}l literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/02e.png b/data/images/cards/finder/ishido/02e.png new file mode 100644 index 0000000000000000000000000000000000000000..d8661465006a15a808b30919faeb53cda58b482e GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg-^B1A$ada-?<$aDEeY}q1`7UX_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LEcJA846*Qkdu1bEg8_$Y;F`bx^QSF0VbW#U&Uf$Rgk)KlmBET` z?uyfjrfy@+){+|z`(+w!vF*zu_hq>@87@wK#&Czg9GO29vklbGg#%Y zdauRnrMutXQSW+~k@j?DP^S8xf(KzKf zbS!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%6X3&>>n`)yqnkYX(f@(TtDGW_1g7Yr2OEbxddW?D}}1rmd-5es5pW<-+W1 zcM9MC{bus}M#aPpyO~q7BV#|kQWxH0zWNW_%J^Ro*(R(w;u#He0E4HipUXO@geCxt C+h+U# literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03a.gif b/data/images/cards/finder/ishido/03a.gif new file mode 100644 index 0000000000000000000000000000000000000000..e91f9d9e19c5693ddc628d8bd4b88b1d78905cf7 GIT binary patch literal 215 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nk>g`419=0p>X#8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=XrurTxhV${O&wl!I?EnXJv&`A#(|?+*7|)AKTeMmy z`F~-uEA?J=wX-GF-Z#&jYu2?RF%PGA?3-ks7GV9??WlS2cd4n%-y23(8r6$6)|NMP zwALndwe~T#^-P#JVN!cgMNjUuzUh-w%LEs@PWAD0UZ}l#>FSy5wAOAY+pNyOwPfcm JZWc}kYXIy7SM2}* literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03a.png b/data/images/cards/finder/ishido/03a.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc6055196fe0d5d1f95c3b25b2d14693ce830ed GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mgXPELI$Tl#3TMeXGOM?7@fr9@TesALo1`2Q%ctjR6 zFz_7$VMb96uLhuCg{O;Sh=u>zD~@~(3Ifg-19$wNIoGR`$IZCpXuL$w{X?u5SE&}2 zs1%*NoFBd6vayYgpGSJw3k$`Wk(woQCY)LTWKJ}_Dx+|z`(+w!vF*zu_hq>@87@wKmZa#0OmO!8}9rwSmm&K zuf^-7yWihY?|PV#_H<=XrurTxhV${O&wl!I?EnXJv&`A#(|?+*7|)AKTeMmy`F~-u zEA?J=wX-GF-Z#&jYu2?RF%PGA?3-ks7GV9??WlS2cd4n%-y23(8r6$6)|NMPwALnd zwe~T#^-P#JVN!cgMNjUuzUh-w%LEs@PWAD0UZ}l#>FSy5wAOAY+pNyOwPfcmZWc}k FYXFIAS6Ki6 literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03b.png b/data/images/cards/finder/ishido/03b.png new file mode 100644 index 0000000000000000000000000000000000000000..445a90bddced0b6273abfd29458e492f3f717021 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%61$YNm7D>*m~NU@d#`2~Xoe{bUp1`2Q%ctjR6Fz_7& zVa6R3v)=**D?D8sLoEEyUUB4WP!Mpw7`WsA%(-5jJZ{D%N8=@e?jK^kxJtFCM5XBD z<^1RkmyK;~{5;abURWs3jMOZdGvU+%AakPWRT=dq8`tF>=kzopr0Kgkz Al>h($ literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03c.gif b/data/images/cards/finder/ishido/03c.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a8cef12dded4c441e7ed93ad0f5b7824ed58411 GIT binary patch literal 215 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wAOI4B1Lip%8}9rwSmm&K zuf^-7yWihY?|PV#_H<=XrurTxhV${O&wl!I?EnXJv&`A#(|?+*7|)AKTeMmy`F~-u zEA?J=wX-GF-Z#&jYu2?RF%PGA?3-ks7GV9??WlS2cd4n%-y23(8r6$6)|NMPwALnd zwe~T#^-P#JVN!cgMNjUuzUh-w%LEs@PWAD0UZ}l#>FSy5wAOAY+pNyOwPfcmZWc}k FYXCOOSXcl6 literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03c.png b/data/images/cards/finder/ishido/03c.png new file mode 100644 index 0000000000000000000000000000000000000000..5f9725d8a869b07c0722ff7160267ab9748ff42d GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB!)M$YgjTz$OKxSWANZg27_HxA6r71vm>lB8wRq_zr?F z++8CdcFxPkePVM?P;I3P(;YV zwVNY*^Je~hDSN*)-+70mtzSl({M)le`yE${Yvr?k`nezz+|z`(+w!vF*zu_hq>@87@w|Nr~^2Z_M}^Bj*2cm5fy za#+3B;`P$q@9(I0J)Mf+htoUuO)^glu>R|I)V%n+)YRqg4WlcK>ctvs%Nsgc zYm>TK`xx7LCQO_#sXeHoCwE%k^vS7Zf{R_J`gl4o)Ly-G^~`lzYd4f_R%hT^vU3+V I3nzm$0K8vUr2qf` literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03d.png b/data/images/cards/finder/ishido/03d.png new file mode 100644 index 0000000000000000000000000000000000000000..b0351a876f44a2f1385a6b03a5627b68ce48376f GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg_xTTGGF14b9|TgYB|(0{K*9eEzqj!P0|ht>JR*x3 z82Esad!+U!GC>Yw@O1TaS?83{ F1OV`NVb%Zu literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03e.gif b/data/images/cards/finder/ishido/03e.gif new file mode 100644 index 0000000000000000000000000000000000000000..184f163ac9aa072df0ddc99b34bcb4880f462c98 GIT binary patch literal 215 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nn1d_zx0<0p>X#8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=XrurTxhV${O&wl!I?EnXJv&`A#(|?+*7|)AKTeMmy z`F~-uEA?J=wX-GF-Z#&jYu2?RF%PGA?3-ks7GV9??WlS2cd4n%-y23(8r6$6)|NMP zwALndwe~T#^-P#JVN!cgMNjUuzUh-w%LEs@PWAD0UZ}l#>FSy5wAOAY+pNyOwPfcm JZWc}kYXAW$SPK9E literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03e.png b/data/images/cards/finder/ishido/03e.png new file mode 100644 index 0000000000000000000000000000000000000000..36cc5554dab97e451e60b441223247efb0fd54b9 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg-^B1A$ada-?<$aDEeY}q1`7UX_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LtnhSk46*P(d&QBjK|#RzV&IPdGv|7B^0*n79F3O=S$i9t@+M7ByIgN(&XQsHQMjET3joi_0!J+|z`(+w!vF*zu_hq>@87@wK#&Czg9GL{9vklbGg#%Y zdauRnrMutXQSW+~k@j?DP^S7GCWiCztIvM=bL{{JbF<9Z$KKxDBG;gz_n!OE^Zc1 G25SJ(c2~my literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/03f.png b/data/images/cards/finder/ishido/03f.png new file mode 100644 index 0000000000000000000000000000000000000000..39be97ff3ca83c8d86437008f91cc249151fd37c GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%6X3&>>n`)yqnkYX(f@(TtDGW_1g7Yr2OEbxddW?QxdU2I%QHe^? z$;G_TrIAZ&-&@-f=rOZ7(8A5T-G@yGywqN C>|-GS literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04a.gif b/data/images/cards/finder/ishido/04a.gif new file mode 100644 index 0000000000000000000000000000000000000000..969a38aa712d4b91e89becd990be08cc69766c3d GIT binary patch literal 213 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nk>g`419=0p?jA8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=XrurTxhV${O4<1lB@5I}){*J@(&y20kN@qO0tjcZs zd7Df4%6%r3YM)-T?ZNzzKdkM?r8m#=Ney3>_3qf;zWL9iswd^my!N%Gwy{1tP@%ac zMnA4HETG4{AfT;6$+6lsW7_n|-LvG4=gw<)uvs=iTe)uK{55K;*J*TY6ldTP+_6)L HlffDQJKI)3 literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04a.png b/data/images/cards/finder/ishido/04a.png new file mode 100644 index 0000000000000000000000000000000000000000..a77534d47bcd36f6ad7941470e4e7ddb2ea55358 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mgXPELI$Tl#3TMeXGOM?7@fr9@TesALo1`2Q%ctjR6 zFz_7$VMb96uLhvtBu^K|5DWjaR~&^}6nI=NYTWsMX4%rIDjcHae~w-W`JE-!r5q}x zX(hDs$@bLf4Z*@S8FMbMPj))a+3VxA@No+po9l5-*J~lga{?0jcgdPRi3~50nV1~5 z@^P2W=Tnx47j0U%IZ*QZ@9S>Y*IS6q+4*2*@#o)ZcVB6iY_D5(Q+SeX{>{s?YsK$b jEIgt1_N-BTbC5p!BR1{!Lnd>8u4C|Y^>bP0l+XkKzBF)o literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04b.gif b/data/images/cards/finder/ishido/04b.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ccbc30ee15591ecb2ffa5991feb0ee3f996e58d GIT binary patch literal 213 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wKmZa#0Ona98}9rwSmm&K zuf^-7yWihY?|PV#_H<=XrurTxhV${O4<1lB@5I}){*J@(&y20kN@qO0tjcZsd7Df4 z%6%r3YM)-T?ZNzzKdkM?r8m#=Ney3>_3qf;zWL9iswd^my!N%Gwy{1tP@%acMnA4H zETG4{AfT;6$+6lsW7_n|-LvG4=gw<)uvs=iTe)uK{55K;*J*TY6ldTP+_6)LlffDQ D+FDht literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04b.png b/data/images/cards/finder/ishido/04b.png new file mode 100644 index 0000000000000000000000000000000000000000..1368af22dd08bb092273380c92ccabe8148c77fb GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%61$YNm7D>*m~NU@d#`2~Xoe{bUp1`2Q%ctjR6Fz_7& zVa6R3v)=**CwaO!hFJKYz2Yd;qQK*FQRB}4Gs~7vRpAgV|8w+8$nPw%F6B@mO)H_5 zPqwE+|z`(+w!vF*zu_hq>@87@wAOI4B1Lj#C8}9rwSmm&K zuf^-7yWihY?|PV#_H<=XrurTxhV${O4<1lB@5I}){*J@(&y20kN@qO0tjcZsd7Df4 z%6%r3YM)-T?ZNzzKdkM?r8m#=Ney3>_3qf;zWL9iswd^my!N%Gwy{1tP@%acMnA4H zETG4{AfT;6$+6lsW7_n|-LvG4=gw<)uvs=iTe)uK{55K;*J*TY6ldTP+_6)LlffDQ Dg}qj* literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04c.png b/data/images/cards/finder/ishido/04c.png new file mode 100644 index 0000000000000000000000000000000000000000..01956347f9177147aa2f23ac57902a3bea92e4a3 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB!)M$YgjTz$OKxSWANZg27_HxA6r71vm>lB8wRq_zr?F z%(=im+37fEuaDQl$1QAZuE#lDuZ0xP2}tPQC2Rg9GQ2=$VshBZ$6Y#~ zPgx#bv}xVuK*{gFue)7eZy`2k=YyHWpMR&_eWh8ly>8h};YqgnH!shw6~AY(@Pyji evqtsJLHg{E*tFXZnalyYj=|H_&t;ucLK6U)(s9KA literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04d.gif b/data/images/cards/finder/ishido/04d.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2e60303ee853955509871a945a3cf039b530073 GIT binary patch literal 213 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nr~^2Z_M}^DK`Icm5fy za#+3B;`P$q@9(I0J;_X>~$Km*A##U#gGag=6<+lC2 z%_V&0J`+l{PcPc`V1CFS*7oDln`il?hOf$cckFN9{O3{Clk#R>`&v`mSf3rJ(A*NE zA6FR`&|_W@&{m=3SnZlIZTjTyS@Onn=e0Z7ESsRMT(@%m8nxByG&(klGjIv+*eS%x GU=08a##Q(L literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04d.png b/data/images/cards/finder/ishido/04d.png new file mode 100644 index 0000000000000000000000000000000000000000..bc4c93de62cd00a0d6cf835220b91ef9f5dcb602 GIT binary patch literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg_xTTGGF14b9|TgYB|(0{K*9eEzqj!P0|ht>JR*x3 z82EsadTYO%SDYl|IaL2I#q>3wEWM}Dox~Ue*b;l?fQBPu{k>*%q;%=JMHc(&64eP%Weu!vdzDFd3LS% kJ&T1W)ZU&os&5X`XMe<|-G0bq4$yTBp00i_>zopr0J8US>;M1& literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/04e.gif b/data/images/cards/finder/ishido/04e.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2a299cab97ae297092af79b0cd14165396db70f GIT binary patch literal 213 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nn1d_zx0<0p?jA8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=XrurTxhV${O4<1lB@5I}){*J@(&y20kN@qO0tjcZs zd7Df4%6%r3YM)-T?ZNzzKdkM?r8m#=Ney3>_3qf;zWL9iswd^my!N%Gwy{1tP@%ac zMnA4HETG4{AfT;6$+6lsW7_n|-LvG4=gw<)uvs=iTe)uK{55K;*J*TY6ldTP+_6)L HlffDQP_S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg-^B1A$ada-?<$aDEeY}q1`7UX_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LoaE`^7-Hdn_KKrWivo|!MU6ZE&n#OyRfR*e{Lj%VA-}W4x|BnO zG_8bIKG~icy&+h*CS%S8_Q_7iIeUG)7CvraV{<*u>3S`scuqh<|1MecCz0U=G82=- zRzB|1`FzUq@S;uYHU~<6|9#!<`g#koIXfTBEdKmE?d~hhlI?ZNZVFGb&A)khcCGk5 ji-jlD-kvq8Zw}IDf5fKUe#m4F&~*%+u6{1-oD!M+|z`(+w!vF*zu_hq>@87@wK#&Czg9GMS9vklbGg#%Y zdauRnrMutXQSW+~k@j?DP^S7GCWiCzs}CMfIPb*Uv;L05@z0E{&Pr!IysXM?`+1v7 z_{x1Ilxm+|wC%zCkUy;L$E7#V@<|O}mG$n}-@f_JqpBz6&Aj%trna#@J5ZsyB}PB4 zGAy9Syda>hLdmh(HDlWJ$=$Q$jpxp5cd%JDL0h?Q<@_~jtJi6CY!qkU65O#S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%6X3&>>n`)yqnkYX(f@(TtDGW_1g7Yr2OEbxddW?3lwAd3e#Lb(;evzyH4Oc745t*qogYW)^?`op$$?X36%tWjBQ<+2-H8JiAu>p2flw gYH!aP)i(#}vp-_fZa-u)2k1HmPgg&ebxsLQ0LBV)Hvj+t literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05a.gif b/data/images/cards/finder/ishido/05a.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ae188b5e48d35f41dc80b9ea70e9deaffd2a282 GIT binary patch literal 214 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nk>g`419=0p{5r8}9rw zSmm&Kuf^-7yWihY?|PV#wp4RY=q*kI=JTtcXMJ42T*Aww%;@0$>#AxPJ$0K6 zDk^i_y1dF-T3ZU^W6X*|8>jd9C8`K=cg~WxT{>5yO=te9HIvq^TDgASCN&1G1v_@~ Jv2Ze20|5FSSo#0} literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05a.png b/data/images/cards/finder/ishido/05a.png new file mode 100644 index 0000000000000000000000000000000000000000..5d50a4d15ee6cf57b3dceec06cfb0f08b62e340c GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mgXPELI$Tl#3TMeXGOM?7@fr9@TesALo1`2Q%ctjR6 zFz_7$VMb96uLhuCi>HfYh=u>zD;N1%6nI=Na{c*lew)*If$D@~3194XoPP3S!^Jfs zoJ(GCEtzzG+urj+_U$&_nlG1x_X^LN`DD)O$1Q4XuE#km!$M2vOh~;n#VT@B--NyU z=dUr!ONi@zmo4^(vwddquRS~D6Jst4r``F*+i4^d{d;;%hw!JIi~A#=+|z`(+w!vF*zu_hq>@87@wKmZa#0Or{q8}9rwSmm&K zuf^-7yWihY?|PV#wp4RY=q*kI=JTtcXMJ42T*Aww%;@0$>#AxPJ$0K6Dk^i_ zy1dF-T3ZU^W6X*|8>jd9C8`K=cg~WxT{>5yO=te9HIvq^TDgASCN&1G1v_@~v2Ze2 F0|1y9SY`kK literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05b.png b/data/images/cards/finder/ishido/05b.png new file mode 100644 index 0000000000000000000000000000000000000000..558c7bd9ff0d6ab16fa6557f468af8783801b2e8 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%61$YNm7D>*m~NU@d#`2~Xoe{bUp1`2Q%ctjR6Fz_7& zVa6R3v)=**TRdGHLoEEyUb)EEqQK*Fk?YTY^V^)x3sff@OZZ~9|ToZEgSn literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05c.gif b/data/images/cards/finder/ishido/05c.gif new file mode 100644 index 0000000000000000000000000000000000000000..4da27c883918ae8cec9e3ca3467b498b812fa7ca GIT binary patch literal 214 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wAOI4B1LoNt8}9rwSmm&K zuf^-7yWihY?|PV#wp4RY=q*kI=JTtcXMJ42T*Aww%;@0$>#AxPJ$0K6Dk^i_ zy1dF-T3ZU^W6X*|8>jd9C8`K=cg~WxT{>5yO=te9HIvq^TDgASCN&1G1v_@~v2Ze2 F0{}#NS!DnK literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05c.png b/data/images/cards/finder/ishido/05c.png new file mode 100644 index 0000000000000000000000000000000000000000..65e81e0be8b2b737a9954149ce63a1fe0e8c228e GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB!)M$YgjTz$OKxSWANZg27_HxA6r71vm>lB8wRq_zr?F zo-U3d7XD|iT;yv};BmRg_2<9&ZBFL}suPYSe6ibc`pJ(C7uSezE_uPV zWYYa@d(R8mx7&DYzFZRCD?DrFlR2v&x2UnX9_OqK3oV^9A@$M}tH@1#6ZY<(zs4vp zA+Gmbw%8xe_L;@M_Uw>PjJYVBcIOvwr;$wb@98xi!k=<3?vH$uA8?9y);+fLC0mls QfbL=NboFyt=akR{00~-chyVZp literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05d.gif b/data/images/cards/finder/ishido/05d.gif new file mode 100644 index 0000000000000000000000000000000000000000..1138fa8fa1d4727cdbba5195ddc83509f3a38db3 GIT binary patch literal 214 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nr~^2Z_M}^K6d|cm5fy za#+3B;`P$q@9(I0Jr&NvjSa4^u67+y=h|uGyZUZ+*~j*&+h3OcKJfS5tM7qzRW*#By3Ga^ zl{s!*US%zS!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg_xTTGGF14b9|TgYB|(0{K*9eEzqj!P0|ht>JR*x3 z82Esadx^S^c<0jm`BqXJuGu>6{6vm!?=nZt9z` zcmMn~MtKQwz3;Nc{&2R>EdI4;hkRnpMd7qNzj!;1WTJmhujvr}lyh-^Q@pe8 Wv86BBl57Ta4}+(xpUXO@geCwWU2U%b literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05e.gif b/data/images/cards/finder/ishido/05e.gif new file mode 100644 index 0000000000000000000000000000000000000000..b65ac2468a7fd352cc18982cc134e7f806f91f15 GIT binary patch literal 214 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nn1d_zx0<0p{5r8}9rw zSmm&Kuf^-7yWihY?|PV#wp4RY=q*kI=JTtcXMJ42T*Aww%;@0$>#AxPJ$0K6 zDk^i_y1dF-T3ZU^W6X*|8>jd9C8`K=cg~WxT{>5yO=te9HIvq^TDgASCN&1G1v_@~ Jv2Ze20{{;tSr`BS literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05e.png b/data/images/cards/finder/ishido/05e.png new file mode 100644 index 0000000000000000000000000000000000000000..c4597fe7da5047fb51f35eb2a8f443275f90fab6 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg-^B1A$ada-?<$aDEeY}q1`7UX_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LZ1Hq)46*P(d*vcuivo|!MXo>p&2Mu$FHoIuEa8jYj?+(mY`C~a zgmcLYt|gQ1Z`*rb$iCgiTl3|T@Lu6rGoQ>^{kTPq&Gk5EWmstGoC&FyrdUO8>YK24 z|NJ#Zc?og7@3O`IaJJ7Z{gQu&X%Q~loCIAB5Zqxt( literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05f.gif b/data/images/cards/finder/ishido/05f.gif new file mode 100644 index 0000000000000000000000000000000000000000..77f1c89b871ef485dfb00d1d059a65cf5d6c5efc GIT binary patch literal 214 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wK#&Czg9GN-9vklbGg#%Y zdauRnrMutXQSW+~k+xKGPUtO81LpIqpJ#nsz+A%1q|E5x{^YEkxkzE=m)wSJ4=0^; zb~3;G<{a0hs`VNhTwh)7I-bt8)5dr8-R!cD?NhhEEd71p@4Hvu1M8}47(I2H4Js;g z+`7EVT3TBQ<73Qw_Q3{qD^Q1sx_0=u3EW%-X=8$t_3@G^09C- GSOWmxx>(Qv literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/05f.png b/data/images/cards/finder/ishido/05f.png new file mode 100644 index 0000000000000000000000000000000000000000..88fd0171ffad3fc7768e43c7a97c1b57c634a942 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%6X3&>>n`)yqnkYX(f@(TtDGW_1g7Yr2OEbxddW?%kBf`1l z1=o^E_qXjmFJ#|tdtbW|0#^!pQvob8Sbk2m-OH-^OH}y@}yMO)~ zqr8N;-gntze>mG`7XR9_Lq0L)qHx-sU%Z`0GSR=M*K`Pf%DK2d@=1QcDc)K4*wUA5 SNj3wzhr!d;&t;ucLK6TXR&M$L literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/06a.gif b/data/images/cards/finder/ishido/06a.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b73785a9fcd43a5a4893a006761722510330658 GIT binary patch literal 220 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nk>g`419=0p^7s8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=Xruv?OKXq%xm_NO_dUGzf$pH>Fi3ceMAFi(GQFV1m ze)ltyZ=J8K2ZyN0#uKvQ!aJoDZ_m4aCU5p}4U3z;(fPhW_d4F7Xz##eD1+FBI{%U(uK;=djYRTU*;^)3U8ow`*S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mgXPELI$Tl#3TMeXGOM?7@fr9@TesALo1`2Q%ctjR6 zFz_7$VMb96uLhvtG*1`D5DWjaQv$gf6a-w3fBBc5=dK>DdQ@TIcR{1ym%>z4bP|Fh z4*2vg`{QIS({*BUn@;T##Z$p9W!W8p^OQctZBA^P6>u~=Rjxn!_y6b)n}W5ggXA{f%y?kMk-FsS8a}<_i)Z9`?3FQl7_oWP8k-=mU1AmY mwYWU5AL^*j*52>9M7aAZ>tf-z{l9@OWbkzLb6Mw<&;$Ug1#cq& literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/06b.gif b/data/images/cards/finder/ishido/06b.gif new file mode 100644 index 0000000000000000000000000000000000000000..d30cd4edc8fad967f0769f369cd3f4b8aaf50342 GIT binary patch literal 220 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@wKmZa#0Oo}r8}9rwSmm&K zuf^-7yWihY?|PV#_H<=Xruv?OKXq%xm_NO_dUGzf$pH>Fi3ceMAFi(GQFV1me)lty zZ=J8K2ZyN0#uKvQ!aJoDZ_m4aCU5p}4U3z;(fPhW_d4F7Xz##eD1+FBI{%U(uK;=djYRTU*;^)3U8ow`*S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%61$YNm7D>*m~NU@d#`2~Xoe{bUp1`2Q%ctjR6Fz_7& zVa6R3v)=**r+K+|z`(+w!vF*zu_hq>@87@wAOI4B1LlPu8}9rwSmm&K zuf^-7yWihY?|PV#_H<=Xruv?OKXq%xm_NO_dUGzf$pH>Fi3ceMAFi(GQFV1me)lty zZ=J8K2ZyN0#uKvQ!aJoDZ_m4aCU5p}4U3z;(fPhW_d4F7Xz##eD1+FBI{%U(uK;=djYRTU*;^)3U8ow`*Z literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/06c.png b/data/images/cards/finder/ishido/06c.png new file mode 100644 index 0000000000000000000000000000000000000000..b2be4795d98d64d0027e3e08c411ce2e3cb12290 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^YCx>S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB!)M$YgjTz$OKxSWANZg27_HxA6r71vm>lB8wRq_zr?F zXI|;T zo|34qH&!cc3f8U;lG}VUXNH#`1Fo1o{{6RSH|pN#O76NY=XRYiB;U!;_|$H hsG~kxd%xon;qI%fi-q6z{|35{!PC{xWt~$(699_SaBlzr literal 0 HcmV?d00001 diff --git a/data/images/cards/finder/ishido/06d.gif b/data/images/cards/finder/ishido/06d.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2d6e1ccfd9bc2cc609cd8c485095ec5f6b5926c GIT binary patch literal 220 zcmZ?wbhEHbRAW$LC}3bv{K>+|z`(+w!vF*zu_hq>@87@w|Nr~^2Z_M}^Fogecm5fy za#+3B;`P$q@9(I0JS!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg_xTTGGF14b9|TgYB|(0{K*9eEzqj!P0|ht>JR*x3 z82Esad-? zHQhV&N*DH&M18%nT4__Tc6E^4=9?K0tTr$(1i@1u6{1-oD!M+|z`(+w!vF*zu_hq>@87@w|Nn1d_zx0<0p^7s8}9rw zSmm&Kuf^-7yWihY?|PV#_H<=Xruv?OKXq%xm_NO_dUGzf$pH>Fi3ceMAFi(GQFV1m ze)ltyZ=J8K2ZyN0#uKvQ!aJoDZ_m4aCU5p}4U3z;(fPhW_d4F7Xz##eD1+FBI{%U(uK;=djYRTU*;^)3U8ow`*S!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB*mg-^B1A$ada-?<$aDEeY}q1`7UX_`QuU7%0G5;1OBO zz`%D9gc)~C%zg_LoaX7`7-Hdnc1j>ugMxs|@h|_<^W4>=RgWqx{4Qwp`%;*yicUgM z!~vh)Wq+KkWx7sGZqun+|z`(+w!vF*zu_hq>@87@wK#&Czg9GM;9vklbGg#%Y zdauRnrMutXQSW+~k@j?DP^S8xfS!3-o>ilV!K6k~CayA#8@b22YMV(E^)jtmSN z`?>!lvI6=10X`wFK>FXmfB%6X3&>>n`)yqnkYX(f@(TtDGW_1g7Yr2OEbxddW?>3Qzz(W*xk7Je5r`h6)(RYfNuDB^%m z@3KEm)-qiuCb#L-E>S!c>{6E95jaojQ{3jnwpjs3vs2~zqmS zr3-sXqQ2f(t+XjvyE;g2^UaJ0Rvf8IuCC$JJHB{Ej>ldZvxgCzSFN!L^4cXW=t2fhS3j3^P6v literal 0 HcmV?d00001 diff --git a/html-src/cardset_customization.html b/html-src/cardset_customization.html index 19a361f6..0bc0ac1d 100644 --- a/html-src/cardset_customization.html +++ b/html-src/cardset_customization.html @@ -50,6 +50,9 @@ back01.ext;back02.ext;back03.ext
  • Puzzle = 11

  • +
  • +

    Ishido = 12

    +
  • $C: The number of cards in the cardset, generally 42, 48, 52, 68, 78, 96 or 120

    @@ -102,6 +105,9 @@ back01.ext;back02.ext;back03.ext
  • Holiday = 13

  • +
  • +

    Ishido = 34

    +
  • Mahjongg = 28

  • diff --git a/html-src/glossary.html b/html-src/glossary.html index 78a1459e..7fcc5a27 100644 --- a/html-src/glossary.html +++ b/html-src/glossary.html @@ -178,6 +178,14 @@ function similar to JOKERS (see Hex A Deck for more info).

    +
    ISHIDO DECK
    + +
    +

    An Ishido set consists of 36 tiles, containing six different colors +and six symbols. Ishido games usually involve matching the colors and +symbols of adjacent tiles.

    +
    +
    JOKER
    diff --git a/html-src/rules/freeishido.html b/html-src/rules/freeishido.html new file mode 100644 index 00000000..ddeecd8a --- /dev/null +++ b/html-src/rules/freeishido.html @@ -0,0 +1,12 @@ +

    Free Ishido

    +

    +Ishido game type. 2 decks. No redeal. + +

    Object

    +

    +Move all tiles to the playing area. + +

    Quick Description

    +

    +Like Ishido, but tiles do not need to be +placed adjacent to other tiles. diff --git a/html-src/rules/freeishidorelaxed.html b/html-src/rules/freeishidorelaxed.html new file mode 100644 index 00000000..3698e505 --- /dev/null +++ b/html-src/rules/freeishidorelaxed.html @@ -0,0 +1,14 @@ +

    Free Ishido Relaxed

    +

    +Ishido game type. 2 decks. No redeal. + +

    Object

    +

    +Move all tiles to the playing area. + +

    Quick Description

    +

    +Like Ishido, but tiles do not need to be +placed adjacent to other tiles, and there are no restrictions +when placing a tile next to two or more other tiles - they just have +to match the color or symbol of each. diff --git a/html-src/rules/ishido.html b/html-src/rules/ishido.html new file mode 100644 index 00000000..ce76bd0f --- /dev/null +++ b/html-src/rules/ishido.html @@ -0,0 +1,29 @@ +

    Ishido

    +

    +Ishido game type. 2 decks. No redeal. + +

    Object

    +

    +Move all tiles to the playing area. + +

    Rules

    +

    +The tiles are played to an grid of eight rows of twelve columns each. +At the start of the game, a tile is placed in each corner, and two are +placed in two diagonally adjacent spaces in the center. +

    +Tiles are drawn from the talon one at a time, and can be played to the +main playing area. A tile can only be played if it is adjacent to +another tile, either horizontally or vertically, and if it matches the +adjacent tile's color or symbol. If a tile is placed next to at least +two other tiles, one must match by color and another by symbol. If it +is played next to four other tiles, it must match two by color and two +by symbol. +

    +The game is played if all tiles from the talon can be played to the +playing area. + +

    History

    +

    +Ishido was originally published as a video game "Ishido: The Way of Stones" +in 1990. It has since been recreated many times. diff --git a/html-src/rules/ishidorelaxed.html b/html-src/rules/ishidorelaxed.html new file mode 100644 index 00000000..152e7007 --- /dev/null +++ b/html-src/rules/ishidorelaxed.html @@ -0,0 +1,13 @@ +

    Ishido Relaxed

    +

    +Ishido game type. 2 decks. No redeal. + +

    Object

    +

    +Move all tiles to the playing area. + +

    Quick Description

    +

    +Like Ishido, but there are no restrictions +when placing a tile next to two or more other tiles - they just have +to match the color or symbol of each. diff --git a/po/de_pysol.po b/po/de_pysol.po index 962266ab..59bb5399 100644 --- a/po/de_pysol.po +++ b/po/de_pysol.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PySol 0.0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2023-09-27 20:03-0400\n" +"PO-Revision-Date: 2023-11-05 12:49-0500\n" "Last-Translator: H. Schaekel \n" "Language-Team: German\n" "Language: de\n" @@ -453,6 +453,9 @@ msgstr "4 Deck Spiele" msgid "Cribbage" msgstr "" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "" @@ -615,6 +618,9 @@ msgstr "" msgid "Tower of Hanoi type" msgstr "" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "Eine Python Spielesammlung" @@ -886,6 +892,9 @@ msgstr "" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "Französisch" diff --git a/po/fr_pysol.po b/po/fr_pysol.po index 9011e016..14f5d673 100644 --- a/po/fr_pysol.po +++ b/po/fr_pysol.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: 1.02\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2023-09-27 20:02-0400\n" +"PO-Revision-Date: 2023-11-05 12:49-0500\n" "Last-Translator: Eric Rausch \n" "Language-Team: French\n" "Language: fr\n" @@ -459,6 +459,9 @@ msgstr "Jeux à 4 jeux de cartes" msgid "Cribbage" msgstr "" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "" @@ -621,6 +624,9 @@ msgstr "" msgid "Tower of Hanoi type" msgstr "" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "Une collection de jeux de solitaire en Python" @@ -916,6 +922,9 @@ msgstr "" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "Français" diff --git a/po/it_pysol.po b/po/it_pysol.po index 75212f69..d6703585 100644 --- a/po/it_pysol.po +++ b/po/it_pysol.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: it_pysol\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2023-09-27 20:02-0400\n" +"PO-Revision-Date: 2023-11-05 12:49-0500\n" "Last-Translator: Giuliano Colla \n" "Language-Team: Italiano \n" "Language: it\n" @@ -465,6 +465,9 @@ msgstr "Giochi con quattro mazzi" msgid "Cribbage" msgstr "" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "" @@ -627,6 +630,9 @@ msgstr "" msgid "Tower of Hanoi type" msgstr "" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "Una raccolta di solitari in Python" @@ -924,6 +930,9 @@ msgstr "" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "Francesi" diff --git a/po/pl_pysol.po b/po/pl_pysol.po index 0d0b9d06..6d959e07 100644 --- a/po/pl_pysol.po +++ b/po/pl_pysol.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PySolFC\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2023-09-27 20:01-0400\n" +"PO-Revision-Date: 2023-11-05 12:49-0500\n" "Last-Translator: Jerzy Trzeciak \n" "Language-Team: Polish \n" "Language: pl\n" @@ -459,6 +459,9 @@ msgstr "Gry czterotaliowe" msgid "Cribbage" msgstr "Szopka" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "" @@ -619,6 +622,9 @@ msgstr "Gry typu Samotnik" msgid "Tower of Hanoi type" msgstr "Gra typu Wieża Hanoi" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "Kolekcja gier Python Solitaire" @@ -921,6 +927,9 @@ msgstr "" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "Francuski" diff --git a/po/pt_BR_pysol.po b/po/pt_BR_pysol.po index 6d070329..ad4f05c4 100644 --- a/po/pt_BR_pysol.po +++ b/po/pt_BR_pysol.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2023-09-27 20:02-0400\n" +"PO-Revision-Date: 2023-11-05 12:50-0500\n" "Last-Translator: Matheus Knack \n" "Language-Team: \n" "Language: pt_BR\n" @@ -458,6 +458,9 @@ msgstr "Jogos de quatro baralhos" msgid "Cribbage" msgstr "Cribbage" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "Sem luz" @@ -618,6 +621,9 @@ msgstr "estilo Resta um" msgid "Tower of Hanoi type" msgstr "estilo Torre de Lucas" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "Coleção de Jogos de Paciência Python" @@ -915,6 +921,9 @@ msgstr "Estilos Combinados (cartas variáveis)" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "Francês" diff --git a/po/pysol.pot b/po/pysol.pot index 3ae6fd24..619d2ae9 100644 --- a/po/pysol.pot +++ b/po/pysol.pot @@ -433,6 +433,9 @@ msgstr "" msgid "Cribbage" msgstr "" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "" @@ -593,6 +596,9 @@ msgstr "" msgid "Tower of Hanoi type" msgstr "" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "" @@ -832,6 +838,9 @@ msgstr "" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "" diff --git a/po/ru_pysol.po b/po/ru_pysol.po index c94d5495..829b0514 100644 --- a/po/ru_pysol.po +++ b/po/ru_pysol.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2023-09-27 20:02-0400\n" +"PO-Revision-Date: 2023-11-05 12:50-0500\n" "Last-Translator: Skomoroh \n" "Language-Team: Russian \n" "Language: ru\n" @@ -462,6 +462,9 @@ msgstr "Игры с четырьмя колодами" msgid "Cribbage" msgstr "" +msgid "Ishido" +msgstr "" + msgid "Lights Out" msgstr "" @@ -624,6 +627,9 @@ msgstr "" msgid "Tower of Hanoi type" msgstr "" +msgid "Ishido type" +msgstr "" + #: pysollib/help.py:43 msgid "A Python Solitaire Game Collection" msgstr "Коллекция питоновских пасьянсов" @@ -911,6 +917,9 @@ msgstr "" msgid "Puzzle type (variable pieces)" msgstr "" +msgid "Ishido type (36 tiles)" +msgstr "" + #: pysollib/resource.py:194 msgid "French" msgstr "Классические" diff --git a/pysollib/app.py b/pysollib/app.py index ea49a84a..060982a9 100644 --- a/pysollib/app.py +++ b/pysollib/app.py @@ -824,6 +824,10 @@ class Application: t0 = "Puzzle" if cs_type not in (CSI.TYPE_PUZZLE,) or cs_subtype != gs: t1 = t0 + elif gc == GI.GC_ISHIDO: + t0 = "Ishido" + if cs_type not in (CSI.TYPE_ISHIDO,): + t1 = t0 else: # we should not come here t0 = t1 = "Unknown" diff --git a/pysollib/gamedb.py b/pysollib/gamedb.py index 71eb7a74..991d5592 100644 --- a/pysollib/gamedb.py +++ b/pysollib/gamedb.py @@ -57,8 +57,9 @@ class GI: GC_TRUMP_ONLY = CSI.TYPE_TRUMP_ONLY GC_MATCHING = CSI.TYPE_MATCHING GC_PUZZLE = CSI.TYPE_PUZZLE + GC_ISHIDO = CSI.TYPE_ISHIDO - NUM_CATEGORIES = CSI.TYPE_PUZZLE + NUM_CATEGORIES = CSI.TYPE_ISHIDO # game subcategory GS_NONE = CSI.SUBTYPE_NONE @@ -90,6 +91,7 @@ class GI: GT_HANAFUDA = 13 GT_HANOI = 35 GT_HEXADECK = 14 + GT_ISHIDO = 39 GT_KLONDIKE = 15 GT_LIGHTS_OUT = 38 GT_MAHJONGG = 16 @@ -166,6 +168,7 @@ class GI: GT_CRIBBAGE_TYPE: n_("Cribbage"), GT_HEXADECK: n_("Hex A Deck"), + GT_ISHIDO: n_("Ishido"), GT_LIGHTS_OUT: n_("Lights Out"), GT_MATRIX: n_("Matrix"), GT_MEMORY: n_("Memory"), @@ -283,6 +286,7 @@ class GI: lambda gi, gt=GT_CRIBBAGE_TYPE: gi.si.game_type == gt), (n_("Hex A Deck type"), lambda gi, gt=GT_HEXADECK: gi.si.game_type == gt), + (n_("Ishido type"), lambda gi, gt=GT_ISHIDO: gi.si.game_type == gt), (n_("Lights Out type"), lambda gi, gt=GT_LIGHTS_OUT: gi.si.game_type == gt), (n_("Matrix type"), lambda gi, gt=GT_MATRIX: gi.si.game_type == gt), @@ -577,7 +581,8 @@ class GI: ('fc-2.21', tuple(range(897, 900)) + tuple(range(11014, 11017)) + tuple(range(13160, 13163)) + (16682,)), ('dev', tuple(range(906, 927)) + tuple(range(11017, 11020)) + - tuple(range(22303, 22311)) + tuple(range(22353, 22361))), + tuple(range(18000, 18004)) + tuple(range(22303, 22311)) + + tuple(range(22353, 22361))), ) # deprecated - the correct way is to or a GI.GT_XXX flag diff --git a/pysollib/games/special/__init__.py b/pysollib/games/special/__init__.py index ab0d54f8..aa07c5dc 100644 --- a/pysollib/games/special/__init__.py +++ b/pysollib/games/special/__init__.py @@ -22,6 +22,7 @@ # ---------------------------------------------------------------------------## from . import cribbage # noqa: F401 from . import hanoi # noqa: F401 +from . import ishido # noqa: F401 from . import lightsout # noqa: F401 from . import memory # noqa: F401 from . import pegged # noqa: F401 diff --git a/pysollib/games/special/ishido.py b/pysollib/games/special/ishido.py new file mode 100644 index 00000000..782c72f3 --- /dev/null +++ b/pysollib/games/special/ishido.py @@ -0,0 +1,185 @@ +#!/usr/bin/env python +# -*- mode: python; coding: utf-8; -*- +# --------------------------------------------------------------------------- +# +# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer +# Copyright (C) 2003 Mt. Hood Playing Card Co. +# Copyright (C) 2005-2009 Skomoroh +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# --------------------------------------------------------------------------- + +from pysollib.game import Game +from pysollib.gamedb import GI, GameInfo, registerGame +from pysollib.layout import Layout +from pysollib.stack import \ + OpenTalonStack, \ + ReserveStack, \ + StackWrapper + +# ************************************************************************ +# * Ishido +# ************************************************************************ + + +class Ishido_RowStack(ReserveStack): + def clickHandler(self, event): + if (not self.cards and self.game.s.talon.cards and + self.game.isValidPlay(self.id, + self.game.s.talon.getCard().rank, + self.game.s.talon.getCard().suit)): + self.game.s.talon.playMoveMove(1, self) + return 1 + return ReserveStack.clickHandler(self, event) + + rightclickHandler = clickHandler + + def acceptsCards(self, from_stack, cards): + return not self.cards and self.game.isValidPlay(self.id, + cards[0].rank, + cards[0].suit) + + def canFlipCard(self): + return False + + +class Ishido(Game): + Talon_Class = OpenTalonStack + RowStack_Class = StackWrapper(Ishido_RowStack, max_move=0) + Hint_Class = None + + REQUIRE_ADJACENT = True + STRICT_FOUR_WAYS = True + + # + # game layout + # + + def createGame(self): + # create layout + l, s = Layout(self), self.s + + ta = "ss" + x, y = l.XM, l.YM + 2 * l.YS + + w2 = max(2 * l.XS, x) + # set window + w, h = w2 + l.XM * 2 + l.CW * 12, l.YM * 2 + l.CH * 8 + self.setSize(w, h) + + # Create rows + for j in range(8): + x, y = w2 + l.XM, l.YM + l.CH * j + for i in range(12): + s.rows.append(self.RowStack_Class(x, y, self)) + x = x + l.CW + + s.talon = self.Talon_Class(l.XM, l.YM, self) + l.createText(s.talon, anchor=ta) + + # define stack-groups + l.defaultStackGroups() + return l + + def startGame(self): + self.moveMove(1, self.s.talon, self.s.rows[0], frames=0) + self.s.rows[0].flipMove() + self.moveMove(1, self.s.talon, self.s.rows[11], frames=0) + self.s.rows[11].flipMove() + self.moveMove(1, self.s.talon, self.s.rows[41], frames=0) + self.s.rows[41].flipMove() + self.moveMove(1, self.s.talon, self.s.rows[54], frames=0) + self.s.rows[54].flipMove() + self.moveMove(1, self.s.talon, self.s.rows[84], frames=0) + self.s.rows[84].flipMove() + self.moveMove(1, self.s.talon, self.s.rows[95], frames=0) + self.s.rows[95].flipMove() + self.s.talon.fillStack() + + def isGameWon(self): + return len(self.s.talon.cards) == 0 + + def isValidPlay(self, playSpace, playRank, playSuit): + # check that there's an adjacent card + adjacent = self.getAdjacent(playSpace) + rankMatches = 0 + suitMatches = 0 + totalMatches = 0 + for i in adjacent: + if len(i.cards) > 0: + totalMatches += 1 + if i.cards[-1].rank == playRank: + rankMatches += 1 + if i.cards[-1].suit == playSuit: + suitMatches += 1 + + if i.cards[-1].suit != playSuit and \ + i.cards[-1].rank != playRank: + return False + + if self.REQUIRE_ADJACENT and totalMatches == 0: + return False + + if self.STRICT_FOUR_WAYS: + if totalMatches > 1 and (rankMatches == 0 or suitMatches == 0): + return False + if totalMatches == 4 and (rankMatches < 2 or suitMatches < 2): + return False + + return True + + def getAdjacent(self, playSpace): + adjacentRows = [] + if playSpace % 12 != 11: + adjacentRows.append(self.s.rows[playSpace + 1]) + + if playSpace % 12 != 0: + adjacentRows.append(self.s.rows[playSpace - 1]) + + if playSpace + 12 < 96: + adjacentRows.append(self.s.rows[playSpace + 12]) + + if playSpace - 12 > -1: + adjacentRows.append(self.s.rows[playSpace - 12]) + + return adjacentRows + + +class IshidoRelaxed(Ishido): + STRICT_FOUR_WAYS = False + + +class FreeIshido(Ishido): + REQUIRE_ADJACENT = False + + +class FreeIshidoRelaxed(Ishido): + STRICT_FOUR_WAYS = False + REQUIRE_ADJACENT = False + + +def r(id, gameclass, name, decks, redeals, skill_level): + game_type = GI.GT_ISHIDO + gi = GameInfo(id, gameclass, name, game_type, decks, redeals, skill_level, + ranks=list(range(6)), suits=list(range(6)), + category=GI.GC_ISHIDO) + registerGame(gi) + return gi + + +r(18000, Ishido, 'Ishido', 2, 0, GI.SL_MOSTLY_SKILL) +r(18001, IshidoRelaxed, 'Ishido Relaxed', 2, 0, GI.SL_MOSTLY_SKILL) +r(18002, FreeIshido, 'Free Ishido', 2, 0, GI.SL_MOSTLY_SKILL) +r(18003, FreeIshidoRelaxed, 'Free Ishido Relaxed', 2, 0, GI.SL_MOSTLY_SKILL) diff --git a/pysollib/options.py b/pysollib/options.py index e66e1f21..b8eaad29 100644 --- a/pysollib/options.py +++ b/pysollib/options.py @@ -210,6 +210,7 @@ highlight_piles = float(0.2, 9.9) 11_8 = string_list(min=2, max=2) 11_9 = string_list(min=2, max=2) 11_10 = string_list(min=2, max=2) +12 = string_list(min=2, max=2) scale_cards = boolean scale_x = float scale_y = float @@ -577,6 +578,7 @@ class Options: 8: ("Mid Winter's Eve (8x8)", ""), 9: ("Hofamterspiel (9x9)", ""), 10: ("Eternal Dragon (10x10)", "")}, + CSI.TYPE_ISHIDO: {0: ("Simple Ishido XL", "")}, } else: self.cardset = { @@ -601,6 +603,7 @@ class Options: 8: ("Mid Winter's Eve (8x8)", ""), 9: ("Hofamterspiel (9x9)", ""), 10: ("Eternal Dragon (10x10)", "")}, + CSI.TYPE_ISHIDO: {0: ("Simple Ishido", "")}, } # not changeable options diff --git a/pysollib/resource.py b/pysollib/resource.py index c6eae13f..a2c5c31b 100644 --- a/pysollib/resource.py +++ b/pysollib/resource.py @@ -182,6 +182,7 @@ class CSI: TYPE_TRUMP_ONLY = 9 TYPE_MATCHING = 10 TYPE_PUZZLE = 11 + TYPE_ISHIDO = 12 # cardset subtypes SUBTYPE_NONE = 0 @@ -206,7 +207,8 @@ class CSI: 8: _("Dashavatara Ganjifa type (120 cards)"), 9: _("Trumps only type (variable cards)"), 10: _("Matching type (variable cards)"), - 11: _("Puzzle type (variable pieces)") + 11: _("Puzzle type (variable pieces)"), + 12: _("Ishido type (36 tiles)") } TYPE_NAME = { @@ -220,7 +222,8 @@ class CSI: 8: _("Dashavatara Ganjifa"), 9: _("Trumps only"), 10: _("Matching"), - 11: _("Puzzle") + 11: _("Puzzle"), + 12: _("Ishido") } SUBTYPE_NAME = { @@ -246,7 +249,8 @@ class CSI: 8: "dashavatara-ganjifa", 9: "trumps-only", 10: "matching", - 11: "puzzle" + 11: "puzzle", + 12: "ishido" } TYPE_SUITS = { @@ -260,7 +264,8 @@ class CSI: 8: "abcdefghij", 9: "", 10: "", - 11: "" + 11: "", + 12: "abcdef" } TYPE_RANKS = { @@ -275,6 +280,7 @@ class CSI: 9: list(range(0)), 10: list(range(0)), 11: list(range(0)), + 12: list(range(6)) } TYPE_TRUMPS = { @@ -289,6 +295,7 @@ class CSI: 9: (), 10: (), 11: (), + 12: () } # cardset styles @@ -308,6 +315,7 @@ class CSI: 12: _("Hanafuda"), # 29: _("Hex A Deck"), # 13: _("Holiday"), # + 34: _("Ishido"), # 28: _("Mahjongg"), # 32: _("Matching"), # 14: _("Movies"), # @@ -548,7 +556,10 @@ class CardsetManager(ResourceManager): cs.nletters = 0 cs.nshadows = 0 cs.trumps = list(range(cs.ncards)) - + elif s == CSI.TYPE_ISHIDO: + cs.nbottoms = 0 + cs.nletters = 0 + cs.nshadows = 0 else: return 0 return 1 diff --git a/scripts/cardset_viewer.py b/scripts/cardset_viewer.py index d6a17244..ae5fd596 100755 --- a/scripts/cardset_viewer.py +++ b/scripts/cardset_viewer.py @@ -27,7 +27,8 @@ cardset_type = { '8': 'Dashavatara Ganjifa', '9': 'Trump only', '10': 'Matching', - '11': 'Puzzle' + '11': 'Puzzle', + '12': 'Ishido' } ALL_IMGS = False