kolibrios/programs/games/hunter/trunk/picture.inc

419 lines
5.6 KiB
PHP
Raw Normal View History

;
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;
; Author: Trans
; Date: 08.03.2005
; Compiler: FASM
; Target: Hunter - MeOS game
;
;
; In: DS:ESI - <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> RGB
; EAX - X <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * 65536 + Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; //EBX - Z <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD>
; Out:
draw_pict:
pusha
mov edx,eax
shr edx,16
xor edi,edi
mov di,ax
shl di,3 ; *8
shl ax,1 ; *2
add ax,di ; = *10
shl ax,5 ; = *320
mov di,ax
shr eax,16
add di,ax ; di=Y*320+X
mov eax,edi
shl eax,1 ; = *2
add edi,eax ; = (Y*320+X)*3
add edi,buffer00
lodsw
shl eax,16
lodsw
ror eax,16
xor ecx,ecx
mov cx,320
sub cx,dx
xor edx,edx
cmp cx,ax
jae dp_loc_00
sub ax,cx
mov dx,ax
shl ax,1
add dx,ax ; invisible part for X
mov ax,cx
dp_loc_00:
mov cx,ax
xor ebx,ebx
mov bx,320
sub bx,ax
mov ax,bx
shl ax,1
add bx,ax ; additional offset for X
shr eax,16
xchg ecx,eax
dp_loc_01:
push ecx
push eax
mov ecx,eax
dp_loc_02:
mov eax,[esi]
and eax,00FFFFFFh
cmp eax,00FFFFFFh
jnz dp_loc_03_next
add esi,3
add edi,3
jmp dp_loc_04
dp_loc_03_next:
movsb
movsw
dp_loc_04:
loop dp_loc_02
add esi,edx
add edi,ebx
pop eax
pop ecx
loop dp_loc_01
popa
retn
;
; In: DS:ESI - <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> RGB
; EAX - X <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * 65536 + Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; //EBX - Z <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD>
; Out:
draw_pict_scale_div_2:
pusha
mov edi,buffer01
lodsd
xor ebx,ebx
xor ebp,ebp
mov bx,ax
mov bp,ax
shl ebp,1
add ebp,ebx
shr ax,1
stosw
mov bx,ax
shr eax,17
stosw
xor ecx,ecx
mov cx,ax
dpsd2_loc_00:
push ecx
mov ecx,ebx
dpsd2_loc_01:
push ecx
mov ecx,3
dpsd2_loc_02:
xor eax,eax
mov edx,eax
mov al,[esi]
mov dl,[esi+3]
add eax,edx
mov dl,[esi+ebp]
add eax,edx
mov dl,[esi+ebp+3]
add eax,edx
shr eax,2
stosb
inc esi
loop dpsd2_loc_02
add esi,3
pop ecx
loop dpsd2_loc_01
add esi,ebp
pop ecx
loop dpsd2_loc_00
popa
pusha
mov esi,buffer01
call draw_pict
popa
retn
;
; In:
; Out:
draw_backside:
pusha
mov edi,buffer00
mov ecx,50
mov eax,00FFFFFFh
dbs_loc_00:
push ecx
mov ecx,320
dbs_loc_01:
mov ebx,eax
stosw
shr eax,16
stosb
mov eax,ebx
stosw
shr eax,16
stosb
mov eax,ebx
loop dbs_loc_01
sub eax,00010100h
pop ecx
loop dbs_loc_00
mov ecx,100
mov eax,0000C000h
dbs_loc_02:
push ecx
mov ecx,320
dbs_loc_03:
mov ebx,eax
stosw
shr eax,16
stosb
mov eax,ebx
loop dbs_loc_03
add eax,00010001h
pop ecx
loop dbs_loc_02
popa
retn
;
; In:
; Out:
buffer_scale_on_2:
pusha
mov esi,buffer00
mov edi,buffer02
mov ecx,200
bso2_loc_00:
push ecx
mov ecx,2
bso2_loc_01:
push ecx
push esi
mov ecx,320
bso2_loc_02:
mov eax,[esi]
and eax,00FFFFFFh
mov ebx,eax
stosw
shr eax,16
stosb
mov eax,ebx
stosw
shr eax,16
stosb
add esi,3
loop bso2_loc_02
pop esi
pop ecx
loop bso2_loc_01
add esi,320*3
pop ecx
loop bso2_loc_00
popa
retn
;
; In: EAX = X coordinate * 65536 + Y coordinate
; EBX = Number
; Out:
number_print:
pusha
mov edi,buf_local
mov ebp,eax
mov eax,ebx
or eax,eax
jz np_loc_null
mov ebx,100
mov ecx,5
np_loc_00:
xor edx,edx
div ebx
xchg eax,edx
aam
stosw
mov eax,edx
loop np_loc_00
dec edi
mov eax,ebp
mov ecx,10
np_loc_01:
cmp byte [edi],0
jnz np_loc_02
dec edi
loop np_loc_01
np_loc_02:
xor ebx,ebx
mov bl,[edi]
shl ebx,2
add ebx,pointer_digit_table
mov esi,[ebx]
call draw_pict
add eax,10*65536+0
dec edi
loop np_loc_02
popa
retn
np_loc_null:
mov eax,ebp
mov esi,[pointer_digit_table]
call draw_pict
popa
retn
pointer_digit_table:
dd buf_num0, buf_num1, buf_num2, buf_num3, buf_num4
dd buf_num5, buf_num6, buf_num7, buf_num8, buf_num9
buf_local:
times 12 db 0
;
; In: EAX = X*65536+Y
; Out:
draw_lives:
pusha
mov esi,buf_heart
xor ecx,ecx
mov cl,[lives_count]
cmp cl,0
jz dl_loc_01
dl_loc_00:
call draw_pict
add eax,16*65536+0
loop dl_loc_00
dl_loc_01:
popa
retn
;
; In:
; Out:
draw_mushka:
mov esi,buf_mushka
mov eax,[mouse_coord]
ror eax,16
cmp ax,16
jae dm_loc_00
mov ax,16
dm_loc_00:
sub ax,16
rol eax,16
cmp ax,16
jae dm_loc_01
mov ax,16
dm_loc_01:
sub ax,16
call draw_pict
retn
;
; In: eax - hole coordinate
; Out:
draw_hole:
mov esi,buf_hole
; mov eax,[current_hole]
cmp eax,0
jz dh_loc_02
ror eax,16
cmp ax,8
jae dh_loc_00
mov ax,8
dh_loc_00:
sub ax,8
rol eax,16
cmp ax,8
jae dh_loc_01
mov ax,8
dh_loc_01:
sub ax,8
call draw_pict_scale_div_2
dh_loc_02:
retn
;
;
;
draw_promakh:
mov esi,buf_hole
xor ecx,ecx
mov cl,[promakh_count]
cmp cl,0
jz dpr_loc_exit
mov ebx,current_hole
mov eax,dword [ebx] ;300*65536+180
dpr_loc_00:
call draw_hole
; call draw_pict_scale_div_2
; sub ax,16
add ebx,4
mov eax,dword [ebx]
loop dpr_loc_00
dpr_loc_exit:
retn
;
; In:
; Out:
clear_buffer:
push eax
push ecx
push edi
mov edi,buffer00
mov ecx,(320*201*3)/4
xor eax,eax
rep stosd
pop edi
pop ecx
pop eax
retn
;
; In: AX - X <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [0,639]
; BX - Y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [0,479]
; Out:
refresh_screen:
pusha
popa
retn
;
; In:
; Out:
smooth_filter:
pusha
mov ecx,320*200*3
mov edi,buffer00
sf_loc_00:
xor ax,ax
xor dx,dx ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mov al,[edi]
shl ax,2 ;*4
mov dx,ax
xor ax,ax
mov al,[edi-320*3]
add dx,ax
mov al,[edi-3]
add dx,ax
mov al,[edi+3]
add dx,ax
mov al,[edi+320*3]
add dx,ax
xchg dx,ax
shr ax,3 ;/8
mov byte [edi],al
inc edi
loop sf_loc_00
popa
retn
;smooth_matrix:
; db 0, 1, 0 /
; db 1, 4, 1 / 8
; db 0, 1, 0 /