2012-03-15 10:43:33 +01:00
|
|
|
|
;
|
|
|
|
|
; <EFBFBD>㭪<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> ᮧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> ।<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
struct Cell
|
|
|
|
|
x dd ? ;+0
|
|
|
|
|
y dd ? ;+4
|
|
|
|
|
liv db ? ;+8
|
|
|
|
|
napr db ? ;+9
|
|
|
|
|
ends
|
|
|
|
|
|
|
|
|
|
offs_cell_x equ 0
|
|
|
|
|
offs_cell_y equ 4
|
|
|
|
|
offs_cell_liv equ 8
|
|
|
|
|
offs_cell_napr equ 9
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> ᮧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
pole:
|
|
|
|
|
.index dd 0
|
|
|
|
|
cell dd 0 ;㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ࠬ<EFBFBD> <EFBFBD>祥<EFBFBD>
|
|
|
|
|
.max_cell dd 90000
|
|
|
|
|
.b_sort dd 0 ;<EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD>
|
|
|
|
|
|
|
|
|
|
pole_index equ dword[edi]
|
|
|
|
|
pole_data equ dword[edi +4] ;㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ࠬ<EFBFBD> <EFBFBD>祥<EFBFBD>
|
|
|
|
|
pole_max_cell equ dword[edi +8]
|
|
|
|
|
pole_b_sort equ dword[edi+12] ;<EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD>
|
2012-03-23 18:24:30 +01:00
|
|
|
|
offs_pole_b_sort equ 12
|
2012-03-15 10:43:33 +01:00
|
|
|
|
|
|
|
|
|
macro get_cell_offset reg,ind
|
|
|
|
|
{
|
|
|
|
|
mov reg,ind
|
|
|
|
|
imul reg,sizeof.Cell
|
|
|
|
|
add reg,dword[cell]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
er_oom db 0 ;<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>砩 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
Cor_x dd 0
|
|
|
|
|
Cor_y dd 0
|
|
|
|
|
zoom db 3 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
txt_zoom db '<27><><EFBFBD><EFBFBD>⠡:',0
|
|
|
|
|
txt_osob db '<27><>祪:',0
|
|
|
|
|
txt_info: db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: '
|
|
|
|
|
.size: rb 16
|
|
|
|
|
txt_mull db '*',0
|
|
|
|
|
txt_space db ' ',0
|
|
|
|
|
txt_nl db 13,10,0
|
|
|
|
|
txt_buf rb 32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_init uses eax ebx edi, pole:dword
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
|
|
|
|
|
;*** <EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ***
|
|
|
|
|
mov ebx,4
|
|
|
|
|
add ebx,sizeof.Cell
|
|
|
|
|
imul ebx,pole_max_cell
|
|
|
|
|
stdcall mem.Alloc,ebx
|
|
|
|
|
mov pole_index,eax
|
|
|
|
|
|
|
|
|
|
mov ebx,pole_max_cell
|
|
|
|
|
shl ebx,2
|
|
|
|
|
add eax,ebx
|
|
|
|
|
mov pole_data,eax
|
|
|
|
|
|
|
|
|
|
stdcall pole_clear, edi
|
|
|
|
|
stdcall pole_paint, edi ;<EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>࠭<EFBFBD>)
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_delete uses edi, pole:dword
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
stdcall mem.Free,pole_index
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD>⪠ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>奬<EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_clear uses eax ecx edi, pole:dword
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov pole_b_sort,eax
|
|
|
|
|
mov byte[er_oom],al
|
|
|
|
|
cld
|
|
|
|
|
mov ecx,pole_max_cell
|
|
|
|
|
imul ecx,sizeof.Cell
|
|
|
|
|
mov edi,pole_data
|
|
|
|
|
repne stosb ;memset(cell,0,sizeof(Cell)*pole_max_cell);
|
|
|
|
|
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov ecx,pole_max_cell
|
|
|
|
|
mov edi,pole_index
|
|
|
|
|
@@:
|
|
|
|
|
stosd ;for(i=0;i<pole_max_cell;i++) pole_index[i]=i;
|
|
|
|
|
;mov dword[edi],eax
|
|
|
|
|
;add edi,4
|
|
|
|
|
inc eax
|
|
|
|
|
loop @b
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_cell_creat, pole:dword, x:dword, y:dword, li:dword
|
|
|
|
|
pushad
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov esi,pole_index
|
|
|
|
|
|
|
|
|
|
; *** <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>⪠ 㦥 <EFBFBD>뫠 ᮧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
stdcall pole_cell_find, [pole], [x],[y]
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je @f
|
|
|
|
|
get_cell_offset ebx,eax
|
|
|
|
|
jmp .change
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
; *** ᮧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD>
|
|
|
|
|
; <EFBFBD><EFBFBD>室<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD> (i) <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
;mov esi,pole_index
|
|
|
|
|
inc dword[esi]
|
|
|
|
|
mov ebx,pole_max_cell
|
|
|
|
|
cmp dword[esi],ebx
|
|
|
|
|
jne @f
|
|
|
|
|
dec dword[esi]
|
|
|
|
|
;... need call message: "eror out of memory" ...
|
|
|
|
|
;... <EFBFBD>뢮<EFBFBD> ᮮ<EFBFBD>饭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>९<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ...
|
|
|
|
|
mov byte[er_oom],0
|
|
|
|
|
jmp .fun_e ;return;
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,dword[esi] ;eax - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD>
|
|
|
|
|
shl eax,2
|
|
|
|
|
add eax,pole_index ;eax - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞<EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD> (<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᨢ<EFBFBD>)
|
|
|
|
|
get_cell_offset ebx,dword[eax]
|
|
|
|
|
mov ecx,dword[x]
|
|
|
|
|
mov dword[ebx],ecx ;+0 = .x
|
|
|
|
|
mov edx,dword[y]
|
|
|
|
|
mov dword[ebx+4],edx ;+4 = .y
|
|
|
|
|
.change:
|
|
|
|
|
mov ecx,[li]
|
|
|
|
|
mov byte[ebx+offs_cell_liv],cl
|
|
|
|
|
.fun_e:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;㤠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_cell_delete, pole:dword, x:dword, y:dword
|
|
|
|
|
pushad
|
|
|
|
|
mov edi,dword[pole]
|
2012-03-23 18:24:30 +01:00
|
|
|
|
mov ebx,edi
|
|
|
|
|
add ebx,offs_pole_b_sort
|
2012-03-15 10:43:33 +01:00
|
|
|
|
mov esi,pole_index
|
|
|
|
|
|
|
|
|
|
mov ecx,[esi]
|
|
|
|
|
cmp ecx,1
|
|
|
|
|
jl .fun_e
|
|
|
|
|
|
|
|
|
|
stdcall pole_cell_find, [pole], [x],[y]
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je .fun_e ;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>⪠ <EFBFBD><EFBFBD> <EFBFBD>뫠 ᮧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
dec dword[esi]
|
|
|
|
|
|
|
|
|
|
mov edi,esi
|
|
|
|
|
add edi,4
|
|
|
|
|
mov edx,ecx
|
|
|
|
|
cld
|
|
|
|
|
repnz scasd ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sub edi,4
|
|
|
|
|
|
2012-03-23 18:24:30 +01:00
|
|
|
|
cmp dword[ebx],1 ;[ebx]=pole_b_sort
|
|
|
|
|
jl @f
|
|
|
|
|
mov eax,edi
|
|
|
|
|
sub eax,esi ;esi=pole_index
|
|
|
|
|
shr eax,2
|
|
|
|
|
dec eax
|
|
|
|
|
cmp [ebx],eax ;eax - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> 㤠<EFBFBD>塞<EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD>
|
|
|
|
|
jle @f ;<EFBFBD>뫮 jl @f
|
|
|
|
|
dec dword[ebx]
|
|
|
|
|
@@:
|
|
|
|
|
|
2012-03-15 10:43:33 +01:00
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,esi ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᨢ<EFBFBD>
|
|
|
|
|
sub edx,edi
|
|
|
|
|
shr edx,2
|
|
|
|
|
mov ecx,edx
|
|
|
|
|
|
|
|
|
|
bt ecx,31
|
|
|
|
|
jc .fun_e
|
|
|
|
|
mov esi,edi
|
|
|
|
|
add esi,4
|
|
|
|
|
mov edx,[edi] ;<EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<EFBFBD>饣<EFBFBD> 㪠<EFBFBD><EFBFBD>⥫<EFBFBD>
|
|
|
|
|
cld
|
|
|
|
|
rep movsd
|
|
|
|
|
mov [edi],edx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<EFBFBD>饣<EFBFBD> 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> (<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᨢ<EFBFBD>)
|
|
|
|
|
.fun_e:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2012-03-23 18:24:30 +01:00
|
|
|
|
if debug
|
2012-03-15 10:43:33 +01:00
|
|
|
|
align 4
|
|
|
|
|
proc but_test_pole, pole:dword
|
|
|
|
|
pushad
|
|
|
|
|
stdcall [buf2d_clear], buf_0, [buf_0.color]
|
|
|
|
|
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
stdcall pole_paint,edi
|
|
|
|
|
mov ebx,5
|
|
|
|
|
|
|
|
|
|
mov esi,pole_index
|
|
|
|
|
mov ecx,[esi]
|
2012-03-23 18:24:30 +01:00
|
|
|
|
|
|
|
|
|
mov eax,pole_b_sort
|
2012-03-15 10:43:33 +01:00
|
|
|
|
mov edi,open_file_lif
|
2012-03-23 18:24:30 +01:00
|
|
|
|
stdcall convert_int_to_str
|
2012-03-29 22:33:24 +02:00
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_font,edi,5,ebx,[shem_colors] ;<EFBFBD><EFBFBD><EFBFBD>㥬 b_sort
|
2012-03-23 18:24:30 +01:00
|
|
|
|
add ebx,18
|
2012-03-15 10:43:33 +01:00
|
|
|
|
|
|
|
|
|
mov eax,[esi]
|
|
|
|
|
add esi,4
|
|
|
|
|
stdcall convert_int_to_str
|
2012-03-29 22:33:24 +02:00
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_font,edi,5,ebx,[shem_colors] ;<EFBFBD><EFBFBD><EFBFBD>㥬 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>祪
|
2012-03-15 10:43:33 +01:00
|
|
|
|
add ebx,9
|
|
|
|
|
|
|
|
|
|
cmp ecx,1
|
|
|
|
|
jl .end_dr
|
|
|
|
|
cld
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,[esi]
|
|
|
|
|
add esi,4
|
|
|
|
|
stdcall convert_int_to_str
|
2012-04-05 20:57:55 +02:00
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_font,edi,5,ebx,[color_captions] ;<EFBFBD><EFBFBD><EFBFBD>㥬 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᨢ<EFBFBD> <EFBFBD><EFBFBD>祪
|
2012-03-15 10:43:33 +01:00
|
|
|
|
add ebx,9
|
|
|
|
|
loop @b
|
|
|
|
|
.end_dr:
|
|
|
|
|
mov ecx,4
|
|
|
|
|
cld
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,[esi]
|
|
|
|
|
add esi,4
|
|
|
|
|
stdcall convert_int_to_str
|
2012-03-29 22:33:24 +02:00
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_font,edi,5,ebx,[color_border] ;<EFBFBD><EFBFBD><EFBFBD>㥬 4 <EFBFBD><EFBFBD>ப<EFBFBD> 㪠<EFBFBD><EFBFBD>⥫<EFBFBD><EFBFBD>
|
2012-03-15 10:43:33 +01:00
|
|
|
|
add ebx,9
|
|
|
|
|
loop @b
|
|
|
|
|
|
|
|
|
|
stdcall [buf2d_draw], buf_0
|
|
|
|
|
|
|
|
|
|
;call redraw_pole
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
;output:
|
|
|
|
|
; eax - index
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_cell_find uses edi, pole:dword, x:dword, y:dword
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
|
|
|
|
|
mov eax,pole_index
|
|
|
|
|
cmp dword[eax],0
|
|
|
|
|
jne @f
|
|
|
|
|
xor eax,eax ;if(!fristC) return 0;
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
xor eax,eax ;fnd=0;
|
|
|
|
|
cmp pole_b_sort,0
|
|
|
|
|
je @f
|
|
|
|
|
stdcall pole_bin_find, pole_index, [x],[y], pole_b_sort ;i=BinFind(pole_index, x,y, pole_b_sort);
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je @f
|
|
|
|
|
shl eax,2
|
|
|
|
|
add eax,pole_index
|
|
|
|
|
mov eax,dword[eax] ;if(i) fnd=pole_index[i];
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
cmp eax,0
|
|
|
|
|
jne @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ॢ<EFBFBD><EFBFBD>
|
|
|
|
|
push ebx ecx edx esi
|
|
|
|
|
;ebx -> i
|
|
|
|
|
;ecx -> firstC
|
|
|
|
|
;edx -> &pole_index[i]
|
|
|
|
|
;esi -> cell[pole_index[i]]
|
|
|
|
|
mov ecx,pole_index
|
|
|
|
|
mov ebx,pole_b_sort
|
|
|
|
|
mov edx,ebx
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,ecx
|
|
|
|
|
mov ecx,dword[ecx]
|
|
|
|
|
.cycle_b: ;for(i=pole_b_sort+1;i<=fristC;i++)
|
2012-03-23 18:24:30 +01:00
|
|
|
|
inc ebx
|
|
|
|
|
cmp ebx,ecx
|
|
|
|
|
jg .not_found
|
2012-03-15 10:43:33 +01:00
|
|
|
|
add edx,4
|
|
|
|
|
get_cell_offset esi,dword[edx]
|
|
|
|
|
mov eax,dword[x]
|
|
|
|
|
cmp dword[esi],eax ;+0 = .x
|
|
|
|
|
jne .if_e
|
|
|
|
|
mov eax,dword[y]
|
|
|
|
|
cmp dword[esi+4],eax ;+4 = .y
|
|
|
|
|
jne .if_e
|
|
|
|
|
;if(cell[pole_index[i]].x==x && cell[pole_index[i]].y==y){
|
|
|
|
|
mov eax,dword[edx] ;fnd=pole_index[i];
|
|
|
|
|
jmp .cycle_e ;break;
|
|
|
|
|
.if_e:
|
2012-03-23 18:24:30 +01:00
|
|
|
|
jmp .cycle_b
|
|
|
|
|
.not_found:
|
2012-03-15 10:43:33 +01:00
|
|
|
|
xor eax,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>㫥<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>諨 <EFBFBD>祩<EFBFBD><EFBFBD> (<EFBFBD> 横<EFBFBD><EFBFBD> eax <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>થ <EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
.cycle_e:
|
|
|
|
|
pop esi edx ecx ebx
|
|
|
|
|
@@:
|
|
|
|
|
.fun_e:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;output:
|
|
|
|
|
; eax - index
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_bin_find uses ebx ecx edx edi, mas:dword, fx:dword, fy:dword, k:dword
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov ebx,1 ;ebx - <EFBFBD><EFBFBD><EFBFBD>ᨬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>冷<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ॢ<EFBFBD>
|
|
|
|
|
@@:
|
|
|
|
|
cmp dword[k],ebx
|
|
|
|
|
jle @f ;while(k>por)
|
|
|
|
|
shl ebx,1 ;por<<=1;
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
cmp dword[k],ebx
|
|
|
|
|
jge @f ;if(k<por)
|
|
|
|
|
shr ebx,1 ;por>>=1;
|
|
|
|
|
@@:
|
|
|
|
|
mov ecx,ebx ;i=por;
|
|
|
|
|
|
|
|
|
|
;ecx -> i
|
|
|
|
|
;edi -> mas[i]
|
|
|
|
|
.cycle_b: ;do{
|
|
|
|
|
shr ebx,1 ;por>>=1;
|
|
|
|
|
|
|
|
|
|
mov edi,ecx
|
|
|
|
|
shl edi,2
|
|
|
|
|
add edi,dword[mas]
|
|
|
|
|
;if(compare_cells_mb(mas[i],fx,fy)){
|
|
|
|
|
stdcall pole_compare_cells_mb_coords, dword[edi],[fx],[fy]
|
|
|
|
|
cmp dl,0
|
|
|
|
|
je .if_u0_e
|
|
|
|
|
@@: ;while(i+por>k)
|
|
|
|
|
mov edx,ecx
|
|
|
|
|
add edx,ebx
|
|
|
|
|
cmp edx,dword[k] ;i+por>k
|
|
|
|
|
jle @f
|
|
|
|
|
shr ebx,1 ;por>>=1;
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
add ecx,ebx ;i+=por;
|
|
|
|
|
jmp .if_e
|
|
|
|
|
.if_u0_e:
|
|
|
|
|
;else if(compare_cells_bm(mas[i],fx,fy))i-=por;
|
|
|
|
|
stdcall pole_compare_cells_bm_coords, dword[edi],[fx],[fy]
|
|
|
|
|
cmp dl,0
|
|
|
|
|
je .if_u1_e
|
|
|
|
|
sub ecx,ebx
|
|
|
|
|
jmp .if_e
|
|
|
|
|
.if_u1_e:
|
|
|
|
|
;else { m=i; por=0; }
|
|
|
|
|
mov eax,ecx
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
.if_e:
|
|
|
|
|
cmp ebx,0
|
|
|
|
|
jne .cycle_b ;}while(por);
|
|
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2012-03-23 18:24:30 +01:00
|
|
|
|
;ᤢ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD> (<EFBFBD> <EFBFBD><EFBFBD>ꥪ⮢)
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_move_all, pole:dword, m_d_x:dword, m_d_y:dword
|
|
|
|
|
pushad
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov edx,[m_d_x]
|
|
|
|
|
mov esi,[m_d_y]
|
|
|
|
|
|
|
|
|
|
mov eax,pole_index
|
|
|
|
|
cmp dword[eax],0
|
|
|
|
|
je .end_0 ;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>室
|
|
|
|
|
|
|
|
|
|
mov ecx,dword[eax]
|
|
|
|
|
cld
|
|
|
|
|
@@: ;横<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ᥬ <EFBFBD>祩<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add eax,4
|
|
|
|
|
mov ebx,[eax]
|
|
|
|
|
imul ebx,sizeof.Cell
|
|
|
|
|
add ebx,pole_data
|
|
|
|
|
|
|
|
|
|
add dword[ebx+offs_cell_x],edx
|
|
|
|
|
add dword[ebx+offs_cell_y],esi
|
|
|
|
|
loop @b
|
|
|
|
|
.end_0:
|
|
|
|
|
|
|
|
|
|
;横<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪨<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠬ <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
stdcall dword[tl_node_poi_get_info],0,tree1
|
|
|
|
|
pop eax
|
|
|
|
|
@@:
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je .end_1
|
|
|
|
|
cmp word[eax],el_icon_elems ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>१ eax ⨯ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
je .mov_1
|
|
|
|
|
cmp word[eax],el_icon_captions
|
|
|
|
|
je .mov_1
|
|
|
|
|
jmp .end_mov_1
|
|
|
|
|
.mov_1:
|
|
|
|
|
stdcall [tl_node_poi_get_data], eax, tree1
|
|
|
|
|
pop ecx
|
|
|
|
|
|
|
|
|
|
add [ecx],edx ;coord x
|
|
|
|
|
add [ecx+4],esi ;coord y
|
|
|
|
|
.end_mov_1:
|
|
|
|
|
stdcall dword[tl_node_poi_get_next_info],eax,tree1
|
|
|
|
|
pop eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>室<EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>饬<EFBFBD> 㧫<EFBFBD>
|
|
|
|
|
jmp @b
|
|
|
|
|
.end_1:
|
|
|
|
|
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2012-03-15 10:43:33 +01:00
|
|
|
|
;output:
|
|
|
|
|
; dl
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_compare_cells_bm_coords uses eax ebx ecx, i0:dword, fx:dword, fy:dword
|
|
|
|
|
get_cell_offset eax,[i0]
|
|
|
|
|
;eax -> cell[i0]
|
|
|
|
|
mov ebx,dword[fx]
|
|
|
|
|
cmp dword[eax],ebx
|
|
|
|
|
jle @f
|
|
|
|
|
mov dl,1
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
mov ecx,dword[fy]
|
|
|
|
|
cmp dword[eax+4],ecx
|
|
|
|
|
jle @f
|
|
|
|
|
cmp dword[eax],ebx
|
|
|
|
|
jne @f
|
|
|
|
|
mov dl,1
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
xor dl,dl
|
|
|
|
|
.fun_e:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;output:
|
|
|
|
|
; dl
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_compare_cells_mb_coords uses eax ebx ecx, i0:dword, fx:dword, fy:dword
|
|
|
|
|
get_cell_offset eax,[i0]
|
|
|
|
|
;eax -> cell[i0]
|
|
|
|
|
mov ebx,dword[fx]
|
|
|
|
|
cmp dword[eax],ebx
|
|
|
|
|
jge @f
|
|
|
|
|
mov dl,1
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
mov ecx,dword[fy]
|
|
|
|
|
cmp dword[eax+4],ecx
|
|
|
|
|
jge @f
|
|
|
|
|
cmp dword[eax],ebx
|
|
|
|
|
jne @f
|
|
|
|
|
mov dl,1
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
xor dl,dl
|
|
|
|
|
.fun_e:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;output:
|
|
|
|
|
; dl
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_compare_cells_bm, i0:dword, i1:dword
|
|
|
|
|
push eax ebx ecx
|
|
|
|
|
get_cell_offset eax,[i0] ;eax -> cell[i0]
|
|
|
|
|
get_cell_offset ebx,[i1] ;ebx -> cell[i1]
|
|
|
|
|
mov ecx,dword[ebx] ;+0 = .x
|
|
|
|
|
cmp dword[eax],ecx
|
|
|
|
|
jle @f ;x0>x1
|
|
|
|
|
mov dl,1
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
jne @f ;x0==x1
|
|
|
|
|
mov ecx,dword[ebx+4] ;+4 = .y
|
|
|
|
|
cmp dword[eax+4],ecx
|
|
|
|
|
jle @f ;y0>y1
|
|
|
|
|
mov dl,1
|
|
|
|
|
jmp .fun_e
|
|
|
|
|
@@:
|
|
|
|
|
xor dl,dl
|
|
|
|
|
.fun_e:
|
|
|
|
|
pop ecx ebx eax
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD>⪠ <EFBFBD>祥<EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-<EFBFBD><EFBFBD> ᨣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
; <EFBFBD>㦭<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ନ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>। <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>奬<EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_reset_cells uses eax ebx ecx edi, pole:dword
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov eax,pole_index
|
|
|
|
|
cmp dword[eax],0
|
|
|
|
|
je .fun_e ;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>室
|
|
|
|
|
|
|
|
|
|
mov ecx,dword[eax]
|
|
|
|
|
cld
|
|
|
|
|
@@: ;横<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>ᥬ <EFBFBD>祩<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add eax,4
|
|
|
|
|
mov ebx,[eax]
|
|
|
|
|
imul ebx,sizeof.Cell
|
|
|
|
|
add ebx,pole_data
|
|
|
|
|
;and byte[ebx+offs_cell_liv],0xfe ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>襣<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
cmp byte[ebx+offs_cell_liv],2
|
|
|
|
|
je .no_clear
|
|
|
|
|
mov byte[ebx+offs_cell_liv],0
|
|
|
|
|
.no_clear:
|
|
|
|
|
loop @b
|
|
|
|
|
.fun_e:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc p_paint_elems uses eax esi
|
|
|
|
|
stdcall dword[tl_node_poi_get_info],0,tree1
|
|
|
|
|
pop esi
|
|
|
|
|
@@:
|
|
|
|
|
cmp esi,0
|
|
|
|
|
je @f
|
|
|
|
|
cmp word[esi],el_icon_elems ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>१ esi ⨯ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
jne .end_element
|
|
|
|
|
stdcall [tl_node_poi_get_data], esi, tree1
|
|
|
|
|
pop eax
|
|
|
|
|
stdcall el_draw, eax
|
|
|
|
|
.end_element:
|
|
|
|
|
cmp word[esi],el_icon_captions ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>१ esi ⨯ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
jne .end_caption
|
|
|
|
|
stdcall [tl_node_poi_get_data], esi, tree1
|
|
|
|
|
pop eax
|
|
|
|
|
stdcall capt_draw, eax
|
|
|
|
|
.end_caption:
|
|
|
|
|
stdcall dword[tl_node_poi_get_next_info],esi,tree1
|
|
|
|
|
pop esi ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>室<EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>饬<EFBFBD> 㧫<EFBFBD>
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc el_draw, h_elem:dword
|
|
|
|
|
pushad
|
2012-04-05 20:57:55 +02:00
|
|
|
|
|
2012-03-15 10:43:33 +01:00
|
|
|
|
mov edi,[h_elem]
|
|
|
|
|
mov eax,[edi] ;coord x
|
|
|
|
|
mov ebx,[edi+4] ;coord y
|
|
|
|
|
|
|
|
|
|
movzx edi,byte[edi+sp_offs_el_type]
|
|
|
|
|
imul edi,size_el_opt
|
|
|
|
|
add edi,el_opt_beg ;edi - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>⢠<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
movzx ecx,byte[edi+el_offs_box_x]
|
|
|
|
|
movzx edx,byte[edi+el_offs_box_y]
|
|
|
|
|
dec ecx
|
|
|
|
|
dec edx
|
|
|
|
|
|
|
|
|
|
push eax ebx
|
|
|
|
|
mov esi,[h_elem]
|
|
|
|
|
movzx esi,byte[esi+8]
|
|
|
|
|
push dword[edi+el_offs_col]
|
|
|
|
|
push ebx
|
|
|
|
|
push eax
|
|
|
|
|
stdcall move_rotate_n90, ecx,edx,esi
|
|
|
|
|
stdcall draw_scaled_rect, eax,ebx ;<EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
pop ebx eax
|
|
|
|
|
|
|
|
|
|
;*** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> ***
|
|
|
|
|
movzx esi,byte[zoom]
|
|
|
|
|
cmp esi,1
|
|
|
|
|
jne .end_m1
|
|
|
|
|
;*** <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> 1-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡<EFBFBD> ***
|
|
|
|
|
;<EFBFBD>室<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
mov esi,[h_elem]
|
|
|
|
|
stdcall el_get_leg_coords,esi,0 ;<EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ࠬ<EFBFBD><EFBFBD> 0-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add eax,[Cor_x]
|
|
|
|
|
add ebx,[Cor_y]
|
|
|
|
|
movzx esi,byte[esi+8]
|
|
|
|
|
stdcall move_rotate_n90, 1,0,esi
|
2012-03-21 16:37:28 +01:00
|
|
|
|
mov edx,1
|
2012-03-15 10:43:33 +01:00
|
|
|
|
@@:
|
|
|
|
|
stdcall [buf2d_set_pixel], buf_0, eax,ebx,dword[edi+el_offs_col]
|
2012-03-21 16:37:28 +01:00
|
|
|
|
mov ecx,[edi+el_offs_legs_inp]
|
|
|
|
|
movzx ecx,byte[ecx+edx]
|
2012-03-15 10:43:33 +01:00
|
|
|
|
cmp ecx,0
|
|
|
|
|
je @f
|
|
|
|
|
stdcall move_rotate_n90, 0,ecx,esi
|
|
|
|
|
inc edx
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD>室<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
mov esi,[h_elem]
|
|
|
|
|
stdcall el_get_leg_coords,esi,(1 shl 16) ;<EFBFBD><EFBFBD>⠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ࠬ<EFBFBD><EFBFBD> 0-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add eax,[Cor_x] ;<EFBFBD><EFBFBD><EFBFBD> ࠡ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> buf2d_line
|
|
|
|
|
add ebx,[Cor_y] ;<EFBFBD><EFBFBD><EFBFBD> ࠡ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> buf2d_line
|
|
|
|
|
movzx esi,byte[esi+8]
|
|
|
|
|
stdcall move_rotate_n90, -2,0,esi
|
|
|
|
|
mov edx,el_offs_legs_out
|
|
|
|
|
inc edx
|
|
|
|
|
@@:
|
|
|
|
|
push dword[edi+el_offs_col]
|
|
|
|
|
stdcall move_rotate_n90, 1,0,esi
|
|
|
|
|
push ebx
|
|
|
|
|
push eax
|
|
|
|
|
stdcall move_rotate_n90, -1,0,esi
|
|
|
|
|
;stdcall draw_scaled_rect, eax,ebx
|
|
|
|
|
stdcall [buf2d_line], buf_0, eax,ebx
|
|
|
|
|
movzx ecx,byte[edi+edx]
|
|
|
|
|
cmp ecx,0
|
|
|
|
|
je @f
|
|
|
|
|
stdcall move_rotate_n90, 0,ecx,esi
|
|
|
|
|
inc edx
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
jmp .end_mn
|
|
|
|
|
.end_m1:
|
|
|
|
|
;*** <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> n-<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡<EFBFBD> ***
|
|
|
|
|
;<EFBFBD>室<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
xor edx,edx
|
|
|
|
|
@@:
|
|
|
|
|
stdcall el_get_leg_coords,[h_elem],edx
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
or ecx,ebx
|
|
|
|
|
jz @f
|
|
|
|
|
mov ecx,[h_elem]
|
|
|
|
|
movzx ecx,byte[ecx+8]
|
|
|
|
|
stdcall move_rotate_n90, 1,0,ecx
|
|
|
|
|
add eax,[Cor_x]
|
|
|
|
|
add ebx,[Cor_y]
|
|
|
|
|
imul eax,esi
|
|
|
|
|
imul ebx,esi
|
|
|
|
|
stdcall [buf2d_filled_rect_by_size], buf_0, eax,ebx,esi,esi, dword[edi+el_offs_col]
|
|
|
|
|
inc edx
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD>室<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
mov edx,(1 shl 16)
|
|
|
|
|
@@:
|
|
|
|
|
stdcall el_get_leg_coords,[h_elem],edx
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
or ecx,ebx
|
|
|
|
|
jz @f
|
|
|
|
|
mov ecx,[h_elem]
|
|
|
|
|
movzx ecx,byte[ecx+8]
|
|
|
|
|
|
|
|
|
|
push dword[edi+el_offs_col]
|
|
|
|
|
stdcall move_rotate_n90, -2,0,ecx
|
|
|
|
|
push ebx
|
|
|
|
|
push eax
|
|
|
|
|
stdcall move_rotate_n90, 1,0,ecx
|
|
|
|
|
stdcall draw_scaled_rect, eax,ebx
|
|
|
|
|
|
|
|
|
|
inc edx
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
.end_mn:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2012-03-26 14:04:54 +02:00
|
|
|
|
;description:
|
|
|
|
|
;<EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᥩ
|
2012-03-15 10:43:33 +01:00
|
|
|
|
align 4
|
|
|
|
|
proc capt_draw uses eax ebx edi esi, h_capt:dword
|
|
|
|
|
mov edi,[h_capt]
|
|
|
|
|
mov eax,[edi] ;coord x
|
|
|
|
|
mov ebx,[edi+4] ;coord y
|
2012-03-26 14:04:54 +02:00
|
|
|
|
|
|
|
|
|
movzx esi,byte[zoom]
|
|
|
|
|
cmp esi,3
|
|
|
|
|
jl @f
|
|
|
|
|
;<EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠬ<EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮩ <EFBFBD><EFBFBD>窨
|
2012-04-05 20:57:55 +02:00
|
|
|
|
stdcall draw_point_border, eax,ebx, [color_captions]
|
2012-03-26 14:04:54 +02:00
|
|
|
|
@@:
|
|
|
|
|
|
2012-03-15 10:43:33 +01:00
|
|
|
|
add eax,[Cor_x]
|
|
|
|
|
add ebx,[Cor_y]
|
|
|
|
|
|
|
|
|
|
cmp esi,1
|
|
|
|
|
jle @f
|
|
|
|
|
imul eax,esi
|
|
|
|
|
imul ebx,esi
|
|
|
|
|
@@:
|
|
|
|
|
|
2012-03-26 14:04:54 +02:00
|
|
|
|
cmp esi,3
|
|
|
|
|
jl @f
|
|
|
|
|
;ᤢ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>⮬ ࠬ<EFBFBD><EFBFBD>
|
|
|
|
|
add eax,esi
|
|
|
|
|
inc eax
|
|
|
|
|
@@:
|
|
|
|
|
|
2012-03-15 10:43:33 +01:00
|
|
|
|
add edi,capt_offs ;edi - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD>⠬<EFBFBD>)
|
|
|
|
|
call str_next_val
|
|
|
|
|
call str_next_val
|
2012-04-05 20:57:55 +02:00
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_font,edi,eax,ebx,[color_captions] ;<EFBFBD><EFBFBD><EFBFBD>㥬 <EFBFBD><EFBFBD>ப<EFBFBD> <EFBFBD> ⥪<EFBFBD>⮬
|
2012-03-15 10:43:33 +01:00
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2012-03-26 14:04:54 +02:00
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ꥪ⮢ <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>㯭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡<EFBFBD><EFBFBD>
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祭<EFBFBD> <EFBFBD><EFBFBD>宦<EFBFBD> <EFBFBD><EFBFBD> draw_signal_rect
|
|
|
|
|
align 4
|
|
|
|
|
proc draw_point_border uses eax ebx edi, x0:dword,y0:dword, color:dword
|
|
|
|
|
movzx edi,byte[zoom]
|
|
|
|
|
mov ebx,[y0]
|
|
|
|
|
mov eax,[x0]
|
|
|
|
|
|
|
|
|
|
add ebx,[Cor_y]
|
|
|
|
|
imul ebx,edi
|
|
|
|
|
add eax,[Cor_x]
|
|
|
|
|
imul eax,edi
|
|
|
|
|
|
|
|
|
|
stdcall [buf2d_rect_by_size], buf_0, eax,ebx,edi,edi, dword[color]
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2012-03-15 10:43:33 +01:00
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㢥<EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>אַ㣮<EFBFBD>쭨<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>奬<EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc draw_scaled_rect uses eax ebx ecx edx edi, x0:dword,y0:dword,x1:dword,y1:dword, color:dword
|
|
|
|
|
movzx edi,byte[zoom]
|
|
|
|
|
mov edx,[y1]
|
|
|
|
|
mov ecx,[x1]
|
|
|
|
|
mov ebx,[y0]
|
|
|
|
|
mov eax,[x0]
|
|
|
|
|
|
|
|
|
|
cmp eax,ecx
|
|
|
|
|
jle @f
|
|
|
|
|
xchg eax,ecx
|
|
|
|
|
@@:
|
|
|
|
|
sub ecx,eax
|
|
|
|
|
cmp ebx,edx
|
|
|
|
|
jle @f
|
|
|
|
|
xchg ebx,edx
|
|
|
|
|
@@:
|
|
|
|
|
sub edx,ebx
|
|
|
|
|
|
|
|
|
|
inc ecx
|
|
|
|
|
inc edx
|
|
|
|
|
|
|
|
|
|
imul edx,edi
|
|
|
|
|
imul ecx,edi
|
|
|
|
|
add ebx,[Cor_y]
|
|
|
|
|
imul ebx,edi
|
|
|
|
|
add eax,[Cor_x]
|
|
|
|
|
imul eax,edi
|
|
|
|
|
|
|
|
|
|
stdcall [buf2d_filled_rect_by_size], buf_0, eax,ebx,ecx,edx, dword[color]
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_paint, pole:dword
|
|
|
|
|
pushad
|
|
|
|
|
|
|
|
|
|
;*** நᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠬ<EFBFBD><EFBFBD>
|
|
|
|
|
mov eax,[Cor_x]
|
|
|
|
|
mov ebx,[Cor_y]
|
|
|
|
|
mov ecx,[shem_w]
|
|
|
|
|
mov edx,[shem_h]
|
|
|
|
|
movzx esi,byte[zoom]
|
|
|
|
|
cmp esi,1
|
|
|
|
|
jle @f
|
|
|
|
|
imul eax,esi
|
|
|
|
|
imul ebx,esi
|
|
|
|
|
imul ecx,esi
|
|
|
|
|
imul edx,esi
|
|
|
|
|
@@:
|
|
|
|
|
dec eax
|
|
|
|
|
dec ebx
|
|
|
|
|
add ecx,2
|
|
|
|
|
add edx,2
|
2012-03-29 22:33:24 +02:00
|
|
|
|
stdcall [buf2d_rect_by_size], buf_0, eax,ebx, ecx,edx, [color_border]
|
2012-03-15 10:43:33 +01:00
|
|
|
|
|
|
|
|
|
;eax -> firstC
|
|
|
|
|
;ebx -> i
|
|
|
|
|
;ecx -> cell[pole_index[i]]
|
|
|
|
|
;edx -> color
|
|
|
|
|
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov eax,pole_index
|
|
|
|
|
cmp dword[eax],0
|
|
|
|
|
je .no_draw
|
|
|
|
|
|
|
|
|
|
mov eax,dword[eax]
|
|
|
|
|
mov ebx,1
|
|
|
|
|
|
|
|
|
|
;---
|
|
|
|
|
@@: ;while(i<pole_b_sort && Cor_x+cell[pole_index[i]].x<0)
|
|
|
|
|
cmp ebx,pole_b_sort
|
|
|
|
|
jge @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>室<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>砫<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 横<EFBFBD><EFBFBD>
|
|
|
|
|
mov ecx,ebx
|
|
|
|
|
shl ecx,2
|
|
|
|
|
add ecx,pole_index
|
|
|
|
|
get_cell_offset ecx,dword[ecx]
|
|
|
|
|
mov edx,dword[ecx] ;+0 = .x
|
|
|
|
|
add edx,dword[Cor_x]
|
|
|
|
|
cmp edx,0
|
|
|
|
|
jge @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>室<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>砫<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 横<EFBFBD><EFBFBD>
|
|
|
|
|
inc ebx ;i++; // <20><><EFBFBD> <20>ய<EFBFBD>᪠ <20>祥<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <><E1ABA5>
|
|
|
|
|
jmp @b
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
;eax -> pole_index[firstC]
|
|
|
|
|
;ebx -> pole_index[i]
|
|
|
|
|
;edi -> coord_x
|
|
|
|
|
;esi -> coord_y
|
|
|
|
|
shl eax,2
|
|
|
|
|
shl ebx,2
|
|
|
|
|
add eax,pole_index
|
|
|
|
|
add ebx,pole_index
|
|
|
|
|
|
|
|
|
|
cmp byte[zoom],2
|
|
|
|
|
jge .zoom2
|
|
|
|
|
@@: ;for(;i<=fristC;i++){
|
|
|
|
|
get_cell_offset ecx,dword[ebx]
|
|
|
|
|
;...
|
|
|
|
|
mov edi,dword[Cor_x]
|
|
|
|
|
add edi,dword[ecx] ;+0 = .x
|
|
|
|
|
mov esi,dword[Cor_y]
|
|
|
|
|
add esi,dword[ecx+4] ;+4 = .y
|
|
|
|
|
movzx edx,byte[ecx+offs_cell_liv]
|
|
|
|
|
and edx,3 ;<EFBFBD><EFBFBD>࠭<EFBFBD>祭<EFBFBD><EFBFBD>
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,shem_colors
|
|
|
|
|
stdcall [buf2d_set_pixel], buf_0, edi, esi, [edx]
|
|
|
|
|
;...
|
|
|
|
|
add ebx,4
|
|
|
|
|
cmp ebx,eax
|
|
|
|
|
jle @b
|
|
|
|
|
|
|
|
|
|
jmp .no_draw
|
|
|
|
|
.zoom2:
|
|
|
|
|
|
|
|
|
|
@@: ;for(;i<=fristC;i++){
|
|
|
|
|
get_cell_offset ecx,dword[ebx]
|
|
|
|
|
|
|
|
|
|
movzx edx,byte[zoom] ;edx <EFBFBD>ᯮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᥭ<EFBFBD><EFBFBD> zoom <EFBFBD> 4 <EFBFBD><EFBFBD><EFBFBD>⭮<EFBFBD> <EFBFBD><EFBFBD>
|
|
|
|
|
mov edi,dword[ecx] ;+0 = .x
|
|
|
|
|
add edi,dword[Cor_x]
|
|
|
|
|
imul edi,edx
|
|
|
|
|
mov esi,dword[ecx+4] ;+4 = .y
|
|
|
|
|
add esi,dword[Cor_y]
|
|
|
|
|
imul esi,edx
|
|
|
|
|
|
|
|
|
|
movzx edx,byte[ecx+offs_cell_liv]
|
|
|
|
|
and edx,3 ;<EFBFBD><EFBFBD>࠭<EFBFBD>祭<EFBFBD><EFBFBD>
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,shem_colors
|
|
|
|
|
|
|
|
|
|
movzx ecx,byte[zoom]
|
|
|
|
|
;;;dec ecx
|
|
|
|
|
stdcall [buf2d_filled_rect_by_size], buf_0, edi, esi, ecx, ecx, [edx]
|
|
|
|
|
add ebx,4
|
|
|
|
|
cmp ebx,eax
|
|
|
|
|
jle @b
|
|
|
|
|
|
|
|
|
|
.no_draw:
|
|
|
|
|
popad
|
|
|
|
|
call p_paint_elems
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>㦭<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ண<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>᪠
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_sort uses eax edi, pole:dword
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov eax,pole_index
|
|
|
|
|
mov eax,dword[eax] ;firstC -> eax
|
|
|
|
|
stdcall pole_fl_sort, pole_index,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㥬 <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祩<EFBFBD><EFBFBD>
|
|
|
|
|
mov pole_b_sort,eax ;<EFBFBD>⠢<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD> ࠢ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>祥<EFBFBD>
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[1..n] <EFBFBD><EFBFBD>⮤<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> a[0] <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_fl_sort uses eax ecx edx edi esi, a:dword, n:dword
|
|
|
|
|
mov ecx,dword[a]
|
|
|
|
|
;<EFBFBD><EFBFBD>ନ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>室<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>筮 㯮<EFBFBD>冷祭<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ॢ<EFBFBD>
|
|
|
|
|
mov eax,dword[n]
|
|
|
|
|
shr eax,1
|
|
|
|
|
@@: ;for(i=n>>1; i>=2; i--)
|
|
|
|
|
stdcall pole_fl_surface, ecx,eax,[n] ;(a,i,n)
|
|
|
|
|
dec eax
|
|
|
|
|
cmp eax,2
|
|
|
|
|
jge @b
|
|
|
|
|
;<EFBFBD>믮<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>楤<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ᯫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ॢ<EFBFBD>
|
|
|
|
|
mov eax,dword[n]
|
|
|
|
|
@@: ;for(i=n; i>=2; i--){
|
|
|
|
|
stdcall pole_fl_surface, ecx,1,eax ;(a,1,i)
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᨬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᯨ᪠
|
|
|
|
|
mov edi,eax
|
|
|
|
|
shl edi,2
|
|
|
|
|
add edi,ecx ;edi -> &a[i]
|
|
|
|
|
mov esi,dword[edi] ;w=a[i];
|
|
|
|
|
mov edx,dword[ecx+4]
|
|
|
|
|
mov dword[edi],edx ;a[i]=a[1];
|
|
|
|
|
mov dword[ecx+4],esi ;a[1]=w;
|
|
|
|
|
|
|
|
|
|
dec eax
|
|
|
|
|
cmp eax,2
|
|
|
|
|
jge @b
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD>楤<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ᯫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ॢ<EFBFBD> a[1..k]
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_fl_surface, a:dword, i:dword, k:dword
|
|
|
|
|
locals
|
|
|
|
|
copy dd ?
|
|
|
|
|
endl
|
|
|
|
|
pushad
|
|
|
|
|
;edx -> ...
|
|
|
|
|
;edi -> m
|
|
|
|
|
;esi -> j
|
|
|
|
|
mov eax,dword[a]
|
|
|
|
|
mov ebx,dword[i]
|
|
|
|
|
mov ecx,dword[k]
|
|
|
|
|
|
|
|
|
|
mov edx,ebx
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,eax
|
|
|
|
|
mov edx,dword[edx]
|
|
|
|
|
mov dword[copy],edx ;copy=a[i];
|
|
|
|
|
mov edi,ebx
|
|
|
|
|
shl edi,1 ;m=i<<1;
|
|
|
|
|
.cycle_b: ;while (m<=k) {
|
|
|
|
|
cmp edi,ecx
|
|
|
|
|
jg .cycle_e
|
|
|
|
|
jne @f ;if (m==k) j=m;
|
|
|
|
|
mov esi,edi
|
|
|
|
|
jmp .else_e
|
|
|
|
|
@@: ;else if (pole_compare_cells_bm(a[m],a[m+1])) j=m;
|
|
|
|
|
mov edx,edi
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,eax
|
|
|
|
|
stdcall pole_compare_cells_bm, dword[edx],dword[edx+4]
|
|
|
|
|
cmp dl,0
|
|
|
|
|
je @f
|
|
|
|
|
mov esi,edi
|
|
|
|
|
jmp .else_e
|
|
|
|
|
@@: ;else j=m+1;
|
|
|
|
|
mov esi,edi
|
|
|
|
|
inc esi
|
|
|
|
|
.else_e:
|
|
|
|
|
|
|
|
|
|
;if (pole_compare_cells_bm(a[j],copy)) {
|
|
|
|
|
mov edx,esi
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,eax
|
|
|
|
|
stdcall pole_compare_cells_bm, dword[edx],dword[copy]
|
|
|
|
|
cmp dl,0
|
|
|
|
|
je .cycle_e ;} else break; //<2F><>室 <20><> 横<><E6A8AA>
|
|
|
|
|
|
|
|
|
|
mov edx,esi
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,eax
|
|
|
|
|
push dword[edx] ;push a[j];
|
|
|
|
|
mov edx,ebx
|
|
|
|
|
shl edx,2
|
|
|
|
|
add edx,eax
|
|
|
|
|
pop dword[edx] ;a[i]=a[j];
|
|
|
|
|
mov ebx,esi ;i=j;
|
|
|
|
|
mov edi,ebx
|
|
|
|
|
shl edi,1 ;m=i<<1;
|
|
|
|
|
|
|
|
|
|
jmp .cycle_b
|
|
|
|
|
.cycle_e:
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ॣ<EFBFBD><EFBFBD><EFBFBD> 㦥 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>. <EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>㭪樨
|
|
|
|
|
shl ebx,2
|
|
|
|
|
add eax,ebx
|
|
|
|
|
mov edx,dword[copy]
|
|
|
|
|
mov dword[eax],edx ;a[i]=copy;
|
|
|
|
|
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc pole_draw_pok uses eax ebx ecx edx edi esi, pole:dword
|
|
|
|
|
;mov edi,dword[pole]
|
|
|
|
|
|
|
|
|
|
mov eax,4 ;<EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⥪<EFBFBD><EFBFBD><EFBFBD>
|
2012-03-23 18:24:30 +01:00
|
|
|
|
mov ebx,400*65536+5
|
2012-03-15 10:43:33 +01:00
|
|
|
|
mov ecx,[sc.work_text]
|
|
|
|
|
or ecx,0x80000000 ;or (1 shl 30)
|
|
|
|
|
mov edx,txt_zoom
|
|
|
|
|
;mov edi,[sc.work]
|
|
|
|
|
int 0x40
|
|
|
|
|
|
|
|
|
|
add bx,9
|
|
|
|
|
mov edx,txt_osob
|
|
|
|
|
int 0x40
|
|
|
|
|
|
|
|
|
|
add bx,9
|
|
|
|
|
mov edx,txt_info
|
|
|
|
|
int 0x40
|
|
|
|
|
|
|
|
|
|
mov eax,47
|
|
|
|
|
movzx ecx,byte[zoom]
|
|
|
|
|
mov ebx,(2 shl 16)
|
2012-03-23 18:24:30 +01:00
|
|
|
|
mov edx,(400+6*9)*65536+5
|
2012-03-15 10:43:33 +01:00
|
|
|
|
mov esi,[sc.work_button_text]
|
|
|
|
|
or esi,(1 shl 30)
|
|
|
|
|
mov edi,[sc.work_button]
|
|
|
|
|
int 0x40 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡
|
|
|
|
|
|
|
|
|
|
mov edi,dword[pole]
|
|
|
|
|
mov ecx,pole_index
|
|
|
|
|
mov ecx,[ecx]
|
|
|
|
|
mov edi,[sc.work_button]
|
|
|
|
|
mov ebx,(5 shl 16)
|
|
|
|
|
add edx,(6*0)*65536+9
|
|
|
|
|
int 0x40 ;<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
but_zoom_p:
|
|
|
|
|
cmp byte[zoom],16
|
|
|
|
|
jge @f
|
|
|
|
|
pushad
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᯥ<EFBFBD><EFBFBD><EFBFBD> 業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> 㢥<EFBFBD><EFBFBD>祭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡<EFBFBD>
|
|
|
|
|
movzx ecx,byte[zoom]
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov eax,dword[buf_0.w]
|
|
|
|
|
shr eax,1 ;<EFBFBD> eax <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ਭ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
mov ebx,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> १<EFBFBD>ࢭ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eax
|
|
|
|
|
div ecx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eax <EFBFBD><EFBFBD> ⥪<EFBFBD>騩 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡
|
|
|
|
|
xchg eax,ebx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
inc ecx
|
|
|
|
|
div ecx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eax <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡
|
|
|
|
|
sub ebx,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᯥ<EFBFBD><EFBFBD><EFBFBD> 業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sub dword[Cor_x],ebx ;ᤢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>७<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> x
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cl,byte[zoom]
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov eax,dword[buf_0.h]
|
|
|
|
|
shr eax,1
|
|
|
|
|
mov ebx,eax
|
|
|
|
|
div ecx
|
|
|
|
|
xchg eax,ebx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
inc ecx
|
|
|
|
|
div ecx
|
|
|
|
|
sub ebx,eax
|
|
|
|
|
sub dword[Cor_y],ebx ;ᤢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>७<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> y
|
|
|
|
|
|
|
|
|
|
inc byte[zoom]
|
|
|
|
|
stdcall pole_draw_pok, pole
|
|
|
|
|
popad
|
|
|
|
|
|
|
|
|
|
.buf_clear:
|
|
|
|
|
call redraw_pole
|
|
|
|
|
@@:
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
but_zoom_m:
|
|
|
|
|
cmp byte[zoom],1
|
|
|
|
|
jle @f
|
|
|
|
|
pushad
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᯥ<EFBFBD><EFBFBD><EFBFBD> 業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> 㬥<EFBFBD><EFBFBD>襭<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡<EFBFBD>
|
|
|
|
|
movzx ecx,byte[zoom]
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov eax,dword[buf_0.w]
|
|
|
|
|
shr eax,1 ;<EFBFBD> eax <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ਭ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
mov ebx,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> १<EFBFBD>ࢭ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eax
|
|
|
|
|
div ecx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eax <EFBFBD><EFBFBD> ⥪<EFBFBD>騩 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡
|
|
|
|
|
xchg eax,ebx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
dec ecx
|
|
|
|
|
div ecx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> eax <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡
|
|
|
|
|
sub ebx,eax ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᤢ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ᯥ<EFBFBD><EFBFBD><EFBFBD> 業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sub dword[Cor_x],ebx ;ᤢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>७<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> x
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cl,byte[zoom]
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov eax,dword[buf_0.h]
|
|
|
|
|
shr eax,1
|
|
|
|
|
mov ebx,eax
|
|
|
|
|
div ecx
|
|
|
|
|
xchg eax,ebx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
dec ecx
|
|
|
|
|
div ecx
|
|
|
|
|
sub ebx,eax
|
|
|
|
|
sub dword[Cor_y],ebx ;ᤢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>७<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> y
|
|
|
|
|
|
|
|
|
|
dec byte[zoom]
|
|
|
|
|
stdcall pole_draw_pok, pole
|
|
|
|
|
popad
|
|
|
|
|
|
|
|
|
|
.buf_clear:
|
|
|
|
|
call redraw_pole
|
|
|
|
|
@@:
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>奬<EFBFBD> <EFBFBD><EFBFBD> 業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>࠭<EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc but_center uses eax ebx ecx edx
|
|
|
|
|
movzx ecx,byte[zoom]
|
|
|
|
|
cmp ecx,1
|
|
|
|
|
jle .end_m_1
|
|
|
|
|
mov eax,[buf_0.w]
|
|
|
|
|
mov ebx,[shem_w]
|
|
|
|
|
imul ebx,ecx
|
|
|
|
|
|
|
|
|
|
sub eax,ebx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
shl ecx,1
|
|
|
|
|
cmp eax,0
|
|
|
|
|
jge @f
|
|
|
|
|
neg eax
|
|
|
|
|
inc eax
|
|
|
|
|
div ecx
|
|
|
|
|
neg eax
|
|
|
|
|
inc eax
|
|
|
|
|
jmp .set_x
|
|
|
|
|
@@:
|
|
|
|
|
div ecx
|
|
|
|
|
.set_x:
|
|
|
|
|
mov [Cor_x],eax
|
|
|
|
|
mov eax,[buf_0.h]
|
|
|
|
|
mov ebx,[shem_h]
|
|
|
|
|
shr ecx,1
|
|
|
|
|
imul ebx,ecx
|
|
|
|
|
sub eax,ebx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
shl ecx,1
|
|
|
|
|
cmp eax,0
|
|
|
|
|
jge @f
|
|
|
|
|
neg eax
|
|
|
|
|
inc eax
|
|
|
|
|
div ecx
|
|
|
|
|
neg eax
|
|
|
|
|
inc eax
|
|
|
|
|
jmp .set_y
|
|
|
|
|
@@:
|
|
|
|
|
div ecx
|
|
|
|
|
.set_y:
|
|
|
|
|
mov [Cor_y],eax
|
|
|
|
|
jmp .end_m_n
|
|
|
|
|
.end_m_1:
|
|
|
|
|
mov eax,[buf_0.w]
|
|
|
|
|
sub eax,[shem_w]
|
|
|
|
|
shr eax,1
|
|
|
|
|
bt eax,30
|
|
|
|
|
jnc @f
|
|
|
|
|
bts eax,31
|
|
|
|
|
@@:
|
|
|
|
|
mov [Cor_x],eax
|
|
|
|
|
mov eax,[buf_0.h]
|
|
|
|
|
sub eax,[shem_h]
|
|
|
|
|
shr eax,1
|
|
|
|
|
bt eax,30
|
|
|
|
|
jnc @f
|
|
|
|
|
bts eax,31
|
|
|
|
|
@@:
|
|
|
|
|
mov [Cor_y],eax
|
|
|
|
|
.end_m_n:
|
|
|
|
|
call redraw_pole
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
but_pole_up:
|
|
|
|
|
push eax ecx edx
|
|
|
|
|
mov eax,dword[buf_0.h]
|
|
|
|
|
shr eax,2
|
|
|
|
|
movzx ecx,byte[zoom]
|
|
|
|
|
cmp cx,2
|
|
|
|
|
jl @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> zoom
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ecx
|
|
|
|
|
@@:
|
|
|
|
|
add dword[Cor_y],eax
|
|
|
|
|
pop edx ecx eax
|
|
|
|
|
call redraw_pole
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
but_pole_dn:
|
|
|
|
|
push eax ecx edx
|
|
|
|
|
mov eax,dword[buf_0.h]
|
|
|
|
|
shr eax,2
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cl,byte[zoom]
|
|
|
|
|
cmp cx,2
|
|
|
|
|
jl @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> zoom
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ecx
|
|
|
|
|
@@:
|
|
|
|
|
sub dword[Cor_y],eax
|
|
|
|
|
pop edx ecx eax
|
|
|
|
|
call redraw_pole
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
but_pole_left:
|
|
|
|
|
push eax ecx edx
|
|
|
|
|
mov eax,dword[buf_0.w]
|
|
|
|
|
shr eax,2
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cl,byte[zoom]
|
|
|
|
|
cmp cx,2
|
|
|
|
|
jl @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> zoom
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ecx
|
|
|
|
|
@@:
|
|
|
|
|
add dword[Cor_x],eax
|
|
|
|
|
pop edx ecx eax
|
|
|
|
|
call redraw_pole
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
but_pole_right:
|
|
|
|
|
push eax ecx edx
|
|
|
|
|
mov eax,dword[buf_0.w]
|
|
|
|
|
shr eax,2
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cl,byte[zoom]
|
|
|
|
|
cmp cx,2
|
|
|
|
|
jl @f ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>稭<EFBFBD> zoom
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ecx
|
|
|
|
|
@@:
|
|
|
|
|
sub dword[Cor_x],eax
|
|
|
|
|
pop edx ecx eax
|
|
|
|
|
call redraw_pole
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
;output:
|
|
|
|
|
; edx - count created points
|
|
|
|
|
align 4
|
|
|
|
|
proc shem_create_line uses eax ebx ecx edi, x:dword, y:dword, opt:dword
|
|
|
|
|
mov edi,pole
|
|
|
|
|
xor edx,edx
|
|
|
|
|
|
|
|
|
|
mov ebx,[x]
|
|
|
|
|
mov ecx,[y]
|
|
|
|
|
bt dword[opt],0
|
|
|
|
|
jnc @f
|
|
|
|
|
.line_lr:
|
|
|
|
|
inc ebx
|
|
|
|
|
cmp ebx,[shem_w]
|
|
|
|
|
jge @f
|
|
|
|
|
stdcall pole_cell_find, pole,ebx,ecx
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je .u0
|
|
|
|
|
imul eax,sizeof.Cell
|
|
|
|
|
add eax,pole_data
|
|
|
|
|
cmp byte[eax+offs_cell_liv],1
|
|
|
|
|
jne @f
|
|
|
|
|
.u0:
|
|
|
|
|
stdcall pole_cell_creat, pole,ebx,ecx,1
|
|
|
|
|
inc edx
|
|
|
|
|
jmp .line_lr
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
mov ebx,[x]
|
|
|
|
|
;mov ecx,[y]
|
|
|
|
|
bt dword[opt],2
|
|
|
|
|
jnc @f
|
|
|
|
|
.line_rl:
|
|
|
|
|
dec ebx
|
|
|
|
|
cmp ebx,0
|
|
|
|
|
jl @f
|
|
|
|
|
stdcall pole_cell_find, pole,ebx,ecx
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je .u1
|
|
|
|
|
imul eax,sizeof.Cell
|
|
|
|
|
add eax,pole_data
|
|
|
|
|
cmp byte[eax+offs_cell_liv],1
|
|
|
|
|
jne @f
|
|
|
|
|
.u1:
|
|
|
|
|
stdcall pole_cell_creat, pole,ebx,ecx,1
|
|
|
|
|
inc edx
|
|
|
|
|
jmp .line_rl
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
mov ebx,[x]
|
|
|
|
|
mov ecx,[y]
|
|
|
|
|
bt dword[opt],3
|
|
|
|
|
jnc @f
|
|
|
|
|
.line_du:
|
|
|
|
|
dec ecx
|
|
|
|
|
cmp ecx,0
|
|
|
|
|
jl @f
|
|
|
|
|
stdcall pole_cell_find, pole,ebx,ecx
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je .u2
|
|
|
|
|
imul eax,sizeof.Cell
|
|
|
|
|
add eax,pole_data
|
|
|
|
|
cmp byte[eax+offs_cell_liv],1
|
|
|
|
|
jne @f
|
|
|
|
|
.u2:
|
|
|
|
|
stdcall pole_cell_creat, pole,ebx,ecx,1
|
|
|
|
|
inc edx
|
|
|
|
|
jmp .line_du
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
;mov ebx,[x]
|
|
|
|
|
mov ecx,[y]
|
|
|
|
|
bt dword[opt],1
|
|
|
|
|
jnc @f
|
|
|
|
|
.line_ud:
|
|
|
|
|
inc ecx
|
|
|
|
|
cmp ecx,[shem_h]
|
|
|
|
|
jge @f
|
|
|
|
|
stdcall pole_cell_find, pole,ebx,ecx
|
|
|
|
|
cmp eax,0
|
|
|
|
|
je .u3
|
|
|
|
|
imul eax,sizeof.Cell
|
|
|
|
|
add eax,pole_data
|
|
|
|
|
cmp byte[eax+offs_cell_liv],1
|
|
|
|
|
jne @f
|
|
|
|
|
.u3:
|
|
|
|
|
stdcall pole_cell_creat, pole,ebx,ecx,1
|
|
|
|
|
inc edx
|
|
|
|
|
jmp .line_ud
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
redraw_pole:
|
|
|
|
|
stdcall [buf2d_clear], buf_0, [buf_0.color]
|
|
|
|
|
stdcall pole_paint, pole
|
|
|
|
|
stdcall [buf2d_draw], buf_0
|
|
|
|
|
ret
|