Jump to content
Rpg²S Forum

3D RMVX!


Xemnas
 Share

Recommended Posts

HEllo Everyone(oggi mi sento molto ingleseXD)

 

Cmq andiamo al sodo!!!

 

Ecco lo script che rivoluzionerà i vostri metodi e le vostre creazioni!!!

 

Mode7 VX

 

 

Autore=2chan

Descriozione=*Sotto*

 

Script INSERITELI IN QUESTO ORDINE!!!:

 

 

定数定義

module Game
 #ゲーム画面の定義
 DISPLAY_WIDTH = 544
 DISPLAY_HEIGHT = 416
 
 #縦横チップ数の定義
 DISPLAY_CHIP_WIDTH = DISPLAY_WIDTH / 32 
 DISPLAY_CHIP_HEIGHT = DISPLAY_HEIGHT / 32
 
 #実座標の定義(よくわからないがマップ座標 * 256が定義らしい)
 DISPLAY_REAL_WIDTH = DISPLAY_CHIP_WIDTH * 256
 DISPLAY_REAL_HEIGHT = DISPLAY_CHIP_HEIGHT * 256
 
end

#記述ルール

 #定義済みの処理への追加(元の処理を損ねない)
 #--------------------------------------------------------------------------
 # ● 処理
 #--------------------------------------------------------------------------

 #定義済みの処理を上書きする変更
 #--------------------------------------------------------------------------
 # ● 処理 (上書き)
 #--------------------------------------------------------------------------

 #新規処理
 #--------------------------------------------------------------------------
 # ○ 処理
 #--------------------------------------------------------------------------

TileBitmap

#タイルを並べられる
class Rect
 def set_pos(x, y)
   self.x = x
   self.y = y
 end

 def set_size(w, h)
   self.width = w
   self.height = h
 end  
end



#=======================================================================
# ■ TileBitmap
#------------------------------------------------------------------------------
#  
#==============================================================================
class TileBitmap < Bitmap
 def initialize(width, height, tilemap)
   super(width, height)
   @tilemap = tilemap
   @map_width = width / 32
   @map_height = height / 32
   @buffer = Bitmap.new(width, height)
   @map_x = 999
   @map_y = 999
   @anime_face = 0
   @anime_face_x = 0
   @anime_speed = 30
   @anime_count = @anime_speed
   @main_autotile = MainAutotile.new(self, @tilemap.bitmaps)
   @temprect = Rect.new(0,0,32,32)
   @range = -1..1
 end
 
 #--------------------------------------------------------------------------
 def dispose
   @buffer.dispose
   @main_autotile.dispose
   super
 end

#--------------------------------------------------------------------------
 def set_tile(id, dx, dy)
   case id
     when 2048...2816
       set_auto_tile1(id - 2048, dx, dy)
     when 2816...4352
       chipid, atid = (id -2816).divmod(48)
       @main_autotile.draw(1, 
         atid, (chipid & 7) << 6 , (chipid >> 3) * 96, dx, dy, chipid)
     when 4352...5888
       set_auto_tile2(@tilemap.bitmaps[2], id - 4352, dx, dy)
     when 5888...8000
       set_auto_tile2(@tilemap.bitmaps[3], id - 5888, dx, dy)
     when 1536...2048
       set_normal_tile(@tilemap.bitmaps[4], id - 1536, dx, dy)
     when 1...256
       #0は書き込まない
       set_normal_tile(@tilemap.bitmaps[5], id, dx, dy)
     when 256...512
       set_normal_tile(@tilemap.bitmaps[6], id - 256, dx, dy)
     when 512...768
       set_normal_tile(@tilemap.bitmaps[7], id - 512, dx, dy)
     when 768...1536
       set_normal_tile(@tilemap.bitmaps[8], id - 768, dx, dy)
   end
 end
 
#--------------------------------------------------------------------------
 def set_normal_tile(bitmap, id, dx, dy)
   if(id < 128)
     @temprect.set((id & 7) << 5, id >> 3 << 5, 32, 32)
   else
     id = id - 128
     @temprect.set(((id & 7) + 8) << 5, id >> 3  << 5, 32, 32)
   end
   blt(dx, dy, bitmap, @temprect)
 end

#--------------------------------------------------------------------------
 def set_auto_tile1(id, dx, dy)
   chip_id, atid = id.divmod(48)

   f = @anime_face
   fx = @anime_face_x
   case chip_id
     when 0
       @main_autotile.draw(0, atid, fx, 0, dx, dy, f)
     when 1
       @main_autotile.draw(0, atid, fx, 96, dx, dy, 8 + f)
     when 2
       @main_autotile.draw(0, atid, 192, 0, dx, dy, 3)
#        blt(dx, dy, @tilemap.bitmaps[0], Rect.new(192, 0, 32, 32))
     when 3
       blt(dx, dy, @tilemap.bitmaps[0], Rect.new(192, 96, 32, 32))
     when 4
       @main_autotile.draw(0, atid, 256 + fx, 0, dx, dy, f + 4)
     when 6
       @main_autotile.draw(0, atid, 256 + fx, 96, dx, dy, f + 12)
     when 8
       @main_autotile.draw(0, atid, fx, 192, dx, dy, f + 16)
     when 10
       @main_autotile.draw(0, atid, fx, 288, dx, dy, f + 20)
     when 12
       @main_autotile.draw(0, atid, 256 + fx, 192, dx, dy, f + 24)
     when 14
       @main_autotile.draw(0, atid, 256 + fx, 288, dx, dy, f + 28)
   end
   
 end
 
 #--------------------------------------------------------------------------
 # アニメーションタイルであればtrueを返す
 # Params: tile_id タイル番号
 # Return: アニメーションタイルであればTrue
 #--------------------------------------------------------------------------
 def anime_tile? (tile_id)
   return tile_id && tile_id.between?(2048, 2815)
 end
 
 #--------------------------------------------------------------------------
 def set_auto_tile2(bitmap, id, dx, dy)
   #オートタイルID
   autotile_id = id % 48
   
   #仮に八分割して表示
   real = id  / 48
   @temprect.set((real & 7) << 5, real >> 3 << 5, 32, 32)
   blt(dx, dy, bitmap, @temprect)
 end

 #--------------------------------------------------------------------------
 # マップ上の座標からマップをセット
 #--------------------------------------------------------------------------
 def set_map(ox, oy)
   return update_anime(ox, oy) if @map_x == ox && @map_y == oy 

   #誤差が1の時はバッファからマップをコピー、不足分のみ描画する
   #このときアニメカウント0ならアニメを更新する
   dir_x = ox - @map_x 
   dir_y = oy - @map_y 
   update_anime(ox - dir_x, oy - dir_y)
   #ループの考慮なし
   #マップWとdirxの絶対値が同じなら+ならー1ーなら1にする
   if @range === dir_x && @range === dir_y
     case
       when dir_x.zero? && dir_y == -1
         copy_from_buffer(Rect.new(0, 0, width, height - 32), 0, 32)
         #上端の一列を描く
         draw_map(0, 0, ox, oy, 
           ox + @map_width, oy + 1)
       when dir_x.zero? && dir_y == 1
         copy_from_buffer(Rect.new(0, 32, width, height - 32), 0, 0)
         #下端の一列を描く
         draw_map(0, height - 32, ox, oy + @map_height - 1,
           ox + @map_width, oy + @map_height)
       when dir_y.zero? && dir_x == -1
         copy_from_buffer(Rect.new(0, 0, width - 32, height), 32, 0)
         #左端の一列を描く
         draw_map(0, 0, ox, oy, 
           ox + 1, oy + @map_height)
       when dir_y.zero? && dir_x == 1
         copy_from_buffer(Rect.new(32, 0, width - 32, height), 0, 0)
         #右端の一列を描く
         draw_map(width - 32, 0, ox + @map_width - 1, oy,
           ox + @map_width, oy + @map_height)

#        when dir_y = -1 && dir_x = -1
#        when dir_y = -1 && dir_x = 1
#        when dir_y = 1 && dir_x = -1
#        when dir_y = 1 && dir_x = 1
     end
     
   else
     #全描画
     #アニメカウントを考慮すること
     clear
     draw_map(0, 0, ox, oy, ox + @map_width, oy + @map_height)
   end
   @map_x = ox
   @map_y = oy
   return true
 end 
 
 def next_anime_face
   @anime_face = (@anime_face + 1) % 3
   @anime_face_x = @anime_face << 6
 end
 
 
 #--------------------------------------------------------------------------
 # バッファからコピー
 #ox,oy 左上の座標(関数内で画面外補正をかける)
 #--------------------------------------------------------------------------
 def update_anime(ox, oy)
   if @anime_count.zero?
     next_anime_face

     x = y = dx = dy = 0
     data = $game_map.data
     map_each(ox+3, oy, ox + @map_width-3, oy + @map_height) do |x, y, dx, dy|
       #レイヤー1のアニメタイルはアニメタイルの上にある
       #レイヤー2にアニメタイルは無い
       #よって0のみチェックすればよい
       if anime_tile?(data[x, y, 0])
         for z in 0..2 
           tile_id = data[x, y, z]
           set_tile(tile_id, 96 + dx, dy) if tile_id
         end
       end
     end    
     
     @anime_count = @anime_speed
     return true
   else
     @anime_count -= 1
     return false
   end
 end
 
 #--------------------------------------------------------------------------
 # バッファからコピー
 #--------------------------------------------------------------------------
 def copy_from_buffer(r,  bx, by)
   @buffer.clear
   @buffer.blt(0, 0, self, self.rect)

   clear
   blt(bx, by, @buffer, r)
 end

 #--------------------------------------------------------------------------
 def draw_map(tox, toy, ox, oy, xmax, ymax)
   data = $game_map.data
   x = y = dx = dy = 0
   map_each(ox, oy, xmax, ymax) do |x, y, dx, dy|
     for z in 0..2
       tile_id = data[x, y, z]
       set_tile(tile_id, tox + dx, toy + dy) if tile_id
     end
   end
 end
 
 #--------------------------------------------------------------------------
 # マップの特定箇所に対して処理を行う
 # z軸については考慮しないため処理ブロック側で実装のこと
 # Params:
 #   sx start_x
 #   sy start_y
 #   ex end_x
 #   ey end_y
 # Yield: |x, y, dx, dy| マップのx,y、0から数えた描画先のx,y
 #--------------------------------------------------------------------------
 def map_each(sx, sy, ex, ey)
   mapw = $game_map.width
   maph = $game_map.height
   isv = $game_map.loop_vertical?
   ish = $game_map.loop_horizontal?
   draw_y = 0
   for y in sy...ey
     y = get_looped_point(y, maph) if isv
     draw_x = 0
     for x in sx...ex
       x = get_looped_point(x, mapw) if ish
       yield(x, y, draw_x, draw_y)
       draw_x += 32
     end
     draw_y += 32
   end    
 end
 
 #ループを考慮して座標を取得(x,y対応)
 #val 現在位置  size マップサイズ 
#--------------------------------------------------------------------------
 def get_looped_point(val, size)
   return case
     when size <= val then val -= size
     when val < 0 then val += size
     else val
   end
 end 
end

 

TileSprite

class TileSprite < Sprite
 def initialize(width, height, tilemap, viewport)
   super(viewport)
   self.bitmap = Bitmap.new(Game::DISPLAY_WIDTH, Game::DISPLAY_HEIGHT)
   self.x = 0
   self.y = 0
   self.ox = 0
   self.oy = 0
   self.z = 0
   @backbuffer = TileBitmap.new(width, height, tilemap)
   @bg = Sprite.new(viewport)
   @bg.z = 1
   @bg.blend_type = 1
   @bg.bitmap = Cache.picture('bg')
   
   @mapx = -999
   @mapy = -999

   @x_plus = (width - Game::DISPLAY_WIDTH) / 2
   @y_plus =  128 #(height - Game::DISPLAY_HEIGHT) / 2
   
   @draw_count = false
   
   @x_table = Table.new(416)
   @y_table = Table.new(416)
   set_render_table(45)
 end

 def dispose
   @bg.dispose if @bg
   @backbuffer.dispose if @backbuffer
   self.bitmap.dispose if self.bitmap
   super
 end
 
 def hide
   self.visible = false
   @bg.visible = false
 end
 
 def show
   self.visible = true
   @bg.visible = true
 end
 

 def set_render_table(angle)
   return false if angle == @angle
   @angle = angle
   d = 400.0 
   rad = angle *  Math::PI / 180
   sina = Math.sin(rad)
   cosa = Math.cos(rad)

   x_zoom = 272 * 1.5
   for i in 0...416

     sy = 208 - i 

     unless angle == 90
       aaa = sy == 0 ? 0: (90 - angle) / 208.0 * sy
       aaa = sy < 0 ? 90 + aaa : 90 - aaa
       rad = aaa *  Math::PI / 180
       sy = (sy / Math.sin(rad)) * (d + (sy * Math.cos(rad))) / d
     end
   
     
     to_y = sina.zero? ? -256: ((sy / sina) * (d + (sy * cosa)) / d).round
     #to_y = sina.zero? ? -256: ((sy / sina) * (d + (sy * cosa)) / d).round
     @y_table[i] = 208 - to_y

     #y=1のときのx
     to_x = (-x_zoom * (d + (sy * -cosa)) / d) + x_zoom
     @x_table[i] = - (272 * to_x / (272 - to_x )).round
   end
   
   #一応bgのサイズもかえとく
   #90が0で45が100
   case @angle
     when 45
       @bg.zoom_y = 1.0
     when 90
       @bg.zoom_y = 0.0
     else  
       @bg.zoom_y = (1.0 / 45) * (90 - @angle)
     end
     @bg.opacity = 255 * @bg.zoom_y
   return true  
 end


 
 #マップ上の座標で設定
 def update_map(ox, oy)
   return unless self.visible

   aox = ($game_map.display_x >> 3 & 31) + @x_plus
   aoy = ($game_map.display_y >> 3 & 31) + @y_plus

   ud = set_render_table($game_map.get_angle)
   sd = @backbuffer.set_map(ox, oy)
   return if !sd && !ud && aox == @mapx && aoy == @mapy 
   update_bitmap(aox, aoy)
 end
 
 def update_bitmap(aox, aoy)
   @mapx = aox
   @mapy = aoy

   unless aox == @x_plus && aoy == @y_plus
     @draw_count = !@draw_count
     return if @draw_count
  end
   
   bmp = self.bitmap
   bmp.clear

   bmph = bmp.height
   bmpw = bmp.width
   
   yt = @y_table
   xt = @x_table
   bb = @backbuffer
   from_r = Rect.new(0, 0, 1 , 1)
   to_r = Rect.new(0, 0, bmpw, 1)
   i = 0
   while i < bmph
     to_y = yt[i]
     if to_y < -@y_plus
       i += 1
       next
     end
       
     to_x = xt[i]
     to_r.y = i
     
     ww = 0
     while i < bmph
       ww += 1
       i += 1
       break unless to_x == xt[i] && to_y + ww == yt[i]
     end
     
       
     to_r.height = ww
     from_r.set(to_x + aox, to_y + aoy, bmpw - to_x - to_x, ww)
     bmp.stretch_blt(to_r, bb, from_r) 
   end
 end
 
 
end

class Game_Map
 #--------------------------------------------------------------------------
 # ● 公開インスタンス変数
 #--------------------------------------------------------------------------
 attr_accessor   :mode3D

 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #--------------------------------------------------------------------------
 alias a9_003_initialize initialize
 def initialize
   a9_003_initialize
   @mode3D = false
   @angle3D = 45
 end
 
 #--------------------------------------------------------------------------
 def set_angle(v)
   @angle3D = v
 end
 
 #--------------------------------------------------------------------------
 def get_angle
   @angle3D
 end
 
end

class Spriteset_Map

 #--------------------------------------------------------------------------
 # ● ビューポートの作成
 #--------------------------------------------------------------------------
 alias a9_003_create_viewports create_viewports
 def create_viewports
   a9_003_create_viewports
   @viewport_invisible = Viewport.new(0, 0, 1, 1)
   @viewport_invisible.visible = false
 end
 
 #--------------------------------------------------------------------------
 # ● ビューポートの解放
 #--------------------------------------------------------------------------
 alias a9_003_dispose_viewports dispose_viewports
 def dispose_viewports
   a9_003_dispose_viewports
   
   @viewport_invisible.dispose
 end
 #--------------------------------------------------------------------------
 # ● タイルマップの作成
 #--------------------------------------------------------------------------
 alias a9_003_create_tilemap create_tilemap
 def create_tilemap
   a9_003_create_tilemap
   @tilemap.visible = false
   @tile_sprite = TileSprite.new(544+448, 416+128, @tilemap, @viewport1)
   end_3d
 end
 
 #--------------------------------------------------------------------------
 def begin_3d
   @tilemap.viewport = @viewport_invisible
   @mode3d = true
   @tile_sprite.show
 end

 #--------------------------------------------------------------------------
 def end_3d
   @tilemap.viewport = @viewport1
   @mode3d = false
   @tile_sprite.hide
 end

 
 #--------------------------------------------------------------------------
 # ● タイルマップの解放
 #--------------------------------------------------------------------------
 alias a9_003_dispose_tilemap dispose_tilemap
 def dispose_tilemap
   a9_003_dispose_tilemap
   @tile_sprite.dispose
 end


 #--------------------------------------------------------------------------
 # ● タイルマップの更新
 #--------------------------------------------------------------------------
 alias a9_003update_tilemap update_tilemap
 def update_tilemap
   g = $game_map
   unless g.mode3D == @mode3d
     @mode3d ? end_3d: begin_3d
   end
   unless @mode3d
     a9_003update_tilemap
   else
     @tile_sprite.update_map((g.display_x >> 8) - 7, (g.display_y >> 8) - 4)
   end
 end
end

#==============================================================================
# ■ Game_Vehicle
#------------------------------------------------------------------------------
#  乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
# 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
#==============================================================================

class Game_Vehicle < Game_Character

 #--------------------------------------------------------------------------
 # ● 乗り物に乗る
 #--------------------------------------------------------------------------
 alias a9_003_get_on get_on
 def get_on
   a9_003_get_on
   $game_map.mode3D = true if @type == 2  # 飛行船の場合
 end

 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 alias a9_003_update update
 def update
   a = @altitude
   a9_003_update
   update_angle(a)
 end
 
 #--------------------------------------------------------------------------
 def update_angle(alti)
   def set_angle
     $game_map.set_angle(90 - (45 / 8 * (@altitude / 4 + 1)))
   end
   
   if @type == 2               # 飛行船の場合
     if @driving
       if alti < MAX_ALTITUDE
         @altitude == MAX_ALTITUDE ? $game_map.set_angle(45): set_angle
       end
     elsif 0 < alti
       if @altitude.zero?
         $game_map.set_angle(90)
         $game_map.mode3D = false
       else
           set_angle
       end
     
     end
   end

   
 end
end

 

MainAutotile

#=======================================================================
# ■ MainAutotile
#------------------------------------------------------------------------------
#  Bitmapに海形式のオートタイルを描くクラス
#==============================================================================
class MainAutotile
 def initialize(parent, tilebitmaps)
   super()
   @parent = parent
   @bitmaps = tilebitmaps

   @rect = Rect.new(0, 0, 16, 16)
# 01 buf0
# 23    1
# 45    2
   @lt_buffer = {0=>1, 4=>1, 6=>1, 8=>1, 12=>1, 19=>1, 23=>1, 32=>1, 33=>1}
   @lt_buf_0 = {0=>1, 4=>1, 6=>1, 8=>1, 12=>1}
   @lt_buf_1 = {19=>1, 32=>1}
   @lt_buf_2 = {23=>1,33=>1}
   @lt_1 = {1=>1, 3=>1, 5=>1, 7=>1, 9=>1, 11=>1, 13=>1, 
     15=>1, 26=>1, 27=>1, 29=>1, 31=>1, 39=>1}
   @lt_2 = {34=>1, 35=>1, 42=>1, 43=>1, 46=>1 }
   @lt_3 = {20=>1, 21=>1, 22=>1, 36=>1, 37=>1, 45=>1}#23, 33
   @lt_4 = {16=>1, 17=>1, 18=>1, 40=>1, 41=>1, 44=>1}#17..19, 32
   @lt_5 = {2=>1, 4=>1, 8=>1, 10=>1, 14=>1, 24=>1,
     25=>1, 28=>1, 30=>1, 38=>1}#0, 6, 12
     
   @rt_buffer = {27=>1}
   @rt_height = {6=>1, 14=>1, 20=>1, 22=>1, 27=>1, 28=>1, 29=>1}#7
   
   @lb_buffer = {1=>1, 2=>1, 3=>1, 31=>1}
   @lb_width = {1=>1, 2=>1, 3=>1, 12=>1, 14=>1, 16=>1, 17=>1, 26=>1, 31=>1}
   
   make_buffer
 end
 
 #ox oy タイル側の転送元原点(海形式のタイルならなんにでも対応出来る)
 #--------------------------------------------------------------------------
 # メイン(海構成)のオートタイルを描く
 # Params:
 #   bmpNo @tilemap.bitmapsの数値(通常0か1)
 #   atid オートタイルID
 #   ox 取得もとx
 #   oy 取得もとy
 #   dx 描画先x
 #   dy 描画先y
 #   bufid バッファID
 #--------------------------------------------------------------------------
 def draw(bmpNo, atid, ox, oy, dx, dy, bufid)
   r = @rect
   r.set_size(16, 16)
   b = @parent
   bw = bufid << 5
   bmps = rect = nil
   return if draw_lt(r, atid, ox, oy, bw) do |bmps, rect|
     b.blt(dx, dy, bmps[bmpNo], rect)
   end
   
   draw_rt(r, atid, ox, oy, bw) do |bmps, rect|
     b.blt(dx + 16, dy, bmps[bmpNo], rect)
   end   

   return if draw_lb(r, atid, ox, oy, bw) do |bmps, rect|
     b.blt(dx, dy + 16, bmps[bmpNo], rect)
   end

   draw_rb(r, atid, ox, oy) do |bmps, rect|
     b.blt(dx + 16, dy + 16, bmps[bmpNo], rect)
   end   
 end

 #--------------------------------------------------------------------------
 def dispose
   @buffers.each do |v|
     v.dispose
   end
 end
 
 #--------------------------------------------------------------------------
 private
 
 #--------------------------------------------------------------------------
 def make_buffer
   @buffers = []
   
   bmp1 = Bitmap.new(1024, 96)
   @buffers[0] = bmp1
   tobmp = @bitmaps[0]
   for i in 0..6
     draw_buffer(tobmp, i * 64, 0, bmp1, i * 32, 0)
   end
   #7のバッファ
   for i in 0..6
     draw_buffer(tobmp, i * 64, 96, bmp1, 256 + (i * 32), 0)
   end
   #15のバッファ
   for i in [0, 1, 2, 4, 5, 6]
     draw_buffer(tobmp, i * 64, 192, bmp1, 512 + (i * 32), 0)
   end
   for i in [0, 1, 2, 4, 5, 6]
     draw_buffer(tobmp, i * 64, 288, bmp1, 768 + (i * 32), 0)
   end
   
   bmp2 = Bitmap.new(1024, 96)
   @buffers[1] = bmp2
   tobmp = @bitmaps[1]
   for i in 0..7
     draw_buffer(tobmp, i * 64, 0, bmp2, i * 32, 0)
   end
   for i in 0..7
     draw_buffer(tobmp, i * 64, 96, bmp2, 256 + (i * 32), 0)
   end
   for i in 0..7
     draw_buffer(tobmp, i * 64, 192, bmp2, 512 + (i * 32), 0)
   end
   for i in 0..7
     draw_buffer(tobmp, i * 64, 288, bmp2, 768 + (i * 32), 0)
   end
 end

 #--------------------------------------------------------------------------
 def draw_buffer(bmp, ox, oy, tobmp, tox, toy)
   r = Rect.new(0, 0, 16, 16)
   #つうじょうチップ
   r.set_pos(ox + 32, oy + 64)
   tobmp.blt(tox,      toy, bmp, r)
   r.set_pos(ox + 16, oy + 64)
   tobmp.blt(tox + 16, toy, bmp, r)
   r.set_pos(ox + 32, oy + 48)
   tobmp.blt(tox,      toy + 16, bmp, r)
   r.set_pos(ox + 16, oy + 48)
   tobmp.blt(tox + 16, toy + 16, bmp, r)
   
   #||
   r.set_pos(ox, oy + 64)
   tobmp.blt(tox,      toy + 32, bmp, r)
   r.set_pos(ox + 48, oy + 64)
   tobmp.blt(tox + 16, toy + 32, bmp, r)
   r.set_pos(ox, oy + 48)
   tobmp.blt(tox,      toy + 48, bmp, r)
   r.set_pos(ox + 48, oy + 48)
   tobmp.blt(tox + 16, toy + 48, bmp, r)
   
   #=
   r.set_pos(ox + 32, oy + 32)
   tobmp.blt(tox,      toy + 64, bmp, r)
   r.set_pos(ox + 16, oy + 32)
   tobmp.blt(tox + 16, toy + 64, bmp, r)
   r.set_pos(ox + 32, oy + 80)
   tobmp.blt(tox,      toy + 80, bmp, r)
   r.set_pos(ox + 16, oy + 80)
   tobmp.blt(tox + 16, toy + 80, bmp, r)
 end
 
 #--------------------------------------------------------------------------
 # オートタイルの左上を描く
 # Return: 描画終了ならtrue
 #--------------------------------------------------------------------------
 def draw_lt(r, atid, ox, oy, bx)
   case 
     #r.set(ox, oy, 16, 16)
     when @lt_buf_0.key?(atid)
       r.x = bx
       r.y = 0
     when @lt_buf_1.key?(atid)
       r.x = bx
       r.y = 32
     when @lt_buf_2.key?(atid)
       r.x = bx
       r.y = 64
     when @lt_1.key?(atid)
       r.x = ox + 32
       r.y = oy
     when @lt_2.key?(atid) 
       r.x = ox
       r.y = oy + 32
     when @lt_3.key?(atid)
       r.x = ox + 32
       r.y = oy + 32
     when @lt_4.key?(atid)
       r.x = ox
       r.y = oy + 64
     when @lt_5.key?(atid)
       r.x = ox + 32
       r.y = oy + 64
   end
   bool = false
   case atid
     when 0, 15, 32..34, 36, 38, 40
       r.set(r.x, r.y, 32, 32)
       bool = true
     when 3, 4, 7, 8, 11, 12, 16, 18, 23, 25, 35, 37
       r.width = 32
     when 6, 9, 13, 19, 20, 28, 41
       r.height = 32
   end
   yield(@lt_buffer.key?(atid) ? @buffers :  @bitmaps , r)
   return bool
 end

 #--------------------------------------------------------------------------
 # オートタイルの右上を描く
 # Return: 描画終了ならtrue
 #--------------------------------------------------------------------------
 def draw_rt(r, atid, ox, oy, bx)
   if case atid
     #r.set(ox + 16, oy, 16, 16)
     when 27
       r.set_pos(bx + 16, 32)
     when 2, 6, 10, 14, 15, 17, 19, 30, 31, 41 #2, 3, 7, 11
       r.set_pos(ox + 48, oy)
     when 1, 5, 9, 13, 28, 29, 40 #0, 1, 4, 8, 12, 16, 18
       r.set_pos(ox + 16, oy + 64)
     when 20..22, 34, 43 #35, 33, 23
       r.set_pos(ox + 16, oy + 32)
     when 24, 26, 38, 39, 44 #25, 27, 32
       r.set_pos(ox + 48, oy + 64)
     when 36, 42, 45, 46 #37
       r.set_pos(ox + 48, oy + 32)
     #when 3, 7, 11, 18, 25, 35, 37
     #  false
   end then
     r.set(r.x, r.y, 16, @rt_height.key?(atid) ? 32: 16)
     yield(@rt_buffer.key?(atid) ? @buffers :  @bitmaps, r)
   end
   return false
 end

 #--------------------------------------------------------------------------
 # オートタイルの左下を描く
 # Return: 描画終了ならtrue
 #--------------------------------------------------------------------------
 def draw_lb(r, atid, ox, oy, bx)
   if case atid
     #r.set(ox, oy + 16, 16, 16)
     when 1, 2, 3
       r.set_pos(bx, 16)
     when 31
       r.set_pos(bx, 80)
     when 8, 10, 11, 12, 14, 15, 22, 23, 25, 27, 37 #9, 13
       r.set_pos(ox + 32, oy + 16)
     when 4, 5, 7, 21, 24, 26, 36 #0, 1,2,3,  6, 20
       r.set_pos(ox + 32, oy + 48)
     when 16, 17, 18, 32, 34, 35, 42 #19
       r.set_pos(ox, oy + 48)
     when 29, 30, 38, 39, 45 #28, 33, 31
       r.set_pos(ox + 32, oy + 80)
     when 40, 43, 44, 46 #41
       r.set_pos(ox, oy + 80)
     #when 9, 13, 20, 28, 41
     #  false
   end then
     is_buf = @lb_width.key?(atid)
     r.set(r.x, r.y, is_buf ? 32: 16, 16)
     yield(@lb_buffer.key?(atid) ? @buffers :  @bitmaps, r)
     return is_buf || @rt_height.key?(atid)
   end
   return false
 end

 #--------------------------------------------------------------------------
 # オートタイルの左下を描く(バッファは使わない)
 # Return: なし
 #--------------------------------------------------------------------------
 def draw_rb(r, atid, ox, oy)
   case atid
     #r.set(ox, oy + 16, 16, 16)
     when 4, 5, 7, 13, 15, 18, 19, 21, 23, 35 #6, 12, 14
       r.set_pos(ox + 48, oy + 16)
     when 8..11, 16, 34 #0,1,2,3, 17, 20, 22
       r.set_pos(ox + 16, oy + 48)
     when 24, 25, 27, 32, 36, 37, 42 #26
       r.set_pos(ox + 48, oy + 48)
     when 30, 40, 41, 43 #28, 29, 31, 33
       r.set_pos(ox + 16, oy + 80)
     when 38, 39, 44..46
       r.set_pos(ox + 48, oy + 80)
     #when 6, 14, 20, 22, 28, 29
     #12,  17, 26
     else return
   end
   yield (@bitmaps, r)
 end
end

 

 

 

 

Praticamente questo script permette che, ogni volta che entrate nella aereonave la mappa diventa 3D ma lo si puo' richiamare tramite evento così senza essere obbligati a prendere l'aereonave!!

 

ecco come si fa':

 

 

 

Per la MODE7:

$game_map.mode3D = true

 

Per l'angolo della mappa:

$game_map.set_angle(change this to an angle equal or below 90)

 

 

Spero di esservi stato utile se volete ecco la Demo!

 

Ciao a tutti!!!

 

 

By

Xemnas

:sisi:

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

Me l'aspettavo che qualcuno lo postasse...

e io rispondo:

http://www.gobblin.net/wp-content/uploads/2009/08/darth_vader_noooo1.jpg

Succodipera: Il blog di Morshudiego su RPG Maker (Leggetelo, lì ci sono più aggiornamenti che sulla firma!)

<AGGIORNAMENTI> (Ultima modifica: Oct 30 2014)
Myth of First Star - Facendo il punto della situazione
Project Sudoku - Il multitasking non è il mio forte. XD (Spero comunque di risolvere il bug per rilasciare la 0.3 :P)
Tutorial Menu Eventi - Uscita parte 2 (però è malformattata, non so se riuscirò ad editare tutto in un giorno. Abbiate pasiensa :P)

<PROGETTI>
Myth of First Star - Project Sudoku (*trollface*)

<SCRIPTS>
Zelda Map Scrolling - Switch Post Caricamento - Messaggi Istantanei - Picture Manager - Minimalist Menu

<TUTORIAL>
Uso corretto acqua RTP - Creare un menu ad eventi

Link to comment
Share on other sites

Me l'aspettavo che qualcuno lo postasse...

e io rispondo:

http://www.gobblin.net/wp-content/uploads/2009/08/darth_vader_noooo1.jpg

 

???

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

???

Arrivo subito alla spiegazione della mia risposta.

Il Mode7 del VX funziona solo con l'airship, e ho visto pochi giochi che sfruttano l'airship base del VX.

Poi un'altra brutta cosa: se si hanno degli eventi grafici mentre si usa l'airship, essi vengono comunque rappresentati come se si fosse in 2D, quindi vedrete molti eventi volare nel vuoto sempre con la stessa immagine.

 

A mio parere non mi sembra un buon script :|

Succodipera: Il blog di Morshudiego su RPG Maker (Leggetelo, lì ci sono più aggiornamenti che sulla firma!)

<AGGIORNAMENTI> (Ultima modifica: Oct 30 2014)
Myth of First Star - Facendo il punto della situazione
Project Sudoku - Il multitasking non è il mio forte. XD (Spero comunque di risolvere il bug per rilasciare la 0.3 :P)
Tutorial Menu Eventi - Uscita parte 2 (però è malformattata, non so se riuscirò ad editare tutto in un giorno. Abbiate pasiensa :P)

<PROGETTI>
Myth of First Star - Project Sudoku (*trollface*)

<SCRIPTS>
Zelda Map Scrolling - Switch Post Caricamento - Messaggi Istantanei - Picture Manager - Minimalist Menu

<TUTORIAL>
Uso corretto acqua RTP - Creare un menu ad eventi

Link to comment
Share on other sites

Arrivo subito alla spiegazione della mia risposta.

Il Mode7 del VX funziona solo con l'airship, e ho visto pochi giochi che sfruttano l'airship base del VX.

Poi un'altra brutta cosa: se si hanno degli eventi grafici mentre si usa l'airship, essi vengono comunque rappresentati come se si fosse in 2D, quindi vedrete molti eventi volare nel vuoto sempre con la stessa immagine.

 

A mio parere non mi sembra un buon script :|

 

 

Che funziona olo con l'airship noin è vero perchè ho spiegato come si fa' senza al primo post!

Per il resto purtroppo ti devo dare raggione!!!

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

Che funziona olo con l'airship noin è vero perchè ho spiegato come si fa' senza al primo post!

Per il resto purtroppo ti devo dare raggione!!!

ah si scusa non l'avevo visto :P, comunque non avrebbe senso a causa degli sprite.

Mi sono dimenticato, comunque, che da un lag pazzesco. (io che ho un computer buono, regge più di 10 eventi paralleli con grafica senza lag... mi è arrivato a 13 FPS)

Succodipera: Il blog di Morshudiego su RPG Maker (Leggetelo, lì ci sono più aggiornamenti che sulla firma!)

<AGGIORNAMENTI> (Ultima modifica: Oct 30 2014)
Myth of First Star - Facendo il punto della situazione
Project Sudoku - Il multitasking non è il mio forte. XD (Spero comunque di risolvere il bug per rilasciare la 0.3 :P)
Tutorial Menu Eventi - Uscita parte 2 (però è malformattata, non so se riuscirò ad editare tutto in un giorno. Abbiate pasiensa :P)

<PROGETTI>
Myth of First Star - Project Sudoku (*trollface*)

<SCRIPTS>
Zelda Map Scrolling - Switch Post Caricamento - Messaggi Istantanei - Picture Manager - Minimalist Menu

<TUTORIAL>
Uso corretto acqua RTP - Creare un menu ad eventi

Link to comment
Share on other sites

ah si scusa non l'avevo visto :P, comunque non avrebbe senso a causa degli sprite.

Mi sono dimenticato, comunque, che da un lag pazzesco. (io che ho un computer buono, regge più di 10 eventi paralleli con grafica senza lag... mi è arrivato a 13 FPS)

Dimmi peer piacere potenza ram e nome voltaggi della cpu!

 

A me regge almeno come minimo 30 eventi parallerim massimo 150

e lo script a me va veloce come sempre!!!

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

Dimmi peer piacere potenza ram e nome voltaggi della cpu!

 

A me regge almeno come minimo 30 eventi parallerim massimo 150

e lo script a me va veloce come sempre!!!

Orca O.O Che hai, un moster jam? XD

 

Comunque ho un:

Pentilum® D CPU 2.80GHz

2.80 GHz, 1,50GB di RAM

Succodipera: Il blog di Morshudiego su RPG Maker (Leggetelo, lì ci sono più aggiornamenti che sulla firma!)

<AGGIORNAMENTI> (Ultima modifica: Oct 30 2014)
Myth of First Star - Facendo il punto della situazione
Project Sudoku - Il multitasking non è il mio forte. XD (Spero comunque di risolvere il bug per rilasciare la 0.3 :P)
Tutorial Menu Eventi - Uscita parte 2 (però è malformattata, non so se riuscirò ad editare tutto in un giorno. Abbiate pasiensa :P)

<PROGETTI>
Myth of First Star - Project Sudoku (*trollface*)

<SCRIPTS>
Zelda Map Scrolling - Switch Post Caricamento - Messaggi Istantanei - Picture Manager - Minimalist Menu

<TUTORIAL>
Uso corretto acqua RTP - Creare un menu ad eventi

Link to comment
Share on other sites

Orca O.O Che hai, un moster jam? XD

 

Comunque ho un:

Pentilum® D CPU 2.80GHz

2.80 GHz, 1,50GB di RAM

 

 

ora ti dioco la mia:

 

 

PentiumIII® Dual core E5200GHz

Vista Home Pemium

4 GB di Ram DDR2

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

A me funziona benissimo anche con 200 processi

 

Athlon 64 3800+

Windows 7 (Ultimate) 64 Bit

4GB di ram

XD

sfido che non ti funziona le athlon e le DDR2 sono le migkliori(E Windows vista/7 sono stati creati per la grafica vettoriale quindi...)Ps ho riempito un mappa enorme e mi è andato lento dopo il 3256° evento parallero è andato poco più lento del solito!!!

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

Hai un normale computer casalingo o un main frame ?

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Hai un normale computer casalingo o un main frame ?

chi io?

ho 3 Pc personali...

Scusa l'ignoranza che significava Main frame??

Cliccate sullo spoiler per vedere la mia firma...^_^:

 

 

 

 

http://i84.servimg.com/u/f84/14/44/79/04/graffi11.gif

Venite a trovarmi nel mio nuovo Sito:

The Word of the New Game

 

Ecco la Mia firma fatta da me!!!:

http://img11.imageshack.us/img11/1676/firmaol.png

 

Ecco il Banner del mio sito!

http://searchfile.altervista.org/Immagini/Bannepng.png

 

http://img692.imageshack.us/img692/1655/pywrightsyte.gif

Basnners by Me^_^

 

 

Link to comment
Share on other sites

E'è un computer molto potente come quello degli aereoporti o come un server.

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...