Partagez
Aller en bas
avatar
khorne38
Membre

Nombre de messages : 5
Age : 23
Localisation : Chabons en isere
Distinction : aucune
Date d'inscription : 22/02/2010

Mode 7 VX

le Mar 23 Fév 2010 - 11:19
Bonjour tout le monde,
Je vous propose un script sympathique vous permettant d'insérer un jolie effet 3D dans vos carte de monde. je l'ai récupérer sur un autre forum car il me semble qu'il n'y a pas de scripts semblables sur ce forum. Malheureusement comme la précédente personne je ne parle pas de langues d'origines asiatiques il n'est donc pas traduit. Je vous conseille malgré tout de le tester.

Voila un screenshot pour vous faire une idée de la chose :

Spoiler:

script de 2chan

Nombre de script pour le fonctionnement : 4

Spoiler:
C'est parti pour le premier : a placer au dessus de main

Portion de code:

Code:
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



#記述ルール



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

  #--------------------------------------------------------------------------

  # ● 処理

  #--------------------------------------------------------------------------



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

  #--------------------------------------------------------------------------

  # ● 処理 (上書き)

  #--------------------------------------------------------------------------



  #新規処理

  #--------------------------------------------------------------------------

  # ○ 処理

  #--------------------------------------------------------------------------



Second code : a placer au dessus de main



Portion de code:




Code:
#タイルを並べられる

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





Troisième code : a placer au dessus de main



Portion de code:




Code:
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



Enfin quatrième et dernier code :



Portion de code:




Code:
#==============================================================================

# ■ 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


C'est fini pour les scripts
maintenant l'image en plus a mettre dans pictures sour le nom de "bg"

Spoiler:

Remarques : pour votre carte du monde ajouter un background ( le ciel ) et dans les propriétés de la carte mettre un type de défilement horizontal/vertical ET SURTOUT ne pas mettre d'événements visibles (types charas ou monstres) sur la carte du monde ( essayer si vous doutez)

Voila une démo : http://www.mediafire.com/?mfnyzcittwt

Comme je debute en Ruby je ne pourrait pas vous aidez désolé, je me suis contenté de copier le scripts de l'autre forum.

je vous souhaite quand meme bon jeu, Khorne38

EDIT : effectivement le forum est Oniromancie ( je ne voulais pas faire de pub ) mais le titre n'est pas mode 8 mais mode 7, voila c'est réglé


Dernière édition par khorne38 le Mer 24 Fév 2010 - 14:36, édité 2 fois
avatar
Shadow of Life
Membre

Nombre de messages : 870
Age : 21
Localisation : Joyeux. Comment ça c'est pas la bonne case ?
Distinction : Artiste de la flagornerie.
Porte parole du Ô grand Voilà voilà.
Président du club des masochistes du forum
Fake Gentleman

Soumis ^^
Date d'inscription : 13/09/2009

Re: Mode 7 VX

le Mar 23 Fév 2010 - 11:38
Pour le forum, c'est Oniromancie.
Ce script est un script appelé " Mode 8 ".
Voila, voila, merci du partage .

PS : J'ai l'impression qu'il a déjà été posté dans la section script ...
avatar
Soket
Membre

Nombre de messages : 200
Age : 23
Localisation : Devant mon écran
Distinction : aucune
Date d'inscription : 27/06/2009

Re: Mode 7 VX

le Mar 23 Fév 2010 - 12:18
Shadow', c'est le MODE 7 pas 8 ! :P
Sinon je ne l'ai pas trouvé sur le site avec la fonction Recherche.

PS : Ce n'est pas de la 3D, c'est juste que l'arrière plan est incliné et redimensionné.
avatar
Shadow of Life
Membre

Nombre de messages : 870
Age : 21
Localisation : Joyeux. Comment ça c'est pas la bonne case ?
Distinction : Artiste de la flagornerie.
Porte parole du Ô grand Voilà voilà.
Président du club des masochistes du forum
Fake Gentleman

Soumis ^^
Date d'inscription : 13/09/2009

Re: Mode 7 VX

le Mar 23 Fév 2010 - 12:21
Normal, les scripts sont spéciaux : ils veulent que les gens cherchent un peu.
Et tu as raison : c'est le Mode 7 ! ><
Voila, voila.
avatar
wilkyo
Membre

Nombre de messages : 316
Age : 26
Localisation : Loiret
Distinction : Sauveur de miches // Chou (l)

[Coco' Smile]

Adepte de Pedobear // Lécheur de lolis

[Mist' Wink]

Personnage Colorée // Instructeur de boulet

[Wax Rolling Eyes]
Date d'inscription : 01/09/2008
http://www.wilkyo.com

Re: Mode 7 VX

le Mar 23 Fév 2010 - 18:25
@Shadow of Life: Tu as raison, il était déjà présent dans le forum mais pas en temps que script partagé pour les membres.
En fait, dans ce sujet j'ai demandé que quelqu'un traduise un script d'effet 3D (le mode 7) qui venait de XP.
Malheureusement, personne ne pu le traduire mais Blockade donna le lien vers une autre version du mode 7.

Spoiler:
Ils (les modérateurs...) ont mis la demande dans les résolues alors qu'elle ne l'était pas du tout.
Le script qu'ils m'ont proposé (le même que celui présenté ici) fonctionne en prenant le vaisseau uniquement et étire beaucoup trop.
Vaut mieux l'utiliser pour faire un effet "globe"...
En plus, il a quelques soucis avec les évènements...

Enfin bref, tout ça pour dire que tu n'as pas tout à fait tord Shadow of Life.
Et ce script n'est pas intéressant si on cherche un effet 3D comme j'ai moi même recherché dans ma demande (toujours en attente !)
avatar
Kuro love
Membre

Nombre de messages : 580
Age : 22
Localisation : Dans la Soul society ;D
Distinction : Adepte du Tope Suicida.

Adepte du balai à chiottes venant de chez Paul.
[Coco' Smile]

Casse couille fini^^

Cuisinier au Crabe Croustillant °)°




Date d'inscription : 19/09/2009
http://topskull-testsastucesventes.e-monsite.com

Re: Mode 7 VX

le Mar 23 Fév 2010 - 20:40
Ah, attention, tu n'as pas arrêter ta balise code au bon moment!

Enfin quatrième et dernier code :



Portion de code:

Ne devrais pas être dans la feenêtre
Code:
avatar
kordarr
Modérateur

Nombre de messages : 1838
Age : 27
Localisation : île de la réunion, Le Tampon.
Distinction : Auto-proclamé sex-symbol de la commu'
Frère jumeau de Jonathan ( Secret Story )
Exhibitionniste en herbe
[Mist' & Coco' Smile]
Fan n°1 de Coco'
Psychopathe en chef
Date d'inscription : 05/11/2008

Re: Mode 7 VX

le Mar 23 Fév 2010 - 21:25
As-tu vérifié qu'il marchait vraiment..?
avatar
khorne38
Membre

Nombre de messages : 5
Age : 23
Localisation : Chabons en isere
Distinction : aucune
Date d'inscription : 22/02/2010

Re: Mode 7 VX

le Mer 24 Fév 2010 - 8:53
oui je l'ai testé sur un projet et il marche malgré de légers ralentissements, par contre pour la balise c'est une autre personne qui la mise a ma place car je ne sais pas faire, donc désolé
avatar
Kuro love
Membre

Nombre de messages : 580
Age : 22
Localisation : Dans la Soul society ;D
Distinction : Adepte du Tope Suicida.

Adepte du balai à chiottes venant de chez Paul.
[Coco' Smile]

Casse couille fini^^

Cuisinier au Crabe Croustillant °)°




Date d'inscription : 19/09/2009
http://topskull-testsastucesventes.e-monsite.com

Re: Mode 7 VX

le Mer 24 Fév 2010 - 10:35
C'pas compliqué quand même m'enfin...
Rajoute une balise : [/code] après:

Code:
        $game_map.set_angle(90)

          $game_map.mode3D = false

        else

            set_angle

        end

     

      end

    end



   

  end

end

Et tu ajoutes une balise : [code] après "Portion de code"
Tout ça se trouve dans le troisième encadré!
avatar
Azuma-01
Membre

Nombre de messages : 94
Age : 26
Localisation : Amos
Distinction : aucune
Date d'inscription : 22/09/2009

Re: Mode 7 VX

le Jeu 25 Fév 2010 - 21:47
[Ce script] fonctionne en prenant le vaisseau uniquement

Pour ceux que ça intéresse, remplacez la troisième partit par celle-ci et vous aurez l'effet globe pour tout les véhicules...

Spoiler:
Code:
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
    if $game_switches[Game::AZA_VAR]
      $game_map.mode3D = true # if @type == 2  # 飛行船の場合
      move_angle_start unless @type == 2
      #$game_map.set_angle(45)
    end
  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
  ######################## Aza add
  def move_angle_start
    a = 90
    begin
      a -= 1
      $scene.update_basic
      $game_map.set_angle(a)
    end until a == 45
  end
 
  def move_angle_end
    a = 45
    begin
      a += 1
      $scene.update_basic
      $game_map.set_angle(a)
    end until a == 90
  end
 
  alias aza_3d_effect_get_off get_off
  #--------------------------------------------------------------------------
  # * Get Off Vehicle
  #--------------------------------------------------------------------------
  def get_off
    aza_3d_effect_get_off
    unless @type == 2
      move_angle_end
      $game_map.mode3D = false
    end
  end
  ######################## Aza add
end
Et ajoutez ceci dans le premier (entre "module Game" et le "end" bien sûr)

Code:
AZA_VAR = 1
où le nombre est le id d' un interrupteur. En l'activant vous activez le mode 7
avatar
benj-production
Membre

Nombre de messages : 26
Age : 21
Distinction : aucune
Date d'inscription : 19/06/2008

Re: Mode 7 VX

le Lun 19 Avr 2010 - 18:53
merci du partage Smile
Contenu sponsorisé

Re: Mode 7 VX

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum