Removed redundant "\r" from various messages, removed usages of BitmapWrapper, fixed Lure Ball error in battles started in the Debug menu, improved Terrain Tag editor, fixed some Compiler errors, enabled vsync, fixed event graphics frozen to the screen when using $game_player.moveto directly.

This commit is contained in:
Maruno17
2023-05-04 21:28:00 +01:00
parent 5f20121e59
commit 48fb8dae73
44 changed files with 362 additions and 398 deletions

View File

@@ -41,7 +41,7 @@ module Kernel
def echoln(string)
echo string
echo "\r\n"
echo "\n"
end
end

View File

@@ -10,10 +10,10 @@ module Deprecation
def warn_method(method_name, removal_version = nil, alternative = nil)
text = _INTL('Usage of deprecated method "{1}" or its alias.', method_name)
unless removal_version.nil?
text += "\r\n" + _INTL("The method is slated to be removed in Essentials {1}.", removal_version)
text += "\n" + _INTL("The method is slated to be removed in Essentials {1}.", removal_version)
end
unless alternative.nil?
text += "\r\n" + _INTL("Use \"{1}\" instead.", alternative)
text += "\n" + _INTL("Use \"{1}\" instead.", alternative)
end
Console.echo_warn text
end

View File

@@ -25,7 +25,7 @@ module Mouse
# Returns the position of the mouse relative to the game window.
def getMousePos(catch_anywhere = false)
return nil unless System.mouse_in_window || catch_anywhere
return nil unless Input.mouse_in_window || catch_anywhere
return Input.mouse_x, Input.mouse_y
end
end

View File

@@ -413,7 +413,7 @@ module PluginManager
Compiler.pbCompilerEachPreppedLine(filename) do |line, line_no|
# split line up into property name and values
if !line[/^\s*(\w+)\s*=\s*(.*)$/]
raise _INTL("Bad line syntax (expected syntax like XXX=YYY)\r\n{1}", FileLineData.linereport)
raise _INTL("Bad line syntax (expected syntax like XXX=YYY)\n{1}", FileLineData.linereport)
end
property = $~[1].upcase
data = $~[2].split(",")

View File

@@ -243,6 +243,7 @@ class Game_Event < Game_Character
def should_update?(recalc = false)
return @to_update if !recalc
return true if @updated_last_frame
return true if @trigger && (@trigger == 3 || @trigger == 4)
return true if @move_route_forcing || @moveto_happened
return true if @event.name[/update/i]
@@ -256,7 +257,9 @@ class Game_Event < Game_Character
def update
@to_update = should_update?(true)
@updated_last_frame = false
return if !@to_update
@updated_last_frame = true
@moveto_happened = false
last_moving = moving?
super

View File

@@ -68,9 +68,9 @@ class Sprite_Character < RPG::Sprite
@oldbushdepth = 0
@spriteoffset = false
if !character || character == $game_player || (character.name[/reflection/i] rescue false)
@reflection = Sprite_Reflection.new(self, character, viewport)
@reflection = Sprite_Reflection.new(self, viewport)
end
@surfbase = Sprite_SurfBase.new(self, character, viewport) if character == $game_player
@surfbase = Sprite_SurfBase.new(self, viewport) if character == $game_player
self.zoom_x = TilemapRenderer::ZOOM_X
self.zoom_y = TilemapRenderer::ZOOM_Y
update
@@ -94,16 +94,15 @@ class Sprite_Character < RPG::Sprite
@reflection = nil
@surfbase&.dispose
@surfbase = nil
@character = nil
super
end
def update
return if @character.is_a?(Game_Event) && !@character.should_update?
super
if @tile_id != @character.tile_id ||
@character_name != @character.character_name ||
@character_hue != @character.character_hue ||
@oldbushdepth != @character.bush_depth
def refresh_graphic
return if @tile_id == @character.tile_id &&
@character_name == @character.character_name &&
@character_hue == @character.character_hue &&
@oldbushdepth == @character.bush_depth
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
@@ -139,6 +138,11 @@ class Sprite_Character < RPG::Sprite
end
@character.sprite_size = [@cw, @ch]
end
def update
return if @character.is_a?(Game_Event) && !@character.should_update?
super
refresh_graphic
return if !@charbitmap
@charbitmap.update if @charbitmapAnimated
bushdepth = @character.bush_depth

View File

@@ -1,14 +1,13 @@
class Sprite_Reflection
attr_reader :visible
attr_accessor :event
def initialize(sprite, event, viewport = nil)
@rsprite = sprite
def initialize(parent_sprite, viewport = nil)
@parent_sprite = parent_sprite
@sprite = nil
@event = event
@height = 0
@fixedheight = false
if @event && @event != $game_player && @event.name[/reflection\((\d+)\)/i]
if @parent_sprite.character && @parent_sprite.character != $game_player &&
@parent_sprite.character.name[/reflection\((\d+)\)/i]
@height = $~[1].to_i || 0
@fixedheight = true
end
@@ -18,15 +17,19 @@ class Sprite_Reflection
end
def dispose
if !@disposed
return if @disposed
@sprite&.dispose
@sprite = nil
@parent_sprite = nil
@disposed = true
end
end
def disposed?
@disposed
return @disposed
end
def event
return @parent_sprite.character
end
def visible=(value)
@@ -36,7 +39,7 @@ class Sprite_Reflection
def update
return if disposed?
shouldShow = @rsprite.visible
shouldShow = @parent_sprite.visible
if !shouldShow
# Just-in-time disposal of sprite
if @sprite
@@ -48,38 +51,38 @@ class Sprite_Reflection
# Just-in-time creation of sprite
@sprite = Sprite.new(@viewport) if !@sprite
if @sprite
x = @rsprite.x - (@rsprite.ox * TilemapRenderer::ZOOM_X)
y = @rsprite.y - (@rsprite.oy * TilemapRenderer::ZOOM_Y)
y -= Game_Map::TILE_HEIGHT * TilemapRenderer::ZOOM_Y if @rsprite.character.character_name[/offset/i]
x = @parent_sprite.x - (@parent_sprite.ox * TilemapRenderer::ZOOM_X)
y = @parent_sprite.y - (@parent_sprite.oy * TilemapRenderer::ZOOM_Y)
y -= Game_Map::TILE_HEIGHT * TilemapRenderer::ZOOM_Y if event.character_name[/offset/i]
@height = $PokemonGlobal.bridge if !@fixedheight
y += @height * TilemapRenderer::ZOOM_Y * Game_Map::TILE_HEIGHT / 2
width = @rsprite.src_rect.width
height = @rsprite.src_rect.height
width = @parent_sprite.src_rect.width
height = @parent_sprite.src_rect.height
@sprite.x = x + ((width / 2) * TilemapRenderer::ZOOM_X)
@sprite.y = y + ((height + (height / 2)) * TilemapRenderer::ZOOM_Y)
@sprite.ox = width / 2
@sprite.oy = (height / 2) - 2 # Hard-coded 2 pixel shift up
@sprite.oy -= @rsprite.character.bob_height * 2
@sprite.oy -= event.bob_height * 2
@sprite.z = -50 # Still water is -100, map is 0 and above
@sprite.z += 1 if @event == $game_player
@sprite.zoom_x = @rsprite.zoom_x
@sprite.zoom_y = @rsprite.zoom_y
@sprite.z += 1 if event == $game_player
@sprite.zoom_x = @parent_sprite.zoom_x
@sprite.zoom_y = @parent_sprite.zoom_y
frame = (Graphics.frame_count % 40) / 10
@sprite.zoom_x *= [1.0, 0.95, 1.0, 1.05][frame]
@sprite.angle = 180.0
@sprite.mirror = true
@sprite.bitmap = @rsprite.bitmap
@sprite.tone = @rsprite.tone
@sprite.bitmap = @parent_sprite.bitmap
@sprite.tone = @parent_sprite.tone
if @height > 0
@sprite.color = Color.new(48, 96, 160, 255) # Dark still water
@sprite.opacity = @rsprite.opacity
@sprite.opacity = @parent_sprite.opacity
@sprite.visible = !Settings::TIME_SHADING # Can't time-tone a colored sprite
else
@sprite.color = Color.new(224, 224, 224, 96)
@sprite.opacity = @rsprite.opacity * 3 / 4
@sprite.opacity = @parent_sprite.opacity * 3 / 4
@sprite.visible = true
end
@sprite.src_rect = @rsprite.src_rect
@sprite.src_rect = @parent_sprite.src_rect
end
end
end

View File

@@ -1,11 +1,9 @@
class Sprite_SurfBase
attr_reader :visible
attr_accessor :event
def initialize(sprite, event, viewport = nil)
@rsprite = sprite
def initialize(parent_sprite, viewport = nil)
@parent_sprite = parent_sprite
@sprite = nil
@event = event
@viewport = viewport
@disposed = false
@surfbitmap = AnimatedBitmap.new("Graphics/Characters/base_surf")
@@ -23,13 +21,18 @@ class Sprite_SurfBase
return if @disposed
@sprite&.dispose
@sprite = nil
@parent_sprite = nil
@surfbitmap.dispose
@divebitmap.dispose
@disposed = true
end
def disposed?
@disposed
return @disposed
end
def event
return @parent_sprite.character
end
def visible=(value)
@@ -49,7 +52,7 @@ class Sprite_SurfBase
end
# Just-in-time creation of sprite
@sprite = Sprite.new(@viewport) if !@sprite
if @sprite
return if !@sprite
if $PokemonGlobal.surfing
@sprite.bitmap = @surfbitmap.bitmap
cw = @cws
@@ -59,31 +62,30 @@ class Sprite_SurfBase
cw = @cwd
ch = @chd
end
sx = @event.pattern_surf * cw
sy = ((@event.direction - 2) / 2) * ch
sx = event.pattern_surf * cw
sy = ((event.direction - 2) / 2) * ch
@sprite.src_rect.set(sx, sy, cw, ch)
if $game_temp.surf_base_coords
spr_x = ((($game_temp.surf_base_coords[0] * Game_Map::REAL_RES_X) - @event.map.display_x).to_f / Game_Map::X_SUBPIXELS).round
spr_x = ((($game_temp.surf_base_coords[0] * Game_Map::REAL_RES_X) - event.map.display_x).to_f / Game_Map::X_SUBPIXELS).round
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_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
@sprite.x = @rsprite.x
@sprite.y = @rsprite.y
@sprite.x = @parent_sprite.x
@sprite.y = @parent_sprite.y
end
@sprite.ox = cw / 2
@sprite.oy = ch - 16 # Assume base needs offsetting
@sprite.oy -= @event.bob_height
@sprite.z = @event.screen_z(ch) - 1
@sprite.zoom_x = @rsprite.zoom_x
@sprite.zoom_y = @rsprite.zoom_y
@sprite.tone = @rsprite.tone
@sprite.color = @rsprite.color
@sprite.opacity = @rsprite.opacity
end
@sprite.oy -= event.bob_height
@sprite.z = event.screen_z(ch) - 1
@sprite.zoom_x = @parent_sprite.zoom_x
@sprite.zoom_y = @parent_sprite.zoom_y
@sprite.tone = @parent_sprite.tone
@sprite.color = @parent_sprite.color
@sprite.opacity = @parent_sprite.opacity
end
end

View File

@@ -163,8 +163,8 @@ end
#===============================================================================
def createMinimap(mapid)
map = load_data(sprintf("Data/Map%03d.rxdata", mapid)) rescue nil
return BitmapWrapper.new(32, 32) if !map
bitmap = BitmapWrapper.new(map.width * 4, map.height * 4)
return Bitmap.new(32, 32) if !map
bitmap = Bitmap.new(map.width * 4, map.height * 4)
black = Color.black
tilesets = $data_tilesets
tileset = tilesets[map.tileset_id]

View File

@@ -1074,7 +1074,7 @@ class Window_DrawableCommand < SpriteWindow_SelectableEx
windowheight += self.borderY
if !width || width < 0
width = 0
tmpbitmap = BitmapWrapper.new(1, 1)
tmpbitmap = Bitmap.new(1, 1)
pbSetSystemFont(tmpbitmap)
commands.each do |i|
width = [width, tmpbitmap.text_size(i).width].max

View File

@@ -1,93 +1,3 @@
#===============================================================================
# SpriteWrapper is a class which wraps (most of) Sprite's properties.
# (unused) Use class Sprite instead
#===============================================================================
class SpriteWrapper
def initialize(viewport = nil)
@sprite = Sprite.new(viewport)
end
def dispose; @sprite.dispose; end
def disposed?; return @sprite.disposed?; end
def viewport; return @sprite.viewport; end
def flash(color, duration); return @sprite.flash(color, duration); end
def update; return @sprite.update; end
def x; @sprite.x; end
def x=(value); @sprite.x = value; end
def y; @sprite.y; end
def y=(value); @sprite.y = value; end
def bitmap; @sprite.bitmap; end
def bitmap=(value); @sprite.bitmap = value; end
def src_rect; @sprite.src_rect; end
def src_rect=(value); @sprite.src_rect = value; end
def visible; @sprite.visible; end
def visible=(value); @sprite.visible = value; end
def z; @sprite.z; end
def z=(value); @sprite.z = value; end
def ox; @sprite.ox; end
def ox=(value); @sprite.ox = value; end
def oy; @sprite.oy; end
def oy=(value); @sprite.oy = value; end
def zoom_x; @sprite.zoom_x; end
def zoom_x=(value); @sprite.zoom_x = value; end
def zoom_y; @sprite.zoom_y; end
def zoom_y=(value); @sprite.zoom_y = value; end
def angle; @sprite.angle; end
def angle=(value); @sprite.angle = value; end
def mirror; @sprite.mirror; end
def mirror=(value); @sprite.mirror = value; end
def bush_depth; @sprite.bush_depth; end
def bush_depth=(value); @sprite.bush_depth = value; end
def opacity; @sprite.opacity; end
def opacity=(value); @sprite.opacity = value; end
def blend_type; @sprite.blend_type; end
def blend_type=(value); @sprite.blend_type = value; end
def color; @sprite.color; end
def color=(value); @sprite.color = value; end
def tone; @sprite.tone; end
def tone=(value); @sprite.tone = value; end
def viewport=(value)
return if self.viewport == value
bitmap = @sprite.bitmap
src_rect = @sprite.src_rect
visible = @sprite.visible
x = @sprite.x
y = @sprite.y
z = @sprite.z
ox = @sprite.ox
oy = @sprite.oy
zoom_x = @sprite.zoom_x
zoom_y = @sprite.zoom_y
angle = @sprite.angle
mirror = @sprite.mirror
bush_depth = @sprite.bush_depth
opacity = @sprite.opacity
blend_type = @sprite.blend_type
color = @sprite.color
tone = @sprite.tone
@sprite.dispose
@sprite = Sprite.new(value)
@sprite.bitmap = bitmap
@sprite.src_rect = src_rect
@sprite.visible = visible
@sprite.x = x
@sprite.y = y
@sprite.z = z
@sprite.ox = ox
@sprite.oy = oy
@sprite.zoom_x = zoom_x
@sprite.zoom_y = zoom_y
@sprite.angle = angle
@sprite.mirror = mirror
@sprite.bush_depth = bush_depth
@sprite.opacity = opacity
@sprite.blend_type = blend_type
@sprite.color = color
@sprite.tone = tone
end
end
#===============================================================================
# Sprite class that maintains a bitmap of its own.
# This bitmap can't be changed to a different one.

View File

@@ -58,7 +58,7 @@ class PngAnimatedBitmap
@frameDelay = delay
subWidth = panorama.width / numFrames
numFrames.times do |i|
subBitmap = BitmapWrapper.new(subWidth, panorama.height)
subBitmap = Bitmap.new(subWidth, panorama.height)
subBitmap.blt(0, 0, panorama, Rect.new(subWidth * i, 0, subWidth, panorama.height))
@frames.push(subBitmap)
end
@@ -155,7 +155,7 @@ class GifBitmap
rescue
@bitmap = nil
end
@bitmap = BitmapWrapper.new(32, 32) if @bitmap.nil?
@bitmap = Bitmap.new(32, 32) if @bitmap.nil?
@bitmap.play if @bitmap&.animated?
end

View File

@@ -221,7 +221,7 @@ class FaceWindowVX < SpriteWindow_Base
self.contents&.dispose
@faceIndex = faceinfo[1].to_i
@facebitmaptmp = AnimatedBitmap.new(facefile)
@facebitmap = BitmapWrapper.new(96, 96)
@facebitmap = Bitmap.new(96, 96)
@facebitmap.blt(0, 0, @facebitmaptmp.bitmap,
Rect.new((@faceIndex % 4) * 96, (@faceIndex / 4) * 96, 96, 96))
self.contents = @facebitmap

View File

@@ -202,7 +202,7 @@ class Battle
# Opposing trainers and partner trainers's messages about sending out Pokémon
trainers.each_with_index do |t, i|
next if side == 0 && i == 0 # The player's message is shown last
msg += "\r\n" if msg.length > 0
msg += "\n" if msg.length > 0
sent = sendOuts[side][i]
case sent.length
when 1
@@ -218,7 +218,7 @@ class Battle
end
# The player's message about sending out Pokémon
if side == 0
msg += "\r\n" if msg.length > 0
msg += "\n" if msg.length > 0
sent = sendOuts[side][0]
case sent.length
when 1

View File

@@ -173,7 +173,7 @@ class Battle
newLevel = growth_rate.level_from_exp(expFinal)
if newLevel < curLevel
debugInfo = "Levels: #{curLevel}->#{newLevel} | Exp: #{pkmn.exp}->#{expFinal} | gain: #{expGained}"
raise _INTL("{1}'s new level is less than its current level, which shouldn't happen.", pkmn.name) + "\r\n[#{debugInfo}]"
raise _INTL("{1}'s new level is less than its current level, which shouldn't happen.", pkmn.name) + "\n[#{debugInfo}]"
end
# Give Exp
if pkmn.shadowPokemon?

View File

@@ -297,12 +297,12 @@ class Battle::Scene
#=============================================================================
def pbLevelUp(pkmn, _battler, oldTotalHP, oldAttack, oldDefense, oldSpAtk, oldSpDef, oldSpeed)
pbTopRightWindow(
_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
_INTL("Max. HP<r>+{1}\nAttack<r>+{2}\nDefense<r>+{3}\nSp. Atk<r>+{4}\nSp. Def<r>+{5}\nSpeed<r>+{6}",
pkmn.totalhp - oldTotalHP, pkmn.attack - oldAttack, pkmn.defense - oldDefense,
pkmn.spatk - oldSpAtk, pkmn.spdef - oldSpDef, pkmn.speed - oldSpeed)
)
pbTopRightWindow(
_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed)
)
end

View File

@@ -93,7 +93,7 @@ class Battle::Scene::PokemonDataBox < Sprite
@expBar.bitmap = @expBarBitmap.bitmap
@sprites["expBar"] = @expBar
# Create sprite wrapper that displays everything except the above
@contents = BitmapWrapper.new(@databoxBitmap.width, @databoxBitmap.height)
@contents = Bitmap.new(@databoxBitmap.width, @databoxBitmap.height)
self.bitmap = @contents
self.visible = false
self.z = 150 + ((@battler.index / 2) * 5)
@@ -420,7 +420,7 @@ class Battle::Scene::AbilitySplashBar < Sprite
@bgSprite.src_rect.y = (side == 0) ? 0 : @bgBitmap.height / 2
@bgSprite.src_rect.height = @bgBitmap.height / 2
# Create bitmap that displays the text
@contents = BitmapWrapper.new(@bgBitmap.width, @bgBitmap.height / 2)
@contents = Bitmap.new(@bgBitmap.width, @bgBitmap.height / 2)
self.bitmap = @contents
pbSetSystemFont(self.bitmap)
# Position the bar

View File

@@ -114,8 +114,11 @@ Battle::PokeBallEffects::ModifyCatchRate.add(:LEVELBALL, proc { |ball, catchRate
})
Battle::PokeBallEffects::ModifyCatchRate.add(:LUREBALL, proc { |ball, catchRate, battle, battler|
if $game_temp.encounter_type &&
GameData::EncounterType.get($game_temp.encounter_type).type == :fishing
multiplier = (Settings::NEW_POKE_BALL_CATCH_RATES) ? 5 : 3
catchRate *= multiplier if GameData::EncounterType.get($game_temp.encounter_type).type == :fishing
catchRate *= multiplier
end
next [catchRate, 255].min
})

View File

@@ -67,7 +67,7 @@ class Battle::Scene::SafariDataBox < Sprite
@databox = AnimatedBitmap.new("Graphics/UI/Battle/databox_safari")
self.x = Graphics.width - 232
self.y = Graphics.height - 184
@contents = BitmapWrapper.new(@databox.width, @databox.height)
@contents = Bitmap.new(@databox.width, @databox.height)
self.bitmap = @contents
self.visible = false
self.z = 50

View File

@@ -46,7 +46,7 @@ class DarknessSprite < Sprite
def initialize(viewport = nil)
super(viewport)
@darkness = BitmapWrapper.new(Graphics.width, Graphics.height)
@darkness = Bitmap.new(Graphics.width, Graphics.height)
@radius = radiusMin
self.bitmap = @darkness
self.z = 99998

View File

@@ -56,7 +56,7 @@ def pbFishing(hasEncounter, rodType = 1)
if hasEncounter && rand(100) < biteChance
$scene.spriteset.addUserAnimation(Settings::EXCLAMATION_ANIMATION_ID, $game_player.x, $game_player.y, true, 3)
frames = Graphics.frame_rate - rand(Graphics.frame_rate / 2) # 0.5-1 second
if !pbWaitForInput(msgWindow, message + "\r\n" + _INTL("Oh! A bite!"), frames)
if !pbWaitForInput(msgWindow, message + "\n" + _INTL("Oh! A bite!"), frames)
pbFishingEnd { pbMessageDisplay(msgWindow, _INTL("The Pokémon got away...")) }
break
end

View File

@@ -306,7 +306,7 @@ module RandomDungeon
@width.times do |x|
ret += TEXT_SYMBOLS[value(x, y)] || "\e[30m\e[41m?\e[0m"
end
ret += "\r\n"
ret += "\n"
end
return ret
end
@@ -1076,7 +1076,7 @@ EventHandlers.add(:on_game_map_setup, :random_dungeon,
#===============================================================================
MenuHandlers.add(:debug_menu, :test_random_dungeon, {
"name" => _INTL("Test Random Dungeon Generation"),
"parent" => :other_menu,
"parent" => :main,
"description" => _INTL("Generates a random dungeon and echoes it to the console."),
"effect" => proc {
tileset = :cave # :forest # :cave

View File

@@ -160,9 +160,9 @@ def pbChangeLevel(pkmn, new_level, scene)
special_attack_diff = pkmn.spatk - old_special_attack
special_defense_diff = pkmn.spdef - old_special_defense
speed_diff = pkmn.speed - old_speed
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pbTopRightWindow(_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
total_hp_diff, attack_diff, defense_diff, special_attack_diff, special_defense_diff, speed_diff), scene)
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pbTopRightWindow(_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
else
pkmn.changeHappiness("vitamin")
@@ -177,9 +177,9 @@ def pbChangeLevel(pkmn, new_level, scene)
special_attack_diff = pkmn.spatk - old_special_attack
special_defense_diff = pkmn.spdef - old_special_defense
speed_diff = pkmn.speed - old_speed
pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
pbTopRightWindow(_INTL("Max. HP<r>+{1}\nAttack<r>+{2}\nDefense<r>+{3}\nSp. Atk<r>+{4}\nSp. Def<r>+{5}\nSpeed<r>+{6}",
total_hp_diff, attack_diff, defense_diff, special_attack_diff, special_defense_diff, speed_diff), scene)
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pbTopRightWindow(_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
# Learn new moves upon level up
movelist = pkmn.getMoveList
@@ -258,9 +258,9 @@ def pbChangeExp(pkmn, new_exp, scene)
special_attack_diff = pkmn.spatk - old_special_attack
special_defense_diff = pkmn.spdef - old_special_defense
speed_diff = pkmn.speed - old_speed
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pbTopRightWindow(_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
total_hp_diff, attack_diff, defense_diff, special_attack_diff, special_defense_diff, speed_diff), scene)
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pbTopRightWindow(_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
else # Gains Exp
difference = new_exp - pkmn.exp
@@ -286,9 +286,9 @@ def pbChangeExp(pkmn, new_exp, scene)
special_attack_diff = pkmn.spatk - old_special_attack
special_defense_diff = pkmn.spdef - old_special_defense
speed_diff = pkmn.speed - old_speed
pbTopRightWindow(_INTL("Max. HP<r>+{1}\r\nAttack<r>+{2}\r\nDefense<r>+{3}\r\nSp. Atk<r>+{4}\r\nSp. Def<r>+{5}\r\nSpeed<r>+{6}",
pbTopRightWindow(_INTL("Max. HP<r>+{1}\nAttack<r>+{2}\nDefense<r>+{3}\nSp. Atk<r>+{4}\nSp. Def<r>+{5}\nSpeed<r>+{6}",
total_hp_diff, attack_diff, defense_diff, special_attack_diff, special_defense_diff, speed_diff), scene)
pbTopRightWindow(_INTL("Max. HP<r>{1}\r\nAttack<r>{2}\r\nDefense<r>{3}\r\nSp. Atk<r>{4}\r\nSp. Def<r>{5}\r\nSpeed<r>{6}",
pbTopRightWindow(_INTL("Max. HP<r>{1}\nAttack<r>{2}\nDefense<r>{3}\nSp. Atk<r>{4}\nSp. Def<r>{5}\nSpeed<r>{6}",
pkmn.totalhp, pkmn.attack, pkmn.defense, pkmn.spatk, pkmn.spdef, pkmn.speed), scene)
# Learn new moves upon level up
movelist = pkmn.getMoveList

View File

@@ -22,7 +22,7 @@ class ButtonEventScene < EventScene
addLabelForScreen(1, 134, 244, 352, _INTL("Take a screenshot. It is put in the same folder as the save file."))
addImageForScreen(2, 16, 158, "Graphics/UI/Controls help/help_arrows")
addLabelForScreen(2, 134, 100, 352, _INTL("Use the Arrow keys to move the main character.\r\n\r\nYou can also use the Arrow keys to select entries and navigate menus."))
addLabelForScreen(2, 134, 100, 352, _INTL("Use the Arrow keys to move the main character.\n\nYou can also use the Arrow keys to select entries and navigate menus."))
addImageForScreen(3, 16, 90, "Graphics/UI/Controls help/help_usekey")
addImageForScreen(3, 16, 236, "Graphics/UI/Controls help/help_backkey")

View File

@@ -175,18 +175,18 @@ class PokemonTrade_Scene
speciesname1 = GameData::Species.get(@pokemon.species).name
speciesname2 = GameData::Species.get(@pokemon2.species).name
pbMessageDisplay(@sprites["msgwindow"],
_ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}",
_ISPRINTF("{1:s}\nID: {2:05d} OT: {3:s}",
@pokemon.name, @pokemon.owner.public_id, @pokemon.owner.name) + "\\wtnp[0]") { pbUpdate }
pbMessageWaitForInput(@sprites["msgwindow"], 50, true) { pbUpdate }
pbPlayDecisionSE
pbScene1
pbMessageDisplay(@sprites["msgwindow"],
_INTL("For {1}'s {2},\r\n{3} sends {4}.", @trader1, speciesname1, @trader2, speciesname2) + "\1") { pbUpdate }
_INTL("For {1}'s {2},\n{3} sends {4}.", @trader1, speciesname1, @trader2, speciesname2) + "\1") { pbUpdate }
pbMessageDisplay(@sprites["msgwindow"],
_INTL("{1} bids farewell to {2}.", @trader2, speciesname2)) { pbUpdate }
pbScene2
pbMessageDisplay(@sprites["msgwindow"],
_ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}",
_ISPRINTF("{1:s}\nID: {2:05d} OT: {3:s}",
@pokemon2.name, @pokemon2.owner.public_id, @pokemon2.owner.name) + "\1") { pbUpdate }
pbMessageDisplay(@sprites["msgwindow"],
_INTL("Take good care of {1}.", speciesname2)) { pbUpdate }

View File

@@ -19,7 +19,7 @@ class PokegearButton < Sprite
else
@button = AnimatedBitmap.new("Graphics/UI/Pokegear/icon_button")
end
@contents = BitmapWrapper.new(@button.width, @button.height)
@contents = Bitmap.new(@button.width, @button.height)
self.bitmap = @contents
self.x = x - (@button.width / 2)
self.y = y

View File

@@ -12,7 +12,7 @@ class MapBottomSprite < Sprite
@mapname = ""
@maplocation = ""
@mapdetails = ""
self.bitmap = BitmapWrapper.new(Graphics.width, Graphics.height)
self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
pbSetSystemFont(self.bitmap)
refresh
end

View File

@@ -49,7 +49,7 @@ class PokemonLoadPanel < Sprite
return if disposed?
@refreshing = true
if !self.bitmap || self.bitmap.disposed?
self.bitmap = BitmapWrapper.new(@bgbitmap.width, 222)
self.bitmap = Bitmap.new(@bgbitmap.width, 222)
pbSetSystemFont(self.bitmap)
end
if @refreshBitmap

View File

@@ -17,7 +17,7 @@ class ReadyMenuButton < Sprite
else
@button = AnimatedBitmap.new("Graphics/UI/Ready Menu/icon_itembutton")
end
@contents = BitmapWrapper.new(@button.width, @button.height / 2)
@contents = Bitmap.new(@button.width, @button.height / 2)
self.bitmap = @contents
pbSetSystemFont(self.bitmap)
if @command[2]

View File

@@ -304,7 +304,7 @@ class PokemonBoxSprite < Sprite
pokemon = @storage[boxnumber, i]
@pokemonsprites[i] = PokemonBoxIcon.new(pokemon, viewport)
end
@contents = BitmapWrapper.new(324, 296)
@contents = Bitmap.new(324, 296)
self.bitmap = @contents
self.x = 184
self.y = 18
@@ -454,7 +454,7 @@ class PokemonBoxPartySprite < Sprite
pokemon = @party[i]
@pokemonsprites[i] = PokemonBoxIcon.new(pokemon, viewport) if pokemon
end
@contents = BitmapWrapper.new(172, 352)
@contents = Bitmap.new(172, 352)
self.bitmap = @contents
self.x = 182
self.y = Graphics.height - 352

View File

@@ -236,7 +236,7 @@ class PokemonMart_Scene
@sprites["qtywindow"].y = Graphics.height - 102 - @sprites["qtywindow"].height
itemwindow.refresh
end
@sprites["moneywindow"].text = _INTL("Money:\r\n<r>{1}", @adapter.getMoneyString)
@sprites["moneywindow"].text = _INTL("Money:\n<r>{1}", @adapter.getMoneyString)
end
def pbStartBuyOrSellScene(buying, stock, adapter)

View File

@@ -151,7 +151,7 @@ class BattlePointShop_Scene
@sprites["qtywindow"].y = Graphics.height - 102 - @sprites["qtywindow"].height
itemwindow.refresh
end
@sprites["battlepointwindow"].text = _INTL("Battle Points:\r\n<r>{1}", @adapter.getBPString)
@sprites["battlepointwindow"].text = _INTL("Battle Points:\n<r>{1}", @adapter.getBPString)
end
def pbStartScene(stock, adapter)

View File

@@ -390,7 +390,7 @@ class PokemonEntryScene2
pbDrawTextPositions(b, textPos)
@bitmaps[@@Characters.length + i] = b
end
underline_bitmap = BitmapWrapper.new(24, 6)
underline_bitmap = Bitmap.new(24, 6)
underline_bitmap.fill_rect(2, 2, 22, 4, Color.new(168, 184, 184))
underline_bitmap.fill_rect(0, 0, 22, 4, Color.new(16, 24, 32))
@bitmaps.push(underline_bitmap)

View File

@@ -46,7 +46,7 @@ class DuelWindow < Window_AdvancedTextPokemon
name_tag = shadowc3tag(PLAYER_TEXT_BASE, PLAYER_TEXT_SHADOW)
end
hp_tag = shadowc3tag(HP_TEXT_BASE, HP_TEXT_SHADOW)
self.text = name_tag + fmtescape(@name) + "\r\n" + hp_tag + _INTL("HP: {1}", @hp)
self.text = name_tag + fmtescape(@name) + "\n" + hp_tag + _INTL("HP: {1}", @hp)
end
end

View File

@@ -85,7 +85,7 @@ class TriadCard
end
def self.createBack(type = nil, noback = false)
bitmap = BitmapWrapper.new(80, 96)
bitmap = Bitmap.new(80, 96)
if !noback
cardbitmap = AnimatedBitmap.new("Graphics/UI/Triple Triad/card_opponent")
bitmap.blt(0, 0, cardbitmap.bitmap, Rect.new(0, 0, cardbitmap.width, cardbitmap.height))
@@ -103,7 +103,7 @@ class TriadCard
def createBitmap(owner)
return TriadCard.createBack if owner == 0
bitmap = BitmapWrapper.new(80, 96)
bitmap = Bitmap.new(80, 96)
if owner == 2 # Opponent
cardbitmap = AnimatedBitmap.new("Graphics/UI/Triple Triad/card_opponent")
else # Player
@@ -196,7 +196,7 @@ class TriadScene
@cardIndexes.push(i)
end
@sprites["overlay"] = Sprite.new(@viewport)
@sprites["overlay"].bitmap = BitmapWrapper.new(Graphics.width, Graphics.height)
@sprites["overlay"].bitmap = Bitmap.new(Graphics.width, Graphics.height)
pbSetSystemFont(@sprites["overlay"].bitmap)
pbDrawTextPositions(
@sprites["overlay"].bitmap,
@@ -204,7 +204,7 @@ class TriadScene
[@battle.playerName, Graphics.width - 52, 10, :center, Color.new(248, 248, 248), Color.new(96, 96, 96)]]
)
@sprites["score"] = Sprite.new(@viewport)
@sprites["score"].bitmap = BitmapWrapper.new(Graphics.width, Graphics.height)
@sprites["score"].bitmap = Bitmap.new(Graphics.width, Graphics.height)
pbSetSystemFont(@sprites["score"].bitmap)
pbBGMPlay("Triple Triad")
# Fade in all sprites
@@ -1067,7 +1067,7 @@ def pbBuyTriads
cmdwindow = Window_CommandPokemonEx.newWithSize(realcommands, 0, 0, Graphics.width / 2, Graphics.height)
cmdwindow.z = 99999
goldwindow = Window_UnformattedTextPokemon.newWithSize(
_INTL("Money:\r\n{1}", pbGetGoldString), 0, 0, 32, 32
_INTL("Money:\n{1}", pbGetGoldString), 0, 0, 32, 32
)
goldwindow.resizeToFit(goldwindow.text, Graphics.width)
goldwindow.x = Graphics.width - goldwindow.width
@@ -1125,7 +1125,7 @@ def pbBuyTriads
end
$PokemonGlobal.triads.add(item, quantity)
$player.money -= price
goldwindow.text = _INTL("Money:\r\n{1}", pbGetGoldString)
goldwindow.text = _INTL("Money:\n{1}", pbGetGoldString)
pbMessage(_INTL("Here you are! Thank you!") + "\\se[Mart buy item]")
end
end
@@ -1157,7 +1157,7 @@ def pbSellTriads
cmdwindow = Window_CommandPokemonEx.newWithSize(commands, 0, 0, Graphics.width / 2, Graphics.height)
cmdwindow.z = 99999
goldwindow = Window_UnformattedTextPokemon.newWithSize(
_INTL("Money:\r\n{1}", pbGetGoldString), 0, 0, 32, 32
_INTL("Money:\n{1}", pbGetGoldString), 0, 0, 32, 32
)
goldwindow.resizeToFit(goldwindow.text, Graphics.width)
goldwindow.x = Graphics.width - goldwindow.width
@@ -1218,7 +1218,7 @@ def pbSellTriads
price *= quantity
if pbConfirmMessage(_INTL("I can pay ${1}. Would that be OK?", price.to_s_formatted))
$player.money += price
goldwindow.text = _INTL("Money:\r\n{1}", pbGetGoldString)
goldwindow.text = _INTL("Money:\n{1}", pbGetGoldString)
$PokemonGlobal.triads.remove(item, quantity)
pbMessage(_INTL("Turned over the {1} card and received ${2}.", itemname, price.to_s_formatted) + "\\se[Mart buy item]")
commands = []

View File

@@ -7,9 +7,11 @@ class PokemonTilesetScene
TILESET_WIDTH = TILES_PER_ROW * TILE_SIZE
TILES_PER_AUTOTILE = 48
TILESET_START_ID = TILES_PER_ROW * TILES_PER_AUTOTILE
CURSOR_COLOR = Color.new(255, 0, 0)
TEXT_COLOR = Color.new(80, 80, 80)
TEXT_SHADOW_COLOR = Color.new(192, 192, 192)
TILE_BACKGROUND = Color.magenta
CURSOR_COLOR = Color.new(255, 0, 0) # Red
CURSOR_OUTLINE_COLOR = Color.white
TEXT_COLOR = Color.white
TEXT_SHADOW_COLOR = Color.black
def initialize
@tilesets_data = load_data("Data/Tilesets.rxdata")
@@ -17,11 +19,14 @@ class PokemonTilesetScene
@viewport.z = 99999
@sprites = {}
@sprites["title"] = Window_UnformattedTextPokemon.newWithSize(
_INTL("Tileset Editor\r\nA/S: SCROLL\r\nZ: MENU"),
_INTL("Tileset Editor\nA/S: SCROLL\nZ: MENU"),
TILESET_WIDTH, 0, Graphics.width - TILESET_WIDTH, 128, @viewport
)
@sprites["background"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
@sprites["tileset"] = BitmapSprite.new(TILESET_WIDTH, Graphics.height, @viewport)
@sprites["tileset"].z = 10
@sprites["overlay"] = BitmapSprite.new(Graphics.width, Graphics.height, @viewport)
@sprites["overlay"].z = 20
pbSetSystemFont(@sprites["overlay"].bitmap)
@visible_height = @sprites["tileset"].bitmap.height / TILE_SIZE
load_tileset(1)
@@ -68,11 +73,14 @@ class PokemonTilesetScene
end
def draw_tiles
@sprites["background"].bitmap.clear
@sprites["tileset"].bitmap.clear
@visible_height.times do |yy|
autotile_row = (@top_y == 0 && yy == 0) # Autotiles
id_y_offset = (autotile_row) ? 0 : TILESET_START_ID + ((@top_y + yy - 1) * TILES_PER_ROW)
break if @top_y + yy >= @height
TILES_PER_ROW.times do |xx|
@sprites["background"].bitmap.fill_rect(xx * TILE_SIZE, yy * TILE_SIZE, TILE_SIZE, TILE_SIZE, TILE_BACKGROUND)
id_x_offset = (autotile_row) ? xx * TILES_PER_AUTOTILE : xx
@tilehelper.bltTile(@sprites["tileset"].bitmap, xx * TILE_SIZE, yy * TILE_SIZE,
id_y_offset + id_x_offset)
@@ -88,33 +96,48 @@ class PokemonTilesetScene
TILES_PER_ROW.times do |xx|
tile_id = tile_ID_from_coordinates(xx, @top_y + yy)
terr = @tileset.terrain_tags[tile_id]
textpos.push([terr.to_s, (xx * TILE_SIZE) + (TILE_SIZE / 2), (yy * TILE_SIZE) + 6, :center, TEXT_COLOR, TEXT_SHADOW_COLOR])
next if terr == 0
textpos.push([terr.to_s, (xx * TILE_SIZE) + (TILE_SIZE / 2), (yy * TILE_SIZE) + 6,
:center, TEXT_COLOR, TEXT_SHADOW_COLOR, :outline])
end
end
pbDrawTextPositions(@sprites["overlay"].bitmap, textpos)
# Draw cursor
cursor_x = @x * TILE_SIZE
cursor_y = (@y - @top_y) * TILE_SIZE
@sprites["overlay"].bitmap.fill_rect(cursor_x, cursor_y, TILE_SIZE, 4, CURSOR_COLOR)
@sprites["overlay"].bitmap.fill_rect(cursor_x, cursor_y, 4, TILE_SIZE, CURSOR_COLOR)
@sprites["overlay"].bitmap.fill_rect(cursor_x, cursor_y + TILE_SIZE - 4, TILE_SIZE, 4, CURSOR_COLOR)
@sprites["overlay"].bitmap.fill_rect(cursor_x + TILE_SIZE - 4, cursor_y, 4, TILE_SIZE, CURSOR_COLOR)
draw_cursor
# Draw information about selected tile on right side
draw_tile_details
end
def draw_cursor
cursor_x = @x * TILE_SIZE
cursor_y = (@y - @top_y) * TILE_SIZE
cursor_width = TILE_SIZE
cursor_height = TILE_SIZE
bitmap = @sprites["overlay"].bitmap
bitmap.fill_rect(cursor_x - 2, cursor_y - 2, cursor_width + 4, 8, CURSOR_OUTLINE_COLOR)
bitmap.fill_rect(cursor_x - 2, cursor_y - 2, 8, cursor_height + 4, CURSOR_OUTLINE_COLOR)
bitmap.fill_rect(cursor_x - 2, cursor_y + cursor_height - 6, cursor_width + 4, 8, CURSOR_OUTLINE_COLOR)
bitmap.fill_rect(cursor_x + cursor_width - 6, cursor_y - 2, 8, cursor_height + 4, CURSOR_OUTLINE_COLOR)
bitmap.fill_rect(cursor_x, cursor_y, cursor_width, 4, CURSOR_COLOR)
bitmap.fill_rect(cursor_x, cursor_y, 4, cursor_height, CURSOR_COLOR)
bitmap.fill_rect(cursor_x, cursor_y + cursor_height - 4, cursor_width, 4, CURSOR_COLOR)
bitmap.fill_rect(cursor_x + cursor_width - 4, cursor_y, 4, cursor_height, CURSOR_COLOR)
end
def draw_tile_details
overlay = @sprites["overlay"].bitmap
tile_x = (Graphics.width * 3 / 4) - TILE_SIZE
tile_y = (Graphics.height / 2) - TILE_SIZE
tile_size = 4 # Size multiplier
tile_x = (Graphics.width * 3 / 4) - (TILE_SIZE * tile_size / 2)
tile_y = (Graphics.height / 2) - (TILE_SIZE * tile_size / 2)
tile_id = tile_ID_from_coordinates(@x, @y) || 0
# Draw tile (at 200% size)
@tilehelper.bltSmallTile(overlay, tile_x, tile_y, TILE_SIZE * 2, TILE_SIZE * 2, tile_id)
# Draw tile (at 400% size)
@sprites["background"].bitmap.fill_rect(tile_x, tile_y, TILE_SIZE * tile_size, TILE_SIZE * tile_size, TILE_BACKGROUND)
@tilehelper.bltSmallTile(overlay, tile_x, tile_y, TILE_SIZE * tile_size, TILE_SIZE * tile_size, tile_id)
# Draw box around tile image
overlay.fill_rect(tile_x - 1, tile_y - 1, (TILE_SIZE * 2) + 2, 1, Color.white)
overlay.fill_rect(tile_x - 1, tile_y - 1, 1, (TILE_SIZE * 2) + 2, Color.white)
overlay.fill_rect(tile_x - 1, tile_y + (TILE_SIZE * 2), (TILE_SIZE * 2) + 2, 1, Color.white)
overlay.fill_rect(tile_x + (TILE_SIZE * 2), tile_y - 1, 1, (TILE_SIZE * 2) + 2, Color.white)
overlay.fill_rect(tile_x - 1, tile_y - 1, (TILE_SIZE * tile_size) + 2, 1, Color.white)
overlay.fill_rect(tile_x - 1, tile_y - 1, 1, (TILE_SIZE * tile_size) + 2, Color.white)
overlay.fill_rect(tile_x - 1, tile_y + (TILE_SIZE * tile_size), (TILE_SIZE * tile_size) + 2, 1, Color.white)
overlay.fill_rect(tile_x + (TILE_SIZE * tile_size), tile_y - 1, 1, (TILE_SIZE * tile_size) + 2, Color.white)
# Write terrain tag info about selected tile
terrain_tag = @tileset.terrain_tags[tile_id] || 0
if GameData::TerrainTag.exists?(terrain_tag)
@@ -123,8 +146,10 @@ class PokemonTilesetScene
terrain_tag_name = terrain_tag.to_s
end
textpos = [
[_INTL("Terrain Tag:"), tile_x + TILE_SIZE, tile_y + (TILE_SIZE * 2) + 22, :center, Color.new(248, 248, 248), Color.new(40, 40, 40)],
[terrain_tag_name, tile_x + TILE_SIZE, tile_y + (TILE_SIZE * 2) + 54, :center, Color.new(248, 248, 248), Color.new(40, 40, 40)]
[_INTL("Terrain Tag:"), Graphics.width * 3 / 4, tile_y + (TILE_SIZE * tile_size) + 22,
:center, Color.new(248, 248, 248), Color.new(40, 40, 40)],
[terrain_tag_name, Graphics.width * 3 / 4, tile_y + (TILE_SIZE * tile_size) + 54,
:center, Color.new(248, 248, 248), Color.new(40, 40, 40)]
]
# Draw all text
pbDrawTextPositions(overlay, textpos)
@@ -176,9 +201,9 @@ class PokemonTilesetScene
elsif Input.repeat?(Input::RIGHT)
update_cursor_position(1, 0)
elsif Input.repeat?(Input::JUMPUP)
update_cursor_position(0, -@visible_height)
update_cursor_position(0, -@visible_height / 2)
elsif Input.repeat?(Input::JUMPDOWN)
update_cursor_position(0, @visible_height)
update_cursor_position(0, @visible_height / 2)
elsif Input.trigger?(Input::ACTION)
commands = [
_INTL("Go to bottom"),

View File

@@ -107,7 +107,7 @@ class RegionMapSprite
def createRegionMap(map)
town_map = GameData::TownMap.get(map)
bitmap = AnimatedBitmap.new("Graphics/UI/Town Map/#{town_map.filename}").deanimate
retbitmap = BitmapWrapper.new(bitmap.width / 2, bitmap.height / 2)
retbitmap = Bitmap.new(bitmap.width / 2, bitmap.height / 2)
retbitmap.stretch_blt(
Rect.new(0, 0, bitmap.width / 2, bitmap.height / 2),
bitmap,
@@ -350,12 +350,12 @@ class MapScreenScene
end
def helpWindow
helptext = _INTL("A: Add map to canvas") + "\r\n"
helptext += _INTL("DEL: Delete map from canvas") + "\r\n"
helptext += _INTL("S: Go to another map") + "\r\n"
helptext += _INTL("Click to select a map") + "\r\n"
helptext += _INTL("Double-click: Edit map's metadata") + "\r\n"
helptext += _INTL("Drag map to move it") + "\r\n"
helptext = _INTL("A: Add map to canvas") + "\n"
helptext += _INTL("DEL: Delete map from canvas") + "\n"
helptext += _INTL("S: Go to another map") + "\n"
helptext += _INTL("Click to select a map") + "\n"
helptext += _INTL("Double-click: Edit map's metadata") + "\n"
helptext += _INTL("Drag map to move it") + "\n"
helptext += _INTL("Arrow keys/drag canvas: Move around canvas")
title = Window_UnformattedTextPokemon.newWithSize(
helptext, 0, 0, Graphics.width * 8 / 10, Graphics.height, @viewport

View File

@@ -262,21 +262,21 @@ module Battle::DebugMixin
return ret if battler.nil?
# Battler index, name
ret += sprintf("[%d] %s", battler.index, battler.pbThis)
ret += "\r\n"
ret += "\n"
# Species
ret += _INTL("Species: {1}", GameData::Species.get(battler.species).name)
ret += "\r\n"
ret += "\n"
# Form number
ret += _INTL("Form: {1}", battler.form)
ret += "\r\n"
ret += "\n"
# Level, gender, shininess
ret += _INTL("Level {1}, {2}", battler.level,
(battler.pokemon.male?) ? "" : (battler.pokemon.female?) ? "" : _INTL("genderless"))
ret += ", " + _INTL("shiny") if battler.pokemon.shiny?
ret += "\r\n"
ret += "\n"
# HP
ret += _INTL("HP: {1}/{2} ({3}%)", battler.hp, battler.totalhp, (100.0 * battler.hp / battler.totalhp).to_i)
ret += "\r\n"
ret += "\n"
# Status
ret += _INTL("Status: {1}", GameData::Status.get(battler.status).name)
case battler.status
@@ -287,7 +287,7 @@ module Battle::DebugMixin
ret += " " + _INTL("(toxic, {1}/16)", battler.effects[PBEffects::Toxic])
end
end
ret += "\r\n"
ret += "\n"
# Stat stages
stages = []
GameData::Stat.each_battle do |stat|
@@ -299,10 +299,10 @@ module Battle::DebugMixin
stages.push(stage_text)
end
ret += _INTL("Stat stages: {1}", (stages.empty?) ? "-" : stages.join(", "))
ret += "\r\n"
ret += "\n"
# Ability
ret += _INTL("Ability: {1}", (battler.ability) ? battler.abilityName : "-")
ret += "\r\n"
ret += "\n"
# Held item
ret += _INTL("Item: {1}", (battler.item) ? battler.itemName : "-")
return ret
@@ -314,18 +314,18 @@ module Battle::DebugMixin
sp_data = pkmn.species_data
# Name, species
ret += sprintf("%s (%s)", pkmn.name, sp_data.name)
ret += "\r\n"
ret += "\n"
# Form number
ret += _INTL("Form: {1}", sp_data.form)
ret += "\r\n"
ret += "\n"
# Level, gender, shininess
ret += _INTL("Level {1}, {2}", pkmn.level,
(pkmn.male?) ? "" : (pkmn.female?) ? "" : _INTL("genderless"))
ret += ", " + _INTL("shiny") if pkmn.shiny?
ret += "\r\n"
ret += "\n"
# HP
ret += _INTL("HP: {1}/{2} ({3}%)", pkmn.hp, pkmn.totalhp, (100.0 * pkmn.hp / pkmn.totalhp).to_i)
ret += "\r\n"
ret += "\n"
# Status
ret += _INTL("Status: {1}", GameData::Status.get(pkmn.status).name)
case pkmn.status
@@ -334,10 +334,10 @@ module Battle::DebugMixin
when :POISON
ret += " " + _INTL("(toxic)") if pkmn.statusCount > 0
end
ret += "\r\n"
ret += "\n"
# Ability
ret += _INTL("Ability: {1}", pkmn.ability&.name || "-")
ret += "\r\n"
ret += "\n"
# Held item
ret += _INTL("Item: {1}", pkmn.item&.name || "-")
return ret

View File

@@ -252,10 +252,10 @@ MenuHandlers.add(:battle_debug_menu, :weather, {
msg = _INTL("Current weather: {1}", weather_data.name || _INTL("Unknown"))
if weather_data.id != :None
if battle.field.weatherDuration > 0
msg += "\r\n"
msg += "\n"
msg += _INTL("Duration : {1} more round(s)", battle.field.weatherDuration)
elsif battle.field.weatherDuration < 0
msg += "\r\n"
msg += "\n"
msg += _INTL("Duration : Infinite")
end
end
@@ -314,10 +314,10 @@ MenuHandlers.add(:battle_debug_menu, :terrain, {
msg = _INTL("Current terrain: {1}", terrain_data.name || _INTL("Unknown"))
if terrain_data.id != :None
if battle.field.terrainDuration > 0
msg += "\r\n"
msg += "\n"
msg += _INTL("Duration : {1} more round(s)", battle.field.terrainDuration)
elsif battle.field.terrainDuration < 0
msg += "\r\n"
msg += "\n"
msg += _INTL("Duration : Infinite")
end
end
@@ -373,7 +373,7 @@ MenuHandlers.add(:battle_debug_menu, :environment_time, {
loop do
environment_data = GameData::Environment.try_get(battle.environment)
msg = _INTL("Environment: {1}", environment_data.name || _INTL("Unknown"))
msg += "\r\n"
msg += "\n"
msg += _INTL("Time of day: {1}", [_INTL("Day"), _INTL("Evening"), _INTL("Night")][battle.time])
cmd = pbMessage("\\ts[]" + msg, [_INTL("Change environment"),
_INTL("Change time of day")], -1, nil, cmd)

View File

@@ -431,7 +431,7 @@ MenuHandlers.add(:battle_pokemon_debug_menu, :set_types, {
commands.push(_INTL("Extra type: {1}", extra_type_name))
types.push(extra_type)
msg = _INTL("Effective types: {1}", battler.pbTypes(true).map { |t| GameData::Type.get(t).name }.join("/"))
msg += "\r\n" + _INTL("(Change a type to itself to remove it.)")
msg += "\n" + _INTL("(Change a type to itself to remove it.)")
cmd = pbMessage("\\ts[]" + msg, commands, -1, nil, cmd)
break if cmd < 0
old_type = types[cmd]

View File

@@ -632,7 +632,7 @@ class TrainerBattleLister
tr_data = GameData::Trainer.get(@ids[index][0], @ids[index][1], @ids[index][2])
if tr_data
tr_data.pokemon.each_with_index do |pkmn, i|
text += "\r\n" if i > 0
text += "\n" if i > 0
text += sprintf("%s Lv.%d", GameData::Species.get(pkmn[:species]).real_name, pkmn[:level])
end
end

View File

@@ -40,12 +40,12 @@ module FileLineData
def self.linereport
if @section
if @key.nil?
return _INTL("File {1}, section {2}\r\n{3}", @file, @section, @value) + "\r\n\r\n"
return _INTL("File {1}, section {2}\n{3}", @file, @section, @value) + "\n\n"
else
return _INTL("File {1}, section {2}, key {3}\r\n{4}", @file, @section, @key, @value) + "\r\n\r\n"
return _INTL("File {1}, section {2}, key {3}\n{4}", @file, @section, @key, @value) + "\n\n"
end
else
return _INTL("File {1}, line {2}\r\n{3}", @file, @lineno, @linedata) + "\r\n\r\n"
return _INTL("File {1}, line {2}\n{3}", @file, @lineno, @linedata) + "\n\n"
end
end
end
@@ -112,11 +112,11 @@ module Compiler
else
if sectionname.nil?
FileLineData.setLine(line, lineno)
raise _INTL("Expected a section at the beginning of the file. This error may also occur if the file was not saved in UTF-8.\r\n{1}", FileLineData.linereport)
raise _INTL("Expected a section at the beginning of the file. This error may also occur if the file was not saved in UTF-8.\n{1}", FileLineData.linereport)
end
if !line[/^\s*(\w+)\s*=\s*(.*)$/]
FileLineData.setSection(sectionname, nil, line)
raise _INTL("Bad line syntax (expected syntax like XXX=YYY)\r\n{1}", FileLineData.linereport)
raise _INTL("Bad line syntax (expected syntax like XXX=YYY)\n{1}", FileLineData.linereport)
end
r1 = $~[1]
r2 = $~[2]
@@ -316,7 +316,7 @@ module Compiler
end
str[0, fieldbytes] = ""
if !str[/^\s*,/] && !str[/^\s*$/]
raise _INTL("Invalid quoted field (in: {1})\r\n{2}", str, FileLineData.linereport)
raise _INTL("Invalid quoted field (in: {1})\n{2}", str, FileLineData.linereport)
end
str[0, str.length] = $~.post_match
else
@@ -337,14 +337,14 @@ module Compiler
field = csvfield!(str)
return true if field[/^(?:1|TRUE|YES|Y)$/i]
return false if field[/^(?:0|FALSE|NO|N)$/i]
raise _INTL("Field {1} is not a Boolean value (true, false, 1, 0)\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field {1} is not a Boolean value (true, false, 1, 0)\n{2}", field, FileLineData.linereport)
end
# Unused
def csvInt!(str, _line = -1)
ret = csvfield!(str)
if !ret[/^\-?\d+$/]
raise _INTL("Field {1} is not an integer\r\n{2}", ret, FileLineData.linereport)
raise _INTL("Field {1} is not an integer\n{2}", ret, FileLineData.linereport)
end
return ret.to_i
end
@@ -353,7 +353,7 @@ module Compiler
def csvPosInt!(str, _line = -1)
ret = csvfield!(str)
if !ret[/^\d+$/]
raise _INTL("Field {1} is not a positive integer\r\n{2}", ret, FileLineData.linereport)
raise _INTL("Field {1} is not a positive integer\n{2}", ret, FileLineData.linereport)
end
return ret.to_i
end
@@ -361,7 +361,7 @@ module Compiler
# Unused
def csvFloat!(str, _line = -1)
ret = csvfield!(str)
return Float(ret) rescue raise _INTL("Field {1} is not a number\r\n{2}", ret, FileLineData.linereport)
return Float(ret) rescue raise _INTL("Field {1} is not a number\n{2}", ret, FileLineData.linereport)
end
# Unused
@@ -385,45 +385,45 @@ module Compiler
case schema.downcase
when "i" # Integer
if !value[/^\-?\d+$/]
raise _INTL("Field {1} is not an integer\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field {1} is not an integer\n{2}", value, FileLineData.linereport)
end
return value.to_i
when "u" # Positive integer or zero
if !value[/^\d+$/]
raise _INTL("Field {1} is not a positive integer or 0\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field {1} is not a positive integer or 0\n{2}", value, FileLineData.linereport)
end
return value.to_i
when "v" # Positive integer
if !value[/^\d+$/]
raise _INTL("Field {1} is not a positive integer\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field {1} is not a positive integer\n{2}", value, FileLineData.linereport)
end
if value.to_i == 0
raise _INTL("Field '{1}' must be greater than 0\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field '{1}' must be greater than 0\n{2}", value, FileLineData.linereport)
end
return value.to_i
when "x" # Hexadecimal number
if !value[/^[A-F0-9]+$/i]
raise _INTL("Field '{1}' is not a hexadecimal number\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field '{1}' is not a hexadecimal number\n{2}", value, FileLineData.linereport)
end
return value.hex
when "f" # Floating point number
if !value[/^\-?^\d*\.?\d*$/]
raise _INTL("Field {1} is not a number\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field {1} is not a number\n{2}", value, FileLineData.linereport)
end
return value.to_f
when "b" # Boolean
return true if value[/^(?:1|TRUE|YES|Y)$/i]
return false if value[/^(?:0|FALSE|NO|N)$/i]
raise _INTL("Field {1} is not a Boolean value (true, false, 1, 0)\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field {1} is not a Boolean value (true, false, 1, 0)\n{2}", value, FileLineData.linereport)
when "n" # Name
if !value[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\r\nunderscores and can't begin with a number.\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", value, FileLineData.linereport)
end
when "s" # String
when "q" # Unformatted text
when "m" # Symbol
if !value[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\r\nunderscores and can't begin with a number.\r\n{2}", value, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", value, FileLineData.linereport)
end
return value.to_sym
when "e" # Enumerable
@@ -440,10 +440,10 @@ module Compiler
when Module
begin
if nil_or_empty?(ret) || !enumer.const_defined?(ret)
raise _INTL("Undefined value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Undefined value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
end
rescue NameError
raise _INTL("Incorrect value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Incorrect value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
end
return enumer.const_get(ret.to_sym)
when Symbol, String
@@ -451,36 +451,36 @@ module Compiler
enumer = GameData.const_get(enumer.to_sym)
begin
if nil_or_empty?(ret) || !enumer.exists?(ret.to_sym)
raise _INTL("Undefined value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Undefined value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
end
rescue NameError
raise _INTL("Incorrect value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Incorrect value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
end
return ret.to_sym
end
enumer = Object.const_get(enumer.to_sym)
begin
if nil_or_empty?(ret) || !enumer.const_defined?(ret)
raise _INTL("Undefined value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Undefined value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
end
rescue NameError
raise _INTL("Incorrect value {1} in {2}\r\n{3}", ret, enumer.name, FileLineData.linereport)
raise _INTL("Incorrect value {1} in {2}\n{3}", ret, enumer.name, FileLineData.linereport)
end
return enumer.const_get(ret.to_sym)
when Array
idx = findIndex(enumer) { |item| ret == item }
if idx < 0
raise _INTL("Undefined value {1} (expected one of: {2})\r\n{3}", ret, enumer.inspect, FileLineData.linereport)
raise _INTL("Undefined value {1} (expected one of: {2})\n{3}", ret, enumer.inspect, FileLineData.linereport)
end
return idx
when Hash
value = enumer[ret]
if value.nil?
raise _INTL("Undefined value {1} (expected one of: {2})\r\n{3}", ret, enumer.keys.inspect, FileLineData.linereport)
raise _INTL("Undefined value {1} (expected one of: {2})\n{3}", ret, enumer.keys.inspect, FileLineData.linereport)
end
return value
end
raise _INTL("Enumeration not defined\r\n{1}", FileLineData.linereport)
raise _INTL("Enumeration not defined\n{1}", FileLineData.linereport)
end
# Unused
@@ -540,7 +540,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\-?\d+$/]
raise _INTL("Field {1} is not an integer\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field {1} is not an integer\n{2}", field, FileLineData.linereport)
else
subrecord.push(field.to_i)
end
@@ -551,29 +551,29 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\d+$/]
raise _INTL("Field '{1}' must be 0 or greater\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must be 0 or greater\n{2}", field, FileLineData.linereport)
else
subrecord.push(field.to_i)
end
when "v" # Positive integer
field = csvPosInt!(rec, lineno)
raise _INTL("Field '{1}' must be greater than 0\r\n{2}", field, FileLineData.linereport) if field == 0
raise _INTL("Field '{1}' must be greater than 0\n{2}", field, FileLineData.linereport) if field == 0
subrecord.push(field)
when "V" # Optional positive integer
field = csvfield!(rec)
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\d+$/]
raise _INTL("Field '{1}' must be greater than 0\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must be greater than 0\n{2}", field, FileLineData.linereport)
elsif field.to_i == 0
raise _INTL("Field '{1}' must be greater than 0\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must be greater than 0\n{2}", field, FileLineData.linereport)
else
subrecord.push(field.to_i)
end
when "x" # Hexadecimal number
field = csvfield!(rec)
if !field[/^[A-Fa-f0-9]+$/]
raise _INTL("Field '{1}' is not a hexadecimal number\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not a hexadecimal number\n{2}", field, FileLineData.linereport)
end
subrecord.push(field.hex)
when "X" # Optional hexadecimal number
@@ -581,7 +581,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^[A-Fa-f0-9]+$/]
raise _INTL("Field '{1}' is not a hexadecimal number\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' is not a hexadecimal number\n{2}", field, FileLineData.linereport)
else
subrecord.push(field.hex)
end
@@ -592,7 +592,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^\-?^\d*\.?\d*$/]
raise _INTL("Field {1} is not a floating point number\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field {1} is not a floating point number\n{2}", field, FileLineData.linereport)
else
subrecord.push(field.to_f)
end
@@ -610,7 +610,7 @@ module Compiler
when "n" # Name
field = csvfield!(rec)
if !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\r\nunderscores and can't begin with a number.\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
end
subrecord.push(field)
when "N" # Optional name
@@ -618,7 +618,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\r\nunderscores and can't begin with a number.\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
else
subrecord.push(field)
end
@@ -640,7 +640,7 @@ module Compiler
when "m" # Symbol
field = csvfield!(rec)
if !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\r\nunderscores and can't begin with a number.\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
end
subrecord.push(field.to_sym)
when "M" # Optional symbol
@@ -648,7 +648,7 @@ module Compiler
if nil_or_empty?(field)
subrecord.push(nil)
elsif !field[/^(?![0-9])\w+$/]
raise _INTL("Field '{1}' must contain only letters, digits, and\r\nunderscores and can't begin with a number.\r\n{2}", field, FileLineData.linereport)
raise _INTL("Field '{1}' must contain only letters, digits, and\nunderscores and can't begin with a number.\n{2}", field, FileLineData.linereport)
else
subrecord.push(field.to_sym)
end
@@ -851,7 +851,7 @@ module Compiler
clonitem.sub!(/\s*$/, "")
itm = GameData::Item.try_get(clonitem)
if !itm
raise _INTL("Undefined item constant name: {1}\r\nMake sure the item is defined in PBS/items.txt.\r\n{2}", item, FileLineData.linereport)
raise _INTL("Undefined item constant name: {1}\nMake sure the item is defined in PBS/items.txt.\n{2}", item, FileLineData.linereport)
end
return itm.id
end
@@ -864,7 +864,7 @@ module Compiler
clonspecies = "NIDORANfE" if clonspecies == "NIDORANFE"
spec = GameData::Species.try_get(clonspecies)
if !spec
raise _INTL("Undefined species constant name: {1}\r\nMake sure the species is defined in PBS/pokemon.txt.\r\n{2}", species, FileLineData.linereport)
raise _INTL("Undefined species constant name: {1}\nMake sure the species is defined in PBS/pokemon.txt.\n{2}", species, FileLineData.linereport)
end
return spec.id
end
@@ -876,7 +876,7 @@ module Compiler
mov = GameData::Move.try_get(clonmove)
if !mov
return nil if skip_unknown
raise _INTL("Undefined move constant name: {1}\r\nMake sure the move is defined in PBS/moves.txt.\r\n{2}", move, FileLineData.linereport)
raise _INTL("Undefined move constant name: {1}\nMake sure the move is defined in PBS/moves.txt.\n{2}", move, FileLineData.linereport)
end
return mov.id
end
@@ -888,7 +888,7 @@ module Compiler
clonnature.sub!(/\s*$/, "")
nat = GameData::Nature.try_get(clonnature)
if !nat
raise _INTL("Undefined nature constant name: {1}\r\nMake sure the nature is defined in the scripts.\r\n{2}", nature, FileLineData.linereport)
raise _INTL("Undefined nature constant name: {1}\nMake sure the nature is defined in the scripts.\n{2}", nature, FileLineData.linereport)
end
return nat.id
end
@@ -900,7 +900,7 @@ module Compiler
clontype.sub!(/\s*$/, "")
typ = GameData::TrainerType.try_get(clontype)
if !typ
raise _INTL("Undefined Trainer type constant name: {1}\r\nMake sure the trainer type is defined in PBS/trainer_types.txt.\r\n{2}", type, FileLineData.linereport)
raise _INTL("Undefined Trainer type constant name: {1}\nMake sure the trainer type is defined in PBS/trainer_types.txt.\n{2}", type, FileLineData.linereport)
end
return typ.id
end

View File

@@ -54,7 +54,7 @@ module Compiler
# Validate and modify the compiled data
yield false, data_hash if block_given?
if game_data.exists?(data_hash[:id])
raise _INTL("Section name '{1}' is used twice.\r\n{2}", data_hash[:id], FileLineData.linereport)
raise _INTL("Section name '{1}' is used twice.\n{2}", data_hash[:id], FileLineData.linereport)
end
# Add section's data to records
game_data.register(data_hash)
@@ -116,19 +116,19 @@ module Compiler
FileLineData.setLine(line, lineno)
record = get_csv_record(line, schema)
if !pbRgssExists?(sprintf("Data/Map%03d.rxdata", record[0]))
print _INTL("Warning: Map {1}, as mentioned in the map connection data, was not found.\r\n{2}", record[0], FileLineData.linereport)
print _INTL("Warning: Map {1}, as mentioned in the map connection data, was not found.\n{2}", record[0], FileLineData.linereport)
elsif !pbRgssExists?(sprintf("Data/Map%03d.rxdata", record[3]))
print _INTL("Warning: Map {1}, as mentioned in the map connection data, was not found.\r\n{2}", record[3], FileLineData.linereport)
print _INTL("Warning: Map {1}, as mentioned in the map connection data, was not found.\n{2}", record[3], FileLineData.linereport)
end
case record[1]
when "N"
raise _INTL("North side of first map must connect with south side of second map\r\n{1}", FileLineData.linereport) if record[4] != "S"
raise _INTL("North side of first map must connect with south side of second map\n{1}", FileLineData.linereport) if record[4] != "S"
when "S"
raise _INTL("South side of first map must connect with north side of second map\r\n{1}", FileLineData.linereport) if record[4] != "N"
raise _INTL("South side of first map must connect with north side of second map\n{1}", FileLineData.linereport) if record[4] != "N"
when "E"
raise _INTL("East side of first map must connect with west side of second map\r\n{1}", FileLineData.linereport) if record[4] != "W"
raise _INTL("East side of first map must connect with west side of second map\n{1}", FileLineData.linereport) if record[4] != "W"
when "W"
raise _INTL("West side of first map must connect with east side of second map\r\n{1}", FileLineData.linereport) if record[4] != "E"
raise _INTL("West side of first map must connect with east side of second map\n{1}", FileLineData.linereport) if record[4] != "E"
end
records.push(record)
end
@@ -210,10 +210,10 @@ module Compiler
def validate_compiled_move(hash)
if (hash[:category] || 2) == 2 && (hash[:power] || 0) != 0
raise _INTL("Move {1} is defined as a Status move with a non-zero base damage.\r\n{2}",
raise _INTL("Move {1} is defined as a Status move with a non-zero base damage.\n{2}",
hash[:real_name], FileLineData.linereport)
elsif (hash[:category] || 2) != 2 && (hash[:power] || 0) == 0
print _INTL("Warning: Move {1} is defined as Physical or Special but has a base damage of 0. Changing it to a Status move.\r\n{2}",
print _INTL("Warning: Move {1} is defined as Physical or Special but has a base damage of 0. Changing it to a Status move.\n{2}",
hash[:real_name], FileLineData.linereport)
hash[:category] = 2
end
@@ -424,7 +424,7 @@ module Compiler
# Validate and modify the compiled data
validate_compiled_pokemon_form(data_hash)
if GameData::Species.exists?(data_hash[:id])
raise _INTL("Section name '{1}' is used twice.\r\n{2}", data_hash[:id], FileLineData.linereport)
raise _INTL("Section name '{1}' is used twice.\n{2}", data_hash[:id], FileLineData.linereport)
end
# Add section's data to records
GameData::Species.register(data_hash)
@@ -443,9 +443,9 @@ module Compiler
hash[:form] = hash[:id][1]
hash[:id] = sprintf("%s_%d", hash[:species].to_s, hash[:form]).to_sym
if !GameData::Species.exists?(hash[:species])
raise _INTL("Undefined species ID '{1}'.\r\n{3}", hash[:species], FileLineData.linereport)
raise _INTL("Undefined species ID '{1}'.\n{3}", hash[:species], FileLineData.linereport)
elsif GameData::Species.exists?(hash[:id])
raise _INTL("Form {1} for species ID {2} is defined twice.\r\n{3}", hash[:form], hash[:species], FileLineData.linereport)
raise _INTL("Form {1} for species ID {2} is defined twice.\n{3}", hash[:form], hash[:species], FileLineData.linereport)
end
# Perform the same validations on this form as for a regular species
validate_compiled_pokemon(hash)
@@ -477,6 +477,20 @@ module Compiler
end
def validate_all_compiled_pokemon_forms
# Enumerate all evolution parameters (this couldn't be done earlier)
GameData::Species.each do |species|
FileLineData.setSection(species.id.to_s, "Evolutions", nil) # For error reporting
species.evolutions.each do |evo|
param_type = GameData::Evolution.get(evo[1]).parameter
if param_type.nil?
evo[2] = nil
elsif param_type == Integer
evo[2] = cast_csv_value(evo[2], "u") if evo[2].is_a?(String)
elsif param_type != String
evo[2] = cast_csv_value(evo[2], "e", param_type) if evo[2].is_a?(String)
end
end
end
# Add prevolution "evolution" entry for all evolved species
all_evos = {}
GameData::Species.each do |species| # Build a hash of prevolutions for each species
@@ -573,11 +587,11 @@ module Compiler
if line[/^\s*\[\s*(\d+)\s*\]\s*$/]
section = $~[1].to_i
if dex_lists[section]
raise _INTL("Dex list number {1} is defined at least twice.\r\n{2}", section, FileLineData.linereport)
raise _INTL("Dex list number {1} is defined at least twice.\n{2}", section, FileLineData.linereport)
end
dex_lists[section] = []
else
raise _INTL("Expected a section at the beginning of the file.\r\n{1}", FileLineData.linereport) if !section
raise _INTL("Expected a section at the beginning of the file.\n{1}", FileLineData.linereport) if !section
species_list = line.split(",")
species_list.each do |species|
next if !species || species.empty?
@@ -594,7 +608,7 @@ module Compiler
next if list == unique_list
list.each_with_index do |s, i|
next if unique_list[i] == s
raise _INTL("Dex list number {1} has species {2} listed twice.\r\n{3}", index, s, FileLineData.linereport)
raise _INTL("Dex list number {1} has species {2} listed twice.\n{3}", index, s, FileLineData.linereport)
end
end
# Save all data
@@ -646,17 +660,17 @@ module Compiler
if current_type && line[/^\d+,/] # Species line
values = line.split(",").collect! { |v| v.strip }
if !values || values.length < 3
raise _INTL("Expected a species entry line for encounter type {1} for map '{2}', got \"{3}\" instead.\r\n{4}",
raise _INTL("Expected a species entry line for encounter type {1} for map '{2}', got \"{3}\" instead.\n{4}",
GameData::EncounterType.get(current_type).real_name, encounter_hash[:map], line, FileLineData.linereport)
end
values = get_csv_record(line, [nil, "vevV", nil, :Species])
values[3] = values[2] if !values[3]
if values[2] > max_level
raise _INTL("Level number {1} is not valid (max. {2}).\r\n{3}", values[2], max_level, FileLineData.linereport)
raise _INTL("Level number {1} is not valid (max. {2}).\n{3}", values[2], max_level, FileLineData.linereport)
elsif values[3] > max_level
raise _INTL("Level number {1} is not valid (max. {2}).\r\n{3}", values[3], max_level, FileLineData.linereport)
raise _INTL("Level number {1} is not valid (max. {2}).\n{3}", values[3], max_level, FileLineData.linereport)
elsif values[2] > values[3]
raise _INTL("Minimum level is greater than maximum level: {1}\r\n{2}", line, FileLineData.linereport)
raise _INTL("Minimum level is greater than maximum level: {1}\n{2}", line, FileLineData.linereport)
end
encounter_hash[:types][current_type].push(values)
elsif line[/^\[\s*(.+)\s*\]$/] # Map ID line
@@ -685,7 +699,7 @@ module Compiler
# Raise an error if a map/version combo is used twice
key = sprintf("%s_%d", map_number, map_version).to_sym
if GameData::Encounter::DATA[key]
raise _INTL("Encounters for map '{1}' are defined twice.\r\n{2}", map_number, FileLineData.linereport)
raise _INTL("Encounters for map '{1}' are defined twice.\n{2}", map_number, FileLineData.linereport)
end
step_chances = {}
# Construct encounter hash
@@ -699,7 +713,7 @@ module Compiler
}
current_type = nil
elsif !encounter_hash # File began with something other than a map ID line
raise _INTL("Expected a map number, got \"{1}\" instead.\r\n{2}", line, FileLineData.linereport)
raise _INTL("Expected a map number, got \"{1}\" instead.\n{2}", line, FileLineData.linereport)
else
# Check if line is an encounter method name or not
values = line.split(",").collect! { |v| v.strip }
@@ -709,7 +723,7 @@ module Compiler
step_chances[current_type] ||= GameData::EncounterType.get(current_type).trigger_chance
encounter_hash[:types][current_type] = []
else
raise _INTL("Undefined encounter type \"{1}\" for map '{2}'.\r\n{3}",
raise _INTL("Undefined encounter type \"{1}\" for map '{2}'.\n{3}",
line, encounter_hash[:map], FileLineData.linereport)
end
end
@@ -800,7 +814,7 @@ module Compiler
elsif line[/^\s*(\w+)\s*=\s*(.*)$/]
# XXX=YYY lines
if !data_hash
raise _INTL("Expected a section at the beginning of the file.\r\n{1}", FileLineData.linereport)
raise _INTL("Expected a section at the beginning of the file.\n{1}", FileLineData.linereport)
end
key = $~[1]
if schema[key] # Property of the trainer
@@ -816,7 +830,7 @@ module Compiler
end
elsif sub_schema[key] # Property of a Pokémon
if !current_pkmn
raise _INTL("Pokémon hasn't been defined yet!\r\n{1}", FileLineData.linereport)
raise _INTL("Pokémon hasn't been defined yet!\n{1}", FileLineData.linereport)
end
current_pkmn[sub_schema[key][0]] = get_csv_record($~[2], sub_schema[key])
end
@@ -843,18 +857,18 @@ module Compiler
hash[:version] = hash[:id][2]
# Ensure the trainer has at least one Pokémon
if hash[:pokemon].empty?
raise _INTL("Trainer with ID {1} has no Pokémon.\r\n{2}", hash[:id], FileLineData.linereport)
raise _INTL("Trainer with ID {1} has no Pokémon.\n{2}", hash[:id], FileLineData.linereport)
end
max_level = GameData::GrowthRate.max_level
hash[:pokemon].each do |pkmn|
# Ensure valid level
if pkmn[:level] > max_level
raise _INTL("Invalid Pokémon level {1} (must be 1-{2}).\r\n{3}",
raise _INTL("Invalid Pokémon level {1} (must be 1-{2}).\n{3}",
pkmn[:level], max_level, FileLineData.linereport)
end
# Ensure valid name length
if pkmn[:real_name] && pkmn[:real_name].length > Pokemon::MAX_NAME_SIZE
raise _INTL("Invalid Pokémon nickname: {1} (must be 1-{2} characters).\r\n{3}",
raise _INTL("Invalid Pokémon nickname: {1} (must be 1-{2} characters).\n{3}",
pkmn[:real_name], Pokemon::MAX_NAME_SIZE, FileLineData.linereport)
end
# Ensure no duplicate moves
@@ -866,7 +880,7 @@ module Compiler
next if s.pbs_order < 0
iv_hash[s.id] = pkmn[:iv][s.pbs_order] || pkmn[:iv][0]
if iv_hash[s.id] > Pokemon::IV_STAT_LIMIT
raise _INTL("Invalid IV: {1} (must be 0-{2}).\r\n{3}",
raise _INTL("Invalid IV: {1} (must be 0-{2}).\n{3}",
iv_hash[s.id], Pokemon::IV_STAT_LIMIT, FileLineData.linereport)
end
end
@@ -881,26 +895,26 @@ module Compiler
ev_hash[s.id] = pkmn[:ev][s.pbs_order] || pkmn[:ev][0]
ev_total += ev_hash[s.id]
if ev_hash[s.id] > Pokemon::EV_STAT_LIMIT
raise _INTL("Invalid EV: {1} (must be 0-{2}).\r\n{3}",
raise _INTL("Invalid EV: {1} (must be 0-{2}).\n{3}",
ev_hash[s.id], Pokemon::EV_STAT_LIMIT, FileLineData.linereport)
end
end
pkmn[:ev] = ev_hash
if ev_total > Pokemon::EV_LIMIT
raise _INTL("Invalid EV set (must sum to {1} or less).\r\n{2}",
raise _INTL("Invalid EV set (must sum to {1} or less).\n{2}",
Pokemon::EV_LIMIT, FileLineData.linereport)
end
end
# Ensure valid happiness
if pkmn[:happiness]
if pkmn[:happiness] > 255
raise _INTL("Bad happiness: {1} (must be 0-255).\r\n{2}", pkmn[:happiness], FileLineData.linereport)
raise _INTL("Bad happiness: {1} (must be 0-255).\n{2}", pkmn[:happiness], FileLineData.linereport)
end
end
# Ensure valid Poké Ball
if pkmn[:poke_ball]
if !GameData::Item.get(pkmn[:poke_ball]).is_poke_ball?
raise _INTL("Value {1} isn't a defined Poké Ball.\r\n{2}", pkmn[:poke_ball], FileLineData.linereport)
raise _INTL("Value {1} isn't a defined Poké Ball.\n{2}", pkmn[:poke_ball], FileLineData.linereport)
end
end
end
@@ -965,10 +979,10 @@ module Compiler
rsection[schema[0]] = record
end
if !rsection[0]
raise _INTL("No trainer data file given in section {1}.\r\n{2}", name, FileLineData.linereport)
raise _INTL("No trainer data file given in section {1}.\n{2}", name, FileLineData.linereport)
end
if !rsection[1]
raise _INTL("No trainer data file given in section {1}.\r\n{2}", name, FileLineData.linereport)
raise _INTL("No trainer data file given in section {1}.\n{2}", name, FileLineData.linereport)
end
rsection[3] = rsection[0]
rsection[4] = rsection[1]
@@ -1097,12 +1111,12 @@ module Compiler
if data_hash[:id] == 0
validate_compiled_global_metadata(data_hash)
if GameData::Metadata.exists?(data_hash[:id])
raise _INTL("Global metadata ID '{1}' is used twice.\r\n{2}", data_hash[:id], FileLineData.linereport)
raise _INTL("Global metadata ID '{1}' is used twice.\n{2}", data_hash[:id], FileLineData.linereport)
end
else
validate_compiled_player_metadata(data_hash)
if GameData::PlayerMetadata.exists?(data_hash[:id])
raise _INTL("Player metadata ID '{1}' is used twice.\r\n{2}", data_hash[:id], FileLineData.linereport)
raise _INTL("Player metadata ID '{1}' is used twice.\n{2}", data_hash[:id], FileLineData.linereport)
end
end
# Add section's data to records
@@ -1123,7 +1137,7 @@ module Compiler
def validate_compiled_global_metadata(hash)
if hash[:home].nil?
raise _INTL("The entry 'Home' is required in metadata.txt section 0.\r\n{1}", FileLineData.linereport)
raise _INTL("The entry 'Home' is required in metadata.txt section 0.\n{1}", FileLineData.linereport)
end
end
@@ -1134,11 +1148,11 @@ module Compiler
def validate_all_compiled_metadata
# Ensure global metadata is defined
if !GameData::Metadata.exists?(0)
raise _INTL("Global metadata is not defined in metadata.txt but should be.\r\n{1}", FileLineData.linereport)
raise _INTL("Global metadata is not defined in metadata.txt but should be.\n{1}", FileLineData.linereport)
end
# Ensure player character 1's metadata is defined
if !GameData::PlayerMetadata.exists?(1)
raise _INTL("Metadata for player character 1 is not defined in metadata.txt but should be.\r\n{1}", FileLineData.linereport)
raise _INTL("Metadata for player character 1 is not defined in metadata.txt but should be.\n{1}", FileLineData.linereport)
end
# Get storage creator's name for translating
storage_creator = [GameData::Metadata.get.real_storage_creator]
@@ -1157,7 +1171,7 @@ module Compiler
def validate_compiled_map_metadata(hash)
# Give the map its RMXP map name if it doesn't define its own
if nil_or_empty?(hash[:real_name])
hash[:real_name] = pbLoadMapInfos[id].name
hash[:real_name] = pbLoadMapInfos[hash[:id]].name
end
end
@@ -1202,7 +1216,7 @@ module Compiler
hash[:id] = sprintf("%s_%d", hash[:area].to_s, hash[:version]).to_sym
end
if GameData::DungeonParameters.exists?(hash[:id])
raise _INTL("Version {1} of dungeon area {2} is defined twice.\r\n{3}", hash[:version], hash[:area], FileLineData.linereport)
raise _INTL("Version {1} of dungeon area {2} is defined twice.\n{3}", hash[:version], hash[:area], FileLineData.linereport)
end
end

View File

@@ -72,7 +72,7 @@
// Sync screen redraws to the monitor refresh rate
// (default: disabled)
//
// "vsync": false,
"vsync": true,
// Specify the window width on startup. If set to 0,