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 5398
437 Simple Fon Chage 3 Man... 2008.10.28 1212
436 아이템 Item Price Changer 7 Man... 2008.10.28 1530
435 전투 Fomars indiviivdual battle 2 Man... 2008.10.28 1339
434 Repel Effect 1 Man... 2008.10.28 1753
433 퍼스 스크립트 5 Man... 2008.10.28 1679
432 Direction Movement Style 4 Man... 2008.10.28 1719
431 SephirothSpawn's Slanted Bars in VX 1.1 2 Man... 2008.10.28 1572
430 상점 Shopoholic(한글 설명) 11 Man... 2008.10.29 3185
429 장비 Disposable Ammo(또 있는 곳을 잘 읽으셔야 합니다.) 2 Man... 2008.10.29 1696
428 메뉴 Adding Extra Menu in lafia Script 2 Man... 2008.10.29 1574
427 제작도구 최대한 한글로 변혁 했음Window Maker V1.0(대박) 15 Man... 2008.10.29 4672
426 HUD Crissaegrim HUD 2.0!! 13 Man... 2008.10.29 2852
425 이름입력 모그 이름 바꾸기 한글 변역! 2 Man.... 2008.11.04 4114
424 기타 Crissaegrim Farm BETA 1.0.0 10 Man... 2008.11.22 3093
» 기타 디스크 체인져 VX!! (업데이트..) 30 file Tofuman 2008.12.02 3168
422 기타 이벤트 위치 저장 스크립트 10 Tofuman 2008.12.11 2096
421 상점 상점 무기, 방어구 능력치 비교 스크립트! 18 불독 2008.12.25 3611
420 타이틀/게임오버 타이틀 화면에 매뉴창 이동방법 5 석산 2009.01.06 2824
419 온라인 넷VX - 온라인 스크립트 29 아방스 2009.01.06 6749
418 맵/타일 VX Mode 7 스크립트!!!! 42 file Tofuman 2009.01.07 4306
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32