Add the code to draw the body and head segments in the game loop. Still need to add code to create, update and shoot segments.

This commit is contained in:
Jeremy Rand 2020-08-26 23:44:41 -04:00
parent 67e2b56dc2
commit d8e9c6863b
2 changed files with 289 additions and 140 deletions

View File

@ -13,23 +13,111 @@
gameSegments start
using globalData
SEGMENT_MAX_NUM equ 12
SEGMENT_MAX_OFFSET equ SEGMENT_MAX_NUM*2-2
SEGMENT_STATE_NONE equ 0
SEGMENT_STATE_HEAD equ 1
SEGMENT_STATE_BODY equ 2
SEGMENT_DIR_LEFT equ 0
SEGMENT_DIR_DOWN_LEFT equ 1
SEGMENT_DIR_DOWN equ 2
SEGMENT_DIR_DOWN_RIGHT equ 3
SEGMENT_DIR_RIGHT equ 4
SEGMENT_DIR_LEFT equ 0
SEGMENT_DIR_RIGHT equ 1
SEGMENT_FACING_LEFT equ 0
SEGMENT_FACING_DOWN_LEFT equ 32
SEGMENT_FACING_DOWN equ 64
SEGMENT_FACING_DOWN_RIGHT equ 96
SEGMENT_FACING_RIGHT equ 128
drawSegments entry
; Write this code...
ldx #SEGMENT_MAX_OFFSET
drawSegments_nextSegment anop
lda segmentStates,x
beq drawSegments_skipSegment
lda segmentFacing,x
clc
adc segmentSpriteOffset
tay
lda segmentStates,x
cmp #SEGMENT_STATE_HEAD
beq drawSegments_head
jsl segmentBodyJump
bra drawSegments_skipSegment
drawSegments_head anop
jsl segmentHeadJump
drawSegments_skipSegment anop
dex
dex
bpl drawSegments_nextSegment
rtl
segmentHeadJump entry
lda segmentScreenShifts,x
beq segmentHeadJump_noShift
lda headShiftJumpTable,y
sta segmentHeadJump_jumpInst+1
lda headShiftJumpTable+2,y
sta segmentHeadJump_jumpInst+3
ldy segmentScreenOffsets,x
bra segmentHeadJump_jumpInst
segmentHeadJump_noShift anop
lda headJumpTable,y
sta segmentHeadJump_jumpInst+1
lda headJumpTable+2,y
sta segmentHeadJump_jumpInst+3
ldy segmentScreenOffsets,x
segmentHeadJump_jumpInst anop
jmp >leftHead1
segmentBodyJump entry
lda segmentScreenShifts,x
beq segmentBodyJump_noShift
lda bodyShiftJumpTable,y
sta segmentBodyJump_jumpInst+1
lda bodyShiftJumpTable+2,y
sta segmentBodyJump_jumpInst+3
ldy segmentScreenOffsets,x
bra segmentBodyJump_jumpInst
segmentBodyJump_noShift anop
lda bodyJumpTable,y
sta segmentBodyJump_jumpInst+1
lda bodyJumpTable+2,y
sta segmentBodyJump_jumpInst+3
ldy segmentScreenOffsets,x
segmentBodyJump_jumpInst anop
jmp >leftHead1
updateSegments entry
lda segmentSpriteOffset
beq updateSegments_resetSpriteOffset
sec
sbc #$4
bra updateSegments_spriteOffsetCont
updateSegments_resetSpriteOffset anop
lda #SEGMENT_SPRITE_LAST_OFFSET
updateSegments_spriteOffsetCont anop
sta segmentSpriteOffset
; Write this code...
rtl
@ -47,9 +135,23 @@ addHeadSegment entry
shootSegment entry
; Write this code...
rtl
numSegments dc i2'0'
segmentStates dc 12i2'SEGMENT_STATE_NONE'
segmentDirections dc 12i2'SEGMENT_DIR_RIGHT'
segmentFacing dc 12i2'SEGMENT_FACING_DOWN'
segmentScreenOffsets dc 12i2'0'
segmentScreenShifts dc 12i2'0'
SEGMENT_SPRITE_LAST_OFFSET gequ 7*4
leftHeadJumpTable dc i4'leftHead5'
segmentSpriteOffset dc i2'SEGMENT_SPRITE_LAST_OFFSET'
headJumpTable anop
; leftHeadJumpTable
dc i4'leftHead5'
dc i4'leftHead4'
dc i4'leftHead1'
dc i4'leftHead2'
@ -57,79 +159,20 @@ leftHeadJumpTable dc i4'leftHead5'
dc i4'leftHead2'
dc i4'leftHead1'
dc i4'leftHead4'
leftHeadShiftJumpTable dc i4'leftHead5s'
dc i4'leftHead4s'
dc i4'leftHead1s'
dc i4'leftHead2s'
dc i4'leftHead3s'
dc i4'leftHead2s'
dc i4'leftHead1s'
dc i4'leftHead4s'
rightHeadJumpTable dc i4'rightHead5'
dc i4'rightHead4'
dc i4'rightHead1'
dc i4'rightHead2'
dc i4'rightHead3'
dc i4'rightHead2'
dc i4'rightHead1'
dc i4'rightHead4'
rightHeadShiftJumpTable dc i4'rightHead5s'
dc i4'rightHead4s'
dc i4'rightHead1s'
dc i4'rightHead2s'
dc i4'rightHead3s'
dc i4'rightHead2s'
dc i4'rightHead1s'
dc i4'rightHead4s'
; leftDownHeadJumpTable
dc i4'leftDownHead1'
dc i4'leftDownHead2'
dc i4'leftDownHead1'
dc i4'leftDownHead2'
dc i4'leftDownHead1'
dc i4'leftDownHead2'
dc i4'leftDownHead1'
dc i4'leftDownHead2'
leftDownHeadJumpTable dc i4'leftDownHead1'
dc i4'leftDownHead2'
dc i4'leftDownHead1'
dc i4'leftDownHead2'
dc i4'leftDownHead1'
dc i4'leftDownHead2'
dc i4'leftDownHead1'
dc i4'leftDownHead2'
leftDownShiftHeadJumpTable dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
rightDownHeadJumpTable dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
rightDownShiftHeadJumpTable dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
downHeadJumpTable dc i4'downHead3'
; downHeadJumpTable
dc i4'downHead3'
dc i4'downHead3'
dc i4'downHead1'
dc i4'downHead1'
@ -139,7 +182,87 @@ downHeadJumpTable dc i4'downHead3'
dc i4'downHead1'
leftBodyJumpTable dc i4'leftBody5'
; rightDownHeadJumpTable
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
dc i4'rightDownHead1'
dc i4'rightDownHead2' ; Problem, spills into next tile...
; rightHeadJumpTable
dc i4'rightHead5'
dc i4'rightHead4'
dc i4'rightHead1'
dc i4'rightHead2'
dc i4'rightHead3'
dc i4'rightHead2'
dc i4'rightHead1'
dc i4'rightHead4'
headShiftJumpTable anop
; leftHeadShiftJumpTable
dc i4'leftHead5s'
dc i4'leftHead4s'
dc i4'leftHead1s'
dc i4'leftHead2s'
dc i4'leftHead3s'
dc i4'leftHead2s'
dc i4'leftHead1s'
dc i4'leftHead4s'
; leftDownShiftHeadJumpTable
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
dc i4'leftDownHead1s'
dc i4'leftDownHead2s' ; Problem, spills into next tile...
; downHeadJumpTable
dc i4'downHead3'
dc i4'downHead3'
dc i4'downHead1'
dc i4'downHead1'
dc i4'downHead2'
dc i4'downHead2'
dc i4'downHead1'
dc i4'downHead1'
; rightDownShiftHeadJumpTable
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
dc i4'rightDownHead1s'
dc i4'rightDownHead2s'
; rightHeadShiftJumpTable
dc i4'rightHead5s'
dc i4'rightHead4s'
dc i4'rightHead1s'
dc i4'rightHead2s'
dc i4'rightHead3s'
dc i4'rightHead2s'
dc i4'rightHead1s'
dc i4'rightHead4s'
bodyJumpTable anop
; leftBodyJumpTable
dc i4'leftBody5'
dc i4'leftBody4'
dc i4'leftBody1'
dc i4'leftBody2'
@ -147,19 +270,43 @@ leftBodyJumpTable dc i4'leftBody5'
dc i4'leftBody2'
dc i4'leftBody1'
dc i4'leftBody4'
leftBodyShiftJumpTable dc i4'leftBody5s'
dc i4'leftBody4s'
dc i4'leftBody1s'
dc i4'leftBody2s'
dc i4'leftBody3s'
dc i4'leftBody2s'
dc i4'leftBody1s'
dc i4'leftBody4s'
rightBodyJumpTable dc i4'rightBody5'
; leftDownBodyJumpTable
dc i4'leftDownBody1'
dc i4'leftDownBody2'
dc i4'leftDownBody1'
dc i4'leftDownBody2'
dc i4'leftDownBody1'
dc i4'leftDownBody2'
dc i4'leftDownBody1'
dc i4'leftDownBody2'
; downBodyJumpTable
dc i4'downBody3'
dc i4'downBody3'
dc i4'downBody1'
dc i4'downBody1'
dc i4'downBody2'
dc i4'downBody2'
dc i4'downBody1'
dc i4'downBody1'
; rightDownBodyJumpTable
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
; rightBodyJumpTable
dc i4'rightBody5'
dc i4'rightBody4'
dc i4'rightBody1'
dc i4'rightBody2'
@ -168,58 +315,32 @@ rightBodyJumpTable dc i4'rightBody5'
dc i4'rightBody1'
dc i4'rightBody4'
rightBodyShiftJumpTable dc i4'rightBody5s'
dc i4'rightBody4s'
dc i4'rightBody1s'
dc i4'rightBody2s'
dc i4'rightBody3s'
dc i4'rightBody2s'
dc i4'rightBody1s'
dc i4'rightBody4s'
bodyShiftJumpTable anop
; leftBodyShiftJumpTable
dc i4'leftBody5s'
dc i4'leftBody4s'
dc i4'leftBody1s'
dc i4'leftBody2s'
dc i4'leftBody3s'
dc i4'leftBody2s'
dc i4'leftBody1s'
dc i4'leftBody4s'
leftDownBodyJumpTable dc i4'leftDownBody1'
dc i4'leftDownBody2'
dc i4'leftDownBody1'
dc i4'leftDownBody2'
dc i4'leftDownBody1'
dc i4'leftDownBody2'
dc i4'leftDownBody1'
dc i4'leftDownBody2'
leftDownShiftBodyJumpTable dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
rightDownBodyJumpTable dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
dc i4'rightDownBody1'
dc i4'rightDownBody2' ; Problem, spills into next tile...
rightDownShiftBodyJumpTable dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
downBodyJumpTable dc i4'downBody3'
; leftDownShiftBodyJumpTable
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
dc i4'leftDownBody1s'
dc i4'leftDownBody2s' ; Problem, spills into next tile...
; downBodyJumpTable
dc i4'downBody3'
dc i4'downBody3'
dc i4'downBody1'
dc i4'downBody1'
@ -227,5 +348,28 @@ downBodyJumpTable dc i4'downBody3'
dc i4'downBody2'
dc i4'downBody1'
dc i4'downBody1'
; rightDownShiftBodyJumpTable
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
dc i4'rightDownBody1s'
dc i4'rightDownBody2s'
; rightBodyShiftJumpTable
dc i4'rightBody5s'
dc i4'rightBody4s'
dc i4'rightBody1s'
dc i4'rightBody2s'
dc i4'rightBody3s'
dc i4'rightBody2s'
dc i4'rightBody1s'
dc i4'rightBody4s'
end

View File

@ -13,6 +13,11 @@
segments start
using globalData
; IMPORTANT!!!! - It is critical that the X register is preserved in all of these
; draw routines. The caller to this uses the X register to hold the head/segment
; number that is being drawn. If the X register is changed in any way, the draw
; routine will fail.
leftHead1 entry
_spriteHeader