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
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
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:
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
Compatibility
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
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.
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]
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)
- 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