mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-10-03 21:55:17 +00:00
Rearranged 2D map section checks to add a 'calculate' mode, which will be used to check flags under the avatar.
This commit is contained in:
parent
430ee9ce65
commit
3376930f85
@ -68,6 +68,7 @@ DRAW_WIDTH = $62 ; Number of columns to draw for current section (cannot
|
|||||||
DRAW_HEIGHT = $63 ; Number of rows to draw for current section (cannot be destroyed by drawing loop)
|
DRAW_HEIGHT = $63 ; Number of rows to draw for current section (cannot be destroyed by drawing loop)
|
||||||
DRAW_SECTION = $64 ; Location of section data being drawn
|
DRAW_SECTION = $64 ; Location of section data being drawn
|
||||||
TILE_BASE = $6B ; Location of tile data
|
TILE_BASE = $6B ; Location of tile data
|
||||||
|
CALC_MODE = $6F ; Flag to indicate calculate mode (non-zero) or normal draw mode (zero)
|
||||||
;-- These variables are set in the outer draw section but can be destroyed by the inner routine
|
;-- These variables are set in the outer draw section but can be destroyed by the inner routine
|
||||||
SECTION_X_START = $60 ; X Offset relative to current section being drawn
|
SECTION_X_START = $60 ; X Offset relative to current section being drawn
|
||||||
SECTION_Y_START = $61 ; Y Offset relative to current section being drawn
|
SECTION_Y_START = $61 ; Y Offset relative to current section being drawn
|
||||||
@ -456,57 +457,25 @@ CROSS_WEST
|
|||||||
; >> DRAW
|
; >> DRAW
|
||||||
!zone draw
|
!zone draw
|
||||||
!macro drawMapSection mapPtr, tilesetPtr, deltaX, deltaY {
|
!macro drawMapSection mapPtr, tilesetPtr, deltaX, deltaY {
|
||||||
; Determine X1 and X2 bounds for what is being drawn
|
|
||||||
LDA REL_X
|
|
||||||
SEC
|
|
||||||
SBC #(deltaX+VIEWPORT_HORIZ_PAD)
|
|
||||||
TAX
|
|
||||||
BPL .10
|
|
||||||
LDA #0
|
|
||||||
.10 STA SECTION_X_START
|
|
||||||
TXA
|
|
||||||
CLC
|
|
||||||
ADC #VIEWPORT_WIDTH
|
|
||||||
CMP #SECTION_WIDTH
|
|
||||||
BMI .11
|
|
||||||
LDA #SECTION_WIDTH
|
|
||||||
.11
|
|
||||||
SEC
|
|
||||||
SBC SECTION_X_START
|
|
||||||
STA DRAW_WIDTH
|
|
||||||
BMI .30
|
|
||||||
; Determine Y1 and Y2 bounds for what is being drawn
|
|
||||||
LDA REL_Y
|
|
||||||
SEC
|
|
||||||
SBC #(deltaY+VIEWPORT_VERT_PAD)
|
|
||||||
TAX
|
|
||||||
BPL .20
|
|
||||||
LDA #0
|
|
||||||
.20 STA SECTION_Y_START
|
|
||||||
TXA
|
|
||||||
CLC
|
|
||||||
ADC #VIEWPORT_HEIGHT
|
|
||||||
CMP #SECTION_HEIGHT
|
|
||||||
BMI .21
|
|
||||||
LDA #SECTION_HEIGHT
|
|
||||||
.21
|
|
||||||
SEC
|
|
||||||
SBC SECTION_Y_START
|
|
||||||
STA DRAW_HEIGHT
|
|
||||||
BMI .30
|
|
||||||
+move_word mapPtr, DRAW_SECTION
|
+move_word mapPtr, DRAW_SECTION
|
||||||
+move_word tilesetPtr, TILE_BASE
|
+move_word tilesetPtr, TILE_BASE
|
||||||
|
LDX #(deltaX+VIEWPORT_HORIZ_PAD)
|
||||||
|
LDY #(deltaY+VIEWPORT_VERT_PAD)
|
||||||
JSR MainDraw
|
JSR MainDraw
|
||||||
.30
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DRAW
|
DRAW LDA #0
|
||||||
|
BEQ +
|
||||||
|
CALC LDA #1
|
||||||
|
+ STA CALC_MODE
|
||||||
; For each quadrant, display relevant parts of screen
|
; For each quadrant, display relevant parts of screen
|
||||||
!if DEBUG >= 2 {
|
!if DEBUG >= 2 {
|
||||||
+prStr : !text "Draw: REL_X=",0
|
+prStr : !text "Draw: REL_X=",0
|
||||||
+prByte REL_X
|
+prByte REL_X
|
||||||
+prStr : !text "REL_Y=",0
|
+prStr : !text "REL_Y=",0
|
||||||
+prByte REL_Y
|
+prByte REL_Y
|
||||||
|
+prStr : !text "CALC_MODE=",0
|
||||||
|
+prByte CALC_MODE
|
||||||
+crout
|
+crout
|
||||||
}
|
}
|
||||||
.checkNWQuad
|
.checkNWQuad
|
||||||
@ -562,6 +531,63 @@ MainDraw
|
|||||||
COL_OFFSET = 2
|
COL_OFFSET = 2
|
||||||
ROW_OFFSET = 3
|
ROW_OFFSET = 3
|
||||||
|
|
||||||
|
STX .subX + 1 ; set up subtraction operands...
|
||||||
|
STY .subY + 1 ; ... i.e. self-modify them.
|
||||||
|
; sanity checks
|
||||||
|
LDA mapPtr+1 ; skip if no map here
|
||||||
|
BEQ .noDraw
|
||||||
|
LDA DRAW_X_START ; skip on negative start values
|
||||||
|
BMI .ok
|
||||||
|
LDA DRAW_Y_START
|
||||||
|
BMI .noDraw
|
||||||
|
STA Y_LOC ; also set up initial row counter from Y start
|
||||||
|
BPL .ok ; always taken
|
||||||
|
.noDraw RTS
|
||||||
|
.ok ; Determine X1 and X2 bounds for what is being drawn
|
||||||
|
LDA REL_X
|
||||||
|
SEC
|
||||||
|
.subX SBC #11 ; operand gets self-modified above
|
||||||
|
TAX
|
||||||
|
BPL +
|
||||||
|
LDA #0
|
||||||
|
+ STA SECTION_X_START
|
||||||
|
TXA
|
||||||
|
CLC
|
||||||
|
ADC #VIEWPORT_WIDTH
|
||||||
|
CMP #SECTION_WIDTH
|
||||||
|
BMI +
|
||||||
|
LDA #SECTION_WIDTH
|
||||||
|
+ SEC
|
||||||
|
SBC SECTION_X_START
|
||||||
|
STA DRAW_WIDTH
|
||||||
|
BMI .noDraw ; skip if draw width is negative
|
||||||
|
BEQ .noDraw ; ...or zero
|
||||||
|
; Determine Y1 and Y2 bounds for what is being drawn
|
||||||
|
LDA REL_Y
|
||||||
|
SEC
|
||||||
|
.subY SBC #11 ; operand gets self-modified above
|
||||||
|
TAX
|
||||||
|
BPL +
|
||||||
|
LDA #0
|
||||||
|
+ STA SECTION_Y_START
|
||||||
|
TXA
|
||||||
|
CLC
|
||||||
|
ADC #VIEWPORT_HEIGHT
|
||||||
|
CMP #SECTION_HEIGHT
|
||||||
|
BMI +
|
||||||
|
LDA #SECTION_HEIGHT
|
||||||
|
+ SEC
|
||||||
|
SBC SECTION_Y_START
|
||||||
|
STA DRAW_HEIGHT
|
||||||
|
STA Y_COUNTER
|
||||||
|
BMI .noDraw ; skip if draw height is negative
|
||||||
|
BEQ .noDraw ; ...or zero
|
||||||
|
|
||||||
|
LDA CALC_MODE ; check the mode
|
||||||
|
BEQ + ; zero is normal (draw)
|
||||||
|
JMP FinishCalc ; nonzero is calc mode
|
||||||
|
+ ; drawing begins
|
||||||
|
|
||||||
!if DEBUG >= 2 {
|
!if DEBUG >= 2 {
|
||||||
+prStr : !text " DR_X_ST=",0
|
+prStr : !text " DR_X_ST=",0
|
||||||
+prByte DRAW_X_START
|
+prByte DRAW_X_START
|
||||||
@ -579,26 +605,9 @@ ROW_OFFSET = 3
|
|||||||
+crout
|
+crout
|
||||||
}
|
}
|
||||||
|
|
||||||
LDA DRAW_SECTION+1 ; skip if no map section here
|
|
||||||
BNE .gotMap
|
|
||||||
.noDraw
|
|
||||||
RTS
|
|
||||||
.gotMap
|
|
||||||
LDA DRAW_HEIGHT
|
|
||||||
BEQ .noDraw
|
|
||||||
BMI .noDraw
|
|
||||||
STA Y_COUNTER
|
|
||||||
LDA DRAW_Y_START
|
|
||||||
BMI .noDraw
|
|
||||||
STA Y_LOC
|
|
||||||
.rowLoop
|
.rowLoop
|
||||||
LDA DRAW_WIDTH
|
LDA DRAW_WIDTH
|
||||||
BEQ .noDraw
|
|
||||||
BMI .noDraw
|
|
||||||
STA X_COUNTER
|
STA X_COUNTER
|
||||||
LDA DRAW_X_START
|
|
||||||
BMI .noDraw
|
|
||||||
; Identify start of map data (upper left)
|
|
||||||
; Self-modifying code: Update all the STA statements in the drawTile section
|
; Self-modifying code: Update all the STA statements in the drawTile section
|
||||||
LDA Y_LOC
|
LDA Y_LOC
|
||||||
ASL ; double because each tile is two rows high
|
ASL ; double because each tile is two rows high
|
||||||
@ -633,7 +642,7 @@ ROW_OFFSET = 3
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
;Look up data offset (old bit shifting multiplication logic was buggy)
|
;Look up map data offset (old bit shifting multiplication logic was buggy)
|
||||||
LDA DRAW_SECTION
|
LDA DRAW_SECTION
|
||||||
LDY DRAW_SECTION + 1
|
LDY DRAW_SECTION + 1
|
||||||
CLC
|
CLC
|
||||||
@ -738,8 +747,9 @@ ROW_OFFSET = 3
|
|||||||
INC Y_LOC
|
INC Y_LOC
|
||||||
INC SECTION_Y_START
|
INC SECTION_Y_START
|
||||||
JMP .rowLoop
|
JMP .rowLoop
|
||||||
; Draw player
|
|
||||||
|
|
||||||
|
FinishCalc
|
||||||
|
BRK
|
||||||
|
|
||||||
;----------------------------------------------------------------------
|
;----------------------------------------------------------------------
|
||||||
; >> INIT (reset map drawing vars, load initial map in A)
|
; >> INIT (reset map drawing vars, load initial map in A)
|
||||||
|
Loading…
Reference in New Issue
Block a user