forked from KolibriOS/kolibrios
419 lines
5.6 KiB
PHP
419 lines
5.6 KiB
PHP
|
;
|
|||
|
; <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 /
|
|||
|
|
|||
|
|