You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.3 KiB

;; ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
;; ██░███░██▄██░▄▄▀███▀▄▀█▀▄▄▀█░▄▄▀█░▄▀██▄██▄░▄██▄██▀▄▄▀█░▄▄▀██
;; ██░█░█░██░▄█░██░███░█▀█░██░█░██░█░█░██░▄██░███░▄█░██░█░██░██
;; ██▄▀▄▀▄█▄▄▄█▄██▄████▄███▄▄██▄██▄█▄▄██▄▄▄██▄██▄▄▄██▄▄██▄██▄██
;; ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
;; Functions to be able to detect the end of the game.
; Check if the guess attempt is valid
; -> [guess]
; -> [current_guess]
; -> [current_char]
; -> [obj_message]
; <- a: whether the test is valid or not
2 years ago
check_guess:
push hl
push af
push bc
push de
; five characters are needed
ld a, [current_char]
cp a, 5
jp nz, .return
; Compress the guess to the dictionary format,
; and then search after it.
call compress_guess
call find_guess
cp a, 1
jp nz, .is_invalid
.is_valid:
call mark_hints
.test_win:
call check_win
cp a, 1
jp nz, .test_lose
call init_state_won
jp .return
.test_lose:
ld a, [current_guess]
cp a, 5
2 years ago
jp nz, .reset
call init_state_lost
jp .return
.reset:
ld a, [current_guess]
inc a
ld [current_guess], a
ld a, 0
ld [current_char], a
jp .return
.is_invalid:
call show_message_unknown
jp .return
.return:
pop de
pop bc
pop af
pop hl
ret
; Check if guessed correctly and therefore won
; -> [current_word]
; -> [current_guess]
; <- a: whether it is correct or not
2 years ago
check_win:
call get_guess_offset
ld bc, current_word
ld a, [bc]
ld d, a
ld a, [hl]
cp a, d
jp nz, .not_equal
REPT 4
inc bc
inc hl
ld a, [bc]
ld d, a
ld a, [hl]
cp a, d
jp nz, .not_equal
ENDR
.equal:
ld a, 1
ret
.not_equal:
ld a, 0
ret