kolibrios/programs/games/rstearth/actions.inc

158 lines
3.6 KiB
PHP
Raw Normal View History

;---------------------------------------------------------------------
actions_for_all_cell:
;; DEBUGF 1, "actions_for_all\n"
; set start coordinates
mov ebx,LEVEL_MAP_SIZE_Y
mov ecx,plan_level+(LEVEL_MAP_SIZE_Y*LEVEL_MAP_SIZE_X*4)-4
;--------------------------------------
.new_y:
mov eax,LEVEL_MAP_SIZE_X
;--------------------------------------
.new_x:
push eax ebx ecx
mov [action_cell_x],eax
mov [action_cell_y],ebx
mov edx,[ecx]
mov [current_cell_NPC],dh
test dh,dh ; empty
jz .end_processing_sell
; mov ebp,ecx
; sub ebp,plan_level
; DEBUGF 1, "Y : %x X: %x cell: %x ebp: %x\n",ebx,eax,edx,ebp
ror edx,16
test dh,dh
jnz .end_processing_sell
test dl,dl
jz .end_processing_sell
; call processing_NPC_route
; DEBUGF 1, "new cell: %x\n",edx
cmp [current_cell_NPC],OBJECT_FINAL_MONSTER
ja @f
call processing_npc_action
jmp .end_processing_sell
;--------------------------------------
@@:
cmp [current_cell_NPC],OBJECT_PROTAGONIST
jne @f
call processing_protagonist_action
jmp .end_processing_sell
;--------------------------------------
@@:
cmp [current_cell_NPC],OBJECT_WHITE_BRICK
jne .end_processing_sell
call processing_white_brick
;--------------------------------------
.end_processing_sell:
pop ecx ebx eax
sub ecx,4
dec eax
jnz .new_x
dec ebx
jnz .new_y
;; DEBUGF 1, "actions_for_all END\n"
ret
;---------------------------------------------------------------------
action_stop:
; DEBUGF 1, "action_stop\n"
mov dx,0x0100
rol edx,16
mov [ecx],edx
ret
;---------------------------------------------------------------------
object_death:
mov dx,0x01
shl edx,24
mov [ecx],edx
ret
;---------------------------------------------------------------------
save_route_to_current_position:
ror eax,16
mov ax,si
rol eax,16
rol edx,16
mov ax,dx
mov [ecx],eax ; new route for unit
ret
;---------------------------------------------------------------------
save_new_and_clear_old_position:
; DEBUGF 1, "save_new_and_clear_old_position\n"
ror eax,16
mov ax,si
rol eax,16
rol edx,16
mov ah,dh
mov [edi],eax ; new cell for unit
and edx,0xff
add edx,0x01000000 ; clear old cell and show
mov [ecx],edx
; copy object id
mov eax,[ecx+LEVEL_MAP_SIZE_X*LEVEL_MAP_SIZE_Y*4]
mov [edi+LEVEL_MAP_SIZE_X*LEVEL_MAP_SIZE_Y*4],eax
xor eax,eax
mov [ecx+LEVEL_MAP_SIZE_X*LEVEL_MAP_SIZE_Y*4],eax
ret
;---------------------------------------------------------------------
harvest_of_death:
xor eax,eax
mov [death_of_protagonist],al
mov [npc_alive],al
mov esi,plan_level
mov ecx,LEVEL_MAP_SIZE_X*LEVEL_MAP_SIZE_Y
cld
;--------------------------------------
.loop:
lodsd
test ah,ah
jz .counter
cmp al,BASE_LAVA
je .base_lava
cmp al,BASE_WATER
je .base_water
cmp ah,OBJECT_FINAL_MONSTER
ja .counter
mov [npc_alive],1
;--------------------------------------
.counter:
dec ecx
jnz .loop
ret
;--------------------------------------
.base_water:
cmp ah,OBJECT_PROTAGONIST
jne .kill_object
;--------------------------------------
.kill_protagonist:
mov [death_of_protagonist],1
jmp .kill_object
;--------------------------------------
.base_lava:
cmp ah,OBJECT_PROTAGONIST
je .kill_protagonist
cmp ah,OBJECT_SKELETON
ja .counter
;--------------------------------------
.kill_object:
; DEBUGF 1, "kill_object\n"
and eax,0x000000ff
add eax,0x01000000
mov [esi-4],eax
xor eax,eax
mov [esi-4-plan_level+objects_id],eax
jmp .counter
;---------------------------------------------------------------------