kolibrios/programs/games/hunter/trunk/picture.inc
heavyiron 4daae89053 *kernel - fixes in 15.2 by Mario79 and 67 by mike.dld
updated sysfunc.txt
*programs 
         new icons and logo for CPUID and ICON
         added new version of @ICON and ICONMNGR
         fixes in iconedit and calendar from DedOK
         new algoritm of fill background in pic4
         all apps (fasm-writen only) rewriten to use common macros.inc for easy recompile in fastcall mode (there is a bug in https; run need rewrite to use common macros.inc)
         small fixes in build_all.bat script
         

git-svn-id: svn://kolibrios.org@485 a494cfbc-eb01-0410-851d-a64ba20cac60
2007-05-10 13:48:35 +00:00

419 lines
5.6 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; <EFBFBD> ¡®â  á ª à⨭ª ¬¨ ¨«¨ ¨å ®¡à § ¬¨
;
; Author: Trans
; Date: 08.03.2005
; Compiler: FASM
; Target: Hunter - MeOS game
;
;
; In: DS:ESI - 㪠§ â¥«ì ­  ®¡à § ª à⨭ª¨ ¢ RGB
; EAX - X ª®®à¤¨­ â  * 65536 + Y ª®®à¤¨­ â 
; //EBX - Z ª®®à¤¨­ â 
; 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 - 㪠§ â¥«ì ­  ®¡à § ª à⨭ª¨ ¢ RGB
; EAX - X ª®®à¤¨­ â  * 65536 + Y ª®®à¤¨­ â 
; //EBX - Z ª®®à¤¨­ â 
; 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 ª®®à¤¨­ â  [0,639]
; BX - Y ª®®à¤¨­ â  [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 ;áç¥â稪
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 /