diff --git a/inc/init.asm b/inc/init.asm index 7027e3f..b9eeac7 100644 --- a/inc/init.asm +++ b/inc/init.asm @@ -2,17 +2,21 @@ init_state_menu: ld a, STATE_MENU ld [current_state], a + ld a, STATE_MENU_START + ld [sub_state], a ; set the background position ld a, 0 ld [BKG_POS_X_REGISTER], a ld [BKG_POS_Y_REGISTER], a + call show_message_menu_start + ; turn the screen on ld a, DISPLAY_ON + TLS_USE_LOC_8000 \ - + BKG_DISPLAY_ON + BKG_USE_LOC_9800 \ + + BKG_DISPLAY_ON + BKG_USE_LOC_9800 \ + WND_DISPLAY_OFF + WND_USE_LOC_9C00 \ - + OBJ_DISPLAY_OFF + OBJ_SIZE_8X8 + + OBJ_DISPLAY_ON + OBJ_SIZE_8X8 ld [LCD_CONTROL_REGISTER], a ret @@ -38,6 +42,9 @@ init_state_game: ld a, $5e ld [WND_POS_Y_REGISTER], a + ; clear messages + call clear_message + ; initialise some more variables ld a, 0 ld [selected_letter_x], a @@ -64,7 +71,7 @@ init_state_game: jp nz, .loop2 ; turn the screen on - ld a, DISPLAY_ON + TLS_USE_LOC_8000 \ + ld a, DISPLAY_ON + TLS_USE_LOC_8000 \ + BKG_DISPLAY_ON + BKG_USE_LOC_9800 \ + WND_DISPLAY_ON + WND_USE_LOC_9C00 \ + OBJ_DISPLAY_ON + OBJ_SIZE_8X8 @@ -148,7 +155,7 @@ load_window_map: ld bc, window ld hl, WND_LOC_9C00 ld d, 32 - ld e, 32 + ld e, 4 .loop: ld a, [bc] diff --git a/inc/input.asm b/inc/input.asm index be17f9c..3ba282d 100644 --- a/inc/input.asm +++ b/inc/input.asm @@ -1,44 +1,3 @@ -; Update the object data for the alphabet cursor -update_cursor_objects: - ld hl, obj_selected_letter - - ; vertical position - ld a, [selected_letter_y] - ld b, $08 - call multiply_ab - add a, $86 - ld [hl+], a - - ; horizontal position - ld a, [selected_letter_x] - ld b, $10 - call multiply_ab - add a, $14 - ld [hl+], a - - ; tile index - ld a, [selected_letter_x] - ld c, a - ld a, [selected_letter_y] - ld b, $09 - call multiply_ab - add a, c - inc a - - ; char 27 doesn't exist, it's the enter sign - cp a, 27 - jp nz, .not_enter - ld a, TILE_ENTER -.not_enter: - ld [hl+], a - - ; attributes - ld a, OBJ_ATTR_PALETTE1 - ld [hl+], a - ret - - - ; Read the current input state ; -> b: current keystates ; -> c: changed keys since last read @@ -85,12 +44,36 @@ read_input: ; React on input within the menu handle_input_menu: +.check_movement: ld a, c - and a, INPUT_START - jp z, .nothing + and a, INPUT_UP | INPUT_DOWN + jp z, .check_confirm + ld a, [sub_state] + xor a, %00000001 ; flip the last bit + ld [sub_state], a + and a, %00000001 + jp z, .switch_to_help +.switch_to_start + call show_message_menu_start + jp .check_confirm +.switch_to_help + call show_message_menu_help + jp .check_confirm + +.check_confirm + ld a, c + and a, INPUT_START | INPUT_A + jp z, .return + + ld a, [sub_state] + and a, STATE_MENU_START + jp z, .help_selected +.start_selected call init_state_game - -.nothing + jp .return +.help_selected + jp .return +.return ret @@ -271,3 +254,43 @@ delete_letter: pop hl ret + + +; Update the object data for the alphabet cursor +update_cursor_objects: + ld hl, obj_selected_letter + + ; vertical position + ld a, [selected_letter_y] + ld b, $08 + call multiply_ab + add a, $86 + ld [hl+], a + + ; horizontal position + ld a, [selected_letter_x] + ld b, $10 + call multiply_ab + add a, $14 + ld [hl+], a + + ; tile index + ld a, [selected_letter_x] + ld c, a + ld a, [selected_letter_y] + ld b, $09 + call multiply_ab + add a, c + inc a + + ; char 27 doesn't exist, it's the enter sign + cp a, 27 + jp nz, .not_enter + ld a, TILE_ENTER +.not_enter: + ld [hl+], a + + ; attributes + ld a, OBJ_ATTR_PALETTE1 + ld [hl+], a + ret diff --git a/inc/messages.asm b/inc/messages.asm index 62b170f..b58edab 100644 --- a/inc/messages.asm +++ b/inc/messages.asm @@ -1,3 +1,21 @@ +; Highlights the menu entry "start game" +show_message_menu_start: + ld de, message_menu_start + ld b, 0 + call show_message + ret + + + +; Highlights the menu entry "how it works" +show_message_menu_help: + ld de, message_menu_help + ld b, 0 + call show_message + ret + + + ; Inform that the current guess is not in the dictionary show_message_unknown: ld de, message_unknown @@ -43,8 +61,12 @@ ENDR ; <- de ; <- b show_message: + push hl + push bc + push de + ld hl, obj_message_letters - ld c, 32 + ld c, 36 .loop: ld a, [de] ld [hl], a @@ -55,6 +77,10 @@ show_message: ld a, b ld [message_timeout], a + + pop de + pop bc + pop hl ret diff --git a/maps/background.asm b/maps/background.asm index 0d4fe56..4b1877e 100644 --- a/maps/background.asm +++ b/maps/background.asm @@ -13,9 +13,9 @@ DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$ DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c DB $1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1b,$1b,$1b,$1b,$10,$12,$05,$13,$13,$1b,$1b,$13,$14,$01,$12,$14,$1b,$1b,$1b,$1b,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c +DB $1b,$1b,$1b,$1b,$1b,$13,$14,$01,$12,$14,$1b,$07,$01,$0d,$05,$1b,$1b,$1b,$1b,$1b,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c +DB $1b,$1b,$1b,$1b,$1b,$08,$0f,$17,$1b,$14,$0f,$1b,$10,$0c,$01,$19,$1b,$1b,$1b,$1b,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c DB $1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c diff --git a/maps/window.asm b/maps/window.asm index 81772ae..7a371f5 100644 --- a/maps/window.asm +++ b/maps/window.asm @@ -2,35 +2,4 @@ DB $1b,$1b,$01,$1b,$02,$1b,$03,$1b,$04,$1b,$05,$1b,$06,$1b,$07,$1b,$08,$1b,$09,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b DB $1b,$1b,$0a,$1b,$0b,$1b,$0c,$1b,$0d,$1b,$0e,$1b,$0f,$1b,$10,$1b,$11,$1b,$12,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b DB $1b,$1b,$13,$1b,$14,$1b,$15,$1b,$16,$1b,$17,$1b,$18,$1b,$19,$1b,$1a,$1b,$1e,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b -DB $1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c -DB $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c +DB $1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b,$1b diff --git a/wordle.asm b/wordle.asm index ff91d5b..62524e9 100644 --- a/wordle.asm +++ b/wordle.asm @@ -3,6 +3,8 @@ include "inc/constants.asm" ;; Game specific constants ; Game states STATE_MENU EQU %00000001 +STATE_MENU_START EQU %01000001 +STATE_MENU_HELP EQU %10000001 STATE_GAME EQU %00000010 STATE_LOST EQU %00000100 STATE_WON EQU %00001100 @@ -205,6 +207,29 @@ message_clear: DB $00, $00, $00, $00 DB $00, $00, $00, $00 DB $00, $00, $00, $00 + DB $00, $00, $00, $00 + +message_menu_start: + DB $88, $30, 19, OBJ_ATTR_PALETTE1 ; S + DB $88, $38, 20, OBJ_ATTR_PALETTE1 ; T + DB $88, $40, 01, OBJ_ATTR_PALETTE1 ; A + DB $88, $48, 18, OBJ_ATTR_PALETTE1 ; R + DB $88, $50, 20, OBJ_ATTR_PALETTE1 ; T + DB $88, $60, 07, OBJ_ATTR_PALETTE1 ; G + DB $88, $68, 01, OBJ_ATTR_PALETTE1 ; A + DB $88, $70, 13, OBJ_ATTR_PALETTE1 ; G + DB $88, $78, 05, OBJ_ATTR_PALETTE1 ; A + +message_menu_help: + DB $90, $30, 08, OBJ_ATTR_PALETTE1 ; H + DB $90, $38, 15, OBJ_ATTR_PALETTE1 ; O + DB $90, $40, 23, OBJ_ATTR_PALETTE1 ; W + DB $90, $50, 20, OBJ_ATTR_PALETTE1 ; T + DB $90, $58, 15, OBJ_ATTR_PALETTE1 ; O + DB $90, $68, 16, OBJ_ATTR_PALETTE1 ; P + DB $90, $70, 12, OBJ_ATTR_PALETTE1 ; L + DB $90, $78, 01, OBJ_ATTR_PALETTE1 ; A + DB $90, $80, 25, OBJ_ATTR_PALETTE1 ; Y message_unknown: DB $7a, $38, 21, OBJ_ATTR_PALETTE1 ; U @@ -215,6 +240,7 @@ message_unknown: DB $7a, $60, 23, OBJ_ATTR_PALETTE1 ; W DB $7a, $68, 14, OBJ_ATTR_PALETTE1 ; N DB $00, $00, 0, 0 + DB $00, $00, 0, 0 message_won: DB $7a, $38, 25, OBJ_ATTR_PALETTE1 ; Y @@ -225,6 +251,7 @@ message_won: DB $7a, $68, 14, OBJ_ATTR_PALETTE1 ; N DB $00, $00, 0, 0 DB $00, $00, 0, 0 + DB $00, $00, 0, 0 message_lost: DB $7a, $30, 9, OBJ_ATTR_PALETTE1 ; I @@ -235,6 +262,7 @@ message_lost: DB $7a, $60, 0, OBJ_ATTR_PALETTE1 ; guess[2] DB $7a, $68, 0, OBJ_ATTR_PALETTE1 ; guess[3] DB $7a, $70, 0, OBJ_ATTR_PALETTE1 ; guess[4] + DB $00, $00, 0, 0 @@ -270,6 +298,10 @@ input_state: current_state: DB +; Saves the state in the submenu +sub_state: + DB + ; Saves the current word current_word: DS 5 diff --git a/wordle.gb b/wordle.gb index f2cf247..7debabe 100644 Binary files a/wordle.gb and b/wordle.gb differ