2020-07-31 03:34:48 +00:00
|
|
|
;
|
|
|
|
; gameSegments.s
|
|
|
|
; BuGS
|
|
|
|
;
|
|
|
|
; Created by Jeremy Rand on 2020-07-30.
|
|
|
|
;Copyright © 2020 Jeremy Rand. All rights reserved.
|
|
|
|
;
|
|
|
|
|
|
|
|
case on
|
|
|
|
mcopy gameSegments.macros
|
|
|
|
keep gameSegments
|
|
|
|
|
|
|
|
gameSegments start
|
|
|
|
using globalData
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
SEGMENT_MAX_NUM equ 12
|
|
|
|
SEGMENT_MAX_OFFSET equ SEGMENT_MAX_NUM*2-2
|
|
|
|
|
2020-08-11 03:58:49 +00:00
|
|
|
SEGMENT_STATE_NONE equ 0
|
|
|
|
SEGMENT_STATE_HEAD equ 1
|
|
|
|
SEGMENT_STATE_BODY equ 2
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
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
|
2020-08-11 03:58:49 +00:00
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
|
|
|
|
drawSegments entry
|
2020-08-27 03:44:41 +00:00
|
|
|
ldx #SEGMENT_MAX_OFFSET
|
|
|
|
drawSegments_nextSegment anop
|
|
|
|
lda segmentStates,x
|
2020-08-28 02:36:04 +00:00
|
|
|
bne drawSegments_cont
|
|
|
|
jmp drawSegments_skipSegment
|
|
|
|
|
|
|
|
drawSegments_cont anop
|
2020-08-27 03:44:41 +00:00
|
|
|
lda segmentFacing,x
|
|
|
|
clc
|
|
|
|
adc segmentSpriteOffset
|
|
|
|
tay
|
|
|
|
|
|
|
|
lda segmentStates,x
|
|
|
|
cmp #SEGMENT_STATE_HEAD
|
|
|
|
beq drawSegments_head
|
|
|
|
jsl segmentBodyJump
|
2020-08-28 02:36:04 +00:00
|
|
|
bra drawSegments_handleTiles
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
drawSegments_head anop
|
|
|
|
jsl segmentHeadJump
|
2020-08-28 02:36:04 +00:00
|
|
|
|
|
|
|
drawSegments_handleTiles anop
|
|
|
|
phx
|
|
|
|
txa
|
|
|
|
asl a
|
|
|
|
asl a
|
|
|
|
tay
|
|
|
|
|
|
|
|
_dirtyGameTile segmentTileOffsets
|
|
|
|
_dirtyGameTile segmentTileOffsets+2
|
|
|
|
_dirtyGameTile segmentTileOffsets+4
|
|
|
|
_dirtyGameTile segmentTileOffsets+6
|
|
|
|
plx
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
drawSegments_skipSegment anop
|
|
|
|
dex
|
|
|
|
dex
|
2020-08-28 02:36:04 +00:00
|
|
|
bmi drawSegments_done
|
|
|
|
jmp drawSegments_nextSegment
|
|
|
|
|
|
|
|
drawSegments_done anop
|
2020-07-31 03:34:48 +00:00
|
|
|
rtl
|
|
|
|
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
updateSegments entry
|
2020-08-28 03:36:16 +00:00
|
|
|
lda segmentSpriteShift
|
|
|
|
eor #1
|
|
|
|
sta segmentSpriteShift
|
|
|
|
beq updateSegments_skipSpriteOffset
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
lda segmentSpriteOffset
|
|
|
|
beq updateSegments_resetSpriteOffset
|
|
|
|
sec
|
|
|
|
sbc #$4
|
|
|
|
bra updateSegments_spriteOffsetCont
|
|
|
|
|
|
|
|
updateSegments_resetSpriteOffset anop
|
|
|
|
lda #SEGMENT_SPRITE_LAST_OFFSET
|
|
|
|
updateSegments_spriteOffsetCont anop
|
|
|
|
sta segmentSpriteOffset
|
|
|
|
|
2020-08-28 03:36:16 +00:00
|
|
|
updateSegments_skipSpriteOffset anop
|
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
; Write this code...
|
|
|
|
rtl
|
|
|
|
|
|
|
|
|
|
|
|
addBodySegment entry
|
2020-08-28 03:36:16 +00:00
|
|
|
lda numSegments
|
|
|
|
asl a
|
|
|
|
tax
|
|
|
|
|
|
|
|
lda #SEGMENT_STATE_BODY
|
|
|
|
sta segmentStates,x
|
|
|
|
|
|
|
|
lda #SEGMENT_DIR_LEFT
|
|
|
|
sta segmentDirections,x
|
|
|
|
|
|
|
|
lda #SEGMENT_FACING_LEFT
|
|
|
|
sta segmentFacing,x
|
|
|
|
|
2020-09-02 04:15:53 +00:00
|
|
|
lda tileOffset,x
|
2020-08-28 03:36:16 +00:00
|
|
|
sec
|
|
|
|
sbc #3
|
|
|
|
sta segmentScreenOffsets,x
|
|
|
|
|
|
|
|
stz segmentScreenShifts,x
|
|
|
|
|
|
|
|
txa
|
|
|
|
asl a
|
|
|
|
asl a
|
2020-09-02 04:15:53 +00:00
|
|
|
tay
|
2020-08-28 03:36:16 +00:00
|
|
|
|
2020-09-02 04:15:53 +00:00
|
|
|
txa
|
|
|
|
sta segmentTileOffsets,y
|
|
|
|
sta segmentTileOffsets+2,y
|
|
|
|
sta segmentTileOffsets+4,y
|
|
|
|
sta segmentTileOffsets+6,y
|
2020-08-28 03:36:16 +00:00
|
|
|
|
|
|
|
inc numSegments
|
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
rtl
|
|
|
|
|
|
|
|
|
|
|
|
addHeadSegment entry
|
2020-08-28 03:36:16 +00:00
|
|
|
lda numSegments
|
|
|
|
asl a
|
|
|
|
tax
|
|
|
|
|
|
|
|
lda #SEGMENT_STATE_HEAD
|
|
|
|
sta segmentStates,x
|
|
|
|
|
|
|
|
lda #SEGMENT_DIR_LEFT
|
|
|
|
sta segmentDirections,x
|
|
|
|
|
|
|
|
lda #SEGMENT_FACING_LEFT
|
|
|
|
sta segmentFacing,x
|
|
|
|
|
2020-09-02 04:15:53 +00:00
|
|
|
lda tileOffset,x
|
2020-08-28 03:36:16 +00:00
|
|
|
sec
|
|
|
|
sbc #3
|
|
|
|
sta segmentScreenOffsets,x
|
|
|
|
|
|
|
|
stz segmentScreenShifts,x
|
|
|
|
|
|
|
|
txa
|
|
|
|
asl a
|
|
|
|
asl a
|
2020-09-02 04:15:53 +00:00
|
|
|
tay
|
2020-08-28 03:36:16 +00:00
|
|
|
|
2020-09-02 04:15:53 +00:00
|
|
|
txa
|
|
|
|
sta segmentTileOffsets,y
|
|
|
|
sta segmentTileOffsets+2,y
|
|
|
|
sta segmentTileOffsets+4,y
|
|
|
|
sta segmentTileOffsets+6,y
|
2020-08-28 03:36:16 +00:00
|
|
|
|
|
|
|
inc numSegments
|
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
rtl
|
|
|
|
|
|
|
|
|
|
|
|
shootSegment entry
|
|
|
|
; Write this code...
|
|
|
|
rtl
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
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'
|
2020-08-28 02:36:04 +00:00
|
|
|
segmentTileOffsets dc 48i2'0'
|
2020-08-27 03:44:41 +00:00
|
|
|
|
2020-08-11 03:58:49 +00:00
|
|
|
SEGMENT_SPRITE_LAST_OFFSET gequ 7*4
|
2020-08-27 03:44:41 +00:00
|
|
|
segmentSpriteOffset dc i2'SEGMENT_SPRITE_LAST_OFFSET'
|
2020-08-28 03:36:16 +00:00
|
|
|
segmentSpriteShift dc i2'0'
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
headJumpTable anop
|
|
|
|
; leftHeadJumpTable
|
|
|
|
dc i4'leftHead5'
|
2020-08-11 03:58:49 +00:00
|
|
|
dc i4'leftHead4'
|
|
|
|
dc i4'leftHead1'
|
|
|
|
dc i4'leftHead2'
|
|
|
|
dc i4'leftHead3'
|
|
|
|
dc i4'leftHead2'
|
|
|
|
dc i4'leftHead1'
|
|
|
|
dc i4'leftHead4'
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
; 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'
|
|
|
|
|
|
|
|
|
|
|
|
; 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'
|
|
|
|
|
|
|
|
|
|
|
|
; 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'
|
2020-08-11 03:58:49 +00:00
|
|
|
dc i4'rightHead4'
|
|
|
|
dc i4'rightHead1'
|
|
|
|
dc i4'rightHead2'
|
|
|
|
dc i4'rightHead3'
|
|
|
|
dc i4'rightHead2'
|
|
|
|
dc i4'rightHead1'
|
|
|
|
dc i4'rightHead4'
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
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...
|
2020-08-11 03:58:49 +00:00
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
; downHeadJumpTable
|
|
|
|
dc i4'downHead3'
|
2020-08-11 03:58:49 +00:00
|
|
|
dc i4'downHead3'
|
|
|
|
dc i4'downHead1'
|
|
|
|
dc i4'downHead1'
|
|
|
|
dc i4'downHead2'
|
|
|
|
dc i4'downHead2'
|
|
|
|
dc i4'downHead1'
|
|
|
|
dc i4'downHead1'
|
|
|
|
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
; 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'
|
2020-08-11 03:58:49 +00:00
|
|
|
dc i4'leftBody4'
|
|
|
|
dc i4'leftBody1'
|
|
|
|
dc i4'leftBody2'
|
|
|
|
dc i4'leftBody3'
|
|
|
|
dc i4'leftBody2'
|
|
|
|
dc i4'leftBody1'
|
|
|
|
dc i4'leftBody4'
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
; 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'
|
2020-08-11 03:58:49 +00:00
|
|
|
dc i4'rightBody4'
|
|
|
|
dc i4'rightBody1'
|
|
|
|
dc i4'rightBody2'
|
|
|
|
dc i4'rightBody3'
|
|
|
|
dc i4'rightBody2'
|
|
|
|
dc i4'rightBody1'
|
|
|
|
dc i4'rightBody4'
|
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
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'
|
|
|
|
|
2020-08-11 03:58:49 +00:00
|
|
|
|
2020-08-27 03:44:41 +00:00
|
|
|
; 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'
|
2020-08-11 03:58:49 +00:00
|
|
|
dc i4'downBody3'
|
|
|
|
dc i4'downBody1'
|
|
|
|
dc i4'downBody1'
|
|
|
|
dc i4'downBody2'
|
|
|
|
dc i4'downBody2'
|
|
|
|
dc i4'downBody1'
|
|
|
|
dc i4'downBody1'
|
2020-08-27 03:44:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
; 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'
|
|
|
|
|
2020-08-11 03:58:49 +00:00
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
end
|