0,0 → 1,418 |
; |
; ¡®â á ª à⨪ ¬¨ ¨«¨ ¨å ®¡à § ¬¨ |
; |
; 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 / |
|
|