forked from KolibriOS/kolibrios
f89947dea2
git-svn-id: svn://kolibrios.org@5319 a494cfbc-eb01-0410-851d-a64ba20cac60
413 lines
8.5 KiB
PHP
413 lines
8.5 KiB
PHP
;---------------------------------------------------------------------
|
|
main_menu_start:
|
|
mov [main_menu_pointer],0
|
|
mov eax,[menu_sound]
|
|
mov [sounds_sample],eax
|
|
;--------------------------------------
|
|
.red:
|
|
mov [menu_text_pointers],main_menu_text_pointers
|
|
mov [text_step_Y],SPRITE_SIZE_Y
|
|
mov [use_separate_draw_text],1
|
|
call draw_menu_window
|
|
call draw_new_pointer
|
|
;---------------------------------------------------------------------
|
|
.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 @f
|
|
|
|
mov [extended_key],1
|
|
jmp .still
|
|
;--------------------------------------
|
|
@@:
|
|
cmp ah,72 ; arrow up
|
|
je .arrow_up
|
|
|
|
cmp ah,80 ; arrow down
|
|
je .arrow_down
|
|
|
|
cmp ah,17 ; w - arrow up
|
|
je .arrow_up
|
|
|
|
cmp ah,31 ; s - arrow down
|
|
je .arrow_down
|
|
|
|
cmp ah,57 ; space
|
|
je .enter_to_point
|
|
|
|
cmp ah,28 ; enter
|
|
je .enter_to_point
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.extended_key:
|
|
mov [extended_key],0
|
|
cmp ah,72 ; arrow up
|
|
je .arrow_up
|
|
|
|
cmp ah,80 ; arrow down
|
|
je .arrow_down
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.arrow_up:
|
|
cmp [main_menu_pointer],0
|
|
je .still
|
|
|
|
call snd_kick_action
|
|
call clear_old_pointer
|
|
dec [main_menu_pointer]
|
|
call draw_new_pointer
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.arrow_down:
|
|
cmp [main_menu_pointer],4
|
|
je .still
|
|
|
|
call snd_kick_action
|
|
call clear_old_pointer
|
|
inc [main_menu_pointer]
|
|
call draw_new_pointer
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.enter_to_point:
|
|
cmp [main_menu_pointer],0 ; game
|
|
je start_level_0
|
|
|
|
cmp [main_menu_pointer],1 ; settings
|
|
je settings_menu_start
|
|
|
|
cmp [main_menu_pointer],2 ; credits
|
|
je menu_credits
|
|
|
|
cmp [main_menu_pointer],3 ; help
|
|
je menu_help
|
|
|
|
cmp [main_menu_pointer],4 ; exit
|
|
je button.exit
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.button:
|
|
mcall 17
|
|
|
|
cmp ah,1
|
|
jne .still
|
|
|
|
jmp button.exit
|
|
;---------------------------------------------------------------------
|
|
clear_old_pointer:
|
|
movzx ecx,byte [main_menu_pointer]
|
|
imul ecx,SPRITE_SIZE_Y
|
|
add ecx,SPRITE_SIZE_Y*3 - 16
|
|
shl ecx,16
|
|
mov cx,SPRITE_SIZE_Y
|
|
mcall 13,<SPRITE_SIZE_X*2,SPRITE_SIZE_X>,,0
|
|
ret
|
|
;---------------------------------------------------------------------
|
|
draw_new_pointer:
|
|
; movzx ecx,byte [main_menu_pointer]
|
|
; imul ecx,SPRITE_SIZE_Y
|
|
; add ecx,SPRITE_SIZE_Y*2
|
|
; shl ecx,16
|
|
; mov cx,SPRITE_SIZE_Y
|
|
; mcall 13,<SPRITE_SIZE_X*1,SPRITE_SIZE_X>,,0xff0000
|
|
|
|
movzx edx,byte [main_menu_pointer]
|
|
imul edx,SPRITE_SIZE_Y
|
|
add edx,SPRITE_SIZE_Y*3 - 16
|
|
add edx,SPRITE_SIZE_X*2 shl 16
|
|
|
|
mov eax,[npc_miku_icons]
|
|
mov ebp,SPRITE_SIZE_X*SPRITE_SIZE_Y*12
|
|
call copy_base_8bpp
|
|
|
|
xor ebp,ebp
|
|
mcall 65,buffer_area,<SPRITE_SIZE_X,SPRITE_SIZE_Y>,,32
|
|
ret
|
|
;---------------------------------------------------------------------
|
|
draw_menu_window:
|
|
mcall 12,1
|
|
mcall 48,4
|
|
mov ecx,100 shl 16 + 644
|
|
add cx,ax
|
|
mcall 0,<100,649>,,0x74AABBCC,,title
|
|
|
|
call clear_screen
|
|
|
|
mov eax,4
|
|
mov ebx,SPRITE_SIZE_X*3 shl 16 + SPRITE_SIZE_Y*3
|
|
mov ecx,0x90ffffff
|
|
mov esi,[menu_text_pointers]
|
|
;--------------------------------------
|
|
@@:
|
|
mov edx,[esi]
|
|
test edx,edx
|
|
jz .end
|
|
|
|
cmp [use_separate_draw_text],1
|
|
je .use_separate_draw_text
|
|
|
|
mcall
|
|
jmp .continue
|
|
;--------------------------------------
|
|
.use_separate_draw_text:
|
|
call draw_font
|
|
;--------------------------------------
|
|
.continue:
|
|
add ebx,[text_step_Y]
|
|
add esi,4
|
|
jmp @b
|
|
;--------------------------------------
|
|
.end:
|
|
|
|
mcall 12,2
|
|
ret
|
|
;---------------------------------------------------------------------
|
|
clear_screen:
|
|
xor edx,edx
|
|
mcall 13,<0,SPRITE_SIZE_X*LEVEL_MAP_SIZE_X>,<0,SPRITE_SIZE_Y*LEVEL_MAP_SIZE_Y>
|
|
ret
|
|
;---------------------------------------------------------------------
|
|
menu_credits:
|
|
call snd_kick_action
|
|
mov [menu_text_pointers],menu_credits_text_pointers
|
|
jmp menu_help.1
|
|
;---------------------------------------------------------------------
|
|
menu_help:
|
|
call snd_kick_action
|
|
mov [menu_text_pointers],menu_help_text_pointers
|
|
;--------------------------------------
|
|
.1:
|
|
mov [text_step_Y],20
|
|
;--------------------------------------
|
|
.red:
|
|
mov [use_separate_draw_text],0
|
|
call draw_menu_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 @f
|
|
|
|
mov [extended_key],1
|
|
jmp .still
|
|
;--------------------------------------
|
|
@@:
|
|
cmp ah,57 ; space
|
|
je main_menu_start.red
|
|
|
|
cmp ah,28 ; enter
|
|
je main_menu_start.red
|
|
|
|
cmp ah,1 ; esc
|
|
je main_menu_start.red
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.extended_key:
|
|
mov [extended_key],0
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.button:
|
|
mcall 17
|
|
|
|
cmp ah,1
|
|
jne .still
|
|
|
|
jmp button.exit
|
|
;---------------------------------------------------------------------
|
|
settings_menu_start:
|
|
call snd_kick_action
|
|
mov al,[main_menu_pointer]
|
|
mov [settings_menu_pointer],al
|
|
xor al,al
|
|
mov [main_menu_pointer],al
|
|
;--------------------------------------
|
|
.red:
|
|
mov [menu_text_pointers],settings_menu_text_pointers
|
|
mov [text_step_Y],SPRITE_SIZE_Y
|
|
call prepare_settings_text
|
|
mov [use_separate_draw_text],1
|
|
call draw_menu_window
|
|
call draw_new_pointer
|
|
;---------------------------------------------------------------------
|
|
.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 @f
|
|
|
|
mov [extended_key],1
|
|
jmp .still
|
|
;--------------------------------------
|
|
@@:
|
|
cmp ah,72 ; arrow up
|
|
je .arrow_up
|
|
|
|
cmp ah,80 ; arrow down
|
|
je .arrow_down
|
|
|
|
cmp ah,17 ; w - arrow up
|
|
je .arrow_up
|
|
|
|
cmp ah,31 ; s - arrow down
|
|
je .arrow_down
|
|
|
|
cmp ah,57 ; space
|
|
je .enter_to_point
|
|
|
|
cmp ah,28 ; enter
|
|
je .enter_to_point
|
|
|
|
cmp ah,1 ; esc
|
|
je .exit
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.extended_key:
|
|
mov [extended_key],0
|
|
cmp ah,72 ; arrow up
|
|
je .arrow_up
|
|
|
|
cmp ah,80 ; arrow down
|
|
je .arrow_down
|
|
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.arrow_up:
|
|
cmp [main_menu_pointer],0
|
|
je .still
|
|
|
|
call snd_kick_action
|
|
call clear_old_pointer
|
|
dec [main_menu_pointer]
|
|
call draw_new_pointer
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.arrow_down:
|
|
cmp [main_menu_pointer],2
|
|
je .still
|
|
|
|
call snd_kick_action
|
|
call clear_old_pointer
|
|
inc [main_menu_pointer]
|
|
call draw_new_pointer
|
|
jmp .still
|
|
;---------------------------------------------------------------------
|
|
.enter_to_point:
|
|
cmp [main_menu_pointer],0 ; sounds
|
|
jne @f
|
|
|
|
inc [sounds_flag]
|
|
and [sounds_flag],1b
|
|
jmp .red
|
|
;--------------------------------------
|
|
@@:
|
|
cmp [main_menu_pointer],1 ; music
|
|
jne @f
|
|
|
|
inc [music_flag]
|
|
and [music_flag],1b
|
|
jmp .red
|
|
;--------------------------------------
|
|
@@:
|
|
cmp [main_menu_pointer],2 ; exit
|
|
jne .still
|
|
|
|
;--------------------------------------
|
|
.exit:
|
|
call snd_kick_action
|
|
mov al,[settings_menu_pointer]
|
|
mov [main_menu_pointer],al
|
|
|
|
jmp main_menu_start.red
|
|
;---------------------------------------------------------------------
|
|
.button:
|
|
mcall 17
|
|
|
|
cmp ah,1
|
|
jne .still
|
|
|
|
jmp button.exit
|
|
;---------------------------------------------------------------------
|
|
prepare_settings_text:
|
|
mov eax,[text_on_label]
|
|
cmp [sounds_flag],1
|
|
je @f
|
|
|
|
mov eax,[text_off_label]
|
|
;--------------------------------------
|
|
@@:
|
|
mov [menu_settings_sound_label+7],eax
|
|
;--------------------------------------
|
|
mov eax,[text_on_label]
|
|
cmp [music_flag],1
|
|
je @f
|
|
|
|
mov eax,[text_off_label]
|
|
;--------------------------------------
|
|
@@:
|
|
mov [menu_settings_music_label+7],eax
|
|
ret
|
|
;--------------------------------------------------------------------- |