From d532317c011b9e5653241d50b961ee8caa710144 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Tue, 9 May 2023 22:43:33 +0100 Subject: Playground Potential example game. --- game/entities.asm | 263 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 game/entities.asm (limited to 'game/entities.asm') diff --git a/game/entities.asm b/game/entities.asm new file mode 100644 index 0000000..fa9d8fd --- /dev/null +++ b/game/entities.asm @@ -0,0 +1,263 @@ +; +; Simple array based entity system +; + +.equ ET_NONE 0 +.equ ET_PLAYER 1 +.equ ET_ENEMY 2 +.equ ET_END 0xff + +.equ ET_BG 0xa000 + +entities_erase: + ; bg is stored in ET_BG addr + ld b, >ET_BG + push b + + ld x, entities + +entities_erase_next: + ld y, [a : x] + cmp y, ET_END + bz + jmp entities_erase_done + + ; write, no transparent + ld y, 1 + push y + + ; dst: x + inc x + bo + inc a + ld y, [a : x] + push y + + ; dst: y + inc x + bo + inc a + ld y, [a : x] + push y + + ; src: saved bg + ld y, [sp + 3] + push y + ld y, 0 + push y + + call entities_blt + + pop y + pop y + pop y + pop y + pop y + + ; next entity + add x, 5 + bo + inc a + + pop b + inc b + push b + + jmp entities_erase_next + +entities_erase_done: + pop a + ret + +entities_update: + ld x, entities + +entities_update_next: + ld y, [a : x] + cmp y, ET_END + bz + ret + + push a + push x + + add x, 5 + bo + inc a + + ld y, [a : x] + inc x + bo + inc a + ld b, [a : x] + inc x + bo + inc a + + ld x, [sp + 0] + ld a, [sp + 1] + + ; entity update + push a + push x + call [b : y] + pop x + pop x + + pop x + pop a + + add x, 7 + bo + inc a + + jmp entities_update_next + +entities_draw: + ; bg is stored in ET_BG addr + ld b, >ET_BG + push b + + ld x, entities + +entities_draw_next: + ld y, [a : x] + cmp y, ET_END + bz + jmp entities_draw_done + + inc x + bo + inc a + ; save x addr for later + push a + push x + + ; save bg + + ; read, no transparent + ld y, 4 + push y + + ; dst: x + ld y, [a : x] + push y + + ; dst: y + inc x + bo + inc a + ld y, [a : x] + push y + + ; dst: save bg + ld y, [sp + 5] + push y + ld y, 0 + push y + + call entities_blt + + pop y + pop y + pop y + pop y + pop y + + ; draw sprite + + ; x addr + pop x + pop a + + ; write, transparent + ld y, 3 + push y + + ; dst: x + ld y, [a : x] + push y + + ; dst: y + inc x + bo + inc a + ld y, [a : x] + push y + + ; src: the sprite + inc x + bo + inc a + ld y, [a : x] + inc x + bo + inc a + ld b, [a : x] + push b + push y + + call entities_blt + + pop y + pop y + pop y + pop y + pop y + + ; next entity + add x, 3 + bo + inc a + + pop b + inc b + push b + + jmp entities_draw_next + +entities_draw_done: + pop a + ret + +; sp: write mode +; y coord +; x coord +; addr +entities_blt: + ; settings mode + ld y, 128 + ld b, 0xb0 + port b, y + + ; setup + inc b + + ; addr + ld y, [sp + 2] + port b, y + ld y, [sp + 3] + port b, y + + ; x + ld y, [sp + 5] + port b, y + ; y + ld y, [sp + 4] + port b, y + + ; 16x16 + ld y, 16 + port b, y + port b, y + + ; blit + dec b + ; write mode + ld y, [sp + 6] + port b, y + ret + -- cgit v1.2.3