VX 스크립트

이 스크립트는 각 게임에 디스크를 만들어 부를 수 있도록 가능케 하는 스크립트입니다.

원작자: 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
#==============================================================================
=begin
머릿말
------------
이 스크립트는 디스크를 바꿔주는 스크립트인데, 각 디스크마다 999개의 맵을 저장할 수 있습니다.
또한, 각 디스크마다 각각 고유의 타일셋을 지정할 수 있기 때문에,
다른 말론 무한의 타일셋을 사용할 수 있게 됩니다.

사용법
------------
이 스크립트는 'change_disc'라는 커맨드로 사용할 수 있는데, 이 커맨드를 사용함으로
다른 디스크를 불러올 수 있습니다. 무슨 뜻이냐면, 다른 프로잭트로 맵을 만든 후,
그것을 본 프로잭트에 불러올 수 있다는 뜻이죠. 그러기 위해선 일단 다른 프로잭트로
맵을 만든 후, 그 프로잭트의 맵 파일을 본 프로잭트의 데이터 폴더안에 저장해야 하는데,
(맵 파일들은 보통 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위치에 지정하고 싶다면,
change_disc(2, 10, 6, 13)
을 사용하시면 됩니다.
만약에 본 프로잭트에 사용되었던 맵으로 돌아가고 싶다면 디스크 부분에 0을 쓰시면 됩니다.
(본 프로잭트는 디스크 0으로 지정되어 있습니다.)
그 다음 방향을 설정하기 위해서는 6개의 숫자를 사용해야 하는데
0, 10 = 방향 변화없음
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
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

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
class Game_Temp
  attr_accessor :disc_passages
  alias oz_dc_init initialize
  def initialize
    oz_dc_init
    @disc_passages = []
  end
end

Who's Tofuman

?
WE ARE!? PENN STATE!!!!!
Comment '30'
  • ?
    뇌반(카이엔) 2008.12.02 22:07
    좋은 자료네요. 스크린샷도 첨부해주셨으면 좋겠습니다^^
  • ?
    Tofuman 2008.12.03 00:00
    뇌반(카이엔)// 스샷은 따로 필요가 없을 듯 싶어서 올리지 않았습니다... 스샷으로 보여줄 게 별로 없군요....
  • ?
    Shot! 2008.12.07 16:51
    간만에 제대로된 자료군요!!! 칩셋에 대해서는 획기적입니다!
  • profile
    메모라이즈 2008.12.10 09:59
    감사요.
  • ?
    Hara 2008.12.12 05:29
    멋지네요;ㅁ;
  • profile
    Mimesis 2008.12.12 11:19
    멋집니다! 그런데 배포용 제작할때도 제대로 되나요...?
  • profile
    Mimesis 2008.12.12 11:21
    잘 되는군요.
  • ?
    오리엔탈 2008.12.20 18:47
    와우 머쩌부러
  • ?
    wkdrn33 2008.12.26 00:01
    스위치,변수는 어떻게되는거죠?
  • ?
    Tofuman 2008.12.26 11:01
    요즘 여러 일로 바빠서, 자세한 대답은 해드리기 힘들지만
    아마도 스위치와 변수는 본 게임(디스크0)의 것을 사용할 겁니다.
    각 스위치와 변수마다 id가 있는데 그걸 보고 적용시키는 거죠...
    일단 스크립트의 특성상 그렇게 될 거라 보는데요..
    지금 본 컴퓨터가 없어서.. 확인을 못해보겠네요.
    한번 실험을 해보세요...
  • ?
    강산군 2008.12.28 06:29
    와우
  • ?
    Mok 2008.12.29 04:33
    정말 필요한 스크립트네요.짱.ㅋㅋ
  • profile
    [RPG2003] 2008.12.29 15:49
    잘쓸게요^^
  • ?
    undertaker 2009.01.03 23:33
    이제 맵 갯수 제한 걱정은 안 해도 돼겠군요, 감사 ㄳㄳㄳ
  • ?
    JaYTwO 2009.01.04 22:09
    훔 확실히 잘 모르겠다는 ㅎㄷ;;
  • ?
    백년술사 2009.01.07 12:59
    뭔가 좋은듯..
  • profile
    카와이 2009.01.14 17:20
    뭔가좋은듯 에 동의한 1人
  • ?
    크라상 2009.01.14 19:20
    뭔소린지
    어려워서 포기ㅜ
  • ?
    방콕족의생활 2009.01.23 08:09
    신기한 스크립트네요 ..;
  • ?
    lhh9606 2009.01.26 13:59
    님들RPGVX님 맵칩을 못넣어서 제대로 후졌군요.
  • ?
    MPOlife 2009.01.27 16:29
    감사!
  • ?
    열겜make 2009.01.28 12:37
  • ?
    레오 2009.02.11 13:05
    VX가 맵칩 확장만 잘 되도록 했으면
    이런 고생 안해도 되는건데 ㅠ
  • profile
    지인 2009.02.21 17:55
    뭔 소린지 잘 모르겠음 @ㅅ@
  • ?
    오를리쉬 2009.03.20 16:47
    고마워요 잘쓸게요~
  • ?
    최닉네임 2011.06.14 00:16

    11

  • ?
    구제가능 2011.07.26 19:44

    아 왜 이런거 잘못건드리면 게임 다 엎을거같지

  • ?
    은적루 2011.08.03 22:55

    신택스 오륜데 어쩌죠 ㅠㅠ

  • ?
    이리엘 2012.09.27 21:14
    아 - 망했어요 -
    바꾸려다가 복사본 원본 헷갈려서 망하고
    정작 실행시켜놓으니 Syn로 시작하는 병맛(?)돋는 이 오류는 뭡니까아ㅏㅏㅏ(멘붕)
  • ?
    베르세모스 2013.02.27 15:18
    엄청 잘되서
    엄청 잘 쓰는데
    charater 그래픽의 타일셋은
    0번 디스크 그래픽이군요.....
    타일셋 코드를 맞춰서 charater 코드에 맞춰야 효과가나온다는 단점이..
    맵칩은 무한대지만 이벤트그래픽 맵칩은 0번에 맞춰야되는거죠
    하지만 이 스크립트는 혁신적이 맵칩이용법입니다
    아주 좋아요

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5455
217 상점 상점 무기, 방어구 능력치 비교 스크립트! 18 불독 2008.12.25 3611
216 기타 이벤트 위치 저장 스크립트 10 Tofuman 2008.12.11 2099
» 기타 디스크 체인져 VX!! (업데이트..) 30 file Tofuman 2008.12.02 3169
214 기타 Crissaegrim Farm BETA 1.0.0 10 Man... 2008.11.22 3095
213 이름입력 모그 이름 바꾸기 한글 변역! 2 Man.... 2008.11.04 4116
212 HUD Crissaegrim HUD 2.0!! 13 Man... 2008.10.29 2853
211 제작도구 최대한 한글로 변혁 했음Window Maker V1.0(대박) 15 Man... 2008.10.29 4675
210 메뉴 Adding Extra Menu in lafia Script 2 Man... 2008.10.29 1575
209 장비 Disposable Ammo(또 있는 곳을 잘 읽으셔야 합니다.) 2 Man... 2008.10.29 1697
208 상점 Shopoholic(한글 설명) 11 Man... 2008.10.29 3188
207 SephirothSpawn's Slanted Bars in VX 1.1 2 Man... 2008.10.28 1572
206 Direction Movement Style 4 Man... 2008.10.28 1719
205 퍼스 스크립트 5 Man... 2008.10.28 1679
204 Repel Effect 1 Man... 2008.10.28 1754
203 전투 Fomars indiviivdual battle 2 Man... 2008.10.28 1348
202 아이템 Item Price Changer 7 Man... 2008.10.28 1536
201 Simple Fon Chage 3 Man... 2008.10.28 1213
200 Screen Resolution 3 Man... 2008.10.28 1172
199 Enable Usage of Rmxp 캐릭터(?) 5 Man... 2008.10.28 2413
198 Multi-threader snippet by Omegazion Man... 2008.10.28 1107
Board Pagination Prev 1 ... 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 Next
/ 32