From: Lukas Krickl Date: Mon, 14 Jul 2025 15:27:51 +0000 (+0200) Subject: main menu: wip main memu loader X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=1998db36d55cd8e095ad36218cf3fe38277680e6;p=gbrg%2F.git main menu: wip main memu loader This refactored default loading and moved it to game init. The menu rendering is currently still broken. --- diff --git a/src/main.s b/src/main.s index dc000d2..825064a 100644 --- a/src/main.s +++ b/src/main.s @@ -28,9 +28,6 @@ entry: call vblank_wait call enableinterrupts - - ; init initial map - call map_init ; main for gameply #ifndef TEST_BUILD diff --git a/src/mainmenu.s b/src/mainmenu.s index 7dc3fba..a1091e5 100644 --- a/src/mainmenu.s +++ b/src/mainmenu.s @@ -3,12 +3,37 @@ ; handles cursor sprite drawing ; handles file/new game selection main_menu_update: + ld b, BTNSTART ; b = button mask + input_just + jr z, @no_new_game REL + ld bc, st_init_new_game + ret +@no_new_game: ldnull bc ret ; inits main menu ; draws the menu screen to SCRN0 + ; disables lcd and interrupts while it is + ; loading main_menu_init: + call video_fade_out + + call unit_load_default_player + ; load default map + ; to get the engine to load a tileset + call map_init + + ld hl, STR_PRESS_START + ld de, SCRN0+128+2 + call puts + + ; hide window + ld a, 144 + ld [RWY], a + ld [RWX], a + + call video_fade_in ldnull bc ret diff --git a/src/mem.s b/src/mem.s index 362ca14..96d4e09 100644 --- a/src/mem.s +++ b/src/mem.s @@ -1,10 +1,11 @@ mem_init: - ; clear wram + ; clear wram ld a, 0 ld hl, WRAM ld bc, WRAMLEN call memset + ; set up rand call rand_init ; copy shadow oam dma function @@ -13,11 +14,14 @@ mem_init: ld bc, shadow_oam_to_oam_end - shadow_oam_to_oam call memcpy - ; set up game mode - - call unit_load_default_player - call game_init + ; set up mbc1 call mbc1_init + + ; load initial game state + ld de, st_main_menu_init + ld hl, game_mode + ld bc, st_size + call memcpy ; copy delay to active template to wram ld de, st_unit_delay_to_active_template @@ -31,12 +35,6 @@ mem_init: ret -game_init: - ld de, st_update_game - ld hl, game_mode - ld bc, st_size - jp memcpy - ; copies memory from one location to another ; inputs: ; de: source diff --git a/src/strings.s b/src/strings.s index 25db42c..fac3a48 100644 --- a/src/strings.s +++ b/src/strings.s @@ -27,6 +27,10 @@ STR_PANIC: STR_TEST: .str "0123456789ABCDEF" +.db 0 + +STR_PRESS_START: +.str "PRESS START" .db 0 ; print a 0-terminated string to the screen @@ -35,7 +39,6 @@ STR_TEST: ; hl: the string ; de: tile location puts: -@loop: ld a, [hl+] cp a, 0 jr z, @done REL @@ -44,7 +47,7 @@ puts: add a, FONT_OFFSET ld [de], a inc de - jr @loop REL + jr puts REL @done: ret diff --git a/src/update.s b/src/update.s index 7f92fd1..1e00164 100644 --- a/src/update.s +++ b/src/update.s @@ -34,7 +34,41 @@ update: ld de, game_mode jp st_update + + ; sets up a new game + ; loads default player + ; fades out the screen + ; loads default map +new_game_init: + call video_fade_out + + call unit_load_default_player + + ; init initial map + call map_init + + call game_init + call video_fade_in + ret + + ; geric game init call + ; sets up window + ; inits UI +game_init: + ; set up UI + ld a, WINDOW_Y + ld [RWY], a + ld a, WINDOW_X + ld [RWX], a + + call ui_init + + ldnull bc + ret + +st_init_new_game: + st_def 0x00, new_game_init, st_update_game st_update_game: st_def 0x00, update_game, st_update_game diff --git a/src/video.s b/src/video.s index b17e813..f4f7a47 100644 --- a/src/video.s +++ b/src/video.s @@ -136,13 +136,6 @@ video_init: ld a, 0b11011000 ld [ROBP1], a - call ui_init - - ld a, WINDOW_Y - ld [RWY], a - ld a, WINDOW_X - ld [RWX], a - ret ; delays by n frames