2013년 5월 21일 화요일

ARMA Description.ext (1/2) 기본적인 설정

ARMA 미션에 있어서 가장 근간이 되는 Description.ext파일에 대해서 다룬다

싱글/멀티 구별없이 모든 미션에 적용되는 부분이고 활용되는 부분이기 때문에 꼭 배워둬야 할 부분이라고 생각된다.

이와 이어지는 Dialog부분은 이어서 다룰 예정이다.



Description.ext는 미션의 최상위폴더에 존재하는 미션에 대한 설정을 담당하는 파일이다. config.cpp 스트럭처를 유지하더라도 많은 하위 클래스들이 제약을 받고, CfgVehicles같은 많은 것들이 작동하지 않는다.

이 부분에서 dialog와 관련된 클래스를 미리 생성해놓은뒤 게임 내부에서 createDialog등으로 dialog를 호출해서 사용한다.

미션에디터에서 테스트 해볼때는 일단 저장을 한 뒤 저장한 폴더에 description.ext파일을 만들고 다시 미션 에디터로 불러와야 내용이 적용된다.

현재 Alpha인 상황에서 테스트 해보기 가장 좋은 방법은 Editor의 Export를 사용하는 것이 아니라 Play의 Multiplayer의 Editor를 사용하는 것 같다.


Description.ext 항목



author

미션의 제작자. 기본적인 설정에서 여기서 설정한 문자열은 하단에 작은 폰트로 "by"라는 문자열과 이어서 나온다.
  • type = String
  • author = "John Doe";


onLoadName

미션 로딩시 출력되는 문자열을 설정한다. loadScreen으로 설정하는 이미지 위에 큰 글씨로 표시된다.
  • type = String
  • onLoadName = "onLoadName";




onLoadMission

미션 로딩중에 메세지를 출력한다. 로딩이 빠르면 메세지를 짧은 시간동안만 출력한다.이 메세지는 유저에게 현재 진행중인 메세지명으로 사용된다. 멀티에서는 GameSpy 탐색기로 미션을 선택할때 출력된다.
  • type = String
  • onLoadMission = "YourMissionName";



loadScreen

미션이 로딩되는 동안 이미지를 출력한다. 경로는 미션폴더에 따른다. 파일은 paa파일을 사용해야한다.PAA파일은 BI Tools중 TexView로 전환하면 된다. 비율은 2:1로 가장 이상적인 사이즈는 1024x512라고 한다.
  • type = String
  • loadScreen = "pictures\intro.paa";
onLoadName = "onLoadName";
author = "dbmst.blogger.com";
loadScreen = "loadScreen.paa";
onLoadMission = "onLoadMission";


onLoadIntro

인트로가 로딩되는 동안 메세지를 출력한다.
  • type = String
  • onLoadIntro = "YourMessage"




OnLoadMissionTime

미션이 로딩되는 동안 시간과 날짜를 출력하도록 설정한다. 1일때 출력한다.
  • onLoadMissionTime = 1;





OnLoadIntroTime

인트로가 로딩되는 동안 시간과 날짜의 출력여부를 설정한다. 1일때 출력한다.
  • onLoadIntroTime = 1;





cfgLoadingTexts

로딩화면에 대해서 설정한다.
  • type = class



header

멀티플레이 게임 브라우저에서 미션에 대해서 표시되는 내용을 설정한다.
  • gameType
    • DM : Death Match
    • CTF : Capture the Flag
    • FF : Flag Fight
    • COOP : Cooperative Mission
    • Team : Team Mission
    • Scont : Sector Control
    • Hold : Hold Location
    • Unknown : 특별히 지정된 것이 없을때
  • minPlayers
    • 최소 유저수
  • maxPlayers
    • 최대 유저수
onLoadName = "onLoadName";
author = "dbmst.blogger.com";
loadScreen = "loadScreen.paa";
onLoadMission = "onLoadMission";

class Header
{
    gameType = unknown;
};

briefing

싱글 미션일때 브리핑을 스킵할 수 있도록 한다. 만약 briefing.html파일이 없으면 이 값과 무관하게 스킵한다.
  • briefing = 0;




debriefing

미션 종료시 미션수행결과에 관한 내용을 출력할 것인지를 설정한다.
  • debriefing = 0;



minScore

미션의 최소스코어값을 설정한다. 점수는 미션 종료 후 보고화면에서의 별점과 관련이 있다.
  • minScore = 0;



avgScore

미션의 평균 스코어를 설정한다. 점수는 미션 종료 후 보고화면에서의 별점과 관련이 있다.
  • avgScore = 1800;





maxScore

미션 최대 스코어를 설정한다. 점수는 미션 종료 후 보고화면에서의 별점과 관련이 있다.
  •  maxScore = 75000;




respawn

리스폰 타입을 설정한다.
  • 0 또는 "NONE" : 리스폰 없음
  • 1 또는 "BIRD" : 갈매기로 리스폰
  • 2 또는 "INSTANT" : 죽은 곳에서 리스폰
  • 3 또는 "BASE" : 기지에서 리스폰
    • 필요한 리스폰 마커명
      • respawn_west
      • respawn_east
      • respawn_guerrila
      • respawn_civilian
    • 마커명 뒤에 추가적인 텍스트로 여러군데에서 랜덤하게 리스폰되도록 설정할 수 있다.
      • 예시
        • respawn_west_1
        • respawn_west_2
        • respawn_westABC
    • 차량 리스폰을 위해서 필요한 마커명
      • respawn_vehicle_west
      • respawn_vehicle_east
      • respawn_vehicle_guerrila
      • respawn_vehicle_civilian
  • 4 또는 "GROUP" : 자신의 그룹으로 리스폰한다. 만약 그룹내의 AI가 아무도 남아있지 않다면 갈매기로 리스폰된다.
  • 5 또는 "SIDE" : 자신의 진영에 속한 AI유닛에게 리스폰된다. 만약 아무도 남아있지 않으면 갈매기로 리스폰된다. 이 리스폰타입을 사용하면 AI중 플레이가능으로 설정된 유닛으로 팀 스위치가 가능하다.



respawnDelay

리스폰  대기시간을 설정한다.
  • type = Number;
  • respawnDelay = 42;




respawnVehicleDelay

차량의 리스폰대기시간을 설정한다.
  • type = Number;
  • respawnVehicleDelay = 11;




respawnDialog

리스폰 타입을 3번으로 설정해놓으면 이 설정으로 점수판과 남은 리스폰시간을 보여준다. 기본값은 1이다.
  • type = Number
  • respawnDialog = 0;




cfgSounds

게임 내에서 사용되는 사운드에 대해서 설정한다. 후에 커맨드 그룹의 Sounds를 다룰때 사용될 것 같다.

  • class명 :playSound나 say등으로 호출할때 쓰인다
  • name : 에디터에서 호출하는 이름
  • sound : 사용될 파일들의 경로등을 설정한다.
class CfgSounds
{
 sounds[] = {};
 class wolf1
 {
  // how the sound is referred to in the editor (e.g. trigger effects)
  name = "my_wolf_sound";
  // filename, volume, pitch
  sound[] = {"fx\wolf1.ogg", 1, 1};
  titles[] = {};
 };
}; //http://community.bistudio.com/wiki/description.ext#cfgLoadingTexts 기본 예제
playSound "wolf1";   // use the class name!
player say ["wolf1", 100];

cfgRadio

라디오를 통해 사용되는 것들을 설정한다.후에 커맨드 그룹의 Radio Control부분을 다룰때 사용하게 될 것같다.

  • class명 : sideRadio나 globalRadio같은 명령들로 호출될 때 사용된다.
  • name : 에디터에서 호출하는 이름
  • sound : 출력되는 소리
  • title : 화면에 보여지는 텍스트



cfgMusic

BGM을 설정한다. 후에 커맨드 그룹의 Sounds를 다룰때 사용될 것 같다.
  • name : 보통은 공란으로 비워두지만, 트리거의 environment option을 통해서 사용하고 싶다면 특정명을 명시해두어도 된다.
  • title : 음악이 재생될때 화면에 표시되는 이름이다. 




cfgIdentities

유닛의 세부설정을 하는 부분으로, 얼굴과 안경, 목소리톤과 이름등을 설정할 수 있다. 미션 중 setIdentity를 통해서 유닛에게 정해진 내용을 적용할 수 있다.

  • class명 : 호출용
    • name
    • face
    • glasses
    • speaker
    • pitch
/* description.ext */
class CfgIdentities
{
    class idTest
    {
        name = "dbmst";
        face = "face1";
        glasses = "none";
        speaker = "Dan";
        pitch= 1.1;
    };
};

/*init*/
this setIdentity "idTest"


keys

아래의 keysLimit에 사용할 키를 설정한다.
  • type = Array
  • keys[] = {"key1","key2","key3"};




keysLimit

미션을 언락하기 위해서 필요한 키의 수를 설정한다.
  • keysLimit[] = 2;




doneKeys

싱글 플레이 미션이 완료된 것으로 표시되기 위한 키를 지정한다. 사용하려면 activateKeyisKeyActivate를 통해야한다.
  • donKeys[] = {"key4"};




disabledAI

멀티플레이시 이 값이 1이면 유저들이 사용하고 있는 유닛을 제외하고 전부 제거한다.
  • disabledAI = 1;



aiKills

값이 1일때 AI유닛을 점수판에 표시하도록 한다.
  • aiKills = 1;





showGPS

GPS의 사용유무를 설정한다.
  • showGPS = 0;




showCompass

나침판의 표시 유무를 설정한다.
  • showCompass = 0;



showMap

지도를 표시할 것인지를 설정한다. showGPS가 활성화 되어있으면 showMap이 비활성화 되어있어도 지도가 출력된다.
  • showMap = 0;

showMap = 0;
showGPS = 0;



showNotePad

메모장 표시 유무를 설정한다.
  • showNotePad = 0;




showWatch

시계의 표시 유무를 설정한다.
  • showWatch = 0;




scriptedPlayer

scriptedPlayer를 활성화시킬 경우 플레이어가 없는 상황이라도 미션을 시작했을때 "No player select"라는 문구가 뜨지 않는다.
  • scriptedPlayer = 1;





rscTitles

UI 디스플레이를 설정할때 쓰인다. 나중에 나올 커맨드 그룹중 Interaction부분에서 쓰일 것 같다.




weapons

브리핑동안 무기를 설정할 수 있다.

  • class : 무기명
    • count  = 수량




magazines

브리핑동안 탄약을 설정할 수 있다.

  • class : 탄창명
    • count = 수량



backpacks

브리핑동안 가방을 설정할 수 있다.

  • class : 가방명
    • count = 수량



weaponPool

캠페인의 이전 미션 무기 상태를 다음 미션의 브리핑의 기어 메뉴에서 넘겨받을 수 있다. 커맨드 그룹중 Weapon Pool에서 다루게 될 것 같다.
  • weaponPool = 1;




titleParam%

titleParam1과 titleParam2는 멀티플레이용 옵션이다. 이 옵션들은 멀티플레이의 로비에서 볼 수 있다. 이 설정은 세팅 타임 제한과 깃발뺏기나 데스매치와 같은 게임에서의 스코어 제한등에서 유용하게 쓰인다. 다른유용한 용도로는시간가속, 미션의 난이도 설정, 인트로의 유무등을 설정할때에 있다.

  • valuesParam%
  • deValueParam%
  • textsParam%





params

titleParam을 좀 더 정확히 설정하기 위함이다. 내부에서 paramsArray로 호출해서 사용할 수 있다 (예- paramsArray select 0)

  • class Params
    • class 명
      • title
      • value
      • texts
      • default


//description.ext
titleParam1 = "TEST";
valuesParam1[] = {0, 1, 2};
defValueParam1 = 1;
TextsParam1[] = {"Zero", "One","Two"};

//init
hint str param1;



disableChannels

해당 채팅 채널을 차단한다.
  • disableChannels[] = {0,1,2,6};
    • 0 : Global
    • 1 : Side
    • 2 : Command
    • 3 : Group
    • 4 : Vehicle
    • 5 : Direct
    • 6 : System




enableItemsDropping

수영시 아이템을 떨어뜨릴지에 대해서 설정한다.
  •  enableItemsDropping = 0;
    • 0 : Disable
    • 1 : Enable





joinUnassigned

멀티플레이에서 기본 설정으론 새로 들어온 유저는 플레이가능 유닛에 자동배정받지 않지만, 이 값을 0으로 설정하면 진영과 플레이하는 유닛까지 자동으로 배정한다.



댓글 4개:

  1. 이야~ 깔끔하게 정리해두셔서 정말 좋네요.
    유용하게 사용하겠습니다~

    답글삭제
  2. 확실히 꿀팁이로군요. 하지만 이해가 안되는... 번거로우시겠지만 리스폰에 대한 예시를 하나 적어주실수 있으십니까? WEST팀이 그자리에서 5초후에 살아나도록 설정하려면 어떤 식으로 입력해야 합니까?

    답글삭제
    답글
    1. 요즘 ARMA를 안해서 틀릴지도 모르지만, 죽은 그 자리에서 부활하는 것을 말씀하시는거라면 respawn = 2 후에 respawnDelay = 5로 설정해주면 될 것 같네요.

      삭제
  3. WEST팀이 죽고나서 베이스에 태어나게 할려면 어떻게 해야하나요? 봐도 이해가 안됩니다...알려주세요

    답글삭제