mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
Some improvements to map/event rendering when changing display tile width/height in map renderer
This commit is contained in:
@@ -67,6 +67,8 @@ class Sprite_Character < RPG::Sprite
|
|||||||
@reflection = Sprite_Reflection.new(self, character, viewport)
|
@reflection = Sprite_Reflection.new(self, character, viewport)
|
||||||
end
|
end
|
||||||
@surfbase = Sprite_SurfBase.new(self, character, viewport) if character == $game_player
|
@surfbase = Sprite_SurfBase.new(self, character, viewport) if character == $game_player
|
||||||
|
self.zoom_x = TilemapRenderer::ZOOM_X
|
||||||
|
self.zoom_y = TilemapRenderer::ZOOM_Y
|
||||||
update
|
update
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -153,8 +155,12 @@ class Sprite_Character < RPG::Sprite
|
|||||||
pbDayNightTint(self)
|
pbDayNightTint(self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.x = @character.screen_x
|
this_x = @character.screen_x
|
||||||
self.y = @character.screen_y
|
this_x = ((this_x - (Graphics.width / 2)) * TilemapRenderer::ZOOM_X) + (Graphics.width / 2) if TilemapRenderer::ZOOM_X != 1
|
||||||
|
self.x = this_x
|
||||||
|
this_y = @character.screen_y
|
||||||
|
this_y = ((this_y - (Graphics.height / 2)) * TilemapRenderer::ZOOM_Y) + (Graphics.height / 2) if TilemapRenderer::ZOOM_Y != 1
|
||||||
|
self.y = this_y
|
||||||
self.z = @character.screen_z(@ch)
|
self.z = @character.screen_z(@ch)
|
||||||
self.opacity = @character.opacity
|
self.opacity = @character.opacity
|
||||||
self.blend_type = @character.blend_type
|
self.blend_type = @character.blend_type
|
||||||
|
|||||||
@@ -48,15 +48,15 @@ class Sprite_Reflection
|
|||||||
# Just-in-time creation of sprite
|
# Just-in-time creation of sprite
|
||||||
@sprite = Sprite.new(@viewport) if !@sprite
|
@sprite = Sprite.new(@viewport) if !@sprite
|
||||||
if @sprite
|
if @sprite
|
||||||
x = @rsprite.x - @rsprite.ox
|
x = @rsprite.x - @rsprite.ox * TilemapRenderer::ZOOM_X
|
||||||
y = @rsprite.y - @rsprite.oy
|
y = @rsprite.y - @rsprite.oy * TilemapRenderer::ZOOM_Y
|
||||||
y -= 32 if @rsprite.character.character_name[/offset/i]
|
y -= Game_Map::TILE_HEIGHT * TilemapRenderer::ZOOM_Y if @rsprite.character.character_name[/offset/i]
|
||||||
@height = $PokemonGlobal.bridge if !@fixedheight
|
@height = $PokemonGlobal.bridge if !@fixedheight
|
||||||
y += @height * 16
|
y += @height * TilemapRenderer::ZOOM_Y * Game_Map::TILE_HEIGHT / 2
|
||||||
width = @rsprite.src_rect.width
|
width = @rsprite.src_rect.width
|
||||||
height = @rsprite.src_rect.height
|
height = @rsprite.src_rect.height
|
||||||
@sprite.x = x + (width / 2)
|
@sprite.x = x + (width / 2) * TilemapRenderer::ZOOM_X
|
||||||
@sprite.y = y + height + (height / 2)
|
@sprite.y = y + (height + (height / 2)) * TilemapRenderer::ZOOM_Y
|
||||||
@sprite.ox = width / 2
|
@sprite.ox = width / 2
|
||||||
@sprite.oy = (height / 2) - 2 # Hard-coded 2 pixel shift up
|
@sprite.oy = (height / 2) - 2 # Hard-coded 2 pixel shift up
|
||||||
@sprite.oy -= @rsprite.character.bob_height * 2
|
@sprite.oy -= @rsprite.character.bob_height * 2
|
||||||
|
|||||||
@@ -63,8 +63,14 @@ class Sprite_SurfBase
|
|||||||
sy = ((@event.direction - 2) / 2) * ch
|
sy = ((@event.direction - 2) / 2) * ch
|
||||||
@sprite.src_rect.set(sx, sy, cw, ch)
|
@sprite.src_rect.set(sx, sy, cw, ch)
|
||||||
if $game_temp.surf_base_coords
|
if $game_temp.surf_base_coords
|
||||||
@sprite.x = ((($game_temp.surf_base_coords[0] * Game_Map::REAL_RES_X) - @event.map.display_x + 3) / 4) + (Game_Map::TILE_WIDTH / 2)
|
spr_x = ((($game_temp.surf_base_coords[0] * Game_Map::REAL_RES_X) - @event.map.display_x).to_f / Game_Map::X_SUBPIXELS).round
|
||||||
@sprite.y = ((($game_temp.surf_base_coords[1] * Game_Map::REAL_RES_Y) - @event.map.display_y + 3) / 4) + (Game_Map::TILE_HEIGHT / 2) + 16
|
spr_x += (Game_Map::TILE_WIDTH / 2)
|
||||||
|
spr_x = ((spr_x - (Graphics.width / 2)) * TilemapRenderer::ZOOM_X) + (Graphics.width / 2) if TilemapRenderer::ZOOM_X != 1
|
||||||
|
@sprite.x = spr_x
|
||||||
|
spr_y = ((($game_temp.surf_base_coords[1] * Game_Map::REAL_RES_Y) - @event.map.display_y).to_f / Game_Map::Y_SUBPIXELS).round
|
||||||
|
spr_y += (Game_Map::TILE_HEIGHT / 2) + 16
|
||||||
|
spr_y = ((spr_y - (Graphics.height / 2)) * TilemapRenderer::ZOOM_Y) + (Graphics.height / 2) if TilemapRenderer::ZOOM_Y != 1
|
||||||
|
@sprite.y = spr_y
|
||||||
else
|
else
|
||||||
@sprite.x = @rsprite.x
|
@sprite.x = @rsprite.x
|
||||||
@sprite.y = @rsprite.y
|
@sprite.y = @rsprite.y
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ class TilemapRenderer
|
|||||||
DISPLAY_TILE_HEIGHT = Game_Map::TILE_HEIGHT rescue 32
|
DISPLAY_TILE_HEIGHT = Game_Map::TILE_HEIGHT rescue 32
|
||||||
SOURCE_TILE_WIDTH = 32
|
SOURCE_TILE_WIDTH = 32
|
||||||
SOURCE_TILE_HEIGHT = 32
|
SOURCE_TILE_HEIGHT = 32
|
||||||
|
ZOOM_X = DISPLAY_TILE_WIDTH / SOURCE_TILE_WIDTH
|
||||||
|
ZOOM_Y = DISPLAY_TILE_HEIGHT / SOURCE_TILE_HEIGHT
|
||||||
TILESET_TILES_PER_ROW = 8
|
TILESET_TILES_PER_ROW = 8
|
||||||
AUTOTILES_COUNT = 8 # Counting the blank tile as an autotile
|
AUTOTILES_COUNT = 8 # Counting the blank tile as an autotile
|
||||||
TILES_PER_AUTOTILE = 48
|
TILES_PER_AUTOTILE = 48
|
||||||
@@ -245,7 +247,9 @@ class TilemapRenderer
|
|||||||
|
|
||||||
def set_bitmap(filename, tile_id, autotile, animated, priority, bitmap)
|
def set_bitmap(filename, tile_id, autotile, animated, priority, bitmap)
|
||||||
self.bitmap = bitmap
|
self.bitmap = bitmap
|
||||||
self.src_rect = Rect.new(0, 0, DISPLAY_TILE_WIDTH, DISPLAY_TILE_HEIGHT)
|
self.src_rect = Rect.new(0, 0, SOURCE_TILE_WIDTH, SOURCE_TILE_HEIGHT)
|
||||||
|
self.zoom_x = ZOOM_X
|
||||||
|
self.zoom_y = ZOOM_Y
|
||||||
@filename = filename
|
@filename = filename
|
||||||
@tile_id = tile_id
|
@tile_id = tile_id
|
||||||
@is_autotile = autotile
|
@is_autotile = autotile
|
||||||
@@ -420,7 +424,7 @@ class TilemapRenderer
|
|||||||
tile.z = 0
|
tile.z = 0
|
||||||
else
|
else
|
||||||
priority = tile.priority
|
priority = tile.priority
|
||||||
tile.z = (priority == 0) ? 0 : (y * DISPLAY_TILE_HEIGHT) + (priority * 32) + 32
|
tile.z = (priority == 0) ? 0 : (y * SOURCE_TILE_HEIGHT) + (priority * SOURCE_TILE_HEIGHT) + SOURCE_TILE_HEIGHT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -453,8 +457,8 @@ class TilemapRenderer
|
|||||||
# Check for tile movement
|
# Check for tile movement
|
||||||
current_map_display_x = ($game_map.display_x.to_f / Game_Map::X_SUBPIXELS).round
|
current_map_display_x = ($game_map.display_x.to_f / Game_Map::X_SUBPIXELS).round
|
||||||
current_map_display_y = ($game_map.display_y.to_f / Game_Map::Y_SUBPIXELS).round
|
current_map_display_y = ($game_map.display_y.to_f / Game_Map::Y_SUBPIXELS).round
|
||||||
new_tile_offset_x = current_map_display_x / DISPLAY_TILE_WIDTH
|
new_tile_offset_x = (current_map_display_x / SOURCE_TILE_WIDTH) * ZOOM_X
|
||||||
new_tile_offset_y = current_map_display_y / DISPLAY_TILE_HEIGHT
|
new_tile_offset_y = (current_map_display_y / SOURCE_TILE_HEIGHT) * ZOOM_Y
|
||||||
if new_tile_offset_x != @tile_offset_x
|
if new_tile_offset_x != @tile_offset_x
|
||||||
if new_tile_offset_x > @tile_offset_x
|
if new_tile_offset_x > @tile_offset_x
|
||||||
# Take tile stacks off the right and insert them at the beginning (left)
|
# Take tile stacks off the right and insert them at the beginning (left)
|
||||||
@@ -503,8 +507,8 @@ class TilemapRenderer
|
|||||||
@tile_offset_y = new_tile_offset_y
|
@tile_offset_y = new_tile_offset_y
|
||||||
end
|
end
|
||||||
# Check for pixel movement
|
# Check for pixel movement
|
||||||
new_pixel_offset_x = current_map_display_x % SOURCE_TILE_WIDTH
|
new_pixel_offset_x = (current_map_display_x % SOURCE_TILE_WIDTH) * ZOOM_X
|
||||||
new_pixel_offset_y = current_map_display_y % SOURCE_TILE_HEIGHT
|
new_pixel_offset_y = (current_map_display_y % SOURCE_TILE_HEIGHT) * ZOOM_Y
|
||||||
if new_pixel_offset_x != @pixel_offset_x
|
if new_pixel_offset_x != @pixel_offset_x
|
||||||
@screen_moved = true
|
@screen_moved = true
|
||||||
@pixel_offset_x = new_pixel_offset_x
|
@pixel_offset_x = new_pixel_offset_x
|
||||||
@@ -564,7 +568,9 @@ class TilemapRenderer
|
|||||||
$map_factory.maps.each do |map|
|
$map_factory.maps.each do |map|
|
||||||
# Calculate x/y ranges of tile sprites that represent them
|
# Calculate x/y ranges of tile sprites that represent them
|
||||||
map_display_x = (map.display_x.to_f / Game_Map::X_SUBPIXELS).round
|
map_display_x = (map.display_x.to_f / Game_Map::X_SUBPIXELS).round
|
||||||
|
map_display_x = ((map_display_x + (Graphics.width / 2)) * ZOOM_X) - (Graphics.width / 2) if ZOOM_X != 1
|
||||||
map_display_y = (map.display_y.to_f / Game_Map::Y_SUBPIXELS).round
|
map_display_y = (map.display_y.to_f / Game_Map::Y_SUBPIXELS).round
|
||||||
|
map_display_y = ((map_display_y + (Graphics.height / 2)) * ZOOM_Y) - (Graphics.height / 2) if ZOOM_Y != 1
|
||||||
map_display_x_tile = map_display_x / DISPLAY_TILE_WIDTH
|
map_display_x_tile = map_display_x / DISPLAY_TILE_WIDTH
|
||||||
map_display_y_tile = map_display_y / DISPLAY_TILE_HEIGHT
|
map_display_y_tile = map_display_y / DISPLAY_TILE_HEIGHT
|
||||||
start_x = [-map_display_x_tile, 0].max
|
start_x = [-map_display_x_tile, 0].max
|
||||||
|
|||||||
Reference in New Issue
Block a user