Subversion Repositories Kolibri OS

Rev

Rev 1573 | Rev 1619 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.         org 0x0
  3.         db 'MENUET01' ;¨¤¥­â¨ä. ¨á¯®«­ï¥¬®£® ä ©«  ¢á¥£¤  8 ¡ ©â
  4.         dd 0x1
  5.         dd start
  6.         dd i_end ;à §¬¥à ¯à¨«®¦¥­¨ï
  7.         dd mem
  8.         dd stacktop
  9.         dd 0x0
  10.         dd sys_path
  11.  
  12. include '../../../macros.inc'
  13. include '../../../proc32.inc'
  14. include '../../../develop/libraries/box_lib/load_lib.mac'
  15. include 'mem.inc'
  16. include 'dll.inc'
  17.  
  18. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
  19.  
  20. ;ä« £¨, ¤«ï ä㭪樨 ®¡à¥§ ­¨ï ¡ãä¥à 
  21. BUF2D_OPT_CROP_TOP equ 1 ;®¡à¥§ª  ᢥàåã
  22. BUF2D_OPT_CROP_LEFT equ 2 ;®¡à¥§ª  á«¥¢ 
  23. BUF2D_OPT_CROP_BOTTOM equ 4 ;®¡à¥§ª  á­¨§ã
  24. BUF2D_OPT_CROP_RIGHT equ 8 ;®¡à¥§ª  á¯à ¢ 
  25. BUF2D_BIT_OPT_CROP_TOP equ 0
  26. BUF2D_BIT_OPT_CROP_LEFT equ 1
  27. BUF2D_BIT_OPT_CROP_BOTTOM equ 2
  28. BUF2D_BIT_OPT_CROP_RIGHT equ 3
  29.  
  30. BUF_STRUCT_SIZE equ 21
  31. buf2d_data equ dword[edi] ;¤ ­­ë¥ ¡ãä¥à  ¨§®¡à ¦¥­¨ï
  32. buf2d_w equ dword[edi+8] ;è¨à¨­  ¡ãä¥à 
  33. buf2d_h equ dword[edi+12] ;¢ëá®â  ¡ãä¥à 
  34. buf2d_l equ word[edi+4] ;®âáâ㯠᫥¢ 
  35. buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã
  36. buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢  ¨ á¯à ¢  ¤«ï ¡ãä¥à 
  37. buf2d_color equ dword[edi+16] ;梥â ä®­  ¡ãä¥à 
  38. buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥­¨ï
  39.  
  40. struct FileInfoBlock
  41.         Function dd ?
  42.         Position dd ?
  43.         Flags    dd ?
  44.         Count    dd ?
  45.         Buffer   dd ?
  46.                 db ?
  47.         FileName dd ?
  48. ends
  49.  
  50. displ_w dd ? ;è¨à¨­  ¯®«ï
  51. displ_h dd ? ;¢ëá®â  ¯®«ï
  52. displ_bytes dd ? ;à §¬¥à 1-£® ä ©«  á ¨§®¡à ¦¥­¨¥¬
  53. offs_shadow_x dd ? ;ᤢ¨£ ⥭¥© ¯® ®á¨ 'x'
  54. offs_shadow_y dd ? ;ᤢ¨£ ⥭¥© ¯® ®á¨ 'y'
  55.  
  56. IMAGE_FONT_SIZE equ 128*144*3
  57.  
  58. BUT1_T equ 10 ;®âáâ㯠ᢥàåã
  59. BUT1_L equ 15 ;®âáâ㯠᫥¢ 
  60. BUT1_W equ 50 ;è¨à¨­ 
  61. BUT1_H equ 20 ;¢ëá®â 
  62. BUT1_NEXT_TOP equ (BUT1_T+BUT1_H)*65536
  63.  
  64.  
  65. FILE_NAME_MAX equ 20 ;¬ ªá¨¬ «ì­ ï ¤«¨­­  ¨¬¥­¨ ä ©«  (¡¥§ ¯ ¯®ª, ®â­®á¨â¥«ì­® ⥪ã饩)
  66. ;§­ ç¥­¨ï ¨¬¥­ ¯® 㬮«ç ­¨î
  67. ini_def_decorat_file db 'curici.png',0
  68. ini_def_unit_file db 'wolf.png',0
  69. ini_def_objects_file db 'eggs.png',0
  70. ;¨¬¥­  ä ©«®¢
  71. fn_icon0 rb FILE_NAME_MAX ;¨¬ï ä ©«  á ¤¥ª®à æ¨ï¬¨
  72. fn_icon1 rb FILE_NAME_MAX ;¨¬ï ä ©«  á ¢®«ª®¬ ¨ § ©æ¥¬
  73. fn_icon2 rb FILE_NAME_MAX ;¨¬ï ä ©«  á ï©æ ¬¨
  74. fn_icon3 db 'chi.png',0 ;¨¬ï ä ©«  á 樯«ïâ ¬¨
  75. fn_font db 'font8x9.bmp',0
  76.  
  77. ini_name db 'nu_pogod.ini',0
  78. ini_sec_files db 'Files',0
  79. key_file_decorat db 'file_decorat',0
  80. key_file_unit db 'file_unit',0
  81. key_file_objects db 'file_objects',0
  82. key_displ_w db 'displ_w',0
  83. key_displ_h db 'displ_h',0
  84. key_shadow_x db 'offs_shadow_x',0
  85. key_shadow_y db 'offs_shadow_y',0
  86.  
  87. ini_sec_game db 'Game',0
  88. key_delay_a db 'delay_a',0
  89. key_delay_b db 'delay_b',0
  90. key_delay_min db 'delay_min',0
  91.  
  92. ini_sec_color db 'Colors',0
  93. ;ª«îç¨ ¤«ï áç¨â뢠­¨ï 梥⮢ ¨§ *.ini ä ©« 
  94. key_color_fon db 'background',0
  95. key_color_shadows db 'shadows',0
  96. key_color_egg db 'objects',0
  97. key_color_chick db 'lost',0
  98. key_color_decorat: db 'dec'
  99.         .ind: db '?',0
  100. key_color_unit db 'unit',0
  101.  
  102. ;æ¢¥â  ¢ ¨£à¥
  103. color_fon dd ? ;梥â ä®­ 
  104. color_shadows dd ? ;梥â ⥭¥©
  105. color_wolf dd ? ;梥⠢®«ª  ¨ § ©æ 
  106. color_egg dd ? ;梥â ï©æ 
  107. color_chick dd ? ;梥â 樯«¥­ª 
  108. color_decorat dd ?,?,? ;æ¢¥â  ¤¥ª®à æ¨© (ªãà¨æë, ¯¥à¨« , ...)
  109.  
  110. ;æ¢¥â  ¨­â¥à䥩á 
  111. color_but_sm dd 0x808080 ;梥⠬ «¥­ìª¨å ª­®¯®ª
  112. color_but_te dd 0xffffff ;梥â ⥪áâ  ­  ª­®¯ª å
  113.  
  114. macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥­¨©
  115.         copy_path path,sys_path,file_name,0x0 ;ä®à¬¨à㥬 ¯®«­ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥­¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ®­ ¢ ®¤­®© ¯ ¯ª¥ á ¯à®£à ¬¬®©
  116.  
  117.         stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥­¨ï
  118.         mov [buf],eax
  119.  
  120.         mov eax,70 ;70-ï äã­ªæ¨ï à ¡®â  á ä ©« ¬¨
  121.         mov [run_file_70.Function], 0
  122.         mov [run_file_70.Position], 0
  123.         mov [run_file_70.Flags], 0
  124.         mov [run_file_70.Count], dword size
  125.         m2m [run_file_70.Buffer], [buf]
  126.         mov byte[run_file_70+20], 0
  127.         mov [run_file_70.FileName], file_name
  128.         mov ebx,run_file_70
  129.         int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥­¨ï
  130.         cmp ebx,0xffffffff
  131.         je @f
  132.                 ;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥­¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥­­ë© ¡ãä¥à image_data
  133.                 stdcall dword[img_decode], dword[buf],ebx,0
  134.                 mov dword[image_data],eax
  135.                 ;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥­¨¥ ª ä®à¬ âã rgb
  136.                 stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
  137.                 ;㤠«ï¥¬ ¢à¥¬¥­­ë© ¡ãä¥à image_data
  138.                 stdcall dword[img_destroy], dword[image_data]
  139.         @@:
  140. }
  141.  
  142. ;¤ ­­ë¥ ¨£àë
  143. bit_zaac equ 2 ;¡¨â § ©æ 
  144. val_zaac equ 4 ;æ¨äà  ®â¢¥ç îé ï §  ¡¨â § ©æ 
  145. bit_mig equ 3 ;¡¨â ¬¨£ ­¨ï
  146. val_mig equ 8 ;æ¨äà  ®â¢¥ç îé ï §  ¡¨â ¬¨£ ­¨ï
  147. mask_lot_lu    equ 1b ;¬ áª  ¤«ï «¥¢®£® ¢¥àå­¥£® «®âª 
  148. mask_lot_ld    equ 100000b ;¬ áª  ¤«ï «¥¢®£® ­¨¦­¥£® «®âª 
  149. mask_lot_ru    equ 10000000000b ;¬ áª  ¤«ï ¯à ¢®£® ¢¥àå­¥£® «®âª 
  150. mask_lot_rd    equ 1000000000000000b ;¬ áª  ¤«ï ¯à ¢®£® ­¨¦­¥£® «®âª 
  151. mask_clear_all equ 11111011111011110111101111011110b ;¬ áª  ¤«ï ®ç¨á⪨ ¯ ¤ îé¨å ï¨æ ¨ ¯à¨¡¥¦ ¢è¨å 樯«ïâ
  152. mask_move_eggs equ 11111111111111111111b ;¬ áª  ¤¢¨¦ãé¨åáï ï¨æ
  153. mask_fail_eggs equ 100001000010000100000b ;¬ áª  ¯ ¤ îé¨å ï¨æ
  154. mask_chi_left  equ 11111000000000000000000000b ;¬ áª  «¥¢ëå 樯«ïâ
  155. mask_chi_right equ 11111000000000000000000000000000b ;¬ áª  ¯à ¢ëå 樯«ïâ
  156. mask_chi_cr_l  equ 1000000000000000000000b ;¬ áª  ¤«ï ᮧ¤ ­¨ï «¥¢®£®
  157. mask_chi_cr_r  equ 1000000000000000000000000000b ;¬ áª  ¤«ï ᮧ¤ ­¨ï ¯à ¢®£®
  158. bit_chi_left  equ 21 ;1-© ¡¨â ª®â®àë© ®â¢¥ç ¥â §  ¡¥£ã饣® á«¥¢ 
  159. bit_chi_right equ 27 ;1-© ¡¨â ª®â®àë© ®â¢¥ç ¥â §  ¡¥£ã饣® ¯à ¢ 
  160. val_zaac_time_y equ 5 ;ª®««¨ç¥á⢮ ⠪⮢, ª®â®à®¥ ®¡ï§ â¥«ì­® ¤®«¦¥­ ¯à®¢¨á¥âì § ïæ
  161. val_zaac_time_n equ 7 ;ª®««¨ç¥á⢮ ⠪⮢, ª®â®à®¥ ®¡ï§ â¥«ì­® ¤®«¦¥­ ¡ëâì á¯àïâ ­­ë¬ § ïæ
  162.  
  163. txt_game_a db 'ˆ£à  €',0
  164. txt_game_b db 'ˆ£à  ',0
  165.  
  166. zaac_status db 0 ;ç¨á«® ⠪⮢, ª®â®à®¥ § ïæ ­¥ ¤®«¦¥­ ¬¥­ïâì ᢮¥ ¯®«®¦¥­¨¥
  167. pos_wolf db 0 ;¯®§¨æ¨ï ¢®«ª  0-© ¡¨â á«¥¢ /á¯à ¢ , 1-© ¡¨â ᢥàåã/¢­¨§
  168. ;rb 1
  169. pos_eggs dd 0 ;¯®§¨æ¨¨ à á¯®«®¦¥­¨ï ï¨æ ¨ 樯«ïâ
  170. eggs_count dw 0 ;ª®««¨ç¥á⢮ ¯®©¬ ­ëå ï¨æ
  171. game_text db 'ˆ£à  _',13
  172. some_text db '0'
  173.         rb 8 ;⥪áâ á ç¨á«®¬ ¯®©¬ ­­ëå ï¨æ
  174. count_last db 0 ;áç¥â稪 ¯à®¯ã饭­ëå ï¨æ
  175. game_spd dd 0 ;§ ¤¥à¦ª  ¨£àë
  176. game_delay_a dd ? ;¯¥à¢®­ ç «ì­ ï § ¤¥à¦ª  ¤«ï ¨£àë €
  177. game_delay_b dd ? ;¯¥à¢®­ ç «ì­ ï § ¤¥à¦ª  ¤«ï ¨£àë 
  178. game_delay_min dd ? ;¬¨­¨¬ «ì­ ï § ¤¥à¦ª 
  179.  
  180. ;¤«ï £¥­¥à æ¨¨ á«ãç ©­ëå ç¨á¥«
  181. rand_x dd 0
  182.  
  183. align 4
  184. rand_next:
  185. ;x(k+1) = (a*x(k)+c) mod m
  186. ; a=22695477, c=1, m=2^32
  187. push eax
  188.         mov eax,dword[rand_x]
  189.         imul eax,22695477
  190.         inc eax
  191.         mov dword[rand_x],eax
  192. pop eax
  193.         ret
  194.  
  195. ;ᮧ¤ ¥¬ ¯à®§à ç­ë¥ ¡ãä¥à  ¯® 8 ¡¨â (âà ä à¥âë), ¤«ï à¨á®¢ ­¨ï
  196. ;£¤¥ buf - ¡ãä¥à ­  ®á­®¢¥ ª®â®à®£® ¡ã¤¥â ᮧ¤ ­ âà ä à¥â
  197. ;ä®­®¢ë© 梥⠡ãä¥à  ¤®«¦¥­ ¡ëâì 0xffffff, ¨­ ç¥ ­¥ ¯à®¨§®©¤¥â ®¡à¥§ª 
  198. ;¯® ä®­®¢®¬ã 梥âã ¨ âà ä à¥â ¡ã¤¥â § ­¨¬ â 쬭®£® ¬¥áâ  ¢ ¯ ¬ïâ¨
  199. align 4
  200. proc CreateTrapharetBuffer, buf:dword, img_data:dword
  201.         push eax edi
  202.         mov edi,dword[buf]
  203.  
  204.         ;§ ¯®«­¥­¨¥ ¤ ­­ëå ¡ãä¥à 
  205.         mov buf2d_size_lt,0
  206.         mov eax,dword[displ_w]
  207.         mov buf2d_w,eax
  208.         mov eax,dword[displ_h]
  209.         mov buf2d_h,eax
  210.         mov buf2d_color,0xffffff
  211.         mov buf2d_bits,24
  212.  
  213.         stdcall [buf2d_create_f_img], edi,[img_data] ;ᮧ¤ ¥¬ ¡ãä¥à
  214.         stdcall [buf2d_conv_24_to_8], edi,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8¡¨â
  215.         ;®¡à¥§ ¥¬ «¨è­¨¥ ªà ï ¡ãä¥à , ¤«ï ¡®«¥¥ ¡ëáâண® à¨á®¢ ­¨ï
  216.         stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT+BUF2D_OPT_CROP_LEFT
  217.         pop edi eax
  218.         ret
  219. endp
  220.  
  221. align 4
  222. InitBackgroundBuffer: ;ᮧ¤ ­¨¥ ä®­®¢®£® ¨§®¡à ¦¥­¨ï
  223.         pushad
  224.         mov edi,buf_fon
  225.         mov eax,[color_fon]
  226.         mov buf2d_color,eax
  227.         stdcall [buf2d_clear], edi,eax
  228.         mov esi,edi
  229.  
  230.         xor eax,eax
  231.         cld
  232.         cmp dword[offs_shadow_x],0
  233.         jne @f
  234.         cmp dword[offs_shadow_y],0
  235.         jne @f
  236.                 jmp .end_shadows
  237.         @@:
  238.                 mov edi,buf_decor
  239.                 xor ebx,ebx
  240.                 mov ecx,3
  241.                 @@:
  242.                         mov ax,buf2d_t
  243.                         add eax,[offs_shadow_y]
  244.                         mov bx,buf2d_l
  245.                         add ebx,[offs_shadow_x]
  246.                         stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;à¨á㥬 ⥭¨ ¤¥ª®à æ¨©
  247.                         add edi,BUF_STRUCT_SIZE
  248.                         loop @b
  249.         .end_shadows:
  250.  
  251.         mov edi,buf_decor
  252.         mov ebx,color_decorat
  253.         mov ecx,3
  254.         @@:
  255.                 mov ax,buf2d_t
  256.                 stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[ebx] ;à¨á㥬 ¤¥ª®à æ¨¨
  257.                 add edi,BUF_STRUCT_SIZE
  258.                 add ebx,4
  259.                 loop @b
  260.         popad
  261.         ret
  262.  
  263. ;à¨áã¥â ª à⨭ªã ¢ ¡ãä¥à¥ buf ¨§ ¬ áᨢ  ¡ãä¥à®¢ buf_img á ¨­¤¥ªá®¬ ind
  264. ;â. ¥. buf <- buf_img[ind]
  265. align 4
  266. proc DrawArrayImg, buf:dword, buf_img:dword, ind:dword, color:dword
  267.         pushad
  268.                 mov edi,dword[ind]
  269.                 imul edi,BUF_STRUCT_SIZE
  270.                 add edi,dword[buf_img]
  271.  
  272.                 mov esi,dword[buf]
  273.                 xor eax,eax
  274.                 mov ax,buf2d_t
  275.                 xor ebx,ebx
  276.                 mov bx,buf2d_l
  277.                 stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color]
  278.         popad
  279.         ret
  280. endp
  281.  
  282. align 4
  283. DrawZaac: ;à¨á®¢ ­¨¥ § ©æ 
  284.         push eax
  285.         bt word[pos_wolf],bit_zaac
  286.         jae .end_mig
  287.  
  288.         stdcall DrawArrayImg, buf_displ,buf_wolf,6,[color_wolf] ;à¨á㥬 ⥫® § ©æ 
  289.         mov eax,dword[pos_eggs]
  290.         and eax,mask_chi_right+mask_chi_left
  291.         cmp eax,0
  292.         je .end_mig ;¥á«¨ ­¥â ¡¥£ îé¨å 樯«ïâ, â® § ïæ à㪮© ­¥ ¬ è¥â
  293.         bt word[pos_wolf],bit_mig
  294.         jc @f
  295.                 stdcall DrawArrayImg, buf_displ,buf_wolf,7,[color_wolf] ;à¨á㥬 àãªã § ©æ  ¢¢¥àåã
  296.                 jmp .end_mig
  297.         @@:
  298.                 stdcall DrawArrayImg, buf_displ,buf_wolf,8,[color_wolf] ;à¨á㥬 àãªã § ©æ  ¢­¨§ã
  299.         .end_mig:
  300.         pop eax
  301.         ret
  302.  
  303. align 4
  304. DrawWolf: ;à¨áã¥â ¢®«ª  á ª®à§¨­ ¬¨
  305.         bt word[pos_wolf],0
  306.         jc @f
  307.                 stdcall DrawArrayImg, buf_displ,buf_wolf,0,[color_wolf]
  308.                 bt word[pos_wolf],1
  309.                 jc .corz_ldn
  310.                         stdcall DrawArrayImg, buf_displ,buf_wolf,1,[color_wolf]
  311.                         jmp .corz_lend
  312.                 .corz_ldn:
  313.                         stdcall DrawArrayImg, buf_displ,buf_wolf,2,[color_wolf]
  314.                 .corz_lend:
  315.                 jmp .wolf_b
  316.         @@:
  317.                 stdcall DrawArrayImg, buf_displ,buf_wolf,3,[color_wolf]
  318.                 bt word[pos_wolf],1
  319.                 jc .corz_rdn
  320.                         stdcall DrawArrayImg, buf_displ,buf_wolf,4,[color_wolf]
  321.                         jmp .corz_rend
  322.                 .corz_rdn:
  323.                         stdcall DrawArrayImg, buf_displ,buf_wolf,5,[color_wolf]
  324.                 .corz_rend:
  325.         .wolf_b:
  326.         ret
  327.  
  328. align 4
  329. DrawEggs: ;à¨áã¥â ï©æ 
  330.         pushad
  331.         cld
  332.  
  333.         mov eax,dword[pos_eggs]
  334.         xor ebx,ebx
  335.         mov ecx,20 ;横« ¤«ï à¨á®¢ ­¨ï ª®âïé¨åáï ï¨æ
  336.         @@:
  337.                 bt eax,ebx
  338.                 jae .draw_egg
  339.                         stdcall DrawArrayImg, buf_displ,buf_egg,ebx,[color_egg]
  340.                 .draw_egg:
  341.                 inc ebx
  342.                 loop @b
  343.  
  344.         ;mov eax,dword[pos_eggs]
  345.         and eax,mask_chi_left
  346.         cmp eax,0
  347.         je @f
  348.                 stdcall DrawArrayImg, buf_displ,buf_egg,20,[color_egg] ;à §¡¨â®¥ ï©æ® á«¥¢ 
  349.         @@:
  350.         mov eax,dword[pos_eggs]
  351.         and eax,mask_chi_right
  352.         cmp eax,0
  353.         je @f
  354.                 stdcall DrawArrayImg, buf_displ,buf_egg,21,[color_egg] ;à §¡¨â®¥ ï©æ® á¯à ¢ 
  355.         @@:
  356.  
  357.         mov eax,dword[pos_eggs]
  358.         xor edx,edx
  359.         mov ebx,bit_chi_left
  360.         mov ecx,5 ;横« ¤«ï à¨á®¢ ­¨ï «¥¢ëå 樯«ïâ
  361.         @@:
  362.                 bt eax,ebx
  363.                 jae .draw_chick_l
  364.                         stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
  365.                 .draw_chick_l:
  366.                 inc ebx
  367.                 inc edx
  368.                 loop @b
  369.         mov ebx,bit_chi_right
  370.         mov ecx,5 ;横« ¤«ï à¨á®¢ ­¨ï ¯à ¢ëå 樯«ïâ
  371.         @@:
  372.                 bt eax,ebx
  373.                 jae .draw_chick_r
  374.                         stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
  375.                 .draw_chick_r:
  376.                 inc ebx
  377.                 inc edx
  378.                 loop @b
  379.  
  380.         xor eax,eax
  381.         mov al,byte[count_last]
  382.         mov ecx,eax ;横« ¤«ï à¨á®¢ ­¨ï èâà ä­ëå ®çª®¢
  383.         shr ecx,1
  384.         mov edx,10 ;¨­¤¥ªá ­ ç «  èâà ä­ëå ¨ª®­®ª ¢ ¡ãä¥à¥ buf_chi
  385.         cmp ecx,0
  386.         je .no_unit_last
  387.         @@:
  388.                 stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
  389.                 inc edx
  390.                 loop @b
  391.         .no_unit_last:
  392.  
  393.         bt ax,0 ;¯à®¢¥à塞 ¬¨£ î饥 ­¥ ç¥â­®¥ ®çª®
  394.         jae @f
  395.                 bt word[pos_wolf],bit_mig
  396.                 jc @f
  397.                         stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] ;¬¨£ î饥 èâà ä­®¥ ®çª®
  398.         @@:
  399.  
  400.         popad
  401.         ret
  402.  
  403. align 4
  404. CountEggsInc: ;㢥«¨ç¨¢ ¥¬ áç¥â稪 ï¨æ ­  1
  405.         push eax edi
  406.                 xor eax,eax
  407.                 inc word[eggs_count] ;㢥«¨ç¨¢ ¥¬ áç¥â稪 ï¨æ
  408.                 cmp word[eggs_count],200 ;¡®­ãá­ë¥ ®çª¨
  409.                 je @f
  410.                 cmp word[eggs_count],500 ;¡®­ãá­ë¥ ®çª¨
  411.                 je @f
  412.                         jmp .no_bonus
  413.                 @@:
  414.                         mov byte[count_last],0
  415.                 .no_bonus:
  416.  
  417.                 mov ax,word[eggs_count]
  418.                 mov edi,some_text
  419.                 call convert_to_str ;®¡­®¢«ï¥¬ ⥪á⮢ãî áâபã
  420.                 and ax,0xf ;ç¥à¥§ ª ¦¤ë¥ 16 ï¨æ 㬥­ìè ¥¬ ¢à¥¬ï
  421.                 cmp ax,0
  422.                 jne @f
  423.                         mov edi,dword[game_delay_min] ;¬¨­¨¬ «ì­ ï § ¤¥à¦ª 
  424.                         cmp dword[game_spd],edi
  425.                         jle @f
  426.                                 dec dword[game_spd]
  427.                 @@:
  428.         pop edi eax
  429.         ret
  430.  
  431. ;input:
  432. ; eax - ¬ áª , 㪠§ë¢ îé ï á ª ª®© áâà®­ë 㯠«® ï©æ®
  433. align 4
  434. CountLastInc: ;­ ç¨á«¥­¨¥ èâà ä­ëå ®çª®¢
  435.         inc byte[count_last] ;¯®«®¢¨­ ® èâà ä­®£® ®çª 
  436.         bt word[pos_wolf],bit_zaac
  437.         jc @f
  438.                 inc byte[count_last] ;¥á«¨ ­¥â § ©æ  â® ¥é¥ 1-­  ¯®«®¢¨­  èâà ä­®£® ®çª 
  439.         @@:
  440.         cmp byte[count_last],6
  441.         jle @f
  442.                 mov byte[count_last],6 ;áâ ¢¨¬ ®£à ­¨ç¥­¨ ­  ç¨á«® èâà ä­ëå ®çª®¢
  443.         @@:
  444.         or dword[pos_eggs],eax ;ᮧ¤ ¥¬ ¡¥£ã饣® 樯«¥­ª 
  445.         ret
  446.  
  447. align 4
  448. MoveEggs:
  449.         pushad
  450.         xor byte[pos_wolf],val_mig ;¡¨â ¤«ï ¬¨£ ­¨ï
  451.  
  452.         cmp byte[count_last],6 ;¬ ªá¨¬ «ì­®¥ ç¨á«® èâà ä­ëå ®çª®¢
  453.         je .end_fun
  454.  
  455.         rol dword[pos_eggs],1
  456.         mov ecx,dword[pos_eggs]
  457.         and ecx,mask_fail_eggs
  458.         cmp ecx,0
  459.         je .no_fail ;­¥â ¯ ¤ îé¨å ï¨æ
  460.                 ;­ ç¨á«¥­¨¥ ï¨æ ¯®¯ ¢è¨å ¢ ª®à§¨­ã
  461.                 ;¨«¨ ­ ç¨á«¥­¨¥ èâà ä­ëå ®çª®¢
  462.                 xor ebx,ebx
  463.                 mov bl,byte[pos_wolf] ;¡¥à¥¬ ¯ à ¬¥âàë (¯®§¨æ¨î) ¢®«ª 
  464.                 and bl,3 ;­  ¢á直© á«ãç ©
  465.  
  466.                 bt ecx,5 ;¯à®¢¥à塞 ¢¥àå­¥¥ «¥¢®¥ ¯¥à¨«®
  467.                 jae .perilo_lu
  468.                         cmp bx,0 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
  469.                         jne @f
  470.                                 call CountEggsInc
  471.                                 jmp .perilo_lu
  472.                         @@:
  473.                                 mov eax,mask_chi_cr_l
  474.                                 call CountLastInc
  475.                         .perilo_lu:
  476.                 bt ecx,10 ;¯à®¢¥à塞 ­¨¦­¥¥ «¥¢®¥ ¯¥à¨«®
  477.                 jae .perilo_ld
  478.                         cmp bx,2 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
  479.                         jne @f
  480.                                 call CountEggsInc
  481.                                 jmp .perilo_ld
  482.                         @@:
  483.                                 mov eax,mask_chi_cr_l
  484.                                 call CountLastInc
  485.                 .perilo_ld:
  486.                 bt ecx,15 ;¯à®¢¥à塞 ¢¥àå­¥¥ ¯à ¢®¥ ¯¥à¨«®
  487.                 jae .perilo_ru
  488.                         cmp bx,1 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
  489.                         jne @f
  490.                                 call CountEggsInc
  491.                                 jmp .perilo_ru
  492.                         @@:
  493.                                 mov eax,mask_chi_cr_r
  494.                                 call CountLastInc
  495.                 .perilo_ru:
  496.                 bt ecx,20 ;¯à®¢¥à塞 ­¨¦­¥¥ ¯à ¢®¥ ¯¥à¨«®
  497.                 jae .perilo_rd
  498.                         cmp bx,3 ;¯à®¢¥à塞 ­ «¨ç¨¥ ª®à§¨­ë
  499.                         jne @f
  500.                                 call CountEggsInc
  501.                                 jmp .perilo_rd
  502.                         @@:
  503.                                 mov eax,mask_chi_cr_r
  504.                                 call CountLastInc
  505.                 .perilo_rd:
  506.         .no_fail:
  507.  
  508.         and dword[pos_eggs],mask_clear_all ;®ç¨á⪠ 㯠¢è¨å ï¨æ ¨ ¤®¡¥¦ ¢è¨å ªã३
  509.  
  510.         call rand_next
  511.         cmp byte[zaac_status],0
  512.         jle @f
  513.                 dec byte[zaac_status]
  514.                 jmp .no_zaac_move ;§ ïæ ¯®ª  ­¥ ¤¢¨£ ¥âáï
  515.         @@:
  516.        
  517.         bt dword[rand_x],6 ;§ ïæ ®â ä®­ àï ¬¥­ï¥â áâ âãá
  518.         jc @f
  519.                 xor byte[pos_wolf],val_zaac ;¢ëᮢ뢠¥¬/§ á®¢ë¢ ¥¬ § ©æ 
  520.                 bt word[pos_wolf],val_zaac
  521.                 jc .zaac_n
  522.                         mov byte[zaac_status],val_zaac_time_y ;áâ ¢¨¬ ¬¨­¨¬ «ì­®¥ ¢à¥¬ï ¤«ï ᬥ­ë áâ âãá 
  523.                         jmp @f
  524.                 .zaac_n:
  525.                         mov byte[zaac_status],val_zaac_time_n ;áâ ¢¨¬ ¬¨­¨¬ «ì­®¥ ¢à¥¬ï ¤«ï ᬥ­ë áâ âãá 
  526.         @@:
  527.         .no_zaac_move:
  528.  
  529.         ;ᮧ¤ ­¨¥ ­®¢ëå ï¨æ
  530.         cmp word[eggs_count],5 ;¯¥à¢ë¥ 5 ï¨æ ª âïâáï ¯® 1-¬ã
  531.         jge @f
  532.                 mov ecx,dword[pos_eggs]
  533.                 and ecx,mask_move_eggs
  534.                 ;cmp ecx,0
  535.                 jnz .end_creat
  536.         @@:
  537.  
  538.         bt dword[rand_x],4 ;¯à®¢¥à塞 ¡ã¤¥¬ «¨ ᮧ¤ ¢ âì ­®¢®¥ ï©æ®
  539.         jc .end_creat
  540.         bt dword[rand_x],5 ;¯à®¢¥à塞 á ª ª®© áâ®à®­ë ¡ã¤¥¬ ᮧ¤ ¢ âì ­®¢®¥ ï©æ®
  541.         jc .creat_r
  542.                 bt dword[rand_x],7
  543.                 jc @f
  544.                         or dword[pos_eggs],mask_lot_lu
  545.                         jmp .end_creat
  546.                 @@:
  547.                         or dword[pos_eggs],mask_lot_ld
  548.                         jmp .end_creat
  549.         .creat_r:
  550.                 bt dword[rand_x],7
  551.                 jc @f
  552.                         or dword[pos_eggs],mask_lot_ru
  553.                         jmp .end_creat
  554.                 @@:
  555.                         or dword[pos_eggs],mask_lot_rd
  556.                         ;jmp .end_creat
  557.         .end_creat:
  558.  
  559.         .end_fun:
  560.         popad
  561.         ret
  562.  
  563. align 4
  564. proc InitGame, b:dword ;¯¥à¢®­ ç «ì­ë¥ ­ áâனª¨ ¨£àë
  565.         mov word[eggs_count],0 ;ª®««¨ç¥á⢮ ¯®©¬ ­ëå ï¨æ
  566.         mov byte[some_text],'0'
  567.         mov byte[some_text+1],0 ;⥪áâ á ç¨á«®¬ ¯®©¬ ­­ëå ï¨æ
  568.         mov byte[count_last],0 ;èâà ä­ë¥ ®çª¨
  569.         mov dword[pos_eggs],0
  570.         mov byte[zaac_status],0
  571.  
  572.         push eax ebx
  573.         cmp dword[b],0
  574.         jne @f
  575.                 mov byte[game_text+5],'€'
  576.                 mov eax,dword[game_delay_a]
  577.                 mov dword[game_spd],eax ;§ ¤¥à¦ª  ¨£àë
  578.                 jmp .end_init
  579.         @@:
  580.                 mov byte[game_text+5],''
  581.                 mov eax,dword[game_delay_b]
  582.                 mov dword[game_spd],eax ;§ ¤¥à¦ª  ¨£àë
  583.         .end_init:
  584.  
  585.         mcall 26,9
  586.         mov dword[rand_x],eax ;§ ¯®«­ï¥¬ 1-¥ á«ãç ©­®¥ ç¨á«®
  587.         pop ebx eax
  588.  
  589.         ret
  590. endp
  591.  
  592. align 4
  593. proc LoadArrayBuffer, f_name:dword, buf_start:dword, count:dword
  594.         pushad
  595.         mov edx,dword[displ_bytes]
  596.         mov ecx,edx
  597.         imul ecx,dword[count]
  598.         mov eax,dword[f_name]
  599.         load_image_file eax,image_data_gray,ecx
  600.                 mov edx,dword[displ_bytes]
  601.                 mov eax,[image_data_gray]
  602.                 mov edi,dword[buf_start]
  603.                 mov ecx,dword[count]
  604.                 cld
  605.                 @@: ;áç¨â뢠¥¬ 3 ¡ãä¥à  á ¤¥ª®à æ¨ï¬¨
  606.                         stdcall CreateTrapharetBuffer,edi,eax
  607.                         add eax,edx
  608.                         add edi,BUF_STRUCT_SIZE
  609.                         loop @b
  610.         stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
  611.         popad
  612.         ret
  613. endp
  614.  
  615. align 4
  616. start:
  617.         load_libraries l_libs_start,load_lib_end
  618.  
  619.         ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  «¨¡ 
  620.         mov     ebp,lib0
  621.         cmp     dword [ebp+ll_struc_size-4],0
  622.         jz      @f
  623.                 mcall -1 ;exit not correct
  624.         @@:
  625.         mov     ebp,lib1
  626.         cmp     dword [ebp+ll_struc_size-4],0
  627.         jz      @f
  628.                 mcall -1 ;exit not correct
  629.         @@:
  630.  
  631.         mcall 40,0x27
  632.         mcall 48,3,sc,sizeof.system_colors ;¯®«ãç ¥¬ á¨á⥬­ë¥ 梥â 
  633.  
  634.         ;à ¡®â  á ä ©«®¬ ­ áâ஥ª
  635.         copy_path ini_name,sys_path,file_name,0x0
  636.         stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_w,210
  637.         mov     dword[displ_w],eax
  638.         stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_h,140
  639.         mov     dword[displ_h],eax
  640.         stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file
  641.         stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file
  642.         stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file
  643.         stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_x,2
  644.         mov     dword[offs_shadow_x],eax
  645.         stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_y,2
  646.         mov     dword[offs_shadow_y],eax
  647.  
  648.         ;áç¨â뢠­¨¥ ­ áâ஥ª ¢«¨ïîé¨å ­  ᪮àáâì ¨£àë
  649.         stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_a,65
  650.         mov     dword[game_delay_a],eax
  651.         stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_b,35
  652.         mov     dword[game_delay_b],eax
  653.         stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_min,15
  654.         mov     dword[game_delay_min],eax
  655.        
  656.         stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff
  657.         mov     dword[color_fon],eax
  658.         stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0
  659.         mov     dword[color_shadows],eax
  660.         stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_unit,0
  661.         mov     dword[color_wolf],eax
  662.         stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080
  663.         mov     dword[color_egg],eax
  664.         stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0
  665.         mov     dword[color_chick],eax
  666.  
  667.         mov ebx,color_decorat
  668.         mov byte[key_color_decorat.ind],'0'
  669.         mov ecx,3
  670.         cld
  671.         @@:
  672.                 push ecx ;äã­ªæ¨ï ini_get_color ¨¬¥¥â ¯à ¢® ¬ ­ïâì ॣ¨áâà ecx
  673.                 stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080
  674.                 pop ecx
  675.                 mov dword[ebx],eax
  676.                 add ebx,4
  677.                 inc byte[key_color_decorat.ind]
  678.                 loop @b
  679.  
  680.         mov edx,dword[displ_w]
  681.         imul edx,dword[displ_h]
  682.         lea edx,[edx+edx*2]
  683.         mov dword[displ_bytes],edx ;¢ëç¨á«ï¥¬ à §¬¥à ¨£à®¢®£® ¯®«ï
  684.  
  685.         stdcall LoadArrayBuffer, fn_icon0, buf_decor,3 ;áç¨â뢠¥¬ 3 ¡ãä¥à  á ¤¥ª®à æ¨ï¬¨
  686.         stdcall LoadArrayBuffer, fn_icon1, buf_wolf,9 ;áç¨â뢠¥¬ 9 ¡ãä¥à®¢ á ¢®«ª®¬ ¨ § ©æ¥¬
  687.         stdcall LoadArrayBuffer, fn_icon2, buf_egg,22 ;áç¨â뢠¥¬ 22 ¡ãä¥à®¢ á ï©æ ¬¨
  688.         stdcall LoadArrayBuffer, fn_icon3, buf_chi,13 ;áç¨â뢠¥¬ 13 ¡ãä¥à®¢ á 樯«ïâ ¬¨
  689.  
  690.         load_image_file fn_font, image_data_gray,IMAGE_FONT_SIZE
  691.         stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;ᮧ¤ ¥¬ ¡ãä¥à
  692.         stdcall mem.Free,[image_data_gray] ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì
  693.  
  694.         stdcall [buf2d_conv_24_to_8], buf_font,1 ;¤¥« ¥¬ ¡ãä¥à ¯à®§à ç­®á⨠8 ¡¨â
  695.         stdcall [buf2d_convert_text_matrix], buf_font
  696.  
  697. ;¯à®¢¥àª  § ­¨¬ ¥¬®£® ¡ãä¥à®¬ ¬¥áâ 
  698. ;mov edi,buf_wolf
  699. ;add edi,BUF_STRUCT_SIZE ;¯¥à¥å®¤¨¬ ­  ¡ãä¥à ª®à§¨­ë
  700. ;stdcall [buf2d_clear],edi,0x808080 ;§ «¨¢ ¥¬ ¥£® á¥àë¬ æ¢¥â®¬
  701.  
  702.         mov ebx,dword[displ_w]
  703.         mov edx,dword[displ_h]
  704.  
  705.         mov edi,buf_displ
  706.         mov buf2d_w,ebx
  707.         mov buf2d_h,edx
  708.         stdcall [buf2d_create], buf_displ ;ᮧ¤ ¥¬ ¡ãä¥à ¤«ï ¢ë¢®¤  ­  íªà ­
  709.  
  710.         mov edi,buf_fon
  711.         mov buf2d_w,ebx
  712.         mov buf2d_h,edx
  713.         stdcall [buf2d_create], buf_fon ;ᮧ¤ ¥¬ ¡ãä¥à á ä®­®¢ë¬¨ ¤¥ª®à æ¨ï¬¨
  714.  
  715.         call InitBackgroundBuffer ;§ ¯®«­ï¥¬ ¡ãä¥à á ä®­®¢ë¬¨ ¤¥ª®à æ¨ï¬¨
  716.         stdcall InitGame,0
  717.         mcall 26,9
  718.         mov [last_time],ebx
  719.  
  720.  
  721.  
  722. align 4
  723. red_win:
  724.         call draw_window
  725.  
  726. align 4
  727. still: ;£« ¢­ë© 横«
  728.         mcall 26,9
  729.         mov ebx,[last_time]
  730.         add ebx,dword[game_spd] ;delay
  731.         sub ebx,eax
  732.         cmp ebx,dword[game_spd] ;delay
  733.         ja it_is_time_now
  734.         test ebx,ebx
  735.         jz it_is_time_now
  736.         mcall 23
  737.  
  738.         cmp eax,0
  739.         je it_is_time_now
  740.  
  741.         ;mcall 10
  742.  
  743.         cmp al,0x1 ;¨§¬¥­¨«®áì ¯®«®¦¥­¨¥ ®ª­ 
  744.         jz red_win
  745.         cmp al,0x2
  746.         jz key
  747.         cmp al,0x3
  748.         jz button
  749.  
  750.         jmp still
  751.  
  752. align 4
  753. it_is_time_now:
  754.         mcall 26,9
  755.         mov [last_time],eax
  756.  
  757.         ;...§¤¥áì ¨¤ãâ ¤¥©á⢨ï, ¢ë§ë¢ ¥¬ë¥ ª ¦¤ë¥ delay á®âëå ¤®«¥© ᥪ㭤...
  758.         call MoveEggs
  759.         call draw_display
  760.         jmp still
  761.  
  762. align 4
  763. key:
  764.         push eax ebx
  765.         mcall 2
  766.  
  767.         cmp ah,176 ;Left
  768.         jne @f
  769.                 and byte[pos_wolf],0xfe
  770.         @@:
  771.         cmp ah,179 ;Right
  772.         jne @f
  773.                 or byte[pos_wolf],1
  774.         @@:
  775.         cmp ah,178 ;Up
  776.         jne @f
  777.                 and byte[pos_wolf],0xff-2
  778.         @@:
  779.         cmp ah,177 ;Down
  780.         jne @f
  781.                 or byte[pos_wolf],2
  782.         @@:
  783.  
  784.         cmp ah,97 ;a
  785.         jne @f
  786.                 and byte[pos_wolf],0xff-3 ;00
  787.         @@:
  788.         cmp ah,122 ;z
  789.         jne @f
  790.                 and byte[pos_wolf],0xff-1
  791.                 or byte[pos_wolf],2 ;10
  792.         @@:
  793.         cmp ah,39 ;'
  794.         jne @f
  795.                 and byte[pos_wolf],0xff-2
  796.                 or byte[pos_wolf],1 ;01
  797.         @@:
  798.         cmp ah,47 ;/
  799.         jne @f
  800.                 or byte[pos_wolf],3 ;11
  801.         @@:
  802.  
  803.         pop ebx eax
  804.         jmp still
  805.  
  806.  
  807. align 4
  808. draw_window:
  809.         pushad
  810.         mcall 12,1
  811.  
  812.         xor eax,eax
  813.         mov ebx,20*65536+480
  814.         mov ecx,20*65536+270
  815.         mov edx,[sc.work]
  816.         ;or edx,0x33000000
  817.         or edx,0x73000000
  818.         mov edi,hed
  819.         mcall ;ᮧ¤ ­¨¥ ®ª­ 
  820.  
  821.         mcall 9,procinfo,-1
  822.         mov edi,buf_displ
  823.         mov eax,dword[procinfo.client_box.width]
  824.         cmp eax,dword[displ_w]
  825.         jle @f
  826.                 sub eax,dword[displ_w]
  827.                 shr eax,1
  828.                 mov buf2d_l,ax ;¢ë¯à ¢­¨¢ ¥¬ ¡ãä¥à ¯® 業âàã ®ª­ 
  829.         @@:
  830.  
  831.         call draw_display
  832.  
  833.         mov eax,13 ;à¨á®¢ ­¨¥ ¯àאַ㣮«ì­¨ª 
  834.         mov edx,[sc.work]
  835.         xor esi,esi
  836.         mov si,buf2d_l
  837.         add esi,dword[displ_w]
  838.         mov ebx,dword[procinfo.client_box.width]
  839.         inc ebx
  840.         cmp esi,ebx
  841.         jge @f
  842.                 sub ebx,esi
  843.                 rol ebx,16
  844.                 mov bx,si
  845.                 rol ebx,16
  846.                 mov ecx,dword[procinfo.client_box.height]
  847.                 inc ecx
  848.                 int 0x40 ;à¨á®¢ ­¨¥ ¯à ¢®£® ¡®ª®¢®£® ¯®«ï
  849.                 jmp .draw_s
  850.         @@:
  851.                 mov esi,dword[procinfo.client_box.width] ;ª®£¤  ¯® è¨à¨­¥ ­¥ ¢« §¨â
  852.                 inc esi
  853.         .draw_s:
  854.  
  855.         ; *** à¨á®¢ ­¨¥ ª­®¯®ª ***
  856. push esi
  857.         mov eax,8
  858.         xor ebx,ebx
  859.         mov bx,buf2d_l
  860.         add ebx,buf2d_w
  861.         add ebx,BUT1_L
  862.         shl ebx,16
  863.         mov bx,BUT1_W
  864.         mov ecx,BUT1_T*65536+BUT1_H
  865.         mov edx,5
  866.         ;or edx,0x40000000
  867.         mov esi,dword[color_but_sm]
  868.         int 0x40
  869.  
  870.         inc edx
  871.         add ecx,BUT1_NEXT_TOP
  872.         int 0x40
  873. pop esi
  874.  
  875.         mov eax,4 ; ð¡R÷ÿ-ð? ¢?ò¡¢ÿ
  876.         mov bx,BUT1_H
  877.         add ebx,3*65536;+3
  878.         mov ecx,dword[color_but_te]
  879.         or  ecx,0x80000000
  880.         mov edx,txt_game_a
  881.         int 0x40
  882.  
  883.         ror ebx,16
  884.         add ebx,BUT1_NEXT_TOP
  885.         ror ebx,16
  886.         mov edx,txt_game_b
  887.         int 0x40
  888.  
  889.         ; *** ¢®ááâ ­®¢«¥­¨¥ ¯ à ¬¥â஢ ***
  890.         mov eax,13 ;à¨á®¢ ­¨¥ ¯àאַ㣮«ì­¨ª 
  891.         mov edx,[sc.work]
  892.  
  893.         mov ebx,esi
  894.         mov ecx,dword[procinfo.client_box.height]
  895.         inc ecx
  896.         mov esi,dword[displ_h]
  897.         cmp esi,ebx
  898.         jge @f
  899.                 sub ecx,esi
  900.                 rol ecx,16
  901.                 mov cx,si
  902.                 rol ecx,16
  903.                 int 0x40 ;à¨á®¢ ­¨¥ ­¨¦­¥£® ¯®«ï
  904.         @@:
  905.        
  906.         xor ebx,ebx
  907.         mov bx,buf2d_l
  908.         mov ecx,dword[displ_h]
  909.         int 0x40 ;à¨á®¢ ­¨¥ «¥¢®£® ¡®ª®¢®£® ¯®«ï
  910.  
  911.         mcall 12,2
  912.         popad
  913.         ret
  914.  
  915. align 4
  916. draw_display:
  917.  
  918.         stdcall mem_copy, dword[buf_fon],dword[buf_displ],315*210*3;dword[displ_bytes] ;ª®¯¨à®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¨§ ä®­®¢®£® ¡ãä¥à 
  919.         call DrawZaac ;à¨á㥬 § ©æ 
  920.         call DrawWolf ;à¨á㥬 ¢®«ª 
  921.         call DrawEggs ;à¨á㥬 ï©æ 
  922.  
  923. push eax
  924.         mov eax,dword[displ_w]
  925.         shr eax,1
  926.         stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;à¨á㥬 áâபã á ⥪á⮬
  927. pop eax
  928.         stdcall [buf2d_draw], buf_displ
  929.         ret
  930.  
  931. align 4
  932. button:
  933.         mcall 17 ;¯®«ãç¨âì ª®¤ ­ ¦ â®© ª­®¯ª¨
  934.  
  935.         cmp ah,5
  936.         jne @f
  937.                 stdcall InitGame,0
  938.         @@:
  939.         cmp ah,6
  940.         jne @f
  941.                 stdcall InitGame,1
  942.         @@:
  943.         cmp ah,1
  944.         jne still
  945. .exit:
  946.         stdcall [buf2d_delete],buf_fon ;㤠«ï¥¬ ¡ãä¥à
  947.         stdcall [buf2d_delete],buf_displ ;㤠«ï¥¬ ¡ãä¥à
  948.  
  949.         stdcall [buf2d_delete],buf_font
  950.  
  951.         cld
  952.         mov ecx,3
  953.         mov edi,buf_decor
  954.         @@: ;㤠«ï¥¬ 3 ¡ãä¥à 
  955.                 stdcall [buf2d_delete],edi
  956.                 add edi,BUF_STRUCT_SIZE
  957.                 loop @b
  958.         mov ecx,9
  959.         mov edi,buf_wolf
  960.         @@: ;㤠«ï¥¬ 9 ¡ãä¥à®¢ á ¢®«ª®¬ ¨ § ©æ¥¬
  961.                 stdcall [buf2d_delete],edi
  962.                 add edi,BUF_STRUCT_SIZE
  963.                 loop @b
  964.         mov ecx,13
  965.         mov edi,buf_chi
  966.         @@: ;㤠«ï¥¬ 13 ¡ãä¥à®¢
  967.                 stdcall [buf2d_delete],edi
  968.                 add edi,BUF_STRUCT_SIZE
  969.                 loop @b
  970.         mov ecx,22
  971.         mov edi,buf_egg
  972.         @@: ;㤠«ï¥¬ 22 ¡ãä¥à 
  973.                 stdcall [buf2d_delete],edi
  974.                 add edi,BUF_STRUCT_SIZE
  975.                 loop @b
  976.  
  977.         mcall -1 ;¢ë室 ¨§ ¯à®£à ¬¬ë
  978.  
  979. head_f_i:
  980. head_f_l  db '‘¨á⥬­ ï ®è¨¡ª ',0
  981.  
  982. system_dir0 db '/sys/lib/'
  983. name_buf2d db 'buf2d.obj',0
  984. err_message_found_lib0 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã buf2d.obj',0
  985. err_message_import0 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ buf2d.obj',0
  986.  
  987. system_dir1 db '/sys/lib/'
  988. name_libimg db 'libimg.obj',0
  989. err_message_found_lib1 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã libimg.obj',0
  990. err_message_import1 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ libimg.obj',0
  991.  
  992. system_dir2 db '/sys/lib/'
  993. libini_name db 'libini.obj',0
  994. err_message_found_lib2 db '¥ 㤠«®áì ­ ©â¨ ¡¨¡«¨®â¥ªã libini.obj',0
  995. err_message_import2 db 'Žè¨¡ª  ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ libini.obj',0
  996.  
  997. ;library structures
  998. l_libs_start:
  999.         lib0 l_libs name_buf2d,  sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i
  1000.         lib1 l_libs name_libimg, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i
  1001.         lib2 l_libs libini_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, libini_import, err_message_import2, head_f_i
  1002. load_lib_end:
  1003.  
  1004. align 4
  1005. proc mem_copy, source:dword, destination:dword, len:dword
  1006.   push ecx esi edi
  1007.     cld
  1008.     mov esi, dword[source]
  1009.     mov edi, dword[destination]
  1010.     mov ecx, dword[len]
  1011.     rep movsb
  1012.   pop edi esi ecx
  1013.   ret
  1014. endp
  1015.  
  1016. align 4
  1017. convert_to_str:
  1018.         pushad
  1019.         ;mov eax,dword[value]
  1020.         ;mov edi,dword[text]
  1021.         mov dword[edi+1],0
  1022.         cld
  1023.         call .str
  1024.         popad
  1025.         ret
  1026.  
  1027.  
  1028. align 4
  1029. .str:
  1030.   mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
  1031.     ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
  1032.   cmp eax,ecx  ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
  1033.   jb @f
  1034.   xor edx,edx  ;®ç¨áâ¨âì edx
  1035.   div ecx      ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
  1036.   push edx     ;¯®«®¦¨âì ¢ á⥪
  1037.   ;dec edi             ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
  1038.   call .str;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
  1039.   pop eax
  1040.   @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
  1041.   ;sbb al,$69  ;- ç¥áâ­® ¤ ­­ ï ¨­áâàãªæ¨ï ¬¥­ï § áâ ¢«ï¥â § ¤ã¬ âìáï â.¥. ï ­¥ §­ î ª ª íâ® à ¡®â ¥â
  1042.   ;das        ;¯®á«¥ ¤ ­­®© ª®¬ ­¤ë ª ª ¡ë ¯à®¨á室¨â 㬥­ì襭¨¥ al ­  66h  (¢ ª­¨£¥ ­ ¯¨á ­® ¤à㣮¥)
  1043.   or al,0x30  ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥  ç¥¬ ¤¢¥ ¢ëè¥
  1044.   stosb       ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
  1045.   ret         ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
  1046.  
  1047.  
  1048. last_time dd ?
  1049. image_data dd 0 ;¯ ¬ïâì ¤«ï ¯à¥®¡à §®¢ ­¨ï ª à⨭ª¨ äã­ªæ¨ï¬¨ libimg
  1050. image_data_gray dd 0 ;¯ ¬ïâì á ¢à¥¬¥­­ë¬¨ á¥à묨 ¨§®¡à ¦¥­¨ï¬¨ ¢ ä®à¬ â¥ 24-bit, ¨§ ª®â®àëå ¡ã¤ãâ ᮧ¤ ¢ âìáï âà ä à¥âë
  1051.  
  1052. run_file_70 FileInfoBlock
  1053. hed db 'Nu pogodi 22.08.10',0 ;¯®¤¯¨áì ®ª­ 
  1054. sc system_colors  ;á¨á⥬­ë¥ 梥â 
  1055.  
  1056. align 4
  1057. buf_font: ;¡ãä¥à á® èà¨ä⮬
  1058.         dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  1059.         dw 25 ;+4 left
  1060.         dw 25 ;+6 top
  1061.         dd 128 ;+8 w
  1062.         dd 144 ;+12 h
  1063.         dd 0 ;+16 color
  1064.         db 24 ;+20 bit in pixel
  1065.  
  1066. align 4
  1067. buf_displ:
  1068.         dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  1069.         dw 25,0
  1070.         dd ? ;+8 w
  1071.         dd ? ;+12 h
  1072.         dd 0 ;+16 color
  1073.         db 24 ;+20 bit in pixel
  1074.  
  1075. align 4
  1076. buf_fon: ;ä®­®¢ë© ¡ãä¥à
  1077.         dd 0 ;㪠§ â¥«ì ­  ¡ãä¥à ¨§®¡à ¦¥­¨ï
  1078.         dw 0 ;+4 left
  1079.         dw 0 ;+6 top
  1080.         dd ? ;+8 w
  1081.         dd ? ;+12 h
  1082.         dd 0xffffff ;+16 color
  1083.         db 24 ;+20 bit in pixel
  1084.  
  1085. align 4
  1086. buf_decor: ;¡ãä¥à  á ¤¥ª®à æ¨ï¬¨: ¤®¬¨ª ¬¨ ¨ ३ª ¬¨; á ªãà¨æ ¬¨; á à á⥭¨ï¬¨
  1087.         rb 3*BUF_STRUCT_SIZE
  1088.  
  1089. align 4
  1090. buf_wolf:
  1091.         rb 9*BUF_STRUCT_SIZE
  1092.  
  1093. align 4
  1094. buf_egg:
  1095.         rb 22*BUF_STRUCT_SIZE
  1096.  
  1097. align 4
  1098. buf_chi:
  1099.         rb 13*BUF_STRUCT_SIZE
  1100.  
  1101.  
  1102.  
  1103. align 4
  1104. libini_import:
  1105.         dd alib_init0
  1106.         ini_get_str   dd aini_get_str
  1107.         ini_get_int   dd aini_get_int
  1108.         ini_get_color dd aini_get_color
  1109. dd 0,0
  1110.         alib_init0     db 'lib_init',0
  1111.         aini_get_str   db 'ini_get_str',0
  1112.         aini_get_int   db 'ini_get_int',0
  1113.         aini_get_color db 'ini_get_color',0
  1114.  
  1115. align 4
  1116. import_libimg:
  1117.   dd alib_init1
  1118.   img_is_img  dd aimg_is_img
  1119.   img_info    dd aimg_info
  1120.   img_from_file dd aimg_from_file
  1121.   img_to_file dd aimg_to_file
  1122.   img_from_rgb dd aimg_from_rgb
  1123.   img_to_rgb  dd aimg_to_rgb
  1124.   img_to_rgb2 dd aimg_to_rgb2
  1125.   img_decode  dd aimg_decode
  1126.   img_encode  dd aimg_encode
  1127.   img_create  dd aimg_create
  1128.   img_destroy dd aimg_destroy
  1129.   img_destroy_layer dd aimg_destroy_layer
  1130.   img_count   dd aimg_count
  1131.   img_lock_bits dd aimg_lock_bits
  1132.   img_unlock_bits dd aimg_unlock_bits
  1133.   img_flip    dd aimg_flip
  1134.   img_flip_layer dd aimg_flip_layer
  1135.   img_rotate  dd aimg_rotate
  1136.   img_rotate_layer dd aimg_rotate_layer
  1137.   img_draw    dd aimg_draw
  1138.  
  1139.   dd 0,0
  1140.   alib_init1   db 'lib_init',0
  1141.   aimg_is_img  db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ­­ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª  ᤥ« âì ¨§ ­¨å ¨§®¡à ¦¥­¨¥
  1142.   aimg_info    db 'img_info',0
  1143.   aimg_from_file db 'img_from_file',0
  1144.   aimg_to_file db 'img_to_file',0
  1145.   aimg_from_rgb db 'img_from_rgb',0
  1146.   aimg_to_rgb  db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ­¨¥ ¨§®¡à ¦¥­¨ï ¢ ¤ ­­ë¥ RGB
  1147.   aimg_to_rgb2 db 'img_to_rgb2',0
  1148.   aimg_decode  db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ­­ëå
  1149.   aimg_encode  db 'img_encode',0
  1150.   aimg_create  db 'img_create',0
  1151.   aimg_destroy db 'img_destroy',0
  1152.   aimg_destroy_layer db 'img_destroy_layer',0
  1153.   aimg_count   db 'img_count',0
  1154.   aimg_lock_bits db 'img_lock_bits',0
  1155.   aimg_unlock_bits db 'img_unlock_bits',0
  1156.   aimg_flip    db 'img_flip',0
  1157.   aimg_flip_layer db 'img_flip_layer',0
  1158.   aimg_rotate  db 'img_rotate',0
  1159.   aimg_rotate_layer db 'img_rotate_layer',0
  1160.   aimg_draw    db 'img_draw',0
  1161.  
  1162. align 4
  1163. import_buf2d_lib:
  1164.         dd sz_lib_init
  1165.         buf2d_create dd sz_buf2d_create
  1166.         buf2d_create_f_img dd sz_buf2d_create_f_img
  1167.         buf2d_clear dd sz_buf2d_clear
  1168.         buf2d_draw dd sz_buf2d_draw
  1169.         buf2d_delete dd sz_buf2d_delete
  1170.         buf2d_line dd sz_buf2d_line
  1171.         buf2d_circle dd sz_buf2d_circle
  1172.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  1173.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  1174.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  1175.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  1176.         buf2d_bit_blt dd sz_buf2d_bit_blt
  1177.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  1178.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  1179.         buf2d_cruve_bezier dd sz_buf2d_cruve_bezier
  1180.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  1181.         buf2d_draw_text dd sz_buf2d_draw_text
  1182.         buf2d_crop_color dd sz_buf2d_crop_color
  1183.         buf2d_offset_h dd sz_buf2d_offset_h    
  1184.         dd 0,0
  1185.         sz_lib_init db 'lib_init',0
  1186.         sz_buf2d_create db 'buf2d_create',0
  1187.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  1188.         sz_buf2d_clear db 'buf2d_clear',0
  1189.         sz_buf2d_draw db 'buf2d_draw',0
  1190.         sz_buf2d_delete db 'buf2d_delete',0
  1191.         sz_buf2d_line db 'buf2d_line',0
  1192.         sz_buf2d_circle db 'buf2d_circle',0 ;à¨á®¢ ­¨¥ ®ªà㦭®áâ¨
  1193.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  1194.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  1195.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  1196.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  1197.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  1198.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  1199.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  1200.         sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0
  1201.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  1202.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  1203.         sz_buf2d_crop_color db 'buf2d_crop_color',0
  1204.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  1205.  
  1206. i_end:
  1207.         rb 1024
  1208.         align 16
  1209.         procinfo process_information
  1210. stacktop:
  1211.         sys_path rb 4096
  1212.         file_name:
  1213.                 rb 4096
  1214.         plugin_path:
  1215.                 rb 4096
  1216.         openfile_path:
  1217.                 rb 4096
  1218.         filename_area:
  1219.                 rb 256
  1220. mem: