aboutsummaryrefslogtreecommitdiff
path: root/game/bullet.asm
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-05-12 23:36:49 +0100
committerJuan J. Martinez <jjm@usebox.net>2023-05-12 23:36:49 +0100
commita20b308cfe92a8bb47c6896e7fdb24b15c2efd59 (patch)
tree22a38850ea38dc91f02095101192061aaafbc30d /game/bullet.asm
parent8eec2f91339b8f06e1b80c49c976a9d9ac6e01f7 (diff)
downloadtr8vm-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.asm99
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