summary refs log tree commit diff stats
path: root/src/utils.asm
diff options
context:
space:
mode:
authorChristian Krinitsin <code@krinitsin.xyz>2024-11-21 20:12:29 +0100
committerChristian Krinitsin <code@krinitsin.xyz>2024-11-21 20:12:29 +0100
commit4efed0763417d76736fd628acef641abb7fd74a1 (patch)
treedfbe63f57824ac38543fae5ed961c10c93889d55 /src/utils.asm
parent06c6e78a06d486cc6176754e00df7fea03286994 (diff)
downloadx86_64-Snake-4efed0763417d76736fd628acef641abb7fd74a1.tar.gz
x86_64-Snake-4efed0763417d76736fd628acef641abb7fd74a1.zip
add game over, and start/pause/gameover screen with text
Diffstat (limited to 'src/utils.asm')
-rw-r--r--src/utils.asm68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/utils.asm b/src/utils.asm
index 9281ed2..dfdb09f 100644
--- a/src/utils.asm
+++ b/src/utils.asm
@@ -1,4 +1,12 @@
 section .data
+    ; messages
+    game_over_message db "gameover", 0xA, "space - retry", 0xA, "q - quit", 0xA
+    game_over_message_len equ $ - game_over_message
+    pause_message db "pause", 0xA, "esc - unpause", 0xA, "q - quit", 0xA
+    pause_message_len equ $ - pause_message
+    start_message db "snake", 0xA, "space - start", 0xA, "q - quit", 0xA
+    start_message_len equ $ - start_message
+
     ; escape code for clearing the screen
     clear db 0x1B, '[2J', 0x1B, '[H', 0
     clear_len equ $ - clear 
@@ -26,6 +34,10 @@ section .text
     global reset_cursor
     global hide_cursor
     global show_cursor
+    global write_game_over_message
+    global write_pause_message
+    global write_start_message
+    extern height
 
 hide_cursor:
     push rdi
@@ -100,6 +112,62 @@ write_byte:
     pop rdi
     ret
 
+cursor_to_message_position:
+    push rbx
+    call reset_cursor
+    mov bl, byte [height] 
+
+_loop_message:
+    call move_cursor_down
+    dec bl
+    cmp bl, -2
+    jne _loop_message
+    
+    pop rbx
+    ret
+
+write_game_over_message:
+    push rdi
+
+    call cursor_to_message_position
+
+    mov rax, 1                      
+    mov rdi, 1                      
+    mov rsi, game_over_message                
+    mov rdx, game_over_message_len                
+    syscall                         
+
+    pop rdi
+    ret
+
+write_pause_message:
+    push rdi
+
+    call cursor_to_message_position
+
+    mov rax, 1                      
+    mov rdi, 1                      
+    mov rsi, pause_message                
+    mov rdx, pause_message_len                
+    syscall                         
+
+    pop rdi
+    ret
+
+write_start_message:
+    push rdi
+
+    call cursor_to_message_position
+
+    mov rax, 1                      
+    mov rdi, 1                      
+    mov rsi, start_message                
+    mov rdx, start_message_len                
+    syscall                         
+
+    pop rdi
+    ret
+
 clear_screen:
     push rdi