sortof bounds-check while moving
[ld45_start_nothing] / src / main.asm
index ce5e5ad..a5e0754 100644 (file)
@@ -5,6 +5,8 @@
 %include "intr.inc"
 %include "dbglog.inc"
 
+PLAYER_MOVE_SPEED equ 5
+
        ; this is placed at the beginning of our binary at 1mb (see game.ld)
        ; and it's what gets executed directly by the boot loader
        section .startup
@@ -26,8 +28,12 @@ main_loop:
        call clear
 
        push dword 0
-       push dword [ship_y]
-       push dword [ship_x]
+       mov eax, [ship_y]
+       shr eax, 8
+       push eax
+       mov eax, [ship_x]
+       shr eax, 8
+       push eax
        push dword FRAMEBUF_ADDR
        call sprsheet
        add esp, 16
@@ -37,9 +43,39 @@ main_loop:
        jmp main_loop
 
 update:
+       mov eax, [ship_y]
+
+       check_key SC_W
+       jnc .not_w
+       sub eax, PLAYER_MOVE_SPEED
+       jns .not_w
+       xor eax, eax
+.not_w:        check_key SC_S
+       jnc .not_s
+       add eax, PLAYER_MOVE_SPEED
+       cmp eax, 200 << 8
+       jb .not_s
+       mov eax, 200 << 8
+.not_s:
+       mov [ship_y], eax
+       mov eax, [ship_x]
+
+       check_key SC_A
+       jnc .not_a
+       sub eax, PLAYER_MOVE_SPEED
+       jns .not_a
+       xor eax, eax
+.not_a: check_key SC_D
+       jnc .not_d
+       add eax, PLAYER_MOVE_SPEED
+       cmp eax, 320 << 8
+       jb .not_d
+       mov eax, 320 << 8
+.not_d:
+       mov [ship_x], eax
        ret
 
        section .data
        align 4
-ship_x: dd 160
-ship_y: dd 100
+ship_x: dd 160 << 8
+ship_y: dd 100 << 8