1
0
kolibrios/programs/games/nu_pogodi/trunk/nu_pogod.asm
IgorA 6a725a3db0 new program to see the structure of blocks in the files 3ds
git-svn-id: svn://kolibrios.org@2051 a494cfbc-eb01-0410-851d-a64ba20cac60
2011-08-17 11:18:45 +00:00

1466 lines
38 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ;¨¬ï ä ©«  á 樯«ïâ ¬¨
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 { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥­­®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬
if path eqtype '' ;¯à®¢¥à塞 § ¤ ­ «¨ áâப®© ¯ à ¬¥âà path
jmp @f
local .path_str
.path_str db path ;ä®à¬¨à㥬 «®ª «ì­ãî ¯¥à¥¬¥­­ãî
db 0
@@:
;32 - áâ ­¤ àâ­ë©  ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥­ ¡ëâì ¡ãä¥à á á¨á⥬­ë¬ ¯ã⥬
copy_path .path_str,[32],file_name,0x0
else
copy_path path,[32],file_name,0x0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
end if
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 'ˆ£à  <20>',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 ? ;¯¥à¢®­ ç «ì­ ï § ¤¥à¦ª  ¤«ï ¨£àë <20>
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],'<27>'
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 'font8x9.bmp', 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 'tl_sys_16.png', 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],eax
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 '<27>¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã 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 '<27>¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã 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 '<27>¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã 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 '<27>¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã 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 0
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_curve_bezier dd sz_buf2d_curve_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_curve_bezier db 'buf2d_curve_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: