2017-08-13 22:36:12 +00:00
|
|
|
;
|
|
|
|
; gameobject
|
|
|
|
; Code and data structures related to the game objects
|
|
|
|
;
|
|
|
|
; Created by Quinn Dunki on 8/13/17
|
|
|
|
;
|
|
|
|
|
|
|
|
GAMEOBJECTWIDTH = 8
|
|
|
|
GAMEOBJECTHEIGHT = 8
|
|
|
|
|
|
|
|
|
|
|
|
gameobjectData:
|
|
|
|
.word 40 ; X pos in pixels (from left terrain edge)
|
|
|
|
.word 38 ; Y pos in pixels (from bottom terrain edge)
|
2017-08-27 05:34:49 +00:00
|
|
|
.word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; Saved background
|
|
|
|
|
|
|
|
GO_POSX = 0 ; Byte offsets into gameobject data structure
|
|
|
|
GO_POSY = 2
|
|
|
|
GO_BACKGROUND = 4
|
2017-08-13 22:36:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2017-08-27 05:34:49 +00:00
|
|
|
; RENDER_GAMEOBJECT
|
2017-08-13 22:36:12 +00:00
|
|
|
;
|
2017-08-27 05:34:49 +00:00
|
|
|
; ptr = Pointer to gameobject data
|
|
|
|
; Trashes SCRATCHL
|
2017-08-13 22:36:12 +00:00
|
|
|
;
|
2017-08-27 05:34:49 +00:00
|
|
|
.macro RENDER_GAMEOBJECT ptr
|
|
|
|
.scope
|
2017-08-13 22:36:12 +00:00
|
|
|
SAVE_AXY
|
|
|
|
|
|
|
|
; Find gameobject location in video memory
|
|
|
|
ldy #0
|
|
|
|
|
|
|
|
; X
|
2017-08-27 05:34:49 +00:00
|
|
|
lda ptr+GO_POSX,y
|
2017-08-13 22:36:12 +00:00
|
|
|
lsr
|
|
|
|
sec
|
|
|
|
sbc leftScreenEdge
|
2017-08-27 05:34:49 +00:00
|
|
|
bmi renderGameobjectSkip ; Gameobject is off left edge of screen
|
2017-08-13 22:36:12 +00:00
|
|
|
cmp #320 - GAMEOBJECTWIDTH
|
2017-08-27 05:34:49 +00:00
|
|
|
bpl renderGameobjectSkip ; Gameobject is off right edge of screen
|
2017-08-13 22:36:12 +00:00
|
|
|
sta SCRATCHL
|
|
|
|
|
|
|
|
; Y
|
|
|
|
sec
|
|
|
|
lda #200
|
2017-08-27 05:34:49 +00:00
|
|
|
sbc ptr+GO_POSY,y
|
|
|
|
bmi renderGameobjectSkip ; Gameobject is off top edge of screen
|
2017-08-13 22:36:12 +00:00
|
|
|
cmp #200 - GAMEOBJECTHEIGHT
|
2017-08-27 05:34:49 +00:00
|
|
|
bpl renderGameobjectSkip ; Gameobject is off bottom edge of screen
|
2017-08-13 22:36:12 +00:00
|
|
|
|
|
|
|
asl
|
|
|
|
tax
|
|
|
|
lda vramYOffset,x
|
|
|
|
clc
|
|
|
|
adc SCRATCHL
|
2017-08-27 05:34:49 +00:00
|
|
|
tax ; X now contains the VRAM offset of the upper left corner
|
|
|
|
phx
|
|
|
|
bra renderGameobjectBackground
|
|
|
|
|
|
|
|
renderGameobjectSkip:
|
|
|
|
jmp renderGameobjectDone
|
|
|
|
|
|
|
|
renderGameobjectBackground:
|
|
|
|
; Save background
|
|
|
|
lda VRAM,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*2+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*3,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*3+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*4,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*4+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*5,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*5+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*6,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*6+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*7,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda VRAM+160*7+2,x
|
|
|
|
sta ptr+GO_BACKGROUND,y
|
|
|
|
plx
|
2017-08-13 22:36:12 +00:00
|
|
|
|
2017-08-27 05:34:49 +00:00
|
|
|
; Draw sprite
|
2017-08-13 22:36:12 +00:00
|
|
|
lda #$FFFF
|
|
|
|
sta VRAM,x
|
|
|
|
sta VRAM+2,x
|
|
|
|
sta VRAM+160,x
|
|
|
|
sta VRAM+160+2,x
|
|
|
|
sta VRAM+160*2,x
|
|
|
|
sta VRAM+160*2+2,x
|
|
|
|
sta VRAM+160*3,x
|
|
|
|
sta VRAM+160*3+2,x
|
|
|
|
sta VRAM+160*4,x
|
|
|
|
sta VRAM+160*4+2,x
|
|
|
|
sta VRAM+160*5,x
|
|
|
|
sta VRAM+160*5+2,x
|
|
|
|
sta VRAM+160*6,x
|
|
|
|
sta VRAM+160*6+2,x
|
|
|
|
sta VRAM+160*7,x
|
|
|
|
sta VRAM+160*7+2,x
|
|
|
|
|
|
|
|
renderGameobjectDone:
|
|
|
|
RESTORE_AXY
|
2017-08-27 05:34:49 +00:00
|
|
|
.endscope
|
|
|
|
.endmacro
|
2017-08-25 04:45:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
2017-08-27 05:34:49 +00:00
|
|
|
; UNRENDER_GAMEOBJECT
|
2017-08-25 04:45:05 +00:00
|
|
|
;
|
2017-08-27 05:34:49 +00:00
|
|
|
; ptr = Pointer to gameobject data
|
|
|
|
; Trashes SCRATCHL
|
2017-08-25 04:45:05 +00:00
|
|
|
;
|
2017-08-27 05:34:49 +00:00
|
|
|
.macro UNRENDER_GAMEOBJECT ptr
|
|
|
|
.scope
|
2017-08-25 04:45:05 +00:00
|
|
|
SAVE_AXY
|
|
|
|
|
|
|
|
; Find gameobject location in video memory
|
|
|
|
ldy #0
|
|
|
|
|
|
|
|
; X
|
2017-08-27 05:34:49 +00:00
|
|
|
lda ptr+GO_POSX,y
|
2017-08-25 04:45:05 +00:00
|
|
|
lsr
|
|
|
|
sec
|
|
|
|
sbc leftScreenEdge
|
|
|
|
sta SCRATCHL
|
|
|
|
|
|
|
|
; Y
|
|
|
|
sec
|
|
|
|
lda #200
|
2017-08-27 05:34:49 +00:00
|
|
|
sbc ptr+GO_POSY,y
|
2017-08-25 04:45:05 +00:00
|
|
|
asl
|
|
|
|
tax
|
|
|
|
lda vramYOffset,x
|
|
|
|
clc
|
|
|
|
adc SCRATCHL
|
2017-08-27 05:34:49 +00:00
|
|
|
tax ; X now contains the VRAM offset of the upper left corner
|
2017-08-25 04:45:05 +00:00
|
|
|
|
2017-08-27 05:34:49 +00:00
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*2+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*3,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*3+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*4,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*4+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*5,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*5+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*6,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*6+2,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*7,x
|
2017-08-27 05:34:49 +00:00
|
|
|
iny
|
|
|
|
iny
|
|
|
|
lda ptr+GO_BACKGROUND,y
|
2017-08-25 04:45:05 +00:00
|
|
|
sta VRAM+160*7+2,x
|
|
|
|
|
|
|
|
unrenderGameobjectDone:
|
|
|
|
RESTORE_AXY
|
2017-08-27 05:34:49 +00:00
|
|
|
.endscope
|
|
|
|
.endmacro
|