diff --git a/Data/Map060.rxdata b/Data/Map060.rxdata index 780063924..21bfaf28d 100644 Binary files a/Data/Map060.rxdata and b/Data/Map060.rxdata differ diff --git a/Data/Map755.rxdata b/Data/Map755.rxdata index 68c1a80a5..8b9a91b30 100644 Binary files a/Data/Map755.rxdata and b/Data/Map755.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index 4573e996a..cefb0fee7 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts/004_Game classes/004_Game_Map.rb b/Data/Scripts/004_Game classes/004_Game_Map.rb index 8f308123e..7e483653e 100644 --- a/Data/Scripts/004_Game classes/004_Game_Map.rb +++ b/Data/Scripts/004_Game classes/004_Game_Map.rb @@ -36,6 +36,7 @@ class Game_Map attr_reader :display_x # display x-coordinate * 128 attr_reader :display_y # display y-coordinate * 128 attr_accessor :need_refresh # refresh request flag + attr_accessor :scroll_direction TILE_WIDTH = 32 TILE_HEIGHT = 32 diff --git a/Data/Scripts/004_Game classes/009_Game_Player.rb b/Data/Scripts/004_Game classes/009_Game_Player.rb index cc2dfdbd0..e26ff6dda 100644 --- a/Data/Scripts/004_Game classes/009_Game_Player.rb +++ b/Data/Scripts/004_Game classes/009_Game_Player.rb @@ -178,6 +178,12 @@ class Game_Player < Game_Character self.map.display_y = y * Game_Map::REAL_RES_Y - SCREEN_CENTER_Y end + + def isCentered() + x_centered = self.map.display_x == x * Game_Map::REAL_RES_X - SCREEN_CENTER_X + y_centered = self.map.display_y == y * Game_Map::REAL_RES_Y - SCREEN_CENTER_Y + return x_centered && y_centered + end #----------------------------------------------------------------------------- # * Move to Designated Position # x : x-coordinate diff --git a/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb b/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb index ec38ea994..7c8f27827 100644 --- a/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb +++ b/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb @@ -2,6 +2,7 @@ class Sprite_Wearable < RPG::Sprite attr_accessor :filename attr_accessor :action attr_accessor :sprite + attr_accessor :must_adjust_scroll def initialize(player_sprite, filename, action, viewport) @player_sprite = player_sprite @@ -16,6 +17,8 @@ class Sprite_Wearable < RPG::Sprite @frameHeight = 80 #@sprite.height / 4 @sprite.z = 0 @relative_z=0 #relative to player + @map_scrolled=false #true if the map has scrolled, false if centered on the player + @must_adjust_scroll = false #todo temp fix for weird pokemart scrolling glitch echoln(_INTL("init had at z = {1}, player sprite at {2}",@sprite.z,@player_sprite.z)) #Unused position offset @@ -28,6 +31,31 @@ class Sprite_Wearable < RPG::Sprite @sprite.y += offsets_array[current_frame][1] end + def adjustPositionForScreenScrolling + return if !$game_map.scrolling? && !(@map_scrolled && @must_adjust_scroll) + if $game_player.isCentered() + @map_scrolled=false + return + end + @map_scrolled=true if @must_adjust_scroll + offset_x = 0 + offset_y = 0 + @sprite.z+=10 + case $game_map.scroll_direction + when DIRECTION_RIGHT + offset_x=-8 + when DIRECTION_LEFT + offset_x=8 + when DIRECTION_UP + offset_y=16 + when DIRECTION_DOWN + offset_y=-16 + end + @sprite.x+=offset_x + @sprite.y+=offset_y + end + + def set_sprite_position(action, direction, current_frame) @sprite.x = @player_sprite.x - @player_sprite.ox @sprite.y = @player_sprite.y - @player_sprite.oy @@ -86,6 +114,8 @@ class Sprite_Wearable < RPG::Sprite @sprite.x = @player_sprite.x - @player_sprite.ox @sprite.y = @player_sprite.y - @player_sprite.oy end + adjustPositionForScreenScrolling() + @sprite.y -= 2 if current_frame % 2 == 1 end diff --git a/Data/Scripts/005_Sprites/016_Sprite_Player.rb b/Data/Scripts/005_Sprites/016_Sprite_Player.rb index 8e8756452..914090b04 100644 --- a/Data/Scripts/005_Sprites/016_Sprite_Player.rb +++ b/Data/Scripts/005_Sprites/016_Sprite_Player.rb @@ -17,6 +17,11 @@ class Sprite_Player < Sprite_Character getClothedPlayerSprite(true) end + def toggleWearableScrollAdjustments(value) + @hair.must_adjust_scroll = value + @hat.must_adjust_scroll = value + end + def updateCharacterBitmap skinTone = $Trainer.skin_tone ? $Trainer.skin_tone : 0 baseBitmapFilename = getBaseOverworldSpriteFilename(@character_name, skinTone) @@ -78,9 +83,7 @@ class Sprite_Player < Sprite_Character return baseBitmap end - def positionHair(baseBitmap, hairBirmap, offset) - baseBitmap.blt(offset[0], offset[1], hairBirmap, hairBirmap.rect) - end + def update diff --git a/Data/Scripts/016_UI/020_UI_PokeMart.rb b/Data/Scripts/016_UI/020_UI_PokeMart.rb index 48a5efc00..22bd27526 100644 --- a/Data/Scripts/016_UI/020_UI_PokeMart.rb +++ b/Data/Scripts/016_UI/020_UI_PokeMart.rb @@ -236,6 +236,7 @@ class PokemonMart_Scene def pbStartBuyOrSellScene(buying, stock, adapter) # Scroll right before showing screen + $scene.spritesetGlobal.playersprite.toggleWearableScrollAdjustments(true) # todo temp scroll_map() @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) @viewport.z = 99999 @@ -277,6 +278,8 @@ class PokemonMart_Scene @buying = buying pbRefresh Graphics.frame_reset + $scene.spritesetGlobal.playersprite.toggleWearableScrollAdjustments(false) # todo temp + end def pbStartBuyScene(stock, adapter) diff --git a/Data/System.rxdata b/Data/System.rxdata index 30ed9f98d..f22e86413 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ