2014-12-21 21:22:09 +01:00
|
|
|
|
;*****************************************************************************
|
|
|
|
|
; Rusty Earth - for Kolibri OS
|
|
|
|
|
; Copyright (c) 2014, Marat Zakiyanov aka Mario79, aka Mario
|
|
|
|
|
; All rights reserved.
|
|
|
|
|
;
|
|
|
|
|
; Redistribution and use in source and binary forms, with or without
|
|
|
|
|
; modification, are permitted provided that the following conditions are met:
|
|
|
|
|
; * Redistributions of source code must retain the above copyright
|
|
|
|
|
; notice, this list of conditions and the following disclaimer.
|
|
|
|
|
; * Redistributions in binary form must reproduce the above copyright
|
|
|
|
|
; notice, this list of conditions and the following disclaimer in the
|
|
|
|
|
; documentation and/or other materials provided with the distribution.
|
|
|
|
|
; * Neither the name of the <organization> nor the
|
|
|
|
|
; names of its contributors may be used to endorse or promote products
|
|
|
|
|
; derived from this software without specific prior written permission.
|
|
|
|
|
;
|
|
|
|
|
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
|
|
|
|
|
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
|
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
|
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
|
|
|
|
|
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
|
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
|
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
|
|
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
|
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
|
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
;*****************************************************************************
|
|
|
|
|
use32
|
|
|
|
|
org 0x0
|
|
|
|
|
|
|
|
|
|
db 'MENUET01'
|
|
|
|
|
dd 0x01
|
|
|
|
|
dd START
|
|
|
|
|
dd IM_END
|
|
|
|
|
dd I_END
|
|
|
|
|
dd stacktop
|
2014-12-30 02:18:21 +01:00
|
|
|
|
dd bootparam
|
2014-12-21 21:22:09 +01:00
|
|
|
|
dd path
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
include 'lang.inc'
|
|
|
|
|
include '../../macros.inc'
|
|
|
|
|
include '../../proc32.inc'
|
|
|
|
|
;define __DEBUG__ 1
|
|
|
|
|
;define __DEBUG_LEVEL__ 1
|
|
|
|
|
;include '../../debug-fdo.inc'
|
|
|
|
|
include '../../develop/libraries/box_lib/load_lib.mac'
|
|
|
|
|
;include '../../develop/libraries/box_lib/trunk/box_lib.mac'
|
|
|
|
|
@use_library
|
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-26 09:36:21 +01:00
|
|
|
|
FONT_SIZE_X = 32
|
|
|
|
|
FONT_REAL_SIZE_X = 32
|
|
|
|
|
FONT_SIZE_Y = 32
|
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-21 21:22:09 +01:00
|
|
|
|
LEVEL_MAP_SIZE_X = 10
|
|
|
|
|
LEVEL_MAP_SIZE_Y = 10
|
|
|
|
|
SPRITE_SIZE_X = 64
|
|
|
|
|
SPRITE_SIZE_Y = 64
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
ROUTE_UP = 1
|
|
|
|
|
ROUTE_DOWN = 2
|
|
|
|
|
ROUTE_LEFT = 3
|
|
|
|
|
ROUTE_RIGHT = 4
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
OBJECT_DEATH = 1
|
|
|
|
|
OBJECT_SKELETON = 2
|
|
|
|
|
OBJECT_IFRIT = 3
|
|
|
|
|
OBJECT_BARRET = 4
|
2014-12-30 02:18:21 +01:00
|
|
|
|
OBJECT_FINAL_MONSTER = 14 ; 0Eh
|
|
|
|
|
OBJECT_PROTAGONIST = 15 ; 0Fh
|
|
|
|
|
OBJECT_RED_BRICK = 16 ; 10h
|
|
|
|
|
OBJECT_WHITE_BRICK = 17 ; 11h
|
2014-12-21 21:22:09 +01:00
|
|
|
|
RED_BRICK_CRASH_1 = 0x80
|
|
|
|
|
RED_BRICK_CRASH_2 = 0x81
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
BASE_SMALL_ROCK = 0
|
|
|
|
|
BASE_GRASS = 1
|
|
|
|
|
BASE_LAVA = 2
|
|
|
|
|
BASE_WATER = 3
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
TARGET_RANGE = 3
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
START:
|
|
|
|
|
mcall 68,11
|
|
|
|
|
mcall 66,1,1
|
|
|
|
|
mcall 40,0x7 ;27
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
load_libraries l_libs_start,end_l_libs
|
|
|
|
|
test eax,eax
|
|
|
|
|
jnz button.exit
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
; unpack deflate
|
|
|
|
|
mov eax,[unpack_DeflateUnpack2]
|
|
|
|
|
mov [deflate_unpack],eax
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
call load_and_convert_all_icons
|
2014-12-30 02:18:21 +01:00
|
|
|
|
|
|
|
|
|
cmp [bootparam],dword 'NOSO'
|
|
|
|
|
je menu_still
|
|
|
|
|
|
2014-12-21 21:22:09 +01:00
|
|
|
|
call load_all_sound_files
|
|
|
|
|
|
|
|
|
|
mov eax,[background_music]
|
|
|
|
|
mov [wav_for_test],eax
|
|
|
|
|
mov ebx,eax
|
|
|
|
|
add ebx,1024
|
|
|
|
|
mov [wav_for_test_end],ebx
|
2014-12-28 19:22:18 +01:00
|
|
|
|
call test_wav_file
|
2014-12-21 21:22:09 +01:00
|
|
|
|
|
2014-12-23 14:51:32 +01:00
|
|
|
|
mov [music_flag],1
|
2014-12-21 21:22:09 +01:00
|
|
|
|
mcall 51,1,snd_background_music_thread_start,snd_background_music_thread_stack
|
2014-12-28 19:22:18 +01:00
|
|
|
|
|
|
|
|
|
mov [sounds_flag],1
|
|
|
|
|
mcall 51,1,snd_kick_action_thread_start,snd_kick_action_thread_stack
|
2014-12-21 21:22:09 +01:00
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-23 03:43:39 +01:00
|
|
|
|
menu_still:
|
|
|
|
|
jmp main_menu_start
|
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-30 02:18:21 +01:00
|
|
|
|
show_game_stage:
|
|
|
|
|
mov esi,map_level_game_stage
|
|
|
|
|
call map_level_to_plan_level
|
|
|
|
|
call draw_window
|
|
|
|
|
mov eax,[level_counter]
|
|
|
|
|
inc eax
|
|
|
|
|
mov ebx,stage_text.1
|
|
|
|
|
call decimal_string_2
|
|
|
|
|
mov edx,stage_text
|
|
|
|
|
mov ebx,SPRITE_SIZE_X*3 shl 16 + SPRITE_SIZE_Y*5
|
|
|
|
|
call draw_font
|
|
|
|
|
mcall 5,300
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
show_game_win:
|
|
|
|
|
mov esi,map_level_game_stage
|
|
|
|
|
call map_level_to_plan_level
|
|
|
|
|
call draw_window
|
|
|
|
|
mov edx,game_win_text
|
|
|
|
|
mov ebx,SPRITE_SIZE_X*2 shl 16 + SPRITE_SIZE_Y*5
|
|
|
|
|
call draw_font
|
|
|
|
|
mcall 5,1000
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
death_of_protagonist_show:
|
|
|
|
|
mov esi,map_level_game_over
|
|
|
|
|
call map_level_to_plan_level
|
|
|
|
|
call draw_window
|
|
|
|
|
mov edx,protagonist_death_text
|
|
|
|
|
mov ebx,SPRITE_SIZE_X*2 shl 16 + SPRITE_SIZE_Y*5
|
|
|
|
|
call draw_font
|
|
|
|
|
mcall 5,500
|
|
|
|
|
jmp main_menu_start
|
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-21 21:22:09 +01:00
|
|
|
|
start_level_0:
|
2014-12-30 02:18:21 +01:00
|
|
|
|
xor eax,eax
|
|
|
|
|
mov [level_counter],eax
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
start_level:
|
|
|
|
|
mov esi,[level_counter]
|
|
|
|
|
shl esi,2
|
|
|
|
|
mov esi,[esi+map_level_pointer]
|
|
|
|
|
test esi,esi
|
|
|
|
|
jnz @f
|
|
|
|
|
|
|
|
|
|
call show_game_win
|
|
|
|
|
jmp main_menu_start
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
@@:
|
|
|
|
|
call show_game_stage
|
2014-12-28 19:22:18 +01:00
|
|
|
|
mov eax,[stone_kick_sound]
|
|
|
|
|
mov [sounds_sample],eax
|
2014-12-30 02:18:21 +01:00
|
|
|
|
; xor eax,eax
|
|
|
|
|
; mov [level_counter],eax
|
2014-12-21 21:22:09 +01:00
|
|
|
|
mov [death_of_protagonist],0
|
|
|
|
|
mov [protagonist_route],2
|
|
|
|
|
mov [protagonist_position.x],4
|
|
|
|
|
mov [protagonist_position.y],4
|
|
|
|
|
|
2014-12-30 02:18:21 +01:00
|
|
|
|
mov esi,[level_counter]
|
|
|
|
|
shl esi,2
|
|
|
|
|
mov esi,[esi+map_level_pointer]
|
|
|
|
|
; mov esi,map_level_0
|
2014-12-21 21:22:09 +01:00
|
|
|
|
call map_level_to_plan_level
|
|
|
|
|
call generate_objects_id
|
|
|
|
|
call copy_plan_level_to_plan_level_old
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
red:
|
|
|
|
|
call draw_window
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
still:
|
|
|
|
|
; mcall 10
|
|
|
|
|
mcall 23,1
|
|
|
|
|
|
|
|
|
|
cmp eax,1
|
|
|
|
|
je red
|
|
|
|
|
|
|
|
|
|
cmp eax,2
|
|
|
|
|
je key
|
|
|
|
|
|
|
|
|
|
cmp eax,3
|
|
|
|
|
je button
|
|
|
|
|
|
|
|
|
|
call actions_for_all_cell
|
|
|
|
|
call show_tiles
|
|
|
|
|
call harvest_of_death
|
|
|
|
|
call show_tiles_one_iteration
|
|
|
|
|
cmp [death_of_protagonist],1
|
2014-12-30 02:18:21 +01:00
|
|
|
|
je death_of_protagonist_show
|
2014-12-21 21:22:09 +01:00
|
|
|
|
|
2014-12-30 02:18:21 +01:00
|
|
|
|
cmp [npc_alive],0
|
|
|
|
|
jne @f
|
|
|
|
|
|
|
|
|
|
inc byte [level_counter]
|
|
|
|
|
jmp start_level
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
@@:
|
2014-12-21 21:22:09 +01:00
|
|
|
|
mov eax,[protagonist_position.y]
|
|
|
|
|
imul eax,LEVEL_MAP_SIZE_X*4
|
|
|
|
|
mov ebx,[protagonist_position.x]
|
|
|
|
|
shl ebx,2
|
|
|
|
|
add eax,ebx
|
|
|
|
|
add eax,plan_level
|
|
|
|
|
mov eax,[eax]
|
|
|
|
|
cmp ah,OBJECT_PROTAGONIST
|
2014-12-30 02:18:21 +01:00
|
|
|
|
jne death_of_protagonist_show
|
2014-12-21 21:22:09 +01:00
|
|
|
|
|
|
|
|
|
jmp still
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
button:
|
|
|
|
|
mcall 17
|
|
|
|
|
|
|
|
|
|
cmp ah,1
|
|
|
|
|
jne still
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
.exit:
|
|
|
|
|
mov eax,[N_error]
|
|
|
|
|
; DEBUGF 1, "N_error: %d\n",eax
|
|
|
|
|
test eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
|
|
|
|
|
mcall 51,1,thread_start,thread_stack
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
@@:
|
2014-12-28 19:22:18 +01:00
|
|
|
|
mov [music_flag],2
|
|
|
|
|
mov [sounds_flag],2
|
2014-12-21 21:22:09 +01:00
|
|
|
|
mcall -1
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
draw_window:
|
|
|
|
|
mcall 12,1
|
|
|
|
|
mcall 48,4
|
|
|
|
|
mov ecx,100 shl 16 + 644
|
|
|
|
|
add cx,ax
|
|
|
|
|
mcall 0,<100,649>,,0x74AABBCC,,title
|
|
|
|
|
; mcall 13,<0,640>,<0,640>,0xff0000
|
|
|
|
|
mov [draw_all_level],1
|
|
|
|
|
; call show_tiles
|
|
|
|
|
call show_tiles_one_iteration
|
|
|
|
|
mov [draw_all_level],0
|
|
|
|
|
; mcall 4,<3,8>,0,message,message.size
|
|
|
|
|
mcall 12,2
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-30 02:18:21 +01:00
|
|
|
|
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
|
|
|
|
; <20>室:
|
|
|
|
|
; AX - <20><>
|
|
|
|
|
; EBX - <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD>
|
|
|
|
|
; <20><>室:
|
|
|
|
|
; <20><>ப<EFBFBD> ᮤ<>ন<EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD> <20>⬥祭 <20><><EFBFBD><EFBFBD><EFBFBD> 0
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
|
decimal_string_2:
|
|
|
|
|
push eax ebx ecx edx
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov [ebx],byte '0'
|
|
|
|
|
inc ebx
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
.p3:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
push ebx
|
|
|
|
|
mov ebx,10
|
|
|
|
|
div ebx
|
|
|
|
|
pop ebx
|
|
|
|
|
add edx,48
|
|
|
|
|
push edx
|
|
|
|
|
inc ecx
|
|
|
|
|
cmp ax,0
|
|
|
|
|
jne .p3
|
|
|
|
|
|
|
|
|
|
cmp ecx,1
|
|
|
|
|
jbe .p4
|
|
|
|
|
|
|
|
|
|
mov ecx,2
|
|
|
|
|
dec ebx
|
|
|
|
|
;--------------------------------------
|
|
|
|
|
.p4:
|
|
|
|
|
pop edx
|
|
|
|
|
mov [ebx],dl
|
|
|
|
|
inc ebx
|
|
|
|
|
loop .p4
|
|
|
|
|
pop edx ecx ebx eax
|
|
|
|
|
ret
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
|
;---------------------------------------------------------------------
|
2014-12-21 21:22:09 +01:00
|
|
|
|
memory_free_error:
|
|
|
|
|
mov [N_error],3
|
|
|
|
|
jmp button.exit
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
memory_get_error:
|
|
|
|
|
mov [N_error],4
|
|
|
|
|
jmp button.exit
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
|
include 'key.inc'
|
|
|
|
|
include 'show_tiles.inc'
|
|
|
|
|
include 'show_base.inc'
|
|
|
|
|
include 'show_object.inc'
|
|
|
|
|
include 'load.inc'
|
|
|
|
|
include 'icon_convert.inc'
|
|
|
|
|
include 'error_window.inc'
|
|
|
|
|
include 'actions.inc'
|
|
|
|
|
include 'actions_npc.inc'
|
|
|
|
|
include 'actions_protagonist.inc'
|
|
|
|
|
include 'actions_white_bricks.inc'
|
|
|
|
|
include 'random.inc'
|
|
|
|
|
include 'snd_api.inc'
|
|
|
|
|
include 'sound.inc'
|
2014-12-23 03:43:39 +01:00
|
|
|
|
include 'menu.inc'
|
2014-12-26 09:36:21 +01:00
|
|
|
|
include 'font.inc'
|
2014-12-23 03:43:39 +01:00
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
if lang eq ru
|
|
|
|
|
include 'localization_rus.inc'
|
|
|
|
|
else
|
|
|
|
|
include 'localization_eng.inc'
|
|
|
|
|
end if
|
2014-12-21 21:22:09 +01:00
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
include 'i_data.inc'
|
|
|
|
|
include 'levels.inc'
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
IM_END:
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
;include_debug_strings
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
include 'u_data.inc'
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
I_END:
|