1
1
kolibrios-fun/programs/games/sw/trunk/sw.asm

1372 lines
18 KiB
NASM
Raw Normal View History

;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 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
use_ext_logic equ 1 ;<3B> use_new_logic, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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 - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2 - <20><EFBFBD><E0A0A2>
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
;<3B><><EFBFBD> <20><><EFBFBD><EFBFBD>
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 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A1AD>
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: ;<3B><><EFBFBD><EFBFBD><EFBFBD><E3A1AD>
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: ;<3B><><EFBFBD><EFBFBD><EFBFBD><E3A1AD>
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: ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A1AD>
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
;<3B><><EFBFBD><20><><EFBFBD><EFBFBD>
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] ;<3B><><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0A1>"
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
;<3B><><EFBFBD><EFBFBD><EFBFBD><><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><>।/<2F><><20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD>,
;<3B><><EFBFBD><EFBFBD><EFBFBD> random <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E5AEA4> <20> <20><><EFBFBD><E1AAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>
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
;<3B><><EFBFBD><EFBFBD><E6A5A4><EFBFBD> <20><EFBFBD><E2ABA0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><> <20><><EFBFBD><20><><EFBFBD> <20><EFBFBD>
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 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1ABA5><><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⪠, dl - <20><><EFBFBD>
pop cx ;cl - ࠭<><E0A0AD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD>
; 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: ; <20><> 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 '<27><><EFBFBD><EFBFBD> <20><><EFBFBD> 0.4',0
but_auto db '<27><><EFBFBD><EFBFBD><EFBFBD><E2A0A2><EFBFBD>',0
but_new db '<27><><EFBFBD><EFBFBD><EFBFBD>',0
text_win db '<27>먣ࠫ!',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-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A5AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>窠, 1-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2-"<22><EFBFBD><E0AEAC>", 3-"<22><><EFBFBD><EFBFBD><EFBFBD>", 4-"<22><><EFBFBD><E2AEAF><EFBFBD>"
; t2,t4: ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮢, 1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 4 <20><><EFBFBD>⪨, 2x3, 3x2, 4x1
align 16
table1 rb 100 ;<3B><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
table3 rb 20
table2 rb 100 ;<3B><EFBFBD><E0A0A2>
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
;<3B><><EFBFBD> 0: 0/1 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E2A0A1><EFBFBD> /<2F><><EFBFBD><EFBFBD>
;1: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><E2A8AA><EFBFBD>) /<2F><EFBFBD><E0A0A2> (<28><><EFBFBD><E0A8A7><EFBFBD>)
;2: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> /<2F><EFBFBD><E0A0A2>
;3: <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /<2F><><EFBFBD><E2AEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;4: <20> .three - <20><><EFBFBD><E2AEAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A0A1>
;5: <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
;6: <20> second_pole - <20><EFBFBD> find_near
;7: <20> check_freedom
;8: <20><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>
;9: <20><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>
;10: <20><><EFBFBD>ࢨ஢<E0A2A8><E0AEA2><EFBFBD>