Subversion Repositories Kolibri OS

Rev

Rev 1573 | Rev 1609 | Go to most recent revision | Details | Compare with Previous | 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] ;высота буфера
1538 IgorA 34
buf2d_l equ word[edi+4] ;отступ слева
1535 IgorA 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
 
1552 IgorA 50
displ_w dd ? ;ширина поля
51
displ_h dd ? ;высота поля
52
displ_bytes dd ? ;размер 1-го файла с изображением
1573 IgorA 53
offs_shadow_x dd ? ;сдвиг теней по оси 'x'
54
offs_shadow_y dd ? ;сдвиг теней по оси 'y'
1552 IgorA 55
 
1535 IgorA 56
IMAGE_FONT_SIZE equ 128*144*3
57
 
1538 IgorA 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
 
1573 IgorA 64
 
1555 IgorA 65
FILE_NAME_MAX equ 20 ;максимальная длинна имени файла (без папок, относительно текущей)
66
;значения имен по умолчанию
1573 IgorA 67
ini_def_decorat_file db 'curici.png',0
1555 IgorA 68
ini_def_unit_file db 'wolf.png',0
1577 IgorA 69
ini_def_objects_file db 'eggs.png',0
1555 IgorA 70
;имена файлов
1573 IgorA 71
fn_icon0 rb FILE_NAME_MAX ;имя файла с декорациями
1555 IgorA 72
fn_icon1 rb FILE_NAME_MAX ;имя файла с волком и зайцем
1577 IgorA 73
fn_icon2 rb FILE_NAME_MAX ;имя файла с яйцами
1535 IgorA 74
fn_icon3 db 'chi.png',0 ;имя файла с циплятами
75
fn_font db 'font8x9.bmp',0
76
 
1552 IgorA 77
ini_name db 'nu_pogod.ini',0
78
ini_sec_files db 'Files',0
1573 IgorA 79
key_file_decorat db 'file_decorat',0
1555 IgorA 80
key_file_unit db 'file_unit',0
1577 IgorA 81
key_file_objects db 'file_objects',0
1552 IgorA 82
key_displ_w db 'displ_w',0
83
key_displ_h db 'displ_h',0
1573 IgorA 84
key_shadow_x db 'offs_shadow_x',0
85
key_shadow_y db 'offs_shadow_y',0
1555 IgorA 86
 
1577 IgorA 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
 
1552 IgorA 92
ini_sec_color db 'Colors',0
1573 IgorA 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
1552 IgorA 100
key_color_unit db 'unit',0
101
 
1538 IgorA 102
;цвета в игре
1573 IgorA 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
 
1538 IgorA 110
;цвета интерфейса
111
color_but_sm dd 0x808080 ;цвет маленьких кнопок
1552 IgorA 112
color_but_te dd 0xffffff ;цвет текста на кнопках
1535 IgorA 113
 
114
macro load_image_file path,buf,size { ;макрос для загрузки изображений
1552 IgorA 115
	copy_path path,sys_path,file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
116
 
1535 IgorA 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 ;маска для очистки падающих яиц и прибежавших циплят
1573 IgorA 152
mask_move_eggs equ 11111111111111111111b ;маска движущихся яиц
1535 IgorA 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-й бит который отвечает за бегущего права
1538 IgorA 160
val_zaac_time_y equ 5 ;колличество тактов, которое обязательно должен провисеть заяц
161
val_zaac_time_n equ 7 ;колличество тактов, которое обязательно должен быть спрятанным заяц
1535 IgorA 162
 
1552 IgorA 163
txt_game_a db 'Игра А',0
164
txt_game_b db 'Игра Б',0
165
 
1573 IgorA 166
zaac_status db 0 ;число тактов, которое заяц не должен менять свое положение
1535 IgorA 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 ;задержка игры
1577 IgorA 176
game_delay_a dd ? ;первоначальная задержка для игры А
177
game_delay_b dd ? ;первоначальная задержка для игры Б
178
game_delay_min dd ? ;минимальная задержка
1535 IgorA 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
1552 IgorA 201
	push eax edi
1535 IgorA 202
	mov edi,dword[buf]
1552 IgorA 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
 
1535 IgorA 213
	stdcall [buf2d_create_f_img], edi,[img_data] ;создаем буфер
214
	stdcall [buf2d_conv_24_to_8], edi,1 ;делаем буфер прозрачности 8бит
1538 IgorA 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
1552 IgorA 217
	pop edi eax
1535 IgorA 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
1573 IgorA 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:
1535 IgorA 250
 
1552 IgorA 251
	mov edi,buf_decor
1573 IgorA 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
1535 IgorA 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
1577 IgorA 423
			mov edi,dword[game_delay_min] ;минимальная задержка
424
			cmp dword[game_spd],edi
1535 IgorA 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
1538 IgorA 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 ;заяц от фонаря меняет статус
1535 IgorA 518
	jc @f
519
		xor byte[pos_wolf],val_zaac ;высовываем/засовываем зайца
1538 IgorA 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 ;ставим минимальное время для смены статуса
1535 IgorA 526
	@@:
1538 IgorA 527
	.no_zaac_move:
1535 IgorA 528
 
529
	;создание новых яиц
1573 IgorA 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
 
1535 IgorA 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 ;текст с числом пойманных яиц
1577 IgorA 568
	mov byte[count_last],0 ;штрафные очки
1535 IgorA 569
	mov dword[pos_eggs],0
1538 IgorA 570
	mov byte[zaac_status],0
1535 IgorA 571
 
1577 IgorA 572
	push eax ebx
1535 IgorA 573
	cmp dword[b],0
574
	jne @f
575
		mov byte[game_text+5],'А'
1577 IgorA 576
		mov eax,dword[game_delay_a]
577
		mov dword[game_spd],eax ;задержка игры
1535 IgorA 578
		jmp .end_init
579
	@@:
580
		mov byte[game_text+5],'Б'
1577 IgorA 581
		mov eax,dword[game_delay_b]
582
		mov dword[game_spd],eax ;задержка игры
1535 IgorA 583
	.end_init:
584
 
1577 IgorA 585
	mcall 26,9
586
	mov dword[rand_x],eax ;заполняем 1-е случайное число
1535 IgorA 587
	pop ebx eax
588
 
589
	ret
590
endp
591
 
592
align 4
1552 IgorA 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
1535 IgorA 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
 
1552 IgorA 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
1573 IgorA 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
1577 IgorA 642
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file
1573 IgorA 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
 
1577 IgorA 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
 
1573 IgorA 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
1552 IgorA 660
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_unit,0
661
	mov	dword[color_wolf],eax
1573 IgorA 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
1535 IgorA 666
 
1573 IgorA 667
	mov ebx,color_decorat
668
	mov byte[key_color_decorat.ind],'0'
669
	mov ecx,3
670
	cld
671
	@@:
1577 IgorA 672
		push ecx ;функция ini_get_color имеет право манять регистр ecx
1573 IgorA 673
		stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080
1577 IgorA 674
		pop ecx
1573 IgorA 675
		mov dword[ebx],eax
676
		add ebx,4
677
		inc byte[key_color_decorat.ind]
678
		loop @b
1555 IgorA 679
 
1552 IgorA 680
	mov edx,dword[displ_w]
681
	imul edx,dword[displ_h]
682
	lea edx,[edx+edx*2]
683
	mov dword[displ_bytes],edx ;вычисляем размер игрового поля
1535 IgorA 684
 
1552 IgorA 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 буферов с циплятами
1535 IgorA 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
 
1552 IgorA 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
1535 IgorA 708
	stdcall [buf2d_create], buf_displ ;создаем буфер для вывода на экран
1552 IgorA 709
 
710
	mov edi,buf_fon
711
	mov buf2d_w,ebx
712
	mov buf2d_h,edx
713
	stdcall [buf2d_create], buf_fon ;создаем буфер с фоновыми декорациями
714
 
1535 IgorA 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
1538 IgorA 813
	mov ebx,20*65536+480
814
	mov ecx,20*65536+270
1535 IgorA 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]
1552 IgorA 824
	cmp eax,dword[displ_w]
1535 IgorA 825
	jle @f
1552 IgorA 826
		sub eax,dword[displ_w]
1535 IgorA 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
1552 IgorA 837
	add esi,dword[displ_w]
1535 IgorA 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
 
1538 IgorA 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
 
1552 IgorA 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
 
1538 IgorA 889
	; *** восстановление параметров ***
890
	mov eax,13 ;рисование прямоугольника
891
	mov edx,[sc.work]
892
 
1535 IgorA 893
	mov ebx,esi
894
	mov ecx,dword[procinfo.client_box.height]
895
	inc ecx
1552 IgorA 896
	mov esi,dword[displ_h]
1535 IgorA 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
1552 IgorA 908
	mov ecx,dword[displ_h]
1535 IgorA 909
	int 0x40 ;рисование левого бокового поля
910
 
911
	mcall 12,2
912
	popad
913
	ret
914
 
915
align 4
916
draw_display:
917
 
1552 IgorA 918
	stdcall mem_copy, dword[buf_fon],dword[buf_displ],315*210*3;dword[displ_bytes] ;копирование изображения из фонового буфера
919
	call DrawZaac ;рисуем зайца
1535 IgorA 920
	call DrawWolf ;рисуем волка
1552 IgorA 921
	call DrawEggs ;рисуем яйца
1535 IgorA 922
 
1552 IgorA 923
push eax
924
	mov eax,dword[displ_w]
925
	shr eax,1
1573 IgorA 926
	stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;рисуем строку с текстом
1552 IgorA 927
pop eax
1535 IgorA 928
	stdcall [buf2d_draw], buf_displ
929
	ret
930
 
931
align 4
932
button:
933
	mcall 17 ;получить код нажатой кнопки
1573 IgorA 934
 
1538 IgorA 935
	cmp ah,5
936
	jne @f
937
		stdcall InitGame,0
938
	@@:
939
	cmp ah,6
940
	jne @f
941
		stdcall InitGame,1
1573 IgorA 942
	@@:
1535 IgorA 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
1552 IgorA 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
1535 IgorA 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
 
1552 IgorA 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
 
1535 IgorA 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
1552 IgorA 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
1535 IgorA 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
1577 IgorA 1053
hed db 'Nu pogodi 22.08.10',0 ;подпись окна
1535 IgorA 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
1552 IgorA 1067
buf_displ:
1535 IgorA 1068
	dd 0 ;указатель на буфер изображения
1552 IgorA 1069
	dw 25,0
1070
	dd ? ;+8 w
1071
	dd ? ;+12 h
1072
	dd 0 ;+16 color
1535 IgorA 1073
	db 24 ;+20 bit in pixel
1552 IgorA 1074
 
1535 IgorA 1075
align 4
1552 IgorA 1076
buf_fon: ;фоновый буфер
1535 IgorA 1077
	dd 0 ;указатель на буфер изображения
1078
	dw 0 ;+4 left
1079
	dw 0 ;+6 top
1552 IgorA 1080
	dd ? ;+8 w
1081
	dd ? ;+12 h
1535 IgorA 1082
	dd 0xffffff ;+16 color
1083
	db 24 ;+20 bit in pixel
1084
 
1085
align 4
1552 IgorA 1086
buf_decor: ;буфера с декорациями: домиками и рейками; с курицами; с растениями
1087
	rb 3*BUF_STRUCT_SIZE
1535 IgorA 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
 
1552 IgorA 1101
 
1102
 
1535 IgorA 1103
align 4
1552 IgorA 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
1535 IgorA 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: