From 1ba8b5fb96094a58883ea2a14ee317c654c2e632 Mon Sep 17 00:00:00 2001 From: Yogev Ezra Date: Sat, 29 Jan 2011 22:35:52 +0000 Subject: [PATCH] Added source code of games 'kox', 'lights', 'sw'. Changed MakeFile to have them compile from sources. Removed pre-compiled versions. git-svn-id: svn://kolibrios.org@1803 a494cfbc-eb01-0410-851d-a64ba20cac60 --- data/eng/Makefile | 9 +- data/eng/games/kox | Bin 876 -> 0 bytes data/eng/games/lights | Bin 482 -> 0 bytes data/eng/games/sw | Bin 1942 -> 0 bytes data/rus/Makefile | 8 +- data/rus/games/kox | Bin 876 -> 0 bytes data/rus/games/lights | Bin 482 -> 0 bytes data/rus/games/sw | Bin 1945 -> 0 bytes programs/games/kox/trunk/data.inc | 66 + programs/games/kox/trunk/kox.asm | 20 + programs/games/kox/trunk/kox.txt | 27 + programs/games/kox/trunk/macs.inc | 317 +++++ programs/games/kox/trunk/main.inc | 290 ++++ programs/games/lights/trunk/Lights_HINT.PNG | Bin 0 -> 295 bytes programs/games/lights/trunk/data.inc | 53 + programs/games/lights/trunk/lights.asm | 15 + programs/games/lights/trunk/lights.txt | 11 + programs/games/lights/trunk/macs.inc | 72 + programs/games/lights/trunk/main.inc | 217 +++ programs/games/sw/trunk/sw.asm | 1372 +++++++++++++++++++ 20 files changed, 2470 insertions(+), 7 deletions(-) delete mode 100644 data/eng/games/kox delete mode 100644 data/eng/games/lights delete mode 100644 data/eng/games/sw delete mode 100644 data/rus/games/kox delete mode 100644 data/rus/games/lights delete mode 100644 data/rus/games/sw create mode 100644 programs/games/kox/trunk/data.inc create mode 100644 programs/games/kox/trunk/kox.asm create mode 100644 programs/games/kox/trunk/kox.txt create mode 100644 programs/games/kox/trunk/macs.inc create mode 100644 programs/games/kox/trunk/main.inc create mode 100644 programs/games/lights/trunk/Lights_HINT.PNG create mode 100644 programs/games/lights/trunk/data.inc create mode 100644 programs/games/lights/trunk/lights.asm create mode 100644 programs/games/lights/trunk/lights.txt create mode 100644 programs/games/lights/trunk/macs.inc create mode 100644 programs/games/lights/trunk/main.inc create mode 100644 programs/games/sw/trunk/sw.asm diff --git a/data/eng/Makefile b/data/eng/Makefile index 927d0189dd..0917c23e65 100644 --- a/data/eng/Makefile +++ b/data/eng/Makefile @@ -126,6 +126,8 @@ FASM_PROGRAMS:=\ games/arcanii:GAMES/ARCANII:$(PROGS)/games/arcanii/trunk/arcanii.asm \ games/freecell:GAMES/FREECELL:$(PROGS)/games/freecell/freecell.ASM \ games/invaders:GAMES/INVADERS:$(PROGS)/games/invaders/invaders.asm \ + games/kox:GAMES/KOX:$(PROGS)/games/kox/trunk/kox.asm \ + games/lights:GAMES/LIGHTS:$(PROGS)/games/lights/trunk/lights.asm \ games/lines:GAMES/LINES:$(PROGS)/games/lines/lines.asm \ games/mblocks:GAMES/MBLOCKS:$(PROGS)/games/mblocks/trunk/mblocks.asm \ games/phenix:GAMES/PHENIX:$(PROGS)/games/phenix/trunk/phenix.asm \ @@ -134,6 +136,7 @@ FASM_PROGRAMS:=\ games/pong3:GAMES/PONG3:$(PROGS)/games/pong3/trunk/pong3.asm \ games/rsquare:GAMES/RSQUARE:$(PROGS)/games/rsquare/trunk/rsquare.asm \ games/snake:GAMES/SNAKE:$(PROGS)/games/snake/trunk/snake.asm \ + games/sw:GAMES/SW:$(PROGS)/games/sw/trunk/sw.asm \ games/tetris:GAMES/TETRIS:$(PROGS)/games/tetris/trunk/tetris.asm \ lib/archiver.obj:LIB/ARCHIVER.OBJ:$(PROGS)/fs/kfar/trunk/kfar_arc/kfar_arc.asm \ lib/box_lib.obj:LIB/BOX_LIB.OBJ:$(PROGS)/develop/libraries/box_lib/trunk/box_lib.asm \ @@ -238,13 +241,11 @@ OTHER_FILES:=asciivju:ASCIIVJU autorun.dat:AUTORUN.DAT \ games/checkers:GAMES/CHECKERS \ games/FindNumbers:GAMES/FindNumbers games/gomoku:GAMES/GOMOKU \ games/klavisha:GAMES/KLAVISHA games/kosilka:GAMES/KOSILKA \ - games/kosskin.gfx:GAMES/KOSSKIN.GFX games/kox:GAMES/KOX \ - games/lights:GAMES/LIGHTS games/megamaze:GAMES/MEGAMAZE \ + games/kosskin.gfx:GAMES/KOSSKIN.GFX games/megamaze:GAMES/MEGAMAZE \ games/msquare:GAMES/MSQUARE \ games/reversi:GAMES/REVERSI games/rforces:GAMES/RFORCES \ games/sq_game:GAMES/SQ_GAME \ - games/sudoku:GAMES/SUDOKU games/sw:GAMES/SW \ - games/xonix:GAMES/XONIX \ + games/sudoku:GAMES/SUDOKU games/xonix:GAMES/XONIX \ lib/cnv_png.obj:LIB/CNV_PNG.OBJ lib/msgbox.obj:LIB/MSGBOX.OBJ \ lib/pixlib.obj:LIB/PIXLIB.OBJ lib/sort.obj:LIB/SORT.OBJ \ media/ac97snd:MEDIA/AC97SND media/kiv.ini:MEDIA/KIV.INI \ diff --git a/data/eng/games/kox b/data/eng/games/kox deleted file mode 100644 index d20a17e022616fc0b64d3fe429e24d7e58b13d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmV-y1C#tqP(w=(2LJ$p00001Mv*2LLXK;4&&M{gp_E5NgvY}3QsV8T3#Yt|dS=2s}FW9~ZQ$iu;}vw6O4unm)A$PO)=kz&_5>q5LS0*SHVxRl;Ve zk4-1lL@>#s-({2OyE4Z|Dw8LIC_-6l{DGrCsFkB=hjzMY`FUw`4whWUqjbfYtSEjI zH>^N)Y|?0^LVh{@;4B=Hm#NXPM0OUufhD(~OM9(4#@GW;Fu8TbXu6*cOEOXZvMK?_ z);=8Ua7~~NesdS=&23K)U2>dY_8j61#2DRl8Tn@=6#!K=HxAm>o^GS-l^WYyyAm!v z{w`oNC=GAn%VnIMFa?9;Ox@VBpq$PzGPTWmJM;^_A@e5_+}0q^3Ek>jLILSDxsHb+ zA3lU35})9yGtz*=NW}$f%et zNj&waYGZmj8uICPzXStQqyQeD4zKs^c9@90CAq!1(`wIPRU2I21GmiX6d5v(2szZ< zJMb<3l~Rh1BvTZ0%ITP4<^Jws_L&7(QtrldPsMe(z(k)HZ3x#k!}s}J%g~}xlUYWyCZ_^8S4tcDa4P9;5IPH#jHU}O@ z`k+paKUpCRpK2?GFlCw88V}(5^Si?{E93567^%W}Fti^Fh<=Kbl_nFKhWrr#0001j C+_FLd diff --git a/data/eng/games/lights b/data/eng/games/lights deleted file mode 100644 index fad55b5352bd750fcd8ffaab301ed68e13433906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 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 diff --git a/data/rus/Makefile b/data/rus/Makefile index 86548f9739..3183313152 100644 --- a/data/rus/Makefile +++ b/data/rus/Makefile @@ -126,6 +126,8 @@ FASM_PROGRAMS:=\ games/arcanii:GAMES/ARCANII:$(PROGS)/games/arcanii/trunk/arcanii.asm \ games/freecell:GAMES/FREECELL:$(PROGS)/games/freecell/freecell.ASM \ games/invaders:GAMES/INVADERS:$(PROGS)/games/invaders/invaders.asm \ + games/kox:GAMES/KOX:$(PROGS)/games/kox/trunk/kox.asm \ + games/lights:GAMES/LIGHTS:$(PROGS)/games/lights/trunk/lights.asm \ games/lines:GAMES/LINES:$(PROGS)/games/lines/lines.asm \ games/mblocks:GAMES/MBLOCKS:$(PROGS)/games/mblocks/trunk/mblocks.asm \ games/phenix:GAMES/PHENIX:$(PROGS)/games/phenix/trunk/phenix.asm \ @@ -134,6 +136,7 @@ FASM_PROGRAMS:=\ games/pong3:GAMES/PONG3:$(PROGS)/games/pong3/trunk/pong3.asm \ games/rsquare:GAMES/RSQUARE:$(PROGS)/games/rsquare/trunk/rsquare.asm \ games/snake:GAMES/SNAKE:$(PROGS)/games/snake/trunk/snake.asm \ + games/sw:GAMES/SW:$(PROGS)/games/sw/trunk/sw.asm \ games/tetris:GAMES/TETRIS:$(PROGS)/games/tetris/trunk/tetris.asm \ lib/archiver.obj:LIB/ARCHIVER.OBJ:$(PROGS)/fs/kfar/trunk/kfar_arc/kfar_arc.asm \ lib/box_lib.obj:LIB/BOX_LIB.OBJ:$(PROGS)/develop/libraries/box_lib/trunk/box_lib.asm \ @@ -239,12 +242,11 @@ OTHER_FILES:=asciivju:ASCIIVJU autorun.dat:AUTORUN.DAT \ games/checkers:GAMES/CHECKERS \ games/FindNumbers:GAMES/FindNumbers games/gomoku:GAMES/GOMOKU \ games/klavisha:GAMES/KLAVISHA games/kosilka:GAMES/KOSILKA \ - games/kosskin.gfx:GAMES/KOSSKIN.GFX games/kox:GAMES/KOX \ - games/lights:GAMES/LIGHTS games/megamaze:GAMES/MEGAMAZE \ + games/kosskin.gfx:GAMES/KOSSKIN.GFX games/megamaze:GAMES/MEGAMAZE \ games/msquare:GAMES/MSQUARE games/padenie:GAMES/PADENIE \ games/reversi:GAMES/REVERSI games/rforces:GAMES/RFORCES \ games/sq_game:GAMES/SQ_GAME \ - games/sudoku:GAMES/SUDOKU games/sw:GAMES/SW games/whowtbam:GAMES/WHOWTBAM \ + games/sudoku:GAMES/SUDOKU games/whowtbam:GAMES/WHOWTBAM \ games/xonix:GAMES/XONIX \ lib/cnv_png.obj:LIB/CNV_PNG.OBJ lib/msgbox.obj:LIB/MSGBOX.OBJ \ lib/pixlib.obj:LIB/PIXLIB.OBJ lib/sort.obj:LIB/SORT.OBJ \ diff --git a/data/rus/games/kox b/data/rus/games/kox deleted file mode 100644 index d20a17e022616fc0b64d3fe429e24d7e58b13d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 876 zcmV-y1C#tqP(w=(2LJ$p00001Mv*2LLXK;4&&M{gp_E5NgvY}3QsV8T3#Yt|dS=2s}FW9~ZQ$iu;}vw6O4unm)A$PO)=kz&_5>q5LS0*SHVxRl;Ve zk4-1lL@>#s-({2OyE4Z|Dw8LIC_-6l{DGrCsFkB=hjzMY`FUw`4whWUqjbfYtSEjI zH>^N)Y|?0^LVh{@;4B=Hm#NXPM0OUufhD(~OM9(4#@GW;Fu8TbXu6*cOEOXZvMK?_ z);=8Ua7~~NesdS=&23K)U2>dY_8j61#2DRl8Tn@=6#!K=HxAm>o^GS-l^WYyyAm!v z{w`oNC=GAn%VnIMFa?9;Ox@VBpq$PzGPTWmJM;^_A@e5_+}0q^3Ek>jLILSDxsHb+ zA3lU35})9yGtz*=NW}$f%et zNj&waYGZmj8uICPzXStQqyQeD4zKs^c9@90CAq!1(`wIPRU2I21GmiX6d5v(2szZ< zJMb<3l~Rh1BvTZ0%ITP4<^Jws_L&7(QtrldPsMe(z(k)HZ3x#k!}s}J%g~}xlUYWyCZ_^8S4tcDa4P9;5IPH#jHU}O@ z`k+paKUpCRpK2?GFlCw88V}(5^Si?{E93567^%W}Fti^Fh<=Kbl_nFKhWrr#0001j C+_FLd diff --git a/data/rus/games/lights b/data/rus/games/lights deleted file mode 100644 index fad55b5352bd750fcd8ffaab301ed68e13433906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 482 zcmV<80UiEJP(w@Z0ssI(00001Mv*2LLXK;4&&M{gZm$Nw{ zMHfY{Cf^jtN_ZSxmW3shVe^9PSv zSi5SN?%v1r!-B<2OrJfouhqVgm7+^d+NH79;u=wEV1WA%h=?&*&7e(vck0`Olk3kw)PJeHPW^?Bgy1w#S`FMm z?TuOnM3Bae>{?Ne#^_kZwYkNW_pplhJ)ssq1njNwzBJEmBq+KE-iP`2A6EpM)Ulp8v0_89l3jh( zI-_^{zy)b{jAuwoI2fQO^^QIArqzisc)k9iiIW{>h0JRSqI?NsLchc;1jGJ;zQVY- zwc%wwzbDa$*2z0?#l0w#2Dnc0{-uIj;IdY_Hp2#|b)+ z$#^}=7ac$tIPhEh!r?PT&SGy8O%sifygY7*RAh!ThDL>V5yi_5wl1nRMQ?2vd{TOn zr>03;UIPWImAo!WbRv$~pe&ykS&l2BsL*5eQYOKIk+>-5k6N2Mf+U3dGE6ci)O@W$ zW@?DLIv-}nFR@SGw1#u2>WXTZQ20necKr%$c+(A~86v%tf`e7&eYXNSc0ou)gnYih zD|i|Ie9&6hyAj)`jRzn%PG`^A+;et4FX|%RHZ^B(a;F|*zGXq|{3YtcCUICNV2w_= zOfA#K44;&f#RQbL6X4bYlS?Q*C9K z+L(s`USFZpfx0VY&-=+d&eh@yUSWshu#);GnMg9|Z!5cH3MFlo&d?@&~Ua>Cor?t`eMbizl)za}665oIUsad`#VR~b5mMsP9Z z5xUalrE`?n?P4>6L9GrF3YhRB6SE{^+Gtceb;6&A!*C z5-u?w{AAvzInBx353+&suQwa>JcotTEcoiK(Qg-Lb*_j8qQ#W|ypprT0B~@#pT9T# z&OrFbzF`3n!4GU;v7&z#CpLG8ia|*?MsJT=Es2KguW2$KAzI~C>QCX*c}t+5X{0jW zWB|D^+4xp*gU(L|VXEF&>S{5cM+&T2N8uXDSq&h-UJp}Po@9W(5g&?YLR(|TcvggS zkZ*^e1`JKsA_8{l>dthLECFl zo%kbiC>`wANFlNl4vmUlmpJa*W?GTs<*;n2j4~*kBhT@VPyU6y8aGbTS{&>%FPa^a zmxm>V0n%J0uvAx>X1{6Ff!#;oYeFP`OXvYR7}ZKb zNUE(|sO@vW0(=SLMQVKFS8K^yYd7ak6S|&Mnz_L3Oq!1NhMbSo^t@=WO&4udJlGB= zanLnS+5P>sF;aW;2_YAX;6^5!qk4gaGrcknYPjhZAe-Mkp99Fa1mz`Et>B)rTkkBw zD}*B@F?k*^2l+SG?R7+t#?5c=YLHBgcWnAV-CRkh#&b)(!dwF1FyluUa$t^d}3P5Sf7L`@4gDx}Pim z)@c@QnBZ}YYqL`^-fRCRTsBLO6{32%^j|&j-}&91o_MU?Z)0ZJDD&^rV8(3dR)WCg zg<0W0nc3R9$K)cScV&O=KxT%;y5F;B8SAf}U(=cn>y)0#$hh^?A5~(2X*OaGCq-kO zK+-3;J1Ud|JsbQ|C2yVn^e%nY6(SpIoP)wQ_zI0Ei_xE*>b9SIA|cWq-5A(67_^`O z3l8rCIQ)jLb;zc5y-Qu{sdk?sGoRO){*u)TJck-#p*DXtjX6C;6w-*IE-fMhMBT=h zp=zX?S^X8}y?*1SJL>AuF(}B;tcU`VRW`mV$P}z4FQDh@g$}sY&FkvCx>e*@pOhOa zd@nMzVLIslT*K#XqT#0Ir9D(3osG3vgn&>5)CG`sB(w^ySTACK store old + mov ecx,begi + lab: + push ecx ; ECX->STACK counter store +} + +macro LoopEnd lab,endi +{ + pop ecx ;ECX<-STACK counter restore + inc ecx + cmp ecx,endi + jne lab + pop ecx ;ECX<-STACK restore old +} + +macro SetEventMask mmm +{ + mov eax,40 + mov ebx,mmm + int 0x40 +} + +macro Subroutines +{ +;------------------------------------------------------------------------------ + rndseed: + mov eax,26 + mov ebx,9 + int 0x40 + mov dword[seed],eax + ret + rndnext: + mov eax,3 + int 0x40 + shr eax,16 + add eax,dword[seed] + ; not eax + ror eax,3 + xor eax,0xdeadbeef + mov dword[seed],eax + ret +;============0========== word[px],word[py] + o_put: + mov ax,word[px] + shl eax,16 ;*65536 + add eax,35 ;+35 + mov ebx,eax ;posX*65536+dX ; [x0] *65536 + [dx] + mov ax,word[py] ; + shl eax,16 ;*65536 + add eax,35 ;+35 + mov ecx,eax ;posY*65536+dY ; [y0] *65536 + [dy] + mov edx,cB + mov eax,13 ; функция 13 - box + int 0x40 ;BLACK BOX--------------- + + mov ax,word[px] + inc ax ;+1 + inc ax ;+1 + shl eax,16 ;*65536 + add eax,31 ;3 ;+35 + mov ebx,eax ;posX*65536+dX ; [x0] *65536 + [dx] + + mov ax,word[py] + add eax,2 + ;inc eax + ;inc eax + shl eax,16 + add eax,31 ;3 ;-2 + mov ecx,eax ;posY*65536+dY ; [y0] *65536 + [dy] + mov edx,cW + mov eax,13 ; функция 13 - box + int 0x40 ;WHITE BOX---------- + ret +;============X========== + x_put: + ;xor eax,eax + mov ax,word[px] + shl eax,16 ;*65536 + add ax,word[px] + add eax,35 ;+35 + mov ebx,eax ;posX*65536+dX + + xor eax,eax + mov ax,word[py] + shl eax,16 ;*65536 + add ax,word[py] + add eax,35 ;+35 + mov ecx,eax ;posX*65536+dX + mov edx,cB + mov eax,38 ; функция 38 - line \ + int 0x40 +;------------------------------xx + xor eax,eax + mov ax,word[px] + inc eax + shl eax,16 ;*65536 + add ax,word[px] + add eax,36 ;+35+1 + mov ebx,eax ;posX*65536+dX + xor eax,eax + mov ax,word[py] + shl eax,16 ;*65536 + add ax,word[py] + add eax,35 ;+35 + mov ecx,eax ;posX*65536+dX ; [x0] *65536 + [dx] + mov edx,cB + mov eax,38 ; функция 38 - line \\ + int 0x40 +;--------------------------------- + xor eax,eax + mov ax,word[px] + shl eax,16 ;*65536 + mov ebx,eax ;posX*65536 = .BX + + xor eax,eax + mov ax,word[px] + add eax,35 + add ebx,eax ;---------------------------BX + + xor eax,eax + mov ax,word[py] + add eax,35 + shl eax,16 ;*65536 + add ax,word[py] ;+y + mov ecx,eax ;(posY+35)*65536+posY = .CX + mov edx,cB ; цвет : черный + mov eax,38 ; функция 38 - line / + int 0x40 +;---------------------------------------- + xor eax,eax + mov ax,word[px] + inc ax + shl eax,16 ;*65536 + mov ebx,eax ;posX*65536 = .BX + + xor eax,eax + mov ax,word[px] + add eax,36 ;+35+1 + add ebx,eax ;---------------------------BX + + xor eax,eax + mov ax,word[py] + add eax,35 + shl eax,16 ;*65536 + add ax,word[py] ;+y + mov ecx,eax ;(posY+35)*65536+posY = .CX + mov edx,cB + mov eax,38 ; функция 38 - line // + int 0x40 + ret +;------------------------------------ПРОВЕРКА Hа выигрышную ситуацию-----x + x_win: xor ecx,ecx + xor ebx,ebx + xor eax,eax + lx0: mov bx,word[poxl] ;сравнить текущую ситуацию на поле X + mov esi,ecx + shl esi,1 ;*2 + mov ax,word[oxwall+esi] ; next pattern + and ebx,eax ;с победными , если хоть одна совпадает - + sub eax,ebx + jz wx ;победа -> set byte xwin=1 + inc ecx + cmp ecx,8 ;цикл ecx < 8 + jb lx0 + g00: ;нет совпадений + ret + wx: + inc byte[xwin] ;mov byte[xwin],1 + ret +;------------------------------------ПРОВЕРКА Hа выигрышную ситуацию-----0 + o_win: xor ecx,ecx + xor ebx,ebx + xor eax,eax + lo0: mov bx,word[pool] ;сравнить текущую ситуацию на поле O + mov esi,ecx + shl esi,1 ;*2 + mov ax,word[oxwall+esi] ; next pattern + and ebx,eax ;с победными , если хоть одна совпадает - + sub eax,ebx + jz wo ;победа -> set byte owin=1 + inc ecx + cmp ecx,8 ;цикл + jb lo0 + ret + wo: inc byte[owin] ;mov byte[owin],1 + ret +;==================================COmbinations -0- ============= + o_com: xor ecx,ecx + xor ebx,ebx + xor eax,eax + l000: mov bx,word[poxl] ; текущую ситуацию на поле X + ; or bx,word[pool] ;+ текущую ситуацию на поле O + mov esi,ecx + shl esi,2 ;*4 -сдвиг -слов + mov ax,word[prav+esi] ; следующее правило + and ebx,eax ; если не совпадает - + sub eax,ebx + jnz @F ;next ecx + xor eax,eax + xor ebx,ebx + mov ax,word[prav+esi+2] ;esi<-из таблицы правил + mov bl,byte[pox+eax] + cmp ebx,0 ;empty? + je g00d + @@: + inc ecx + cmp ecx,24 ;цикл до 24 + jb l000 + ret ;нет совпадений - do nothing + g00d: + ;применить его + xor eax,eax + mov ax,word[prav+esi+2] ;esi<-из таблицы правил + mov esi,eax + mov dword[idx],esi ;сохраним в idx + ret + +;==================================предвыигрышная комбинация... + x_com: xor ecx,ecx + xor ebx,ebx + xor eax,eax + l111: mov bx,word[pool] ; текущую ситуацию на поле O + mov esi,ecx + shl esi,2 ;*4 -сдвиг -слов + mov ax,word[prav+esi] ; следующее правило + and ebx,eax ; если не совпадает - + sub eax,ebx + jnz @F ;next ecx + xor eax,eax + xor ebx,ebx + mov ax,word[prav+esi+2] ;esi<-из таблицы правил + mov bl,byte[pox+eax] + cmp ebx,0 ;empty? + je g11d + @@: + inc ecx + cmp ecx,24 ;цикл до 24 + jb l111 + ret ;нет совпадений - do nothing + + g11d: + ;применить его + xor eax,eax + mov ax,word[prav+esi+2] ;esi<-из таблицы правил + mov esi,eax + mov dword[idx],esi ;сохраним в idx + ret +} + +macro playing_field +{ + pole_x0: + mov eax,38 ; func 38 + mov edx,cB ; the color is black + + mov ebx,92*65536+92 ;x + mov ecx,42*65536+192 ;y + int 0x40 ;- line vert 1 + mov ebx,142*65536+142 ;x + mov ecx,42*65536+192 ;y + int 0x40 ;- line vert 2 + mov ebx,42*65536+192 ;x + mov ecx,92*65536+92 ;y + int 0x40 ;- line horiz 1 + mov ebx,42*65536+192 ;x + mov ecx,142*65536+142 ;y + int 0x40 ;- line horiz 2 +} diff --git a/programs/games/kox/trunk/main.inc b/programs/games/kox/trunk/main.inc new file mode 100644 index 0000000000..89597c786b --- /dev/null +++ b/programs/games/kox/trunk/main.inc @@ -0,0 +1,290 @@ +;#************************** +;#* X-0-X = MAIN() +;#************************** 21/10/2007 +cB equ cBLACK +cW equ cWHITE + +macro main_loop +{ + +; функция отрисовки окна +;======================================== +draw_window: + mov eax,12 ; функция 12: сообщить системе + mov ebx,1 ; подфункция 1, начало перерисовки + int 0x40 + ; ===== ОКНО !!! + mov eax,0 ; функция 0: определить и вывести окно + mov ebx,100*65536+250 ; [x начальный] *65536 + [x размер] + mov ecx,ebx ;,100*65536+250 ; [y начальный] *65536 + [y размер] + mov edx,0x02FFFFFF + + mov esi,0x808899AA ; цвет заголовка RRGGBB + mov edi,0xFFAAcc ; цвет рамки RRGGBB + int 0x40 + ; НАДПИСЬ в заголовке KOX v0.001 + mov eax,4 ; функция 4: написать текст в окне + mov ebx,8*65536+8 ; [x начальный] *65536 + [y начальный] + mov ecx,0x00224422 ; цвет текста RRGGBB + mov edx,text ; указатель на начало текста + mov esi,texts-text ; длина текста в байтах + int 0x40 +;-----------------------------------#----------------------------------------- +; SCENE OF GAME - PLAY YARD - BOARD - DESK - PLAYING FIELD +;--------------- + playing_field ;macro in macs.inc +;------------------------------------------------------------------------------- +; ----КНОПКИ---- +;------------------------------------------------------------------------------- +;buttons: + mov eax,8 ; функция 8: определить и вывести кнопку + mov ebx,230*65536+12 ; [x начальный] *65536 + [x размер] + mov ecx,5*65536+12 ; [y начальный] *65536 + [y размер] + mov edx,100 ; идентификатор кнопки =100 + mov esi,0xFF6611 ; цвет кнопки RRGGBB + int 0x40 ; ===КНОПКА ЗАКРЫТИЯ ОКНА=== +;-------------------------------------------- + mov eax,8 ; + mov ebx,200*65536+35 ; ; + mov ecx,25*65536+20 ; + mov edx,200 ;== NEW GAME == + mov esi,0xCC66CC + int 0x40 +;-------------------------------------------- + mov eax,4 ; написать текст на кнопке NEW + mov ebx,210*65536+30 + mov ecx,cB + mov edx,textend + mov esi,3 + int 0x40 + endbut: + mov eax,12 + mov ebx,2 + int 0x40 +;============================= draw_window: END + event_wait: + mov eax,23 ;==СОБЫТИЯ== + mov ebx,100 ;ждать секунду + int 0x40 +;------------------------------------------------------------------------------- +; тип события возвращён в eax, далее проверяем, какое событие произошло +;------------------------------------------------------------------------------- + cmp eax,1 ; запрос на перерисовку? + je redraw + cmp eax,2 ; нажата клавиша клавиатуры? + je key + cmp eax,3 ; нажата кнопка в окне программы? + je button + cmp eax,6 ; mouse - click or move? + je MOUSE + jmp event_wait ; возвращаемся к началу цикла ожидания событий + ; если событий нет +;------------------------------------------------------------------------------- +; обработка событий +;------------------------------------------------------------------------------- +redraw: + call draw_window ; вызываем функцию draw_window и + jmp event_wait ; возвращаемся назад к циклу ожидания +key: + mov eax,2 ; считываем код нажатой клавиши. Возвращен в ah. + int 0x40 ; Клавиша должна быть прочитана для очистки + cmp ah,27 + je clos0 ; exit on ESC + jmp event_wait ; возврат к event_wait +button: + mov eax,17 ; считываем идентификатор нажатой кнопки + int 0x40 ; возвращен в ah. +;------------------------------------------------------------------------------- +; смотрим, какая кнопка была нажата и соответствующим образом реагируем. +;------------------------------------------------------------------------------- + cmp ah,100 ; кнопка с id=100("закрыть")? + jne noclose ; + clos0: ; + mov eax,-1 ; функция -1: завершить программу + int 0x40 ; + noclose: ; кнопка id=200( "New" ) + mov dword[pox],0 + mov dword[pox+4],0 ;clear memory + mov dword[pox_],0 ;rest and other stuff + mov word[poxl],0 ; bits of pole X + mov word[pool],0 ; bits of pole O + ;mov byte[fill],0 ; обнуляем счетчик ходов + ;mov byte[xwin],0 ; flag - x winner + ;mov byte[owin],0 ; flag - o winner + jmp redraw ; чистое игровое поле ==>> +;------------------------------------------------------------------------------- +; смотрим, где была нажата мышь +;------------------------------------------------------------------------------- + MOUSE: + mov eax,37 ; мышью.. + mov ebx,2 + int 0x40 + cmp eax,0 ; ..ничего не нажато - ждать событий + je event_wait + ;нажата кнопка мыши + mov eax,37 ; cursor coords + mov ebx,1 + int 0x40 ;eax=x*65536+y + mov [px],eax ;[px][py] - координата ткнутого места + + xor eax,eax + g11: ;1st cell====== + cmp word[px],92 + ja g12 ;>92 + cmp word[py],92 + ja g12 ;>92 + + ;mov dword[idx],0 ;N=(0..8) + jmp puts + + g12: ;2nd cell======== + inc al + cmp word[py],145 + ja g13 ;>142 + cmp word[px],92 + ja g13 ;>92 + ;mov dword[idx],1 ;N=(0..8) + jmp puts + g13: ;3========= + inc al + cmp word[px],92 + ja g21 ;>92 + ;mov dword[idx],2 ;N=(0..8) + jmp puts + g21: ;4======== + inc al + cmp word[px],145 + ja g22 + cmp word[py],92 + ja g22 + ;mov dword[idx],3 ;N=(0..8) + jmp puts + g22: ;5======= + inc al + cmp word[px],145 + ja g23 + cmp word[py],145 + ja g23 + ;mov dword[idx],4 ;N=(0..8) + jmp puts + g23: ;6======= + inc al + cmp word[px],142 + ja g31 ;>142 + ;mov dword[idx],5 ;N=(0..8) + jmp puts + g31: ;7======= + inc al + cmp word[py],92 + ja g32 + ;mov dword[idx],6 ;N=(0..8) + jmp puts + g32: ;8====== + inc al + cmp word[py],145 + ja g33 + ;mov dword[idx],7 ;N=(0..8) + jmp puts + g33: ;9====== + inc al + ;mov dword[idx],8 ;N=(0..8) + + puts: ;уже определили клетку + push eax + pop dword[idx] + mov esi,dword[idx] ; + cmp byte[pox+esi],0 ;поле свободно? (0-свободное поле) + jne event_wait ;возвращаемся назад к циклу ожидания + + shl esi,2 ;*4 + mov eax,dword[pole+esi] + mov dword[px],eax ;x coord from tabl ->px + ;mov ax,word[pole+esi+2] + ;mov word[py],ax ;y coord from tabl ->py + + call x_put ;"X" + + mov esi,dword[idx] ;esi - cell number =0..8 + mov byte[pox+esi],'x' + inc byte[fill] ;turn+1 + + xor eax,eax ;eax=0 + inc eax ;bit=1 eax=1 + mov ecx,dword[idx] ; esi=n + shl ax,cl ; <esi + call rndnext ; случайное число в eax + and eax, 01b ; eax= 0..1 + add esi,eax ; esi+=eax + ;esi=0..8 - index + cmp byte[pox+esi],0 ;случайное поле свободно? + jne rnew ;нет - новое случайное число + + cmp byte[pox+4],0 ;центр свободен? + jne @F ;нет - случайный ход (уже в esi) + mov esi,4 ;да - ходим в центр (4) вместо случ. + @@: + mov dword[idx],esi ;сохраним в idx + ;esi=0..8 - index + call o_com ;проверка 24хъ комбинаций XX0 + call x_com ;проверка 24хъ комбинаций 00* + + mov esi,dword[idx] ;idx-индекс клетки(0..8) куда ход + shl esi,2 ; esi*4 - поле состоит из записей по dword + mov eax,dword[pole+esi] ; + mov dword[px],eax ;x coord from tabl ->px + ; mov ax,word[pole+esi+2] ; + ; mov word[py],ax ;y coord from tabl ->py + call o_put ; рисуем нолик 'O' + + mov esi,dword[idx] + mov byte[pox+esi],'o' + inc byte[fill] ;turn++ + + xor eax,eax ;eax=0 + inc eax ;bit=1 eax=1 + mov ecx,dword[idx] ; ecx=n + shl ax,cl ; <hAGhc=kTMAH32|j%V)^rrg@vi+&%Zwh zPVAU^=(00mba4!+nDh4f zMqVaE9@YyUGanpb+u+dfx4e1UkFMaB?uhfLDSIRKZ;HOX;g|Jtx7U@%?F-$1)USN1 zeSf*s`j-y{qvsvZzx(S;!Gx13Ml*fXCZ9BYy5(%m>1-tx5$BjQU=fhSI`!qb&qCLC zUMPCFL3uJ%t@o+S**~XUcky`PbZ+BQopgu+DMmZz&Dl0HztXow;IZen8OAU}V*LGX cpZUD5^TXfztR=pCQfnD5N{ASKew4Ww07(#onE(I) literal 0 HcmV?d00001 diff --git a/programs/games/lights/trunk/data.inc b/programs/games/lights/trunk/data.inc new file mode 100644 index 0000000000..99e42ae4bc --- /dev/null +++ b/programs/games/lights/trunk/data.inc @@ -0,0 +1,53 @@ +;#************************** +;#* LIGHTS (c)* data.inc +;#************************** 15/10/2007 +L0 equ 0x0000F8 ; light off +L1 equ 0xFFFF00 ; light on +deltaX equ 35 +deltaY equ 35 +posX equ 50 +posY equ 50 + +macro DATA_SECTION +{ +; ДАННЫЕ ПРОГРАММЫ +;----------------------------------------------------------------------------- +text: db 'LIGHTS v0.002 [ESC] - quit' ; winheader string +texts: db 'Congratulations!!!' ; in window +textend: + +;=================Table===================== 18x18 :: N,Color,X,Y , up,lf,rt,dn +tButIdx: dd 0 +tBut: + db 5,0, posX+deltaX*0, posY+deltaY*0 , 0 , 0 , 1 , 1 + db 6,0, posX+deltaX*1, posY+deltaY*0 , 0 , 1 , 1 , 1 + db 7,0, posX+deltaX*2, posY+deltaY*0 , 0 , 1 , 1 , 1 + db 8,0, posX+deltaX*3, posY+deltaY*0 , 0 , 1 , 1 , 1 + db 9,0, posX+deltaX*4, posY+deltaY*0 , 0 , 1 , 0 , 1 + + db 10,0, posX+deltaX*0, posY+deltaY*1 , 1 , 0 , 1 , 1 + db 11,0, posX+deltaX*1, posY+deltaY*1 , 1 , 1 , 1 , 1 + db 12,0, posX+deltaX*2, posY+deltaY*1 , 1 , 1 , 1 , 1 + db 13,0, posX+deltaX*3, posY+deltaY*1 , 1 , 1 , 1 , 1 + db 14,0, posX+deltaX*4, posY+deltaY*1 , 1 , 1 , 0 , 1 + + db 15,0, posX+deltaX*0, posY+deltaY*2 , 1 , 0 , 1 , 1 + db 16,0, posX+deltaX*1, posY+deltaY*2 , 1 , 1 , 1 , 1 + db 17,0, posX+deltaX*2, posY+deltaY*2 , 1 , 1 , 1 , 1 + db 18,0, posX+deltaX*3, posY+deltaY*2 , 1 , 1 , 1 , 1 + db 19,0, posX+deltaX*4, posY+deltaY*2 , 1 , 1 , 0 , 1 + + db 20,0, posX+deltaX*0, posY+deltaY*3 , 1 , 0 , 1 , 1 + db 21,0, posX+deltaX*1, posY+deltaY*3 , 1 , 1 , 1 , 1 + db 22,0, posX+deltaX*2, posY+deltaY*3 , 1 , 1 , 1 , 1 + db 23,0, posX+deltaX*3, posY+deltaY*3 , 1 , 1 , 1 , 1 + db 24,0, posX+deltaX*4, posY+deltaY*3 , 1 , 1 , 0 , 1 + + db 25,0, posX+deltaX*0, posY+deltaY*4 , 1 , 0 , 1 , 0 + db 26,0, posX+deltaX*1, posY+deltaY*4 , 1 , 1 , 1 , 0 + db 27,0, posX+deltaX*2, posY+deltaY*4 , 1 , 1 , 1 , 0 + db 28,0, posX+deltaX*3, posY+deltaY*4 , 1 , 1 , 1 , 0 + db 29,0, posX+deltaX*4, posY+deltaY*4 , 1 , 1 , 0 , 0 +;=======================================:: N,Color,X,Y , up,lf,rt,dn +;---------------------------------------------------------------------------- +} diff --git a/programs/games/lights/trunk/lights.asm b/programs/games/lights/trunk/lights.asm new file mode 100644 index 0000000000..422c7bb8a7 --- /dev/null +++ b/programs/games/lights/trunk/lights.asm @@ -0,0 +1,15 @@ +;#************************** +;#* LIGHTS * Kolibri OS +;#************************** 15/10/2007 +include 'main.inc' +include 'data.inc' +include 'macs.inc' + + BeginProgram + + main_loop + + DATA_SECTION + + EndProgram + diff --git a/programs/games/lights/trunk/lights.txt b/programs/games/lights/trunk/lights.txt new file mode 100644 index 0000000000..a381dfc2dd --- /dev/null +++ b/programs/games/lights/trunk/lights.txt @@ -0,0 +1,11 @@ +LIGHTS v0.002 + +Классическая игра в Лампочки известна давно. +Правила просты. Цель игры включить все 25 "лампочек". +Нажатие мышкой на клетку будет переключать лампочку +(а также смежные) а также соседние в состояние вкл./выкл. + +Кажется легко, но это довольно трудно. + + +===16/10/2007===http://board.kolibrios.org/ \ No newline at end of file diff --git a/programs/games/lights/trunk/macs.inc b/programs/games/lights/trunk/macs.inc new file mode 100644 index 0000000000..ed5d7da0af --- /dev/null +++ b/programs/games/lights/trunk/macs.inc @@ -0,0 +1,72 @@ +macro BeginProgram + { + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd __start + dd __end + dd 0x10000 ;__memory + dd 0x10000 ;__stack + dd 0x0 ; dd __params + dd 0x0 + __start: + } + +macro EndProgram + { + align 32 + rb 2048 + __end: + ;org 0x10000 + __stack: + __memory: + } + +macro mButton nn,crgb,x,y,dx,dy +{ + mov eax,8 ; функция 8: определить и вывести кнопку + mov ebx,x*65536+dx ; [x начальный] *65536 + [x размер] + mov ecx,y*65536+dy ; [y начальный] *65536 + [y размер] + mov edx,nn ; идентификатор кнопки =1 + mov esi,crgb ;0x116611 ; цвет кнопки RRGGBB + int 0x40 +} + +macro LoopBegin lab,begi +{ + push ecx ; ECX->STACK store + mov ecx,begi + lab: + push ecx ; ECX->STACK counter +} + +macro LoopEnd lab,endi +{ + pop ecx ;ECX<-STACK counter + inc ecx + cmp ecx,endi + jne lab + pop ecx ;ECX<-STACK restore +} + + + +;------------------------------------ +; constants +;-----------------------цвет:0xRRGGBB +cBLACK = 0x000000 ; черный +cRED = 0xFF0000 ; красный +cYELLOW = 0x3FFFF00 ; желтый +cGREEN = 0x00FF00 ; зеленый +cNAVY = 0x0000FF ; синий +cMAGENTA = 0xFF00FF ; малиновый +cBLUE = 0x00FFFF ; голубой +cWHITE = 0xFFFFFF ; белый +cBROWN = 0x554433 ; + +;------------------------------- +cMAGENTAl = 0xB800B8 ; magenta +cVIOLETl = 0xF800F8 ; фиолетовый + diff --git a/programs/games/lights/trunk/main.inc b/programs/games/lights/trunk/main.inc new file mode 100644 index 0000000000..a5b72a507e --- /dev/null +++ b/programs/games/lights/trunk/main.inc @@ -0,0 +1,217 @@ +;#************************** +;#* LIGHTS (c)* main.inc +;#************************** 15/10/2007 +L0 equ 0x0000F8 ; light off +L1 equ 0xFFFF00 ; light on +LAG equ 2 +deltaX equ 35 +deltaY equ 35 +posX equ 50 +posY equ 50 + +macro main_loop +{ + +; функция отрисовки окна +draw_window: + mov eax,12 ; функция 12: сообщить системе о + ; состоянии перерисовки окна + mov ebx,1 ; подфункция 1, начало перерисовки + int 0x40 + ; ===== ОКНО !!1 + mov eax,0 ; функция 0: определить и вывести окно + mov ebx,100*65536+270 ; [x начальный] *65536 + [x размер] + mov ecx,100*65536+280 ; [y начальный] *65536 + [y размер] + mov edx,0x02ccddff ; цвет рабочей области RRGGBB + ; 0x02000000 = тип окна 2 + mov esi,0x808899AA ; цвет области заголовка RRGGBB + ; 0x80000000 = цвет перетекает + mov edi,0xFFAAcc ; цвет рамки RRGGBB + int 0x40 + ; НАДПИСЬ в заголовке Lights v0.001 + mov eax,4 ; функция 4: написать текст в окне + mov ebx,8*65536+8 ; [x начальный] *65536 + [y начальный] + mov ecx,0x00224422 ; цвет текста RRGGBB + ; старший байт (0x00) - размер шрифта + ; (маленький) + mov edx,text ; указатель на начало текста + mov esi,texts-text ; длина текста в байтах + int 0x40 + + xor eax,eax ; НАДПИСЬ в окне!!! + mov ecx,eax + lb: ;loop ecx + mov edi,ecx ; + shl edi,3 ; + add edi,tBut ; + add al,byte[edi+1] ; + ; + inc ecx ; + cmp ecx,25 ; + jne lb ;ecx<25 + + cmp eax, 0xE7 ;25 + jne goon + ;int3 + ;call Bin2Hex + mov eax,4 ; функция 4: написать текст в окне + mov ebx,80*65536+250 ; [x начальный] *65536 + [y начальный] + mov ecx,0x10FF22FF ; цвет текста RRGGBB + ; ; старший байт (0x10) - размер шрифта + ; ; (большой) + ;mov edx,txthex + ;mov esi,17 + mov edx,texts ; указатель на начало текста + mov esi,textend-texts ; длина текста в байтах + int 0x40 + + goon: +;------------------------------------------------------------------------------- +; ----КНОПКИ---- +; button() +;------------------------------------------------------------------------------- + + mov eax,8 ; функция 8: определить и вывести кнопку + mov ebx,(200-19)*65536+12 ; [x начальный] *65536 + [x размер] + mov ecx,5*65536+12 ; [y начальный] *65536 + [y размер] + mov edx,100 ; идентификатор кнопки =1 + mov esi,0xFF6611 ; цвет кнопки RRGGBB + int 0x40 ; ===КНОПКА ЗАКРЫТИЯ ОКНА=== + + + LoopBegin labl,0 ;ecx - loop index + ;add ecx,5 + mov edi,ecx + shl edi,3 ;edi*8 -index of table + add edi,tBut + + xor ebx,ebx + mov bl,byte[edi+2] ;X + shl ebx,16 ;*65536=256*256 + add ebx,deltaX-LAG ;dX + xor ecx,ecx + mov cl,byte[edi+3] ;Y + shl ecx,16 ;*65536=256*256 + add ecx,deltaY-LAG ;dY + xor edx,edx + mov dl,byte[edi] ;N + + xor esi,esi + cmp byte[edi+1], 0 ;Color = 0/1 + je lit_off + mov esi,L1 ;on + jmp lend + lit_off: + mov esi,L0 ;off + lend: + mov eax,8 ;8-BUTTON + int 0x40 + LoopEnd labl,25 + +;============================================================= +endbut: + mov eax,12 ; функция 12: сообщить системе о + ; состоянии перерисовки окна + mov ebx,2 ; подфункция 2, перерисовка окончена + int 0x40 + ;ret ; конец функции - это не функция! + +event_wait: + ;mov eax,10 ; функция 10:=0A ожидание события + mov eax,23 + mov ebx,100 + int 0x40 + +; тип события возвращён в eax, далее проверяем, какое событие произошло +;------------------------------------------------------------------------------- + cmp eax,1 ; запрос на перерисовку? + je redraw + cmp eax,2 ; нажата клавиша клавиатуры? + je key + cmp eax,3 ; нажата кнопка в окне программы? + je button + + jmp event_wait ; возвращаемся к началу цикла ожидания событий + +; после того, как событие идентифицировано, его надо обработать +;------------------------------------------------------------------------------- +redraw: + call draw_window ; вызываем функцию draw_window и + jmp event_wait ; возвращаемся назад к циклу ожидания + +key: + mov eax,2 ; считываем код нажатой клавиши. Возвращен в ah. + int 0x40 ; Клавиша должна быть прочитана для очистки + cmp ah,27 + je clos0 ; exit on ESC + ; + jmp event_wait ; возврат к event_wait + +button: + mov eax,17 ; считываем идентификатор нажатой кнопки + int 0x40 ; возвращен ah. + +;------------------------------------------------------------------------------- +; смотрим, какая кнопка была нажата и соответствующим образом реагируем. +;------------------------------------------------------------------------------- + cmp ah,100 ; кнопка с id=100("закрыть")? + jne noclose + clos0: + mov eax,-1 ; функция -1: завершить программу + int 0x40 ; кнопка 5-29 + noclose: + + xor ecx,ecx ; + mov cl,ah ; + sub ecx,5 ; ecx - index for tBut + + mov edi,ecx + call x_lit ;+0 - центр + mov [tButIdx],edi ;save index + + mov edi,[tButIdx] + cmp byte[edi+6],0 + je next000 + mov edi,ecx + inc edi + call x_lit ;+1 справа + + next000: + mov edi,[tButIdx] + cmp byte[edi+5],0 + je next001 + mov edi,ecx + dec edi + call x_lit ;-1 слева + + next001: + mov edi,[tButIdx] + cmp byte[edi+4],0 + je next002 + mov edi,ecx + sub edi,5 + call x_lit ;-5 сверху + + next002: + mov edi,[tButIdx] + cmp byte[edi+7],0 + je next003 + mov edi,ecx + add edi,5 + call x_lit ;+5 снизу + next003: + call draw_window + jmp event_wait +;================================-- + x_lit: ; edi - index + shl edi,3 ; edi*8 -index of table tBut + add edi,tBut ; + not byte[edi+1] ; invert second byte = L0/L1 + ret ; +;================================-- + call draw_window ;наша кнопка;) +; здесь проверяем остальные кнопки + jmp event_wait ;возвращаемся к циклу ожидания +} + + diff --git a/programs/games/sw/trunk/sw.asm b/programs/games/sw/trunk/sw.asm new file mode 100644 index 0000000000..43747e12b0 --- /dev/null +++ b/programs/games/sw/trunk/sw.asm @@ -0,0 +1,1372 @@ +;v. 0.4: 20.10.2009 staper@inbox.ru + +use32 + org 0x0 + db 'MENUET01' + dd 0x1 + dd START + dd I_END + dd (I_END+600) and not 3 + dd (I_END+600) and not 3 + dd 0x0,0x0 + +DEBUG equ 0 + +use_new_logic equ 1 ;фюсрты хЄ яЁютхЁъє ъыхЄъш эр "юъЁєц╕ээюёЄ№", яЁюуЁрььр т√сшЁрхЄ эршсюыхх ётюсюфэє■ +use_ext_logic equ 1 ;ъ use_new_logic, фюяюыэшЄхы№эр  яЁютхЁър  ўххъ тюъЁєу чрфрээющ ъыхЄъш + +include '../../../macros.inc' +include 'lang.inc' + +;include 'debug.inc' + +macro dbg_dec num +{pushad +newline +debug_print_dec num +popad} + + +START: + + mcall 40,100111b + mcall 3 + mov [rsx1],ax + shr eax,16 + mov [rsx2],ax + jmp new_game + +redraw_all: + mcall 12,1 + mcall 0,100*65536+432,100*65536+260,0x34FFFFFF,,title + mcall 38,1*65536+421,27*65536+27,0x00b0b0b0 + mov edi,10 + @@: add ecx,20*65536+20 + mcall + dec edi + jnz @b + mcall ,1*65536+1,27*65536+226,;000000 + mov edi,21 + @@: add ebx,20*65536+20 + mcall + dec edi + jnz @b + mcall 13,202*65536+19,27*65536+202,0xFFFFFF + mcall 4,40*65536+12,0x80000000,text_user + mcall ,350*65536+12,,text_cpu + mcall 8,120*65536+70,7*65536+15,2,0xFFFFFF + mcall ,230*65536+70,,3, + mcall 4,135*65536+12,0x80000000,but_new + mcall ,240*65536+12,,but_auto + mcall 12,2 +ret + +draw_pole: +; mcall 0,100*65536+432,100*65536+260,0x74FFFFFF,,title + if DEBUG + call SysMsgBoardNum ;show esp + mcall 8,200*65536+10,7*65536+15,4,0xFFFFFF + endf + + + + mov esi,table1 + mov edi,90 + mov ebp,10 + mov ebx,1*65536+21 + mov ecx,27*65536+47 + call draw_bots + + mov esi,table5 + mov edi,90 + mov ebp,10 + mov ebx,221*65536+241 + mov ecx,27*65536+47 + call draw_bots + cmp [u_kill],10 + jne @f + mcall 4,69*65536+12,0x80ff0000,text_win + bts [flags],5 + @@: cmp [c_kill],10 + jne @f + mcall 4,372*65536+12,0x80ff0000,text_win + bts [flags],5 + @@: mcall 12,2 + cmp [number_bots],10 + jne still + bts [flags],0 +still: + mcall 10 + + cmp eax,6 + je mouse + dec eax + jnz @f + call redraw_all + jmp draw_pole +@@: dec eax + jz key + dec eax + jz button + jmp still + +key: + mcall 2 + jmp still + +button: + mcall 17 + dec ah + jnz @f + mcall -1 + + @@: mov ecx,(344)/4 + mov esi,table1 + .3: mov dword [esi],0 + add esi,4 + loop .3 + + dec ah + jz @f + + mov [flags],1001b ;auto fill + mov [number_bots],0 + + call set_bots + mov [number_bots],0 + bts [flags],2 + call set_bots + call redraw_all + btc [flags2],0 + jc second_pole.comp + jmp draw_pole + + @@: ;new game + mov [number_bots],0 +new_game: + mov [flags],1100b + call set_bots + btr [flags],0 + btr [flags],3 + btr [flags],2 + mov [number_bots],0 + call redraw_all + jmp draw_pole + +draw_bots: + cmp byte [esi],1 + je .one + cmp byte [esi],2 + je .two + cmp byte [esi],3 + je .three + cmp byte [esi],4 + jne .null + bts [flags],4 + jmp .three + +.end: + inc esi + dec ebp + jnz draw_bots + test edi,edi + jz @f + sub edi,10 + mov ebp,10 + add ebx,-200*65536-200 + add ecx,20*65536+20 + jmp draw_bots + @@: +ret + +.one: + push ebx ecx + call .0 + mov edx,0x00aa66 + mcall 13 + pop ecx ebx +.null: + add ebx,20*65536+20 + jmp .end +.two: + push ebx ecx + add ebx,8*65536-6 + add ecx,12*65536-12 + mcall 38,,,0x508cec + add ecx,-6*65536+6 + mcall + pop ecx ebx + jmp .null +.three: + push ebx ecx + call .0 + mov edx,0x00FF0000 + bt [flags],4 + jnc @f + mov edx,0x00555555 + btr [flags],4 + @@: mcall 13 + pop ecx ebx + xor edx,edx + mcall 38 + add ecx,20*65536-20 + mcall + add ecx,-20*65536+20 + jmp .null + +.0: + shr ebx,16 + inc bx + shl ebx,16 + add ebx,19 + shr ecx,16 + inc cx + shl ecx,16 + add ecx,19 +ret + +mouse: + bt [flags],5 + jc still + mcall 37,2 + test eax,eax + jz still + cmp al,2 + jg still + ;1 - левая кнопка, 2 - правая + dec al + jnz .mouse_1 + btr [flags],1 + jmp @f + .mouse_1: + bts [flags],1 + @@: + mcall 37,1 + mov dx,ax + shr eax,16 + cmp dx,27 + jbe still + cmp dx,227 + jge still + cmp ax,1 + jbe still + cmp ax,201 + jge second_pole + ;первое поле + bt [flags],0 + jc still + sub ax,1 + push dx + xor edx,edx + mov cx,20 + div cx + pop dx + mov [oX],al + push ax + sub dx,27 + mov ax,dx + xor dx,dx + div cx + mov [oY],al + xor dx,dx + mov cx,10 + mul cx + pop dx + add ax,dx + cmp ax,100 + jg still + +set_bot: + mov esi,table1 + bt [flags],2 + jnc @f + mov esi,table2 + @@: mov edi,esi + add edi,100 + cmp [number_bots],6 + jnb .1paluba + cmp [number_bots],3 + jnb .2paluba + cmp [number_bots],0 + je .4paluba + jmp .3paluba + +.4paluba: + bt [flags],1 ;четырёхпалубный + jnc @f + cmp [oX],6 + jg _still + jmp .41 + @@: cmp [oY],6 + jg _still + .41: inc [number_bots] + mov [edi],al + bt [flags],1 + jc @f + add al,10 + mov [edi+1],al + add al,10 + mov [edi+2],al + add al,10 + mov [edi+3],al + jmp init_table + @@: inc al + mov [edi+1],al + inc al + mov [edi+2],al + inc al + mov [edi+3],al + jmp init_table + + +.3paluba: ;трёхпалубный + bt [flags],1 + jnc @f + cmp [oX],7 + jg _still + jmp .31 + @@: cmp [oY],7 + jg _still + .31: + call find_near + + bt [flags],1 + jc @f + add al,10 + call find_near + add al,10 + call find_near + sub al,20 + jmp .32 + @@: inc al + call find_near + inc al + call find_near + sub al,2 + .32: + inc [number_bots] + mov ecx,4 + mov dl,[number_bots] + sub dl,2 + jz @f + add ecx,3 + @@: + mov [edi+ecx],al + bt [flags],1 + jc @f + add al,10 + mov [edi+ecx+1],al + add al,10 + mov [edi+ecx+2],al +jmp init_table + @@: inc al + mov [edi+ecx+1],al + inc al + mov [edi+ecx+2],al +jmp init_table + + + +.2paluba: ;двухпалубный + bt [flags],1 + jnc @f + cmp [oX],8 + jg _still + jmp .21 + @@: cmp [oY],8 + jg _still + .21: + call find_near + bt [flags],1 + jc @f + add al,10 + call find_near + sub al,10 + jmp .22 + @@: inc al + call find_near + dec al + .22: + inc [number_bots] + mov ecx,8 + mov dl,[number_bots] + sub dl,4 + jz @f + add ecx,2 + dec dl + jz @f + add ecx,2 + @@: add ecx,2 + mov [edi+ecx],al + bt [flags],1 + jc @f + add al,10 + mov [edi+ecx+1],al +jmp init_table + @@: inc al + mov [edi+ecx+1],al +jmp init_table + + +.1paluba: ;однопалубный + call find_near + inc [number_bots] + xor edx,edx + movzx ecx,[number_bots] + add ecx,9 + mov [edi+ecx],al +jmp init_table + +find_near: + push ax + call f_near ;0 + + cmp al,10 + jb @f + sub al,10 ;-10 + call f_near + +@@: cmp al,11 + jb @f + + xor edx,edx + mov ecx,10 + div cx + mov ax,[esp] + cmp dx,0 + je @f + + sub al,11 ;-11 + call f_near + +@@: cmp al,9 + jb @f + + xor edx,edx + mov ecx,10 + div cx + mov ax,[esp] + cmp dx,9 + je @f + + sub al,9 ;-9 + call f_near + +@@: cmp al,1 + jb @f + + xor edx,edx + mov ecx,10 + div cx + mov ax,[esp] + cmp dx,0 + je @f + + dec al ;-1 + call f_near + +@@: cmp al,99 + jg @f + + xor edx,edx + mov ecx,10 + div cx + mov ax,[esp] + cmp dx,9 + je @f + + inc al ;+1 + call f_near + +@@: cmp al,90 + jge @f + add al,10 ;+10 + call f_near + +@@: cmp al,91 + jge @f + + xor edx,edx + mov ecx,10 + div cx + mov ax,[esp] + cmp dx,0 + je @f + + add al,9 ;+9 + call f_near + +@@: cmp al,89 + jge @f + + xor edx,edx + mov ecx,10 + div cx + mov ax,[esp] + cmp dx,9 + je @f + add al,11 ;+11 + call f_near + +@@: pop ax +; xor bl,bl +; bt [flags],6 +; jnc @f +; bt [flags],9 +; jnc @f +; inc [p_pov] +; cmp [p_pov],20 +; jb @f +; bts [flags],9 +; @@: + btr [flags],6 + clc +ret + +f_near: + bt [flags],6 + jnc .2 +; bt [flags],9 +; jc @f +; cmp byte [esi+eax],2 +; jge @f +; @@: + cmp byte [esi+eax],4 + je @f + mov ax,[esp+4] + ret + @@:; add esp,4 +; jmp second_pole.cpu + mov ax,[esp+4] + mov cx,ax + add esp,6 + btr [flags],6 + stc +; mov bl,1 + ret + + .2: movzx edx, byte [smeshenie] + @@: cmp al,[edi+edx] + je .end + dec dl + jnz @b + cmp al,[edi] + je .end + mov ax,[esp+4] + ret + .end: add esp,10 + jmp _still + + + +init_table: +; xor eax,eax + movzx ecx, byte [number_bots] + mov edx,3 + dec cl + jz .i_t + + mov al,2 +.2: add dl,3 + dec cl + jz .i_t + dec al + jnz .2 + + mov al,3 +.3: add dl,2 + dec cl + jz .i_t + dec al + jnz .3 + + mov al,4 +.4: inc dl + dec cl + jz .i_t + dec al + jnz .4 + +.i_t: mov [smeshenie],dl +@@: movzx eax, byte [edi+edx] + mov byte [esi+eax],1 + dec dl + jnz @b + movzx eax, byte [edi] + mov byte [esi+eax],1 + bt [flags],3 + jc set_bots +; mcall 12,1 + jmp draw_pole + + +second_pole: + cmp ax,221 + jbe still + cmp ax,421 + jge still + ;второе поле + bt [flags],0 + jnc still + sub ax,221 + push dx + xor edx,edx + mov cx,20 + div cx + pop dx + push ax + sub dx,27 + mov ax,dx + xor dx,dx + div cx + xor dx,dx + mov cx,10 + mul cx + pop dx + add ax,dx + cmp ax,100 + jg still + + mov edi,table2 + mov esi,table5 + cmp byte [esi+eax],2 + jge still + mov bl, byte [edi+eax] + add bl,2 + mov ecx,table5 + call if_bot_killed + mov [esi+eax],bl + cmp bl,3 + jge .m_end +.comp: mov esi,table1 + + + + .cpu: +; jmp .rndm + xor eax,eax +; mov edi,4 + btr [flags],8 + xor ecx,ecx + mov edx,tbl_ranen + mov dword [edx],0 + @@: mov al,[esi+ecx] ;поиск "подраненного корабля" + cmp al,3 + je .0 + cmp cl,99 + jge .1 + inc cl + jmp @b + .0: mov [edx],cl +if DEBUG +dbg_dec ecx +endf + inc edx + inc cl + jmp @b + + .1: + dec edx + mov cl,[edx] + cmp edx,tbl_ranen + jb .rndm + je @f + sub cl,[edx-1] + cmp cl,1 + jne .2 + add cl,[edx-1] + jmp .12 + .2: + add cl,[edx-1] + jmp .13 + + @@: bts [flags],8 + mov eax,4 + call random + dec al + jz .11 + dec al + jz .12 + dec al + jz .13 + jmp .14 + .11: +if DEBUG +dbg_dec 100 +endf + cmp cl,10 + jge @f + bts [flags],8 + jmp .12 + @@: sub cl,10 + cmp byte [esi+ecx],2 + jge @f + mov eax,ecx + bts [flags],6 + call find_near +; test bl,bl +; jz .20 + jnc .20 + @@: bts [flags],8 + add cl,10 + bts [flags],8 + .12: +if DEBUG +dbg_dec 200 +endf + movzx eax,cl + push cx + mov ch,10 + div ch + pop cx + cmp ah,9 + jb @f + .121: + bt [flags],8 + jc .13 + bts [flags],8 + mov edx,tbl_ranen + mov cl,[edx] + jmp .14 + @@: inc cl + cmp byte [esi+ecx],2 + jge @f + mov eax,ecx + bts [flags],6 + call find_near +; test bl,bl +; jz .20 + jnc .20 + @@: dec cl + jmp .121 + + .13: +if DEBUG +dbg_dec 300 +endf + cmp cl,90 + jb @f + .131: + bt [flags],8 + jc .14 + bts [flags],8 + mov edx,tbl_ranen + mov cl,[edx] + jmp .11 + @@: add cl,10 + cmp byte [esi+ecx],2 + jge @f + mov eax,ecx + bts [flags],6 + call find_near +; test bl,bl +; jz .20 + jnc .20 + @@: sub cl,10 + jmp .131 + + .14: +if DEBUG +dbg_dec 400 +endf + movzx eax,cl + push cx + mov ch,10 + div ch + pop cx + cmp ah,0 + jne @f + .141: + bts [flags],8 + jmp .11;cpu;rndm + @@: dec cl + cmp byte [esi+ecx],2 + jge @f + mov eax,ecx + bts [flags],6 + call find_near +; test bl,bl +; jz .20 + jnc .20 + @@: inc cl + jmp .141 + +.rndm: + + mov eax,100 + call random + cmp eax,100 + jb @f + shr eax,1 +@@: + +if use_new_logic + btc [flags],10 + jnc @f + btc [flags],9 + jnc @f + call check_freedom +endf + +@@: cmp byte [esi+eax],2 + jb @f; .rndm + ;поиск свободной клеточки перед/после выбранной, + ;иначе random иногда входит в бесконечный цикл + bt ax,0 + jnc .r_1 + .r_0: + cmp al,0 + je .r_1 + dec al + + cmp byte [esi+eax],2 + jb @f + jmp .r_0 + .r_1: + cmp al,99 + je .r_0 + inc al + + cmp byte [esi+eax],2 + jb @f + jmp .r_1 +@@: + bts [flags],6 + call find_near +; test bl,bl +; jnz .cpu + jc .cpu;20 + +.20: + mov bl,[esi+eax] + add bl,2 + mov ecx,esi + mov edi,esi + call if_bot_killed + mov [esi+eax],bl +; cmp [u_kill],10 +; je .m_end + cmp [c_kill],10 + je .m_end + cmp bl,3 + jge .cpu + +.m_end:; mcall 12,1 +jmp draw_pole + +if_bot_killed: + push ebx + add edi,100 + mov ebx,19 + @@: cmp al,[edi+ebx] + je @f + dec ebx + jnz @b + cmp al,[edi+ebx] + jne .end + @@: + cmp ebx,16 + jnb .end_i + + @@: cmp bl,10 + jb .2 + btc bx,0 + mov bl, [edi+ebx] + cmp byte [ecx+ebx],3 + jne .end + inc byte [ecx+ebx] + jmp .end_i + + .2: cmp bl,4 + jb .3 + add edi,4 + cmp bl,7 + jb .3 + add edi,3 + .3: movzx edx, byte [edi] + cmp dl,al + je @f + cmp byte [ecx+edx],3 + jne .end + @@: mov dl,[edi+1] + cmp dl,al + je @f + cmp byte [ecx+edx],3 + jne .end + @@: mov dl,[edi+2] + cmp dl,al + je @f + cmp byte [ecx+edx],3 + jne .end + + @@: cmp bl,4 + jnb @f + mov dl,[edi+3] + cmp dl,al + je @f + cmp byte [ecx+edx],3 + jne .end + + + @@: mov dl,[edi] + cmp dl,al + je @f + inc byte [ecx+edx] + @@: mov dl,[edi+1] + cmp dl,al + je @f + inc byte [ecx+edx] + @@: mov dl,[edi+2] + + cmp bl,4 + jnb .9;@f + +; cmp dl,al +; je .end_i +; inc byte [ecx+edx] +; jmp .end_i + + + @@: cmp dl,al + je @f + inc byte [ecx+edx] + @@: mov dl,[edi+3] +.9: cmp dl,al + je .end_i + inc byte [ecx+edx] + .end_i: + pop ebx + inc ebx + cmp ecx,table5 + jne @f + inc [u_kill] + ret + @@: inc [c_kill] + ret + .end: pop ebx +ret + + + + +_still: + bt [flags],3 + jnc still + +set_bots: + cmp [number_bots],10 + jne @f + ret + @@: xor edx,edx + mov ecx,10 + cmp [number_bots],6 + jb @f + push dword 10 + jmp .1 + @@: cmp [number_bots],3 + jb @f + push dword 9 + jmp .1 + @@: cmp [number_bots],2 + jb @f + push dword 8 + jmp .1 + @@: push dword 7 + .1: + mov eax,[esp] + call random + mov [oX],al + mul cl + mov cl,al + mov eax,[esp] + call random + mov [oY],al + add cl,al + + cmp cl,100 + jge .1 + + add esp,4 + mov eax,2 + call random + cmp al,1 + jne @f + bts [flags],1 + mov al,cl + jmp set_bot + @@: btr [flags],1 + mov al,cl + jmp set_bot + + + + + + +;процедура отлавливает "наиболее свободную" из клеток для атаки + +if use_new_logic +check_freedom: +; mov esi,table1 + push ax + push word 100 + xor eax,eax + mov ebx,0x900 + +.1: bts [flags],6 + call find_near + jc .11 + cmp byte [esi+eax],2 ;0 + jb @f +.11: inc bl + +@@: cmp al,10 ;-10 + jb @f + push ax + + sub al,10 + if use_ext_logic + bts [flags],6 + call find_near + jc .21 + endf + cmp byte [esi+eax],2 + jb .22 +.21: inc bl +.22: pop ax + +@@: cmp al,11 + jb @f + push ax + + xor edx,edx + mov ecx,10 + push ax + div cx + pop ax + + cmp dx,0 + je .32 + + sub al,11 + if use_ext_logic + bts [flags],6 + call find_near + jc .31 + endf + cmp byte [esi+eax],2 ;-11 + jb .32 +.31: inc bl +.32: pop ax + +@@: cmp al,9 + jb @f + push ax + + xor edx,edx + mov ecx,10 + push ax + div cx + pop ax + cmp dx,9 + je .42 + + sub eax,9 + if use_ext_logic + bts [flags],6 + call find_near + jc .41 + endf + cmp byte [esi+eax],2 ;-9 + jb .42 +.41: inc bl +.42: pop ax + +@@: cmp al,1 + jb @f + push ax + + xor edx,edx + mov ecx,10 + push ax + div cx + pop ax + cmp dx,0 + je .52 + + dec al + if use_ext_logic + bts [flags],6 + call find_near + jc .51 + endf + cmp byte [esi+eax],2 ;-1 + jb .52 +.51: inc bl +.52: pop ax + +@@: cmp al,99 + jg @f + push ax + + xor edx,edx + mov ecx,10 + push ax + div cx + pop ax + cmp dx,9 + je .62 + + inc al + if use_ext_logic + bts [flags],6 + call find_near + jc .61 + endf + cmp byte [esi+eax],2 ;+1 + jb .62 +.61: inc bl +.62: pop ax + +@@: cmp al,90 + jge @f + push ax + add al,10 + if use_ext_logic + bts [flags],6 + call find_near + jc .71 + endf + cmp byte [esi+eax],2 ;+10 + jb .72 +.71: inc bl +.72: pop ax + +@@: cmp al,91 + jge @f + push ax + xor edx,edx + mov ecx,10 + push ax + div cx + pop ax + cmp dx,0 + je .82 + + add al,9 + if use_ext_logic + bts [flags],6 + call find_near + jc .81 + endf + cmp byte [esi+eax],2 ;+9 + jb .82 +.81: inc bl +.82: pop ax + +@@: cmp al,89 + jge @f + push ax + + xor edx,edx + mov ecx,10 + push ax + div cx + pop ax + + cmp dx,9 + je .92 + + add al,11 + if use_ext_logic + bts [flags],6 + call find_near + jc .91 + endf + cmp byte [esi+eax],2 ;+11 + jb .92 +.91: inc bl +.92: pop ax + +@@: bt [flags],7 + jc .ret + cmp byte [esi+eax],1 + jg @f + cmp bl,bh + jg @f + +; shl ebx,8 + bts [flags],6 + call find_near +; xchg cl,bl +; shr ebx,8 +; test cl,cl +; jnz @f + jc @f + + shl bx,8 + pop dx ;dh - ближайшая слева свободнейшая клетка, dl - справа + pop cx ;cl - рандомно выбранная клетка +; cmp al,dl +; jg .5 +; cmp al,cl +; jb .4 +; mov dl,al +; jmp .5 +;.4: cmp al,dh +; jb .5 +; mov dh,al + cmp al,dh + jb .5 + cmp al,cl + jg .4 + mov dh,al + jmp .5 +.4: cmp al,dl + jg .5 + mov dl,al +.5: push cx dx +@@: xor bl,bl + inc al + cmp al,100 + jb .1 + pop dx ax + +if DEBUG +dbg_dec eax +dbg_dec edx +endf + cmp dl,100 + jb @f + mov al,dh + ret +@@: mov al,dh + push dx + bts [flags],7 + call .1 + shl bx,8 + mov al,[esp] + call .1 + pop dx + btr [flags],7 + mov al,dl + test bl,bh + jbe .ret + mov al,dh +.ret: +ret + +endf + + + + + + + +align 4 +rsx1 dw ?;0x4321 +rsx2 dw ?;0x1234 +random: ; из ASCL + push ecx edx esi + mov cx,ax + mov ax,[rsx1] + mov bx,[rsx2] + mov si,ax + mov di,bx + mov dl,ah + mov ah,al + mov al,bh + mov bh,bl + xor bl,bl + rcr dl,1 + rcr ax,1 + rcr bx,1 + add bx,di + adc ax,si + add bx,0x62e9 + adc ax,0x3619 + mov [rsx1],bx + mov [rsx2],ax + xor dx,dx + cmp ax,0 + je nodiv + cmp cx,0 + je nodiv + div cx +nodiv: + mov ax,dx + pop esi edx ecx + and eax,0000ffffh +ret + + +if DEBUG +SysMsgBoardNum: ;warning: destroys eax,ebx,ecx,esi + mov ebx,esp + mov ecx,8 + mov esi,(number_to_out+1) +.1: + mov eax,ebx + and eax,0xF + cmp al,10 + sbb al,69h + das + mov [esi+ecx],al + shr ebx,4 + loop .1 + dec esi + mcall 71,1,number_to_out +ret + +number_to_out db '0x00000000',13,10,0 +endf + + + + +text_cpu db 'CPU',0 +text_user db 'USER',0 +if lang eq ru +title db 'Морской бой 0.4',0 +but_auto db 'Расставить',0 +but_new db 'Новая',0 +text_win db 'Выиграл!',0 +else +title db 'Sea war 0.4',0 +but_auto db 'Auto fill',0 +but_new db 'New',0 +text_win db 'Won!',0 +endf + +I_END: +; t1,t3,t5: 0-непомеченная клеточка, 1-занятая, 2-"промах", 3-"горит", 4-"потоплен" +; t2,t4: таблицы расположения элементов, 1 элемент по 4 клетки, 2x3, 3x2, 4x1 +align 16 +table1 rb 100 ;левое поле +table3 rb 20 +table2 rb 100 ;правое +table4 rb 20 +table5 rb 100 +u_kill rb 1 +c_kill rb 1 +p_pov rb 1 +smeshenie rb 1 +number_bots rb 1 +oX rb 1 +oY rb 1 +tbl_ranen rb 4 + +flags rw 1 +flags2 rw 1 +;бит 0: 0/1 - заполнение таблиц /игра +;1: нажата левая кнопка мыши (вертикаль) /правая (горизонталь) +;2: заполняется левое поле /правое +;3: ручное заполнение /автозаполнение +;4: в .three - потопленный корабль +;5: игра окончена +;6: в second_pole - вызов find_near +;7: в check_freedom +;8: зарезервировано +;9: зарезервировано +;10: зарезервировано \ No newline at end of file