Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
485 heavyiron 1
;
2
; Работа с картинками или их образами
3
;
4
; Author:   Trans
5
; Date:     08.03.2005
6
; Compiler: FASM
7
; Target:   Hunter - MeOS game
8
;
9
 
10
;
11
; In:  DS:ESI - указатель на образ картинки в RGB
12
;      EAX - X координата * 65536 + Y координата
13
;      //EBX - Z координата
14
; Out:
15
draw_pict:
16
	pusha
17
	mov edx,eax
18
	shr edx,16
19
	xor edi,edi
20
	mov di,ax
21
	shl di,3	; *8
22
	shl ax,1	; *2
23
	add ax,di	; = *10
24
	shl ax,5	; = *320
25
	mov di,ax
26
	shr eax,16
27
	add di,ax	; di=Y*320+X
28
	mov eax,edi
29
	shl eax,1	; = *2
30
	add edi,eax	; = (Y*320+X)*3
31
	add edi,buffer00
32
	lodsw
33
	shl eax,16
34
	lodsw
35
	ror eax,16
36
	xor ecx,ecx
37
	mov cx,320
38
	sub cx,dx
39
	xor edx,edx
40
	cmp cx,ax
41
	jae dp_loc_00
42
	sub ax,cx
43
	mov dx,ax
44
	shl ax,1
45
	add dx,ax	; invisible part for X
46
	mov ax,cx
47
dp_loc_00:
48
	mov cx,ax
49
	xor ebx,ebx
50
	mov bx,320
51
	sub bx,ax
52
	mov ax,bx
53
	shl ax,1
54
	add bx,ax	; additional offset for X
55
	shr eax,16
56
	xchg ecx,eax
57
dp_loc_01:
58
	push ecx
59
	push eax
60
	mov ecx,eax
61
dp_loc_02:
62
	mov eax,[esi]
63
	and eax,00FFFFFFh
64
	cmp eax,00FFFFFFh
65
	jnz dp_loc_03_next
66
	add esi,3
67
	add edi,3
68
	jmp dp_loc_04
69
dp_loc_03_next:
70
	movsb
71
	movsw
72
dp_loc_04:
73
	loop dp_loc_02
74
	add esi,edx
75
	add edi,ebx
76
	pop eax
77
	pop ecx
78
	loop dp_loc_01
79
	popa
80
	retn
81
 
82
;
83
; In:  DS:ESI - указатель на образ картинки в RGB
84
;      EAX - X координата * 65536 + Y координата
85
;      //EBX - Z координата
86
; Out:
87
draw_pict_scale_div_2:
88
	pusha
89
	mov edi,buffer01
90
	lodsd
91
	xor ebx,ebx
92
	xor ebp,ebp
93
	mov bx,ax
94
	mov bp,ax
95
	shl ebp,1
96
	add ebp,ebx
97
	shr ax,1
98
	stosw
99
	mov bx,ax
100
	shr eax,17
101
	stosw
102
	xor ecx,ecx
103
	mov cx,ax
104
dpsd2_loc_00:
105
	push ecx
106
	mov ecx,ebx
107
dpsd2_loc_01:
108
	push ecx
109
	mov ecx,3
110
dpsd2_loc_02:
111
	xor eax,eax
112
	mov edx,eax
113
	mov al,[esi]
114
	mov dl,[esi+3]
115
	add eax,edx
116
	mov dl,[esi+ebp]
117
	add eax,edx
118
	mov dl,[esi+ebp+3]
119
	add eax,edx
120
	shr eax,2
121
	stosb
122
	inc esi
123
	loop dpsd2_loc_02
124
	add esi,3
125
	pop ecx
126
	loop dpsd2_loc_01
127
	add esi,ebp
128
	pop ecx
129
	loop dpsd2_loc_00
130
	popa
131
	pusha
132
	mov esi,buffer01
133
	call draw_pict
134
	popa
135
	retn
136
 
137
 
138
;
139
; In:
140
; Out:
141
draw_backside:
142
	pusha
143
	mov edi,buffer00
144
	mov ecx,50
145
	mov eax,00FFFFFFh
146
dbs_loc_00:
147
	push ecx
148
	mov ecx,320
149
dbs_loc_01:
150
	mov ebx,eax
151
	stosw
152
	shr eax,16
153
	stosb
154
	mov eax,ebx
155
	stosw
156
	shr eax,16
157
	stosb
158
	mov eax,ebx
159
	loop dbs_loc_01
160
	sub eax,00010100h
161
	pop ecx
162
	loop dbs_loc_00
163
	mov ecx,100
164
	mov eax,0000C000h
165
dbs_loc_02:
166
	push ecx
167
	mov ecx,320
168
dbs_loc_03:
169
	mov ebx,eax
170
	stosw
171
	shr eax,16
172
	stosb
173
	mov eax,ebx
174
	loop dbs_loc_03
175
	add eax,00010001h
176
	pop ecx
177
	loop dbs_loc_02
178
	popa
179
	retn
180
 
181
;
182
; In:
183
; Out:
184
buffer_scale_on_2:
185
	pusha
186
	mov esi,buffer00
187
	mov edi,buffer02
188
	mov ecx,200
189
bso2_loc_00:
190
	push ecx
191
	mov ecx,2
192
bso2_loc_01:
193
	push ecx
194
	push esi
195
	mov ecx,320
196
bso2_loc_02:
197
	mov eax,[esi]
198
	and eax,00FFFFFFh
199
	mov ebx,eax
200
	stosw
201
	shr eax,16
202
	stosb
203
	mov eax,ebx
204
	stosw
205
	shr eax,16
206
	stosb
207
	add esi,3
208
	loop bso2_loc_02
209
	pop esi
210
	pop ecx
211
	loop bso2_loc_01
212
	add esi,320*3
213
	pop ecx
214
	loop bso2_loc_00
215
	popa
216
	retn
217
 
218
 
219
;
220
; In:  EAX = X coordinate * 65536 + Y coordinate
221
;      EBX = Number
222
; Out:
223
number_print:
224
	pusha
225
	mov edi,buf_local
226
	mov ebp,eax
227
	mov eax,ebx
228
	or eax,eax
229
	jz np_loc_null
230
	mov ebx,100
231
	mov ecx,5
232
np_loc_00:
233
	xor edx,edx
234
	div ebx
235
	xchg eax,edx
236
	aam
237
	stosw
238
	mov eax,edx
239
	loop np_loc_00
240
	dec edi
241
	mov eax,ebp
242
	mov ecx,10
243
np_loc_01:
244
	cmp byte [edi],0
245
	jnz np_loc_02
246
	dec edi
247
	loop np_loc_01
248
np_loc_02:
249
	xor ebx,ebx
250
	mov bl,[edi]
251
	shl ebx,2
252
	add ebx,pointer_digit_table
253
	mov esi,[ebx]
254
	call draw_pict
255
	add eax,10*65536+0
256
	dec edi
257
	loop np_loc_02
258
	popa
259
	retn
260
np_loc_null:
261
	mov eax,ebp
262
	mov esi,[pointer_digit_table]
263
	call draw_pict
264
	popa
265
	retn
266
pointer_digit_table:
267
	dd buf_num0, buf_num1, buf_num2, buf_num3, buf_num4
268
	dd buf_num5, buf_num6, buf_num7, buf_num8, buf_num9
269
buf_local:
270
	times 12 db 0
271
 
272
 
273
;
274
; In:  EAX = X*65536+Y
275
; Out:
276
draw_lives:
277
	pusha
278
	mov esi,buf_heart
279
	xor ecx,ecx
280
	mov cl,[lives_count]
281
	cmp cl,0
282
	jz dl_loc_01
283
dl_loc_00:
284
	call draw_pict
285
	add eax,16*65536+0
286
	loop dl_loc_00
287
dl_loc_01:
288
	popa
289
	retn
290
 
291
;
292
; In:
293
; Out:
294
draw_mushka:
295
	mov esi,buf_mushka
296
	mov eax,[mouse_coord]
297
	ror eax,16
298
	cmp ax,16
299
	jae dm_loc_00
300
	mov ax,16
301
dm_loc_00:
302
	sub ax,16
303
	rol eax,16
304
	cmp ax,16
305
	jae dm_loc_01
306
	mov ax,16
307
dm_loc_01:
308
	sub ax,16
309
	call draw_pict
310
	retn
311
 
312
;
313
; In:   eax - hole coordinate
314
; Out:
315
draw_hole:
316
	mov esi,buf_hole
317
;	mov eax,[current_hole]
318
	cmp eax,0
319
	jz dh_loc_02
320
	ror eax,16
321
	cmp ax,8
322
	jae dh_loc_00
323
	mov ax,8
324
dh_loc_00:
325
	sub ax,8
326
	rol eax,16
327
	cmp ax,8
328
	jae dh_loc_01
329
	mov ax,8
330
dh_loc_01:
331
	sub ax,8
332
	call draw_pict_scale_div_2
333
dh_loc_02:
334
	retn
335
 
336
;
337
;
338
;
339
draw_promakh:
340
	mov esi,buf_hole
341
	xor ecx,ecx
342
	mov cl,[promakh_count]
343
	cmp cl,0
344
	jz dpr_loc_exit
345
	mov ebx,current_hole
346
	mov eax,dword [ebx]  ;300*65536+180
347
dpr_loc_00:
348
	call draw_hole
349
;	call draw_pict_scale_div_2
350
;	sub ax,16
351
	add ebx,4
352
	mov eax,dword [ebx]
353
	loop dpr_loc_00
354
dpr_loc_exit:
355
	retn
356
 
357
 
358
;
359
; In:
360
; Out:
361
clear_buffer:
362
	push eax
363
	push ecx
364
	push edi
365
	mov edi,buffer00
366
	mov ecx,(320*201*3)/4
367
	xor eax,eax
368
	rep stosd
369
	pop edi
370
	pop ecx
371
	pop eax
372
	retn
373
 
374
;
375
; In:  AX - X координата [0,639]
376
;      BX - Y координата [0,479]
377
; Out:
378
refresh_screen:
379
	pusha
380
	popa
381
	retn
382
 
383
 
384
;
385
; In:
386
; Out:
387
smooth_filter:
388
	pusha
389
	mov ecx,320*200*3
390
	mov edi,buffer00
391
sf_loc_00:
392
	xor ax,ax
393
	xor dx,dx	;счетчик
394
	mov al,[edi]
395
	shl ax,2	;*4
396
	mov dx,ax
397
	xor ax,ax
398
	mov al,[edi-320*3]
399
	add dx,ax
400
	mov al,[edi-3]
401
	add dx,ax
402
	mov al,[edi+3]
403
	add dx,ax
404
	mov al,[edi+320*3]
405
	add dx,ax
406
	xchg dx,ax
407
	shr ax,3	;/8
408
	mov byte [edi],al
409
	inc edi
410
	loop sf_loc_00
411
	popa
412
	retn
413
;smooth_matrix:
414
;	db  0, 1, 0      /
415
;	db  1, 4, 1    /   8
416
;	db  0, 1, 0  /
417