main menu: wip main memu loader
authorLukas Krickl <lukas@krickl.dev>
Mon, 14 Jul 2025 15:27:51 +0000 (17:27 +0200)
committerLukas Krickl <lukas@krickl.dev>
Mon, 14 Jul 2025 15:27:51 +0000 (17:27 +0200)
This refactored default loading and moved it to game init.
The menu rendering is currently still broken.

src/main.s
src/mainmenu.s
src/mem.s
src/strings.s
src/update.s
src/video.s

index dc000d2a09c1937f85d08560f2037f2ae662c0ca..825064a6d36984458233dd10ea008cc956e676c8 100644 (file)
@@ -28,9 +28,6 @@ entry:
   call vblank_wait
 
   call enableinterrupts
-  
-  ; init initial map
-  call map_init
 
   ; main for gameply
 #ifndef TEST_BUILD
index 7dc3fbaa8a93160bddf03b0d4855b41b9f3b42a2..a1091e53eaa1f6fd0a936a1ae0be291733433509 100644 (file)
@@ -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
 
index 362ca14f17371453e5d644deec400e01562bd162..96d4e09ea870c5507f434eae7e1d27fafe37134e 100644 (file)
--- 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
index 25db42ca4e271a665ffcfe93858ba44c5bd032eb..fac3a480a61bfa70aaa2b7882f377a2cd2f34834 100644 (file)
@@ -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
 
index 7f92fd15471a04c84046a2ad2a16d5145c142eab..1e001648af6ec185ea3b80f2445a56dc03f1a51d 100644 (file)
@@ -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
index b17e8134b607531d2783cd72cbd136930fbf3ada..f4f7a47742e8b208ab2eecb227dfdae724717861 100644 (file)
@@ -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