¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3393 miembros registrados.
El último usuario registrado es nino34.

Nuestros miembros han publicado un total de 79784 mensajes en 11253 argumentos.
Navega con Google Chrome
[DESCARGA]

[RMXP] Tilemap: nueva lectura de los Autotiles

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Wecoc el 2012-04-11, 21:45

Bueno pues removiendo una vez mas el pokemon essentials, me encontré con el script Tilemap y le eché una ojeada para cambiar algunas cosas (cuatro números y ya está xD), lo pongo porque quizá sean de utilidad a algunos, y quizá a otros pues no xD

PROPIEDADES

Este script cambia la lectura de los autotiles... a ver para que nos entendamos lo pongo en una tabla:

ANTES
DESPUÉS


Eso permite hacer los nuevos tiles (los de abajo) mas personalizados, que es uno de los problemas que tenían los autotiles normales. Para más info podéis leer esto que escribí hace un tiempo:
[Tutorial] Bases para hacer un buen tileado

Debo mencionar que hay ciertos inconvenientes:
1) En el editor se muestra el autotile normal.
2) Hay que dibujar más tiles por autotile (sé que sois perezosos)

Aún así también hay que decir que muchos juegos comerciales utilizan 16 tiles de base, y este nuevo sistema se adapta bastante mejor a esas bases que el normal de XP, aumenta la variedad de tileado, le da un toque distinto al RTP y sobretodo en los últimos dos tiles, permite hacer separaciones de autotile donde no las habría en el modo normal.

Por cierto, edito para decir que ahora soporta los dos, si el autotile hace 128 de alto lo leerá como siempre y si hace 192 lo leerá con la nueva lectura.

No me déis créditos, porque total solo cambié unos numerillos...

CÓDIGO

Código:
# Tilemap de Pokemon Essentials
# + Nueva Lectura de Autotiles

class TilemapAutotiles
  attr_accessor :changed
  def initialize
  @changed=true
  @tiles=[nil,nil,nil,nil,nil,nil,nil]
  end
  def []=(i,value)
  @tiles[i]=value
  @changed=true
  end
  def [](i)
  return @tiles[i]
  end
end

class Tilemap
  Animated_Autotiles_Frames = 15
    NewAutotiles = [
    [ [27, 28, 33, 34], [49, 50, 55, 56], [51, 52, 57, 58], [49, 52, 55, 58],
      [63, 64, 69, 70], [65, 66, 71, 72], [51, 52, 69, 70], [ 5,  6, 33, 12] ],
    [ [61, 62, 67, 68], [49, 50, 67, 68], [53, 54, 59, 60], [ 5,  6, 11, 34],
      [61, 64, 67, 70], [ 5, 28, 11, 12], [27,  6, 11, 12], [ 5,  6, 11, 12] ],
    [ [25, 26, 31, 32], [25,  6, 31, 32], [25, 26, 31, 12], [25,  6, 31, 12],
      [15, 16, 21, 22], [15, 16, 21, 12], [15, 16, 11, 22], [15, 16, 11, 12] ],
    [ [29, 30, 35, 36], [29, 30, 11, 36], [ 5, 30, 35, 36], [ 5, 30, 11, 36],
      [39, 40, 45, 46], [ 5, 40, 45, 46], [39,  6, 45, 46], [ 5,  6, 45, 46] ],
    [ [25, 30, 31, 36], [15, 16, 45, 46], [13, 14, 19, 20], [13, 14, 19, 12],
      [17, 18, 23, 24], [17, 18, 11, 24], [41, 42, 47, 48], [ 5, 42, 47, 48] ],
    [ [37, 38, 43, 44], [37,  6, 43, 44], [13, 18, 19, 24], [13, 14, 43, 44],
      [37, 42, 43, 48], [17, 18, 47, 48], [13, 18, 43, 48], [ 1,  2,  7,  8] ]
  ]
  OldAutotiles = [
    [ [27, 28, 33, 34], [ 5, 28, 33, 34], [27,  6, 33, 34], [ 5,  6, 33, 34],
      [27, 28, 33, 12], [ 5, 28, 33, 12], [27,  6, 33, 12], [ 5,  6, 33, 12] ],
    [ [27, 28, 11, 34], [ 5, 28, 11, 34], [27,  6, 11, 34], [ 5,  6, 11, 34],
      [27, 28, 11, 12], [ 5, 28, 11, 12], [27,  6, 11, 12], [ 5,  6, 11, 12] ],
    [ [25, 26, 31, 32], [25,  6, 31, 32], [25, 26, 31, 12], [25,  6, 31, 12],
      [15, 16, 21, 22], [15, 16, 21, 12], [15, 16, 11, 22], [15, 16, 11, 12] ],
    [ [29, 30, 35, 36], [29, 30, 11, 36], [ 5, 30, 35, 36], [ 5, 30, 11, 36],
      [39, 40, 45, 46], [ 5, 40, 45, 46], [39,  6, 45, 46], [ 5,  6, 45, 46] ],
    [ [25, 30, 31, 36], [15, 16, 45, 46], [13, 14, 19, 20], [13, 14, 19, 12],
      [17, 18, 23, 24], [17, 18, 11, 24], [41, 42, 47, 48], [ 5, 42, 47, 48] ],
    [ [37, 38, 43, 44], [37,  6, 43, 44], [13, 18, 19, 24], [13, 14, 43, 44],
      [37, 42, 43, 48], [17, 18, 47, 48], [13, 18, 43, 48], [ 1,  2,  7,  8] ]
  ]
  FlashOpacity=[100,90,80,70,80,90]
  attr_reader :tileset
  attr_reader :autotiles
  attr_reader :map_data
  attr_accessor :flash_data
  attr_accessor :priorities
  attr_reader :visible
  attr_accessor :ox
  attr_accessor :oy
  attr_reader :viewport
  attr_accessor :tone
  attr_accessor :color
  def graphicsHeight
    return 480
  end
  def graphicsWidth
    return 640
  end
  def initialize(viewport)
    @tileset    = nil  # Refers to Map Tileset Name
    @autotiles  = TilemapAutotiles.new
    @map_data  = nil  # Refers to 3D Array Of Tile Settings
    @flash_data = nil  # Refers to 3D Array of Tile Flashdata
    @priorities = nil  # Refers to Tileset Priorities
    @visible    = true # Refers to Tileset Visibleness
    @ox        = 0    # Bitmap Offsets
    @oy        = 0    # bitmap Offsets
    @plane      = false
    @tone=Tone.new(0,0,0,0)
    @color=Color.new(0,0,0,0)
    @oldtone=Tone.new(0,0,0,0)
    @oldcolor=Color.new(0,0,0,0)
    @selfviewport=Viewport.new(0,0,graphicsWidth,graphicsHeight)
    @viewport=viewport ? viewport : @selfviewport
    @tiles=[]
    @autotileInfo=[]
    @regularTileInfo=[]
    @oldOx=0
    @oldOy=0
    @layer0=Sprite.new(viewport)
    @layer0.visible=true
    @nowshown=false
    @layer0.bitmap=Bitmap.new([graphicsWidth*2,1].max,[graphicsHeight*2,1].max)
    @flash=nil
    @layer0.ox=0
    @layer0.oy=0
    @oxLayer0=0
    @oyLayer0=0
    @oxFlash=0
    @oyFlash=0
    @layer0.z=0
    @priotiles=[]
    @prioautotiles=[]
    @autosprites=[]
    @framecount=[]
    @tilesetChanged=true
    @flashChanged=false
    @firsttime=true
    @disposed=false
    @usedsprites=false
    @layer0clip=true
    @firsttimeflash=true
    @fullyrefreshed=false
    @fullyrefreshedautos=false
  end
  def disposed?
  return @disposed
  end
  def flash_data=(value)
  @flash_data=value
  @flashChanged=true
  end
  def update
    if @oldtone!=@tone
      @layer0.tone=@tone
      @flash.tone=@tone if @flash
      for sprite in @autosprites
        sprite.tone=@tone
      end
      for sprite in @tiles
        sprite.tone=@tone if sprite.is_a?(Sprite)
      end
      @oldtone=@tone.clone
    end
    if @oldcolor!=@color
      @layer0.color=@color
      @flash.color=@color if @flash
      for sprite in @autosprites
        sprite.color=@color
      end
      for sprite in @tiles
        sprite.color=@color if sprite.is_a?(Sprite)
      end
      @oldcolor=@color.clone
    end
    if @autotiles.changed
      refresh_autotiles
      repaintAutotiles
    end
    if @flashChanged
      refresh_flash
    end
    if @tilesetChanged
      refresh_tileset
    end
    if @flash
    @flash.opacity=FlashOpacity[(Graphics.frame_count/2) % 6]
    end
    if !(@oldOx==@ox && @oldOy==@oy &&
          !@tilesetChanged &&
          !@autotiles.changed)
      refresh
    end
    if (Graphics.frame_count % Animated_Autotiles_Frames == 0) || @nowshown
      repaintAutotiles
      refresh(true)
    end
    @nowshown=false
    @autotiles.changed=false
    @tilesetChanged=false
  end
def priorities=(value)
  @priorities=value
  @tilesetChanged=true
end
def tileset=(value)
  @tileset=value
  @tilesetChanged=true
end
def shown?
  return false if !@visible
  ysize=@map_data.ysize
  xsize=@map_data.xsize
  xStart=(@ox/32)-1
  xEnd=((@ox+@viewport.rect.width)/32)+1
  yStart=(@oy/32)-1
  yEnd=((@oy+@viewport.rect.height)/32)+1
  xStart=0 if xStart<0
  xStart=xsize-1 if xStart>=xsize
  xEnd=0 if xEnd<0
  xEnd=xsize-1 if xEnd>=xsize
  yStart=0 if yStart<0
  yStart=ysize-1 if yStart>=ysize
  yEnd=0 if yEnd<0
  yEnd=ysize-1 if yEnd>=ysize
  return (xStart<xEnd && yStart<yEnd)
end
def dispose
 return if disposed?
 @help.dispose if @help
 @help=nil
 i=0;len=@autotileInfo.length;while i<len
  if @autotileInfo[i]
    @autotileInfo[i].dispose
    @autotileInfo[i]=nil
  end
  i+=1
 end
 i=0;len=@regularTileInfo.length;while i<len
  if @regularTileInfo[i]
    @regularTileInfo[i].dispose
    @regularTileInfo[i]=nil
  end
  i+=1
 end
 i=0;len=@tiles.length;while i<len
  @tiles[i].dispose
  @tiles[i]=nil
  i+=2
 end
 i=0;len=@autosprites.length;while i<len
  @autosprites[i].dispose
  @autosprites[i]=nil
  i+=2
 end
 if @layer0
  @layer0.bitmap.dispose if !@layer0.disposed?
  @layer0.bitmap=nil if !@layer0.disposed?
  @layer0.dispose
  @layer0=nil
 end
 if @flash
  @flash.bitmap.dispose if !@flash.disposed?
  @flash.bitmap=nil if !@flash.disposed?
  @flash.dispose
  @flash=nil
 end
 for i in 0...7
  self.autotiles[i]=nil
 end
 @tiles.clear
 @autosprites.clear
 @autotileInfo.clear
 @regularTileInfo.clear
 @tilemap=nil
 @tileset=nil
 @priorities=nil
 @selfviewport.dispose
 @selfviewport=nil
 @disposed=true
end

def bltAutotile(bitmap,x,y,id,frame)
  return if frame<0
  autotile=@autotiles[id/48-1]
  return if !autotile
  if autotile.height==32
    anim=frame<<5
    src_rect=Rect.new(anim,0,32,32)
    bitmap.blt(x,y,autotile,src_rect)
  else
    anim=frame*96
    id%=48
    if autotile.height==192
      tiles = NewAutotiles[id>>3][id&7]
    else
      tiles = OldAutotiles[id>>3][id&7]
    end
    src=Rect.new(0,0,0,0)
    for i in 0...4
      tile_position = tiles[i] - 1
      src.set(
      (tile_position % 6)*16 + anim,
      (tile_position / 6)*16, 16, 16)
      bitmap.blt(i%2*16+x,i/2*16+y, autotile, src)
    end
  end
end

def autotileNumFrames(id)
  autotile=@autotiles[id/48-1]
  return 0 if !autotile || autotile.disposed?
  frames=1
  if autotile.height==32
  frames=autotile.width>>5
  else
  frames=autotile.width/96
  end
  return frames
end

def autotileFrame(id)
  autotile=@autotiles[id/48-1]
  return -1 if !autotile || autotile.disposed?
  frames=1
  if autotile.height==32
  frames=autotile.width>>5
  else
  frames=autotile.width/96
  end
  return (Graphics.frame_count/Animated_Autotiles_Frames)%frames
end

def repaintAutotiles
 for i in 0...@autotileInfo.length
  next if !@autotileInfo[i]
  frame=autotileFrame(i)
  bltAutotile(@autotileInfo[i],0,0,i,frame)
 end
end

def getAutotile(sprite,id)
  anim=autotileFrame(id)
  return if anim<0
  bitmap=@autotileInfo[id]
  if !bitmap
    bitmap=Bitmap.new(32,32)
    bltAutotile(bitmap,0,0,id,anim)
    @autotileInfo[id]=bitmap
  end
  sprite.bitmap=bitmap if !sprite.equal?(bitmap) || sprite.bitmap!=bitmap
end

def getRegularTile(sprite,id)
 if false
  sprite.bitmap=@tileset if !sprite.equal?(@tileset) || sprite.bitmap!=@tileset
  sprite.src_rect.set(((id - 384)&7)<<5,((id - 384)>>3)<<5,32,32)
 else
  bitmap=@regularTileInfo[id]
  if !bitmap
  bitmap=Bitmap.new(32,32)
  rect=Rect.new(((id - 384)&7)<<5,((id - 384)>>3)<<5,32,32)
  bitmap.blt(0,0,@tileset,rect)
  @regularTileInfo[id]=bitmap
  end
  sprite.bitmap=bitmap if !sprite.equal?(bitmap) || sprite.bitmap!=bitmap
 end
end

def addTile(tiles,count,xpos,ypos,id)
  if id>=384
    if count>=tiles.length
      sprite=Sprite.new(@viewport)
      tiles.push(sprite,0)
    else
      sprite=tiles[count]
      tiles[count+1]=0
    end
    sprite.visible=@visible
    sprite.x=xpos
    sprite.y=ypos
    sprite.tone=@tone
    sprite.color=@color
    getRegularTile(sprite,id)
    spriteZ=(@priorities[id]==0||!@priorities[id]) ? 0 : ypos+@priorities[id]*32+32
    sprite.z=spriteZ
    count+=2
  else
    if count>=tiles.length
      sprite=Sprite.new(@viewport)
      tiles.push(sprite,1)
    else
      sprite=tiles[count]
      tiles[count+1]=1
    end
    sprite.visible=@visible
    sprite.x=xpos
    sprite.y=ypos
    sprite.tone=@tone
    sprite.color=@color
    getAutotile(sprite,id)
    spriteZ=(@priorities[id]==0||!@priorities[id]) ? 0 : ypos+@priorities[id]*32+32
    sprite.z=spriteZ
    count+=2
  end
  return count
end

def refresh_tileset
 i=0;len=@regularTileInfo.length;while i<len
  if @regularTileInfo[i]
    @regularTileInfo[i].dispose
    @regularTileInfo[i]=nil
  end
  i+=1
 end
 @regularTileInfo.clear
 @priotiles.clear
 ysize=@map_data.ysize
 xsize=@map_data.xsize
 zsize=@map_data.zsize
 if xsize>100 || ysize>100
  @fullyrefreshed=false
 else
  for z in 0...zsize
  for y in 0...ysize
    for x in 0...xsize
    id = @map_data[x, y, z]
    next if id==0 || !@priorities[id]
    next if @priorities[id]==0
    @priotiles.push([x,y,z,id])
    end
  end
  end
  @fullyrefreshed=true
 end
end

def refresh_flash
 if @flash_data && !@flash
  @flash=Sprite.new(viewport)
  @flash.visible=true
  @flash.z=1
  @flash.blend_type=1
  @flash.bitmap=Bitmap.new([graphicsWidth*2,1].max,[graphicsHeight*2,1].max)
  @firsttimeflash=true
 elsif !@flash_data && @flash
  @flash.bitmap.dispose if @flash.bitmap
  @flash.dispose
  @flash=nil
  @firsttimeflash=false
 end
end

def refresh_autotiles
 i=0;len=@autotileInfo.length;while i<len
  if @autotileInfo[i]
    @autotileInfo[i].dispose
    @autotileInfo[i]=nil
  end
  i+=1
 end
 i=0;len=@autosprites.length;while i<len
  if @autosprites[i]
    @autosprites[i].dispose
    @autosprites[i]=nil
  end
  i+=2
 end
 @autosprites.clear
 @autotileInfo.clear
 @prioautotiles.clear
 hasanimated=false
 for i in 0...7
  numframes=autotileNumFrames(48*(i+1))
  hasanimated=true if numframes>=2
  @framecount[i]=numframes
 end
 if hasanimated
  ysize=@map_data.ysize
  xsize=@map_data.xsize
  zsize=@map_data.zsize
  if xsize>100 || ysize>100
    @fullyrefreshedautos=false
  else
    for y in 0...ysize
    for x in 0...xsize
      haveautotile=false
      for z in 0...zsize
      id = @map_data[x, y, z]
      next if id==0 || id>=384 || @priorities[id]!=0 || !@priorities[id]
      next if @framecount[id/48-1]<2
      haveautotile=true
      break
      end
      @prioautotiles.push([x,y]) if haveautotile
    end
    end
    @fullyrefreshedautos=true
  end
 else
  @fullyrefreshedautos=true
 end
end

def map_data=(value)
 @map_data=value
 @tilesetChanged=true
end

def refreshFlashSprite
 return if !@flash || @flash_data.nil?
 ptX=@ox-@oxFlash
 ptY=@oy-@oyFlash
 if !@firsttimeflash && !@usedsprites &&
    ptX>=0 && ptX+@viewport.rect.width<=@flash.bitmap.width &&
    ptY>=0 && ptY+@viewport.rect.height<=@flash.bitmap.height
  @flash.ox=0
  @flash.oy=0
  @flash.src_rect.set(ptX.round,ptY.round,
    @viewport.rect.width,@viewport.rect.height)
  return
 end
 width=@flash.bitmap.width
 height=@flash.bitmap.height
 bitmap=@flash.bitmap
 ysize=@map_data.ysize
 xsize=@map_data.xsize
 zsize=@map_data.zsize
 @firsttimeflash=false
 @oxFlash=@ox-(width>>2)
 @oyFlash=@oy-(height>>2)
 @flash.ox=0
 @flash.oy=0
 @flash.src_rect.set(width>>2,height>>2,
    @viewport.rect.width,@viewport.rect.height)
 @flash.bitmap.clear
 @oxFlash=@oxFlash.floor
 @oyFlash=@oyFlash.floor
 xStart=(@oxFlash>>5)
 xStart=0 if xStart<0
 yStart=(@oyFlash>>5)
 yStart=0 if yStart<0
 xEnd=xStart+(width>>5)+1
 yEnd=yStart+(height>>5)+1
 xEnd=xsize if xEnd>=xsize
 yEnd=ysize if yEnd>=ysize
 if xStart<xEnd && yStart<yEnd
  yrange=yStart...yEnd
  xrange=xStart...xEnd
  tmpcolor=Color.new(0,0,0,0)
  for y in yrange
  ypos=(y<<5)-@oyFlash
  for x in xrange
    xpos=(x<<5)-@oxFlash
    id = @flash_data[x, y, 0]
    r=(id>>8)&15
    g=(id>>4)&15
    b=(id)&15
    tmpcolor.set(r<<4,g<<4,b<<4)
    bitmap.fill_rect(xpos,ypos,32,32,tmpcolor)
  end
  end
 end
end


def refreshLayer0(autotiles=false)
 if autotiles
  return true if !shown?
 end
 ptX=@ox-@oxLayer0
 ptY=@oy-@oyLayer0
 if !autotiles && !@firsttime && !@usedsprites &&
    ptX>=0 && ptX+@viewport.rect.width<=@layer0.bitmap.width &&
    ptY>=0 && ptY+@viewport.rect.height<=@layer0.bitmap.height
  if @layer0clip
  @layer0.ox=0
  @layer0.oy=0
  @layer0.src_rect.set(ptX.round,ptY.round,
    @viewport.rect.width,@viewport.rect.height)
  else
  @layer0.ox=ptX.round
  @layer0.oy=ptY.round
  @layer0.src_rect.set(0,0,@layer0.bitmap.width,@layer0.bitmap.height)
  end
  return true
 end
 width=@layer0.bitmap.width
 height=@layer0.bitmap.height
 bitmap=@layer0.bitmap
 ysize=@map_data.ysize
 xsize=@map_data.xsize
 zsize=@map_data.zsize
 if autotiles
  return true if @fullyrefreshedautos && @prioautotiles.length==0
  xStart=(@oxLayer0>>5)
  xStart=0 if xStart<0
  yStart=(@oyLayer0>>5)
  yStart=0 if yStart<0
  xEnd=xStart+(width>>5)+1
  yEnd=yStart+(height>>5)+1
  xEnd=xsize if xEnd>xsize
  yEnd=ysize if yEnd>ysize
  return true if xStart>=xEnd || yStart>=yEnd
  trans=Color.new(0,0,0,0)
  temprect=Rect.new(0,0,0,0)
  tilerect=Rect.new(0,0,32,32)
  range=0...zsize
  overallcount=0
  count=0
  if !@fullyrefreshedautos
  for y in yStart..yEnd
    for x in xStart..xEnd
    haveautotile=false
    for z in range
      id = @map_data[x, y, z]
      next if id<48 || id>=384 || @priorities[id]!=0 || !@priorities[id]
      next if @framecount[id/48-1]<2
      if !haveautotile
        haveautotile=true
        overallcount+=1
        xpos=(x<<5)-@oxLayer0
        ypos=(y<<5)-@oyLayer0
        bitmap.fill_rect(xpos,ypos,0,0,trans) if overallcount<=2000
        break
      end
    end
    for z in range
      id = @map_data[x,y,z]
      next if id<48 || @priorities[id]!=0 || !@priorities[id]
      if overallcount>2000
      xpos=(x<<5)-@oxLayer0
      ypos=(y<<5)-@oyLayer0
      count=addTile(@autosprites,count,xpos,ypos,id)
      next
      elsif id>=384
      temprect.set(((id - 384)&7)<<5,((id - 384)>>3)<<5,32,32)
      xpos=(x<<5)-@oxLayer0
      ypos=(y<<5)-@oyLayer0
      bitmap.blt(xpos,ypos,@tileset,temprect)
      else
      tilebitmap=@autotileInfo[id]
      if !tilebitmap
        anim=autotileFrame(id)
        next if anim<0
        tilebitmap=Bitmap.new(32,32)
        bltAutotile(tilebitmap,0,0,id,anim)
        @autotileInfo[id]=tilebitmap
      end
      xpos=(x<<5)-@oxLayer0
      ypos=(y<<5)-@oyLayer0
      bitmap.blt(xpos,ypos,tilebitmap,tilerect)
      end
    end
    end
  end
  else
  for tile in @prioautotiles
    x=tile[0]
    y=tile[1]
    next if x<xStart||x>xEnd
    next if y<yStart||y>yEnd
    overallcount+=1
    xpos=(x<<5)-@oxLayer0
    ypos=(y<<5)-@oyLayer0
    bitmap.fill_rect(xpos,ypos,0,0,trans) if overallcount<=2000
    for z in range
    id = @map_data[x,y,z]
    next if id<48 || @priorities[id]!=0 || !@priorities[id]
    if overallcount>2000
      count=addTile(@autosprites,count,xpos,ypos,id)
      next
    elsif id>=384
      temprect.set(((id - 384)&7)<<5,((id - 384)>>3)<<5,32,32)
      bitmap.blt(xpos,ypos,@tileset,temprect)
    else
      tilebitmap=@autotileInfo[id]
      if !tilebitmap
        anim=autotileFrame(id)
        next if anim<0
        tilebitmap=Bitmap.new(32,32)
        bltAutotile(tilebitmap,0,0,id,anim)
        @autotileInfo[id]=tilebitmap
      end
      bitmap.blt(xpos,ypos,tilebitmap,tilerect)
    end
    end
  end
  end
  Graphics.frame_reset if overallcount>2000
  @usedsprites=false
  return true
 end
 return false if @usedsprites
 @firsttime=false
 @oxLayer0=@ox-(width>>2)
 @oyLayer0=@oy-(height>>2)
 if @layer0clip
  @layer0.ox=0
  @layer0.oy=0
  @layer0.src_rect.set(width>>2,height>>2,
    @viewport.rect.width,@viewport.rect.height)
 else
  @layer0.ox=(width>>2)
  @layer0.oy=(height>>2)
 end
 @layer0.bitmap.clear
 @oxLayer0=@oxLayer0.floor
 @oyLayer0=@oyLayer0.floor
 xStart=(@oxLayer0>>5)
 xStart=0 if xStart<0
 yStart=(@oyLayer0>>5)
 yStart=0 if yStart<0
 xEnd=xStart+(width>>5)+1
 yEnd=yStart+(height>>5)+1
 xEnd=xsize if xEnd>=xsize
 yEnd=ysize if yEnd>=ysize
 if xStart<xEnd && yStart<yEnd
  tmprect=Rect.new(0,0,0,0)
  yrange=yStart...yEnd
  xrange=xStart...xEnd
  for z in 0...zsize
  for y in yrange
    ypos=(y<<5)-@oyLayer0
    for x in xrange
    xpos=(x<<5)-@oxLayer0
    id = @map_data[x, y, z]
    next if id==0 || @priorities[id]!=0 || !@priorities[id]
    if id>=384
      tmprect.set((id - 384) % 8 * 32, (id - 384) / 8 * 32,32,32)
      bitmap.blt(xpos,ypos,@tileset,tmprect)
    else
      frame=autotileFrame(id)
      bltAutotile(bitmap,xpos,ypos,id,frame)
    end
    end
  end
  end
  Graphics.frame_reset
 end
 return true
end
def getResizeFactor
  return $ResizeFactor ? $ResizeFactor : 1.0
end
def ox=(val)
  val=(val*getResizeFactor).to_i
  val=(val/getResizeFactor).to_i
  wasshown=self.shown?
  @ox=val.floor
  @nowshown=(!wasshown && self.shown?)
end
def oy=(val)
  val=(val*getResizeFactor).to_i
  val=(val/getResizeFactor).to_i
  wasshown=self.shown?
  @oy=val.floor
  @nowshown=(!wasshown && self.shown?)
end
def visible=(val)
  wasshown=@visible
  @visible=val
  @nowshown=(!wasshown && val)
end
def refresh(autotiles=false)
 @oldOx=@ox
 @oldOy=@oy
 usesprites=false
 if @layer0
  @layer0.visible=@visible
  usesprites=!refreshLayer0(autotiles)
  if autotiles && !usesprites
  return
  end
 else
  usesprites=true
 end
 refreshFlashSprite
 vpx=@viewport.rect.x
 vpy=@viewport.rect.y
 vpr=@viewport.rect.width+vpx
 vpb=@viewport.rect.height+vpy
 xsize=@map_data.xsize
 ysize=@map_data.ysize
 minX=(@ox/32)-1
 maxX=((@ox+@viewport.rect.width)/32)+1
 minY=(@oy/32)-1
 maxY=((@oy+@viewport.rect.height)/32)+1
 minX=0 if minX<0
 minX=xsize-1 if minX>=xsize
 maxX=0 if maxX<0
 maxX=xsize-1 if maxX>=xsize
 minY=0 if minY<0
 minY=ysize-1 if minY>=ysize
 maxY=0 if maxY<0
 maxY=ysize-1 if maxY>=ysize
 count=0
 if minX<maxX && minY<maxY
  @usedsprites=usesprites || @usedsprites
  if @layer0
  @layer0.visible=false if usesprites
  end
  if @fullyrefreshed
  for prio in @priotiles
    x=prio[0]
    y=prio[1]
    next if x<minX||x>maxX
    next if y<minY||y>maxY
    id=prio[3]
    xpos=(x<<5)-@ox
    ypos=(y<<5)-@oy
    count=addTile(@tiles,count,xpos,ypos,id)
  end
  else
  for z in 0...@map_data.zsize
    for y in minY..maxY
    for x in minX..maxX
      id = @map_data[x, y, z]
      next if id==0 || !@priorities[id]
      next if @priorities[id]==0
      xpos=(x<<5)-@ox
      ypos=(y<<5)-@oy
      count=addTile(@tiles,count,xpos,ypos,id)
    end
    end
  end
  end
 end
 if count<@tiles.length
  bigchange=(count<=(@tiles.length*2/3)) && (@tiles.length*2/3)>25
  j=count;len=@tiles.length;while j<len
  sprite=@tiles[j]
  @tiles[j+1]=-1
  if bigchange
    sprite.dispose
    @tiles[j]=nil
    @tiles[j+1]=nil
  elsif !@tiles[j].disposed?
    sprite.visible=false if sprite.visible
  end
  j+=2
  end
  @tiles.compact! if bigchange
 end
end
end


Última edición por Wecoc el 2012-04-13, 22:17, editado 3 veces

Wecoc
Administrador
Administrador



Créditos 8265

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por exellomenos el 2012-04-12, 03:12

buen script wecoc!! si no eres tu quien lo hará??
bueno.. Es algo que es muy útil, lastima que hay inconvenientes.. ya que es una modificación del rpg maker y no es un script normal.. Bueno
gracias por el aporte

exellomenos
Veterano
Veterano

1/3

Créditos 190

Gracias : 1

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por orochii el 2012-04-12, 21:27

¡>8DDDD!!! Diablos Wecoc, no sé cómo a mi Eminencia no se le había ocurrido, aún cuando pasa haciendo tiles y eso (eminencia mentoniana x'D?).
Créeme que si no me dejas meterte en créditos directamente, te haré un campito de "menciones honoríficas" cuando lo use, y tu nombre se sentirá solo >=D.

Muy muy buen aporte,
Orochii Zouveleki

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por senshi el 2012-04-12, 21:55

Un script muy util, siempre que me pasaba por la cabeza ese errocito de tiles faltantes ahora no se em ocurreodonde podria usarlo XDXD.
seria custion de checarlo y hacer las debidas correcciones alos autotiles.
solo me asalta una duda al hacer este cambio todos los autotilesque ya estan en el proyecto tienen que ser editados de esta forma???

senshi
Novato
Novato

0/3

Créditos 68

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Wecoc el 2012-04-13, 07:20

Senshi: Como ya dije arriba, no hace falta.
Wecoc escribió:Por cierto, edito para decir que ahora soporta los dos, si el autotile hace 128 de alto lo leerá como siempre y si hace 192 lo leerá con la nueva lectura.

Wecoc
Administrador
Administrador



Créditos 8265

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por final_fantasero99 el 2012-04-14, 08:32

Veré si funciona con el Pokémon Essentials, ya que me ayudará mucho. Una duda, ¿sirve con autotiles animados? Sería una joya si se pudiera :)

final_fantasero99
Soñador
Soñador

0/3

Créditos 134

Gracias : 11

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Wecoc el 2012-04-14, 12:41

final_fantasero99: Cierto, no dije nada de animados.
Funciona exactamente igual, ningún problema con eso xDD

Wecoc
Administrador
Administrador



Créditos 8265

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por final_fantasero99 el 2012-04-14, 13:41

Oh, genial, y una última cosa. El Pokémon Essentials corre autotiles así:
http://www.imagenes.alterengine.net/images/2ngeaew.png
¿Con este también funcionan?

final_fantasero99
Soñador
Soñador

0/3

Créditos 134

Gracias : 11

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Wecoc el 2012-04-14, 14:03

No sé si iran del todo bien pero en principio todo eso tiene que ir igual.

Wecoc
Administrador
Administrador



Créditos 8265

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Ripher el 2012-12-20, 07:03

Me gustaria ver la diferencia entre el antiguo y el nuevo Autotile,
ya lo puse en un proyecto prueba, edite algunos autotiles,
y no veo la diferencia.
se forman las mismas figuras.

en fin si pudieran subir una imagen comparativa, seria interesante.
saludos.

Ripher
Novato
Novato

0/3

Créditos 60

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Dangaioh el 2012-12-20, 08:49

Fíjate en las fechas no hagas necroposting si no es por una duda o algo mas importante

_________________









Dangaioh
Administrador
Administrador



Créditos 5046

Gracias : 84

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Wecoc el 2012-12-20, 13:03

Haz caso a Danga. No hagas necropost si no es por algo importante, hay que seguir las normas del foro.
Pero ya que estamos te contesto, para resolver tu duda.

Evidentemente si no haces cambios en los tiles extra respecto a los normales se verá igual. Pero la gracia está en ponerles cambios. Puedes poner pocos, como matojos de hierba de más:





(Si abres las imagenes en diferentes pestañas, haciendo click, verás mejor las diferencias)

A figuras más nuevas que te resuelvan ciertos problemas de cortes y demás.
Este script solo será útil para grafistas que ya tengan cierto nivel de experiencia como para hacer sus tiles.




Wecoc
Administrador
Administrador



Créditos 8265

Gracias : 372

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Ripher el 2012-12-21, 00:10

Muchas gracias, si ahora lo veo,
es increible!
ya lo he aplicado y me gusto, y como me gusta editar tiles,
creo que hare varios, cuando los termine los subire para hacer el aporte de vuelta.

gracias.
PD: Soy nuevo asi que no tenia idea que postear en temas antiguos era malo.
siempre hay dudas que quedan en temas anteriores, sobretodo si eres nuevo, no creen?...

Ripher
Novato
Novato

0/3

Créditos 60

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Tilemap: nueva lectura de los Autotiles

Mensaje por Contenido patrocinado Hoy a las 14:03


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

Permisos de este foro:
No puedes responder a temas en este foro.