Rev 1538 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1535 | IgorA | 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_t equ word[edi+6] ;отступ сверху |
||
35 | buf2d_l equ word[edi+4] ;отступ слева |
||
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 | GAME_POLE_W equ 315 ;ширина поля |
||
51 | GAME_POLE_H equ 210 ;высота поля |
||
52 | GAME_POLE_BYTES equ GAME_POLE_W*GAME_POLE_H*3 ;размер файла с изображением |
||
53 | OFFS_SHADOW_X equ 2 ;сдвиг теней по оси 'x' |
||
54 | OFFS_SHADOW_Y equ 2 ;сдвиг теней по оси 'y' |
||
55 | IMAGE_FONT_SIZE equ 128*144*3 |
||
56 | |||
57 | fn_icon0 db 'curici.png',0 ;имя файла с декорациями |
||
58 | fn_icon1 db 'wolf.png',0 ;имя файла с волком и зайцем |
||
59 | fn_icon2 db 'eggs.png',0 ;имя файла с яйцами |
||
60 | fn_icon3 db 'chi.png',0 ;имя файла с циплятами |
||
61 | fn_font db 'font8x9.bmp',0 |
||
62 | |||
63 | color_fon dd 0xffffff |
||
64 | color_shadows dd 0xd0d0d0 ;цвет теней |
||
65 | color_trees dd 0x008000 ;цвет травы |
||
66 | color_wolf dd 0x800000 ;цвет волка и зайца |
||
67 | color_egg dd 0x404080 ;цвет яйца |
||
68 | color_chick dd 0x00d0d0 ;цвет ципленка |
||
69 | color_curici dd 0x8080d0 ;цвет курицы |
||
70 | color_perilo dd 0x000080 ;цвет перила (гребня) |
||
71 | |||
72 | macro load_image_file path,buf,size { ;макрос для загрузки изображений |
||
73 | stdcall mem.Alloc, dword size ;выделяем память для изображения |
||
74 | mov [buf],eax |
||
75 | |||
76 | copy_path path,sys_path,file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой |
||
77 | mov eax,70 ;70-я функция работа с файлами |
||
78 | mov [run_file_70.Function], 0 |
||
79 | mov [run_file_70.Position], 0 |
||
80 | mov [run_file_70.Flags], 0 |
||
81 | mov [run_file_70.Count], dword size |
||
82 | m2m [run_file_70.Buffer], [buf] |
||
83 | mov byte[run_file_70+20], 0 |
||
84 | mov [run_file_70.FileName], file_name |
||
85 | mov ebx,run_file_70 |
||
86 | int 0x40 ;загружаем файл изображения |
||
87 | cmp ebx,0xffffffff |
||
88 | je @f |
||
89 | ;определяем вид изображения и переводим его во временный буфер image_data |
||
90 | stdcall dword[img_decode], dword[buf],ebx,0 |
||
91 | mov dword[image_data],eax |
||
92 | ;преобразуем изображение к формату rgb |
||
93 | stdcall dword[img_to_rgb2], dword[image_data],dword[buf] |
||
94 | ;удаляем временный буфер image_data |
||
95 | stdcall dword[img_destroy], dword[image_data] |
||
96 | @@: |
||
97 | } |
||
98 | |||
99 | ;данные игры |
||
100 | bit_zaac equ 2 ;бит зайца |
||
101 | val_zaac equ 4 ;цифра отвечающая за бит зайца |
||
102 | bit_mig equ 3 ;бит мигания |
||
103 | val_mig equ 8 ;цифра отвечающая за бит мигания |
||
104 | mask_lot_lu equ 1b ;маска для левого верхнего лотка |
||
105 | mask_lot_ld equ 100000b ;маска для левого нижнего лотка |
||
106 | mask_lot_ru equ 10000000000b ;маска для правого верхнего лотка |
||
107 | mask_lot_rd equ 1000000000000000b ;маска для правого нижнего лотка |
||
108 | mask_clear_all equ 11111011111011110111101111011110b ;маска для очистки падающих яиц и прибежавших циплят |
||
109 | mask_fail_eggs equ 100001000010000100000b ;маска падающих яиц |
||
110 | mask_chi_left equ 11111000000000000000000000b ;маска левых циплят |
||
111 | mask_chi_right equ 11111000000000000000000000000000b ;маска правых циплят |
||
112 | mask_chi_cr_l equ 1000000000000000000000b ;маска для создания левого |
||
113 | mask_chi_cr_r equ 1000000000000000000000000000b ;маска для создания правого |
||
114 | bit_chi_left equ 21 ;1-й бит который отвечает за бегущего слева |
||
115 | bit_chi_right equ 27 ;1-й бит который отвечает за бегущего права |
||
116 | |||
117 | pos_wolf db 0 ;позиция волка 0-й бит слева/справа, 1-й бит сверху/вниз |
||
118 | ;rb 1 |
||
119 | pos_eggs dd 0 ;позиции расположения яиц и циплят |
||
120 | eggs_count dw 0 ;колличество пойманых яиц |
||
121 | game_text db 'Игра _',13 |
||
122 | some_text db '0' |
||
123 | rb 8 ;текст с числом пойманных яиц |
||
124 | count_last db 0 ;счетчик пропущенных яиц |
||
125 | game_spd dd 0 ;задержка игры |
||
126 | |||
127 | ;для генерации случайных чисел |
||
128 | rand_x dd 0 |
||
129 | |||
130 | align 4 |
||
131 | rand_next: |
||
132 | ;x(k+1) = (a*x(k)+c) mod m |
||
133 | ; a=22695477, c=1, m=2^32 |
||
134 | push eax |
||
135 | mov eax,dword[rand_x] |
||
136 | imul eax,22695477 |
||
137 | inc eax |
||
138 | mov dword[rand_x],eax |
||
139 | pop eax |
||
140 | ret |
||
141 | |||
142 | ;создаем прозрачные буфера по 8 бит (трафареты), для рисования |
||
143 | ;где buf - буфер на основе которого будет создан трафарет |
||
144 | ;фоновый цвет буфера должен быть 0xffffff, иначе не произойдет обрезка |
||
145 | ;по фоновому цвету и трафарет будет занимат ьмного места в памяти |
||
146 | align 4 |
||
147 | proc CreateTrapharetBuffer, buf:dword, img_data:dword |
||
148 | push edi |
||
149 | mov edi,dword[buf] |
||
150 | stdcall [buf2d_create_f_img], edi,[img_data] ;создаем буфер |
||
151 | stdcall [buf2d_conv_24_to_8], edi,1 ;делаем буфер прозрачности 8бит |
||
152 | stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT |
||
153 | pop edi |
||
154 | ret |
||
155 | endp |
||
156 | |||
157 | align 4 |
||
158 | InitBackgroundBuffer: ;создание фонового изображения |
||
159 | pushad |
||
160 | mov edi,buf_fon |
||
161 | mov eax,[color_fon] |
||
162 | mov buf2d_color,eax |
||
163 | stdcall [buf2d_clear], edi,eax |
||
164 | mov esi,edi |
||
165 | |||
166 | xor eax,eax |
||
167 | xor ebx,ebx |
||
168 | |||
169 | mov edi,buf_tr_fon0 |
||
170 | mov ax,buf2d_t |
||
171 | add eax,OFFS_SHADOW_Y |
||
172 | mov bx,buf2d_l |
||
173 | add ebx,OFFS_SHADOW_X |
||
174 | stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;рисуем тени домиков |
||
175 | mov edi,buf_tr_fon1 |
||
176 | mov ax,buf2d_t |
||
177 | add eax,OFFS_SHADOW_Y |
||
178 | mov bx,buf2d_l |
||
179 | add ebx,OFFS_SHADOW_X |
||
180 | stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;рисуем тени куриц |
||
181 | mov edi,buf_tr_fon2 |
||
182 | mov ax,buf2d_t |
||
183 | add eax,OFFS_SHADOW_Y |
||
184 | mov bx,buf2d_l |
||
185 | add ebx,OFFS_SHADOW_X |
||
186 | stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;рисуем тени деревьев |
||
187 | |||
188 | mov edi,buf_tr_fon0 |
||
189 | mov ax,buf2d_t |
||
190 | stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[color_perilo] ;рисуем домики |
||
191 | mov edi,buf_tr_fon1 |
||
192 | mov ax,buf2d_t |
||
193 | stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[color_curici] ;рисуем курицы |
||
194 | mov edi,buf_tr_fon2 |
||
195 | mov ax,buf2d_t |
||
196 | stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[color_trees] ;рисуем деревья |
||
197 | popad |
||
198 | ret |
||
199 | |||
200 | ;рисует картинку в буфере buf из массива буферов buf_img с индексом ind |
||
201 | ;т. е. buf <- buf_img[ind] |
||
202 | align 4 |
||
203 | proc DrawArrayImg, buf:dword, buf_img:dword, ind:dword, color:dword |
||
204 | pushad |
||
205 | mov edi,dword[ind] |
||
206 | imul edi,BUF_STRUCT_SIZE |
||
207 | add edi,dword[buf_img] |
||
208 | |||
209 | mov esi,dword[buf] |
||
210 | xor eax,eax |
||
211 | mov ax,buf2d_t |
||
212 | xor ebx,ebx |
||
213 | mov bx,buf2d_l |
||
214 | stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color] |
||
215 | popad |
||
216 | ret |
||
217 | endp |
||
218 | |||
219 | align 4 |
||
220 | DrawZaac: ;рисование зайца |
||
221 | push eax |
||
222 | bt word[pos_wolf],bit_zaac |
||
223 | jae .end_mig |
||
224 | |||
225 | stdcall DrawArrayImg, buf_displ,buf_wolf,6,[color_wolf] ;рисуем тело зайца |
||
226 | mov eax,dword[pos_eggs] |
||
227 | and eax,mask_chi_right+mask_chi_left |
||
228 | cmp eax,0 |
||
229 | je .end_mig ;если нет бегающих циплят, то заяц рукой не машет |
||
230 | bt word[pos_wolf],bit_mig |
||
231 | jc @f |
||
232 | stdcall DrawArrayImg, buf_displ,buf_wolf,7,[color_wolf] ;рисуем руку зайца вверху |
||
233 | jmp .end_mig |
||
234 | @@: |
||
235 | stdcall DrawArrayImg, buf_displ,buf_wolf,8,[color_wolf] ;рисуем руку зайца внизу |
||
236 | .end_mig: |
||
237 | pop eax |
||
238 | ret |
||
239 | |||
240 | align 4 |
||
241 | DrawWolf: ;рисует волка с корзинами |
||
242 | bt word[pos_wolf],0 |
||
243 | jc @f |
||
244 | stdcall DrawArrayImg, buf_displ,buf_wolf,0,[color_wolf] |
||
245 | bt word[pos_wolf],1 |
||
246 | jc .corz_ldn |
||
247 | stdcall DrawArrayImg, buf_displ,buf_wolf,1,[color_wolf] |
||
248 | jmp .corz_lend |
||
249 | .corz_ldn: |
||
250 | stdcall DrawArrayImg, buf_displ,buf_wolf,2,[color_wolf] |
||
251 | .corz_lend: |
||
252 | jmp .wolf_b |
||
253 | @@: |
||
254 | stdcall DrawArrayImg, buf_displ,buf_wolf,3,[color_wolf] |
||
255 | bt word[pos_wolf],1 |
||
256 | jc .corz_rdn |
||
257 | stdcall DrawArrayImg, buf_displ,buf_wolf,4,[color_wolf] |
||
258 | jmp .corz_rend |
||
259 | .corz_rdn: |
||
260 | stdcall DrawArrayImg, buf_displ,buf_wolf,5,[color_wolf] |
||
261 | .corz_rend: |
||
262 | .wolf_b: |
||
263 | ret |
||
264 | |||
265 | align 4 |
||
266 | DrawEggs: ;рисует яйца |
||
267 | pushad |
||
268 | cld |
||
269 | |||
270 | mov eax,dword[pos_eggs] |
||
271 | xor ebx,ebx |
||
272 | mov ecx,20 ;цикл для рисования котящихся яиц |
||
273 | @@: |
||
274 | bt eax,ebx |
||
275 | jae .draw_egg |
||
276 | stdcall DrawArrayImg, buf_displ,buf_egg,ebx,[color_egg] |
||
277 | .draw_egg: |
||
278 | inc ebx |
||
279 | loop @b |
||
280 | |||
281 | ;mov eax,dword[pos_eggs] |
||
282 | and eax,mask_chi_left |
||
283 | cmp eax,0 |
||
284 | je @f |
||
285 | stdcall DrawArrayImg, buf_displ,buf_egg,20,[color_egg] ;разбитое яйцо слева |
||
286 | @@: |
||
287 | mov eax,dword[pos_eggs] |
||
288 | and eax,mask_chi_right |
||
289 | cmp eax,0 |
||
290 | je @f |
||
291 | stdcall DrawArrayImg, buf_displ,buf_egg,21,[color_egg] ;разбитое яйцо справа |
||
292 | @@: |
||
293 | |||
294 | mov eax,dword[pos_eggs] |
||
295 | xor edx,edx |
||
296 | mov ebx,bit_chi_left |
||
297 | mov ecx,5 ;цикл для рисования левых циплят |
||
298 | @@: |
||
299 | bt eax,ebx |
||
300 | jae .draw_chick_l |
||
301 | stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] |
||
302 | .draw_chick_l: |
||
303 | inc ebx |
||
304 | inc edx |
||
305 | loop @b |
||
306 | mov ebx,bit_chi_right |
||
307 | mov ecx,5 ;цикл для рисования правых циплят |
||
308 | @@: |
||
309 | bt eax,ebx |
||
310 | jae .draw_chick_r |
||
311 | stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] |
||
312 | .draw_chick_r: |
||
313 | inc ebx |
||
314 | inc edx |
||
315 | loop @b |
||
316 | |||
317 | xor eax,eax |
||
318 | mov al,byte[count_last] |
||
319 | mov ecx,eax ;цикл для рисования штрафных очков |
||
320 | shr ecx,1 |
||
321 | mov edx,10 ;индекс начала штрафных иконок в буфере buf_chi |
||
322 | cmp ecx,0 |
||
323 | je .no_unit_last |
||
324 | @@: |
||
325 | stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] |
||
326 | inc edx |
||
327 | loop @b |
||
328 | .no_unit_last: |
||
329 | |||
330 | bt ax,0 ;проверяем мигающее не четное очко |
||
331 | jae @f |
||
332 | bt word[pos_wolf],bit_mig |
||
333 | jc @f |
||
334 | stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] ;мигающее штрафное очко |
||
335 | @@: |
||
336 | |||
337 | popad |
||
338 | ret |
||
339 | |||
340 | align 4 |
||
341 | CountEggsInc: ;увеличиваем счетчик яиц на 1 |
||
342 | push eax edi |
||
343 | xor eax,eax |
||
344 | inc word[eggs_count] ;увеличиваем счетчик яиц |
||
345 | cmp word[eggs_count],200 ;бонусные очки |
||
346 | je @f |
||
347 | cmp word[eggs_count],500 ;бонусные очки |
||
348 | je @f |
||
349 | jmp .no_bonus |
||
350 | @@: |
||
351 | mov byte[count_last],0 |
||
352 | .no_bonus: |
||
353 | |||
354 | mov ax,word[eggs_count] |
||
355 | mov edi,some_text |
||
356 | call convert_to_str ;обновляем текстовую строку |
||
357 | and ax,0xf ;через каждые 16 яиц уменьшаем время |
||
358 | cmp ax,0 |
||
359 | jne @f |
||
360 | cmp dword[game_spd],15 ;минимальная задержка |
||
361 | jle @f |
||
362 | dec dword[game_spd] |
||
363 | @@: |
||
364 | pop edi eax |
||
365 | ret |
||
366 | |||
367 | ;input: |
||
368 | ; eax - маска, указывающая с какой строны упало яйцо |
||
369 | align 4 |
||
370 | CountLastInc: ;начисление штрафных очков |
||
371 | inc byte[count_last] ;половинао штрафного очка |
||
372 | bt word[pos_wolf],bit_zaac |
||
373 | jc @f |
||
374 | inc byte[count_last] ;если нет зайца то еще 1-на половина штрафного очка |
||
375 | @@: |
||
376 | cmp byte[count_last],6 |
||
377 | jle @f |
||
378 | mov byte[count_last],6 ;ставим ограничени на число штрафных очков |
||
379 | @@: |
||
380 | or dword[pos_eggs],eax ;создаем бегущего ципленка |
||
381 | ret |
||
382 | |||
383 | align 4 |
||
384 | MoveEggs: |
||
385 | pushad |
||
386 | xor byte[pos_wolf],val_mig ;бит для мигания |
||
387 | |||
388 | cmp byte[count_last],6 ;максимальное число штрафных очков |
||
389 | je .end_fun |
||
390 | |||
391 | rol dword[pos_eggs],1 |
||
392 | mov ecx,dword[pos_eggs] |
||
393 | and ecx,mask_fail_eggs |
||
394 | cmp ecx,0 |
||
395 | je .no_fail ;нет падающих яиц |
||
396 | ;начисление яиц попавших в корзину |
||
397 | ;или начисление штрафных очков |
||
398 | xor ebx,ebx |
||
399 | mov bl,byte[pos_wolf] ;берем параметры (позицию) волка |
||
400 | and bl,3 ;на всякий случай |
||
401 | |||
402 | bt ecx,5 ;проверяем верхнее левое перило |
||
403 | jae .perilo_lu |
||
404 | cmp bx,0 ;проверяем наличие корзины |
||
405 | jne @f |
||
406 | call CountEggsInc |
||
407 | jmp .perilo_lu |
||
408 | @@: |
||
409 | mov eax,mask_chi_cr_l |
||
410 | call CountLastInc |
||
411 | .perilo_lu: |
||
412 | bt ecx,10 ;проверяем нижнее левое перило |
||
413 | jae .perilo_ld |
||
414 | cmp bx,2 ;проверяем наличие корзины |
||
415 | jne @f |
||
416 | call CountEggsInc |
||
417 | jmp .perilo_ld |
||
418 | @@: |
||
419 | mov eax,mask_chi_cr_l |
||
420 | call CountLastInc |
||
421 | .perilo_ld: |
||
422 | bt ecx,15 ;проверяем верхнее правое перило |
||
423 | jae .perilo_ru |
||
424 | cmp bx,1 ;проверяем наличие корзины |
||
425 | jne @f |
||
426 | call CountEggsInc |
||
427 | jmp .perilo_ru |
||
428 | @@: |
||
429 | mov eax,mask_chi_cr_r |
||
430 | call CountLastInc |
||
431 | .perilo_ru: |
||
432 | bt ecx,20 ;проверяем нижнее правое перило |
||
433 | jae .perilo_rd |
||
434 | cmp bx,3 ;проверяем наличие корзины |
||
435 | jne @f |
||
436 | call CountEggsInc |
||
437 | jmp .perilo_rd |
||
438 | @@: |
||
439 | mov eax,mask_chi_cr_r |
||
440 | call CountLastInc |
||
441 | .perilo_rd: |
||
442 | .no_fail: |
||
443 | |||
444 | and dword[pos_eggs],mask_clear_all ;очистка упавших яиц и добежавших курей |
||
445 | |||
446 | call rand_next |
||
447 | bt dword[rand_x],6 |
||
448 | jc @f |
||
449 | bt dword[rand_x],8 |
||
450 | jc @f |
||
451 | bt dword[rand_x],9 |
||
452 | jc @f |
||
453 | xor byte[pos_wolf],val_zaac ;высовываем/засовываем зайца |
||
454 | @@: |
||
455 | |||
456 | ;создание новых яиц |
||
457 | bt dword[rand_x],4 ;проверяем будем ли создавать новое яйцо |
||
458 | jc .end_creat |
||
459 | bt dword[rand_x],5 ;проверяем с какой стороны будем создавать новое яйцо |
||
460 | jc .creat_r |
||
461 | bt dword[rand_x],7 |
||
462 | jc @f |
||
463 | or dword[pos_eggs],mask_lot_lu |
||
464 | jmp .end_creat |
||
465 | @@: |
||
466 | or dword[pos_eggs],mask_lot_ld |
||
467 | jmp .end_creat |
||
468 | .creat_r: |
||
469 | bt dword[rand_x],7 |
||
470 | jc @f |
||
471 | or dword[pos_eggs],mask_lot_ru |
||
472 | jmp .end_creat |
||
473 | @@: |
||
474 | or dword[pos_eggs],mask_lot_rd |
||
475 | ;jmp .end_creat |
||
476 | .end_creat: |
||
477 | |||
478 | .end_fun: |
||
479 | popad |
||
480 | ret |
||
481 | |||
482 | align 4 |
||
483 | proc InitGame, b:dword ;первоначальные настройки игры |
||
484 | mov word[eggs_count],0 ;колличество пойманых яиц |
||
485 | mov byte[some_text],'0' |
||
486 | mov byte[some_text+1],0 ;текст с числом пойманных яиц |
||
487 | mov byte[count_last],0 |
||
488 | mov dword[pos_eggs],0 |
||
489 | |||
490 | cmp dword[b],0 |
||
491 | jne @f |
||
492 | mov byte[game_text+5],'А' |
||
493 | mov dword[game_spd],65 ;задержка игры |
||
494 | jmp .end_init |
||
495 | @@: |
||
496 | mov byte[game_text+5],'Б' |
||
497 | mov dword[game_spd],35 ;задержка игры |
||
498 | .end_init: |
||
499 | |||
500 | push eax ebx |
||
501 | mcall 26,9 |
||
502 | mov dword[rand_x],eax ;заполняем 1-е случайное число |
||
503 | pop ebx eax |
||
504 | |||
505 | ret |
||
506 | endp |
||
507 | |||
508 | align 4 |
||
509 | start: |
||
510 | load_libraries l_libs_start,load_lib_end |
||
511 | |||
512 | ;проверка на сколько удачно загузилась наша либа |
||
513 | mov ebp,lib0 |
||
514 | cmp dword [ebp+ll_struc_size-4],0 |
||
515 | jz @f |
||
516 | mcall -1 ;exit not correct |
||
517 | @@: |
||
518 | mov ebp,lib1 |
||
519 | cmp dword [ebp+ll_struc_size-4],0 |
||
520 | jz @f |
||
521 | mcall -1 ;exit not correct |
||
522 | @@: |
||
523 | |||
524 | mcall 40,0x27 |
||
525 | mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета |
||
526 | |||
527 | load_image_file fn_icon0,image_data_gray,3*GAME_POLE_BYTES |
||
528 | mov eax,[image_data_gray] |
||
529 | stdcall CreateTrapharetBuffer,buf_tr_fon0,eax |
||
530 | add eax,GAME_POLE_BYTES |
||
531 | stdcall CreateTrapharetBuffer,buf_tr_fon1,eax |
||
532 | add eax,GAME_POLE_BYTES |
||
533 | stdcall CreateTrapharetBuffer,buf_tr_fon2,eax |
||
534 | stdcall mem.Free,[image_data_gray] ;освобождаем память |
||
535 | |||
536 | stdcall [buf2d_create], buf_fon ;создаем буфер с фоновыми декорациями |
||
537 | |||
538 | load_image_file fn_icon1,image_data_gray, 9*GAME_POLE_BYTES |
||
539 | mov eax,[image_data_gray] |
||
540 | mov edi,buf_wolf |
||
541 | mov ecx,9 |
||
542 | cld |
||
543 | @@: ;считываем 9 буферов с волком и зайцем |
||
544 | mov buf2d_size_lt,0 |
||
545 | mov buf2d_w,GAME_POLE_W |
||
546 | mov buf2d_h,GAME_POLE_H |
||
547 | mov buf2d_color,0xffffff |
||
548 | mov buf2d_bits,24 |
||
549 | stdcall CreateTrapharetBuffer,edi,eax |
||
550 | add eax,GAME_POLE_BYTES |
||
551 | add edi,BUF_STRUCT_SIZE |
||
552 | loop @b |
||
553 | stdcall mem.Free,[image_data_gray] ;освобождаем память |
||
554 | |||
555 | load_image_file fn_icon2,image_data_gray, 22*GAME_POLE_BYTES |
||
556 | mov eax,[image_data_gray] |
||
557 | mov edi,buf_egg |
||
558 | mov ecx,22 |
||
559 | cld |
||
560 | @@: ;считываем 22 буферов с яйцами |
||
561 | mov buf2d_size_lt,0 |
||
562 | mov buf2d_w,GAME_POLE_W |
||
563 | mov buf2d_h,GAME_POLE_H |
||
564 | mov buf2d_color,0xffffff |
||
565 | mov buf2d_bits,24 |
||
566 | stdcall CreateTrapharetBuffer,edi,eax |
||
567 | add eax,GAME_POLE_BYTES |
||
568 | add edi,BUF_STRUCT_SIZE |
||
569 | loop @b |
||
570 | stdcall mem.Free,[image_data_gray] ;освобождаем память |
||
571 | |||
572 | load_image_file fn_icon3,image_data_gray, 13*GAME_POLE_BYTES |
||
573 | mov eax,[image_data_gray] |
||
574 | mov edi,buf_chi |
||
575 | mov ecx,13 |
||
576 | cld |
||
577 | @@: ;считываем 13 буферов с циплятами |
||
578 | mov buf2d_size_lt,0 |
||
579 | mov buf2d_w,GAME_POLE_W |
||
580 | mov buf2d_h,GAME_POLE_H |
||
581 | mov buf2d_color,0xffffff |
||
582 | mov buf2d_bits,24 |
||
583 | stdcall CreateTrapharetBuffer,edi,eax |
||
584 | add eax,GAME_POLE_BYTES |
||
585 | add edi,BUF_STRUCT_SIZE |
||
586 | loop @b |
||
587 | stdcall mem.Free,[image_data_gray] ;освобождаем память |
||
588 | |||
589 | load_image_file fn_font, image_data_gray,IMAGE_FONT_SIZE |
||
590 | stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;создаем буфер |
||
591 | stdcall mem.Free,[image_data_gray] ;освобождаем память |
||
592 | |||
593 | stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит |
||
594 | stdcall [buf2d_convert_text_matrix], buf_font |
||
595 | |||
596 | ;проверка занимаемого буфером места |
||
597 | ;mov edi,buf_wolf |
||
598 | ;add edi,BUF_STRUCT_SIZE ;переходим на буфер корзины |
||
599 | ;stdcall [buf2d_clear],edi,0x808080 ;заливаем его серым цветом |
||
600 | |||
601 | stdcall [buf2d_create], buf_displ ;создаем буфер для вывода на экран |
||
602 | call InitBackgroundBuffer ;заполняем буфер с фоновыми декорациями |
||
603 | stdcall InitGame,0 |
||
604 | mcall 26,9 |
||
605 | mov [last_time],ebx |
||
606 | |||
607 | |||
608 | |||
609 | align 4 |
||
610 | red_win: |
||
611 | call draw_window |
||
612 | |||
613 | align 4 |
||
614 | still: ;главный цикл |
||
615 | mcall 26,9 |
||
616 | mov ebx,[last_time] |
||
617 | add ebx,dword[game_spd] ;delay |
||
618 | sub ebx,eax |
||
619 | cmp ebx,dword[game_spd] ;delay |
||
620 | ja it_is_time_now |
||
621 | test ebx,ebx |
||
622 | jz it_is_time_now |
||
623 | mcall 23 |
||
624 | |||
625 | cmp eax,0 |
||
626 | je it_is_time_now |
||
627 | |||
628 | ;mcall 10 |
||
629 | |||
630 | cmp al,0x1 ;изменилось положение окна |
||
631 | jz red_win |
||
632 | cmp al,0x2 |
||
633 | jz key |
||
634 | cmp al,0x3 |
||
635 | jz button |
||
636 | |||
637 | jmp still |
||
638 | |||
639 | align 4 |
||
640 | it_is_time_now: |
||
641 | mcall 26,9 |
||
642 | mov [last_time],eax |
||
643 | |||
644 | ;...здесь идут действия, вызываемые каждые delay сотых долей секунд... |
||
645 | call MoveEggs |
||
646 | call draw_display |
||
647 | jmp still |
||
648 | |||
649 | align 4 |
||
650 | key: |
||
651 | push eax ebx |
||
652 | mcall 2 |
||
653 | |||
654 | cmp ah,176 ;Left |
||
655 | jne @f |
||
656 | and byte[pos_wolf],0xfe |
||
657 | @@: |
||
658 | cmp ah,179 ;Right |
||
659 | jne @f |
||
660 | or byte[pos_wolf],1 |
||
661 | @@: |
||
662 | cmp ah,178 ;Up |
||
663 | jne @f |
||
664 | and byte[pos_wolf],0xff-2 |
||
665 | @@: |
||
666 | cmp ah,177 ;Down |
||
667 | jne @f |
||
668 | or byte[pos_wolf],2 |
||
669 | @@: |
||
670 | |||
671 | cmp ah,97 ;a |
||
672 | jne @f |
||
673 | and byte[pos_wolf],0xff-3 ;00 |
||
674 | @@: |
||
675 | cmp ah,122 ;z |
||
676 | jne @f |
||
677 | and byte[pos_wolf],0xff-1 |
||
678 | or byte[pos_wolf],2 ;10 |
||
679 | @@: |
||
680 | cmp ah,39 ;' |
||
681 | jne @f |
||
682 | and byte[pos_wolf],0xff-2 |
||
683 | or byte[pos_wolf],1 ;01 |
||
684 | @@: |
||
685 | cmp ah,47 ;/ |
||
686 | jne @f |
||
687 | or byte[pos_wolf],3 ;11 |
||
688 | @@: |
||
689 | |||
690 | pop ebx eax |
||
691 | jmp still |
||
692 | |||
693 | |||
694 | align 4 |
||
695 | draw_window: |
||
696 | pushad |
||
697 | mcall 12,1 |
||
698 | |||
699 | xor eax,eax |
||
700 | mov ebx,20*65536+370 |
||
701 | mov ecx,20*65536+280 |
||
702 | mov edx,[sc.work] |
||
703 | ;or edx,0x33000000 |
||
704 | or edx,0x73000000 |
||
705 | mov edi,hed |
||
706 | mcall ;создание окна |
||
707 | |||
708 | mcall 9,procinfo,-1 |
||
709 | mov edi,buf_displ |
||
710 | mov eax,dword[procinfo.client_box.width] |
||
711 | cmp eax,GAME_POLE_W |
||
712 | jle @f |
||
713 | sub eax,GAME_POLE_W |
||
714 | shr eax,1 |
||
715 | mov buf2d_l,ax ;выправниваем буфер по центру окна |
||
716 | @@: |
||
717 | |||
718 | call draw_display |
||
719 | |||
720 | mov eax,13 ;рисование прямоугольника |
||
721 | mov edx,[sc.work] |
||
722 | xor esi,esi |
||
723 | mov si,buf2d_l |
||
724 | add esi,GAME_POLE_W |
||
725 | mov ebx,dword[procinfo.client_box.width] |
||
726 | inc ebx |
||
727 | cmp esi,ebx |
||
728 | jge @f |
||
729 | sub ebx,esi |
||
730 | rol ebx,16 |
||
731 | mov bx,si |
||
732 | rol ebx,16 |
||
733 | mov ecx,dword[procinfo.client_box.height] |
||
734 | inc ecx |
||
735 | int 0x40 ;рисование правого бокового поля |
||
736 | jmp .draw_s |
||
737 | @@: |
||
738 | mov esi,dword[procinfo.client_box.width] ;когда по ширине не влазит |
||
739 | inc esi |
||
740 | .draw_s: |
||
741 | |||
742 | mov ebx,esi |
||
743 | mov ecx,dword[procinfo.client_box.height] |
||
744 | inc ecx |
||
745 | mov esi,GAME_POLE_H |
||
746 | cmp esi,ebx |
||
747 | jge @f |
||
748 | sub ecx,esi |
||
749 | rol ecx,16 |
||
750 | mov cx,si |
||
751 | rol ecx,16 |
||
752 | int 0x40 ;рисование нижнего поля |
||
753 | @@: |
||
754 | |||
755 | xor ebx,ebx |
||
756 | mov bx,buf2d_l |
||
757 | mov ecx,GAME_POLE_H |
||
758 | int 0x40 ;рисование левого бокового поля |
||
759 | |||
760 | mcall 12,2 |
||
761 | popad |
||
762 | ret |
||
763 | |||
764 | align 4 |
||
765 | draw_display: |
||
766 | |||
767 | stdcall mem_copy, dword[buf_fon],dword[buf_displ],GAME_POLE_BYTES ;копирование изображения из фонового буфера |
||
768 | call DrawZaac |
||
769 | call DrawWolf ;рисуем волка |
||
770 | call DrawEggs |
||
771 | |||
772 | stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,GAME_POLE_W/2,OFFS_SHADOW_X,[color_curici] ;рисуем строку с текстом |
||
773 | |||
774 | stdcall [buf2d_draw], buf_displ |
||
775 | |||
776 | ;mov eax,4 ;рисование текста |
||
777 | ;mov ebx,(GAME_POLE_W/2)*65536+OFFS_SHADOW_X |
||
778 | ;mov ecx,[color_curici] |
||
779 | ;or ecx,0x80000000 |
||
780 | ;mov edx,some_text |
||
781 | ;mcall |
||
782 | |||
783 | ret |
||
784 | |||
785 | align 4 |
||
786 | button: |
||
787 | mcall 17 ;получить код нажатой кнопки |
||
788 | cmp ah,1 |
||
789 | jne still |
||
790 | .exit: |
||
791 | stdcall [buf2d_delete],buf_fon ;удаляем буфер |
||
792 | stdcall [buf2d_delete],buf_displ ;удаляем буфер |
||
793 | |||
794 | stdcall [buf2d_delete],buf_tr_fon0 |
||
795 | stdcall [buf2d_delete],buf_tr_fon1 |
||
796 | stdcall [buf2d_delete],buf_tr_fon2 |
||
797 | |||
798 | stdcall [buf2d_delete],buf_font |
||
799 | |||
800 | cld |
||
801 | mov ecx,9 |
||
802 | mov edi,buf_wolf |
||
803 | @@: ;удаляем 9 буферов с волком и зайцем |
||
804 | stdcall [buf2d_delete],edi |
||
805 | add edi,BUF_STRUCT_SIZE |
||
806 | loop @b |
||
807 | mov ecx,13 |
||
808 | mov edi,buf_chi |
||
809 | @@: ;удаляем 13 буферов |
||
810 | stdcall [buf2d_delete],edi |
||
811 | add edi,BUF_STRUCT_SIZE |
||
812 | loop @b |
||
813 | mov ecx,22 |
||
814 | mov edi,buf_egg |
||
815 | @@: ;удаляем 22 буфера |
||
816 | stdcall [buf2d_delete],edi |
||
817 | add edi,BUF_STRUCT_SIZE |
||
818 | loop @b |
||
819 | |||
820 | mcall -1 ;выход из программы |
||
821 | |||
822 | head_f_i: |
||
823 | head_f_l db 'Системная ошибка',0 |
||
824 | |||
825 | system_dir0 db '/sys/lib/' |
||
826 | name_buf2d db 'buf2d.obj',0 |
||
827 | err_message_found_lib0 db 'Не удалось найти библиотеку buf2d.obj',0 |
||
828 | err_message_import0 db 'Ошибка при импорте библиотеки buf2d.obj',0 |
||
829 | |||
830 | system_dir1 db '/sys/lib/' |
||
831 | name_libimg db 'libimg.obj',0 |
||
832 | err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0 |
||
833 | err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0 |
||
834 | |||
835 | ;library structures |
||
836 | l_libs_start: |
||
837 | 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 |
||
838 | 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 |
||
839 | load_lib_end: |
||
840 | |||
841 | align 4 |
||
842 | proc mem_copy, source:dword, destination:dword, len:dword |
||
843 | push ecx esi edi |
||
844 | cld |
||
845 | mov esi, dword[source] |
||
846 | mov edi, dword[destination] |
||
847 | mov ecx, dword[len] |
||
848 | rep movsb |
||
849 | pop edi esi ecx |
||
850 | ret |
||
851 | endp |
||
852 | |||
853 | align 4 |
||
854 | convert_to_str: |
||
855 | pushad |
||
856 | ;mov eax,dword[value] |
||
857 | ;mov edi,dword[text] |
||
858 | mov dword[edi+1],0 |
||
859 | cld |
||
860 | call .str |
||
861 | popad |
||
862 | ret |
||
863 | |||
864 | |||
865 | align 4 |
||
866 | .str: |
||
867 | mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число |
||
868 | ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной |
||
869 | cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax |
||
870 | jb @f |
||
871 | xor edx,edx ;очистить edx |
||
872 | div ecx ;разделить - остаток в edx |
||
873 | push edx ;положить в стек |
||
874 | ;dec edi ;смещение необходимое для записи с конца строки |
||
875 | call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx |
||
876 | pop eax |
||
877 | @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) |
||
878 | ;sbb al,$69 ;- честно данная инструкция меня заставляет задуматься т.е. я не знаю как это работает |
||
879 | ;das ;после данной команды как бы происходит уменьшение al на 66h (в книге написано другое) |
||
880 | or al,0x30 ;данная команда короче чем две выше |
||
881 | stosb ;записать элемент из регистра al в ячеку памяти es:edi |
||
882 | ret ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться |
||
883 | |||
884 | |||
885 | last_time dd ? |
||
886 | image_data dd 0 ;память для преобразования картинки функциями libimg |
||
887 | image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты |
||
888 | |||
889 | run_file_70 FileInfoBlock |
||
890 | hed db 'Nu pogodi 29.07.10',0 ;подпись окна |
||
891 | sc system_colors ;системные цвета |
||
892 | |||
893 | align 4 |
||
894 | buf_fon: ;фоновый буфер |
||
895 | dd 0 ;указатель на буфер изображения |
||
896 | dw 0 ;+4 left |
||
897 | dw 0 ;+6 top |
||
898 | dd GAME_POLE_W ;+8 w |
||
899 | dd GAME_POLE_H ;+12 h |
||
900 | dd 0xffffff ;+16 color |
||
901 | db 24 ;+20 bit in pixel |
||
902 | |||
903 | align 4 |
||
904 | buf_font: ;буфер со шрифтом |
||
905 | dd 0 ;указатель на буфер изображения |
||
906 | dw 25 ;+4 left |
||
907 | dw 25 ;+6 top |
||
908 | dd 128 ;+8 w |
||
909 | dd 144 ;+12 h |
||
910 | dd 0 ;+16 color |
||
911 | db 24 ;+20 bit in pixel |
||
912 | |||
913 | align 4 |
||
914 | buf_tr_fon0: ;буфер с домиками и рейками |
||
915 | dd 0 ;указатель на буфер изображения |
||
916 | dw 0 ;+4 left |
||
917 | dw 0 ;+6 top |
||
918 | dd GAME_POLE_W ;+8 w |
||
919 | dd GAME_POLE_H ;+12 h |
||
920 | dd 0xffffff ;+16 color |
||
921 | db 24 ;+20 bit in pixel |
||
922 | align 4 |
||
923 | buf_tr_fon1: ;буфер с курицами |
||
924 | dd 0 ;указатель на буфер изображения |
||
925 | dw 0 ;+4 left |
||
926 | dw 0 ;+6 top |
||
927 | dd GAME_POLE_W ;+8 w |
||
928 | dd GAME_POLE_H ;+12 h |
||
929 | dd 0xffffff ;+16 color |
||
930 | db 24 ;+20 bit in pixel |
||
931 | align 4 |
||
932 | buf_tr_fon2: ;буфер с растениями |
||
933 | dd 0 ;указатель на буфер изображения |
||
934 | dw 0 ;+4 left |
||
935 | dw 0 ;+6 top |
||
936 | dd GAME_POLE_W ;+8 w |
||
937 | dd GAME_POLE_H ;+12 h |
||
938 | dd 0xffffff ;+16 color |
||
939 | db 24 ;+20 bit in pixel |
||
940 | |||
941 | align 4 |
||
942 | buf_displ: |
||
943 | dd 0 ;указатель на буфер изображения |
||
944 | dw 25,0 |
||
945 | dd GAME_POLE_W ;+8 w |
||
946 | dd GAME_POLE_H ;+12 h |
||
947 | dd 0 ;+16 color |
||
948 | db 24 ;+20 bit in pixel |
||
949 | |||
950 | align 4 |
||
951 | buf_wolf: |
||
952 | rb 9*BUF_STRUCT_SIZE |
||
953 | |||
954 | align 4 |
||
955 | buf_egg: |
||
956 | rb 22*BUF_STRUCT_SIZE |
||
957 | |||
958 | align 4 |
||
959 | buf_chi: |
||
960 | rb 13*BUF_STRUCT_SIZE |
||
961 | |||
962 | align 4 |
||
963 | import_libimg: |
||
964 | dd alib_init1 |
||
965 | img_is_img dd aimg_is_img |
||
966 | img_info dd aimg_info |
||
967 | img_from_file dd aimg_from_file |
||
968 | img_to_file dd aimg_to_file |
||
969 | img_from_rgb dd aimg_from_rgb |
||
970 | img_to_rgb dd aimg_to_rgb |
||
971 | img_to_rgb2 dd aimg_to_rgb2 |
||
972 | img_decode dd aimg_decode |
||
973 | img_encode dd aimg_encode |
||
974 | img_create dd aimg_create |
||
975 | img_destroy dd aimg_destroy |
||
976 | img_destroy_layer dd aimg_destroy_layer |
||
977 | img_count dd aimg_count |
||
978 | img_lock_bits dd aimg_lock_bits |
||
979 | img_unlock_bits dd aimg_unlock_bits |
||
980 | img_flip dd aimg_flip |
||
981 | img_flip_layer dd aimg_flip_layer |
||
982 | img_rotate dd aimg_rotate |
||
983 | img_rotate_layer dd aimg_rotate_layer |
||
984 | img_draw dd aimg_draw |
||
985 | |||
986 | dd 0,0 |
||
987 | alib_init1 db 'lib_init',0 |
||
988 | aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение |
||
989 | aimg_info db 'img_info',0 |
||
990 | aimg_from_file db 'img_from_file',0 |
||
991 | aimg_to_file db 'img_to_file',0 |
||
992 | aimg_from_rgb db 'img_from_rgb',0 |
||
993 | aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB |
||
994 | aimg_to_rgb2 db 'img_to_rgb2',0 |
||
995 | aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных |
||
996 | aimg_encode db 'img_encode',0 |
||
997 | aimg_create db 'img_create',0 |
||
998 | aimg_destroy db 'img_destroy',0 |
||
999 | aimg_destroy_layer db 'img_destroy_layer',0 |
||
1000 | aimg_count db 'img_count',0 |
||
1001 | aimg_lock_bits db 'img_lock_bits',0 |
||
1002 | aimg_unlock_bits db 'img_unlock_bits',0 |
||
1003 | aimg_flip db 'img_flip',0 |
||
1004 | aimg_flip_layer db 'img_flip_layer',0 |
||
1005 | aimg_rotate db 'img_rotate',0 |
||
1006 | aimg_rotate_layer db 'img_rotate_layer',0 |
||
1007 | aimg_draw db 'img_draw',0 |
||
1008 | |||
1009 | align 4 |
||
1010 | import_buf2d_lib: |
||
1011 | dd sz_lib_init |
||
1012 | buf2d_create dd sz_buf2d_create |
||
1013 | buf2d_create_f_img dd sz_buf2d_create_f_img |
||
1014 | buf2d_clear dd sz_buf2d_clear |
||
1015 | buf2d_draw dd sz_buf2d_draw |
||
1016 | buf2d_delete dd sz_buf2d_delete |
||
1017 | buf2d_line dd sz_buf2d_line |
||
1018 | buf2d_circle dd sz_buf2d_circle |
||
1019 | buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 |
||
1020 | buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 |
||
1021 | buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 |
||
1022 | buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 |
||
1023 | buf2d_bit_blt dd sz_buf2d_bit_blt |
||
1024 | buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp |
||
1025 | buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha |
||
1026 | buf2d_cruve_bezier dd sz_buf2d_cruve_bezier |
||
1027 | buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix |
||
1028 | buf2d_draw_text dd sz_buf2d_draw_text |
||
1029 | buf2d_crop_color dd sz_buf2d_crop_color |
||
1030 | buf2d_offset_h dd sz_buf2d_offset_h |
||
1031 | dd 0,0 |
||
1032 | sz_lib_init db 'lib_init',0 |
||
1033 | sz_buf2d_create db 'buf2d_create',0 |
||
1034 | sz_buf2d_create_f_img db 'buf2d_create_f_img',0 |
||
1035 | sz_buf2d_clear db 'buf2d_clear',0 |
||
1036 | sz_buf2d_draw db 'buf2d_draw',0 |
||
1037 | sz_buf2d_delete db 'buf2d_delete',0 |
||
1038 | sz_buf2d_line db 'buf2d_line',0 |
||
1039 | sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности |
||
1040 | sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 |
||
1041 | sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 |
||
1042 | sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 |
||
1043 | sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 |
||
1044 | sz_buf2d_bit_blt db 'buf2d_bit_blt',0 |
||
1045 | sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 |
||
1046 | sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 |
||
1047 | sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0 |
||
1048 | sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 |
||
1049 | sz_buf2d_draw_text db 'buf2d_draw_text',0 |
||
1050 | sz_buf2d_crop_color db 'buf2d_crop_color',0 |
||
1051 | sz_buf2d_offset_h db 'buf2d_offset_h',0 |
||
1052 | |||
1053 | i_end: |
||
1054 | rb 1024 |
||
1055 | align 16 |
||
1056 | procinfo process_information |
||
1057 | stacktop: |
||
1058 | sys_path rb 4096 |
||
1059 | file_name: |
||
1060 | rb 4096 |
||
1061 | plugin_path: |
||
1062 | rb 4096 |
||
1063 | openfile_path: |
||
1064 | rb 4096 |
||
1065 | filename_area: |
||
1066 | rb 256 |
||
1067 | mem:-> |