Why is the doesn’t the incorrect character showing up?

So I am making a typing game, where the word drops down the screen and the user has to type the word before it reaches the bottom of the screen. My code has where if the user types the correct character, it prints it in green and over the original word. Then if the user types the incorrect character, it prints it in red and also over original word but the user has to type the right character for them to continue. The issue I am having is that the incorrect character does display correctly.

include Irvine32.inc

BUFMAX EQU 128

.data
    Words BYTE "house", 0
          BYTE "water", 0 
          BYTE "foods", 0
          BYTE "apple", 0
          BYTE "cloud", 0 ; List of words to be typed

    msElapsed BYTE 0
    positionX BYTE 0   
    positionY BYTE 1 
    nextWord DWORD 0
    score DWORD 0      
    scoreMsg BYTE "Game Over", 0 
    char BYTE ?                                 ; Character input by user
    correctBuffer BYTE BUFMAX DUP (0)           ; Buffer to store correctly typed characters
    incorrectBuffer BYTE BUFMAX DUP (0)
    Index DWORD 0      

.code
main PROC
    call TypingGame   
    invoke ExitProcess, 0 

main ENDP

TypingGame PROC
gameLoop:

    mov dl, positionX                   ; Move positionX value to DL register
    mov dh, positionY                   ; Move positionY value to DH register
    call Gotoxy                         ; Move cursor to the specified (X, Y) position

    ; Print the original word in white
    mov eax, white + (black * 16)       ; Set text color to white on black background
    call SetTextColor                   ; Apply the text color
    mov edx, OFFSET Words               ; Load address of Words array into ESI
    add edx, [nextWord]
    call WriteString                    ; Print the current word

    ; Draw the correctly typed characters in green over the original word
    mov dl, positionX
    mov dh, positionY
    call Gotoxy

    mov eax, green + (black * 16)       ; Set text color to green on black background
    call SetTextColor                   
    mov edx, OFFSET correctBuffer       ; Load address of correctBuffer into EDX
    call WriteString                    ; Print the correctBuffer string

    ; Draw the incorrectly typed characters in red over the original word
    mov dl, positionX
    mov dh, positionY
    call Gotoxy

    mov eax, red + (black * 16)         ; Set text color to red on black background
    call SetTextColor                   
    mov edx, OFFSET incorrectBuffer     ; Load address of incorrectBuffer into EDX
    call WriteString                    ; Print the incorrectBuffer string

    ; Set delay for inputs
    mov eax, 50
    add [msElapsed], 1
    call Delay

    call ReadKey                        ; Read a key from the keyboard
    jz continueLoop
    mov char, al                        ; Store the read character in char

    mov esi, OFFSET Words               ; Load address of Words array into ESI
    add esi, [nextWord]
    add esi, [Index]                    ; Add Index value to ESI to point to the current character
    movzx ebx, char                     ; Move char to EBX and zero-extend it
    
    cmp [esi], bl                       ; Compare current character in Words with char
    jne incorrect                       ; If they are not equal, jump to incorrect

correct:
    mov esi, OFFSET correctBuffer       ; Load address of correctBuffer into ESI
    add esi, [Index]                    ; Add Index value to ESI to point to the correct position
    mov [esi], bl                       ; Store the correct character in correctBuffer
    inc esi
    mov BYTE PTR [esi], 0               ; Null-terminate the correct buffer

    inc [Index]                         ; Increment the Index

    ; Compare Index with the end of the current word
    mov esi, OFFSET Words
    add esi, [nextWord]
    add esi, [Index]
    cmp BYTE PTR [esi], 0
    jne continueLoop                    ; If not the end, continue the loop

    ; If a word is completed, reset index and move to the next word
    mov [Index], 0
    add [nextWord], TYPE BYTE           ; Move to next word
    mov [positionX], 0                  ; Reset X
    mov [positionY], 0                  ; Reset Y

    jl gameLoop                         ; If positionY is less than 24, jump to gameLoop
    jmp endGame                         ; Otherwise, jump to endGame

incorrect:
    ; Store the incorrect character in incorrectBuffer
    mov esi, OFFSET incorrectBuffer     ; Load address of incorrectBuffer into ESI
    add esi, [Index]                    ; Add index to incorrectBuffer position
    mov [esi], bl                       ; Store the incorrect character
    inc esi
    mov BYTE PTR [esi], 0               ; Null-terminate the incorrect buffer

    ; Move cursor to the correct position for the incorrect character
    mov dl, positionX
    movzx eax, BYTE PTR [Index]
    add dl, al
    mov dh, positionY
    call Gotoxy

    mov eax, red + (black * 16)         ; Set text color to red on black background
    call SetTextColor                   ; Apply the text color
    mov al, char                        ; Move the incorrect character to AL
    call WriteChar                      ; Print the incorrect character

    inc [Index]                         ; Increment the Index

    jmp continueLoop                    ; Jump to continueLoop

continueLoop:

    ; Clear previous word
    mov dl, positionX                   ; Move positionX value to DL register
    mov dh, [positionY]                 ; Move positionY value to DH register
    call Gotoxy                         ; Move cursor to the specified (X, Y) position

    ; Print the original word in black
    mov eax, black + (black * 16)       ; Set text color to black on black background
    call SetTextColor                   ; Apply the text color
    mov edx, OFFSET Words               ; Load address of Words array into ESI
    add edx, [nextWord]                 ; 1
    call WriteString                    ; Print the current word

    cmp [msElapsed], 20
    jl skipIncrement                    ; Do not increase y if not 1000ms (1 sec)
    add [positionY], 1                  ; Increment the Y position
    mov [msElapsed], 0                  ; Reset ms counter
skipIncrement:

    cmp [positionY], 24                 ; Compare positionY with 24
    jl gameLoop                         ; If positionY is less than 24, jump to gameLoop
    jmp endGame                         ; Otherwise, jump to endGame

endGame:
    call Clrscr                         ; Clear the screen
    mov edx, OFFSET scoreMsg            ; Load address of scoreMsg into EDX
    call WriteString                    ; Print the score message
    ret                                 ; Return from procedure
TypingGame ENDP
END main

I tried adding a delay in the incorrect loop but the character disappears after the delay ends. Also even if the delay, when the user wants to enter the right character to continue, the wrong character stays. I would greatly appreciate it if you can help me out. Thank you so much!

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật