use32
	org 0x0
	db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
	dd 0x1
	dd start
	dd i_end ;à §¬¥à ¯à¨«®¦¥­¨ï
	dd mem
	dd stacktop
	dd 0x0
	dd sys_path

include '../../../macros.inc'
include '../../../proc32.inc'
include '../../../develop/libraries/box_lib/load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac' ;¬ ªà®áë ¤«ï § ¤ ­¨ï í«¥¬¥­â®¢ box_lib
include 'mem.inc'
include 'dll.inc'

@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load

;ä« £¨, ¤«ï ä㭪樨 ®¡à¥§ ­¨ï ¡ãä¥à 
BUF2D_OPT_CROP_TOP equ 1 ;®¡à¥§ª  ᢥàåã
BUF2D_OPT_CROP_LEFT equ 2 ;®¡à¥§ª  á«¥¢ 
BUF2D_OPT_CROP_BOTTOM equ 4 ;®¡à¥§ª  á­¨§ã
BUF2D_OPT_CROP_RIGHT equ 8 ;®¡à¥§ª  á¯à ¢ 
BUF2D_BIT_OPT_CROP_TOP equ 0
BUF2D_BIT_OPT_CROP_LEFT equ 1
BUF2D_BIT_OPT_CROP_BOTTOM equ 2
BUF2D_BIT_OPT_CROP_RIGHT equ 3

BUF_STRUCT_SIZE equ 21
buf2d_data equ dword[edi] ;¤ ­­ë¥ ¡ãä¥à  ¨§®¡à ¦¥­¨ï
buf2d_w equ dword[edi+8] ;è¨à¨­  ¡ãä¥à 
buf2d_h equ dword[edi+12] ;¢ëá®â  ¡ãä¥à 
buf2d_l equ word[edi+4] ;®âáâ㯠᫥¢ 
buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã
buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢  ¨ á¯à ¢  ¤«ï ¡ãä¥à 
buf2d_color equ dword[edi+16] ;梥â ä®­  ¡ãä¥à 
buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥­¨ï

struct FileInfoBlock
	Function dd ?
	Position dd ?
	Flags	 dd ?
	Count	 dd ?
	Buffer	 dd ?
		db ?
	FileName dd ?
ends

displ_w dd ? ;è¨à¨­  ¯®«ï
displ_h dd ? ;¢ëá®â  ¯®«ï
displ_bytes dd ? ;à §¬¥à 1-£® ä ©«  á ¨§®¡à ¦¥­¨¥¬
offs_shadow_x dd ? ;ᤢ¨£ ⥭¥© ¯® ®á¨ 'x'
offs_shadow_y dd ? ;ᤢ¨£ ⥭¥© ¯® ®á¨ 'y'

IMAGE_FONT_SIZE equ 128*144*3

BUT1_T equ 10 ;®âáâ㯠ᢥàåã
BUT1_L equ 15 ;®âáâ㯠᫥¢ 
BUT1_W equ 50 ;è¨à¨­ 
BUT1_H equ 20 ;¢ëá®â 
BUT1_NEXT_TOP equ (BUT1_T+BUT1_H)*65536

game_select_mode db 1 ;०¨¬ ¢ë¡®à  ¨£àë

FILE_NAME_MAX equ 20 ;¬ ªá¨¬ «ì­ ï ¤«¨­­  ¨¬¥­¨ ä ©«  (¡¥§ ¯ ¯®ª, ®â­®á¨â¥«ì­® ⥪ã饩)
;§­ ç¥­¨ï ¨¬¥­ ¯® 㬮«ç ­¨î
ini_def_decorat_file db 'curici.png',0
ini_def_unit_file db 'wolf.png',0
ini_def_objects_file db 'eggs.png',0
ini_def_lost_file db 'chi.png',0
;¨¬¥­  ä ©«®¢
fn_icon0 rb FILE_NAME_MAX ;¨¬ï ä ©«  á ¤¥ª®à æ¨ï¬¨
fn_icon1 rb FILE_NAME_MAX ;¨¬ï ä ©«  á ¢®«ª®¬ ¨ § ©æ¥¬
fn_icon2 rb FILE_NAME_MAX ;¨¬ï ä ©«  á ï©æ ¬¨
fn_icon3 rb FILE_NAME_MAX ;¨¬ï ä ©«  á 樯«ïâ ¬¨
fn_font db 'font8x9.bmp',0

fn_icon_tl_sys db 'tl_sys_16.png',0
TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;à §¬¥à bmp ä ©«  á á¨á⥬­ë¬¨ ¨ª®­ª ¬¨

ini_m_name db 'main.ini',0
key_count db 'count',0
key_game db 'g'
	key_game_ind db 0,0,0

ini_name rb FILE_NAME_MAX ;¨¬ï ini ä ©«  c ¢ë¡à ­­®© ¨£à®©
ini_sec_files db 'Files',0
key_file_decorat db 'file_decorat',0
key_file_unit db 'file_unit',0
key_file_objects db 'file_objects',0
key_file_lost db 'file_lost',0
key_displ_w db 'displ_w',0
key_displ_h db 'displ_h',0
key_shadow_x db 'offs_shadow_x',0
key_shadow_y db 'offs_shadow_y',0

ini_sec_game db 'Game',0
key_delay_a db 'delay_a',0
key_delay_b db 'delay_b',0
key_delay_min db 'delay_min',0

ini_sec_color db 'Colors',0
;ª«îç¨ ¤«ï áç¨â뢠­¨ï 梥⮢ ¨§ *.ini ä ©« 
key_color_fon db 'background',0
key_color_shadows db 'shadows',0
key_color_egg db 'objects',0
key_color_chick db 'lost',0
key_color_decorat: db 'dec'
	.ind: db '?',0
key_color_unit db 'unit',0

;æ¢¥â  ¢ ¨£à¥
color_fon dd ? ;梥â ä®­ 
color_shadows dd ? ;梥â ⥭¥©
color_wolf dd ? ;梥⠢®«ª  ¨ § ©æ 
color_egg dd ? ;梥â ï©æ 
color_chick dd ? ;梥â 樯«¥­ª 
color_decorat dd ?,?,? ;æ¢¥â  ¤¥ª®à æ¨© (ªãà¨æë, ¯¥à¨« , ...)

;æ¢¥â  ¨­â¥à䥩á 
color_but_sm dd 0x808080 ;梥⠬ «¥­ìª¨å ª­®¯®ª
color_but_te dd 0xffffff ;梥â ⥪áâ  ­  ª­®¯ª å

macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
	copy_path path,sys_path,file_name,0x0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©

	stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
	mov [buf],eax

	mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
	mov [run_file_70.Function], 0
	mov [run_file_70.Position], 0
	mov [run_file_70.Flags], 0
	mov [run_file_70.Count], dword size
	m2m [run_file_70.Buffer], [buf]
	mov byte[run_file_70+20], 0
	mov [run_file_70.FileName], file_name
	mov ebx,run_file_70
	int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
	cmp ebx,0xffffffff
	je @f
		;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
		stdcall dword[img_decode], dword[buf],ebx,0
		mov dword[image_data],eax
		;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
		;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à image_data
		stdcall dword[img_destroy], dword[image_data]
	@@:
}

;¤ ­­ë¥ ¨£àë
bit_zaac equ 2 ;¡¨â § ©æ 
val_zaac equ 4 ;æ¨äà  ®â¢¥ç îé ï §  ¡¨â § ©æ 
bit_mig equ 3 ;¡¨â ¬¨£ ­¨ï
val_mig equ 8 ;æ¨äà  ®â¢¥ç îé ï §  ¡¨â ¬¨£ ­¨ï
mask_lot_lu    equ 1b ;¬ áª  ¤«ï «¥¢®£® ¢¥àå­¥£® «®âª 
mask_lot_ld    equ 100000b ;¬ áª  ¤«ï «¥¢®£® ­¨¦­¥£® «®âª 
mask_lot_ru    equ 10000000000b ;¬ áª  ¤«ï ¯à ¢®£® ¢¥àå­¥£® «®âª 
mask_lot_rd    equ 1000000000000000b ;¬ áª  ¤«ï ¯à ¢®£® ­¨¦­¥£® «®âª 
mask_clear_all equ 11111011111011110111101111011110b ;¬ áª  ¤«ï ®ç¨á⪨ ¯ ¤ îé¨å ï¨æ ¨ ¯à¨¡¥¦ ¢è¨å 樯«ïâ
mask_move_eggs equ 11111111111111111111b ;¬ áª  ¤¢¨¦ãé¨åáï ï¨æ
mask_fail_eggs equ 100001000010000100000b ;¬ áª  ¯ ¤ îé¨å ï¨æ
mask_chi_left  equ 11111000000000000000000000b ;¬ áª  «¥¢ëå 樯«ïâ
mask_chi_right equ 11111000000000000000000000000000b ;¬ áª  ¯à ¢ëå 樯«ïâ
mask_chi_cr_l  equ 1000000000000000000000b ;¬ áª  ¤«ï ᮧ¤ ­¨ï «¥¢®£®
mask_chi_cr_r  equ 1000000000000000000000000000b ;¬ áª  ¤«ï ᮧ¤ ­¨ï ¯à ¢®£®
bit_chi_left  equ 21 ;1-© ¡¨â ª®â®àë© ®â¢¥ç ¥â §  ¡¥£ã饣® á«¥¢ 
bit_chi_right equ 27 ;1-© ¡¨â ª®â®àë© ®â¢¥ç ¥â §  ¡¥£ã饣® ¯à ¢ 
val_zaac_time_y equ 5 ;ª®««¨ç¥á⢮ ⠪⮢, ª®â®à®¥ ®¡ï§ â¥«ì­® ¤®«¦¥­ ¯à®¢¨á¥âì § ïæ
val_zaac_time_n equ 7 ;ª®««¨ç¥á⢮ ⠪⮢, ª®â®à®¥ ®¡ï§ â¥«ì­® ¤®«¦¥­ ¡ëâì á¯àïâ ­­ë¬ § ïæ

txt_game_a db 'ˆ£à  €',0
txt_game_b db 'ˆ£à  ',0

zaac_status db 0 ;ç¨á«® ⠪⮢, ª®â®à®¥ § ïæ ­¥ ¤®«¦¥­ ¬¥­ïâì ᢮¥ ¯®«®¦¥­¨¥
pos_wolf db 0 ;¯®§¨æ¨ï ¢®«ª  0-© ¡¨â á«¥¢ /á¯à ¢ , 1-© ¡¨â ᢥàåã/¢­¨§
;rb 1
pos_eggs dd 0 ;¯®§¨æ¨¨ à á¯®«®¦¥­¨ï ï¨æ ¨ 樯«ïâ
eggs_count dw 0 ;ª®««¨ç¥á⢮ ¯®©¬ ­ëå ï¨æ
game_text db 'ˆ£à  _',13
some_text db '0'
	rb 8 ;⥪áâ á ç¨á«®¬ ¯®©¬ ­­ëå ï¨æ
count_last db 0 ;áç¥â稪 ¯à®¯ã饭­ëå ï¨æ
game_spd dd 0 ;§ ¤¥à¦ª  ¨£àë
game_delay_a dd ? ;¯¥à¢®­ ç «ì­ ï § ¤¥à¦ª  ¤«ï ¨£àë €
game_delay_b dd ? ;¯¥à¢®­ ç «ì­ ï § ¤¥à¦ª  ¤«ï ¨£àë 
game_delay_min dd ? ;¬¨­¨¬ «ì­ ï § ¤¥à¦ª 

;¤«ï £¥­¥à æ¨¨ á«ãç ©­ëå ç¨á¥«
rand_x dd 0

align 4
rand_next:
;x(k+1) = (a*x(k)+c) mod m
; a=22695477, c=1, m=2^32
push eax
	mov eax,dword[rand_x]
	imul eax,22695477
	inc eax
	mov dword[rand_x],eax
pop eax
	ret

;ᮧ¤ ¥¬ ¯à®§à ç­ë¥ ¡ãä¥à  ¯® 8 ¡¨â (âà ä à¥âë), ¤«ï à¨á®¢ ­¨ï
;£¤¥ buf - ¡ãä¥à ­  ®á­®¢¥ ª®â®à®£® ¡ã¤¥â ᮧ¤ ­ âà ä à¥â
;ä®­®¢ë© 梥⠡ãä¥à  ¤®«¦¥­ ¡ëâì 0xffffff, ¨­ ç¥ ­¥ ¯à®¨§®©¤¥â ®¡à¥§ª 
;¯® ä®­®¢®¬ã 梥âã ¨ âà ä à¥â ¡ã¤¥â § ­¨¬ â 쬭®£® ¬¥áâ  ¢ ¯ ¬ïâ¨
align 4
proc CreateTrapharetBuffer, buf:dword, img_data:dword
	push eax edi
	mov edi,dword[buf]

	;§ ¯®«­¥­¨¥ ¤ ­­ëå ¡ãä¥à 
	mov buf2d_size_lt,0
	mov eax,dword[displ_w]
	mov buf2d_w,eax
	mov eax,dword[displ_h]
	mov buf2d_h,eax
	mov buf2d_color,0xffffff
	mov buf2d_bits,24

	stdcall [buf2d_create_f_img], edi,[img_data] ;ᮧ¤ ¥¬ ¡ãä¥à
	stdcall [buf2d_conv_24_to_8], edi,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8¡¨â
	;®¡à¥§ ¥¬ «¨è­¨¥ ªà ï ¡ãä¥à , ¤«ï ¡®«¥¥ ¡ëáâண® à¨á®¢ ­¨ï
	stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT+BUF2D_OPT_CROP_LEFT
	pop edi eax
	ret
endp

align 4
InitBackgroundBuffer: ;ᮧ¤ ­¨¥ ä®­®¢®£® ¨§®¡à ¦¥­¨ï
	pushad
	mov edi,buf_fon
	mov eax,[color_fon]
	mov buf2d_color,eax
	stdcall [buf2d_clear], edi,eax
	mov esi,edi

	xor eax,eax
	cld
	cmp dword[offs_shadow_x],0
	jne @f
	cmp dword[offs_shadow_y],0
	jne @f
		jmp .end_shadows
	@@:
		mov edi,buf_decor
		xor ebx,ebx
		mov ecx,3
		@@:
			mov ax,buf2d_t
			add eax,[offs_shadow_y]
			mov bx,buf2d_l
			add ebx,[offs_shadow_x]
			stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;à¨á㥬 ⥭¨ ¤¥ª®à æ¨©
			add edi,BUF_STRUCT_SIZE
			loop @b
	.end_shadows:

	mov edi,buf_decor
	mov ebx,color_decorat
	mov ecx,3
	@@:
		mov ax,buf2d_t
		stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[ebx] ;à¨á㥬 ¤¥ª®à æ¨¨
		add edi,BUF_STRUCT_SIZE
		add ebx,4
		loop @b
	popad
	ret

;à¨áã¥â ª à⨭ªã ¢ ¡ãä¥à¥ buf ¨§ ¬ áᨢ  ¡ãä¥à®¢ buf_img á ¨­¤¥ªá®¬ ind
;â. ¥. buf <- buf_img[ind]
align 4
proc DrawArrayImg, buf:dword, buf_img:dword, ind:dword, color:dword
	pushad
		mov edi,dword[ind]
		imul edi,BUF_STRUCT_SIZE
		add edi,dword[buf_img]

		mov esi,dword[buf]
		xor eax,eax
		mov ax,buf2d_t
		xor ebx,ebx
		mov bx,buf2d_l
		stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color]
	popad
	ret
endp

align 4
DrawZaac: ;à¨á®¢ ­¨¥ § ©æ 
	push eax
	bt word[pos_wolf],bit_zaac
	jae .end_mig

	stdcall DrawArrayImg, buf_displ,buf_wolf,6,[color_wolf] ;à¨á㥬 ⥫® § ©æ 
	mov eax,dword[pos_eggs]
	and eax,mask_chi_right+mask_chi_left
	cmp eax,0
	je .end_mig ;¥á«¨ ­¥â ¡¥£ îé¨å 樯«ïâ, â® § ïæ à㪮© ­¥ ¬ è¥â
	bt word[pos_wolf],bit_mig
	jc @f
		stdcall DrawArrayImg, buf_displ,buf_wolf,7,[color_wolf] ;à¨á㥬 àãªã § ©æ  ¢¢¥àåã
		jmp .end_mig
	@@:
		stdcall DrawArrayImg, buf_displ,buf_wolf,8,[color_wolf] ;à¨á㥬 àãªã § ©æ  ¢­¨§ã
	.end_mig:
	pop eax
	ret

align 4
DrawWolf: ;à¨áã¥â ¢®«ª  á ª®à§¨­ ¬¨
	bt word[pos_wolf],0
	jc @f
		stdcall DrawArrayImg, buf_displ,buf_wolf,0,[color_wolf]
		bt word[pos_wolf],1
		jc .corz_ldn
			stdcall DrawArrayImg, buf_displ,buf_wolf,1,[color_wolf]
			jmp .corz_lend
		.corz_ldn:
			stdcall DrawArrayImg, buf_displ,buf_wolf,2,[color_wolf]
		.corz_lend:
		jmp .wolf_b
	@@:
		stdcall DrawArrayImg, buf_displ,buf_wolf,3,[color_wolf]
		bt word[pos_wolf],1
		jc .corz_rdn
			stdcall DrawArrayImg, buf_displ,buf_wolf,4,[color_wolf]
			jmp .corz_rend
		.corz_rdn:
			stdcall DrawArrayImg, buf_displ,buf_wolf,5,[color_wolf]
		.corz_rend:
	.wolf_b:
	ret

align 4
DrawEggs: ;à¨áã¥â ï©æ 
	pushad
	cld

	mov eax,dword[pos_eggs]
	xor ebx,ebx
	mov ecx,20 ;横« ¤«ï à¨á®¢ ­¨ï ª®âïé¨åáï ï¨æ
	@@:
		bt eax,ebx
		jae .draw_egg
			stdcall DrawArrayImg, buf_displ,buf_egg,ebx,[color_egg]
		.draw_egg:
		inc ebx
		loop @b

	;mov eax,dword[pos_eggs]
	and eax,mask_chi_left
	cmp eax,0
	je @f
		stdcall DrawArrayImg, buf_displ,buf_egg,20,[color_egg] ;à §¡¨â®¥ ï©æ® á«¥¢ 
	@@:
	mov eax,dword[pos_eggs]
	and eax,mask_chi_right
	cmp eax,0
	je @f
		stdcall DrawArrayImg, buf_displ,buf_egg,21,[color_egg] ;à §¡¨â®¥ ï©æ® á¯à ¢ 
	@@:

	mov eax,dword[pos_eggs]
	xor edx,edx
	mov ebx,bit_chi_left
	mov ecx,5 ;横« ¤«ï à¨á®¢ ­¨ï «¥¢ëå 樯«ïâ
	@@:
		bt eax,ebx
		jae .draw_chick_l
			stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
		.draw_chick_l:
		inc ebx
		inc edx
		loop @b
	mov ebx,bit_chi_right
	mov ecx,5 ;横« ¤«ï à¨á®¢ ­¨ï ¯à ¢ëå 樯«ïâ
	@@:
		bt eax,ebx
		jae .draw_chick_r
			stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
		.draw_chick_r:
		inc ebx
		inc edx
		loop @b

	xor eax,eax
	mov al,byte[count_last]
	mov ecx,eax ;横« ¤«ï à¨á®¢ ­¨ï èâà ä­ëå ®çª®¢
	shr ecx,1
	mov edx,10 ;¨­¤¥ªá ­ ç «  èâà ä­ëå ¨ª®­®ª ¢ ¡ãä¥à¥ buf_chi
	cmp ecx,0
	je .no_unit_last
	@@:
		stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
		inc edx
		loop @b
	.no_unit_last:

	bt ax,0 ;¯à®¢¥à塞 ¬¨£ î饥 ­¥ ç¥â­®¥ ®çª®
	jae @f
		bt word[pos_wolf],bit_mig
		jc @f
			stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] ;¬¨£ î饥 èâà ä­®¥ ®çª®
	@@:

	popad
	ret

align 4
CountEggsInc: ;㢥«¨ç¨¢ ¥¬ áç¥â稪 ï¨æ ­  1
	push eax edi
		xor eax,eax
		inc word[eggs_count] ;㢥«¨ç¨¢ ¥¬ áç¥â稪 ï¨æ
		cmp word[eggs_count],200 ;¡®­ãá­ë¥ ®çª¨
		je @f
		cmp word[eggs_count],500 ;¡®­ãá­ë¥ ®çª¨
		je @f
			jmp .no_bonus
		@@:
			mov byte[count_last],0
		.no_bonus:

		mov ax,word[eggs_count]
		mov edi,some_text
		call convert_to_str ;®¡­®¢«ï¥¬ ⥪á⮢ãî áâபã
		and ax,0xf ;ç¥à¥§ ª ¦¤ë¥ 16 ï¨æ 㬥­ìè ¥¬ ¢à¥¬ï
		cmp ax,0
		jne @f
			mov edi,dword[game_delay_min] ;¬¨­¨¬ «ì­ ï § ¤¥à¦ª 
			cmp dword[game_spd],edi
			jle @f
				dec dword[game_spd]
		@@:
	pop edi eax
	ret

;input:
; eax - ¬ áª , 㪠§ë¢ îé ï á ª ª®© áâà®­ë 㯠«® ï©æ®
align 4
CountLastInc: ;­ ç¨á«¥­¨¥ èâà ä­ëå ®çª®¢
	inc byte[count_last] ;¯®«®¢¨­ ® èâà ä­®£® ®çª 
	bt word[pos_wolf],bit_zaac
	jc @f
		inc byte[count_last] ;¥á«¨ ­¥â § ©æ  â® ¥é¥ 1-­  ¯®«®¢¨­  èâà ä­®£® ®çª 
	@@:
	cmp byte[count_last],6
	jle @f
		mov byte[count_last],6 ;áâ ¢¨¬ ®£à ­¨ç¥­¨ ­  ç¨á«® èâà ä­ëå ®çª®¢
	@@:
	or dword[pos_eggs],eax ;ᮧ¤ ¥¬ ¡¥£ã饣® 樯«¥­ª 
	ret

align 4
MoveEggs:
	pushad
	xor byte[pos_wolf],val_mig ;¡¨â ¤«ï ¬¨£ ­¨ï

	cmp byte[count_last],6 ;¬ ªá¨¬ «ì­®¥ ç¨á«® èâà ä­ëå ®çª®¢
	je .end_fun

	rol dword[pos_eggs],1
	mov ecx,dword[pos_eggs]
	and ecx,mask_fail_eggs
	cmp ecx,0
	je .no_fail ;­¥â ¯ ¤ îé¨å ï¨æ
		;­ ç¨á«¥­¨¥ ï¨æ ¯®¯ ¢è¨å ¢ ª®à§¨­ã
		;¨«¨ ­ ç¨á«¥­¨¥ èâà ä­ëå ®çª®¢
		xor ebx,ebx
		mov bl,byte[pos_wolf] ;¡¥à¥¬ ¯ à ¬¥âàë (¯®§¨æ¨î) ¢®«ª 
		and bl,3 ;­  ¢á直© á«ãç ©

		bt ecx,5 ;¯à®¢¥à塞 ¢¥àå­¥¥ «¥¢®¥ ¯¥à¨«®
		jae .perilo_lu
			cmp bx,0 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
			jne @f
				call CountEggsInc
				jmp .perilo_lu
			@@:
				mov eax,mask_chi_cr_l
				call CountLastInc
			.perilo_lu:
		bt ecx,10 ;¯à®¢¥à塞 ­¨¦­¥¥ «¥¢®¥ ¯¥à¨«®
		jae .perilo_ld
			cmp bx,2 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
			jne @f
				call CountEggsInc
				jmp .perilo_ld
			@@:
				mov eax,mask_chi_cr_l
				call CountLastInc
		.perilo_ld:
		bt ecx,15 ;¯à®¢¥à塞 ¢¥àå­¥¥ ¯à ¢®¥ ¯¥à¨«®
		jae .perilo_ru
			cmp bx,1 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
			jne @f
				call CountEggsInc
				jmp .perilo_ru
			@@:
				mov eax,mask_chi_cr_r
				call CountLastInc
		.perilo_ru:
		bt ecx,20 ;¯à®¢¥à塞 ­¨¦­¥¥ ¯à ¢®¥ ¯¥à¨«®
		jae .perilo_rd
			cmp bx,3 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
			jne @f
				call CountEggsInc
				jmp .perilo_rd
			@@:
				mov eax,mask_chi_cr_r
				call CountLastInc
		.perilo_rd:
	.no_fail:

	and dword[pos_eggs],mask_clear_all ;®ç¨á⪠ 㯠¢è¨å ï¨æ ¨ ¤®¡¥¦ ¢è¨å ªã३

	call rand_next
	cmp byte[zaac_status],0
	jle @f
		dec byte[zaac_status]
		jmp .no_zaac_move ;§ ïæ ¯®ª  ­¥ ¤¢¨£ ¥âáï
	@@:
	
	bt dword[rand_x],6 ;§ ïæ ®â ä®­ àï ¬¥­ï¥â áâ âãá
	jc @f
		xor byte[pos_wolf],val_zaac ;¢ëᮢ뢠¥¬/§ á®¢ë¢ ¥¬ § ©æ 
		bt word[pos_wolf],val_zaac
		jc .zaac_n
			mov byte[zaac_status],val_zaac_time_y ;áâ ¢¨¬ ¬¨­¨¬ «ì­®¥ ¢à¥¬ï ¤«ï ᬥ­ë áâ âãá 
			jmp @f
		.zaac_n:
			mov byte[zaac_status],val_zaac_time_n ;áâ ¢¨¬ ¬¨­¨¬ «ì­®¥ ¢à¥¬ï ¤«ï ᬥ­ë áâ âãá 
	@@:
	.no_zaac_move:

	;ᮧ¤ ­¨¥ ­®¢ëå ï¨æ
	cmp word[eggs_count],5 ;¯¥à¢ë¥ 5 ï¨æ ª âïâáï ¯® 1-¬ã
	jge @f
		mov ecx,dword[pos_eggs]
		and ecx,mask_move_eggs
		;cmp ecx,0
		jnz .end_creat
	@@:

	bt dword[rand_x],4 ;¯à®¢¥à塞 ¡ã¤¥¬ «¨ ᮧ¤ ¢ âì ­®¢®¥ ï©æ®
	jc .end_creat
	bt dword[rand_x],5 ;¯à®¢¥à塞 á ª ª®© áâ®à®­ë ¡ã¤¥¬ ᮧ¤ ¢ âì ­®¢®¥ ï©æ®
	jc .creat_r
		bt dword[rand_x],7
		jc @f
			or dword[pos_eggs],mask_lot_lu
			jmp .end_creat
		@@:
			or dword[pos_eggs],mask_lot_ld
			jmp .end_creat
	.creat_r:
		bt dword[rand_x],7
		jc @f
			or dword[pos_eggs],mask_lot_ru
			jmp .end_creat
		@@:
			or dword[pos_eggs],mask_lot_rd
			;jmp .end_creat
	.end_creat:

	.end_fun:
	popad
	ret

align 4
proc InitGame, b:dword ;¯¥à¢®­ ç «ì­ë¥ ­ áâனª¨ ¨£àë
	mov word[eggs_count],0 ;ª®««¨ç¥á⢮ ¯®©¬ ­ëå ï¨æ
	mov byte[some_text],'0'
	mov byte[some_text+1],0 ;⥪áâ á ç¨á«®¬ ¯®©¬ ­­ëå ï¨æ
	mov byte[count_last],0 ;èâà ä­ë¥ ®çª¨
	mov dword[pos_eggs],0
	mov byte[zaac_status],0

	push eax ebx
	cmp dword[b],0
	jne @f
		mov byte[game_text+5],'€'
		mov eax,dword[game_delay_a]
		mov dword[game_spd],eax ;§ ¤¥à¦ª  ¨£àë
		jmp .end_init
	@@:
		mov byte[game_text+5],''
		mov eax,dword[game_delay_b]
		mov dword[game_spd],eax ;§ ¤¥à¦ª  ¨£àë
	.end_init:

	mcall 26,9
	mov dword[rand_x],eax ;§ ¯®«­ï¥¬ 1-¥ á«ãç ©­®¥ ç¨á«®
	pop ebx eax

	ret
endp

align 4
proc LoadArrayBuffer, f_name:dword, buf_start:dword, count:dword
	pushad
	mov edx,dword[displ_bytes]
	mov ecx,edx
	imul ecx,dword[count]
	mov eax,dword[f_name]
	load_image_file eax,image_data_gray,ecx
		mov edx,dword[displ_bytes]
		mov eax,[image_data_gray]
		mov edi,dword[buf_start]
		mov ecx,dword[count]
		cld
		@@: ;áç¨â뢠¥¬ 3 ¡ãä¥à  á ¤¥ª®à æ¨ï¬¨
			stdcall CreateTrapharetBuffer,edi,eax
			add eax,edx
			add edi,BUF_STRUCT_SIZE
			loop @b
	stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
	popad
	ret
endp

txt_tile_type_0 rb FILE_NAME_MAX

align 4
user_is_select:
	push ecx esi edi
	
	stdcall [tl_node_get_data], tree1
	pop esi
	cmp esi,0 ;¥á«¨ ¨¬ï ¨£àë ¯ãá⮥
	je @f	
		mov edi,ini_name
		mov ecx,FILE_NAME_MAX
		cld
		rep movsb

		mov byte[game_select_mode],0
		call InitAll
	@@:
	pop edi esi ecx

	call draw_window
	ret

;******************************************************************************
; äã­ªæ¨ï, ª®â®à ï 1 à § ¤¥« ¥â ¢á¥ ­ áâனª¨ ­ã¦­ë¥ ¤«ï ¨£àë
;******************************************************************************
align 4
InitAll:
	pushad
	;à ¡®â  á ä ©«®¬ ­ áâ஥ª
	copy_path ini_name,sys_path,file_name,0x0
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_w,210
	mov	dword[displ_w],eax
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_h,140
	mov	dword[displ_h],eax
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_lost,fn_icon3,FILE_NAME_MAX,ini_def_lost_file

	stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_x,2
	mov	dword[offs_shadow_x],eax
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_y,2
	mov	dword[offs_shadow_y],eax

	;áç¨â뢠­¨¥ ­ áâ஥ª ¢«¨ïîé¨å ­  ᪮àáâì ¨£àë
	stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_a,65
	mov	dword[game_delay_a],eax
	stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_b,35
	mov	dword[game_delay_b],eax
	stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_min,15
	mov	dword[game_delay_min],eax
	
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff
	mov	dword[color_fon],eax
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0
	mov	dword[color_shadows],eax
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_unit,0
	mov	dword[color_wolf],eax
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080
	mov	dword[color_egg],eax
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0
	mov	dword[color_chick],eax

	mov ebx,color_decorat
	mov byte[key_color_decorat.ind],'0'
	mov ecx,3
	cld
	@@:
		push ecx ;äã­ªæ¨ï ini_get_color ¨¬¥¥â ¯à ¢® ¬ ­ïâì ॣ¨áâà ecx
		stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080
		pop ecx
		mov dword[ebx],eax
		add ebx,4
		inc byte[key_color_decorat.ind]
		loop @b

	mov edx,dword[displ_w]
	imul edx,dword[displ_h]
	lea edx,[edx+edx*2]
	mov dword[displ_bytes],edx ;¢ëç¨á«ï¥¬ à §¬¥à ¨£à®¢®£® ¯®«ï

	stdcall LoadArrayBuffer, fn_icon0, buf_decor,3 ;áç¨â뢠¥¬ 3 ¡ãä¥à  á ¤¥ª®à æ¨ï¬¨
	stdcall LoadArrayBuffer, fn_icon1, buf_wolf,9 ;áç¨â뢠¥¬ 9 ¡ãä¥à®¢ á ¢®«ª®¬ ¨ § ©æ¥¬
	stdcall LoadArrayBuffer, fn_icon2, buf_egg,22 ;áç¨â뢠¥¬ 22 ¡ãä¥à®¢ á ï©æ ¬¨
	stdcall LoadArrayBuffer, fn_icon3, buf_chi,13 ;áç¨â뢠¥¬ 13 ¡ãä¥à®¢ á 樯«ïâ ¬¨

	load_image_file fn_font, image_data_gray,IMAGE_FONT_SIZE
	stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;ᮧ¤ ¥¬ ¡ãä¥à
	stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì

	stdcall [buf2d_conv_24_to_8], buf_font,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8 ¡¨â
	stdcall [buf2d_convert_text_matrix], buf_font

;¯à®¢¥àª  § ­¨¬ ¥¬®£® ¡ãä¥à®¬ ¬¥áâ 
;mov edi,buf_wolf
;add edi,BUF_STRUCT_SIZE ;¯¥à¥å®¤¨¬ ­  ¡ãä¥à ª®à§¨­ë
;stdcall [buf2d_clear],edi,0x808080 ;§ «¨¢ ¥¬ ¥£® á¥àë¬ æ¢¥â®¬

	mov ebx,dword[displ_w]
	mov edx,dword[displ_h]

	mov edi,buf_displ
	mov buf2d_w,ebx
	mov buf2d_h,edx
	stdcall [buf2d_create], buf_displ ;ᮧ¤ ¥¬ ¡ãä¥à ¤«ï ¢ë¢®¤  ­  íªà ­

	mov edi,buf_fon
	mov buf2d_w,ebx
	mov buf2d_h,edx
	stdcall [buf2d_create], buf_fon ;ᮧ¤ ¥¬ ¡ãä¥à á ä®­®¢ë¬¨ ¤¥ª®à æ¨ï¬¨

	call InitBackgroundBuffer ;§ ¯®«­ï¥¬ ¡ãä¥à á ä®­®¢ë¬¨ ¤¥ª®à æ¨ï¬¨
	stdcall InitGame,0
	popad
	ret

align 4
start:
	load_libraries l_libs_start,load_lib_end

	;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  «¨¡ 
	mov	ebp,lib0
	cmp	dword [ebp+ll_struc_size-4],0
	jz	@f
		mcall -1 ;exit not correct
	@@:
	mov	ebp,lib1
	cmp	dword [ebp+ll_struc_size-4],0
	jz	@f
		mcall -1 ;exit not correct
	@@:

	mcall 40,0x27
	mcall 48,3,sc,sizeof.system_colors ;¯®«ãç ¥¬ á¨á⥬­ë¥ 梥â 

;******************************************************************************
; ¯®¤£®â®¢ª  ᯨ᪠ ¨£®à
;******************************************************************************
	stdcall dword[tl_data_init], tree1

	load_image_file fn_icon_tl_sys, image_data_gray,TREE_ICON_SYS16_BMP_SIZE
	stdcall [buf2d_create_f_img], buf_tree_sys,[image_data_gray] ;ᮧ¤ ¥¬ ¡ãä¥à
	stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì

	mov edi,buf_tree_sys
	m2m dword[tree1.data_img_sys],buf2d_data

	;à ¡®â  á £« ¢­ë¬ ä ©«®¬ ­ áâ஥ª
	copy_path ini_m_name,sys_path,file_name,0x0

	stdcall dword[ini_get_int],file_name,ini_sec_files,key_count,1
	mov	ecx,eax
	mov dl,'0'
	cld
	@@:
		mov byte[key_game_ind],dl
		inc dl
		push ecx edx
		stdcall dword[ini_get_str],file_name,ini_sec_files,key_game,txt_tile_type_0,FILE_NAME_MAX,ini_def_decorat_file
		stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1 ;¤®¡ ¢«ï¥¬ ­ §¢ ­¨¥ ¨£àë
		stdcall dword[tl_cur_next], tree1 ;¯¥à¥­®á¨¬ ªãàá®à ¢­¨§, çâ®-¡ë ­¥ ¯®¬¥­ï«áï ¯®à冷ª ¨£à
		pop edx ecx
	loop @b
	stdcall dword[tl_cur_beg], tree1 ;¯¥à¥­®á¨¬ ªãàá®à ¢¢¥àå

	mcall 26,9
	mov [last_time],ebx



align 4
red_win:
	call draw_window

align 4
still: ;£« ¢­ë© 横«

	cmp byte[game_select_mode],0
	jne .select_mode
	
	mcall 26,9 ;¡¥à¥¬ á¨á⥬­®¥ ¢à¥¬ï
	mov ebx,[last_time]
	add ebx,dword[game_spd] ;delay
	sub ebx,eax
	cmp ebx,dword[game_spd] ;delay
	ja it_is_time_now
	test ebx,ebx
	jz it_is_time_now
	mcall 23

	cmp eax,0
	je it_is_time_now

	jmp @f
	.select_mode:
		mcall 10
	@@:

	cmp al,1 ;¨§¬¥­¨«®áì ¯®«®¦¥­¨¥ ®ª­ 
	jz red_win
	cmp al,2
	jz key
	cmp al,3
	jz button
	cmp al,6
	jz mouse

	jmp still

align 4
mouse:
	cmp byte[game_select_mode],0
	je @f
		stdcall [tl_mouse], tree1 ;¥á«¨ ¨£à  ¥é¥ ­¥ ¢ë¡à ­ 
	@@:
	jmp still

align 4
it_is_time_now:
	mcall 26,9
	mov [last_time],eax

	cmp byte[game_select_mode],0
	jne still

	;...§¤¥áì ¨¤ãâ ¤¥©á⢨ï, ¢ë§ë¢ ¥¬ë¥ ª ¦¤ë¥ delay á®âëå ¤®«¥© ᥪ㭤...
	call MoveEggs
	call draw_display
	jmp still

align 4
key:
	push eax ebx
	mcall 2

	cmp byte[game_select_mode],0
	je @f
		stdcall [tl_key], tree1
	@@:

	cmp ah,176 ;Left
	jne @f
		and byte[pos_wolf],0xfe
	@@:
	cmp ah,179 ;Right
	jne @f
		or byte[pos_wolf],1
	@@:
	cmp ah,178 ;Up
	jne @f
		and byte[pos_wolf],0xff-2
	@@:
	cmp ah,177 ;Down
	jne @f
		or byte[pos_wolf],2
	@@:

	cmp ah,97 ;a
	jne @f
		and byte[pos_wolf],0xff-3 ;00
	@@:
	cmp ah,122 ;z
	jne @f
		and byte[pos_wolf],0xff-1
		or byte[pos_wolf],2 ;10
	@@:
	cmp ah,39 ;'
	jne @f
		and byte[pos_wolf],0xff-2
		or byte[pos_wolf],1 ;01
	@@:
	cmp ah,47 ;/
	jne @f
		or byte[pos_wolf],3 ;11
	@@:

	pop ebx eax
	jmp still


align 4
draw_window:
	pushad
	mcall 12,1

	xor eax,eax
	mov ebx,20*65536+480
	mov ecx,20*65536+270
	mov edx,[sc.work]
	;or edx,0x33000000
	or edx,0x73000000
	mov edi,hed
	mcall ;ᮧ¤ ­¨¥ ®ª­ 
	mcall 9,procinfo,-1

	cmp byte[game_select_mode],0
	jne .select_mode

	mov edi,buf_displ
	mov eax,dword[procinfo.client_box.width]
	cmp eax,dword[displ_w]
	jle @f
		sub eax,dword[displ_w]
		shr eax,1
		mov buf2d_l,ax ;¢ë¯à ¢­¨¢ ¥¬ ¡ãä¥à ¯® 業âàã ®ª­ 
	@@:

	call draw_display

	mov eax,13 ;à¨á®¢ ­¨¥ ¯àאַ㣮«ì­¨ª 
	mov edx,[sc.work]
	xor esi,esi
	mov si,buf2d_l
	add esi,dword[displ_w]
	mov ebx,dword[procinfo.client_box.width]
	inc ebx
	cmp esi,ebx
	jge @f
		sub ebx,esi
		rol ebx,16
		mov bx,si
		rol ebx,16
		mov ecx,dword[procinfo.client_box.height]
		inc ecx
		int 0x40 ;à¨á®¢ ­¨¥ ¯à ¢®£® ¡®ª®¢®£® ¯®«ï
		jmp .draw_s
	@@:
		mov esi,dword[procinfo.client_box.width] ;ª®£¤  ¯® è¨à¨­¥ ­¥ ¢« §¨â
		inc esi
	.draw_s:

	; *** à¨á®¢ ­¨¥ ª­®¯®ª ***
push esi
	mov eax,8
	xor ebx,ebx
	mov bx,buf2d_l
	add ebx,buf2d_w
	add ebx,BUT1_L
	shl ebx,16
	mov bx,BUT1_W
	mov ecx,BUT1_T*65536+BUT1_H
	mov edx,5
	;or edx,0x40000000
	mov esi,dword[color_but_sm]
	int 0x40

	inc edx
	add ecx,BUT1_NEXT_TOP
	int 0x40
pop esi

	mov eax,4 ; ð¡R÷ÿ-ð? ¢?ò¡¢ÿ
	mov bx,BUT1_H
	add ebx,3*65536;+3
	mov ecx,dword[color_but_te]
	or  ecx,0x80000000
	mov edx,txt_game_a
	int 0x40

	ror ebx,16
	add ebx,BUT1_NEXT_TOP
	ror ebx,16
	mov edx,txt_game_b
	int 0x40

	; *** ¢®ááâ ­®¢«¥­¨¥ ¯ à ¬¥â஢ ***
	mov eax,13 ;à¨á®¢ ­¨¥ ¯àאַ㣮«ì­¨ª 
	mov edx,[sc.work]

	mov ebx,esi
	mov ecx,dword[procinfo.client_box.height]
	inc ecx
	mov esi,dword[displ_h]
	cmp esi,ebx
	jge @f
		sub ecx,esi
		rol ecx,16
		mov cx,si
		rol ecx,16
		int 0x40 ;à¨á®¢ ­¨¥ ­¨¦­¥£® ¯®«ï
	@@:
	
	xor ebx,ebx
	mov bx,buf2d_l
	mov ecx,dword[displ_h]
	int 0x40 ;à¨á®¢ ­¨¥ «¥¢®£® ¡®ª®¢®£® ¯®«ï

	jmp @f
	.select_mode:
		stdcall dword[tl_draw],dword tree1
		mov edi,tree1
		add edi,tl_offs_box
		stdcall draw_rect_border, procinfo.client_box, edi
	@@:

	mcall 12,2
	popad
	ret

; äã­ªæ¨ï à¨áã¥â ¯®«ï ¢®ªà㣠¯àאַ㣮«ì­¨ª  user_box
; à §¬¥à ¯®«¥© ¢ëç¨á«ï¥âáï ¨áå®¤ï ¨§ à §¬¥à®¢ client_rect
; ¯à¥¤¯®« £ ¥âáï, çâ® ¢ ¡®«ì設á⢥ á«ãç ¥¢ client_rect > user_box
align 4
proc draw_rect_border, client_rect:dword, user_box:dword
	pushad
	mov edi,dword[client_rect]
	mov esi,dword[user_box]
	cmp esi,0
	je @f
		mov ebx,dword[edi+8] ;+8 = width
		inc bx
		mov ecx,dword[esi+4] ;+4 = top
		mov edx,[sc.work]
		mov eax,13
		int 0x40 ;top

		mov eax,dword[esi+4] ;+4 = top
		add eax,dword[esi+12] ;+12 = height
		cmp eax,dword[edi+12]
		jge .no_bottom
			mov ecx,eax
			shl ecx,16
			mov cx,word[edi+12] ;+12 = bottom
			inc cx
			sub cx,ax
			mov eax,13
			int 0x40 ;bottom
		.no_bottom:

		mov ebx,dword[esi] ;+0 left
		mov ecx,dword[esi+4] ;+4 = top
		shl ecx,16
		mov cx,word[esi+12] ;+12 = height
		inc cx 
		mov eax,13
		int 0x40 ;left

		mov eax,dword[esi] ;+0 left
		add eax,dword[esi+8] ;+8 = width
		mov ebx,eax
		shl ebx,16
		mov bx,word[edi+8] ;+8 = right
		sub bx,ax
		inc bx
		mov eax,13
		int 0x40 ;right
	@@:
	popad
	ret
endp

align 4
draw_display:

	stdcall mem_copy, dword[buf_fon],dword[buf_displ],dword[displ_bytes] ;ª®¯¨à®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¨§ ä®­®¢®£® ¡ãä¥à 
	call DrawZaac ;à¨á㥬 § ©æ 
	call DrawWolf ;à¨á㥬 ¢®«ª 
	call DrawEggs ;à¨á㥬 ï©æ 

push eax
	mov eax,dword[displ_w]
	shr eax,1
	stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;à¨á㥬 áâபã á ⥪á⮬
pop eax
	stdcall [buf2d_draw], buf_displ
	ret

align 4
button:
	mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨

	cmp ah,5
	jne @f
		stdcall InitGame,0
	@@:
	cmp ah,6
	jne @f
		stdcall InitGame,1
	@@:
	cmp ah,1
	jne still
.exit:
	stdcall [buf2d_delete],buf_fon ;㤠«ï¥¬ ¡ãä¥à
	stdcall [buf2d_delete],buf_displ ;㤠«ï¥¬ ¡ãä¥à

	stdcall [buf2d_delete],buf_tree_sys
	stdcall [buf2d_delete],buf_font

	cld
	mov ecx,3
	mov edi,buf_decor
	@@: ;㤠«ï¥¬ 3 ¡ãä¥à 
		stdcall [buf2d_delete],edi
		add edi,BUF_STRUCT_SIZE
		loop @b
	mov ecx,9
	mov edi,buf_wolf
	@@: ;㤠«ï¥¬ 9 ¡ãä¥à®¢ á ¢®«ª®¬ ¨ § ©æ¥¬
		stdcall [buf2d_delete],edi
		add edi,BUF_STRUCT_SIZE
		loop @b
	mov ecx,13
	mov edi,buf_chi
	@@: ;㤠«ï¥¬ 13 ¡ãä¥à®¢
		stdcall [buf2d_delete],edi
		add edi,BUF_STRUCT_SIZE
		loop @b
	mov ecx,22
	mov edi,buf_egg
	@@: ;㤠«ï¥¬ 22 ¡ãä¥à 
		stdcall [buf2d_delete],edi
		add edi,BUF_STRUCT_SIZE
		loop @b

	mov dword[tree1.data_img_sys],0 ;ç¨á⨬ 㪠§ â¥«ì ­  ¨§®¡à ¦¥­¨¥
	stdcall dword[tl_data_clear], tree1
	mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë

head_f_i:
head_f_l  db '‘¨á⥬­ ï ®è¨¡ª ',0

system_dir0 db '/sys/lib/'
lib0_name db 'buf2d.obj',0
err_message_found_lib0 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã buf2d.obj',0
err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ buf2d.obj',0

system_dir1 db '/sys/lib/'
lib1_name db 'libimg.obj',0
err_message_found_lib1 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã libimg.obj',0
err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ libimg.obj',0

system_dir2 db '/sys/lib/'
lib2_name db 'libini.obj',0
err_message_found_lib2 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã libini.obj',0
err_message_import2 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ libini.obj',0

system_dir3 db '/sys/lib/'
lib3_name db 'box_lib.obj',0
err_message_found_lib3 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã box_lib.obj',0
err_message_import3 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ box_lib.obj',0

;library structures
l_libs_start:
	lib0 l_libs lib0_name,	sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i
	lib1 l_libs lib1_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i
	lib2 l_libs lib2_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, import_libini, err_message_import2, head_f_i
	lib3 l_libs lib3_name, sys_path, file_name, system_dir3, err_message_found_lib3, head_f_l, import_box_lib, err_message_import3, head_f_i
load_lib_end:

align 4
proc mem_copy, source:dword, destination:dword, len:dword
  push ecx esi edi
    cld
    mov esi, dword[source]
    mov edi, dword[destination]
    mov ecx, dword[len]
    rep movsb
  pop edi esi ecx
  ret
endp

align 4
convert_to_str:
	pushad
	;mov eax,dword[value]
	;mov edi,dword[text]
	mov dword[edi+1],0
	cld
	call .str
	popad
	ret


align 4
.str:
  mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
    ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®© 
  cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  jb @f
  xor edx,edx  ;®ç¨áâ¨âì edx
  div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  push edx     ;¯®«®¦¨âì ¢ á⥪
  ;dec edi             ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  call .str;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  pop eax
  @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  ;sbb al,$69  ;- ç¥áâ­® ¤ ­­ ï ¨­áâàãªæ¨ï ¬¥­ï § áâ ¢«ï¥â § ¤ã¬ âìáï â.¥. ï ­¥ §­ î ª ª íâ® à ¡®â ¥â
  ;das        ;¯®á«¥ ¤ ­­®© ª®¬ ­¤ë ª ª ¡ë ¯à®¨á室¨â 㬥­ì襭¨¥ al ­  66h  (¢ ª­¨£¥ ­ ¯¨á ­® ¤à㣮¥)
  or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥  祬 ¤¢¥ ¢ëè¥ 
  stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
  ret	      ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï


last_time dd ?
image_data dd 0 ;¯ ¬ïâì ¤«ï ¯à¥®¡à §®¢ ­¨ï ª à⨭ª¨ äã­ªæ¨ï¬¨ libimg
image_data_gray dd 0 ;¯ ¬ïâì á ¢à¥¬¥­­ë¬¨ á¥à묨 ¨§®¡à ¦¥­¨ï¬¨ ¢ ä®à¬ â¥ 24-bit, ¨§ ª®â®àëå ¡ã¤ãâ ᮧ¤ ¢ âìáï âà ä à¥âë

run_file_70 FileInfoBlock
hed db 'Nu pogodi 17.09.10',0 ;¯®¤¯¨áì ®ª­ 
sc system_colors  ;á¨á⥬­ë¥ 梥â 

count_of_dir_list_files equ 10
el_focus dd tree1
tree1 tree_list FILE_NAME_MAX,count_of_dir_list_files+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\
	16,16, 0x8080ff,0x0000ff,0xffffff, 10,10,140,100, 0,0,0, el_focus,\
	0,user_is_select

align 4
buf_tree_sys:
	dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
	dw 0 ;+4 left
	dw 0 ;+6 top
	dd 16 ;+8 w
	dd 16*11 ;+12 h
	dd 0 ;+16 color
	db 24 ;+20 bit in pixel

align 4
buf_font: ;¡ãä¥à á® èà¨ä⮬
	dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
	dw 25 ;+4 left
	dw 25 ;+6 top
	dd 128 ;+8 w
	dd 144 ;+12 h
	dd 0 ;+16 color
	db 24 ;+20 bit in pixel

align 4
buf_displ:
	dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
	dw 25,0
	dd ? ;+8 w
	dd ? ;+12 h
	dd 0 ;+16 color
	db 24 ;+20 bit in pixel

align 4
buf_fon: ;ä®­®¢ë© ¡ãä¥à
	dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
	dw 0 ;+4 left
	dw 0 ;+6 top
	dd ? ;+8 w
	dd ? ;+12 h
	dd 0xffffff ;+16 color
	db 24 ;+20 bit in pixel

align 4
buf_decor: ;¡ãä¥à  á ¤¥ª®à æ¨ï¬¨: ¤®¬¨ª ¬¨ ¨ ३ª ¬¨; á ªãà¨æ ¬¨; á à á⥭¨ï¬¨
	rb 3*BUF_STRUCT_SIZE

align 4
buf_wolf:
	rb 9*BUF_STRUCT_SIZE

align 4
buf_egg:
	rb 22*BUF_STRUCT_SIZE

align 4
buf_chi:
	rb 13*BUF_STRUCT_SIZE



align 4
import_libini:
	dd alib_init0
	ini_get_str   dd aini_get_str
	ini_get_int   dd aini_get_int
	ini_get_color dd aini_get_color
dd 0,0
	alib_init0     db 'lib_init',0
	aini_get_str   db 'ini_get_str',0
	aini_get_int   db 'ini_get_int',0
	aini_get_color db 'ini_get_color',0

align 4
import_libimg:
  dd alib_init1
  img_is_img  dd aimg_is_img
  img_info    dd aimg_info
  img_from_file dd aimg_from_file
  img_to_file dd aimg_to_file
  img_from_rgb dd aimg_from_rgb
  img_to_rgb  dd aimg_to_rgb
  img_to_rgb2 dd aimg_to_rgb2
  img_decode  dd aimg_decode
  img_encode  dd aimg_encode
  img_create  dd aimg_create
  img_destroy dd aimg_destroy
  img_destroy_layer dd aimg_destroy_layer
  img_count   dd aimg_count
  img_lock_bits dd aimg_lock_bits
  img_unlock_bits dd aimg_unlock_bits
  img_flip    dd aimg_flip
  img_flip_layer dd aimg_flip_layer
  img_rotate  dd aimg_rotate
  img_rotate_layer dd aimg_rotate_layer
  img_draw    dd aimg_draw

  dd 0,0
  alib_init1   db 'lib_init',0
  aimg_is_img  db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ­­ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª  ᤥ« âì ¨§ ­¨å ¨§®¡à ¦¥­¨¥
  aimg_info    db 'img_info',0
  aimg_from_file db 'img_from_file',0
  aimg_to_file db 'img_to_file',0
  aimg_from_rgb db 'img_from_rgb',0
  aimg_to_rgb  db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¢ ¤ ­­ë¥ RGB
  aimg_to_rgb2 db 'img_to_rgb2',0
  aimg_decode  db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ­­ëå
  aimg_encode  db 'img_encode',0
  aimg_create  db 'img_create',0
  aimg_destroy db 'img_destroy',0
  aimg_destroy_layer db 'img_destroy_layer',0
  aimg_count   db 'img_count',0
  aimg_lock_bits db 'img_lock_bits',0
  aimg_unlock_bits db 'img_unlock_bits',0
  aimg_flip    db 'img_flip',0
  aimg_flip_layer db 'img_flip_layer',0
  aimg_rotate  db 'img_rotate',0
  aimg_rotate_layer db 'img_rotate_layer',0
  aimg_draw    db 'img_draw',0

align 4
import_buf2d_lib:
	dd sz_lib_init
	buf2d_create dd sz_buf2d_create
	buf2d_create_f_img dd sz_buf2d_create_f_img
	buf2d_clear dd sz_buf2d_clear
	buf2d_draw dd sz_buf2d_draw
	buf2d_delete dd sz_buf2d_delete
	buf2d_line dd sz_buf2d_line
	buf2d_circle dd sz_buf2d_circle
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
	buf2d_bit_blt dd sz_buf2d_bit_blt
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
	buf2d_cruve_bezier dd sz_buf2d_cruve_bezier
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
	buf2d_draw_text dd sz_buf2d_draw_text
	buf2d_crop_color dd sz_buf2d_crop_color
	buf2d_offset_h dd sz_buf2d_offset_h	
	dd 0,0
	sz_lib_init db 'lib_init',0
	sz_buf2d_create db 'buf2d_create',0
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
	sz_buf2d_clear db 'buf2d_clear',0
	sz_buf2d_draw db 'buf2d_draw',0
	sz_buf2d_delete db 'buf2d_delete',0
	sz_buf2d_line db 'buf2d_line',0
	sz_buf2d_circle db 'buf2d_circle',0 ;à¨á®¢ ­¨¥ ®ªà㦭®áâ¨
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
	sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
	sz_buf2d_draw_text db 'buf2d_draw_text',0
	sz_buf2d_crop_color db 'buf2d_crop_color',0
	sz_buf2d_offset_h db 'buf2d_offset_h',0

align 4
import_box_lib:
	dd alib_init2

	;scrollbar_ver_draw  dd aScrollbar_ver_draw

	tl_data_init dd sz_tl_data_init
	tl_data_clear dd sz_tl_data_clear
	tl_info_clear dd sz_tl_info_clear
	tl_key dd sz_tl_key
	tl_mouse dd sz_tl_mouse
	tl_draw dd sz_tl_draw
	tl_info_undo dd sz_tl_info_undo
	tl_info_redo dd sz_tl_info_redo
	tl_node_add dd sz_tl_node_add
	tl_node_set_data dd sz_tl_node_set_data
	tl_node_get_data dd sz_tl_node_get_data
	tl_node_delete dd sz_tl_node_delete
	tl_cur_beg dd sz_tl_cur_beg
	tl_cur_next dd sz_tl_cur_next
	tl_cur_perv dd sz_tl_cur_perv
	tl_node_close_open dd sz_tl_node_close_open
	tl_node_lev_inc dd sz_tl_node_lev_inc
	tl_node_lev_dec dd sz_tl_node_lev_dec

dd 0,0
	alib_init2 db 'lib_init',0

	;aScrollbar_ver_draw  db 'scrollbar_v_draw',0

	sz_tl_data_init db 'tl_data_init',0
	sz_tl_data_clear db 'tl_data_clear',0
	sz_tl_info_clear db 'tl_info_clear',0
	sz_tl_key db 'tl_key',0
	sz_tl_mouse db 'tl_mouse',0
	sz_tl_draw db 'tl_draw',0
	sz_tl_info_undo db 'tl_info_undo',0
	sz_tl_info_redo db 'tl_info_redo',0
	sz_tl_node_add db 'tl_node_add',0
	sz_tl_node_set_data db 'tl_node_set_data',0
	sz_tl_node_get_data db 'tl_node_get_data',0
	sz_tl_node_delete db 'tl_node_delete',0
	sz_tl_cur_beg db 'tl_cur_beg',0
	sz_tl_cur_next db 'tl_cur_next',0
	sz_tl_cur_perv db 'tl_cur_perv',0
	sz_tl_node_close_open db 'tl_node_close_open',0
	sz_tl_node_lev_inc db 'tl_node_lev_inc',0
	sz_tl_node_lev_dec db 'tl_node_lev_dec',0



i_end:
	rb 1024
	align 16
	procinfo process_information
stacktop:
	sys_path rb 4096
	file_name:
		rb 4096
	openfile_path:
		rb 4096
	filename_area:
		rb 256
mem: