; ; 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