Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 484 → Rev 485

/programs/games/hunter/trunk/object.inc
0,0 → 1,413
;
; 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