03-08-2008, 04:15 AM
Resolution Changer VX
Version: 1.0
Version: 1.0
Introduction
I got frustrated by the lack of working Resolution Scripts. Normal ones just stretch the screen to the desired size, this one actually changes the size of the screen allowing you to fit more or less tiles on. It probably could also be used with ordinary resolution scripts to achieve any size you want - not been tested though.
Features
- Resize the Game Window
- Currently the max is 640Ã480 (whether I can change this I'm unsure)
A screen that's bigger?
Script
Script
Code:
#==============================================================================
# ** Resolution Changer VX
#------------------------------------------------------------------------------
# by Syvkal
# Version 1.0
# 06-27-08
#==============================================================================
#
# - INTRODUCTION -
#
# This system allows you to resize the Game screen without stretching the
# graphics. It enables you to be able to fit more onto one screen
#
#------------------------------------------------------------------------------
#
# - USAGE -
#
# Simply use the one line:
#
# Resolution.resize(width,height)
#
# Place this in main just below 'begin'
#
#------------------------------------------------------------------------------
#
# - PROBLEMS -
#
# Certain problems may occur while using this script
# These include:
# - Windows not properly sized
# - Windows not in the proper position
# - Images such as the Title Graphic not fitting
#
# NONE OF THESE PROBLEMS ARE ERRORS
# -------------------------------
#
# Please do not report any of these problems, the resolution script will
# the screen size, it's up to you to make the scripts fit it
#
# However the script is quite new and only took me about 10 minutes, so if
# there are any errors please do report them
#
#------------------------------------------------------------------------------
#
# - IMPORTANT -
#
# When resizing the window try to make the width and height a multiple of 32
# This will reduce the amount of errors
#
# Also due to the Built in function, the current max screen size is 640 x 480
# In later versions this problem may be able to be over come, but I'm not sure
#
#==============================================================================
module Resolution
#--------------------------------------------------------------------------
# * Create Game Screen Sizes
#--------------------------------------------------------------------------
$game_screen_width = 544
$game_screen_height = 416
$game_width_tiles = 17
$game_height_tiles = 13
#--------------------------------------------------------------------------
# * Resize Game Screen
#--------------------------------------------------------------------------
def self.resize(width,height)
Graphics.resize_screen(width,height)
$game_screen_width = width
$game_screen_height = height
$game_width_tiles = width / 32
$game_height_tiles = height / 32
end
end
#==============================================================================
# ** Sprite_Base
#------------------------------------------------------------------------------
# Edited to handle the resized screen size
#==============================================================================
class Sprite_Base < Sprite
#--------------------------------------------------------------------------
# * Start Animation
#--------------------------------------------------------------------------
def start_animation(animation, mirror = false)
dispose_animation
@animation = animation
return if @animation == nil
@animation_mirror = mirror
@animation_duration = @animation.frame_max * 4 + 1
load_animation_bitmap
@animation_sprites = []
if @animation.position != 3 or not @@animations.include?(animation)
if @use_sprite
for i in 0..15
sprite = ::Sprite.new(viewport)
sprite.visible = false
@animation_sprites.push(sprite)
end
unless @@animations.include?(animation)
@@animations.push(animation)
end
end
end
if @animation.position == 3
if viewport == nil
@animation_ox = $game_screen_width / 2
@animation_oy = $game_screen_height / 2
else
@animation_ox = viewport.rect.width / 2
@animation_oy = viewport.rect.height / 2
end
else
@animation_ox = x - ox + width / 2
@animation_oy = y - oy + height / 2
if @animation.position == 0
@animation_oy -= height / 2
elsif @animation.position == 2
@animation_oy += height / 2
end
end
end
end
#==============================================================================
# ** Sprite_Timer
#------------------------------------------------------------------------------
# Edited to handle the resized screen size
#==============================================================================
class Sprite_Timer < Sprite
#--------------------------------------------------------------------------
# * Object Initialization
# viewport : viewport
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
self.bitmap = Bitmap.new(88, 48)
self.bitmap.font.name = "Arial"
self.bitmap.font.size = 32
self.x = $game_screen_width - self.bitmap.width
self.y = 0
self.z = 200
update
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# Edited to handle the resized screen size
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Create Viewport
#--------------------------------------------------------------------------
def create_viewports
@viewport1 = Viewport.new(0, 0, $game_screen_width, $game_screen_height)
@viewport2 = Viewport.new(0, 0, $game_screen_width, $game_screen_height)
@viewport3 = Viewport.new(0, 0, $game_screen_width, $game_screen_height)
@viewport2.z = 50
@viewport3.z = 100
end
end
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
# Edited to handle the resized screen size
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# * Create Viewport
#--------------------------------------------------------------------------
def create_viewports
@viewport1 = Viewport.new(0, 0, $game_screen_width, $game_screen_height)
@viewport2 = Viewport.new(0, 0, $game_screen_width, $game_screen_height)
@viewport3 = Viewport.new(0, 0, $game_screen_width, $game_screen_height)
@viewport2.z = 50
@viewport3.z = 100
end
#--------------------------------------------------------------------------
# * Create Battleback Sprite
#--------------------------------------------------------------------------
def create_battleback
source = $game_temp.background_bitmap
bitmap = Bitmap.new($game_screen_width + 96, $game_screen_height + 64)
bitmap.stretch_blt(bitmap.rect, source, source.rect)
bitmap.radial_blur(90, 12)
@battleback_sprite = Sprite.new(@viewport1)
@battleback_sprite.bitmap = bitmap
@battleback_sprite.ox = 320
@battleback_sprite.oy = 240
@battleback_sprite.x = 272
@battleback_sprite.y = 176
@battleback_sprite.wave_amp = 8
@battleback_sprite.wave_length = 240
@battleback_sprite.wave_speed = 120
end
#--------------------------------------------------------------------------
# * Create Battlefloor Sprite
#--------------------------------------------------------------------------
def create_battlefloor
@battlefloor_sprite = Sprite.new(@viewport1)
@battlefloor_sprite.bitmap = Cache.system("BattleFloor")
@battlefloor_sprite.x = 0
@battlefloor_sprite.y = 192
@battlefloor_sprite.z = 1
@battlefloor_sprite.opacity = 128
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# Edited to handle the resized screen size
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Scroll Setup
#--------------------------------------------------------------------------
def setup_scroll
@scroll_direction = 2
@scroll_rest = 0
@scroll_speed = 4
@margin_x = (width - $game_width_tiles) * 256 / 2
@margin_y = (height - $game_height_tiles) * 256 / 2
end
#--------------------------------------------------------------------------
# * Calculate X coordinate for parallax display
# bitmap : Parallax bitmap
#--------------------------------------------------------------------------
def calc_parallax_x(bitmap)
if bitmap == nil
return 0
elsif @parallax_loop_x
return @parallax_x / 16
elsif loop_horizontal?
return 0
else
w1 = bitmap.width - $game_screen_width
w2 = @map.width * 32 - $game_screen_width
if w1 <= 0 or w2 <= 0
return 0
else
return @parallax_x * w1 / w2 / 8
end
end
end
#--------------------------------------------------------------------------
# * Calculate Y coordinate for parallax display
# bitmap : Parallax bitmap
#--------------------------------------------------------------------------
def calc_parallax_y(bitmap)
if bitmap == nil
return 0
elsif @parallax_loop_y
return @parallax_y / 16
elsif loop_vertical?
return 0
else
h1 = bitmap.height - $game_screen_height
h2 = @map.height * 32 - $game_screen_height
if h1 <= 0 or h2 <= 0
return 0
else
return @parallax_y * h1 / h2 / 8
end
end
end
#--------------------------------------------------------------------------
# * Scroll Down
# distance : scroll distance
#--------------------------------------------------------------------------
def scroll_down(distance)
if loop_vertical?
@display_y += distance
@display_y %= @map.height * 256
@parallax_y += distance
else
last_y = @display_y
@display_y = [@display_y + distance, (height - $game_height_tiles) * 256].min
@parallax_y += @display_y - last_y
end
end
#--------------------------------------------------------------------------
# * Scroll Right
# distance : scroll distance
#--------------------------------------------------------------------------
def scroll_right(distance)
if loop_horizontal?
@display_x += distance
@display_x %= @map.width * 256
@parallax_x += distance
else
last_x = @display_x
@display_x = [@display_x + distance, (width - $game_width_tiles) * 256].min
@parallax_x += @display_x - last_x
end
end
end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# Edited to handle the resized screen size
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * Set Map Display Position to Center of Screen
# x : x-coordinate
# y : y-coordinate
#--------------------------------------------------------------------------
def center(x, y)
center_x = ($game_screen_width / 2 - 16) * 8
center_y = ($game_screen_height / 2 - 16) * 8
display_x = x * 256 - center_x # Calculate coordinates
unless $game_map.loop_horizontal? # No loop horizontally?
max_x = ($game_map.width - $game_width_tiles) * 256
display_x = [0, [display_x, max_x].min].max # Adjust coordinates
end
display_y = y * 256 - center_y # Calculate coordinates
unless $game_map.loop_vertical? # No loop vertically?
max_y = ($game_map.height - $game_height_tiles) * 256
display_y = [0, [display_y, max_y].min].max # Adjust coordinates
end
$game_map.set_display_pos(display_x, display_y) # Change map location
end
#--------------------------------------------------------------------------
# * Update Scroll
#--------------------------------------------------------------------------
def update_scroll(last_real_x, last_real_y)
center_x = ($game_screen_width / 2 - 16) * 8
center_y = ($game_screen_height / 2 - 16) * 8
ax1 = $game_map.adjust_x(last_real_x)
ay1 = $game_map.adjust_y(last_real_y)
ax2 = $game_map.adjust_x(@real_x)
ay2 = $game_map.adjust_y(@real_y)
if ay2 > ay1 and ay2 > center_y
$game_map.scroll_down(ay2 - ay1)
end
if ax2 < ax1 and ax2 < center_x
$game_map.scroll_left(ax1 - ax2)
end
if ax2 > ax1 and ax2 > center_x
$game_map.scroll_right(ax2 - ax1)
end
if ay2 < ay1 and ay2 < center_y
$game_map.scroll_up(ay1 - ay2)
end
end
end
Put it under the Materials Section
Simply use the one line in main just below 'begin':
Resolution.resize(width,height)
This will reduce the amount of any Screen and picture related errors
You should also try and use sizes that have an odd number of tiles, but you don't need to
IMPORTANT!
If you resize your screen bigger than the standard make sure you make all your maps atleast that size.
DO NOT make any smaller than your screensize or you will see errors
Compatibility
Should work with most things, but I'm not 100% sure
I hope it works with other resolution scripts xD
You will have to resize ALL of you Scenes and Windows (except Scene_Map, that's been done)
Credits and Thanks
Me please xD
Author's Notes
I'm not sure if I've left anything out so please do report any errors ^_^
Read the script header before reporting any though!