From 913a35beaa3c8d08aeae1e32f4edc267dc794433 Mon Sep 17 00:00:00 2001 From: yukirij Date: Wed, 25 Sep 2024 18:06:07 -0700 Subject: [PATCH] Update piece names; remove check restriction from alt moves. --- game/src/game/mod.rs | 29 ++++++++-- server/src/app/mod.rs | 2 +- server/src/main.rs | 4 +- server/src/manager/data.rs | 10 ++-- www/asset/{omen_dawn.svg => heart_dawn.svg} | 6 +-- www/asset/{omen_dusk.svg => heart_dusk.svg} | 0 www/asset/png/behemoth-dawn.png | Bin 0 -> 3368 bytes www/asset/png/behemoth-dusk.png | Bin 0 -> 3647 bytes www/asset/png/castle-dawn.png | Bin 0 -> 916 bytes www/asset/png/castle-dusk.png | Bin 0 -> 932 bytes www/asset/png/dragon-dawn.png | Bin 0 -> 3678 bytes www/asset/png/dragon-dusk.png | Bin 0 -> 4008 bytes www/asset/png/heart-dawn.png | Bin 0 -> 1457 bytes www/asset/png/heart-dusk.png | Bin 0 -> 1533 bytes www/asset/png/knight-dawn.png | Bin 0 -> 1950 bytes www/asset/png/knight-dusk.png | Bin 0 -> 2108 bytes www/asset/png/lance-dawn.png | Bin 0 -> 1237 bytes www/asset/png/lance-dusk.png | Bin 0 -> 1273 bytes www/asset/png/militia-dawn.png | Bin 0 -> 886 bytes www/asset/png/militia-dusk.png | Bin 0 -> 911 bytes www/asset/png/tower-dawn.png | Bin 0 -> 2296 bytes www/asset/png/tower-dusk.png | Bin 0 -> 2444 bytes www/js/game.js | 57 +++++++++++--------- www/js/game_asset.js | 2 +- www/js/game_config.js | 19 +++++++ www/js/language.js | 4 +- www/js/scene.js | 2 +- 27 files changed, 91 insertions(+), 44 deletions(-) rename www/asset/{omen_dawn.svg => heart_dawn.svg} (94%) rename www/asset/{omen_dusk.svg => heart_dusk.svg} (100%) create mode 100644 www/asset/png/behemoth-dawn.png create mode 100644 www/asset/png/behemoth-dusk.png create mode 100644 www/asset/png/castle-dawn.png create mode 100644 www/asset/png/castle-dusk.png create mode 100644 www/asset/png/dragon-dawn.png create mode 100644 www/asset/png/dragon-dusk.png create mode 100644 www/asset/png/heart-dawn.png create mode 100644 www/asset/png/heart-dusk.png create mode 100644 www/asset/png/knight-dawn.png create mode 100644 www/asset/png/knight-dusk.png create mode 100644 www/asset/png/lance-dawn.png create mode 100644 www/asset/png/lance-dusk.png create mode 100644 www/asset/png/militia-dawn.png create mode 100644 www/asset/png/militia-dusk.png create mode 100644 www/asset/png/tower-dawn.png create mode 100644 www/asset/png/tower-dusk.png create mode 100644 www/js/game_config.js diff --git a/game/src/game/mod.rs b/game/src/game/mod.rs index 6236fe1..9054ca5 100644 --- a/game/src/game/mod.rs +++ b/game/src/game/mod.rs @@ -5,10 +5,20 @@ use crate::{ piece::Piece, util::Hex, }; +#[derive(Clone, Copy)] +enum GameStatus { + Normal, + Check(u32), + Checkmate, + Resign, +} + pub type Pool = [u8; 7]; +#[derive(Clone)] pub struct Game { - pub complete:bool, + status:GameStatus, + pub turn:u16, pub board:Board, pub pool:[Pool; 2], @@ -19,7 +29,7 @@ impl Game { pub fn new() -> Self { Self { - complete:false, + status:GameStatus::Normal, turn:0, @@ -48,7 +58,10 @@ impl Game { { let player = (self.turn & 1) as u8; - if self.complete { return Err(()); } + match self.status { + GameStatus::Checkmate | GameStatus::Resign => { return Err(()); } + _ => { } + } let valid = true; @@ -133,7 +146,7 @@ impl Game { // Player retired. 2 => { - self.complete = true; + self.status = GameStatus::Resign; true } @@ -149,4 +162,12 @@ impl Game { { Vec::new() } + + pub fn is_complete(&self) -> bool + { + match self.status { + GameStatus::Checkmate | GameStatus::Resign => true, + _ => false, + } + } } diff --git a/server/src/app/mod.rs b/server/src/app/mod.rs index b15e924..e9c4d74 100644 --- a/server/src/app/mod.rs +++ b/server/src/app/mod.rs @@ -238,7 +238,7 @@ impl App { // Add to resume if session has user and is user turn. let is_turn_player = (session.p_dawn.user == user_id && (session.game.turn & 1) == 0) || (session.p_dusk.user == user_id && (session.game.turn & 1) == 1); - if !session.game.complete && is_turn_player { + if !session.game.is_complete() && is_turn_player { response.resume += 1; } diff --git a/server/src/main.rs b/server/src/main.rs index d7b6035..b4357d5 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -188,7 +188,7 @@ async fn main() for asset in [ "promote.svg", - "omen_dawn.svg", + "heart_dawn.svg", "behemoth_dawn.svg", "dragon_dawn.svg", "castle_dawn.svg", @@ -197,7 +197,7 @@ async fn main() "knight_dawn.svg", "militia_dawn.svg", - "omen_dusk.svg", + "heart_dusk.svg", "behemoth_dusk.svg", "dragon_dusk.svg", "castle_dusk.svg", diff --git a/server/src/manager/data.rs b/server/src/manager/data.rs index 26776c6..0799e8b 100644 --- a/server/src/manager/data.rs +++ b/server/src/manager/data.rs @@ -362,9 +362,9 @@ pub async fn thread_system(mut app:App, bus:Bus) if let Some(session) = app.sessions.get(token) { let mut valid = match request.game_state { - 1 => !session.game.complete, - 2 => !session.game.complete, - 3 => session.game.complete, + 1 => !session.game.is_complete(), + 2 => !session.game.is_complete(), + 3 => session.game.is_complete(), _ => true, }; valid &= !request.is_player || Some(session.p_dawn.user) == user_id || Some(session.p_dusk.user) == user_id; @@ -473,7 +473,7 @@ pub async fn thread_system(mut app:App, bus:Bus) }; if let Some(session) = app.sessions.get_mut(&request.token) { - if !session.game.complete { + if !session.game.is_complete() { if (user_id == Some(session.p_dawn.user) && session.game.turn & 1 == 0) || (user_id == Some(session.p_dusk.user) && session.game.turn & 1 == 1) { @@ -548,7 +548,7 @@ pub async fn thread_system(mut app:App, bus:Bus) if let Some(sid) = session_id { if let Some(session) = app.sessions.get_mut(&sid) { - if !session.game.complete { + if !session.game.is_complete() { if (user_id == Some(session.p_dawn.user) && session.game.turn & 1 == 0) || (user_id == Some(session.p_dusk.user) && session.game.turn & 1 == 1) { diff --git a/www/asset/omen_dawn.svg b/www/asset/heart_dawn.svg similarity index 94% rename from www/asset/omen_dawn.svg rename to www/asset/heart_dawn.svg index 05fa281..9cd6035 100644 --- a/www/asset/omen_dawn.svg +++ b/www/asset/heart_dawn.svg @@ -8,7 +8,7 @@ version="1.1" id="svg1" inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)" - sodipodi:docname="king_dawn.svg" + sodipodi:docname="heart_dawn.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" @@ -75,9 +75,9 @@ sodipodi:nodetypes="ccccccccccccccc" /> + sodipodi:nodetypes="ccccccccccc" /> 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 literal 0 HcmV?d00001 diff --git a/www/asset/png/behemoth-dusk.png b/www/asset/png/behemoth-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..d824ba656c5340bfd518fc57de6f254b04602f50 GIT binary patch literal 3647 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 literal 0 HcmV?d00001 diff --git a/www/asset/png/castle-dawn.png b/www/asset/png/castle-dawn.png new file mode 100644 index 0000000000000000000000000000000000000000..a0314b9ec65db0c5b790ddcbec77400303efb1df GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_owDPZ!6KiaBrZ?hg_UlxX|- zzB}V+1t+KN(ygj%RUh+gt>RqBVOXzmMz?}{$~LjgJ>1<6$&QJsPkW9Z5^PqxDZA*C$&fmRCMgx#?W?ampmeaQ*Lm3Sx~%1tVk#5wcJ2HL^#ZReSdD+q>6O#L7(U z*2`@7yn8%P`g&pNxd;0f@8r+!y=}AXUh?+d*E@`u7n?D4D{t6gbU!7x$hQ8+ap&)q zImZo~fmX%LY`lBhUcPkxmVIa0rbzCvkJ=)2vo`7P#VuRknx1ghk6jtXduz+35Yx23 zzs;vRd%ujm@^1FczdJ4-7gi`^3t!8Y8vVe)Hlnr-1a1m!ivK zyZHj|w3km*?pODC<8>|HckfAwn2N{t#?QB1uTK+*134LI=){OK-Ji8Q`16-TXZAh0 zHh3?)qW3+uw#_ej1a!u z`g#8O3B1Nw!!~B$ZH>|o$L20%6Q7s7861gV{~w>veH5IAFeBtIi|dVZ1-ErNCjoO5 NgQu&X%Q~loCIEp5ph*A# literal 0 HcmV?d00001 diff --git a/www/asset/png/castle-dusk.png b/www/asset/png/castle-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..48a86882b8ddb4e55ae79454e165219aeca9f9ca GIT binary patch literal 932 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_owBPZ!6KiaBrZ8s=YikZAw- zeUVaD$U*j(C%C#@!;f(VUQJ@ObGpeP{gW%lCF#_O15Hk1cHGR&(MpO!npmw#Rb=a(Lxy66K)*IgpEq+$jf82SR{i2JqjYkC| zV!ljWqqo}4a;*+;t<4#bpPtL^`2KnKv#v`;R`T!fZIWO8a!=*Fw^nle>l%N@72ewX z;=$7_>6^tiaWUbWw*9J_92k=N;4UOzZ*)>Zo;c^`f@ z(|K1K(_ep`d->6(Id^yK*#EcNRW0T8SMj5vY*N8v&#KbIz^TvA_RHJUe>r_7ZvC>) z;hlUh6`W=KUrF+$qs4*e`R3wXY%9AJ``RUS`VKte01^L|AGq%xHotX4WlZ#sS-%pJ zChiP>>KnE0k#%<=_cFx^^AGOUyVz4}yftJCbNhxJFMr)$q@^x)Na>NFtGcYkn(Nj2 z>)vhhJ$Hv$-@dN;#oqqdzIdC+FB^NOOWc?KeqixMwbS+}=vtv`73 zUP9`TuhlBGvsjo;gHr)f#14)BKY3mnGy~&M1{9GfgzE0zO9J_KUankmYC_U}aI}Kc j>+$v6M-8!S`O7L7{j@W9?~Av<9LC`3>gTe~DWM4fD#xY_ literal 0 HcmV?d00001 diff --git a/www/asset/png/dragon-dawn.png b/www/asset/png/dragon-dawn.png new file mode 100644 index 0000000000000000000000000000000000000000..b60cd71fa96116e76c925437b28035a7078117a4 GIT binary patch literal 3678 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 literal 0 HcmV?d00001 diff --git a/www/asset/png/dragon-dusk.png b/www/asset/png/dragon-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..d268bb1d9e7ce8a5326ff948fe7cfbcf7a86a340 GIT binary patch literal 4008 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 literal 0 HcmV?d00001 diff --git a/www/asset/png/heart-dawn.png b/www/asset/png/heart-dawn.png new file mode 100644 index 0000000000000000000000000000000000000000..d85719b33e9e673fd83c0de8f02c031c21fdfea1 GIT binary patch literal 1457 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 bhq?{ehw#)R;;MB-uN!c($J#a61c847q?O9F literal 0 HcmV?d00001 diff --git a/www/asset/png/knight-dawn.png b/www/asset/png/knight-dawn.png new file mode 100644 index 0000000000000000000000000000000000000000..c51e0ecd0951c58bc01947339c9498e48001d978 GIT binary patch literal 1950 zcmbtVXHb)g7X2^~dWkec3#@=hTo7~3;q)0PM6Q!#Nf*?w$(h+G9 z7o-KqvdAJ}661yqBuFtBi6AOO5X)wNyq|C8&Agd&?wvVj&b>cRuDjbwc^M5E0088j z9MNY)JLz9afkpG!Im8Rml8$xsy#xRXqyJKDJm$eUkq9MXa72%oP-0?G{COZTG0`ME zI`UFTQ0#e=nE0@Yb!!a(kc2y-?LCt!*D6ott9Yqg`+;XJXQSn0VL@^>+C+nXJI+2` zrapus&IYZqUY_iiwK4A;rmERh8wYd4M?S>!paX?&dxBUzIt2&oATv;~J- zb`huWYNuI<^jI;w)BPZQlsP^NO10Al?Z>Ymbl%!8&&UFZ2H7Efw9wi`YDi+?pwVp3 z5+4Gj2krtg_nYp|ck!%CG)}~AU!GAm)9Y0rD2)V4r39eu3Tu`8z-04poA+#p_|n??;zAF=H4sy!s0bhqq-j{AdH~Hb-I%&p(pGWy%*B=-nkZ@@t!2keiRwG>(>&No@8C=shjk;yY8Da ze|auSLY>+-5`g?U^Ai=Z{g)SFPu@Z*U6Qv(hV{t1!Xpq8GC_a6$g zUOI?Jz*Tzo;3^`nPUdleA#?4QQzsJdNFof>+V2ePORJN^G&4^}vz2Pz-reBPOD1YU zor!ULEwDpC)<*=0{%Y67Se^g$Qj{WvI=7NluJ24d5I?Xb11%fo2Yv3lFpQAOF}|^? zZ8I|epvnO$15QVg!8Gq^l1%BesitM^*3lJONAqI-4y^~Oo7U_kChV=w^pNT-mn$`; zK4~pHvH0^0GgdBy`eXAQcq3a7-iv8RCV$ck%v7ZaQe=+RDCX=6TqPz87ba#c^>+-i z&xEkvEM2PrR@>7iaAnU67t#}+7QB7!m(pjyEzzL!Eqaz?SqY;$V`L2L&|PTOFXq$%4HT5iy#I17-xcugihw9G4r%qM zawr7EQ!l`Kg+T)yIckCmW2kFKm2lqXqb9 zHSP`j`^AOn0~2O$!K2mJ?Z~nt?;q8xDm-~QH(Dh+R`5*CKTDM~aJa_ccwPl*-AV#5 z^7<~GYz3eLi)8k+@}RK?Ee5Smwo@ST-ZihrRX+Hpiba0rR%qI8f^G;M#@qbN&AN>^ z(h6|e2j9Ic!j6$ws13tg##Sw=s2QuxK{{)1JN zUMAj;5k(VE%pC2~TeT56@VqT#^{^TJEA~?vGm+G*+=gcoi@SZu=D4)wV-lX_i?9}x zX@c%*gxA394KRFQ3n`P?VQrN*U4o}#tHK9f3&HS7k!WgB`)%q&WD_SauVB^1=6xXW z1q>H#&2-*F^#ouZ#rqF4)A}zh?!G;sQh1sAr8{YTwo9lM#1eG+D6o@`#+O#>a4Eb) z>z+Kj!}RL0ycn%)B#zxVtTP*EJ*OM>IdbU|>1{t=EEtO`qkF|%9 zQC+%{0#gR^!){R%y4A#(fffBr#-&wkqzs=ThxHOxn|`slNe07Vg7>~EpI^C>n~98~ z>|bzYox{rKfkq6ze&7w%@eVbkgbzhULqZ3?U!y36S~?oy!p)O-L_=uhu#bh5gRcVg zP=lTLk(2)e#<@p)Z=Fr#Hf!y}nkc}bQ(BP!AlWeQSn+=^q#YPi!wEK+Kr<9|E8v82 KLwBGEng0Od=%N<@ literal 0 HcmV?d00001 diff --git a/www/asset/png/knight-dusk.png b/www/asset/png/knight-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc1978b1cb5a56a7b78626e9c703f30662671a5 GIT binary patch literal 2108 zcmb7FYdF&lAN~`wEvE_(LXr|Iba`?}@n+`S2oX6x&ce*bW{x2_q!6t%$2_ARP{k& zv}(2bWRzr@?akJ8`SvQ7R^cHqVnY#WqPlA75Ef&gmIrRiu+240R%@03=bF`EgNpIo z3Hb6GRst$!Vl9w0zw!lRvp9%KWNJ`>L7|#e#JfGvSg6?9KpGu6EbGhEG-9=La2!3T(v~d5>HHlY%9+nT+Kd3f79r zscfa>^ayYHuq{ZkavMOygUg5t-=kU`4^1WHwx%#bb2PKa#x<>N9;Rm9L?Mw(?I9`0 zDGLf1boue`#upNT=01l?r~mK*MXLKIrXFj+`NF?S0emq|+wgL~7LW#OcBO4*=ZJi9 z)YklJ=F9JX$ukcFM*xPB?5f~`q+0it1hB<3z%ckIwOyH8ar*oc8+I+J)&6~jYq`Y^ zG_QSt32xf^I%nKwyER+n;QqiaSK}SR!L*?K*WYvJ`e(s4&Dn>??!w%>4C{TyUOCat zP%mKT^q85VsHlq~Qt$Tc8`MA7KU5}^cc)ke`wd&DF)|!KV?R$=Df;lN@7HN8$;kcY zl<=5%5`R6UQ+%=EPmgqIlTpG_{gdCH=UUY{KNo%Aq)fgiA?4Va>C0C4+Ahm=iFdp5 zsbn>>W7FTAj)+vTLO+nB3)p?7M8&xfk-fF7&K@yHK48eqlB@{U`p8zgAx2oXpqZf~ z0_!nxYg^MIIUq}jhp)rJ2J{XmIRm*5&medl&gQ$rc)dSm!}DikF(IA(He-i0a6hEW zJ7Zh1i^A- zQ>wTYYa2w6Czt);!?gH)9ePd9z5^p)JgYb|fk~nUjExZCM9w*>mLZ0|x5>PX?hP+& zFq1re=&+)CZIREZSC-iZ0Dy>Q?IQIFk6P9e2=;( zapNvJ0Aj0JvtU4Qt}!&QBZ=KVdN<@IPHWQe{G+G80eULTaQnv!GtU-{rBn%P17*8M z4cVjVL9}|Gk*{G-S&M>Z2z(#*>;Q76z`&@VXSxM$g zjuDw~NkXo1M-Tbp6i*doCPLLy?0dd2yz!ntPm7O^!Qg>^qC)nL~2uEDFg>^3dHlT98U-FLea0{$6Vae-3yj9ckYXivzYR#KYGKdTjF>4= z#kuqou5H^YM~{96Q{>g~3E~1;Lme4)&_;cZ!Nvz_VMweKJ^dk``4SQ?fomuwyVsm4 zK@gb)|ms(-|-D}oJ32`XhbAqBimg)g!x%IqkF?$Jm+p}ex7S&7U^}w;3JL&=M z%K6r!T)#fa2v>CFsObBT=R8vv{CBPx&ejXyBP&e(+e<=A8H# z)T5tTY}&1!SjCN{oEVB$13q#TD*TuRS7RR}8K6Knsq5$S+)TwrqzCBr!HN`8Kecog z^LcWerO`EnsNsC7m>W8Kb!w2x3n;_vEKKra#ipU;4YISY4<7Mgb*tu=>TThlvXokO z*ACN8%Me!@DZQNk3o4g?^na~0Qf(i!rn#J8?^g7PnE*KzUHR|Mh7)fw{~`QWGjew+ XeG|nD`J|G)<_D}1Nb_fAJ}G|#7{mqp literal 0 HcmV?d00001 diff --git a/www/asset/png/lance-dawn.png b/www/asset/png/lance-dawn.png new file mode 100644 index 0000000000000000000000000000000000000000..a4a12eb050a63e3ff0954d89d5fa5afaaa966977 GIT binary patch literal 1237 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_qWSPZ!6KiaBrR9`w8IAmaLd zM~&mIwFkPt=|?3l`8GR2(1R(YN$$JC~?D9}^C_L0-drta(rTeCq zCR@4ZPk#QKr6Q57D-y@`l2haEqNbC92cN7+C<-yK)S4k9>eI)i=FU2K^7IEcmmJ9n z;yRzS`iZK9>(+=*iuwmxzXc}5S4rJYaj#;EKDubqyhGbgE^iXwTfQ;nO8aNQo<*zv z&zxPuV*hThZ_>U*g@(YAyH=YH000{^NvmLG1anOZcBF?pXIc?Na+s zR{Qt+`*eO8>`xF0-F(0BfPO{r`m+o8KXc!^l5PCr@SUdX-{aY9<)4Z5Eb7|qSN~A# z&E@2izYVr0%$M`N*UtNPIrn=t<~!o{d#}}+*7uq(j+Z^}!E%r5U-X{Oao^9MyUmxb z#I^nb)4!(f>i?zHZ0jHF{JP#NID_?jpFpPBgQFLWJ6O*<`|YmkdMA6WC1ferJJIsV zj17(l#G0R)l@xICb$ak!T5&|vLPcrqwue1lbDEr$CN-OA6>{Y%b(?5S9$Lidli;zUNPjr!(%E4+5)~D{j8Klqi zGEm=(MMBdbm;v>PP2It=9jMQ62eQcV3C?0uPq1u<==0tU)_2KH$#TUaq5cOFKz$-p zD_D+qc&y%7fg&=+Nn~mVi#yOGwyx^#b3pn|CZ3tzkzCtrHqF4Msl0u{?VnoDn#P*{v`7{n5i9Im$YEtq}rEG>k_^)U9#QL9bOiz z`ujp}%*9u%OIW8L)@;c9Qs}H&t|~r5uRoCIr*-7!&s@jiPWmlUUSl~yOh-SI2KH&-g=P$J4K$-d$;4bNln*t=qN#@1HDMyuWk8vV`{k z!ux)5uA98)WvtA`Z?hRPxy#nnANo80!SPA8_ZJB#??3d#c|&s9HvZ;TiEhDDkKZTW zp5MpF@bqNG>fck3M4jIKXGToL8e_5f>FwTD;TK~+T(W)n?wzAL^Y(;zA%)Gz8DsJ!2JK8!S?)mZ606!i@+j@!PC{xWt~$(69AZdFAx9# literal 0 HcmV?d00001 diff --git a/www/asset/png/lance-dusk.png b/www/asset/png/lance-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..6fdd1262e35a38af521ddb02c6a39437e1ea7276 GIT binary patch literal 1273 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_qWkPZ!6KiaBrRItEEOO0>o& zn@m`$o-px_l4j$KWRFVjyO!@vPQM9WTG17vIiXeDE3~2a^359!EXQBY%-i++>;KT5 zo`$x(^Z(o2>u}3ltN7s(*Iveh`bslo1bzBA)ZAGnD>t1KJouy|p~%I+(vvgpj?eDy z*_q~F?8-cYnl?`VzG3=zr~KsUDykOe3#UA{;M&_C`$_K$TUlq&i`ILG*LkKj&ELG8 zTVbV)pWBD-H@+I}lLhz8+pGDsz^Li^XY-{xeoh~v{z*+b`A~%=|Lh%?A`8xgw~frF z$^gZ;o$*y|f61DEGTvFp(no)XLALOT#Hxd?k+YrnE_3Uhx+PLHBdWmhpVW(DAic6j z^?YL1!BnGZw(Tofr=N`YCbLZR&-3T&okgCnU-E+iCn z(Chh9R_(Rk_S-TqaGhIt%75vmik!m>MAzsn$#h^b=i7aHUCbisjOUIlBrQlKI#%+Vk-SAvq<^K(<_}1 zIDWp%Qe^#8ur(|rgQdK!Ih)~m>GeQ|YjS*gvN@Vu87$0SRX3kxJ;B0!Rn_?aMXUbkuH6 zzjNU-w~InWVe$RTYp)a?9x3V%|iU!aeH zgW1uEKKcSDS(rc89N(?5?72|ygKsZChOGS4-L|WI!<}UAU(#NGd?FZUzW&@+m%P=_ zWcrIzvGVWpi}#i;EVi`rj*x}L>uQRk}v@ZhaniOU9Vwz!FN znqm}q4<2ZH67qzJ(SDO~!{(bAdl(vkyi86%uQiHOy-PMhasR1P*ch-Q52>CaiBqgL!+d8~a(tKmRwJ%~(*&{9bO`%<7E!2Y$Eb zJ`=ko|6$kup6@enin8V3PpN#T`}wPprn=sPPpMPoAKcktn0~^p!TVsZrIVig4wE}G zgr96`^gh~a>7XaRqvTG+!xO1Y)dzb;dt&4^nBR$5cp{at`e?6cM~v8p^g9t8hwpg* z*uJUZ>N%`l{md(Kh-0Ch8^?OaJ8ue}NuJRYcy*lP;8n>rY3@74HzF zshD_wL-qN@GNuP7+lZ~CTk|B zdw!N&CNXD!MCI8eBOkZA3b{$^tR4R4UDVvcP*7jV^&tIF&-RFG>#xOKwcq`zV)r-J zIbGZg{Hvm8?2WNsKKId%UsFw%JEz2Nf03J48~5x^@V>GQw=A$l5^BuFGW^?@^yc=# zu!$@680zz6H;N{!d}N-zRry;}!`HAL c=Im$G-t%nD|KHh;z&yj?>FVdQ&MBb@0LGSt_5c6? literal 0 HcmV?d00001 diff --git a/www/asset/png/militia-dusk.png b/www/asset/png/militia-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..078b79c496111c1d9be0a924946857804a7e3b57 GIT binary patch literal 911 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P1|%(0%q{^b&H|6fVg?4j!ywFfJby(BP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_ovsPZ!6KiaBrZ?#&Z+lxTfu z9QQey(VS6rI)m#I1*=mWiY>0~BAlJ)N(!xlo^eg^NzYT<;mtl}AIrZfR&1Id-4A+)5bcHR2^&Cg{QRW>Wz&YGIryZPXm1r@JN_A-R#GpYF>c)~fuhH#&S%AA`AD zzl?-`=)ZpjUkVbB#x>Y_{h9ojFQ+7VLv6_GLsA`F6|6UkN-l^T$ZpVeXMQWSgY8Dq zyM?h#`3&3UL}!#A;9TGH`pp9K7yENx+|qvfDmUoxj)ueAL-QJp5A^PIDr1}@n0JP^ z=-UCwN5^6m(s}0?=IK;F$!U~*aBP#?IiVYZc{9M=t?to4&M4RaqK zYxC7l*tw?R>MyK*EasJI2z-9$9pg8)10Q!iGd+B!;qRgizZqiY9@M&?TgA9qtl{EW z$NK;G``a1#{_pu;QXcq#Q=p8&X2+?Tv>A#IlDBU-`Stnj%}W>Ftg&HjSYwy$r@K0M z>gSIpnTD!&R_#<{C==4ReaZXFUw>wPhs%?D3*?2?M_0egyQsN?p`dK-X70o1TQvR8 z9lrVcblpnx7xD)lzP%+{pryxfr*d0qlHwk(871Gpbsyg!^z2K=n^$6cPpv(FdQR!n zEcVr_@kSolx9eFCeEZvUFkd>_&3P+>Ma@bXqmcfIF8nzw+;|)hu-tsUYGP~aDZ^t<8 literal 0 HcmV?d00001 diff --git a/www/asset/png/tower-dawn.png b/www/asset/png/tower-dawn.png new file mode 100644 index 0000000000000000000000000000000000000000..34c1bf570b31004159cbd3d33a4b0fe83c48e852 GIT binary patch literal 2296 zcmZ{mXH?V85{Lh2h_nDkG}0k71;i3U2c@X=BGrfp(g~12&|pE3NGBjKFH%BBFo1zb z4T@kuqzDMoiP}=XXnh>GrMPZV=T?DLb!yu004j(85&$; zY4C630JFTho62XFaAFOw;{brS`M0sPV#sbRC>V6vA;=oz5rlUMbO-Qwypp#+8t3YQ zbyva!dXiSPgaCje!pK0^COC5?%fd^6~@g6UQI~bUGIt(ih6@3OSQF;}cZb zfXcqGYZzu>W(Y(N16p)ja((}d-qVy)wCYrY zJ;qBQy*04zbnb;T1^Q#1_Rp*6l#UwsjPwO;VS&*QR~ZN=sF?qyQ4i5KeW+iWVXKj` z#p#keuC2y)hW=gJWEUEL$%I;DtCi}kaQjU1E>to5nR9P7Yq6k?hkRh#F%jk+Dq`6D z6kQA-K0UHZ@16o_z~sUvm=dPc&(P&M&i&Nq~H;(~pYf z3k84;^5l~lFpf3!tvxD4gUE{S13l=OY&XegQ|i&Cmx}THp}6d(+w0P+KAmOEcu!I@ zhx{#I@o}3J7rb1*n7}dA)DPa2-R&+Busin$gr(?XPU2>{>6fuYh!j5&iQ% zW)}}z-GYxsg1YtD6ASDPy2+A83Y_&|lE(`+RNmy(CAn#KO}0H`#k_<;!n>SI=KbuE zgyc>IeX9I|V@#%9*H zB(R%|(J#gyZRDNQW9K8u`GO(u5#CM&qFKV_N!nUSc{d}FD*UuygE8e^RqwjHxxS)W zo8`lsj|>69%LNm*Pur|Z`w*G(&u$(Ls3g>yLgOVS0=6kX5|N|8c2mwzQ8=-!;FI&l z*CDl?L4QZg+1qWJyyUB{t(L*!)l)zZ2lVe2B)_U=@G%kb?YZUR&)K$`%4|vYfPvX) zOhiPE#6%*HKPMk8VnAtVjH`3_%s)6C$;^&^4sX_=zO`$By>oCQ*)fV_idqCSIbD;b z7{BpgOh3&##yijNE|%5hz_i6r{x+;GUto`R`Q;!W;Gu`~N137wNurrxlF*T&@0G%p zeLpZ;l$7`4Hizh>VxL*%KeNJ~h3PtRDK?DA9h0&YKZ`iDB&+5#BV*#F{JhHkcUI=e zBj;`QPQr`qW&=)DNd_xbeY--@3h$VPoe!Kc-bq&c{%QxZV49&!|1jOX_Fb#7j#Gca zJ}j10x~@|~uOtuTL|rR7d*D=-Qv2NUx_v++BE3y2-V)8{M7DN zE>JLbF|9u5T}kMh8paOI?vs2(RhwdmQlv7*`LkjSg`hrD{Yx~kT~(P#-wcm=L~*-I z>Ep_mj8W#Do9bmT6(e*{DvOn9R+cejdq2LeFgoT^N%-XK+AI;&xD+5-%bh-y0@*y& z+yQ`d9*O`H^#dXSnl9+myN4zv4z z2wnnx7c1zC5qMeup)2k=N-+1|aYlsvHy3|a=^&rkU7qZhBlK@EynS-&2HSZuKY*sQ zvc!-@P!Phq0)&HLv~>rUB@k)o;3duqk0Yscx8@rbPv3%-2#m@0-b72m&Q15{zi*0q z+^dy=*DkX9Pd0As$TyQ40$jeeyq`9r{v~?Zqz%I9<;0yxXY*3(h~*5AihV}qNubeUGc qKXRwSIKc$l9so`i@%%rsCth2kzl!wAsAm0I0He$124#BA;r{{}gF!z4 literal 0 HcmV?d00001 diff --git a/www/asset/png/tower-dusk.png b/www/asset/png/tower-dusk.png new file mode 100644 index 0000000000000000000000000000000000000000..db8200a9dc22e79e27069d80ade023d6f8314ba4 GIT binary patch literal 2444 zcmZ{mXFMBf8^$A6wHh=wsaA)gMWR%W5wld)C?ZCQ6`K?lt8GG;6109nYSUp?5sgtv z)Tr7;YXq@-YB$HOdUMWsKfdpW`?;>)|Gw`p_w(gSu(mWkepLD>0020C&CK{FMIffZKa!svRJGFLu))g%D#KpyLod1~^Nn&|=1w=QdbBmfH;TY;+806W^gt5seY z3{H7S7S+0u1S)z8TiMFYhyDQoIQ-U;OGiwM#!$dRrN`>q)1FmLj__Fn@#rOM0ae6c zH~giFom7*}m=3y$*?lQ>AgX`Y6S73o;Z86*hgI}{k)wVci1WNvd{K)qxPF~I(JMlR z5ZZ)CLayY{{b~y%-iO)wn4&d!g8k-rEI)ELgjGqirL|wvPcDE2_m+zunWJs`Bn$6g zV5p=-o7hUh*VRgAtdy%AD1K*k2_Z}u!SQ2x3!>?yd`i_5c3&_MZ>Y)JNH8t61EzUb zIY~HiStyQh`aD!B0-&pZ>Lg_H>Oua*OZGk2bGL z2_BVrTd1~a+mb-}1F4JOy{q2MIEX1=mD<-AO#HhUtS+>t-NxQknG8lr@c`V0Ho(YW zv=^V){a}*baQY7jwET13&TD$CRG>?^jWTQjolkc0k+X1M;EyVTmZo zlcVjccRSVTB5dAaSql=Q)WzX2)A}yI62SoJkt8sT%Rhm7(8VhaE?v_dcep!eb1PP*j<}pj#{ll}qCizYyJ^2g< zSbri4AY5YYqgGEh=U4zG31*ynteaz52{MHW1ikpt$G)p3$WYKEAY3Z-n@FRU{l=BP zM9Yl6d+fZlZ1%MCnj8tfhQr66+e!!S2t?ffbE@K@302i_Owg4Ux+IJrxk{_#rPzk( zdkN6fcax9gB1wpYwI4ZDHF6YoWh=wGmlhy`)WUyzc43CP$PDr2t$QIG zbH^9EHP?toa>af*00?EE>JMtk4Z zPZ(WhiH%@FBX=I}{tQ#iX?jz!1=T-1vF{}iCnK~(oOfRoSSph!XaMFjaraocX5q{9 zdhkI|hX;V#19Bp`L*aJMU9t1O*xT{QU74dz5;50#sG_cJceyiE$D7|g*laJu|B~If zCtP167UlN-(nugw?d{71UdtDLYh*gQJ^n z_3h2xX*HdnC-HN#m-Z4_YjP^n%!CRr@Sjk%EJ!O*;YSy-wj9=PUeO@3w1r$?IY*hW{0POB>GDO;hBd*y6a>-TH(P(+|}V<{8?J@{w~9A+>r`V%$v$Wbn#_qel&+NXY$yyG^CJf{8v5(^x+NVc4S zGxUPbUmbC%8*WL$@aNF0GG%X|gTCBlc6%}Zfy#b{1n~KetBU?e*jK9UF%MLQ%a(KE zlYiz5=n0m4+r=8IwUS6>?wypV?1AM|qEuS0C`&QPX4W#%fCA&OBAYUWa|qPV0($K7 z8FB#A@0pWwz@gQB$sUjr!PX*KWp;=<=%HT`Xy_AREs!0m(4hkUmoOjpEa#ulnqO3+ zU-oDEL5q=md83STRXua~W;jI}=d?WhStJ$3s3AiFX+oCa$@(e}tWMJCJLsFv5mgm0 zOJI@bb337eu$p)abY-s;zvkbj`HxULrm!xcOC62@ama%E%SIu@#-SME(Y(`T?WP!Ue19j0&^2d zSJC#d8f%iTkMy*e*L(_H7P>68JR+A(=j{-1!E!|5{Yne-_teAePhHQ#r2aww?R3B$ jc{{xSPt^Et{@6u?Ol-7GK|7ywk`&;YiKTI+Av*3qR&bs# literal 0 HcmV?d00001 diff --git a/www/js/game.js b/www/js/game.js index 564e458..980a2f3 100644 --- a/www/js/game.js +++ b/www/js/game.js @@ -40,7 +40,7 @@ GAME.Board = class { { piece:GAME.Const.PieceId.Dragon, hex:new MATH.Vec2(4, 2) }, { piece:GAME.Const.PieceId.Behemoth, hex:new MATH.Vec2(4, 1) }, - { piece:GAME.Const.PieceId.Source, hex:new MATH.Vec2(4, 0) }, + { piece:GAME.Const.PieceId.Heart, hex:new MATH.Vec2(4, 0) }, ]; // Add Dawn pieces @@ -170,7 +170,7 @@ GAME.PieceMovement = class { constructor() { this.direction = 0; this.stride = 0; - this.alt = false; + this.alt = 0; } add(direction) { @@ -184,8 +184,8 @@ GAME.PieceMovement = class { return this; } - add_alt() { - this.alt = true; + add_alt(id) { + this.alt = id; return this; } @@ -353,6 +353,8 @@ GAME.Game = class { piece.tile = play.to; this.board.tiles[play.from].piece = null; + let moves = piece.moves(); + let target_id = this.board.tiles[play.to].piece; if(target_id !== null) { let target = this.board.pieces[target_id]; @@ -388,8 +390,8 @@ GAME.Game = class { // Handle alt moves. if(play.source == 3) { - switch(piece.piece) { - case GAME.Const.PieceId.Knight: { + switch(moves.alt) { + case 0: { piece.promoted = false; } break; } @@ -471,7 +473,7 @@ GAME.Game = class { let check_direct = (this.state.check & 0x040) != 0; let check_count = this.state.check & 0x3F; if(piece.player == (this.turn & 1) && this.state.check != 0) { - if(piece.piece != GAME.Const.PieceId.Source) { + if(piece.piece != GAME.Const.PieceId.Heart) { if(tile_data.checking != 0) { if(target_id !== null) { if(check_count > 1) { @@ -487,7 +489,7 @@ GAME.Game = class { } // King may not move onto threatened tile. - if(piece.piece == GAME.Const.PieceId.Source && tile_data.threaten[+(!piece.player)] > 0) { + if(piece.piece == GAME.Const.PieceId.Heart && tile_data.threaten[+(!piece.player)] > 0) { result = false; } @@ -512,7 +514,7 @@ GAME.Game = class { // Target piece is opposing. else { // Check if target piece is opposing king. - if(target.piece == GAME.Const.PieceId.Source) { + if(target.piece == GAME.Const.PieceId.Heart) { if(valid) { if(dist == 1) { check = GAME.Const.Check.Direct; } else { check = GAME.Const.Check.Stride; } @@ -543,7 +545,7 @@ GAME.Game = class { // Handle blocking restrictions. if(block_directions != 0) { - if(piece.piece == GAME.Const.PieceId.Source) { + if(piece.piece == GAME.Const.PieceId.Heart) { result = result && ((dir_mask & block_directions) == 0 || tile_occupied); } else { result = result && ((dir_mask & block_directions) != 0 || swap); @@ -570,7 +572,7 @@ GAME.Game = class { // King cannot swap onto tile that is threatened. // This case should also cover blocking. - if(target.piece == GAME.Const.PieceId.Source + if(target.piece == GAME.Const.PieceId.Heart && (this.board.tiles[tile].threaten[+(!target.player)] > 0 || piece.blocking != 0)) { return false; } @@ -584,9 +586,12 @@ GAME.Game = class { let hex = this.board.tiles[piece.tile].hex; let block_directions = piece.blocking | BITWISE.rotate_blocks6(piece.blocking); - switch(piece.piece) { - case GAME.Const.PieceId.Knight: { + let moves = piece.moves(); + switch(moves.alt) { + /* Drop Once */ case 1: + /* Drop Cone */ case 2: + { // Check all tiles if not blocking. if(block_directions == 0) { for(let i = 0; i < GAME_DATA.board.tiles.length; ++i) { @@ -615,7 +620,7 @@ GAME.Game = class { if(target_id !== null) { break; } - if(this.placable_tile(piece, tile_id)) { + if(this.placable_tile(piece, tile_id, {check:false})) { tiles.push(new GAME.MovementTile(tile_id, true, false, 0, 0)); } } else { break; } @@ -626,7 +631,7 @@ GAME.Game = class { } } break; - case GAME.Const.PieceId.Castle: { + case 3: { // Check all tiles if not blocking. if(block_directions == 0) { @@ -718,7 +723,7 @@ GAME.Game = class { return tiles; } - placable_tile(piece, tile_id) { + placable_tile(piece, tile_id, params={}) { let valid = false; let hex = HEX.tile_to_hex(tile_id); @@ -753,11 +758,13 @@ GAME.Game = class { // Check if position puts king in check. let checking = false; - let movements = this.movement_tiles(piece, tile_id, true); - for(let movement of movements) { - if(movement.check) { - checking = true; - break; + if(params.check !== false) { + let movements = this.movement_tiles(piece, tile_id, true); + for(let movement of movements) { + if(movement.check) { + checking = true; + break; + } } } @@ -817,7 +824,7 @@ GAME.Const = { Castle: 4, Dragon: 5, Behemoth: 6, - Source: 7, + Heart: 7, }, Count: { @@ -874,7 +881,7 @@ GAME.Const = { .add(14) .add(16) .add(17) - .add_alt(), + .add_alt(1), ), new GAME.GamePiece( "Tower", @@ -916,7 +923,7 @@ GAME.Const = { .add(5) .add(7) .add(10) - .add_alt(), + .add_alt(2), ), new GAME.GamePiece( "Dragon", @@ -965,7 +972,7 @@ GAME.Const = { .add(17) ), new GAME.GamePiece( - "Source", + "Heart", new GAME.PieceMovement() .add(0) .add(1) diff --git a/www/js/game_asset.js b/www/js/game_asset.js index 6fe0d22..776f599 100644 --- a/www/js/game_asset.js +++ b/www/js/game_asset.js @@ -16,6 +16,6 @@ GAME_ASSET.Image = { [ GAME_ASSET.load_image("/asset/castle_dawn.svg"), GAME_ASSET.load_image("/asset/castle_dusk.svg") ], [ GAME_ASSET.load_image("/asset/dragon_dawn.svg"), GAME_ASSET.load_image("/asset/dragon_dusk.svg") ], [ GAME_ASSET.load_image("/asset/behemoth_dawn.svg"), GAME_ASSET.load_image("/asset/behemoth_dusk.svg") ], - [ GAME_ASSET.load_image("/asset/omen_dawn.svg"), GAME_ASSET.load_image("/asset/omen_dusk.svg") ], + [ GAME_ASSET.load_image("/asset/heart_dawn.svg"), GAME_ASSET.load_image("/asset/heart_dusk.svg") ], ], }; diff --git a/www/js/game_config.js b/www/js/game_config.js new file mode 100644 index 0000000..a0ee2a3 --- /dev/null +++ b/www/js/game_config.js @@ -0,0 +1,19 @@ +class GameConfig { + constructor() { + this.key = new Uint8Array(4); + this.name = ""; + //this.user = 0; + + this.pieces = [ ]; + this.layout = [ ]; + this.pools = new Uint8Array(14); + + this.actions = [ ]; + this.states = [ ]; + } +} + +GameConfig.State = class { + //this.name = ""; + +}; diff --git a/www/js/language.js b/www/js/language.js index d3e019c..478e90c 100644 --- a/www/js/language.js +++ b/www/js/language.js @@ -64,7 +64,7 @@ LANGUAGE.Terms = { accept: new LANGUAGE.Term( "Accept", "受け入れ" ), decline: new LANGUAGE.Term( "Decline", "断る" ), - play: new LANGUAGE.Term( "Play", "遣る" ), + play: new LANGUAGE.Term( "Play", "続く" ), check: new LANGUAGE.Term( "Check", "王手" ), checkmate: new LANGUAGE.Term( "Checkmate", "詰み" ), @@ -76,7 +76,7 @@ LANGUAGE.Terms = { Castle: new LANGUAGE.Term( "Castle", "城" ), Dragon: new LANGUAGE.Term( "Dragon", "竜" ), Behemoth: new LANGUAGE.Term( "Behemoth", "獣" ), - Source: new LANGUAGE.Term( "Source", "元" ), + Heart: new LANGUAGE.Term( "Heart", "元" ), //: new LANGUAGE.Term( "", "" ), diff --git a/www/js/scene.js b/www/js/scene.js index a27ea84..9257698 100644 --- a/www/js/scene.js +++ b/www/js/scene.js @@ -649,7 +649,7 @@ const SCENES = { UI.mainnav( [ ], [ - UI.button("Auto", () => { INTERFACE.replay_toggle_auto(); }), + UI.button(LANG("auto"), () => { INTERFACE.replay_toggle_auto(); }), UI.button("◀", () => { INTERFACE.replay_off(); INTERFACE.replay_first(); }), UI.button("◁", () => { INTERFACE.replay_off(); INTERFACE.replay_prev(); }), ind_turn,