이 스크립트는 각 게임에 디스크를 만들어 부를 수 있도록 가능케 하는 스크립트입니다.
원작자: Zeriab
VX 번역자 & 커스텀 타일셋 : Omegazion
한글번역: Tofuman
디스크에 대해 뭔지 의문점이 있을 분들이 많으실 텐데,
간단히 말해서, "다른 프로잭트의 맵과 이벤트"를 말하는 겁니다.
결국 이 스크립트는 한 프로잭트로 여러 프로잭트의 맵을 돌리는 것이 가능하다는 거죠.
이렇게 되면 원래 999개 까지만 가능한 맵의 수를 무한정하게 만들 수 있고,
또한, 타일셋의 한정에 대한 문제마저 해소시킬 수도 있습니다. (이 점 때문에 아주 유용하다고 봐요.)
자세한 설명법은 스크립트 안에 적혀있습니다. 데모도 첨부해 있으니, 이해가 안가시는 분들은
써보시길...
1.02 업데이트
---------------------------------------------------------------------------------------------------------
버그가 고쳐졌습니다...
디스크 체인져.alz
출처: rpgrevolution.com
사용법
------------
각각의 디스크에 각각의 타일셋을 이용하기
-------------------------------------------
디스크 각각의 폴더 안에, 다른 프로잭트에서 만들던 맵의 타일셋을
저장해야 하는데, 그러면 본 프로잭트 안에서 그 타일셋으로 이루어진
맵을 사용할 수 있게 됩니다... (이 부분이 가장 마음에 드는 점이죠.)
그렇게 하려면 또, 디스크의 맵을 만들었던 프로잭트의 System.rvdata를
디스크폴더 안에 집어넣어야 합니다. 그렇게 하지 않으면 통행 설정이
본 프로잭트의 것으로 적용되어, 원치 않은 일이 발생할 수도 있기 때문이죠.
디스크 바꾸기
--------------
위에 설명했듯이 'change_disc'라는 스크립트 커맨드를 이용해야 디스크의
맵을 사용할 수 있는데, 이 커맨드를 사용하는 방법을 알려드리도록 하겠습니다.
기본적으로 신택스로는 chage_disc(디스크 넘버, 아이디 넘버 = nil, x위치 = nil, y위치 = nil, 방향 = nil)
를 사용하는데, 여기서 nil이 있는 옵션은 꼭 안 적어도 되는 것을 의미합니다.
그리고 만약에 안적는다면, 커맨드를 사용하기전의 본 프로잭트의 맵 아이디, 케릭터의 위치와 방향이 사용되게
됩니다.
=end
class Game_Map
attr_writer :map_id
alias oz_dc_setup setup
def setup(map_id)
if $game_system.disc.empty? # Original Disc
oz_dc_setup(map_id) # Perform original call
else
@map_id = map_id
# Load map data from disc
@map = load_data(sprintf("Data/%sMap%03d.rvdata", $game_system.disc, @map_id))
@display_x = 0
@display_y = 0
# Get Folder Location
loc = "Data/#{$game_system.disc}"
$game_system.disc =~ /([0-9]+)/
dn = $1.to_i
if not $game_temp.disc_passages[dn].nil?
# Get passage data stored in game temp
@passages = $game_temp.disc_passages[dn]
elsif FileTest.exist?(loc + "System.rvdata") # If system.rvdata exists
# load system settings from that file
disc_sys = load_data(loc + "System.rvdata")
# Use passage settings from that file
@passages = disc_sys.passages
# Store in Temp data for faster loading
$game_temp.disc_passages[dn] = @passages
else
# Use default passage settings
@passages = $data_system.passages
end
referesh_vehicles
setup_events
setup_scroll
setup_parallax
@need_refresh = false
end
end
end
#==============================================================================
# ** 각 디스크에 커스텀 타일셋을 지정
#==============================================================================
원작자: Zeriab
VX 번역자 & 커스텀 타일셋 : Omegazion
한글번역: Tofuman
디스크에 대해 뭔지 의문점이 있을 분들이 많으실 텐데,
간단히 말해서, "다른 프로잭트의 맵과 이벤트"를 말하는 겁니다.
결국 이 스크립트는 한 프로잭트로 여러 프로잭트의 맵을 돌리는 것이 가능하다는 거죠.
이렇게 되면 원래 999개 까지만 가능한 맵의 수를 무한정하게 만들 수 있고,
또한, 타일셋의 한정에 대한 문제마저 해소시킬 수도 있습니다. (이 점 때문에 아주 유용하다고 봐요.)
자세한 설명법은 스크립트 안에 적혀있습니다. 데모도 첨부해 있으니, 이해가 안가시는 분들은
써보시길...
1.02 업데이트
---------------------------------------------------------------------------------------------------------
버그가 고쳐졌습니다...
디스크 체인져.alz
출처: rpgrevolution.com
#==============================================================================
# Disc Changer script VX + custom tilesets per disc feature
#------------------------------------------------------------------------------
# Original DC script by Zeriab, translated to VX by omegazion and added
# 한글 번역: Tofuman
# custom tilesets per disc feature. v1.02
#==============================================================================
# Disc Changer script VX + custom tilesets per disc feature
#------------------------------------------------------------------------------
# Original DC script by Zeriab, translated to VX by omegazion and added
# 한글 번역: Tofuman
# custom tilesets per disc feature. v1.02
#==============================================================================
=begin
머릿말
------------
이 스크립트는 디스크를 바꿔주는 스크립트인데, 각 디스크마다 999개의 맵을 저장할 수 있습니다.
또한, 각 디스크마다 각각 고유의 타일셋을 지정할 수 있기 때문에,
다른 말론 무한의 타일셋을 사용할 수 있게 됩니다.
------------
이 스크립트는 디스크를 바꿔주는 스크립트인데, 각 디스크마다 999개의 맵을 저장할 수 있습니다.
또한, 각 디스크마다 각각 고유의 타일셋을 지정할 수 있기 때문에,
다른 말론 무한의 타일셋을 사용할 수 있게 됩니다.
사용법
------------
이 스크립트는 'change_disc'라는 커맨드로 사용할 수 있는데, 이 커맨드를 사용함으로
다른 디스크를 불러올 수 있습니다. 무슨 뜻이냐면, 다른 프로잭트로 맵을 만든 후,
그것을 본 프로잭트에 불러올 수 있다는 뜻이죠. 그러기 위해선 일단 다른 프로잭트로
맵을 만든 후, 그 프로잭트의 맵 파일을 본 프로잭트의 데이터 폴더안에 저장해야 하는데,
(맵 파일들은 보통 MapXXX.rvdata라고 되어있죠. XXX는 숫자로 되어있습니다.)
디스크1을 생성하기 위해선 먼저 본 프로잭트의 데이터 폴더 안에 'disc1'이라고 하는
또 다른 폴더를 만드신 후, 아까 말한 맵파일을 이 안에 저장하면 됩니다.
디스크2같은 경우는 'disc2'라는 이름의 폴더를 만드신 후, 그 안에 디스크2에 해당하는
맵 파일을 저장하면 됩니다. 그 이후의 디스크들도 다 같은 방식입니다.
다른 디스크를 불러올 수 있습니다. 무슨 뜻이냐면, 다른 프로잭트로 맵을 만든 후,
그것을 본 프로잭트에 불러올 수 있다는 뜻이죠. 그러기 위해선 일단 다른 프로잭트로
맵을 만든 후, 그 프로잭트의 맵 파일을 본 프로잭트의 데이터 폴더안에 저장해야 하는데,
(맵 파일들은 보통 MapXXX.rvdata라고 되어있죠. XXX는 숫자로 되어있습니다.)
디스크1을 생성하기 위해선 먼저 본 프로잭트의 데이터 폴더 안에 'disc1'이라고 하는
또 다른 폴더를 만드신 후, 아까 말한 맵파일을 이 안에 저장하면 됩니다.
디스크2같은 경우는 'disc2'라는 이름의 폴더를 만드신 후, 그 안에 디스크2에 해당하는
맵 파일을 저장하면 됩니다. 그 이후의 디스크들도 다 같은 방식입니다.
각각의 디스크에 각각의 타일셋을 이용하기
-------------------------------------------
디스크 각각의 폴더 안에, 다른 프로잭트에서 만들던 맵의 타일셋을
저장해야 하는데, 그러면 본 프로잭트 안에서 그 타일셋으로 이루어진
맵을 사용할 수 있게 됩니다... (이 부분이 가장 마음에 드는 점이죠.)
그렇게 하려면 또, 디스크의 맵을 만들었던 프로잭트의 System.rvdata를
디스크폴더 안에 집어넣어야 합니다. 그렇게 하지 않으면 통행 설정이
본 프로잭트의 것으로 적용되어, 원치 않은 일이 발생할 수도 있기 때문이죠.
디스크 바꾸기
--------------
위에 설명했듯이 'change_disc'라는 스크립트 커맨드를 이용해야 디스크의
맵을 사용할 수 있는데, 이 커맨드를 사용하는 방법을 알려드리도록 하겠습니다.
기본적으로 신택스로는 chage_disc(디스크 넘버, 아이디 넘버 = nil, x위치 = nil, y위치 = nil, 방향 = nil)
를 사용하는데, 여기서 nil이 있는 옵션은 꼭 안 적어도 되는 것을 의미합니다.
그리고 만약에 안적는다면, 커맨드를 사용하기전의 본 프로잭트의 맵 아이디, 케릭터의 위치와 방향이 사용되게
됩니다.
예를 들어 디스크2를 부르고 싶다면 change_disc(2)를 스크립트 커맨드로 사용하심 됩니다.
이같은 경우는 커맨드를 사용하기 전에 캐릭터가 1번 아이디의 맵에 있다면
디스크2 안에 들어있는 1번 아이디의 맵으로 바뀌고, 케릭터의 위치와 방향 역시
그 전의 위치와 수치상으로 같은 곳에 위치하게 됩니다.
만약에 그러기 싫고, 디스크 2 안에 10번 맵을 사용한 후, x=6, y=13위치에 지정하고 싶다면,
이같은 경우는 커맨드를 사용하기 전에 캐릭터가 1번 아이디의 맵에 있다면
디스크2 안에 들어있는 1번 아이디의 맵으로 바뀌고, 케릭터의 위치와 방향 역시
그 전의 위치와 수치상으로 같은 곳에 위치하게 됩니다.
만약에 그러기 싫고, 디스크 2 안에 10번 맵을 사용한 후, x=6, y=13위치에 지정하고 싶다면,
change_disc(2, 10, 6, 13)
을 사용하시면 됩니다.
만약에 본 프로잭트에 사용되었던 맵으로 돌아가고 싶다면 디스크 부분에 0을 쓰시면 됩니다.
(본 프로잭트는 디스크 0으로 지정되어 있습니다.)
(본 프로잭트는 디스크 0으로 지정되어 있습니다.)
그 다음 방향을 설정하기 위해서는 6개의 숫자를 사용해야 하는데
0, 10 = 방향 변화없음
2 = 아래를 향함
4 = 왼쪽을 향햠
6 = 오른쪽을 향함
8 = 위를 향함
2 = 아래를 향함
4 = 왼쪽을 향햠
6 = 오른쪽을 향함
8 = 위를 향함
위의 숫자를 이용하심 됩니다.
예를 들어 플레이어를 디스크1의 맵43, 그리고 x=30, y=40에 아래를 향하게 지정하고 싶다면
change_disc(1, 43, 30, 4, 2)
를 사용하심 됩니다.
=end
class Game_System
attr_writer :disc
def disc
@disc ||= ''
@disc
end
end
attr_writer :disc
def disc
@disc ||= ''
@disc
end
end
def change_disc(number, id = nil, x = nil, y = nil, direction = nil)
# Change disc
if number.is_a?(Integer)
$game_system.disc = number <= 0 ? "" : "disc#{number}/"
else
disc = number.to_s
disc += '/' unless disc[-1] == 47
$game_system.disc = disc
end
# Process arguments
map_id = id.is_a?(Integer) ? id : $game_map.map_id
x = $game_player.x unless x.is_a?(Integer)
y = $game_player.y unless y.is_a?(Integer)
direction = $game_player.direction unless direction.is_a?(Integer)
$game_player.reserve_transfer(map_id, x, y, direction)
# Change the current map id in case the new and old are identical.
$game_map.map_id = 1000 + map_id
end
# Change disc
if number.is_a?(Integer)
$game_system.disc = number <= 0 ? "" : "disc#{number}/"
else
disc = number.to_s
disc += '/' unless disc[-1] == 47
$game_system.disc = disc
end
# Process arguments
map_id = id.is_a?(Integer) ? id : $game_map.map_id
x = $game_player.x unless x.is_a?(Integer)
y = $game_player.y unless y.is_a?(Integer)
direction = $game_player.direction unless direction.is_a?(Integer)
$game_player.reserve_transfer(map_id, x, y, direction)
# Change the current map id in case the new and old are identical.
$game_map.map_id = 1000 + map_id
end
class Game_Map
attr_writer :map_id
alias oz_dc_setup setup
def setup(map_id)
if $game_system.disc.empty? # Original Disc
oz_dc_setup(map_id) # Perform original call
else
@map_id = map_id
# Load map data from disc
@map = load_data(sprintf("Data/%sMap%03d.rvdata", $game_system.disc, @map_id))
@display_x = 0
@display_y = 0
# Get Folder Location
loc = "Data/#{$game_system.disc}"
$game_system.disc =~ /([0-9]+)/
dn = $1.to_i
if not $game_temp.disc_passages[dn].nil?
# Get passage data stored in game temp
@passages = $game_temp.disc_passages[dn]
elsif FileTest.exist?(loc + "System.rvdata") # If system.rvdata exists
# load system settings from that file
disc_sys = load_data(loc + "System.rvdata")
# Use passage settings from that file
@passages = disc_sys.passages
# Store in Temp data for faster loading
$game_temp.disc_passages[dn] = @passages
else
# Use default passage settings
@passages = $data_system.passages
end
referesh_vehicles
setup_events
setup_scroll
setup_parallax
@need_refresh = false
end
end
end
#==============================================================================
# ** 각 디스크에 커스텀 타일셋을 지정
#==============================================================================
class Spriteset_Map
alias oz_dc_create_tilemap create_tilemap
def create_tilemap
if $game_system.disc.empty?
oz_dc_create_tilemap
else
folder_loc = sprintf("Data/%s", $game_system.disc)
@tilemap = Tilemap.new(@viewport1)
# For each tileset file extension
["A1", "A2", "A3", "A4", "A5", "B", "C", "D", "E"].each_with_index do |name, i|
tilename = "Tile#{name}"
# If the file exists
if not Dir[folder_loc + tilename + ".*"].empty?
@tilemap.bitmaps[i] = Cache.load_bitmap(folder_loc, tilename)
else
# Load default bitmap
@tilemap.bitmaps[i] = Cache.system(tilename)
end
end
@tilemap.map_data = $game_map.data
@tilemap.passages = $game_map.passages
end
end
end
alias oz_dc_create_tilemap create_tilemap
def create_tilemap
if $game_system.disc.empty?
oz_dc_create_tilemap
else
folder_loc = sprintf("Data/%s", $game_system.disc)
@tilemap = Tilemap.new(@viewport1)
# For each tileset file extension
["A1", "A2", "A3", "A4", "A5", "B", "C", "D", "E"].each_with_index do |name, i|
tilename = "Tile#{name}"
# If the file exists
if not Dir[folder_loc + tilename + ".*"].empty?
@tilemap.bitmaps[i] = Cache.load_bitmap(folder_loc, tilename)
else
# Load default bitmap
@tilemap.bitmaps[i] = Cache.system(tilename)
end
end
@tilemap.map_data = $game_map.data
@tilemap.passages = $game_map.passages
end
end
end
class Game_Temp
attr_accessor :disc_passages
alias oz_dc_init initialize
def initialize
oz_dc_init
@disc_passages = []
end
end
attr_accessor :disc_passages
alias oz_dc_init initialize
def initialize
oz_dc_init
@disc_passages = []
end
end