forked from KolibriOS/kolibrios
414 lines
5.4 KiB
PHP
414 lines
5.4 KiB
PHP
|
;
|
||
|
; Functions for moving objects
|
||
|
;
|
||
|
; Author: Trans
|
||
|
; Date: 10.03.2005
|
||
|
; Compiler: FASM
|
||
|
; Target: Hunter - MeOS game
|
||
|
;
|
||
|
|
||
|
;
|
||
|
; In:
|
||
|
; Out:
|
||
|
init_object:
|
||
|
pusha
|
||
|
mov ecx,16
|
||
|
mov edi,movieng_objects
|
||
|
mov esi,present_objects_list
|
||
|
io_loc_00:
|
||
|
call init_one_object
|
||
|
add edi,16
|
||
|
loop io_loc_00
|
||
|
call set_current_objects_list
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
|
||
|
;
|
||
|
; In: EDI - pointer to object structure
|
||
|
; ESI - pointer to present_objects_list
|
||
|
; Out:
|
||
|
init_one_object:
|
||
|
call set_object
|
||
|
call set_obj_direction
|
||
|
call set_obj_coord
|
||
|
call set_obj_speed
|
||
|
call set_obj_amplitude
|
||
|
call set_obj_cost
|
||
|
retn
|
||
|
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_object:
|
||
|
call random_8
|
||
|
and al,07
|
||
|
shl eax,2
|
||
|
mov ebx,[esi+eax]
|
||
|
mov [edi],ebx
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_obj_coord:
|
||
|
call random_8
|
||
|
and ax,07Fh
|
||
|
cmp al,0
|
||
|
jz set_obj_coord
|
||
|
add ax,10
|
||
|
cmp ax,120
|
||
|
jb soc_loc_01
|
||
|
sub ax,20
|
||
|
soc_loc_01:
|
||
|
shl eax,16
|
||
|
xor ax,ax
|
||
|
mov al,byte [edi+0Ah]
|
||
|
cmp al,byte 0
|
||
|
jz soc_loc_00
|
||
|
mov ax,319
|
||
|
soc_loc_00:
|
||
|
ror eax,16
|
||
|
mov [edi+4],eax
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_obj_speed:
|
||
|
call random_8
|
||
|
and al,07h ;0Fh
|
||
|
cmp al,0
|
||
|
jz set_obj_speed
|
||
|
mov [edi+8],al
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_obj_amplitude:
|
||
|
call random_8
|
||
|
and al,0Fh
|
||
|
mov [edi+9],al
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_obj_direction:
|
||
|
call random_8
|
||
|
and al,1
|
||
|
mov [edi+0Ah],al
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_obj_cost:
|
||
|
call random_8
|
||
|
cmp al,0
|
||
|
jz set_obj_cost
|
||
|
mov [edi+0Bh],al
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
set_current_objects_list:
|
||
|
pusha
|
||
|
xor eax,eax
|
||
|
mov edi,forward_list
|
||
|
stosd
|
||
|
stosd
|
||
|
mov edi,back_list
|
||
|
stosd
|
||
|
stosd
|
||
|
mov edi,forward_list
|
||
|
call random_8
|
||
|
and al,7
|
||
|
cmp al,0
|
||
|
jz scol_loc_00a
|
||
|
mov ecx,eax
|
||
|
scol_loc_00:
|
||
|
call random_8
|
||
|
and al,7
|
||
|
stosb
|
||
|
loop scol_loc_00
|
||
|
scol_loc_00a:
|
||
|
mov edi,back_list
|
||
|
call random_8
|
||
|
and al,07
|
||
|
cmp al,0
|
||
|
jz scol_loc_01a
|
||
|
mov ecx,eax
|
||
|
scol_loc_01:
|
||
|
call random_8
|
||
|
and al,7
|
||
|
stosb
|
||
|
loop scol_loc_01
|
||
|
scol_loc_01a:
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
; In: EDI - pointer to object structure
|
||
|
; Out:
|
||
|
movie_one_object:
|
||
|
pusha
|
||
|
mov eax,[edi+4]
|
||
|
xor ebx,ebx
|
||
|
mov bl,byte [edi+8]
|
||
|
ror eax,16
|
||
|
cmp byte [edi+0Ah],0
|
||
|
jz moo_loc_00
|
||
|
sub ax,bx
|
||
|
cmp ax,320
|
||
|
jb moo_loc_01
|
||
|
mov ax,319
|
||
|
jmp moo_loc_01
|
||
|
moo_loc_00:
|
||
|
add ax,bx
|
||
|
cmp ax,320
|
||
|
jb moo_loc_01
|
||
|
xor ax,ax
|
||
|
moo_loc_01:
|
||
|
rol eax,16
|
||
|
mov [edi+4],eax
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
movie_objects:
|
||
|
pusha
|
||
|
mov esi,forward_list
|
||
|
mov ebx,movieng_objects
|
||
|
mov ecx,8
|
||
|
mo_loc_00:
|
||
|
xor eax,eax
|
||
|
lodsb
|
||
|
cmp al,0
|
||
|
jz mo_loc_01
|
||
|
mov edi,ebx
|
||
|
shl eax,4
|
||
|
add edi,eax
|
||
|
call movie_one_object
|
||
|
mo_loc_01:
|
||
|
loop mo_loc_00
|
||
|
add ebx,16*8
|
||
|
mov ecx,8
|
||
|
mo_loc_02:
|
||
|
xor eax,eax
|
||
|
lodsb
|
||
|
cmp al,0
|
||
|
jz mo_loc_03
|
||
|
mov edi,ebx
|
||
|
shl eax,4
|
||
|
add edi,eax
|
||
|
call movie_one_object
|
||
|
mo_loc_03:
|
||
|
loop mo_loc_02
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
|
||
|
;
|
||
|
; In: EDI - pointer to object structure
|
||
|
; Out:
|
||
|
draw_one_forward_object:
|
||
|
push esi
|
||
|
mov esi,[edi]
|
||
|
mov eax,[edi+4]
|
||
|
call draw_pict
|
||
|
pop esi
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
; In: EDI - pointer to object structure
|
||
|
; Out:
|
||
|
draw_one_back_object:
|
||
|
push esi
|
||
|
mov esi,[edi]
|
||
|
mov eax,[edi+4]
|
||
|
call draw_pict_scale_div_2
|
||
|
pop esi
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
draw_objects:
|
||
|
pusha
|
||
|
mov esi,back_list+7
|
||
|
mov ebx,movieng_objects+16*8
|
||
|
mov edi,ebx
|
||
|
mov ecx,8
|
||
|
do_loc_00:
|
||
|
xor eax,eax
|
||
|
; lodsb
|
||
|
mov al,[esi]
|
||
|
cmp al,0
|
||
|
jz do_loc_01
|
||
|
mov edi,ebx
|
||
|
shl eax,4
|
||
|
add edi,eax
|
||
|
call draw_one_back_object
|
||
|
do_loc_01:
|
||
|
dec esi
|
||
|
loop do_loc_00
|
||
|
; mov esi,forward_list
|
||
|
mov ebx,movieng_objects
|
||
|
mov ecx,8
|
||
|
do_loc_02:
|
||
|
xor eax,eax
|
||
|
; lodsb
|
||
|
mov al,[esi]
|
||
|
cmp al,0
|
||
|
jz do_loc_03
|
||
|
mov edi,ebx
|
||
|
shl eax,4
|
||
|
add edi,eax
|
||
|
call draw_one_forward_object
|
||
|
do_loc_03:
|
||
|
dec esi
|
||
|
loop do_loc_02
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
; In: EDI - pointer to object structure
|
||
|
; Out: Carry flag Clear/Set - No/Kill object
|
||
|
check_kill_one_forward_object:
|
||
|
pusha
|
||
|
mov esi,[edi]
|
||
|
lodsw
|
||
|
shl eax,16
|
||
|
lodsw
|
||
|
mov ebx,[edi+04]
|
||
|
mov edx,[mouse_coord]
|
||
|
add eax,ebx
|
||
|
cmp dx,bx
|
||
|
jb ckofo_loc_00
|
||
|
cmp dx,ax
|
||
|
ja ckofo_loc_00
|
||
|
shr eax,16
|
||
|
shr ebx,16
|
||
|
shr edx,16
|
||
|
cmp dx,bx
|
||
|
jb ckofo_loc_00
|
||
|
cmp dx,ax
|
||
|
ja ckofo_loc_00
|
||
|
stc
|
||
|
popa
|
||
|
retn
|
||
|
ckofo_loc_00:
|
||
|
clc
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
; In: EDI - pointer to object structure
|
||
|
; Out: Carry flag Clear/Set - No/Kill object
|
||
|
check_kill_one_back_object:
|
||
|
pusha
|
||
|
mov esi,[edi]
|
||
|
lodsw
|
||
|
shr eax,1
|
||
|
shl eax,16
|
||
|
lodsw
|
||
|
shr ax,1
|
||
|
mov ebx,[edi+04]
|
||
|
mov edx,[mouse_coord]
|
||
|
add eax,ebx
|
||
|
cmp dx,bx
|
||
|
jb ckobo_loc_00
|
||
|
cmp dx,ax
|
||
|
ja ckobo_loc_00
|
||
|
shr eax,16
|
||
|
shr ebx,16
|
||
|
shr edx,16
|
||
|
cmp dx,bx
|
||
|
jb ckobo_loc_00
|
||
|
cmp dx,ax
|
||
|
ja ckobo_loc_00
|
||
|
stc
|
||
|
popa
|
||
|
retn
|
||
|
ckobo_loc_00:
|
||
|
clc
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
check_kill_object:
|
||
|
pusha
|
||
|
mov esi,forward_list
|
||
|
mov ebx,movieng_objects
|
||
|
mov ecx,8
|
||
|
cko_loc_00:
|
||
|
xor eax,eax
|
||
|
lodsb
|
||
|
cmp al,0
|
||
|
jz cko_loc_01
|
||
|
shl eax,4
|
||
|
mov edi,ebx
|
||
|
add edi,eax
|
||
|
call check_kill_one_forward_object
|
||
|
jc cko_loc_kill
|
||
|
cko_loc_01:
|
||
|
loop cko_loc_00
|
||
|
add ebx,16*8
|
||
|
mov ecx,8
|
||
|
cko_loc_02:
|
||
|
xor eax,eax
|
||
|
lodsb
|
||
|
cmp al,0
|
||
|
jz cko_loc_03
|
||
|
shl eax,4
|
||
|
mov edi,ebx
|
||
|
add edi,eax
|
||
|
call check_kill_one_back_object
|
||
|
jc cko_loc_kill
|
||
|
cko_loc_03:
|
||
|
loop cko_loc_02
|
||
|
mov eax,[mouse_coord]
|
||
|
xor ebx,ebx
|
||
|
mov bl,byte [promakh_count]
|
||
|
shl ebx,2
|
||
|
add ebx,current_hole
|
||
|
mov dword [ebx],eax
|
||
|
inc byte [promakh_count]
|
||
|
popa
|
||
|
retn
|
||
|
cko_loc_kill:
|
||
|
dec esi
|
||
|
mov byte [esi],0
|
||
|
xor eax,eax
|
||
|
mov al,[edi+0Bh]
|
||
|
add dword [score_count],eax
|
||
|
clc
|
||
|
popa
|
||
|
retn
|
||
|
|
||
|
|
||
|
;
|
||
|
;
|
||
|
;
|
||
|
change_objects_speed:
|
||
|
pusha
|
||
|
mov esi,movieng_objects+8
|
||
|
mov ecx,16
|
||
|
cos_loc_00:
|
||
|
cmp byte [esi],0Fh
|
||
|
jz cos_next
|
||
|
inc byte [esi]
|
||
|
cos_next:
|
||
|
add esi,16
|
||
|
loop cos_loc_00
|
||
|
popa
|
||
|
retn
|