Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Custom Resolution Script

Custom Resolution Script
v0.82


Another script of mine... some screens of other people's games, ideas, and of course, the work on my Lufia graphic set got me to this...


Introduction

Most of us know that RMXP's default resolution is 640x480, and we all know that this doesn't fit every game... Some games need lesser resolution, some games need more than the little default space. Regardless what's the case, Selwyn's script does it, right? Well, not quite... with Selwyn's nice script, you can change your game's aspects, but not the tile size. It's also a pain in the ass to adjust the character's movement settings, and of course, getting all this set up well together is impossible for non-experienced scripters.
My intention with this script was to provide you guys with a plug-and-play tool to change the game's resolution, and the outcome is a very powerful script in my honest opinion... along with the screen resolution and the tileset size, it changes the character's movement speed, the step distance to keep the movement aspects, and a few more things.


Features
  • In theory any resolution you want (only hardware-limited)
  • Easy Setup - You name the resolution, the script does anything else for you
  • Changes the tile size relative to the resolution
  • Changes the character movement speed and step distance relative to the resolution
  • The Player's x and y coordinates are adjusted to the resolution

Screenshots

http://img80.imageshack.us/img80/5390/resolution1wg0.th.png[/img] http://img106.imageshack.us/img106/9762/reslufiaho9.th.png[/img]


Demo

Custom Resolution Script Demo v0.82
Hosted on Box.net, 0.46MB


Script and Resources

Since SephirothSpawns Tilemap class rewrite is hard to find (I wasn't able to locate it in these forums) and it's SDK-based, I'll provide you with a non-SDK version. Compatibility to the SDK equivalent is untested, but aside from removing the SDK tags and adjusting the script's look to my common style, I didn't do anything to that script, so it should work... in theory.
Note that you can grab the original script from SephirothSpawn's Script Editor, 'System & Required Scripts' category.

Code:
#==============================================================================
# Tilemap Class
#------------------------------------------------------------------------------
# Script by SephirothSpawn
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  attr_reader   :map
  attr_accessor :tilemap_tone
  attr_accessor :tilemap_plane
  attr_accessor :tilemap_zoom_x
  attr_accessor :tilemap_zoom_y
  attr_accessor :tilemap_tile_width
  attr_accessor :tilemap_tile_height
  #--------------------------------------------------------------------------
  alias seph_tilemap_gmap_init initialize
  def initialize
    seph_tilemap_gmap_init
    @tilemap_tone        = nil
    @tilemap_plane       = false
    @tilemap_zoom_x      = 1.0
    @tilemap_zoom_y      = 1.0
    @tilemap_tile_width  = 32
    @tilemap_tile_height = 32
  end
  #--------------------------------------------------------------------------
end


class Tilemap
  #--------------------------------------------------------------------------
  Animated_Autotiles_Frames = 15
  #--------------------------------------------------------------------------
  Autotiles = [
    [ [27, 28, 33, 34], [ 5, 28, 33, 34], [27,  6, 33, 34], [ 5,  6, 33, 34],
      [27, 28, 33, 12], [ 5, 28, 33, 12], [27,  6, 33, 12], [ 5,  6, 33, 12] ],
    [ [27, 28, 11, 34], [ 5, 28, 11, 34], [27,  6, 11, 34], [ 5,  6, 11, 34],
      [27, 28, 11, 12], [ 5, 28, 11, 12], [27,  6, 11, 12], [ 5,  6, 11, 12] ],
    [ [25, 26, 31, 32], [25,  6, 31, 32], [25, 26, 31, 12], [25,  6, 31, 12],
      [15, 16, 21, 22], [15, 16, 21, 12], [15, 16, 11, 22], [15, 16, 11, 12] ],
    [ [29, 30, 35, 36], [29, 30, 11, 36], [ 5, 30, 35, 36], [ 5, 30, 11, 36],
      [39, 40, 45, 46], [ 5, 40, 45, 46], [39,  6, 45, 46], [ 5,  6, 45, 46] ],
    [ [25, 30, 31, 36], [15, 16, 45, 46], [13, 14, 19, 20], [13, 14, 19, 12],
      [17, 18, 23, 24], [17, 18, 11, 24], [41, 42, 47, 48], [ 5, 42, 47, 48] ],
    [ [37, 38, 43, 44], [37,  6, 43, 44], [13, 18, 19, 24], [13, 14, 43, 44],
      [37, 42, 43, 48], [17, 18, 47, 48], [13, 18, 43, 48], [ 1,  2,  7,  8] ]
  ]
  #--------------------------------------------------------------------------
  attr_reader   :layers
  attr_accessor :tileset
  attr_accessor :autotiles
  attr_accessor :map_data
  attr_accessor :flash_data
  attr_accessor :priorities
  attr_accessor :visible
  attr_accessor :ox
  attr_accessor :oy
  #--------------------------------------------------------------------------
  def initialize(viewport, map = $game_map.map)
    @layers = []
    for l in 0...3
      layer = ($game_map.tilemap_plane ?
      Plane.new(viewport) : Sprite.new(viewport))
      layer.bitmap = Bitmap.new(map.width * 32, map.height * 32)
      layer.z = l * 150
      layer.zoom_x = $game_map.tilemap_zoom_x
      layer.zoom_y = $game_map.tilemap_zoom_y
      if (tone = $game_map.tilemap_tone).is_a?(Tone)
        layer.tone = tone
      end
      @layers << layer
    end
    @tileset    = nil  # Refers to Map Tileset Name
    @autotiles  = []   # Refers to Tileset Auto-Tiles (Actual Auto-Tiles)
    @map_data   = nil  # Refers to 3D Array Of Tile Settings
    @flash_data = nil  # Refers to 3D Array of Tile Flashdata
    @priorities = nil  # Refers to Tileset Priorities
    @visible    = true # Refers to Tilest Visibleness
    @ox         = 0    # Bitmap Offsets
    @oy         = 0    # bitmap Offsets
    @data       = nil  # Acts As Refresh Flag
    @map         = map
    @tone        = $game_map.tilemap_tone
    @plane       = $game_map.tilemap_plane
    @zoom_x      = $game_map.tilemap_zoom_x
    @zoom_y      = $game_map.tilemap_zoom_y
    @tile_width  = $game_map.tilemap_tile_width
    @tile_height = $game_map.tilemap_tile_height
  end
  #--------------------------------------------------------------------------
  def dispose
    for layer in @layers
      layer.dispose
    end
  end
  #--------------------------------------------------------------------------
  def update
    unless @data == @map_data && @tile_width == $game_map.tilemap_tile_width &&
           @tile_height == $game_map.tilemap_tile_height
      refresh
    end
    unless @tone == $game_map.tilemap_tone
      @tone = $game_map.tilemap_tone
      @tone = Tone.new(0, 0, 0, 0) if @tone.nil?
      for layer in @layers
        layer.tone = @tone
        layer.tone = @tone
      end
    end
    unless @zoom_x == $game_map.tilemap_zoom_x
      @zoom_x = $game_map.tilemap_zoom_x
      for layer in @layers
        layer.zoom_x = @zoom_x
        layer.zoom_x = @zoom_x
      end
    end
    unless @zoom_y == $game_map.tilemap_zoom_y
      @zoom_y = $game_map.tilemap_zoom_y
      for layer in @layers
        layer.zoom_y = @zoom_y
        layer.zoom_y = @zoom_y
      end
    end
    for layer in @layers
      layer.ox = @ox
      layer.oy = @oy
    end
    if Graphics.frame_count % Animated_Autotiles_Frames == 0
      refresh_autotiles
    end
  end
  #--------------------------------------------------------------------------
  def refresh
    @data = @map_data
    for p in 0..5
      for z in 0...@map_data.zsize
        for x in 0...@map_data.xsize
          for y in 0...@map_data.ysize
            id = @map_data[x, y, z]
            next if id == 0
            next unless p == @priorities[id]
            p = 2 if p > 2
            id < 384 ? draw_autotile(x, y, p, id) : draw_tile(x, y, p, id)
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def refresh_autotiles
    autotile_locations = Table.new(@map_data.xsize, @map_data.ysize,
      @map_data.zsize)
    for p in 0..5
      for z in 0...@map_data.zsize
        for x in 0...@map_data.xsize
          for y in 0...@map_data.ysize
            id = @map_data[x, y, z]
            next if id == 0
            next unless p == @priorities[id]
            p = 2 if p > 2
            if id < 384
              next unless @autotiles[id / 48 - 1].width / 96 > 1
              draw_autotile(x, y, p, id)
              autotile_locations[x, y, z] = 1
            else
              if autotile_locations[x, y, z] == 1
                draw_tile(x, y, p, id)
              end
            end
          end
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  def draw_tile(x, y, z, id)
    rect = Rect.new((id - 384) % 8 * 32, (id - 384) / 8 * 32, 32, 32)
    x *= @tile_width
    y *= @tile_height
    if @tile_width == 32 && @tile_height == 32
      @layers[z].bitmap.blt(x, y, @tileset, rect)
    else
      dest_rect = Rect.new(x, y, @tile_width, @tile_height)
      @layers[z].bitmap.stretch_blt(dest_rect, @tileset, rect)
    end
  end
  #--------------------------------------------------------------------------
  def draw_autotile(x, y, z, tile_id)
    autotile = @autotiles[tile_id / 48 - 1]
    tile_id %= 48
    bitmap = Bitmap.new(32, 32)
    tiles = Autotiles[tile_id / 8][tile_id % 8]
    frames = autotile.width / 96
    anim = (Graphics.frame_count / Animated_Autotiles_Frames) % frames * 96
    for i in 0...4
      tile_position = tiles[i] - 1
      src_rect = Rect.new(tile_position % 6 * 16 + anim,
        tile_position / 6 * 16, 16, 16)
      bitmap.blt(i % 2 * 16, i / 2 * 16, autotile, src_rect)
    end
    x *= @tile_width
    y *= @tile_height
    if @tile_width == 32 && @tile_height == 32
      @layers[z].bitmap.blt(x, y, bitmap, Rect.new(0, 0, 32, 32))
    else
      dest_rect = Rect.new(x, y, @tile_width, @tile_height)
      @layers[z].bitmap.stretch_blt(dest_rect, bitmap, Rect.new(0, 0, 32, 32))
    end
  end
  #--------------------------------------------------------------------------
  def bitmap
    bitmap = Bitmap.new(@layers[0].bitmap.width, @layers[0].bitmap.height)
    for layer in @layers
      bitmap.blt(0, 0, layer.bitmap, Rect.new(0, 0, 
        bitmap.width, bitmap.height))
    end
    return bitmap
  end
  #--------------------------------------------------------------------------
end
Click this link for Selwyn's script and the required DLL file.
Code:
#==============================================================================
# Custom Resolution Script v0.82
#------------------------------------------------------------------------------
# Script by BlueScope
#==============================================================================

module Setup
  #--------------------------------------------------------------------------
  RESOLUTION = [(320).to_f, (240).to_f]
  #--------------------------------------------------------------------------
  def self.x_value
    return RESOLUTION[0] / 640
  end
  #--------------------------------------------------------------------------
  def self.y_value
    return RESOLUTION[1] / 480
  end
  #--------------------------------------------------------------------------
  def self.c_value
    return ((RESOLUTION[0] / 640) + (RESOLUTION[1] / 480)) / 2
  end
  #--------------------------------------------------------------------------
  def self.h_value
    return RESOLUTION[0]
  end
  #--------------------------------------------------------------------------
  def self.v_value
    return RESOLUTION[1]
  end
  #--------------------------------------------------------------------------
  def self.variance
    return (((RESOLUTION[0] / 640) + (RESOLUTION[1] / 480)) / 2) - 1
  end
  #--------------------------------------------------------------------------
end


module Resolution
  #--------------------------------------------------------------------------
  # The following method refers to the resolution changing script and has to
  # be placed below Selwyn's resolution script in order to work properly
  #--------------------------------------------------------------------------
  def self.fullscreen
    @default_size = size
    @set_window_long.call(@window, -16, 0x14000000)
    @set_window_pos.call(@window, -1, 0, 0, Setup.h_value, Setup.v_value, 64)
    @set_resolution.call(Setup.h_value, Setup.v_value, 4)
    @state = "fullscreen"
  end
  #--------------------------------------------------------------------------
end


class Sprite_Character < RPG::Sprite
  #--------------------------------------------------------------------------
  attr_accessor :character
  #--------------------------------------------------------------------------
  alias resolution_update update
  def update
    super
    if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_hue != @character.character_hue
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      if @tile_id >= 384
        self.bitmap = RPG::Cache.tile($game_map.tileset_name, @tile_id, @character.character_hue)
        self.src_rect.set(0, 0, 32, 32)
        self.ox = 16
        self.oy = 32
      else
        self.bitmap = RPG::Cache.character(@character.character_name, @character.character_hue)
        @cw = bitmap.width / 4
        @ch = bitmap.height / 4
        self.ox = @cw / 2
        self.oy = @ch - (32 * Setup.variance)
      end
    end
    resolution_update
  end
  #--------------------------------------------------------------------------
end


class Spriteset_Map
  #--------------------------------------------------------------------------
  alias resolution_initialize initialize
  def initialize
    @viewport1 = Viewport.new(0, 0, Setup.h_value, Setup.v_value)
    @viewport2 = Viewport.new(0, 0, Setup.h_value, Setup.v_value)
    @viewport3 = Viewport.new(0, 0, Setup.h_value, Setup.v_value)
    resolution_initialize
  end
  #--------------------------------------------------------------------------
end


class Game_Map
  #--------------------------------------------------------------------------
  # The following method refers to the Tilemap class and has to be placed
  # below SephirothSpawn's Tilemap class rewrite in order to work properly
  #--------------------------------------------------------------------------
  alias resolution_initialize initialize
  def initialize
    resolution_initialize
    @tilemap_tile_width = (32 * Setup.x_value)
    @tilemap_tile_height = (32 * Setup.y_value)
  end
  #--------------------------------------------------------------------------
  def scroll_down(distance)
    @display_y = [@display_y + distance, (self.height - 15) * (128 * Setup.y_value)].min
  end
  #--------------------------------------------------------------------------
  def scroll_right(distance)
    @display_x = [@display_x + distance, (self.width - 20) * (128 * Setup.x_value)].min
  end
  #--------------------------------------------------------------------------
  def start_scroll(direction, distance, speed)
    @scroll_direction = direction
    @scroll_rest = distance * (128 * Setup.c_value)
    @scroll_speed = speed
  end
  #--------------------------------------------------------------------------
end


class Game_Character
  #--------------------------------------------------------------------------
  alias resolution_initialize initialize
  def initialize
    resolution_initialize
    @move_speed = 4 + (Setup.variance * 2)
  end
  #--------------------------------------------------------------------------
  def moving?
    return (@real_x != @x * (128 * Setup.x_value) or @real_y != @y * (128 * Setup.y_value))
  end
  #--------------------------------------------------------------------------
  def moveto(x, y)
    @x = x % $game_map.width
    @y = y % $game_map.height
    @real_x = @x * (128 * Setup.x_value)
    @real_y = @y * (128 * Setup.y_value)
    @prelock_direction = 0
  end
  #--------------------------------------------------------------------------
  def screen_x
    return (@real_x - $game_map.display_x + 3) / 4 + (16 * Setup.x_value)
  end
  #--------------------------------------------------------------------------
  alias resolution_screen_y screen_y
  def screen_y
    y = (@real_y - $game_map.display_y + 3) / 4 + (32 * Setup.y_value)
    resolution_screen_y
  end
  #--------------------------------------------------------------------------
  def screen_z(height = 0)
    if @always_on_top
      return 999
    end
    z = (@real_y - $game_map.display_y + 3) / 4 + (32 * Setup.c_value)
    if @tile_id > 0
      return z + $game_map.priorities[@tile_id] * (32 * Setup.c_value)
    else
      return z + ((height > 32) ? 31 : 0)
    end
  end
  #--------------------------------------------------------------------------
  alias resolution_update update
  def update
    resolution_update
    if @anime_count > 18 - @move_speed * (2 - (Setup.variance * 2))
      if not @step_anime and @stop_count > 0
        @pattern = @original_pattern
      else
        @pattern = (@pattern + 1) % 4
      end
      @anime_count = 0
    end
  end
  #--------------------------------------------------------------------------
  def update_jump
    @jump_count -= 1
    @real_x = (@real_x * @jump_count + @x * (128 * Setup.x_value)) / (@jump_count + 1)
    @real_y = (@real_y * @jump_count + @y * (128 * Setup.y_value)) / (@jump_count + 1)
  end
  #--------------------------------------------------------------------------
  def update_move
    distance = 2 ** @move_speed
    if @y * (128 * Setup.y_value) > @real_y
      @real_y = [@real_y + distance, @y * (128 * Setup.y_value)].min
    end
    if @x * (128 * Setup.x_value) < @real_x
      @real_x = [@real_x - distance, @x * (128 * Setup.x_value)].max
    end
    if @x * (128 * Setup.x_value) > @real_x
      @real_x = [@real_x + distance, @x * (128 * Setup.x_value)].min
    end
    if @y * (128 * Setup.y_value) < @real_y
      @real_y = [@real_y - distance, @y * (128 * Setup.y_value)].max
    end
    if @walk_anime
      @anime_count += 1.5
    elsif @step_anime
      @anime_count += 1
    end
  end
  #--------------------------------------------------------------------------
end


class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  CENTER_X = ((320 * Setup.x_value) - 8) * 4
  CENTER_Y = ((240 * Setup.y_value) - 8) * 4
  #--------------------------------------------------------------------------
  def center(x, y)
    max_x = ($game_map.width - 20) * (128 * Setup.x_value)
    max_y = ($game_map.height - 15) * (128 * Setup.y_value)
    $game_map.display_x = [0, [x * (128 * Setup.x_value) - CENTER_X, max_x].min].max
    $game_map.display_y = [0, [y * (128 * Setup.y_value) - CENTER_Y, max_y].min].max
  end
  #--------------------------------------------------------------------------
end


class Window_Message < Window_Selectable
  #--------------------------------------------------------------------------
  alias resolution_initialize initialize
  def initialize
    resolution_initialize
    self.x = 80 *- Setup.variance
    self.width = 480 *- Setup.variance
    self.height = 160 *- Setup.variance
    self.contents.font.name = 'Verdana'
    self.contents.font.size = Font.default_size * -Setup.variance
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    @cursor_width = 0
    if $game_temp.choice_start == 0
      x = 8
    end
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      text.gsub!(/\\\\/) { "\000" }
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      while ((c = text.slice!(/./m)) != nil)
        if c == "\000"
          c = "\\"
        end
        if c == "\001"
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          next
        end
        if c == "\002"
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = (Setup.h_value * 0.875) - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = (Setup.h_value / 10) * 3
            else
              @gold_window.y = self.y >= (128 * Setup.variance) ?
                (32 * Setup.variance) : (384 * Setup.variance)
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          next
        end
        if c == "\n"
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          y += 1
          x = 0
          if y >= $game_temp.choice_start
            x = 8
          end
          next
        end
        draw_y = (26 *- Setup.variance) * y - (24 *- Setup.variance)
        self.contents.draw_text(4 *- Setup.variance + x, draw_y, 40, 32, c)
        x += self.contents.text_size(c).width
      end
    end
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
  #--------------------------------------------------------------------------
  def reset_window
    if $game_temp.in_battle
      self.y = (16 * Setup.variance)
    else
      case $game_system.message_position
      when 0
        self.y = (16 *- Setup.variance)
      when 1
        self.y = (160 *- Setup.variance)
      when 2
        self.y = (304 *- Setup.variance)
      end
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = 160
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8, n * (24 *- Setup.variance), @cursor_width, 
        (24 *- Setup.variance))
    else
      self.cursor_rect.empty
    end
  end
  #--------------------------------------------------------------------------
end


begin
  Resolution.initialize
  Resolution.fullscreen
  $scene = nil
end
Code:
#==============================================================================
# Custom Resolution Plugin :: Scene_Title
#------------------------------------------------------------------------------
# Script by BlueScope
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  def main
    if $BTEST
      battle_test
      return
    end
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    $game_system = Game_System.new
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    @sprite.zoom_x = Setup.x_value
    @sprite.zoom_y = Setup.y_value
    s1 = "New Game"
    s2 = "Continue"
    s3 = "Shutdown"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = (320 * Setup.x_value) - @command_window.width / 2
    @command_window.y = (240 * Setup.y_value) - @command_window.height / 2
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    $game_system.bgm_play($data_system.title_bgm)
    Audio.me_stop
    Audio.bgs_stop
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      Resolution.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @sprite.bitmap.dispose
    @sprite.dispose
  end
  #--------------------------------------------------------------------------
end

Instructions

First, you need to get both required, external scripts ready, which are SephirothSpawn's Tilemap Class Rewrite and Selwyn's Resolution Script.
While you can simply copy Seph's script in a new script above Main and below Game_Map, you need some more steps to integrate Selwyn's script. Refer to the instructions in his thread for that.
If you have both scripts integrated, insert another script above Main, below the two required one and Game_Player, and copy the Custom Resolution Script into it. Well, designed to be plug-and-play, that's basically it, though you of course have to choose your desired resolution. Refer to the top of the Custiom Resolution Script for the Setup module, where you can find the following line:
Code:
RESOLUTION = [([b]320[/b]).to_f, ([b]240[/b]).to_f]
Note the two bolded numbers that equal RMXP's half default screen width (320) and height (240). You may change these two numbers to whatever resolution you desire, but make sure you don't try creepy stuff. I'm not responsible for anything bad resulting from resolutions other than 320x240, 640x480, 800x600, 1024x768, or anything bad resulting from the named resolutions because of your computer settings. Other resolutions should be fine, too, but I didn't test them, so I won't guarantee for them.


Glitchfinder's AddOn

If you experience problems with my basic version or the two priority layers aren't enough, you might check out Glitch's post, which includes an edited version of my script, plus a modified version of Selwyn's RPG::Cache module.

The easiest way is to remove what you put in from my post and insert everything from his into your project. Remember that you don't need the Display.dll anymore, which you should remove from your project then.

Also, please be aware that though i believe in Glitch and his statements, I haven't tested the script by myself. If you're in need of support, please also contact Glitchfinder, not me.


Frequently Asked Questions

Q: How do I use smaller or bigger tiles?
A: You use normal 32x32 tiles on normal 256x[32] tilesets, the script resizes these tiles for you. Custom tile size is planned for future versions.

Q: Is this script intended for a specific resolution?
A: Yes, 320x240 is the resolution this script works best with and was originally intended to be used with.

Q: What're the half trees doing there?
A: This bug occurs for tile priority settings above 2, so all tiles with priority 3, 4, or 5 won't be drawn. It's an error caused by Seph's Tilemap rewrite. Note that his script is only v0.9, and therefore not complete. I think it'll be fixed in the final version.

Q: Where can I get the display.dll? The link in Selwyn's thread is broken...
A: arevulopapo re-hosted the file, you can find this link further down in his thread.

Q: Why don't the charactersets get resized?
A: As you can use any characterset sizes you want to without any relation to the screen resolution or the tiles, such a feature is quite redundant.

Q: Who should I give credit for this?
A: Without SephirothSpawn's and Selwyn's scripts, this script wouldn't exist, so you need to give all three of us credit if you use this script. If you use any plugins, make sure you credit the authors of those, too.

Q: What are those Plugins?
A: It's simply a name I made up for the spoiler, it's unrelated to what a real 'plugin' would be for a game. Instead, it's just a script you place below the Custom Resolution Script to modify some defaults. For example, the Scene_Title plugin I provided centers the command window, regardless of the resolution you use.

Q: What do I have to do if I want to make my own plugin?
A: Just make sure you don't modify any of the three default scripts (Tilemap Rewrite, Window Resolution Script, or Custom Resolution Script) and only use the methods defined in the Setup module in your plugin. You should also alias as much as possible, as the plugin's purposes are to increase compatibility, at least.


ToDo-List

Until v1.0
  • Support for custom tile and tileset size (i.e. using smaller or larger tilesets instead of having the program resize the tiles)
Further Versions
  • Adjustable step distance (can be used for pixel movement, for example)

Compatibility
  • The Tilemap Class Rewrite modifies a method of Game_Map (aliased)
  • The Custom Resolution Script modifies several methods of Sprite_Character (aliased), Spriteset_Map (aliased), Game_Map, Game_Character, and Game_Player.
  • The Scene_Title Support Script modifies a method of Scene_Title.


Conclusion

So, this script is out in the open... now what to do with it? How about grabbing some sprites (like my newly submitted Lufia 2 graphics, which'll work great with a 320x240 resolution) and make a game with this script? Why not open up your desired script editor and write custom systems for this? And of course, why not help me with my To-Do list XD It's up to you, as long as you put it in good use! I hope you can work with this.


Credits

BlueScope ^_^
SephirothSpawn for the Tilemap Class Rewrite
Selwyn for the Window Resolution Script or the RPG::Cache module
Glitchfinder, if you're using his AddOn
 
Think you could host the Display.dll file the link at his post is no longer there.
Edit Found it, was on the 2nd page, good script To bad does not work with my game.
 
Well, the viewport's parts above the default 640x480 are shown in black no matter what, I don't have an idea why (the viewports are shown correctly). You can draw windows on the empty space without a problem, nevertheless, though, of course, this isn't what I'm going for...
If you have an idea on how I can fix that, please tell me... I haven't checked if the same occurs for Selwyn's script, though, which'd mean that this bug is caused by his resolution fix.
 
Erm, Because the Graphics class' Viewport is in c coded? So you can't just fix it. Each time I see a new resolution script, I hope people have done it...
 
I see... I thought you couldn't do it the 'normal way'... mainly because I tried everything I could XD Thanks anyway, too bad there is no easy solution...

EDIT: Updated the script to v0.81... the only change is another aliased method, but no functionality added yet...
 

Taylor

Sponsor

So this script brings back the F5 function from RM2k/2k3? Press F5 to switch between double size/normal size.

I suppose it doesn't actually do the button toggling it, but the rest is the same?

...I would use this but then I'd need to reposition EVERY non-Scene_Map item. D: And back with older versions when I was going for 480x320 it was quite tedious. And a right pain. And did I mention tedious?
Battle elements were easy, it was the menu that was hard (and now that I'm using MOG Menus? x_x)

Yeah... too bad thier isn't a script that could half all graphic sizes and x and y positions (or similar e.g cx, cy) unless labled otherwise.
 
Even if you would half all graphic's size, windows and other by-script drawn objects still wouldn't be halfed. I know it's a tedious process to script any scenes you need, but I'm not a fan of the default menus anyway... XD Well, maybe, since this script is out now, someone will do some menues for this... we have some very talented CMS guys in here, right?
 
Looks like you disabled the auto-fullscreen... I'm unsure about what this script does if it's set to windowed mode, but I guess this is what happens... well, maybe you forgot the display.dll and included some kind of rescue method in Main... or there's another script interfering with it. It might also be hardware-caused, so best try it in a new project with no other scripts applied and see what happens there. Of course, make sure you follow the instructions correctly, especially Selwyn's, as his require the most work.
 
Let me bump this because of the simple reason that I added a demo of v0.82 for you to grab. Note that it includes a fix on the message window (which I also included in the script you can get from the first post) and and old man talking weird stuff ;) I think it's worth taking a look at.
 
Um, it definately wasn't... use PrintScreen (the key) while the game's running, and enter some drawing program to paste the screenshot. You can check the resolution there.
 
I have the same problem MysticTrunks has, and I'm confident that I followed Selwyn's instructions to the letter. In addition, I get an error after I try to start the game by selecting "New Game" from the title screen. Line 237 of your script, an "ArgumentError," then it says "bad value for size." Here's the line:

self.contents.font.size = Font.default_size * -Setup.variance

Any idea what's causing this?

EDIT: I've tried this with numerous resolutions, from 800x600 up to my native 1680x1050 (Not necessarily expecting it to work, but I get the same error regardless of the resolution I pick :P)
 
I wonder if you tried out the demo... if it works there, it's a problem with your game... for example a script that changes the Font module (very unlikely), or version issues... you need v1.02 upwards to use this.

Also, for larger resolutions then 640x480, the screen will be black outside this area... noone's been able to fix this by now.
 
Could someone please explain those instructions better, I could not understand them really....I'm trying to set up the resolution to fit with gameboy advance's (240x160) and anything I try just messes my game up and I want the tiles to be 16x16 also o_O
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top