diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-05-09 22:43:33 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-05-09 22:43:33 +0100 |
commit | d532317c011b9e5653241d50b961ee8caa710144 (patch) | |
tree | cb9fb308b9a92aa667ee626c8474b3e1e9f6f083 /game/entities.asm | |
parent | 741561787cc2df547d5f520a142beaff234c488e (diff) | |
download | tr8vm-d532317c011b9e5653241d50b961ee8caa710144.tar.gz tr8vm-d532317c011b9e5653241d50b961ee8caa710144.zip |
Playground
Potential example game.
Diffstat (limited to 'game/entities.asm')
-rw-r--r-- | game/entities.asm | 263 |
1 files changed, 263 insertions, 0 deletions
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 + ld a, >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 + ld a, >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 + ld a, >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 + |