(maybe) Last changes to Essentials tilemap hack

This commit is contained in:
Roza 2020-04-25 09:22:40 -04:00
parent af2bd24155
commit 8d26b47e90

View file

@ -1,5 +1,5 @@
# ====================================================================== # ======================================================================
# TILEMAP VERTICAL WRAPPER # SUPER TILEMAP VERTICAL WRAPPER THING
# #
# This is a little fix for Pokemon Essentials' custom tilemap code # This is a little fix for Pokemon Essentials' custom tilemap code
# that works around MKXP's GPU texture size limit that would normally # that works around MKXP's GPU texture size limit that would normally
@ -10,6 +10,12 @@
# image's right side. This basically means that you now have a limit # image's right side. This basically means that you now have a limit
# far higher than you should ever actually need. # far higher than you should ever actually need.
# #
# 1024 -> 4096
# 2048 -> 16384 (enough to get the normal limit)
# 4096 -> 65536 (enough to load pretty much any tileset)
# 8192 -> 262144
# 16384 -> 1048576 (what most people have at this point)
#
# Because of the extra math the game will have to do to find the right # Because of the extra math the game will have to do to find the right
# pixels, this will probably cause a performance hit while on these # pixels, this will probably cause a performance hit while on these
# maps which would normally be megasurfaces. # maps which would normally be megasurfaces.
@ -29,8 +35,9 @@
module VWrap module VWrap
MAX_TEX_SIZE = Bitmap.max_size MAX_TEX_SIZE = Bitmap.max_size
TILESET_WIDTH = 0x100 TILESET_WIDTH = 0x100
MAX_TEX_SIZE_BOOSTED = MAX_TEX_SIZE**2/TILESET_WIDTH
def self.clamp(val, min, max) def self.clamp(val, min, max)
val = max if val > max val = max if val > max
@ -44,7 +51,9 @@ module VWrap
if width == TILESET_WIDTH && originalbmp.mega? if width == TILESET_WIDTH && originalbmp.mega?
columns = (height / MAX_TEX_SIZE.to_f).ceil columns = (height / MAX_TEX_SIZE.to_f).ceil
return nil if columns * TILESET_WIDTH > MAX_TEX_SIZE if columns * TILESET_WIDTH > MAX_TEX_SIZE
raise "Tilemap is too long!\n\nSIZE: #{originalbmp.height}px\nHARDWARE LIMIT: #{MAX_TEX_SIZE}px\nBOOSTED LIMIT: #{MAX_TEX_SIZE_BOOSTED}px"
end
bmp = Bitmap.new(TILESET_WIDTH*columns, MAX_TEX_SIZE) bmp = Bitmap.new(TILESET_WIDTH*columns, MAX_TEX_SIZE)
remainder = height % MAX_TEX_SIZE remainder = height % MAX_TEX_SIZE
@ -111,7 +120,9 @@ if $MKXP == true
sprite.bitmap = bitmap if sprite.bitmap != bitmap sprite.bitmap = bitmap if sprite.bitmap != bitmap
end end
alias old_rlayer0 refreshLayer0
def refreshLayer0(autotiles=false) def refreshLayer0(autotiles=false)
return old_rlayer0(autotiles) if @tileset.width <= VWrap::TILESET_WIDTH
if autotiles if autotiles
return true if !shown? return true if !shown?
end end
@ -193,15 +204,7 @@ if $MKXP == true
@tileSrcWidth,@tileSrcHeight) @tileSrcWidth,@tileSrcHeight)
xpos=(x*twidth)-@oxLayer0 xpos=(x*twidth)-@oxLayer0
ypos=(y*theight)-@oyLayer0 ypos=(y*theight)-@oyLayer0
if @tileset.width <= VWrap::TILESET_WIDTH VWrap::blitVWrappedPixels(xpos,ypos, bitmap, @tileset, temprect)
if @diffsizes
bitmap.stretch_blt(Rect.new(xpos,ypos,twidth,theight),@tileset,temprect)
else
bitmap.blt(xpos,ypos,@tileset,temprect)
end
else
VWrap::blitVWrappedPixels(xpos,ypos, bitmap, @tileset, temprect)
end
else else
tilebitmap=@autotileInfo[id] tilebitmap=@autotileInfo[id]
if !tilebitmap if !tilebitmap
@ -250,11 +253,7 @@ if $MKXP == true
if id>=384 if id>=384
temprect.set(((id - 384)&7)*@tileSrcWidth,((id - 384)>>3)*@tileSrcHeight, temprect.set(((id - 384)&7)*@tileSrcWidth,((id - 384)>>3)*@tileSrcHeight,
@tileSrcWidth,@tileSrcHeight) @tileSrcWidth,@tileSrcHeight)
if @diffsizes VWrap::blitVWrappedPixels(xpos,ypos, bitmap, @tileset, temprect)
bitmap.stretch_blt(Rect.new(xpos,ypos,twidth,theight),@tileset,temprect)
else
bitmap.blt(xpos,ypos,@tileset,temprect)
end
else else
tilebitmap=@autotileInfo[id] tilebitmap=@autotileInfo[id]
if !tilebitmap if !tilebitmap
@ -311,15 +310,7 @@ if $MKXP == true
if id>=384 if id>=384
tmprect.set( ((id - 384)&7)*@tileSrcWidth,((id - 384)>>3)*@tileSrcHeight, tmprect.set( ((id - 384)&7)*@tileSrcWidth,((id - 384)>>3)*@tileSrcHeight,
@tileSrcWidth,@tileSrcHeight) @tileSrcWidth,@tileSrcHeight)
if @tileset.width <= VWrap::TILESET_WIDTH
if @diffsizes
bitmap.stretch_blt(Rect.new(xpos,ypos,twidth,theight),@tileset,tmprect)
else
bitmap.blt(xpos,ypos,@tileset,tmprect)
end
else
VWrap::blitVWrappedPixels(xpos,ypos, bitmap, @tileset, tmprect) VWrap::blitVWrappedPixels(xpos,ypos, bitmap, @tileset, tmprect)
end
else else
frames=@framecount[id/48-1] frames=@framecount[id/48-1]
if frames<=1 if frames<=1