mirror of
https://github.com/badvision/lawless-legends.git
synced 2025-08-15 21:27:22 +00:00
Added texture control, so we can swap out textures in 3D mode to make room for a portrait.
This commit is contained in:
@@ -60,7 +60,7 @@ byte isPlural = FALSE
|
|||||||
|
|
||||||
word skyNum = 9
|
word skyNum = 9
|
||||||
word groundNum = 10
|
word groundNum = 10
|
||||||
byte portraitNum = 1
|
byte portraitNum = 0
|
||||||
|
|
||||||
word triggerOriginX, triggerOriginY
|
word triggerOriginX, triggerOriginY
|
||||||
word triggerTbl
|
word triggerTbl
|
||||||
@@ -181,6 +181,10 @@ asm render // no params
|
|||||||
+asmPlasm 0
|
+asmPlasm 0
|
||||||
jmp $6018
|
jmp $6018
|
||||||
end
|
end
|
||||||
|
asm texControl // params: load (1=load, 0=unload)
|
||||||
|
+asmPlasm 1
|
||||||
|
jmp $601B
|
||||||
|
end
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
asm setAuxCopy
|
asm setAuxCopy
|
||||||
@@ -1267,6 +1271,7 @@ def clearPortrait()
|
|||||||
if curPortrait
|
if curPortrait
|
||||||
auxMmgr(FREE_MEMORY, curPortrait)
|
auxMmgr(FREE_MEMORY, curPortrait)
|
||||||
curPortrait = 0
|
curPortrait = 0
|
||||||
|
texControl(1) // 1=load
|
||||||
needRender = TRUE
|
needRender = TRUE
|
||||||
fin
|
fin
|
||||||
end
|
end
|
||||||
@@ -1666,6 +1671,9 @@ def _setPortrait(portraitNum)
|
|||||||
// We're going to switch windows. Save the cursor pos in the text window.
|
// We're going to switch windows. Save the cursor pos in the text window.
|
||||||
saveCursor()
|
saveCursor()
|
||||||
|
|
||||||
|
// Make room by unloading the textures
|
||||||
|
texControl(0)
|
||||||
|
|
||||||
// Now clear out the map area
|
// Now clear out the map area
|
||||||
setMapWindow()
|
setMapWindow()
|
||||||
clearWindow()
|
clearWindow()
|
||||||
@@ -1686,20 +1694,25 @@ def _setPortrait(portraitNum)
|
|||||||
|
|
||||||
// And show the first frame
|
// And show the first frame
|
||||||
showAnimFrame()
|
showAnimFrame()
|
||||||
end
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
// Do not render over the portrait
|
||||||
// Clear the displayed portrait drawing
|
needRender = FALSE
|
||||||
def clrPortrait()
|
|
||||||
doRender()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Test out portrait drawing
|
// Test out portrait drawing
|
||||||
def testPortrait()
|
def nextPortrait()
|
||||||
setPortrait(portraitNum)
|
|
||||||
portraitNum = portraitNum + 1
|
portraitNum = portraitNum + 1
|
||||||
needRender = FALSE
|
setPortrait(portraitNum)
|
||||||
|
end
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Test out portrait drawing
|
||||||
|
def prevPortrait()
|
||||||
|
if portraitNum > 1
|
||||||
|
portraitNum = portraitNum - 1
|
||||||
|
fin
|
||||||
|
setPortrait(portraitNum)
|
||||||
end
|
end
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -1883,7 +1896,8 @@ def initCmds()
|
|||||||
// Commands common to both 2D and 3D
|
// Commands common to both 2D and 3D
|
||||||
initCmd('T', @kbdTeleport)
|
initCmd('T', @kbdTeleport)
|
||||||
initCmd('P', @showPos)
|
initCmd('P', @showPos)
|
||||||
initCmd('/', @testPortrait)
|
initCmd('/', @nextPortrait)
|
||||||
|
initCmd('?', @prevPortrait)
|
||||||
initCmd('!', @testCombat)
|
initCmd('!', @testCombat)
|
||||||
initCmd('1', @showPlayer1)
|
initCmd('1', @showPlayer1)
|
||||||
initCmd('2', @showPlayer2)
|
initCmd('2', @showPlayer2)
|
||||||
@@ -2011,7 +2025,7 @@ def setCallbacks()
|
|||||||
|
|
||||||
// $31E
|
// $31E
|
||||||
callbacks.30 = $4c
|
callbacks.30 = $4c
|
||||||
callbacks:31 = @clrPortrait
|
callbacks:31 = @clearPortrait
|
||||||
|
|
||||||
// $321
|
// $321
|
||||||
callbacks.33 = $4c
|
callbacks.33 = $4c
|
||||||
|
@@ -29,6 +29,7 @@ start:
|
|||||||
jmp pl_advance ; params: none; return: 0 if same, 1 if new map tile, 2 if new and scripted
|
jmp pl_advance ; params: none; return: 0 if same, 1 if new map tile, 2 if new and scripted
|
||||||
jmp pl_setColor ; params: slot (0=sky/1=ground), color (0-15); return: nothing
|
jmp pl_setColor ; params: slot (0=sky/1=ground), color (0-15); return: nothing
|
||||||
jmp pl_render ; params: none
|
jmp pl_render ; params: none
|
||||||
|
jmp pl_texControl ; params: 0=unload textures, 1=load textures
|
||||||
|
|
||||||
; Conditional assembly flags
|
; Conditional assembly flags
|
||||||
DOUBLE_BUFFER = 1 ; whether to double-buffer
|
DOUBLE_BUFFER = 1 ; whether to double-buffer
|
||||||
@@ -72,6 +73,7 @@ mapNum: !byte 1
|
|||||||
nMapSprites: !byte 0 ; number of sprite entries on map to fix up
|
nMapSprites: !byte 0 ; number of sprite entries on map to fix up
|
||||||
nextLink: !byte 0 ; next link to allocate
|
nextLink: !byte 0 ; next link to allocate
|
||||||
plasmaStk: !byte 0
|
plasmaStk: !byte 0
|
||||||
|
nTextures: !byte 0
|
||||||
|
|
||||||
skyColorEven: !byte $20
|
skyColorEven: !byte $20
|
||||||
skyColorOdd: !byte $22
|
skyColorOdd: !byte $22
|
||||||
@@ -1562,10 +1564,12 @@ getTileFlags: !zone
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
; Parse map header, and load the textures into aux mem. Also loads the script
|
; Parse map header, and load the textures into aux mem. Also, loads the script
|
||||||
; module and inits it.
|
; module, and if A-reg is nonzero, inits it.
|
||||||
loadTextures: !zone
|
loadTextures: !zone
|
||||||
!if DEBUG { +prStr : !text "Loading textures.",0 }
|
!if DEBUG { +prStr : !text "Loading textures.",0 }
|
||||||
|
; Save parameter (non-zero: init scripts)
|
||||||
|
pha
|
||||||
; Scan the map header
|
; Scan the map header
|
||||||
lda mapHeader
|
lda mapHeader
|
||||||
sta .get+1
|
sta .get+1
|
||||||
@@ -1603,6 +1607,8 @@ loadTextures: !zone
|
|||||||
+ stx txNum
|
+ stx txNum
|
||||||
jmp .lup
|
jmp .lup
|
||||||
.done: ; end of texture numbers is the list of tile flags
|
.done: ; end of texture numbers is the list of tile flags
|
||||||
|
lda txNum
|
||||||
|
sta nTextures
|
||||||
lda .get+1
|
lda .get+1
|
||||||
sta getTileFlags+2
|
sta getTileFlags+2
|
||||||
lda .get+2
|
lda .get+2
|
||||||
@@ -1621,17 +1627,51 @@ loadTextures: !zone
|
|||||||
ldx #0
|
ldx #0
|
||||||
jsr mainLoader
|
jsr mainLoader
|
||||||
; finally, init the scripts.
|
; finally, init the scripts.
|
||||||
|
pla
|
||||||
|
beq .fin
|
||||||
!if DEBUG { +prStr : !text "Calling script init ",0 : +prWord .scInit+1 : +crout }
|
!if DEBUG { +prStr : !text "Calling script init ",0 : +prWord .scInit+1 : +crout }
|
||||||
ldx plasmaStk
|
ldx plasmaStk
|
||||||
.scInit jsr $1111 ; self-modified earlier
|
.scInit jsr $1111 ; self-modified earlier
|
||||||
!if DEBUG { +prStr : !text "Back from script init. ",0 }
|
!if DEBUG { +prStr : !text "Back from script init. ",0 }
|
||||||
rts
|
.fin rts
|
||||||
.get: lda $1111
|
.get: lda $1111
|
||||||
inc .get+1
|
inc .get+1
|
||||||
bne +
|
bne +
|
||||||
inc .get+2
|
inc .get+2
|
||||||
+ rts
|
+ rts
|
||||||
|
|
||||||
|
;-------------------------------------------------------------------------------
|
||||||
|
; Plasma interface to texture control: 1 to load textures, 0 to unload
|
||||||
|
pl_texControl: !zone {
|
||||||
|
cmp #0
|
||||||
|
beq .unload
|
||||||
|
lda #0 ; don't re-init scripts
|
||||||
|
jmp loadTextures
|
||||||
|
.unload ldx #0
|
||||||
|
- txa
|
||||||
|
pha
|
||||||
|
ldy texAddrHi,x
|
||||||
|
lda texAddrLo,x
|
||||||
|
|
||||||
|
+prStr : !text "tex ",0
|
||||||
|
+prX
|
||||||
|
+prYA
|
||||||
|
+crout
|
||||||
|
|
||||||
|
tax
|
||||||
|
lda #FREE_MEMORY
|
||||||
|
jsr auxLoader
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
lda #0
|
||||||
|
sta texAddrLo,x
|
||||||
|
sta texAddrHi,x
|
||||||
|
inx
|
||||||
|
cpx nTextures
|
||||||
|
bne -
|
||||||
|
rts
|
||||||
|
}
|
||||||
|
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
; Set up front and back buffers, go to hires mode, and clear for first blit.
|
; Set up front and back buffers, go to hires mode, and clear for first blit.
|
||||||
graphInit: !zone
|
graphInit: !zone
|
||||||
@@ -2033,6 +2073,7 @@ pl_initMap: !zone
|
|||||||
ldy #>(tableEnd-tableStart)
|
ldy #>(tableEnd-tableStart)
|
||||||
jsr mainLoader
|
jsr mainLoader
|
||||||
; Proceed with loading
|
; Proceed with loading
|
||||||
|
lda #1 ; non-zero to init scripts also
|
||||||
jsr loadTextures
|
jsr loadTextures
|
||||||
jsr copyScreen
|
jsr copyScreen
|
||||||
; Build all the unrolls and tables
|
; Build all the unrolls and tables
|
||||||
|
@@ -112,7 +112,8 @@ next_zp = $AB
|
|||||||
JMP pl_setDir ; params: dir (0-15); return: nothing
|
JMP pl_setDir ; params: dir (0-15); return: nothing
|
||||||
JMP pl_advance ; params: none; return: 0 if same, 1 if new map tile, 2 if new and scripted
|
JMP pl_advance ; params: none; return: 0 if same, 1 if new map tile, 2 if new and scripted
|
||||||
JMP pl_setColor ; params: slot (0=sky/1=ground), color (0-15); return: nothing
|
JMP pl_setColor ; params: slot (0=sky/1=ground), color (0-15); return: nothing
|
||||||
jmp pl_render ; params: none
|
JMP pl_render ; params: none
|
||||||
|
JMP pl_texControl ; params: 1=load, 0=unload
|
||||||
|
|
||||||
;----------------------------------------------------------------------
|
;----------------------------------------------------------------------
|
||||||
; >> START LOADING MAP SECTIONS
|
; >> START LOADING MAP SECTIONS
|
||||||
@@ -1221,6 +1222,12 @@ pl_setDir:
|
|||||||
STA AVATAR_DIR
|
STA AVATAR_DIR
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------
|
||||||
|
; >> pl_texControl
|
||||||
|
; No-op, because in 2D there aren't textures
|
||||||
|
pl_texControl:
|
||||||
|
rts
|
||||||
|
|
||||||
;----------------------------------------------------------------------
|
;----------------------------------------------------------------------
|
||||||
INNER_ADVANCE: !zone {
|
INNER_ADVANCE: !zone {
|
||||||
LDA AVATAR_DIR
|
LDA AVATAR_DIR
|
||||||
|
Reference in New Issue
Block a user