Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #===============================================================================
- # Edits the terrain tags of tiles in tilesets.
- #===============================================================================
- # [ Actualizado por Bezier ]
- # Cambios:
- # Autotag: Pulsar A para cambiar el valor del tag que será aplicado con la
- # tecla C sin tener que asignar el valor cada vez
- # Selección: Pulsar S para seleccionar un área y aplicar el autotag
- #===============================================================================
- begin
- def pbTilesetWrapper
- return PokemonDataWrapper.new(
- "Data/Tilesets.rxdata",
- "Data/TilesetsTemp.rxdata",
- Proc.new{
- Kernel.pbMessage(_INTL("El editor ha detectado que los datos del tileset fueron editados recientemente en RPG Maker XP."))
- next !Kernel.pbConfirmMessage(_INTL("¿Quieres cargar estos cambios recientes?"))
- }
- )
- end
- class PokemonTilesetScene
- # Obtiene las coordenadas y dimensión de la selección actual
- def getSelectionValues
- return [@x,@y,@x,@y,1,1] if @selection.size==0
- x0=[@selection[0][0],@selection[1][0]].min
- y0=[@selection[0][1],@selection[1][1]].min
- x1=[@selection[0][0],@selection[1][0]].max
- y1=[@selection[0][1],@selection[1][1]].max
- w=x1-x0+28
- h=y1-y0+28
- return [x0,y0,x1,y1,w,h]
- end
- def pbUpdateTileset
- @sprites["overlay"].bitmap.clear
- textpos=[]
- @sprites["tileset"].src_rect=Rect.new(0,@topy,256,Graphics.height)
- tilesize=@tileset.terrain_tags.xsize
- for yy in 0...(Graphics.height)/32
- ypos=(yy+(@topy/32))*8+384
- next if ypos>=tilesize
- for xx in 0...8
- terr=ypos<384 ? @tileset.terrain_tags[xx*48] : @tileset.terrain_tags[ypos+xx]
- if ypos<384
- @tilehelper.bltTile(@sprites["overlay"].bitmap,xx*32,yy*32,xx*48)
- end
- textpos.push(["#{terr}",xx*32+16,yy*32,2,Color.new(80,80,80),Color.new(192,192,192)])
- end
- end
- # Pinta la selección en vez de la celda actual [@x,@y]
- if @selectionMode && @selection.size>0
- x0,y0,x1,y1,w,h=getSelectionValues
- @sprites["overlay"].bitmap.fill_rect(x0,y0-@topy,w,4,Color.new(255,0,0))
- @sprites["overlay"].bitmap.fill_rect(x0,y0-@topy,4,h,Color.new(255,0,0))
- @sprites["overlay"].bitmap.fill_rect(x0,y1-@topy+28,w,4,Color.new(255,0,0))
- @sprites["overlay"].bitmap.fill_rect(x1+28,y0-@topy,4,h,Color.new(255,0,0))
- else
- @sprites["overlay"].bitmap.fill_rect(@x,@y-@topy,32,4,Color.new(255,0,0))
- @sprites["overlay"].bitmap.fill_rect(@x,@y-@topy,4,32,Color.new(255,0,0))
- @sprites["overlay"].bitmap.fill_rect(@x,@y-@topy+28,32,4,Color.new(255,0,0))
- @sprites["overlay"].bitmap.fill_rect(@x+28,@y-@topy,4,32,Color.new(255,0,0))
- end
- pbDrawTextPositions(@sprites["overlay"].bitmap,textpos)
- end
- def pbGetSelected(x,y)
- if y<0
- return 48*(x/32)
- else
- return (y/32)*8+384+(x/32)
- end
- end
- def pbSetSelected(i,value)
- if i<384
- for j in 0...48
- @tileset.terrain_tags[i+j]=value
- end
- else
- @tileset.terrain_tags[i]=value
- end
- end
- def pbChooseTileset
- commands=[]
- for i in 1...@tilesetwrapper.data.length
- commands.push(sprintf("%03d %s",i,@tilesetwrapper.data[i].name))
- end
- ret=Kernel.pbShowCommands(nil,commands,-1)
- if ret>=0
- @tileset=@tilesetwrapper.data[ret+1]
- @tilehelper.dispose
- @tilehelper=TileDrawingHelper.fromTileset(@tileset)
- @sprites["tileset"].setBitmap("Graphics/Tilesets/#{@tileset.tileset_name}")
- @x=0
- @y=-32
- @topy=-32
- pbUpdateTileset
- end
- end
- # Actualiza el sprite que muestra el menú
- def updateMenu
- txt=getTittleText
- @sprites["title"].text=txt
- @sprites["title"].resizeToFit(txt)
- @sprites["title"].width=Graphics.width-256
- end
- # Texto del menú dependiendo del estado actual del editor de Tileset
- def getTittleText
- txt = "Tileset Editor\nQ/W: Desplaza\n Z: Menú\n A: Autotag [ " + @autotag.to_s + " ]\n S: Selección"
- if @selectionMode
- txt += " [ON]"
- txt += "\n C: [ " + @autotag.to_s + " ] -> selección"
- end
- return txt
- end
- # Actualiza el rectángulo de selección con las coordenadas actuales
- def setSelectionRect
- if @selection.size==0
- @selection[0]=[@x,@y]
- end
- @selection[1]=[@x,@y]
- end
- # Se ha cambiado un poco el interfaz para mostrar el nuevo menú a la derecha,
- # el tileset ajustado arriba a la izquierda y gestionar los nuevos inputs
- def pbStartScene
- @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
- @viewport.z=99999
- @tilesetwrapper=pbTilesetWrapper
- @tileset=@tilesetwrapper.data[1]
- @tilehelper=TileDrawingHelper.fromTileset(@tileset)
- @sprites={}
- @autotag=0
- @selectionMode=false
- @selection=[]
- @sprites["title"]=Window_UnformattedTextPokemon.new(getTittleText)
- @sprites["title"].viewport=@viewport
- @sprites["title"].x=260
- @sprites["title"].y=0
- @sprites["title"].width=Graphics.width-256
- @sprites["tileset"]=IconSprite.new(0,0,@viewport)
- @sprites["tileset"].setBitmap("Graphics/Tilesets/#{@tileset.tileset_name}")
- @sprites["tileset"].src_rect=Rect.new(0,0,256,Graphics.height)
- @sprites["overlay"]=BitmapSprite.new(256,Graphics.height,@viewport)
- @sprites["overlay"].x=0
- @sprites["overlay"].y=0
- pbSetSystemFont(@sprites["overlay"].bitmap)
- @sprites["title"].visible=true
- @sprites["tileset"].visible=true
- @sprites["overlay"].visible=true
- @x=0
- @y=-32
- @topy=-32
- pbUpdateTileset
- pbFadeInAndShow(@sprites)
- height=@sprites["tileset"].bitmap.height
- ########
- loop do
- Graphics.update
- Input.update
- if Input.repeat?(Input::UP)
- @y-=32
- @y=-32 if @y<-32
- @topy=@y if @y<@topy
- setSelectionRect if @selectionMode
- pbUpdateTileset
- elsif Input.repeat?(Input::DOWN)
- @y+=32
- @y=@sprites["tileset"].bitmap.height-32 if @y>=@sprites["tileset"].bitmap.height-32
- @topy=@y-(Graphics.height)+32 if @y-@topy>=Graphics.height
- setSelectionRect if @selectionMode
- pbUpdateTileset
- elsif Input.repeat?(Input::LEFT)
- @x-=32
- @x=0 if @x<0
- setSelectionRect if @selectionMode
- pbUpdateTileset
- elsif Input.repeat?(Input::RIGHT)
- @x+=32
- @x=256-32 if @x>=256-32
- setSelectionRect if @selectionMode
- pbUpdateTileset
- elsif Input.repeat?(Input::L)
- @y-=((Graphics.height)/32)*32
- @topy-=((Graphics.height)/32)*32
- @y=-32 if @y<-32
- @topy=@y if @y<@topy
- @topy=-32 if @topy<-32
- setSelectionRect if @selectionMode
- pbUpdateTileset
- elsif Input.repeat?(Input::R)
- @y+=((Graphics.height)/32)*32
- @topy+=((Graphics.height)/32)*32
- @y=@sprites["tileset"].bitmap.height-32 if @y>=@sprites["tileset"].bitmap.height-32
- @topy=@y-(Graphics.height)+32 if @y-@topy>=Graphics.height
- @topy=@sprites["tileset"].bitmap.height-(Graphics.height) if @topy>=@sprites["tileset"].bitmap.height-(Graphics.height)
- setSelectionRect if @selectionMode
- pbUpdateTileset
- elsif Input.trigger?(Input::X) # Autotag
- params=ChooseNumberParams.new
- params.setRange(0,99)
- @autotag=Kernel.pbMessageChooseNumber(_INTL("Cambiar autotag."),params)
- updateMenu
- elsif Input.trigger?(Input::Y) # Selección
- if @selectionMode
- @selectionMode=false
- @selection=[]
- else
- @selectionMode=true
- setSelectionRect
- end
- updateMenu
- pbUpdateTileset
- elsif Input.trigger?(Input::A)
- commands=[
- _INTL("Ir abajo"),
- _INTL("Ir arriba"),
- _INTL("Cambiar tileset"),
- _INTL("Salir")
- ]
- ret=Kernel.pbShowCommands(nil,commands,-1)
- case ret
- when 0
- @y=@sprites["tileset"].bitmap.height-32
- @topy=@y-(Graphics.height)+32 if @y-@topy>=Graphics.height
- pbUpdateTileset
- when 1
- @y=-32
- @topy=@y if @y<@topy
- pbUpdateTileset
- when 2
- pbChooseTileset
- end
- elsif Input.trigger?(Input::B)
- if Kernel.pbConfirmMessage(_INTL("¿Guardar los cambios?"))
- @tilesetwrapper.save
- $data_tilesets=@tilesetwrapper.data
- if $game_map && $MapFactory
- $MapFactory.setup($game_map.map_id)
- $game_player.center($game_player.x,$game_player.y)
- if $scene.is_a?(Scene_Map)
- $scene.disposeSpritesets
- $scene.createSpritesets
- end
- end
- Kernel.pbMessage(_INTL("Para asegurar que los cambios se mantengan, cierre y vuelva a abrir RPG Maker XP."))
- end
- break if Kernel.pbConfirmMessage(_INTL("¿Salir del editor?"))
- elsif Input.trigger?(Input::C)
- if @selectionMode
- x0,y0,x1,y1,w,h=getSelectionValues
- for ix in x0..x1
- for iy in y0..y1
- selected=pbGetSelected(ix,iy)
- pbSetSelected(selected,@autotag)
- end
- end
- @selectionMode=false
- @selection=[]
- updateMenu
- pbUpdateTileset
- else
- selected=pbGetSelected(@x,@y)
- pbSetSelected(selected,@autotag)
- pbUpdateTileset
- end
- end
- end
- ########
- pbFadeOutAndHide(@sprites)
- pbDisposeSpriteHash(@sprites)
- @viewport.dispose
- @tilehelper.dispose
- end
- end
- def pbTilesetScreen
- pbFadeOutIn(99999){
- scene=PokemonTilesetScene.new
- scene.pbStartScene
- }
- end
- rescue Exception
- if $!.is_a?(SystemExit) || "#{$!.class}"=="Reset"
- raise $!
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement