diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-05-12 23:36:49 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-05-12 23:36:49 +0100 |
commit | a20b308cfe92a8bb47c6896e7fdb24b15c2efd59 (patch) | |
tree | 22a38850ea38dc91f02095101192061aaafbc30d /game/bullet.asm | |
parent | 8eec2f91339b8f06e1b80c49c976a9d9ac6e01f7 (diff) | |
download | tr8vm-a20b308cfe92a8bb47c6896e7fdb24b15c2efd59.tar.gz tr8vm-a20b308cfe92a8bb47c6896e7fdb24b15c2efd59.zip |
Add player bullets
Also a changes in the entity system:
- don't preserve the BG (always erase black)
- skip unused entities
- fix in the reserved size (and entity is 8 bytes)
- allocate new entities
Diffstat (limited to 'game/bullet.asm')
-rw-r--r-- | game/bullet.asm | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/game/bullet.asm b/game/bullet.asm new file mode 100644 index 0000000..c2b55cd --- /dev/null +++ b/game/bullet.asm @@ -0,0 +1,99 @@ +; +; Player bullets +; +bullet_player_new: + call entities_new + bnc + ret + + ; a : x points to the entity + + ld y, ET_BULLET + ld [a : x], y + + inc x + bo + inc a + + ; caller entity is in the stack + ld y, [sp + 4] + ld b, [sp + 5] + + inc y + bo + inc b + push y + ld y, [b : y] + ; same x + ld [a : x], y + pop y + + inc x + bo + inc a + + inc y + bo + inc b + ld y, [b : y] + ; same y + ld [a : x], y + + inc x + bo + inc a + + ; frame 0 + ld y, 0 + ld [a : x], y + + inc x + bo + inc a + + ; player bullet sprite + ld y, <pbullet_sprite + ld [a : x], y + inc x + bo + inc a + ld y, >pbullet_sprite + ld [a : x], y + + inc x + bo + inc b + + ; update function + ld y, <pbullet_update + ld [a : x], y + inc x + bo + inc a + ld y, >pbullet_update + ld [a : x], y + + ret + +pbullet_update: + ld x, [sp + 2] + ld a, [sp + 3] + + add x, 2 + bo + inc a + + ld y, [a : x] + sub y, 2 + bo + jmp pbullet_done + ld [a : x], y + ret + +pbullet_done: + ld x, [sp + 2] + ld a, [sp + 3] + + ld y, ET_NONE + ld [a : x], y + ret |