VX 스크립트

안녕하세요 아방이입니다.
오늘은 타일세트 확장 스크립트를 올려볼까합니다
xp처럼 4방향 그런게 안되서 힘들었죠? 그리고 맵타일이 1개밖에 추가가안되서 힘들었죠
이 스크립트는 그걸 보완해주는 스크립트입니다.
아직 제 번역 실력이 미약해서 모르는 단어는 번역기를 돌렸는데 이해가 안될수도있어요.^^:;
좀 복잡하니 잘 따라해주세요,
======================================================
◆ 타일 화상 지정
맵 마다 다른 타일 세트 그림 을 사용 가능하게 합니다.
XP 의 「4 방향 통행」이나 「지형 태그」기능도 재현할 수 있습니다.
(별도 전용의 에디터가 필요합니다.)

 에디터상에서는, 타일 세트 그림 은 변화하지 않습니다.
게임중에서 해당 맵으로 이동했을 때 마셔 유효하게 됩니다.
( 「에디터에서도 반영해라」라고인가 무리한 말을 하지 않게)


맵명에 [A1 파일명] 과 넣으면,"TileA1" 대신에, 지정한 파일을 타일 세트 A1로서 사용합니다.
지정할 수 있는 타일 세트명은, VX의 사양과 같이 A1A5, B, C, D, E 입니다.

읽어들이는 파일은,"Graphics/System" 폴더에 있다
"Tile" + (지정 파일명)
입니다.
파일명의 "Tile" 의 부분은,
# ◆타일 화상 파일명의 프레픽스
TILE_IMAGE_PREFIX = "Tile"

여기서 변경할 수 있습니다.
[A1 A1-2] ··· "TileA1" 대신에 "TileA1-2" 를 사용
[B B_test] ··· "TileB" 대신에 "TileB_test" 를 사용
맵명에는,[ ~ ] 이외의 텍스트가 들어가도 상관하지 않군요
Ex)
마왕의 성[A1 A1-Maou][A2 A2-Maou][B B-Maou][D D-Maou]

◆ pre-set
pre-set 기능을 사용하면, 타일 그림 의 지정을 효율적으로 실시할 수 있습니다.
변경하는 타일 그림 이 많은 경우에 추천합니다.

pre-set의 설정은, 커스터마이즈 항목으로 실시합니다.

# ◆타일 그림 의 pre-set
TILE_PRESET = {}

이 아래에, pre-set를 정의합니다.
pre-set의 정의는, 다음과 같이 실시합니다.

TILE_PRESET = {}
# 여기로부터 추가
TILE_PRESET["pre-set명"] = {
  "A1"=>"A1의 파일명",
  "A2"=>"A2의 파일명",
  # ... (A3D 도 마찬가지)
  "E"=>"E의 파일명",
}  # ←잊지 않고


예를 들면, 방금전의 「마왕의 성」의 예에서는, 다음과 같이 됩니다.
TILE_PRESET["마왕의 성"] = {
  "A1"=>"A1-Maou",
  "A2"=>"A2-Maou",
  "B"=>"B-Maou",
  "D"=>"D-Maou"
}

작성한 pre-set 를 사용하려면 , 맵명에 [SET pre-set명] 을 추가합니다.
「마왕의 성」의 경우, 다음과 같이 합니다.
마왕의 성[SET 마왕의 성]

◆ 타일 그림 의 계승
맵명에 [inherit] 를 넣으면, 맵 트리로 부모에 해당하는 맵으로부터, 타일 세트의 파일명을 계승합니다.
예를 들면,
첨부된 그림 확인!!(첨부된 그림을 번역하면)

フィールド(필드)[A1 A1-2][B B2][C C2]
   ㄴ (종속된맵) 정[inherit][A2 A2-2]
ダンジョン(지하 감옥)[inherit] [B B3]
    ㄴ B1F [inherit] [D D2]
テストマップ(테스트맵) [A1 A1-100]
     ㄴ謎マップ(미로의맵) [inherit]
(에구 힘들어라,.._   진하게 된 맵이 부모맵 즉 포함하는 맵이고 그냥 글씨의 맵이 종속된 맵 그러니깐 포함되어진 맵입니다)

●필드
A1: TileA1-2
B: TileB2
C: TileC2
●정
A1: TileA1-2
A2: TileA2-2
B: TileB2
C: TileC2
●지하 감옥
A1: TileA1-2
B: TileB3
C: TileC2
●B1F
A1: TileA1-2
B: TileB3
C: TileC2
D: TileD2
●테스트 맵
A1: TileA1-100
●미로의맵
A1: TileA1-100
「지하 감옥」과 같이, 부모( 「필드」)로 지정 끝난 타일 세트를 재차 지정했을 경우, 아이( 「지하 감옥」)가 지정한 (분)편의 파일명이 유효하게 됩니다.
「B1F」와 같이, 부모가 한층 더 부모의 맵을 계승하고 있는 경우, 상위의 부모로부터 순서에 모두 계승합니다.
「미로의 맵」은, 부모인 「테스트 맵」이 부모( 「필드」)를 계승하고 있지 않았기 때문에, 「테스트 맵」만을 계승합니다.

◆변경의 순서

타일 화상의 변경은, 다음의 순서로 실시합니다.
부모의 타일 그림을 계승
pre-set를 적용
개별 지정([A1 파일명] 형식)을 적용
각방식은, 모두 병용 할 수 있습니다.
따라서, 「pre-set를 적용해, 일부를 개별 지정으로 변경」이라고 하는 것도 가능합니다.
마왕의 성밖관[SET 마왕의 성][A2 A2-Maou-exterior]

◆4 방향&지형 태그 에디터
원래 프로그램 에디터가 있는데 VX 정품이 깔린 곳에서만 작동이 되나 봅니다
실행이 안되네요 ....아쉽지만 사용못하므로 프로그램은 올리지않겠습니다.
파일첨부 확인하세요!!!
=========================================이전강좌의 내용=============================

에디터: 4 방향 통행

에디터의 기본적인 조작 방법은, 200x 나 XP 에 준거하고 있습니다.
PC 용 트크르는 VX 가 처음이라고 하는 분은, 부속의 헬프를 참조해 주세요.
예를 이용한 해설이 게재해 있습니다.

에디터: 지형 태그

에디터의 조작 방법은, 기본적으로 XP 와 같습니다만, 다음과같이 다릅니다.
지형 태그를 99 까지 설정 가능.
ㄴ(XP 에서는 7 까지)
「Shift + 클릭」으로 10 두개치를 증감시키는 것이 가능.
지형 태그 0은 특별한 값으로, 지형 태그가 설정되어 있지 않은 것으로서 다루어집니다.
그 외의 값(1  99)에 대해서는, 특히 용도의 규정은 없습니다.
자유롭게 이벤트로 사용해 주세요.

사용예
설원에 있으면 눈이 내린다
특정의 지형에는 적이 나오지 않는다
용암 위를 걸으면 데미지를 받는다
웅덩이를 걸으면 소리가 운다
수풀을 걸으면 보행 속도가 떨어진다 등등


지형 태그용 커멘드

각 커멘드는, 이벤트 커멘드 「스크립트」에 기술해 사용합니다.

지형 태그는, 내부 층으로 상층에 있는 것이 우선해 취득됩니다.(XP 와 같은 사양입니다)
화면에서 맨 위로 보이는 타일의 태그를 취득할 수 있다, 라고 생각해 주세요.
다만, 상층의 지형 태그가 0의 경우는, 하층에 있는 지형 태그가 취득됩니다.
(다리의 지형 태그가 0의 경우, 바다의 지형 태그가 취득되는, 등)

get_terrain_tag(x, y[, variable_id])
현재의 맵의 지정 좌표(x, y)의 지형 태그를 variable_id로 지정한 변수에 격납합니다.
실행 후, 지정 변수에 대입한 값을 반환값으로서 돌려줍니다.
variable_id를 생략 했을 경우, 변수에의 대입은 실시하지 않습니다.

# 좌표 10,20 에 있는 지형 태그를 7 번의 변수에 취득
n = get_terrain_tag(10, 20, 7)
# 실행 후, n 와 변수 7 번($game_variables[7])은 같은 값이 된다
# 반환값이 필요 없을 때
get_terrain_tag(10, 20, 7)
# 트크르의 변수를 사용하지 않을 때
n = get_terrain_tag(10, 20)

get_event_terrain_tag(event_id[, variable_id])
지정한 ID 의 이벤트가 있는 장소의 지형 태그를 variable_id로 지정한 변수에 격납합니다.
그 외의 동작은 get_terrain_tag와 같습니다.

# 이벤트 ID: 32 가 있는 장소의 지형 태그를 5 번의 변수에 취득
get_event_terrain_tag(32, 5)

get_player_terrain_tag[(variable_id)]
플레이어의 현재 위치의 지형 태그를 variable_id로 지정한 변수에 격납합니다.
그 외의 동작은 get_terrain_tag와 같습니다
.
# 플레이어가 있는 장소의 지형 태그를 10 번의 변수에 취득
get_player_terrain_tag(10)



================================================스크립트 원본
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/    ◆ 타일 세트 확장 - TilesetExtension ◆ VX ◆
#_/    ◇ Last update : 2008/01/20 ◇
#_/----------------------------------------------------------------------------
#_/  타일 화상 변경, 4 방향 통행, 지형 태그등의 기능을 추가합니다。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================

module KGC
module TilesetExtension
  # ◆ タイル画像ファイル名のプレフィックス
  #  タイル画像ファイル名の先頭に必要な文字列。
  TILE_IMAGE_PREFIX = "Tile"

  # ◆ タイル画像のプリセット
  #  [SET <セット名>] で使用可能。
  TILE_PRESET = {}  # ← これは消さないこと!
  # ここから下に、プリセットを定義。
  # ↓は設定例
  TILE_PRESET["魔王の城"] = {
    "A1"=>"A1-Maou",
    "A2"=>"A2-Maou",
    "B"=>"B-Maou",
    "D"=>"D-Maou",
  }
  # 使うときは、マップ名に [SET 魔王の城] を入れる。

  # ◆ 4方向通行・地形タグ確認ボタン (デバッグ用)
  #  このボタンを押すと、プレイヤーが立っている場所の4方向通行設定と
  #  地形タグをダイアログに表示します。
  #  nil にすると、この機能は無効になります。
  #   ※ この機能はテストプレイ中のみ有効になります。
  DEBUG_INFO_BUTTON = Input::F7
end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["TilesetExtension"] = true

if $data_mapinfos == nil
  $data_mapinfos = load_data("Data/MapInfos.rvdata")
end

# 方向フラグ (4方向通行フラグ対応)
module DirectionFlag
  DOWN  = 0x01
  LEFT  = 0x02
  RIGHT = 0x04
  UP    = 0x08
end

module KGC::TilesetExtension
  # 拡張タイルセットのファイル名
  EX_RVDATA = "TilesetEx.rvdata"

  # 正規表現
  module Regexp
    # 継承
    INHERIT = /[INHERIT]/i
    # プリセット
    PRESET = /[SET ([w-]+)]/i
  end

  # デフォルトタイルセットファイル名
  DEFAULT_FILENAME = {
    "A1"=>"TileA1",
    "A2"=>"TileA2",
    "A3"=>"TileA3",
    "A4"=>"TileA4",
    "A5"=>"TileA5",
    "B"=>"TileB",
    "C"=>"TileC",
    "D"=>"TileD",
    "E"=>"TileE"
  }
  @@__filename = DEFAULT_FILENAME.dup

  module_function
  #--------------------------------------------------------------------------
  # ○ 指定マップのタイル画像ファイル名初期化
  #     map_id : マップ ID
  #--------------------------------------------------------------------------
  def init_tileset_filename(map_id)
    @@__filename = get_converted_tileset_filename(map_id)
  end
  #--------------------------------------------------------------------------
  # ○ 変換後のタイル画像ファイル名を取得
  #     map_id : マップ ID
  #--------------------------------------------------------------------------
  def get_converted_tileset_filename(map_id)
    info = $data_mapinfos[map_id]
    name = info.original_name
    filename = DEFAULT_FILENAME.dup
    if name =~ Regexp::INHERIT
      # 継承する場合は親を調べる
      parent_id = $data_mapinfos[map_id].parent_id
      if parent_id > 0
        filename = get_converted_tileset_filename(parent_id)
      end
    end
    # 現マップの変換規則を適用
    return convert_tileset_filename(filename, name)
  end
  #--------------------------------------------------------------------------
  # ○ タイル画像ファイル名変換
  #     filename : ファイル名 (Hash)
  #     map_name : マップ名
  #--------------------------------------------------------------------------
  def convert_tileset_filename(filename, map_name)
    name_buf = filename.dup
    # プリセット適用
    presets = map_name.scan(Regexp::PRESET)
    presets.each { |s|
      if TILE_PRESET.has_key?(s[0])
        TILE_PRESET[s[0]].each { |k, v|
          name_buf[k] = TILE_IMAGE_PREFIX + v
        }
      end
    }
    # 置換
    DEFAULT_FILENAME.keys.each { |key|
      if map_name =~ /[#{key} ([w-]+)]/
        name_buf[key] = TILE_IMAGE_PREFIX + $1
      end
    }
    return name_buf
  end
  #--------------------------------------------------------------------------
  # ○ タイル画像ファイル名取得
  #--------------------------------------------------------------------------
  def get_tileset_filename
    return @@__filename
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ KGC::Commands
#==============================================================================

module KGC::Commands
  module_function
  #--------------------------------------------------------------------------
  # ○ 指定座標の地形タグ取得
  #     x : マップの X 座標
  #     y : マップの Y 座標
  #     variable_id : 取得した地形タグを代入する変数の ID
  #--------------------------------------------------------------------------
  def get_terrain_tag(x, y, variable_id = 0)
    tag = $game_map.terrain_tag(x, y)       # 指定位置のタグを取得
    if variable_id > 0
      $game_variables[variable_id] = tag    # 指定された変数に代入
    end
    return tag
  end
  #--------------------------------------------------------------------------
  # ○ 指定イベント ID の位置の地形タグ取得
  #     event_id : イベント ID
  #     variable_id : 取得した地形タグを代入する変数の ID
  #--------------------------------------------------------------------------
  def get_event_terrain_tag(event_id, variable_id = 0)
    event = $game_map.events.values.find { |e| e.id == event_id }
    if event == nil
      # 該当するイベントが無ければ 0
      tag = 0
    else
      tag = $game_map.terrain_tag(event.x, event.y)
    end

    # 指定された変数に代入
    if variable_id > 0
      $game_variables[variable_id] = tag
    end
    return tag
  end
  #--------------------------------------------------------------------------
  # ○ プレイヤーの位置の地形タグ取得
  #     variable_id : 取得した地形タグを代入する変数の ID
  #--------------------------------------------------------------------------
  def get_player_terrain_tag(variable_id = 0)
    tag = $game_map.terrain_tag($game_player.x, $game_player.y)

    # 指定された変数に代入
    if variable_id > 0
      $game_variables[variable_id] = tag
    end
    return tag
  end
end

class Game_Interpreter
  include KGC::Commands
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ RPG::MapInfo
#==============================================================================

class RPG::MapInfo
  #--------------------------------------------------------------------------
  # ● マップ名取得
  #--------------------------------------------------------------------------
  def name
    return @name.gsub(/[.*]/) { "" }
  end
  #--------------------------------------------------------------------------
  # ○ オリジナルマップ名取得
  #--------------------------------------------------------------------------
  def original_name
    return @name
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# □ RPG::Tileset
#------------------------------------------------------------------------------
#   タイルセットの付加的情報を扱うクラスです。
#==============================================================================

class RPG::Tileset
  #--------------------------------------------------------------------------
  # ○ 定数
  #--------------------------------------------------------------------------
  TABLE_SIZE = 8192                       # 通行・地形タグテーブルのサイズ
  #--------------------------------------------------------------------------
  # ○ 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :version                  # 内部バージョン
  attr_accessor :passages                 # 4 方向通行フラグ
  attr_accessor :terrain_tags             # 地形タグ
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @version = 1
    @passages = Table.new(TABLE_SIZE)
    @terrain_tags = Table.new(TABLE_SIZE)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Map
#==============================================================================

class Game_Map
  LAYERS = [2, 1, 0]
  #--------------------------------------------------------------------------
  # ● セットアップ
  #     map_id : マップ ID
  #--------------------------------------------------------------------------
  alias setup_KGC_TilesetExtension setup
  def setup(map_id)
    # タイルセット画像ファイル名を初期化
    KGC::TilesetExtension.init_tileset_filename(map_id)

    setup_KGC_TilesetExtension(map_id)
  end
  #--------------------------------------------------------------------------
  # ○ 指定座標の通行フラグ取得
  #     x : X 座標
  #     y : Y 座標
  #--------------------------------------------------------------------------
  def passage(x, y)
    LAYERS.each { |i|
      tile_id = @map.data[x, y, i]
      return 0 if tile_id == nil
      return $data_tileset.passages[tile_id]
    }
    return 0
  end
  #--------------------------------------------------------------------------
  # ○ 指定座標の地形タグ取得
  #     x : X 座標
  #     y : Y 座標
  #--------------------------------------------------------------------------
  def terrain_tag(x, y)
    LAYERS.each { |i|
      tile_id = @map.data[x, y, i]               # タイル ID を取得
      return 0 if tile_id == nil                 # タイル ID 取得失敗 : タグなし
      tag = $data_tileset.terrain_tags[tile_id]  # 地形タグを取得
      return tag if tag > 0                      # タグが設定してあれば返す
    }
    return 0
  end
  #--------------------------------------------------------------------------
  # ○ 指定方向通行可能判定
  #     x : X 座標
  #     y : Y 座標
  #     d : 移動方向
  #--------------------------------------------------------------------------
  def passable_dir?(x, y, d)
    # 方向 (0,2,4,6,8,10) から 通行フラグ (0,1,2,4,8,0) に変換
    flag = (1 << (d / 2 - 1)) & 0x0F

    LAYERS.each { |i|                         # レイヤーの上から順に調べる
      tile_id = @map.data[x, y, i]            # タイル ID を取得
      return false if tile_id == nil          # タイル ID 取得失敗 : 通行不可
      pass = $data_tileset.passages[tile_id]  # タイルセットの通行属性を取得
      return false if pass & flag != 0x00     # フラグが立っていたら通行不可
    }
    return true
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Character
#==============================================================================

class Game_Character
  #--------------------------------------------------------------------------
  # ○ 通行可能判定
  #     x : X 座標
  #     y : Y 座標
  #     d : 移動方向 (省略時: 10)
  #--------------------------------------------------------------------------
  def passable?(x, y, d = 10)
    nx = moved_x(x, d)
    ny = moved_y(y, d)
    nx = $game_map.round_x(nx)                         # 横方向ループ補正
    ny = $game_map.round_y(ny)                         # 縦方向ループ補正
    return false unless $game_map.valid?(nx, ny)       # マップ外?
    return true if @through or debug_through?          # すり抜け ON?
    return false unless map_passable?(x, y, d)         # 指定方向に移動不能?
    return false unless map_passable?(nx, ny, 10 - d)  # 移動先が進入不能?
    return false if collide_with_characters?(nx, ny)   # キャラクターに衝突?
    return true                                        # 通行可
  end
  #--------------------------------------------------------------------------
  # ○ 移動後の X 座標算出
  #     x : X 座標
  #     d : 移動方向
  #    移動後の X 座標を計算する。
  #--------------------------------------------------------------------------
  def moved_x(x, d)
    return x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  end
  #--------------------------------------------------------------------------
  # ○ 移動後の Y 座標算出
  #     y : Y 座標
  #     d : 移動方向
  #    移動後の Y 座標を計算する。
  #--------------------------------------------------------------------------
  def moved_y(y, d)
    return y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  end
  #--------------------------------------------------------------------------
  # ○ マップ通行可能判定
  #     x : X 座標
  #     y : Y 座標
  #     d : 移動方向
  #    指定座標の指定した方向が通行可能かを取得する。
  #--------------------------------------------------------------------------
  def map_passable?(x, y, d)
    return $game_map.passable?(x, y) && $game_map.passable_dir?(x, y, d)
  end
  #--------------------------------------------------------------------------
  # ● 下に移動
  #     turn_ok : その場での向き変更を許可
  #--------------------------------------------------------------------------
  def move_down(turn_ok = true)
    if passable?(@x, @y, 2)                 # 通行可能
      turn_down
      @y = $game_map.round_y(@y+1)
      @real_y = (@y-1)*256
      increase_steps
      @move_failed = false
    else                                    # 通行不可能
      turn_down if turn_ok
      check_event_trigger_touch(@x, @y+1)   # 接触イベントの起動判定
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 左に移動
  #     turn_ok : その場での向き変更を許可
  #--------------------------------------------------------------------------
  def move_left(turn_ok = true)
    if passable?(@x, @y, 4)                 # 通行可能
      turn_left
      @x = $game_map.round_x(@x-1)
      @real_x = (@x+1)*256
      increase_steps
      @move_failed = false
    else                                    # 通行不可能
      turn_left if turn_ok
      check_event_trigger_touch(@x-1, @y)   # 接触イベントの起動判定
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 右に移動
  #     turn_ok : その場での向き変更を許可
  #--------------------------------------------------------------------------
  def move_right(turn_ok = true)
    if passable?(@x, @y, 6)                 # 通行可能
      turn_right
      @x = $game_map.round_x(@x+1)
      @real_x = (@x-1)*256
      increase_steps
      @move_failed = false
    else                                    # 通行不可能
      turn_right if turn_ok
      check_event_trigger_touch(@x+1, @y)   # 接触イベントの起動判定
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 上に移動
  #     turn_ok : その場での向き変更を許可
  #--------------------------------------------------------------------------
  def move_up(turn_ok = true)
    if passable?(@x, @y, 8)                 # 通行可能
      turn_up
      @y = $game_map.round_y(@y-1)
      @real_y = (@y+1)*256
      increase_steps
      @move_failed = false
    else                                    # 通行不可能
      turn_up if turn_ok
      check_event_trigger_touch(@x, @y-1)   # 接触イベントの起動判定
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 左下に移動
  #--------------------------------------------------------------------------
  def move_lower_left
    unless @direction_fix
      @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
    end
    if (passable?(@x, @y, 2) && passable?(@x, @y+1, 4)) ||
       (passable?(@x, @y, 4) && passable?(@x-1, @y, 2))
      @x -= 1
      @y += 1
      increase_steps
      @move_failed = false
    else
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 右下に移動
  #--------------------------------------------------------------------------
  def move_lower_right
    unless @direction_fix
      @direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
    end
    if (passable?(@x, @y, 2) && passable?(@x, @y+1, 6)) ||
       (passable?(@x, @y, 6) && passable?(@x+1, @y, 2))
      @x += 1
      @y += 1
      increase_steps
      @move_failed = false
    else
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 左上に移動
  #--------------------------------------------------------------------------
  def move_upper_left
    unless @direction_fix
      @direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
    end
    if (passable?(@x, @y, 8) && passable?(@x, @y-1, 4)) ||
       (passable?(@x, @y, 4) && passable?(@x-1, @y, 8))
      @x -= 1
      @y -= 1
      increase_steps
      @move_failed = false
    else
      @move_failed = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 右上に移動
  #--------------------------------------------------------------------------
  def move_upper_right
    unless @direction_fix
      @direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
    end
    if (passable?(@x, @y, 8) && passable?(@x, @y-1, 6)) ||
       (passable?(@x, @y, 6) && passable?(@x+1, @y, 8))
      @x += 1
      @y -= 1
      increase_steps
      @move_failed = false
    else
      @move_failed = true
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Player
#==============================================================================

class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ○ マップ通行可能判定
  #     x : X 座標
  #     y : Y 座標
  #     d : 移動方向
  #    指定座標の指定した方向が通行可能かを取得する。
  #--------------------------------------------------------------------------
  alias map_passable_KGC_TilesetExtension? map_passable?
  def map_passable?(x, y, d)
    return false unless map_passable_KGC_TilesetExtension?(x, y)

    return $game_map.passable_dir?(x, y, d)
  end

  if $TEST && KGC::TilesetExtension::DEBUG_INFO_BUTTON != nil
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_TilesetExtension update
  def update
    update_KGC_TilesetExtension

    if Input.trigger?(KGC::TilesetExtension::DEBUG_INFO_BUTTON)
      show_passage_and_terrain_tag
    end
  end
  #--------------------------------------------------------------------------
  # ○ プレイヤー位置の通行フラグ・地形タグを表示
  #--------------------------------------------------------------------------
  def show_passage_and_terrain_tag
    passage = $game_map.passage(x, y)
    tag = $game_map.terrain_tag(x, y)

    # デバッグ情報作成
    s = "通行可能: "
    s += "↓" if passage & DirectionFlag::DOWN  == 0x00
    s += "←" if passage & DirectionFlag::LEFT  == 0x00
    s += "→" if passage & DirectionFlag::RIGHT == 0x00
    s += "↑" if passage & DirectionFlag::UP    == 0x00
    s += "  地形タグ: #{tag}"

    p s
  end
  end

end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Sprite_Character
#==============================================================================

class Sprite_Character < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 指定されたタイルが含まれるタイルセット画像の取得
  #     tile_id : タイル ID
  #--------------------------------------------------------------------------
  def tileset_bitmap(tile_id)
    filename = KGC::TilesetExtension.get_tileset_filename
    set_number = tile_id / 256
    return Cache.system(filename["B"]) if set_number == 0
    return Cache.system(filename["C"]) if set_number == 1
    return Cache.system(filename["D"]) if set_number == 2
    return Cache.system(filename["E"]) if set_number == 3
    return nil
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Spriteset_Map
#==============================================================================

class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● タイルマップの作成
  #--------------------------------------------------------------------------
  def create_tilemap
    filename = KGC::TilesetExtension.get_tileset_filename
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.bitmaps[0] = Cache.system(filename["A1"])
    @tilemap.bitmaps[1] = Cache.system(filename["A2"])
    @tilemap.bitmaps[2] = Cache.system(filename["A3"])
    @tilemap.bitmaps[3] = Cache.system(filename["A4"])
    @tilemap.bitmaps[4] = Cache.system(filename["A5"])
    @tilemap.bitmaps[5] = Cache.system(filename["B"])
    @tilemap.bitmaps[6] = Cache.system(filename["C"])
    @tilemap.bitmaps[7] = Cache.system(filename["D"])
    @tilemap.bitmaps[8] = Cache.system(filename["E"])
    @tilemap.map_data = $game_map.data
    @tilemap.passages = $game_map.passages
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Title
#==============================================================================

class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # ● データベースのロード
  #--------------------------------------------------------------------------
  alias load_database_KGC_TilesetExtension load_database
  def load_database
    load_database_KGC_TilesetExtension

    load_tileset
  end
  #--------------------------------------------------------------------------
  # ○ タイルセット付加情報のロード
  #--------------------------------------------------------------------------
  def load_tileset
    begin
      $data_tileset = load_data("Data/#{KGC::TilesetExtension::EX_RVDATA}")
    rescue
      $data_tileset = RPG::Tileset.new
    end
  end
end

===========================================여기까지

Comment '24'
  • profile
    아방스 2008.01.30 15:47
    좋은정보 ㄳ ^^
    일단 나중에 천천히 한번 적용해봐야겠군요. (그냥 대충 읽어만본 ^^;)
  • ?
    뉴펜슬 2008.01.30 16:25
    와우 드디어 진짜 좋은 강좌가 나왔군요.
    이만하면 RPGVX도 이제 첫발을 디딘 셈 입니다.
  • ?
    착한모기 2008.01.30 18:17
    수고하셨습니다.
  • ?
    뚜벅이 2008.02.08 21:26

    와우~ ㅋㅋ

  • ?
    꿈꾸는소년 2008.03.04 15:45
    맵에디터그게 이상하네요 응용프로그램을 초기화 하지 못한다고...
  • ?
    꿈꾸는소년 2008.03.04 16:11
    그리고 걸을때 소리나는 스크립하고 충돌이..
  • ?
    흑기사 2008.04.26 11:51
    무엇이 변하는거죠?
    바뀌는게 없는데....
  • ?
    게임 하고파 2008.07.21 14:15
    동영상 보여 주세여...
  • ?
    RPG만들기의천재 2008.08.25 10:27
    넘 복잡해서읽다 쓰러진놈
  • ?
    시옷청룡 2008.10.01 19:07
    그림이 없으니 이해가...;ㅁ;
  • ?
    Sawadakun 2008.11.24 00:29
    어렵군요...;;;
  • ?
    백년술사 2009.01.04 14:36
    이런것도..
  • ?
    JaYTwO 2009.01.10 04:00
    맵을 너무 많이 만들어놔서 일일이 조정 불가하기에 포기 ㅠㅠ
  • ?
    스커드 2009.01.18 05:24
    어떻게하는진 알겠는데 ㅡ.ㅡ 맵 만들려면 노가다 뗘야됨?
  • profile
    카와이 2009.01.31 06:12
    ㅋ 스커드님정답
  • ?
    루시아 2010.01.09 20:07

    좋군요

  • ?
    투리 2011.04.17 16:58

    무슨 말인지 모르게따...ㅠ.ㅠ

  • ?
    단맛과자 2011.04.19 18:27

    에디터에서

    ---------------------------

    起動不可

    ---------------------------

    『RPGツクール VX』がインストールされていません。

    ---------------------------

    확인   

    ---------------------------

    이런 오류가...

  • ?
    불멸의제스젝 2011.07.19 21:38

    저도임

  • ?
    도심 2011.05.18 07:21

    역시 게임을 좋게만드려면 다른 맵칩도 필요하기 마련이죠..

  • ?
    최닉네임 2011.06.11 18:47

  • profile
    자주색물감 2013.08.14 13:44
    이건 뭐하는 스크립트에여?
  • ?
    미루 2013.08.14 13:48
    글에 적혀있듯이
    타일셋 A~E 이외에 더 많은 타일셋을 사용할 수 있도록 확장해주며
    부가적으로 4방향 이동 편집 / 지형태그를 설정 가능하게 해주는 스크립트입니다만...
    툴을 접한지 오래되지 않으신 분들한테는, 좀 까다로운 스크립트입니다.
  • profile
    자주색물감 2013.08.14 18:15
    버그나 에러같은건 어떻게 해야하죠?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5452
37 전투 사이드뷰 스크립트 [2003 전투 방식] 39 아방스 2008.03.09 8409
36 아이템 KGC]아이템 합성 29 file 찌나 2008.03.08 5127
35 전투 KGC]전투형태 오버드라이브(턴알) 13 찌나 2008.03.08 5657
34 전투 Actor Battler Graphics 13 아방스 2008.03.07 3066
33 그래픽 Multiple Fogs 1.0 4 아방스 2008.03.05 2886
32 메시지 Quick Face Border 12 아방스 2008.03.05 4161
31 상점 스킬 샾 스크립트 2.0 48 아방스 2008.03.05 6630
30 기타 텍스트 파일 읽어 오는 스크립트 11 아방스 2008.03.04 2878
29 액터 캐릭터에 다양한 효과주기 투명도 조절 9 아방스 2008.03.04 2943
28 상태/속성 상태 메뉴 변경 스크립트 45 죄송해욧! 2008.03.01 4288
27 전투 VX 사이드 뷰 전투 (2003 방식) 16 드로드맨 2008.02.24 4996
26 전투 rpgvx 간단액알 스크립트 제작: 41 *PS 2008.02.07 9830
25 타이틀/게임오버 메인 화면을 건너뛰고 시작하는 스크립트 14 아방스 2008.02.01 3064
24 그래픽 밤낮 변환 스크립트 18 kram3 2008.01.31 3762
23 이동 및 탈것 점프를 제한 하는 스크립트 15 아방스 2008.01.31 4605
22 이동 및 탈것 vx 걸을때 소리가 나도도록 하는 스크립트 33 아방스 2008.01.31 3950
21 기타 VX에서 포그 그래픽을 사용하자 16 아방스 2008.01.31 3895
20 메뉴 윈도우창 크기 조절 스크립트 0.3 5 아방스 2008.01.30 3038
» 맵/타일 ◆ 타일 세트 확장 스크립트 [업데이트 수정] 24 file 아방이 2008.01.30 4389
18 변수/스위치 특정 키눌러서 스위치 온 시키는 스크립트 7 아방이 2008.01.30 2612
Board Pagination Prev 1 ... 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Next
/ 32