Rusty Earth

1) two demo level
2) screen for "game stage", "game over" and "game win"
3) NOSO boot parameter to start without sound and sound files

git-svn-id: svn://kolibrios.org@5292 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2014-12-30 01:18:21 +00:00
parent 1043a1aa9f
commit 7cadd5ef29
9 changed files with 203 additions and 78 deletions

View File

@ -101,7 +101,9 @@ save_new_and_clear_old_position:
ret
;---------------------------------------------------------------------
harvest_of_death:
mov [death_of_protagonist],0
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
@ -117,6 +119,11 @@ harvest_of_death:
cmp al,BASE_WATER
je .base_water
cmp ah,OBJECT_FINAL_MONSTER
ja .counter
mov [npc_alive],1
;--------------------------------------
.counter:
dec ecx

View File

@ -1,51 +0,0 @@
;---------------------------------------------------------------------
death_of_protagonist_start:
mov esi,map_level_game_over
call map_level_to_plan_level
.red:
call draw_window
;---------------------------------------------------------------------
.still:
mcall 10
cmp eax,1
je .red
cmp eax,2
je .key
cmp eax,3
je .button
jmp .still
;---------------------------------------------------------------------
.key:
mcall 2
cmp [extended_key],1
je .extended_key
test al,al
jnz .still
cmp ah,0xE0
jne .menu_still ; start_level_0
mov [extended_key],1
jmp .still
;---------------------------------------------------------------------
.extended_key:
mov [extended_key],0
jmp .menu_still ; start_level_0
;---------------------------------------------------------------------
.menu_still:
mcall 5,200
jmp menu_still
;---------------------------------------------------------------------
.button:
mcall 17
cmp ah,1
jne .still
jmp button.exit
;--------------------------------------

View File

@ -1,5 +1,9 @@
;---------------------------------------------------------------------
draw_font:
; in:
; ebx - X*65536 + Y
; edx - text ASCII
;
pusha
xor ebp,ebp
mov esi,edx

View File

@ -256,11 +256,13 @@ background_music_file_name db 'walking_with_poseidon.wav',0
stone_kick_sound_file_name db 'flaunch.wav',0
menu_sound_file_name db 'misc_menu.wav',0
;---------------------------------------------------------------------
align 4
protagonist_route dd 2
protagonist_position:
.x dd 4
.y dd 4
;---------------------------------------------------------------------
align 4
main_menu_text_pointers:
dd menu_game_label
dd menu_settings_label
@ -269,6 +271,7 @@ main_menu_text_pointers:
dd menu_exit_label
dd 0
;---------------------------------------------------------------------
align 4
menu_credits_text_pointers:
dd menu_credits_text.1
dd menu_credits_text.2
@ -278,6 +281,7 @@ menu_credits_text_pointers:
dd menu_credits_text.6
dd 0
;---------------------------------------------------------------------
align 4
menu_help_text_pointers:
dd menu_help_text.1
dd menu_help_text.2
@ -285,9 +289,16 @@ menu_help_text_pointers:
dd menu_help_text.4
dd 0
;---------------------------------------------------------------------
align 4
settings_menu_text_pointers:
dd menu_settings_sound_label
dd menu_settings_music_label
dd menu_setting_exit
dd 0
;---------------------------------------------------------------------
align 4
map_level_pointer:
dd map_level_0
dd map_level_1
dd 0
;---------------------------------------------------------------------

View File

@ -7,7 +7,33 @@
;---------------------------------------------------------------------
align 4
map_level_0:
map_level_game_over:
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
dd 000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h,000002h
;---------------------------------------------------------------------
align 4
map_level_game_stage:
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
;---------------------------------------------------------------------
align 4
map_level_1:
dd 030100h,000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h
dd 000000h,001001h,001001h,000001h,000001h,000001h,001001h,001001h,001001h,000000h
dd 010200h,001001h,000002h,000002h,000000h,000000h,000000h,000000h,001001h,000000h
@ -20,15 +46,15 @@ map_level_0:
dd 030300h,000000h,000000h,000000h,000000h,020400h,000000h,000000h,000003h,000003h
;---------------------------------------------------------------------
align 4
map_level_game_over:
dd 000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h
dd 000000h,000002h,000002h,000000h,000000h,000002h,000000h,000002h,000002h,000000h
dd 000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h
dd 000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h
dd 000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h
dd 000000h,000002h,000002h,000000h,000000h,000002h,000000h,000002h,000002h,000000h
dd 000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h,000000h,000000h
dd 000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h,000000h,000000h
dd 000000h,000002h,000000h,000002h,000000h,000002h,000000h,000002h,000000h,000000h
dd 000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h,000000h
;---------------------------------------------------------------------
map_level_0:
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
dd 000001h,001001h,001001h,000001h,000001h,000001h,000001h,001101h,001101h,000001h
dd 000001h,001001h,000001h,000001h,000001h,000001h,000001h,000001h,001101h,000001h
dd 000001h,001101h,030101h,001101h,001101h,001001h,001001h,000001h,001001h,000001h
dd 000001h,001101h,000001h,001101h,000f01h,000001h,001001h,000001h,001001h,010301h
dd 000001h,001001h,000001h,001001h,000001h,000001h,001101h,000001h,001101h,000001h
dd 000001h,001001h,000001h,001001h,001001h,001101h,001101h,000001h,001101h,000001h
dd 000001h,001101h,000001h,000001h,000001h,000001h,000001h,000001h,001001h,000001h
dd 000001h,001101h,001101h,000001h,000001h,000001h,000001h,001001h,001001h,000001h
dd 000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h,000001h
;---------------------------------------------------------------------

View File

@ -1,6 +1,6 @@
;---------------------------------------------------------------------
title:
db 'Rusty Earth (Prototype 1.8) 28.12.2014',0
db 'Rusty Earth (Prototype 1.9) 30.12.2014',0
;---------------------------------------------------------------------
menu_game_label:
db 'GAME',0
@ -32,6 +32,16 @@ text_on_label:
menu_setting_exit:
db 'EXIT',0
;---------------------------------------------------------------------
stage_text:
db 'LEVEL '
.1: db '00',0
;--------------------------------------
game_win_text:
db 'YES! YOU WIN!',0
;--------------------------------------
protagonist_death_text:
db 'REST IN PEACE',0
;---------------------------------------------------------------------
menu_credits_text:
.1: db 'Hello KolibriOS Team!',0
.2: db 'The game used graphics and sound material',0

View File

@ -2,7 +2,7 @@
; Code page - Cyrillic OEM866
;---------------------------------------------------------------------
title:
db '<27>¦ Ά ο ‡¥¬«ο (<28>ΰ®β®β¨― 1.8) 28.12.2014',0
db '<27>¦ ¢ ï ‡¥¬«ï (<28>à®â®â¨¯ 1.9) 30.12.2014',0
;---------------------------------------------------------------------
menu_game_label:
db 'ˆƒ<CB86>€',0
@ -34,6 +34,16 @@ text_on_label:
menu_setting_exit:
db '‚›•Ž„',0
;---------------------------------------------------------------------
stage_text:
db '“<>Ž<E2809A>œ '
.1: db '00',0
;--------------------------------------
game_win_text:
db '“<>€! <20>Ž<EFBFBD>…„€!',0
;--------------------------------------
protagonist_death_text:
db '<27>Ž <20> ŠŽ<C5A0>',0
;---------------------------------------------------------------------
menu_credits_text:
.1: db '<27>ਢ¥â ãç áâ­¨ª ¬ ª®¬ ­¤ë KolibriOS Team!',0
.2: db 'ƒà ä¨ç¥áª¨¥ ¨ §¢ãª®¢ë¥ ¬ â¥à¨ «ë ¯®¤',0

View File

@ -34,7 +34,7 @@
dd IM_END
dd I_END
dd stacktop
dd 0x0
dd bootparam
dd path
;-----------------------------------------------------------------------------
include 'lang.inc'
@ -65,10 +65,10 @@ OBJECT_DEATH = 1
OBJECT_SKELETON = 2
OBJECT_IFRIT = 3
OBJECT_BARRET = 4
OBJECT_FINAL_MONSTER = 14
OBJECT_PROTAGONIST = 15
OBJECT_RED_BRICK = 16
OBJECT_WHITE_BRICK = 17
OBJECT_FINAL_MONSTER = 14 ; 0Eh
OBJECT_PROTAGONIST = 15 ; 0Fh
OBJECT_RED_BRICK = 16 ; 10h
OBJECT_WHITE_BRICK = 17 ; 11h
RED_BRICK_CRASH_1 = 0x80
RED_BRICK_CRASH_2 = 0x81
;-----------------------------------------------------------------------------
@ -93,6 +93,10 @@ load_libraries l_libs_start,end_l_libs
mov [deflate_unpack],eax
;--------------------------------------
call load_and_convert_all_icons
cmp [bootparam],dword 'NOSO'
je menu_still
call load_all_sound_files
mov eax,[background_music]
@ -111,15 +115,69 @@ load_libraries l_libs_start,end_l_libs
menu_still:
jmp main_menu_start
;---------------------------------------------------------------------
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
;---------------------------------------------------------------------
start_level_0:
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
mov eax,[stone_kick_sound]
mov [sounds_sample],eax
; xor eax,eax
; mov [level_counter],eax
mov [death_of_protagonist],0
mov [protagonist_route],2
mov [protagonist_position.x],4
mov [protagonist_position.y],4
mov esi,map_level_0
mov esi,[level_counter]
shl esi,2
mov esi,[esi+map_level_pointer]
; mov esi,map_level_0
call map_level_to_plan_level
call generate_objects_id
call copy_plan_level_to_plan_level_old
@ -145,8 +203,15 @@ still:
call harvest_of_death
call show_tiles_one_iteration
cmp [death_of_protagonist],1
je death_of_protagonist_start
je death_of_protagonist_show
cmp [npc_alive],0
jne @f
inc byte [level_counter]
jmp start_level
;--------------------------------------
@@:
mov eax,[protagonist_position.y]
imul eax,LEVEL_MAP_SIZE_X*4
mov ebx,[protagonist_position.x]
@ -155,7 +220,7 @@ still:
add eax,plan_level
mov eax,[eax]
cmp ah,OBJECT_PROTAGONIST
jne death_of_protagonist_start
jne death_of_protagonist_show
jmp still
;---------------------------------------------------------------------
@ -193,6 +258,46 @@ draw_window:
mcall 12,2
ret
;---------------------------------------------------------------------
; <20><EFBFBD>Ž„ 10-<2D>• —ˆ‘…‹ ‘Ž ‡<>€ŠŽŒ <E28098>ŽŠŽ‰ ‚ˆ„
; ‚室:
; AX - ç¨á«®
; EBX -  ¤à¥á áâப¨
; ‚ë室:
; áâப  ᮤ¥à¦¨â ç¨á«®, ª®­¥æ ®â¬¥ç¥­ ª®¤®¬ 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
;------------------------------------------------------------------------------
;---------------------------------------------------------------------
memory_free_error:
mov [N_error],3
jmp button.exit
@ -205,7 +310,6 @@ include 'key.inc'
include 'show_tiles.inc'
include 'show_base.inc'
include 'show_object.inc'
include 'death_protagonist.inc'
include 'load.inc'
include 'icon_convert.inc'
include 'error_window.inc'

View File

@ -5,6 +5,7 @@ extended_key rb 1
draw_all_level rb 1
current_cell_NPC rb 1
death_of_protagonist rb 1
npc_alive rb 1
target_detected rb 1
sound_flag rb 1
sounds_flag rb 1
@ -52,6 +53,8 @@ target_action_cell_y rd 1
menu_text_pointers rd 1
text_step_Y rd 1
;------------------------------------------------------------------------------
level_counter rd 1
;------------------------------------------------------------------------------
align 4
version rd 1 ; версия интерфейса, текущая 0x0101
; snd_format одна из констант вида PCM_X_Y_Z где
@ -115,10 +118,11 @@ align 4
file_info:
rb 40
;---------------------------------------------------------------------
;align 4
align 4
bootparam:
;procinfo:
;process_info:
; rb 1024
rb 1024
;---------------------------------------------------------------------
align 4
; sound thread