Some little optimizations for automap display.

This commit is contained in:
Martin Haye 2018-03-27 07:37:11 -07:00
parent faa5270a0c
commit 8f3f60ede7
2 changed files with 28 additions and 21 deletions

3
.gitignore vendored
View File

@ -7,6 +7,9 @@
*.bak *.bak
*.orig *.orig
# Don't check in song files
*.mid
# Ignore utility shortcuts that build and run # Ignore utility shortcuts that build and run
g g
m m

View File

@ -247,20 +247,20 @@ end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
def scrollUp(dist)#0 def scrollUp(dist)#0
// srcLine srcOff dstLine dstOff width dir nLines // srcLine srcOff dstLine dstOff width dir nLines
scroll(MAP_TOP+dist, MAP_LEFT, MAP_TOP, MAP_LEFT, SCREEN_COLS, 1, (SCREEN_ROWS*8)-dist) scroll(MAP_TOP+dist, MAP_LEFT, MAP_TOP, MAP_LEFT, SCREEN_COLS, 1, (SCREEN_ROWS<<3)-dist)
// top, bottom, left, right // top, bottom, left, right
setWindow(MAP_TOP+SCREEN_ROWS*8-dist, MAP_TOP+SCREEN_ROWS*8, MAP_LEFT*7, (MAP_LEFT+SCREEN_COLS)*7) setWindow(MAP_TOP+(SCREEN_ROWS<<3)-dist, MAP_TOP+(SCREEN_ROWS<<3), MAP_LEFT*7, (MAP_LEFT+SCREEN_COLS)*7)
clearWindow clearWindow
end end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
def scrollDown(dist)#0 def scrollDown(dist)#0
word bottom word bottom
bottom = MAP_TOP + (SCREEN_ROWS*8) - 1 bottom = MAP_TOP + (SCREEN_ROWS<<3) - 1
// srcLine srcOff dstLine dstOff width dir nLines // srcLine srcOff dstLine dstOff width dir nLines
scroll(bottom-dist, MAP_LEFT, bottom, MAP_LEFT, SCREEN_COLS, -1, (SCREEN_ROWS*8)-dist) scroll(bottom-dist, MAP_LEFT, bottom, MAP_LEFT, SCREEN_COLS, -1, (SCREEN_ROWS<<3)-dist)
// top, bottom, left, right // top, bottom, left, right
setWindow(MAP_TOP, MAP_TOP+dist, MAP_LEFT*7, (MAP_LEFT+SCREEN_COLS)*7) setWindow(MAP_TOP, MAP_TOP+dist, MAP_LEFT*7, (MAP_LEFT+SCREEN_COLS)*7)
@ -270,23 +270,23 @@ end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
def scrollLeft(dist)#0 def scrollLeft(dist)#0
// srcLine srcOff dstLine dstOff width dir nLines // srcLine srcOff dstLine dstOff width dir nLines
scroll(MAP_TOP, MAP_LEFT+dist, MAP_TOP, MAP_LEFT, SCREEN_COLS-dist, 1, SCREEN_ROWS*8) scroll(MAP_TOP, MAP_LEFT+dist, MAP_TOP, MAP_LEFT, SCREEN_COLS-dist, 1, SCREEN_ROWS<<3)
// top, bottom, left, right // top, bottom, left, right
setWindow(MAP_TOP, MAP_TOP+SCREEN_ROWS*8, (MAP_LEFT+SCREEN_COLS-dist)*7, (MAP_LEFT+SCREEN_COLS)*7) setWindow(MAP_TOP, MAP_TOP+(SCREEN_ROWS<<3), (MAP_LEFT+SCREEN_COLS-dist)*7, (MAP_LEFT+SCREEN_COLS)*7)
clearWindow clearWindow
end end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
def scrollRight(dist)#0 def scrollRight(dist)#0
word bottom word bottom
bottom = MAP_TOP + (SCREEN_ROWS*8) - 1 bottom = MAP_TOP + (SCREEN_ROWS<<3) - 1
// srcLine srcOff dstLine dstOff width dir nLines // srcLine srcOff dstLine dstOff width dir nLines
scroll(bottom, MAP_LEFT, bottom, MAP_LEFT+dist, SCREEN_COLS-dist, -1, SCREEN_ROWS*8) scroll(bottom, MAP_LEFT, bottom, MAP_LEFT+dist, SCREEN_COLS-dist, -1, SCREEN_ROWS<<3)
// top, bottom, left, right // top, bottom, left, right
setWindow(MAP_TOP, MAP_TOP+SCREEN_ROWS*8, MAP_LEFT*7, (MAP_LEFT+dist)*7) setWindow(MAP_TOP, MAP_TOP+(SCREEN_ROWS<<3), MAP_LEFT*7, (MAP_LEFT+dist)*7)
clearWindow clearWindow
end end
@ -441,8 +441,8 @@ end
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
def displaySection3D(pSection)#0 def displaySection3D(pSection)#0
word pSmallTiles, tileTrans, mapData, rowData, pScreen word pSmallTiles, tileTrans, mapData, rowData
byte nTextures, y, rowSize byte nTextures, y, rowSize, line, lx
// Figure out where the small tiles reside (at the end of the full size tiles) // Figure out where the small tiles reside (at the end of the full size tiles)
pSmallTiles = pSection=>pm_tileset + 1 + ((^(pSection=>pm_tileset)) << 5) pSmallTiles = pSection=>pm_tileset + 1 + ((^(pSection=>pm_tileset)) << 5)
@ -456,13 +456,17 @@ def displaySection3D(pSection)#0
loop loop
mapData = tileTrans + (nTextures*3) + 2 // *2 for tilenum+texnum, *1 for texture flags, 2 for zero-terms mapData = tileTrans + (nTextures*3) + 2 // *2 for tilenum+texnum, *1 for texture flags, 2 for zero-terms
// The +1's below are to skip over the sentinel row and column that 3D maps have
rowData = mapData + ((pSection->bm_oy + 1) * rowSize) + pSection->bm_ox + 1
// The << 3 below is because each row is 8 screen lines
line = (pSection->bm_sy << 3) + MAP_TOP
lx = MAP_LEFT + pSection->bm_sx
// Display each visible row // Display each visible row
for y = 1 to pSection->bm_ch // offset is 1 to skip over sentinel row for y = 1 to pSection->bm_ch // offset is 1 to skip over sentinel row
// The +1's below are to skip over the sentinel row and column that 3D maps have displayRow3D(getScreenLine(line) + lx, rowData, tileTrans, pSmallTiles, pSection->bm_cw)
rowData = mapData + ((y + pSection->bm_oy) * rowSize) + pSection->bm_ox + 1 rowData = rowData + rowSize
// The << 3 below is because each row is 8 screen lines line = line + 8
pScreen = getScreenLine(((y + pSection->bm_sy) << 3) + (MAP_TOP-8)) + MAP_LEFT + pSection->bm_sx
displayRow3D(pScreen, rowData, tileTrans, pSmallTiles, pSection->bm_cw)
next next
end end
@ -610,7 +614,7 @@ def _automap_show()#1
if screenY1-8 > 0 if screenY1-8 > 0
screenY0 = screenY0 - 8 // north screenY0 = screenY0 - 8 // north
screenY1 = screenY1 - 8 screenY1 = screenY1 - 8
scrollDown(8*8) scrollDown(64)
fin fin
break break
is 'D'; is 'L'; is 21 is 'D'; is 'L'; is 21
@ -624,7 +628,7 @@ def _automap_show()#1
if screenY0+8 < totalMapHeight-1 if screenY0+8 < totalMapHeight-1
screenY0 = screenY0 + 8 // south screenY0 = screenY0 + 8 // south
screenY1 = screenY1 + 8 screenY1 = screenY1 + 8
scrollUp(8*8) scrollUp(64)
fin fin
break break
is 'A'; is 'J'; is 8 is 'A'; is 'J'; is 8