mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-08 05:34:58 +00:00
Moved compiler methods into module Compiler, moved call to pbSetUpSystem into Main
This commit is contained in:
424
Data/Scripts/021_Debug/012_Editor_SpritePosEditor.rb
Normal file
424
Data/Scripts/021_Debug/012_Editor_SpritePosEditor.rb
Normal file
@@ -0,0 +1,424 @@
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
def findBottom(bitmap)
|
||||
return 0 if !bitmap
|
||||
for i in 1..bitmap.height
|
||||
for j in 0..bitmap.width-1
|
||||
return bitmap.height-i if bitmap.get_pixel(j,bitmap.height-i).alpha>0
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
def pbAutoPositionAll
|
||||
metrics = pbLoadSpeciesMetrics
|
||||
for i in 1..PBSpecies.maxValueF
|
||||
s = pbGetSpeciesFromFSpecies(i)
|
||||
Graphics.update if i%50==0
|
||||
bitmap1 = pbLoadSpeciesBitmap(s[0],false,s[1],false,false,true)
|
||||
bitmap2 = pbLoadSpeciesBitmap(s[0],false,s[1])
|
||||
metrics[SpeciesData::METRIC_PLAYER_X][i] = 0 # Player's x
|
||||
if bitmap1 && bitmap1.bitmap # Player's y
|
||||
metrics[SpeciesData::METRIC_PLAYER_Y][i] = (bitmap1.height-(findBottom(bitmap1.bitmap)+1))/2
|
||||
end
|
||||
metrics[SpeciesData::METRIC_ENEMY_X][i] = 0 # Foe's x
|
||||
if bitmap2 && bitmap2.bitmap # Foe's y
|
||||
metrics[SpeciesData::METRIC_ENEMY_Y][i] = (bitmap2.height-(findBottom(bitmap2.bitmap)+1))/2
|
||||
metrics[SpeciesData::METRIC_ENEMY_Y][i] += 4 # Just because
|
||||
end
|
||||
metrics[SpeciesData::METRIC_ALTITUDE][i] = 0 # Foe's altitude, not used now
|
||||
metrics[SpeciesData::METRIC_SHADOW_X][i] = 0 # Shadow's x
|
||||
metrics[SpeciesData::METRIC_SHADOW_SIZE][i] = 2 # Shadow size
|
||||
bitmap1.dispose if bitmap1
|
||||
bitmap2.dispose if bitmap2
|
||||
end
|
||||
save_data(metrics,"Data/species_metrics.dat")
|
||||
$PokemonTemp.speciesMetrics = nil
|
||||
pbSavePokemonData
|
||||
pbSavePokemonFormsData
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class SpritePositioner
|
||||
def pbOpen
|
||||
@sprites = {}
|
||||
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
|
||||
@viewport.z = 99999
|
||||
battlebg = "Graphics/Battlebacks/indoor1_bg"
|
||||
playerbase = "Graphics/Battlebacks/indoor1_base0"
|
||||
enemybase = "Graphics/Battlebacks/indoor1_base1"
|
||||
@sprites["battle_bg"] = AnimatedPlane.new(@viewport)
|
||||
@sprites["battle_bg"].setBitmap(battlebg)
|
||||
@sprites["battle_bg"].z = 0
|
||||
baseX, baseY = PokeBattle_SceneConstants.pbBattlerPosition(0)
|
||||
@sprites["base_0"] = IconSprite.new(baseX,baseY,@viewport)
|
||||
@sprites["base_0"].setBitmap(playerbase)
|
||||
@sprites["base_0"].x -= @sprites["base_0"].bitmap.width/2 if @sprites["base_0"].bitmap
|
||||
@sprites["base_0"].y -= @sprites["base_0"].bitmap.height if @sprites["base_0"].bitmap
|
||||
@sprites["base_0"].z = 1
|
||||
baseX, baseY = PokeBattle_SceneConstants.pbBattlerPosition(1)
|
||||
@sprites["base_1"] = IconSprite.new(baseX,baseY,@viewport)
|
||||
@sprites["base_1"].setBitmap(enemybase)
|
||||
@sprites["base_1"].x -= @sprites["base_1"].bitmap.width/2 if @sprites["base_1"].bitmap
|
||||
@sprites["base_1"].y -= @sprites["base_1"].bitmap.height/2 if @sprites["base_1"].bitmap
|
||||
@sprites["base_1"].z = 1
|
||||
@sprites["messageBox"] = IconSprite.new(0,Graphics.height-96,@viewport)
|
||||
@sprites["messageBox"].setBitmap("Graphics/Pictures/Battle/debug_message")
|
||||
@sprites["messageBox"].z = 2
|
||||
@sprites["shadow_1"] = IconSprite.new(0,0,@viewport)
|
||||
@sprites["shadow_1"].z = 3
|
||||
@sprites["pokemon_0"] = PokemonSprite.new(@viewport)
|
||||
@sprites["pokemon_0"].setOffset(PictureOrigin::Bottom)
|
||||
@sprites["pokemon_0"].z = 4
|
||||
@sprites["pokemon_1"] = PokemonSprite.new(@viewport)
|
||||
@sprites["pokemon_1"].setOffset(PictureOrigin::Bottom)
|
||||
@sprites["pokemon_1"].z = 4
|
||||
@sprites["info"] = Window_UnformattedTextPokemon.new("")
|
||||
@sprites["info"].viewport = @viewport
|
||||
@sprites["info"].visible = false
|
||||
@oldSpeciesIndex = 0
|
||||
@species = 0
|
||||
@metrics = pbLoadSpeciesMetrics
|
||||
@metricsChanged = false
|
||||
refresh
|
||||
@starting = true
|
||||
end
|
||||
|
||||
def pbClose
|
||||
if @metricsChanged
|
||||
if pbConfirmMessage(_INTL("Some metrics have been edited. Save changes?"))
|
||||
pbSaveMetrics
|
||||
@metricsChanged = false
|
||||
end
|
||||
end
|
||||
pbFadeOutAndHide(@sprites) { update }
|
||||
pbDisposeSpriteHash(@sprites)
|
||||
@viewport.dispose
|
||||
end
|
||||
|
||||
def pbSaveMetrics
|
||||
save_data(@metrics,"Data/species_metrics.dat")
|
||||
$PokemonTemp.speciesMetrics = nil
|
||||
pbSavePokemonData
|
||||
pbSavePokemonFormsData
|
||||
end
|
||||
|
||||
def update
|
||||
pbUpdateSpriteHash(@sprites)
|
||||
end
|
||||
|
||||
def refresh
|
||||
if @species<=0
|
||||
@sprites["pokemon_0"].visible = false
|
||||
@sprites["pokemon_1"].visible = false
|
||||
@sprites["shadow_1"].visible = false
|
||||
return
|
||||
end
|
||||
for i in 0...2
|
||||
pos = PokeBattle_SceneConstants.pbBattlerPosition(i,1)
|
||||
@sprites["pokemon_#{i}"].x = pos[0]
|
||||
@sprites["pokemon_#{i}"].y = pos[1]
|
||||
pbApplyBattlerMetricsToSprite(@sprites["pokemon_#{i}"],i,@species,false,@metrics)
|
||||
@sprites["pokemon_#{i}"].visible = true
|
||||
if i==1
|
||||
@sprites["shadow_1"].x = pos[0]
|
||||
@sprites["shadow_1"].y = pos[1]
|
||||
if @sprites["shadow_1"].bitmap
|
||||
@sprites["shadow_1"].x -= @sprites["shadow_1"].bitmap.width/2
|
||||
@sprites["shadow_1"].y -= @sprites["shadow_1"].bitmap.height/2
|
||||
end
|
||||
pbApplyBattlerMetricsToSprite(@sprites["shadow_1"],i,@species,true,@metrics)
|
||||
@sprites["shadow_1"].visible = true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbAutoPosition
|
||||
oldmetric1 = (@metrics[SpeciesData::METRIC_PLAYER_Y][@species] || 0)
|
||||
oldmetric3 = (@metrics[SpeciesData::METRIC_ENEMY_Y][@species] || 0)
|
||||
oldmetric4 = (@metrics[SpeciesData::METRIC_ALTITUDE][@species] || 0)
|
||||
bitmap1 = @sprites["pokemon_0"].bitmap
|
||||
bitmap2 = @sprites["pokemon_1"].bitmap
|
||||
newmetric1 = (bitmap1.height-(findBottom(bitmap1)+1))/2
|
||||
newmetric3 = (bitmap2.height-(findBottom(bitmap2)+1))/2
|
||||
newmetric3 += 4 # Just because
|
||||
if newmetric1!=oldmetric1 || newmetric3!=oldmetric3 || oldmetric4!=0
|
||||
@metrics[SpeciesData::METRIC_PLAYER_Y][@species] = newmetric1
|
||||
@metrics[SpeciesData::METRIC_ENEMY_Y][@species] = newmetric3
|
||||
@metrics[SpeciesData::METRIC_ALTITUDE][@species] = 0
|
||||
@metricsChanged = true
|
||||
refresh
|
||||
end
|
||||
end
|
||||
|
||||
def pbChangeSpecies(species)
|
||||
@species = species
|
||||
spe,frm = pbGetSpeciesFromFSpecies(@species)
|
||||
@sprites["pokemon_0"].setSpeciesBitmap(spe,false,frm,false,false,true)
|
||||
@sprites["pokemon_1"].setSpeciesBitmap(spe,false,frm,false,false,false)
|
||||
@sprites["shadow_1"].setBitmap(pbCheckPokemonShadowBitmapFiles(spe,frm,@metrics))
|
||||
end
|
||||
|
||||
def pbShadowSize
|
||||
pbChangeSpecies(@species)
|
||||
refresh
|
||||
oldval = (@metrics[SpeciesData::METRIC_SHADOW_SIZE][@species] || 2)
|
||||
cmdvals = [0]; commands = [_INTL("None")]
|
||||
defindex = 0
|
||||
i = 0
|
||||
loop do
|
||||
i += 1
|
||||
fn = sprintf("Graphics/Pictures/Battle/battler_shadow_%d",i)
|
||||
break if !pbResolveBitmap(fn)
|
||||
cmdvals.push(i); commands.push(i.to_s)
|
||||
defindex = cmdvals.length-1 if oldval==i
|
||||
end
|
||||
cw = Window_CommandPokemon.new(commands)
|
||||
cw.index = defindex
|
||||
cw.viewport = @viewport
|
||||
ret = false
|
||||
oldindex = cw.index
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
cw.update
|
||||
self.update
|
||||
if cw.index!=oldindex
|
||||
oldindex = cw.index
|
||||
@metrics[SpeciesData::METRIC_SHADOW_SIZE][@species] = cmdvals[cw.index]
|
||||
pbChangeSpecies(@species)
|
||||
refresh
|
||||
end
|
||||
if Input.trigger?(Input::A) # Cycle to next option
|
||||
pbPlayDecisionSE
|
||||
@metricsChanged = true if @metrics[SpeciesData::METRIC_SHADOW_SIZE][@species]!=oldval
|
||||
ret = true
|
||||
break
|
||||
elsif Input.trigger?(Input::B)
|
||||
@metrics[SpeciesData::METRIC_SHADOW_SIZE][@species] = oldval
|
||||
pbPlayCancelSE
|
||||
break
|
||||
elsif Input.trigger?(Input::C)
|
||||
pbPlayDecisionSE
|
||||
break
|
||||
end
|
||||
end
|
||||
cw.dispose
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbSetParameter(param)
|
||||
return if @species<=0
|
||||
if param==2
|
||||
return pbShadowSize
|
||||
elsif param==4
|
||||
pbAutoPosition
|
||||
return false
|
||||
end
|
||||
case param
|
||||
when 0
|
||||
sprite = @sprites["pokemon_0"]
|
||||
xpos = (@metrics[SpeciesData::METRIC_PLAYER_X][@species] || 0)
|
||||
ypos = (@metrics[SpeciesData::METRIC_PLAYER_Y][@species] || 0)
|
||||
when 1
|
||||
sprite = @sprites["pokemon_1"]
|
||||
xpos = (@metrics[SpeciesData::METRIC_ENEMY_X][@species] || 0)
|
||||
ypos = (@metrics[SpeciesData::METRIC_ENEMY_Y][@species] || 0)
|
||||
when 3
|
||||
sprite = @sprites["shadow_1"]
|
||||
xpos = (@metrics[SpeciesData::METRIC_SHADOW_X][@species] || 0)
|
||||
ypos = 0
|
||||
end
|
||||
oldxpos = xpos
|
||||
oldypos = ypos
|
||||
@sprites["info"].visible = true
|
||||
ret = false
|
||||
loop do
|
||||
sprite.visible = (Graphics.frame_count%16)<12
|
||||
Graphics.update
|
||||
Input.update
|
||||
self.update
|
||||
case param
|
||||
when 0; @sprites["info"].setTextToFit("Ally Position = #{xpos},#{ypos}")
|
||||
when 1; @sprites["info"].setTextToFit("Enemy Position = #{xpos},#{ypos}")
|
||||
when 3; @sprites["info"].setTextToFit("Shadow Position = #{xpos}")
|
||||
end
|
||||
if Input.repeat?(Input::UP) && param!=3
|
||||
ypos -= 1
|
||||
case param
|
||||
when 0; @metrics[SpeciesData::METRIC_PLAYER_Y][@species] = ypos
|
||||
when 1; @metrics[SpeciesData::METRIC_ENEMY_Y][@species] = ypos
|
||||
end
|
||||
refresh
|
||||
elsif Input.repeat?(Input::DOWN) && param!=3
|
||||
ypos += 1
|
||||
case param
|
||||
when 0; @metrics[SpeciesData::METRIC_PLAYER_Y][@species] = ypos
|
||||
when 1; @metrics[SpeciesData::METRIC_ENEMY_Y][@species] = ypos
|
||||
end
|
||||
refresh
|
||||
end
|
||||
if Input.repeat?(Input::LEFT)
|
||||
xpos -= 1
|
||||
case param
|
||||
when 0; @metrics[SpeciesData::METRIC_PLAYER_X][@species] = xpos
|
||||
when 1; @metrics[SpeciesData::METRIC_ENEMY_X][@species] = xpos
|
||||
when 3; @metrics[SpeciesData::METRIC_SHADOW_X][@species] = xpos
|
||||
end
|
||||
refresh
|
||||
elsif Input.repeat?(Input::RIGHT)
|
||||
xpos += 1
|
||||
case param
|
||||
when 0; @metrics[SpeciesData::METRIC_PLAYER_X][@species] = xpos
|
||||
when 1; @metrics[SpeciesData::METRIC_ENEMY_X][@species] = xpos
|
||||
when 3; @metrics[SpeciesData::METRIC_SHADOW_X][@species] = xpos
|
||||
end
|
||||
refresh
|
||||
end
|
||||
if Input.repeat?(Input::A) && param!=3 # Cycle to next option
|
||||
@metricsChanged = true if xpos!=oldxpos || ypos!=oldypos
|
||||
ret = true
|
||||
pbPlayDecisionSE
|
||||
break
|
||||
elsif Input.repeat?(Input::B)
|
||||
case param
|
||||
when 0
|
||||
@metrics[SpeciesData::METRIC_PLAYER_X][@species] = oldxpos
|
||||
@metrics[SpeciesData::METRIC_PLAYER_Y][@species] = oldypos
|
||||
when 1
|
||||
@metrics[SpeciesData::METRIC_ENEMY_X][@species] = oldxpos
|
||||
@metrics[SpeciesData::METRIC_ENEMY_Y][@species] = oldypos
|
||||
when 3
|
||||
@metrics[SpeciesData::METRIC_SHADOW_X][@species] = oldxpos
|
||||
end
|
||||
pbPlayCancelSE
|
||||
refresh
|
||||
break
|
||||
elsif Input.repeat?(Input::C)
|
||||
@metricsChanged = true if xpos!=oldxpos || (param!=3 && ypos!=oldypos)
|
||||
pbPlayDecisionSE
|
||||
break
|
||||
end
|
||||
end
|
||||
@sprites["info"].visible = false
|
||||
sprite.visible = true
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbMenu(species)
|
||||
pbChangeSpecies(species)
|
||||
refresh
|
||||
cw = Window_CommandPokemon.new([
|
||||
_INTL("Set Ally Position"),
|
||||
_INTL("Set Enemy Position"),
|
||||
_INTL("Set Shadow Size"),
|
||||
_INTL("Set Shadow Position"),
|
||||
_INTL("Auto-Position Sprites")
|
||||
])
|
||||
cw.x = Graphics.width-cw.width
|
||||
cw.y = Graphics.height-cw.height
|
||||
cw.viewport = @viewport
|
||||
ret = -1
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
cw.update
|
||||
self.update
|
||||
if Input.trigger?(Input::C)
|
||||
pbPlayDecisionSE
|
||||
ret = cw.index
|
||||
break
|
||||
elsif Input.trigger?(Input::B)
|
||||
pbPlayCancelSE
|
||||
break
|
||||
end
|
||||
end
|
||||
cw.dispose
|
||||
return ret
|
||||
end
|
||||
|
||||
def pbChooseSpecies
|
||||
if @starting
|
||||
pbFadeInAndShow(@sprites) { update }
|
||||
@starting = false
|
||||
end
|
||||
cw = Window_CommandPokemonEx.newEmpty(0,0,260,32+24*6,@viewport)
|
||||
cw.rowHeight = 24
|
||||
pbSetSmallFont(cw.contents)
|
||||
cw.x = Graphics.width-cw.width
|
||||
cw.y = Graphics.height-cw.height
|
||||
allspecies = []
|
||||
commands = []
|
||||
for i in 1..PBSpecies.maxValueF
|
||||
s = pbGetSpeciesFromFSpecies(i)
|
||||
name = PBSpecies.getName(s[0])
|
||||
name = _INTL("{1} (form {2})",name,s[1]) if s[1]>0
|
||||
allspecies.push([i,s[0],name]) if name!=""
|
||||
end
|
||||
allspecies.sort! { |a,b| a[1]==b[1] ? a[0]<=>b[0] : a[2]<=>b[2] }
|
||||
for s in allspecies
|
||||
commands.push(_INTL("{1} - {2}",s[1],s[2]))
|
||||
end
|
||||
cw.commands = commands
|
||||
cw.index = @oldSpeciesIndex
|
||||
species = 0
|
||||
oldindex = -1
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
cw.update
|
||||
if cw.index!=oldindex
|
||||
oldindex = cw.index
|
||||
pbChangeSpecies(allspecies[cw.index][0])
|
||||
refresh
|
||||
end
|
||||
self.update
|
||||
if Input.trigger?(Input::B)
|
||||
pbChangeSpecies(0)
|
||||
refresh
|
||||
break
|
||||
elsif Input.trigger?(Input::C)
|
||||
pbChangeSpecies(allspecies[cw.index][0])
|
||||
species = allspecies[cw.index][0]
|
||||
break
|
||||
end
|
||||
end
|
||||
@oldSpeciesIndex = cw.index
|
||||
cw.dispose
|
||||
return species
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
#===============================================================================
|
||||
#
|
||||
#===============================================================================
|
||||
class SpritePositionerScreen
|
||||
def initialize(scene)
|
||||
@scene = scene
|
||||
end
|
||||
|
||||
def pbStart
|
||||
@scene.pbOpen
|
||||
loop do
|
||||
species = @scene.pbChooseSpecies
|
||||
break if species<=0
|
||||
loop do
|
||||
command = @scene.pbMenu(species)
|
||||
break if command<0
|
||||
loop do
|
||||
par = @scene.pbSetParameter(command)
|
||||
break if !par
|
||||
command = (command+1)%3
|
||||
end
|
||||
end
|
||||
end
|
||||
@scene.pbClose
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user