ICE 개요
ICE는 스타크래프트의 "이미지 스크립트"를, 즉 "script/iscript.bin"파일을 편집하는 프로그램 입니다. "이미지 스크립트"란 유닛이나 건물등이 게이머나 컴퓨터로 부터 어떤 "명령"을 받았을때 게임의 "실제 화면 상에서 어떻게 행동하는가"를 설정해 놓은 스크립트 파일 입니다. 바로 이 iscript.bin 파일을 편집할 수 있는 게 ICE 입니다.
ICE가 젤 빈번하게 사용되는 경우가 공격능력이 없던 유닛에 공격능력을 줄때 입니다. SE 나 Arsenal3 에서 유닛에게 "무기"를 설정해주었다고 해도, 이미지 스크립트 상에 이 유닛이 "공격 명령"을 받았을때 어떤 행동을 할지 설정되어 있지 않다면, 게임 중 그 유닛에게 "공격 명령"이 내려진다면 게임이 다운됩니다. (굳이 실험해보라고 권하지는 않겠지만) SE 나 아스날3로, 베슬이나 옵저버에 무기를 추가시켜 겜을 실행해 보면 금방 알게 됩니다.
일단 ICE 프로그램의 "전모"를 대충 살펴보겠습니다.
A. 기본 기능
B. 편집 메뉴
1. Header Info
2. Entry Header
3. Animation Script
A. 기본 기능들
(1) File 메뉴
Open File : 미리 저장해둔 "이미지 스크립트" 파일 (iscript.bin)을 여는 명령
Load Default : 프로그램 자체에 설정된 기본 값을 불러들입니다. 스타크래프트의 원래 iscript.bin에 해당합니다.
Load CWD : 작업중인 드래프트의 .cwd 데이터에서 직접 iscript.bin을 읽어들이는 기능. 스타드래프트를 이용한 작업 중 사용하면 매우 편리한 기능입니다.
(2) Main Header :
이미지 스크립트를 편집하려는 유닛을 선택하는 창입니다.
(3) GRP Preview :
해당 유닛의 애니메이션 동작을 보여줍니다. 단, 원래 스타크래프트의 그래픽 파일에 근거한 것입니다.
"main"창에는 해당 유닛의 기본적인 그래픽 자료가 프리뷰 됩니다. "secondary"창에는 애니메이션 스크립트에서 다른 그래픽 파일을 불러오는 명령이 있을때, 혹은 이미지 검색에 따른 그래픽 파일을 보여줍니다. "prev"라는 버튼은 image.dat나 sprite.dat의 리스트 상의 번호로 해당 그래픽 파일을 프리뷰 할 수 있는 기능입니다.
(4) WAV Preview : 이미지 스크립트에 기재된 효과음을 들을 수 있는 기능입니다. Add 버튼을 이용, sfxdat.dat의 번호에 해당하는 효과음을 들을 수 있습니다.
B. 편집메뉴 :
ICE의 아래쪽 창에는 "이미지 스크립트"(iscript.bin)를 편집에 관한 메뉴들이 있습니다. . 세부분의 탭으로 되어 있습니다.
1. 첫 번째 탭, "Header Info"
ID tag : images.dat에서 해당 유닛의 번호 Offset : (알수 없음.)
한마디로 어느 유닛에 대한 애니메이션 스크립트 들인가에 대한 정보.
이 창에 기재된 숫자들은 "이것은 어느 유닛"이라는 내용이므로 웬만하면 건드리지 않는 것이 좋습니다. (이를테면 "벙커"의 ID tag/Offset 창에 미사일 터렛의 Header Info를 기입하면 게임 화면 상에 "벙커"가 미사일 터렛의 모습으로 나타납니다.)
2. 두 번째 탭, "Entry Header"
(이걸 보시면 ICE 라는 프로그램이 뭘 하는 건 지 알 수 있습니다)
이 탭에는 유닛/건물등이 화면상에서 나타내는 행동에 대한 애니메이션 스크립트들의 넘버가 기재되어 있습니다.
type : 해당 유닛/건물이 사용하는 애니메이션이 몇 가지 종류인지에 대한 정보입니다. 대부분의 경우 수정할 필요가 별로 없지만, 수정하려는 애니메이션 항목 자체가 아예 없거나 등등의 경우엔 자신이 나타내려고 하는 유닛/건물의 속성과 유사한 다른 유닛/건물과 비슷하게 맞추어 줍니다.
initial animation : 해당 유닛의 "기본자세"입니다. 보통 "그림자"에 대한 부분 같은 것이 들어있습니다. 저그 유닛이나 마린, 드래군 같은 유닛의 경우, 아무 명령도 안내려진 상태에서 취하는 동작들 (총을 들었다 내렸다 한다 던가...)에 대한 정보가 포함 됩니다.
Death animation : 말 뜻 그대로 유닛이 파괴될 때의 애니메이션.
initial ground attack animation : 기본적인 지상공격 시의 행동. 유닛에게 고유한 공격 동작 (질럿의 "찌르기" 동작), 그래픽 이나 음향효과 (시즈탱크의 포구 불꽃 및 포성)에 대한 정보와 더불어 무엇보다도, 지상 목표에 대한 "공격 행위" ("주어진 무기를 이용해 목표를 공격 했음 - 상대유닛은 무기에 따른 데미지를 받아야 함") 자체에 대한 정보가 들어갑니다.
initial air attack animation : 기본적인 공중공격 시의 행동.
waiking animation : 이동시의 애니메이션. 마린이라면 몇번째 프레임을 보여주고 몇칸 앞으로 가고..." 하는 스크립트이고, 레이쓰나 커세어라면 (날아갈때 불꽃이 보이니까...) "어떤 그래픽 효과를 보여주고 ..." 하는 식의 스크립트 입니다.
idle from walking : 움직이다 멈추었을때
idle from ground attack : 대지공격을 하다 멈추었을때 (적이 파괴되거나, 공격거리 밖으로 사라져서...)
idle from air attack : 대공공격을 하다 멈추었을때.
repeat ground attack/repeat air attack : 첫 번째 공격 후, (무기에 설정된 Cool Down 후) 반복되는 공격시의 애니메이션. (initial ground/air attack과 같거나, 마린, 질럿, 드래군이나 대부분의 저그 유닛 처럼, 첫 공격에 "예비동작"이 있는 유닛들의 경우엔 조금 틀립니다...)
Special Ability?(1) : 특수능력/마법시의 애니메이션 일텐데, 실제로 사용되지는 않습니다.
Special Ability?(2) : 특수능력/마법을 사용할때 애니메이션. 유닛에 실제로 사용되는 것 이 두 번째 입니다. 공격 시의 애니메이션과 마찬가지로 동작이나 그래픽, 음향 효과 뿐 아니라 상대에게 마법을 사용했음 자체에 대한 정보가 들어갑니다.
Special Ability?(3): 역시 사용되지 않습니다.
Generic : 정확한 기능은 잘 모르겠습니다. 이 애니메이션이 사용되는 경우는 저그의 알이 부화할 때, 테란 건물이 떠오른 상태, 아콘의 합체 과정, 시즈탱크의 시즈모드 포탑, 고스트의 핵 조준, 벌쳐의 마인 매설, 스캐럽이나 마인의 자폭 등, 유닛의 상태에 변화가 있거나, 한 유닛이 다른 유닛을 "불러올때" 사용되는 애니메이션 이라고 생각됩니다.
그 외에 "Unknown" 몇 번으로 Entry Header창에 나타나는 항목중 몇 가지는, "Script" 창에서는 그 기능을 알 수 있는 것이 있습니다.
Unknown 2 : "Construction animation" 건물의 건설중의 애니메이션
Unknown 3 : "Building compelet animation" 건물의 완성 후의 애니메이션
Unknown 4 : "terran landing" 테란 건물이 착륙하는 동작
Unknown 5 : "terran lifting" 테란 건물이 떠오른는 동작
Unknown 6 : "building working" 건물이 일할때의 애니메이션
Unknown 12: "burrowing" 저그유닛이나 마인등이 버로우 될 때
Unknown 13: "unburrowing" 버로우된 유닛이나 마인등이 튀어나올 때
Unknown 10: (설명 없음) 시즈탱크, 골리앗 등의 포탑에 대한 정보. (필수적이지는 않은 듯 보입니다.)
각각의 Header창 옆에 버튼을 누르면, 그 항목에 다른 유닛, 혹은 이 유닛이 사용하는 다른 애니메이션 Header를 선택해 바꿔 넣을 수 있습니다. ICE를 사용한 에디트의 가장 쉬운 방법이라 할 수 있습니다. 단, 이때 유닛의 그래픽상의 차이 때문에 문제가 발생할 수가 있습니다.
이를테면, 만일 레이쓰의 지상공격을 마린처럼 기관총을 쏘게 만들고 싶다고 해서 레이쓰의 지상공격 애니메이션의 항목을 마린의 것으로 바꿔준다면, 게임이 다운되게 됩니다. 왜냐하면 마린의 지상/공중 공격 애니메이션 스크립트에는 마린의 그래픽 파일(grp파일)에 포함된 (총구이 불꽃이라던가, 총을 겨누는 동작 등) 고유한 애니메이션 프레임을 동작시키는 명령이 들어있습니다. 하지만 마린의 애니메이션 스크립트를 레이쓰에 그대로 사용하면, 유닛이 지상공격 명령을 받고, 지상공격 "행동"을 하려 할때, 불러와야 할 해당 프레임, 한마디로 불러와야 할 "그림"이 레이쓰의 그래픽 파일에 없기 때문에 게임이 다운되고 맙니다.
3. 세 번째 탭, "Animation Script"
선택 창에서 애니메이션 스크립트를 선택하면, 그 스크립트 자체의 실제 내용을 볼 수 있고, 아래쪽의 편집메뉴를 이용 스크립트 자체를 편집할 수 있습니다.
(cut, copy, paste, delete 등등은 당연히 알 수 있는 것이므로 생략하고,) New 버튼을 누르면 새로 입력할 라인의 스크립트 명령- "Opcode"을 고를 수 있는 창이 열립니다. 그 창에서 필요한 Opcode를 선택해 줍니다.
스크립트 상에 등장하는 프레임 넘버, 그래픽이나 효과음의 번호, 중간의 쉬는 시간 등 "숫자" 는 손으로 직접 타이핑해서 바꿀 수도 있습니다.
단, 한가지 주의 해둘 사항은, 스크립트에 "new"버튼이나 "paste"명령으로 새로운 라인을 추가하는 경우, 그 애니메이션 스크립트의 Offset 고유번호가 바뀌어, 추가된 "새로운 스크립트"로 간주됩니다.
하지만, 프레임이나 효과음의 번호를 손으로 고쳐주거나, 라인 일부를 delete 명령으로 삭제할 경우, 스크립트의 번호 자체는 바뀌지 않습니다. 즉 첫 번째 경우엔, 원래의 스크립트는 그대로 남아있지만, 두 번째 경우엔 원래의 스크립트 자체가 내용이 바뀌어 버립니다. 여러 유닛에 사용되는 스크립트라면, 원래 스크립트의 내용자체가 바뀌어 버리면 대형사고로 이어질 수도 있겠죠.
스크립트에 사용되는 명령 - "Opcode"들은 대체로 "읽어보면" 대략의 의미를 알 수 있는 것들 입니다.
1) 일반적으로 많이 사용되는 기본적인 Opcode 들
play frame ( ) : ( )번째 프레임을 보여줌
Wait ( ) tick : ( ) tic 동안 대기
Go to offset ( ) : ICE에서는 하나 하나의 애니메이션 스크립트들을 "offset"이라고 합니다. 대부분의 스크립트의 끝은 그 다음에 어느 스크립트로 이어지는지 표시하고 끝납니다.
End animation, remove graphics : "Death animation"같은 경우, 다른 스크립트로 이어지지 않고 끝나는 경우, 스크립트의 종결에 사용되는 코드입니다.
Begin unbreakable code section : 연결된 일련의 행동을 수행하는 코드의 시작. 발키리의 공중공격 처럼, 이 경우에는 일단 특정 행동의 명령이 유닛에게 내려지면 중간에 다른 명령이 통하지 않게 됩니다.
End unbreakable code section : 위의 "Begin - "으로 시작된 동작의 종료.
Play sound [sfxdata.dat]( ) : ( )번 효과음.
Place active overlay [images.dat]( ) vertical offset ( ) : 유닛의 수직 ( ) 위쪽에 ( )번 이미지를 덧씌움. 유닛, 건물에 주로 사용. (예 : 시즈탱크의 공격시 불꽃 효과. 작동중인 건물의 반짝임. 미사일 터렛이나 사이언스 베슬의 "터렛" 효과)
Place active underlay [images.dat]( ) vertical offset ( ) : 유닛의 수직 ( ) 아래에 ( ) 번 이미지. 주로 그림자 등에 사용.
Place independant overlay [sprite.dat]( ) vertical offset ( ) : 위쪽 ( )위치에서 독립된 ( )번 이미지. 미사일의 연기 등에 주로 사용. (유닛과 함께 움직이지 않는 그래픽 효과)
Attack with 1 (1=ground, else air) : 지상 공격 (상대 유닛에 데미지)
Attack with 2 : 공중 공격
Attack with appopriate weapon : 마린, 히드라, 드래군 등, 대지, 대공이 동일한 무기인 유닛에 사용되는 코드.
Cast Spell : 마법 사용. (상대 유닛에 마법 효과)
(?) goto Repeated if still attacking : (적 유닛이 파괴되지 않았으므로) 아직 공격이 계속 되어야 하면 "repeat ground/air animation"으로.
Move graphic ( ) unit forward : ( )칸 만큼 앞으로 이동.
Do damage(missile) : 미사일 등 "탄환"이나 일부 폭발효과 (시즈 포화의 명중시 그래픽, 마린의 기관총 명중시 그래픽 등등)의 "Death Animation"에 사용되는 코드. 말 그대로 데미지를 주는 것.
2) 주의 해야 할 코드들
Place overlay [images.dat]( ) vertical offset ( ) Requires LO? file : 시즈탱크등에 사용되는 코드로, 특정한 이미지를 "Overlay" 시킬때 유닛에 고유한 "lo?"파일에 의해서 위치를 잡게하느 코드. 따라서 lo? 파일을 갖고 있지 않은 유닛에 사용되면 사고가 날 수 있습니다.
UNKNOWN OP: ... 알 수 없음. 하지만 해석되지 않은 어떤 기능을 갖고 있는 코드. 따라서 사용하기 곤란합니다.
[?]send signal to unit for order ( ) : 저그 유닛의 변태, 스캐럽이나 마인의 자폭 등, 유닛의 상태에 변화가 오는 행동에 사용되는 애니메이션 스크립트에 사용되는 코드
Use weapon [weapon.dat]( ) : 스캐럽의 자폭 등에 사용되는 코드. 일반적인 공격 행동에 대한 것은 아님.
____________________________
* 사례
시즈탱크를 예로 실제 animation script를 살펴봅시다.
예 1) 시즈탱크 탱크모드 포탑의 "Initial ground attack animation"
Wait 1 tick Begin unbreakable code section Play sound [sfxdata.dat]68 Place active overlay 536 vertical offset 0 Wait 2 tick Attack with 1 (1=ground, else air) Wait 1 tick End unbreakable code section (?) goto Repeated if still attacking Go to offset 31162 _________________
대충 "인간의 언어"로 해독을 해 본다면,
Wait 1 tick (드래프트 해보신 분은 다 아시다시피, 스타~ 내부에서의 시간 계산은 다 이 단위로 이루어 지죠, ) 1 tick 쉬고,
Begin unbreakable code section 말 뜻 그대로, 이 아래로 분리 안되는, 코드부분 시작... (발키리의 공중공격 부분은 바로 요기에 4번 공격하도록 되어 있습니다. 미사일을 4번 다 쏠때까지는 다른 컨트롤이 먹질 않지요...)
Play sound [sfxdata.dat]68 68번 효과음 ... 퉁~
Place active overlay [images.dat]536 vertical offset 0 유닛의 바로 위에 images.dat 536번 그래픽 효과
Wait 2 tick 2tick 쉬고
Attack with 1 (1=ground, else air) 1번 공격 (상대유닛에게 데미지) "1"이 지상공격이고 "2"는 공중공격 입니다. (* 즉, 대공공격의 애니메이션 스크립트를 대지공격에 사용한다거나, 그 반대의 경우, 분명 공격은 하지만, 상대 유닛에게 데미지는 없는 경우가 생깁니다.)
Wait 1 tick 또 쉬고
End unbreakable code section "덩어리" 코드가 여기서 끝나고,
(?) goto Repeated if still attacking 만일 아직 더 공격해야 하면 "Repeat ...attack" 애니메이션으로
Go to offset 31162 31162번 offset 으로.
당연히 여기서 place actve overlay [images.dat]... 부분에 다른 번호를 넣어주면 퉁퉁포 불꽃 대신 다른 효과가 나타날 것입니다.
play [sfxdat.dat]... 부분을 고쳐주면 "퉁" 소리 대신 다른 소리가 나겠지요.
만일, attack with 1 wait 1tic
대신에,
attack with 1 wait 6 attack with 1 wait 1 tic
이라고 해 놓으면 "퉁,퉁" 하고 6tic 간격으로 한번 공격에 두 발씩 포를 발사하게 됩니다.
*(1.5) 발키리의 경우
한번 공격행동에서 여러차례의 공격을 하는 공격 애니메이션을 가진 대표적인 유닛이 바로 발키리 입니다. 원래의 발키리는 공중공격 애니메이션은, "begin unbreakable code section... "이하의 스크립트에서 "10 tic" 단위로 4번 공격하게 되어 있습니다. 여기서 "attack with2" (이번에는 공중 공격이니까...) 횟수를 바꿔주면 당연히 한번 공격에 발사하는 미사일 갯수가 달라지겠죠. "wait 10 tic"을, 5나 6으로 고쳐주면 발사간격이 좀 빨라질 것입니다. 그런데 만일, (SE나 아스날에서 발키리의 미사일의 "behavior"를 원래대로 "spinaround/Halo"로 놔둔 놓은 상태에서) 4번의 "attack with2" 사이의 간격을 "wait 10 tic.." 대신 "1"로 바꿔주면, 거의 동시에 8발의 미사일을 쏟아 놓게 됩니다.
예 2) 시즈탱크-탱크모드의 Walking Animation
Move graphic 4 unit forward wait 1 tic play frame 0 Move graphic 4 unit forward wait 1 tic play frame 17 Move graphic 4 unit forward wait 1 tic play frame 24 go to offset 29933 _________________
요번에도 해석해 본다면,
Move graphic 4 unit forward 유닛 4배 만큼 움직이고,
wait 1 tic 1 tic 쉬고,
play frame 0 그래픽 파일의 0번 프레임(첫 프레임)을 보여주고
Move graphic 4 unit forward 4칸 앞으로
wait 1 tic 1 tic 쉬고
play frame 17 17번 프레임을 보여주고
Move graphic 4 unit forward 다시 4칸 전진
wait 1 tic 또 1tic 쉬고
play frame 34 34번 프레임을 보여주고
go to offset 29933 29933번 옵셋으로 이동
대충 감을 잡으셨겠지만,
아스날3의 "flynge editor"로 이동속도를 고치기 힘든 대부분의 "걸어다니는 유닛"의 경우, 이렇게 iscript 파일에 의해 이동속도가 정해집니다. (flynge editor에서 살펴보면 이런 유닛들은 "iscript speed/accel"이라고 되어 있습니다.) 만일 위의 스크립트에서 "Move graphic 4 unit forward" 대신"...5 unit ..." 라고 수치를 바꿔주면 탱크가 대충 드래군 정도의 속도로 이동을 하게 됩니다.
이상이 ICE의 전모에 대한 대충의 (정말 대충의) 설명 입니다. 이정도로 충분할 거라고는 절대 생각하지 않습니다. (- -;;) ICE는 드래프트용 유틸 중에 강력한 것으로 손꼽히는 만큼, "사고"도 많이 일으킵니다. 하지만 몇 번 사고를 당하고 나면 대충 감이 잡힐 것 입니다.
어차피 버그와 다운은 드래프트의 어머니라고나 할까... - - ;;
--------------------------------------------------------------------------
* 이 내용은 여기 저기 드래프트 관련 사이트에서 줏어 들은 내용을 대충 요약한 것 입니다. 그리구 그저 "토막 상식"일 뿐, 드래프트를 만드는데 구체적으로 도움이 되는 내용은 아니랍니다. (- -;;)
(1) "MPQ" 란?
"mpq" 라는 건, 아시는 분은 다 아실 테지만, "블리자드사"의 게임에 사용되는 "파일 압축 및 암호화 방식" 입니다. 스타크외에두 워크나 디아 있는 분들은 컴퓨터에서 그 게임의 폴더를 한번 열어 보세여. "무슨 무슨 mpq"라는 파일이 있답니다. 마이크 오브라이언 Mike O"Brian(?) 인가 하는 개발자의 이름을 따서 만든 이름이라구 합니다. Mike O"Brian Pakage --> Mo"Pa"Q(Pakage 를 발음나는 대루 줄여 쓴 거죠...) --> MPQ .... 모 이렇게 지어진 이름이라구 합니다. - -;;
mpq는 워크2 때부터 사용 되었는데, 이유는 무엇보다 멀티플레이할때 게임의 데이터를 임의루 바꾸지 못하게 하기 위해서 였답니다. (워크2 부터 블리자드가 "배틀넷" 방식을 사용하기 시작했지요.)
(2) Storm.dll
mpq가 게임의 데이터를 압축/암호화 하는 거라면, "storm.dll"은 게임 실행시 그 mpq파일을 열어주는 역할을 하는 파일입니다.
그래서, 스타~ 패치를 하면 새로 까는 파일 중에는 거의 반드시,
패치의 바뀐 게임 데이터를 담은 "patch-rt.mpq" 파일과,
그리고 새 버전의 "storm.dll" 이 있습니다.
(3) Mod/드래프트 Draft의 탄생
그런데, 블리자드게임에 관심이 많았던 사람들 중 (개중에는 이런 저런 방식으로 워크나 스타의 개발에 참가했던 사람도 있다는 설도 있습니다만...) 누군가가, 정말로 게임 데이터의 변조를 막을 수 있는지 시험삼아 "mpq/storm.dll"을 크랙해 본 것이지요. 그 결과는 - 드래프트를 열심히 하구 계시니까 뻔 한 거지만 - mpq데이터를 열어서 바꾸는게 가능했다는 겁니다. (물론, 배틀넷등 멀티플레이에서는 아시다시피 버전이 맞질 않으면 게임이 진행되지 않으니까 멀티플레이시에는 사실상 적용될 수 없구, 블리자드의 방식은 그런대로 성공적 이라구 할 수 있지요.)
아무튼, 그 후에 나오게 된 것이 바로 캐멀롯 시스템Camelot Systems의 "스타드래프트"를 비롯해서, 스타~ 의 게임 데이터를 편집할 수 있는 여러가지 드래프트용 프로그램들 입니다.
원리적으루 말하면, 일부 게임 데이터를 편집해서, 그걸 mpq 방식의 압축파일로 저장한 다음, 그걸 스타~ 폴더에 있는 mpq,특히 가장 최근 패치의 내용을 담은 "patch-rt.mpq" 와 바꿔주면 변형된 스타크래프트가 되는 것이지요. 하지만 이렇게 해버리면, 스타~를 하면 항상 바꾼 내용의 게임만 실행되겠지요.
그래서 스타~의 원래 데이터는 그대루 놔두고, 필요할때만 선택적으로 수정된 데이터를 불러들여 게임을 진행하게 해 주는 프로그램이 만들어 졌습니다. 그게 바로 앞서 말한 "스타드래프트" 입니다.
(4) 스타드래프트
즉, "스타드래프트"의 가장 중요한 기능은 기본적으로 스타~의 실행파일이 "patch-rt.mpq" 대신에 게이머가 임의로 수정한 게임 데이터를 가지고 게임을 진행하게 하는 것 입니다. (뭐 정확히 어떻게 하는 건지는 저는 잘 모르겠습니다만...)
"스타드래프트SE"를 사용해 본 분은 잘 아시겠지만, "스타드래프트"는 원래 수정된 게임 데이터를 "cwd"라는 형태로 저장/압축 합니다. 그리고 드래프트 프로그램에서 그걸 불러들여 스타의 원래 게임 데이터 대신 사용하게 합니다. 그런데, 최근에 문제가 생겼습니다. 스타드래프트가 사용하던 cwd 라는 파일 형식과, 그걸 불러들이는 프로그램은 ("도스dos"모드가 지원되는) 윈도우 95/98을 기반으루 만들어진 것입니다. xp는 지원되지 않는 것 이었지요 그래서, 윈도우xp 에서는 cwd 형태의 파일을 사용하는 스타드래프트는 쓸 수 없게 되었습니다.
(5) MPQ 드래프트
그런데 스타드래프트는 작동 안해도, 스타~ 자체는 윈95/98 은 물론 xp에서도 여전히 작동하구 있습니다. 즉, 스타의 원래 데이터 형태인 mpq 파일은 xp에서두 사용이 가능하다는 것 이지요.
그래서 사용되는 것이 "mpq드래프트"라는 프로그램입니다. mpq드래프트는 원래 "스타드래프트"의 가장 중요한 기능, 즉 수정된 게임 데이터를 불러들여 게임을 실행하는 (그리고, 그걸 실행파일로 작성하는 것) 프로그램입니다. 차이가 있다면, 원래의 스타드래프트는 수정된 게임 데이터를 "cwd"라는 별개의 파일형식으로 저장/압축해서 사용했다면, mpq드래프트는 이름 그대로 스타~의 원래 게임 데이터와 같은 mpq형태의 데이터를 사용한다는 점 입니다.
"mpq드래프트"는 (지금은 사이트를 닫은) "캐멀롯 시스템"의 사실상 마지막 작품인데 원래 xp에서 드래프트를 사용하기 위한 것 뿐 아니라, 디아, 워크 같은 mpq라는 파일 형태를 사용하는 모든 블리자드 게임에 적용 가능한 "통합 드래프트"를 위해 만들어진 프로그램 입니다. (즉, 만일 "디아"나 "워크"용 데이터 편집도구가 있다면, 그걸루 수정한 데이터를 이용해서 "디아블로 드래프트"를 실행시킬 수 있다는 것이지요.)
그리구, "옛날"에는 mpq파일 자체를 열어보거나 작성할 수 있는 프로그램은 도스용의 프롬프터 방식의 프로그램들 밖에 없었습니다. (저 같은 준 컴맹은 이해 할 수 없지만, 컴 전문가 수준의 사람들에겐 프롬프터 방식이 더 나은 거라는...)
하지만, 요즘은 대표적으로 "WinMPQ" 같이 사용하기 편한 mpq파일 편집/작성 도구가 있기 때문에, 많은 사람이 "mpq드래프트" 방식으로 드플을 만들고 있는 것이지요.
게다가, 최근에는 스타~ 1.10패치가 나왔습니다. 1.10패치에서는 스타.exe나 storm.dll에 변화가 많아서 예전의 cwd방식의, 즉 스타드래프트se 로 만들어진 드래프트는 작동을 하지 않게 되었습니다. 그래서 더욱 더 "mpq드래프트" 방식으로 드플을 만드는 사람이 많아질 거다... 뭐 이런 이야기지요...
(... 결론적으로 ... 별 내용 없는 글이네요 ^ ^;;)
* P.S) 광고 한 말씀 : 여기 제 홈에 있는 제 자작 드래프트는 모두 mpq드래프트 입니다. xp및 스타 1.10 버전에서도 정상 작동이 가능하다는 것이지요. (물론, 스타그래프트/memgraft가 적용되어 테크트리가 수정된 드플들은 "1.10 버전에서 만(!)" 돌아 갑니다. 원래 1.07버전 까지만 지원되는 스타그래프트를 적용시키기 위해 사용하는 memgraft가 1.10 한 버전만 지원하기 때문이지요...) | | |
|
ICE 개요
ICE는 스타크래프트의 "이미지 스크립트"를, 즉 "script/iscript.bin"파일을 편집하는 프로그램 입니다. "이미지 스크립트"란 유닛이나 건물등이 게이머나 컴퓨터로 부터 어떤 "명령"을 받았을때 게임의 "실제 화면 상에서 어떻게 행동하는가"를 설정해 놓은 스크립트 파일 입니다. 바로 이 iscript.bin 파일을 편집할 수 있는 게 ICE 입니다.
ICE가 젤 빈번하게 사용되는 경우가 공격능력이 없던 유닛에 공격능력을 줄때 입니다. SE 나 Arsenal3 에서 유닛에게 "무기"를 설정해주었다고 해도, 이미지 스크립트 상에 이 유닛이 "공격 명령"을 받았을때 어떤 행동을 할지 설정되어 있지 않다면, 게임 중 그 유닛에게 "공격 명령"이 내려진다면 게임이 다운됩니다. (굳이 실험해보라고 권하지는 않겠지만) SE 나 아스날3로, 베슬이나 옵저버에 무기를 추가시켜 겜을 실행해 보면 금방 알게 됩니다.
일단 ICE 프로그램의 "전모"를 대충 살펴보겠습니다.
A. 기본 기능
B. 편집 메뉴
1. Header Info
2. Entry Header
3. Animation Script
A. 기본 기능들
(1) File 메뉴
Open File : 미리 저장해둔 "이미지 스크립트" 파일 (iscript.bin)을 여는 명령
Load Default : 프로그램 자체에 설정된 기본 값을 불러들입니다. 스타크래프트의 원래 iscript.bin에 해당합니다.
Load CWD : 작업중인 드래프트의 .cwd 데이터에서 직접 iscript.bin을 읽어들이는 기능. 스타드래프트를 이용한 작업 중 사용하면 매우 편리한 기능입니다.
(2) Main Header :
이미지 스크립트를 편집하려는 유닛을 선택하는 창입니다.
(3) GRP Preview :
해당 유닛의 애니메이션 동작을 보여줍니다. 단, 원래 스타크래프트의 그래픽 파일에 근거한 것입니다.
"main"창에는 해당 유닛의 기본적인 그래픽 자료가 프리뷰 됩니다. "secondary"창에는 애니메이션 스크립트에서 다른 그래픽 파일을 불러오는 명령이 있을때, 혹은 이미지 검색에 따른 그래픽 파일을 보여줍니다. "prev"라는 버튼은 image.dat나 sprite.dat의 리스트 상의 번호로 해당 그래픽 파일을 프리뷰 할 수 있는 기능입니다.
(4) WAV Preview : 이미지 스크립트에 기재된 효과음을 들을 수 있는 기능입니다. Add 버튼을 이용, sfxdat.dat의 번호에 해당하는 효과음을 들을 수 있습니다.
B. 편집메뉴 :
ICE의 아래쪽 창에는 "이미지 스크립트"(iscript.bin)를 편집에 관한 메뉴들이 있습니다. . 세부분의 탭으로 되어 있습니다.
1. 첫 번째 탭, "Header Info"
ID tag : images.dat에서 해당 유닛의 번호 Offset : (알수 없음.)
한마디로 어느 유닛에 대한 애니메이션 스크립트 들인가에 대한 정보.
이 창에 기재된 숫자들은 "이것은 어느 유닛"이라는 내용이므로 웬만하면 건드리지 않는 것이 좋습니다. (이를테면 "벙커"의 ID tag/Offset 창에 미사일 터렛의 Header Info를 기입하면 게임 화면 상에 "벙커"가 미사일 터렛의 모습으로 나타납니다.)
2. 두 번째 탭, "Entry Header"
(이걸 보시면 ICE 라는 프로그램이 뭘 하는 건 지 알 수 있습니다)
이 탭에는 유닛/건물등이 화면상에서 나타내는 행동에 대한 애니메이션 스크립트들의 넘버가 기재되어 있습니다.
type : 해당 유닛/건물이 사용하는 애니메이션이 몇 가지 종류인지에 대한 정보입니다. 대부분의 경우 수정할 필요가 별로 없지만, 수정하려는 애니메이션 항목 자체가 아예 없거나 등등의 경우엔 자신이 나타내려고 하는 유닛/건물의 속성과 유사한 다른 유닛/건물과 비슷하게 맞추어 줍니다.
initial animation : 해당 유닛의 "기본자세"입니다. 보통 "그림자"에 대한 부분 같은 것이 들어있습니다. 저그 유닛이나 마린, 드래군 같은 유닛의 경우, 아무 명령도 안내려진 상태에서 취하는 동작들 (총을 들었다 내렸다 한다 던가...)에 대한 정보가 포함 됩니다.
Death animation : 말 뜻 그대로 유닛이 파괴될 때의 애니메이션.
initial ground attack animation : 기본적인 지상공격 시의 행동. 유닛에게 고유한 공격 동작 (질럿의 "찌르기" 동작), 그래픽 이나 음향효과 (시즈탱크의 포구 불꽃 및 포성)에 대한 정보와 더불어 무엇보다도, 지상 목표에 대한 "공격 행위" ("주어진 무기를 이용해 목표를 공격 했음 - 상대유닛은 무기에 따른 데미지를 받아야 함") 자체에 대한 정보가 들어갑니다.
initial air attack animation : 기본적인 공중공격 시의 행동.
waiking animation : 이동시의 애니메이션. 마린이라면 몇번째 프레임을 보여주고 몇칸 앞으로 가고..." 하는 스크립트이고, 레이쓰나 커세어라면 (날아갈때 불꽃이 보이니까...) "어떤 그래픽 효과를 보여주고 ..." 하는 식의 스크립트 입니다.
idle from walking : 움직이다 멈추었을때
idle from ground attack : 대지공격을 하다 멈추었을때 (적이 파괴되거나, 공격거리 밖으로 사라져서...)
idle from air attack : 대공공격을 하다 멈추었을때.
repeat ground attack/repeat air attack : 첫 번째 공격 후, (무기에 설정된 Cool Down 후) 반복되는 공격시의 애니메이션. (initial ground/air attack과 같거나, 마린, 질럿, 드래군이나 대부분의 저그 유닛 처럼, 첫 공격에 "예비동작"이 있는 유닛들의 경우엔 조금 틀립니다...)
Special Ability?(1) : 특수능력/마법시의 애니메이션 일텐데, 실제로 사용되지는 않습니다.
Special Ability?(2) : 특수능력/마법을 사용할때 애니메이션. 유닛에 실제로 사용되는 것 이 두 번째 입니다. 공격 시의 애니메이션과 마찬가지로 동작이나 그래픽, 음향 효과 뿐 아니라 상대에게 마법을 사용했음 자체에 대한 정보가 들어갑니다.
Special Ability?(3): 역시 사용되지 않습니다.
Generic : 정확한 기능은 잘 모르겠습니다. 이 애니메이션이 사용되는 경우는 저그의 알이 부화할 때, 테란 건물이 떠오른 상태, 아콘의 합체 과정, 시즈탱크의 시즈모드 포탑, 고스트의 핵 조준, 벌쳐의 마인 매설, 스캐럽이나 마인의 자폭 등, 유닛의 상태에 변화가 있거나, 한 유닛이 다른 유닛을 "불러올때" 사용되는 애니메이션 이라고 생각됩니다.
그 외에 "Unknown" 몇 번으로 Entry Header창에 나타나는 항목중 몇 가지는, "Script" 창에서는 그 기능을 알 수 있는 것이 있습니다.
Unknown 2 : "Construction animation" 건물의 건설중의 애니메이션
Unknown 3 : "Building compelet animation" 건물의 완성 후의 애니메이션
Unknown 4 : "terran landing" 테란 건물이 착륙하는 동작
Unknown 5 : "terran lifting" 테란 건물이 떠오른는 동작
Unknown 6 : "building working" 건물이 일할때의 애니메이션
Unknown 12: "burrowing" 저그유닛이나 마인등이 버로우 될 때
Unknown 13: "unburrowing" 버로우된 유닛이나 마인등이 튀어나올 때
Unknown 10: (설명 없음) 시즈탱크, 골리앗 등의 포탑에 대한 정보. (필수적이지는 않은 듯 보입니다.)
각각의 Header창 옆에 버튼을 누르면, 그 항목에 다른 유닛, 혹은 이 유닛이 사용하는 다른 애니메이션 Header를 선택해 바꿔 넣을 수 있습니다. ICE를 사용한 에디트의 가장 쉬운 방법이라 할 수 있습니다. 단, 이때 유닛의 그래픽상의 차이 때문에 문제가 발생할 수가 있습니다.
이를테면, 만일 레이쓰의 지상공격을 마린처럼 기관총을 쏘게 만들고 싶다고 해서 레이쓰의 지상공격 애니메이션의 항목을 마린의 것으로 바꿔준다면, 게임이 다운되게 됩니다. 왜냐하면 마린의 지상/공중 공격 애니메이션 스크립트에는 마린의 그래픽 파일(grp파일)에 포함된 (총구이 불꽃이라던가, 총을 겨누는 동작 등) 고유한 애니메이션 프레임을 동작시키는 명령이 들어있습니다. 하지만 마린의 애니메이션 스크립트를 레이쓰에 그대로 사용하면, 유닛이 지상공격 명령을 받고, 지상공격 "행동"을 하려 할때, 불러와야 할 해당 프레임, 한마디로 불러와야 할 "그림"이 레이쓰의 그래픽 파일에 없기 때문에 게임이 다운되고 맙니다.
3. 세 번째 탭, "Animation Script"
선택 창에서 애니메이션 스크립트를 선택하면, 그 스크립트 자체의 실제 내용을 볼 수 있고, 아래쪽의 편집메뉴를 이용 스크립트 자체를 편집할 수 있습니다.
(cut, copy, paste, delete 등등은 당연히 알 수 있는 것이므로 생략하고,) New 버튼을 누르면 새로 입력할 라인의 스크립트 명령- "Opcode"을 고를 수 있는 창이 열립니다. 그 창에서 필요한 Opcode를 선택해 줍니다.
스크립트 상에 등장하는 프레임 넘버, 그래픽이나 효과음의 번호, 중간의 쉬는 시간 등 "숫자" 는 손으로 직접 타이핑해서 바꿀 수도 있습니다.
단, 한가지 주의 해둘 사항은, 스크립트에 "new"버튼이나 "paste"명령으로 새로운 라인을 추가하는 경우, 그 애니메이션 스크립트의 Offset 고유번호가 바뀌어, 추가된 "새로운 스크립트"로 간주됩니다.
하지만, 프레임이나 효과음의 번호를 손으로 고쳐주거나, 라인 일부를 delete 명령으로 삭제할 경우, 스크립트의 번호 자체는 바뀌지 않습니다. 즉 첫 번째 경우엔, 원래의 스크립트는 그대로 남아있지만, 두 번째 경우엔 원래의 스크립트 자체가 내용이 바뀌어 버립니다. 여러 유닛에 사용되는 스크립트라면, 원래 스크립트의 내용자체가 바뀌어 버리면 대형사고로 이어질 수도 있겠죠.
스크립트에 사용되는 명령 - "Opcode"들은 대체로 "읽어보면" 대략의 의미를 알 수 있는 것들 입니다.
1) 일반적으로 많이 사용되는 기본적인 Opcode 들
play frame ( ) : ( )번째 프레임을 보여줌
Wait ( ) tick : ( ) tic 동안 대기
Go to offset ( ) : ICE에서는 하나 하나의 애니메이션 스크립트들을 "offset"이라고 합니다. 대부분의 스크립트의 끝은 그 다음에 어느 스크립트로 이어지는지 표시하고 끝납니다.
End animation, remove graphics : "Death animation"같은 경우, 다른 스크립트로 이어지지 않고 끝나는 경우, 스크립트의 종결에 사용되는 코드입니다.
Begin unbreakable code section : 연결된 일련의 행동을 수행하는 코드의 시작. 발키리의 공중공격 처럼, 이 경우에는 일단 특정 행동의 명령이 유닛에게 내려지면 중간에 다른 명령이 통하지 않게 됩니다.
End unbreakable code section : 위의 "Begin - "으로 시작된 동작의 종료.
Play sound [sfxdata.dat]( ) : ( )번 효과음.
Place active overlay [images.dat]( ) vertical offset ( ) : 유닛의 수직 ( ) 위쪽에 ( )번 이미지를 덧씌움. 유닛, 건물에 주로 사용. (예 : 시즈탱크의 공격시 불꽃 효과. 작동중인 건물의 반짝임. 미사일 터렛이나 사이언스 베슬의 "터렛" 효과)
Place active underlay [images.dat]( ) vertical offset ( ) : 유닛의 수직 ( ) 아래에 ( ) 번 이미지. 주로 그림자 등에 사용.
Place independant overlay [sprite.dat]( ) vertical offset ( ) : 위쪽 ( )위치에서 독립된 ( )번 이미지. 미사일의 연기 등에 주로 사용. (유닛과 함께 움직이지 않는 그래픽 효과)
Attack with 1 (1=ground, else air) : 지상 공격 (상대 유닛에 데미지)
Attack with 2 : 공중 공격
Attack with appopriate weapon : 마린, 히드라, 드래군 등, 대지, 대공이 동일한 무기인 유닛에 사용되는 코드.
Cast Spell : 마법 사용. (상대 유닛에 마법 효과)
(?) goto Repeated if still attacking : (적 유닛이 파괴되지 않았으므로) 아직 공격이 계속 되어야 하면 "repeat ground/air animation"으로.
Move graphic ( ) unit forward : ( )칸 만큼 앞으로 이동.
Do damage(missile) : 미사일 등 "탄환"이나 일부 폭발효과 (시즈 포화의 명중시 그래픽, 마린의 기관총 명중시 그래픽 등등)의 "Death Animation"에 사용되는 코드. 말 그대로 데미지를 주는 것.
2) 주의 해야 할 코드들
Place overlay [images.dat]( ) vertical offset ( ) Requires LO? file : 시즈탱크등에 사용되는 코드로, 특정한 이미지를 "Overlay" 시킬때 유닛에 고유한 "lo?"파일에 의해서 위치를 잡게하느 코드. 따라서 lo? 파일을 갖고 있지 않은 유닛에 사용되면 사고가 날 수 있습니다.
UNKNOWN OP: ... 알 수 없음. 하지만 해석되지 않은 어떤 기능을 갖고 있는 코드. 따라서 사용하기 곤란합니다.
[?]send signal to unit for order ( ) : 저그 유닛의 변태, 스캐럽이나 마인의 자폭 등, 유닛의 상태에 변화가 오는 행동에 사용되는 애니메이션 스크립트에 사용되는 코드
Use weapon [weapon.dat]( ) : 스캐럽의 자폭 등에 사용되는 코드. 일반적인 공격 행동에 대한 것은 아님.
____________________________
* 사례
시즈탱크를 예로 실제 animation script를 살펴봅시다.
예 1) 시즈탱크 탱크모드 포탑의 "Initial ground attack animation"
Wait 1 tick Begin unbreakable code section Play sound [sfxdata.dat]68 Place active overlay 536 vertical offset 0 Wait 2 tick Attack with 1 (1=ground, else air) Wait 1 tick End unbreakable code section (?) goto Repeated if still attacking Go to offset 31162 _________________
대충 "인간의 언어"로 해독을 해 본다면,
Wait 1 tick (드래프트 해보신 분은 다 아시다시피, 스타~ 내부에서의 시간 계산은 다 이 단위로 이루어 지죠, ) 1 tick 쉬고,
Begin unbreakable code section 말 뜻 그대로, 이 아래로 분리 안되는, 코드부분 시작... (발키리의 공중공격 부분은 바로 요기에 4번 공격하도록 되어 있습니다. 미사일을 4번 다 쏠때까지는 다른 컨트롤이 먹질 않지요...)
Play sound [sfxdata.dat]68 68번 효과음 ... 퉁~
Place active overlay [images.dat]536 vertical offset 0 유닛의 바로 위에 images.dat 536번 그래픽 효과
Wait 2 tick 2tick 쉬고
Attack with 1 (1=ground, else air) 1번 공격 (상대유닛에게 데미지) "1"이 지상공격이고 "2"는 공중공격 입니다. (* 즉, 대공공격의 애니메이션 스크립트를 대지공격에 사용한다거나, 그 반대의 경우, 분명 공격은 하지만, 상대 유닛에게 데미지는 없는 경우가 생깁니다.)
Wait 1 tick 또 쉬고
End unbreakable code section "덩어리" 코드가 여기서 끝나고,
(?) goto Repeated if still attacking 만일 아직 더 공격해야 하면 "Repeat ...attack" 애니메이션으로
Go to offset 31162 31162번 offset 으로.
당연히 여기서 place actve overlay [images.dat]... 부분에 다른 번호를 넣어주면 퉁퉁포 불꽃 대신 다른 효과가 나타날 것입니다.
play [sfxdat.dat]... 부분을 고쳐주면 "퉁" 소리 대신 다른 소리가 나겠지요.
만일, attack with 1 wait 1tic
대신에,
attack with 1 wait 6 attack with 1 wait 1 tic
이라고 해 놓으면 "퉁,퉁" 하고 6tic 간격으로 한번 공격에 두 발씩 포를 발사하게 됩니다.
*(1.5) 발키리의 경우
한번 공격행동에서 여러차례의 공격을 하는 공격 애니메이션을 가진 대표적인 유닛이 바로 발키리 입니다. 원래의 발키리는 공중공격 애니메이션은, "begin unbreakable code section... "이하의 스크립트에서 "10 tic" 단위로 4번 공격하게 되어 있습니다. 여기서 "attack with2" (이번에는 공중 공격이니까...) 횟수를 바꿔주면 당연히 한번 공격에 발사하는 미사일 갯수가 달라지겠죠. "wait 10 tic"을, 5나 6으로 고쳐주면 발사간격이 좀 빨라질 것입니다. 그런데 만일, (SE나 아스날에서 발키리의 미사일의 "behavior"를 원래대로 "spinaround/Halo"로 놔둔 놓은 상태에서) 4번의 "attack with2" 사이의 간격을 "wait 10 tic.." 대신 "1"로 바꿔주면, 거의 동시에 8발의 미사일을 쏟아 놓게 됩니다.
예 2) 시즈탱크-탱크모드의 Walking Animation
Move graphic 4 unit forward wait 1 tic play frame 0 Move graphic 4 unit forward wait 1 tic play frame 17 Move graphic 4 unit forward wait 1 tic play frame 24 go to offset 29933 _________________
요번에도 해석해 본다면,
Move graphic 4 unit forward 유닛 4배 만큼 움직이고,
wait 1 tic 1 tic 쉬고,
play frame 0 그래픽 파일의 0번 프레임(첫 프레임)을 보여주고
Move graphic 4 unit forward 4칸 앞으로
wait 1 tic 1 tic 쉬고
play frame 17 17번 프레임을 보여주고
Move graphic 4 unit forward 다시 4칸 전진
wait 1 tic 또 1tic 쉬고
play frame 34 34번 프레임을 보여주고
go to offset 29933 29933번 옵셋으로 이동
대충 감을 잡으셨겠지만,
아스날3의 "flynge editor"로 이동속도를 고치기 힘든 대부분의 "걸어다니는 유닛"의 경우, 이렇게 iscript 파일에 의해 이동속도가 정해집니다. (flynge editor에서 살펴보면 이런 유닛들은 "iscript speed/accel"이라고 되어 있습니다.) 만일 위의 스크립트에서 "Move graphic 4 unit forward" 대신"...5 unit ..." 라고 수치를 바꿔주면 탱크가 대충 드래군 정도의 속도로 이동을 하게 됩니다.
이상이 ICE의 전모에 대한 대충의 (정말 대충의) 설명 입니다. 이정도로 충분할 거라고는 절대 생각하지 않습니다. (- -;;) ICE는 드래프트용 유틸 중에 강력한 것으로 손꼽히는 만큼, "사고"도 많이 일으킵니다. 하지만 몇 번 사고를 당하고 나면 대충 감이 잡힐 것 입니다.
어차피 버그와 다운은 드래프트의 어머니라고나 할까... - - ;;
--------------------------------------------------------------------------
* 이 내용은 여기 저기 드래프트 관련 사이트에서 줏어 들은 내용을 대충 요약한 것 입니다. 그리구 그저 "토막 상식"일 뿐, 드래프트를 만드는데 구체적으로 도움이 되는 내용은 아니랍니다. (- -;;)
(1) "MPQ" 란?
"mpq" 라는 건, 아시는 분은 다 아실 테지만, "블리자드사"의 게임에 사용되는 "파일 압축 및 암호화 방식" 입니다. 스타크외에두 워크나 디아 있는 분들은 컴퓨터에서 그 게임의 폴더를 한번 열어 보세여. "무슨 무슨 mpq"라는 파일이 있답니다. 마이크 오브라이언 Mike O"Brian(?) 인가 하는 개발자의 이름을 따서 만든 이름이라구 합니다. Mike O"Brian Pakage --> Mo"Pa"Q(Pakage 를 발음나는 대루 줄여 쓴 거죠...) --> MPQ .... 모 이렇게 지어진 이름이라구 합니다. - -;;
mpq는 워크2 때부터 사용 되었는데, 이유는 무엇보다 멀티플레이할때 게임의 데이터를 임의루 바꾸지 못하게 하기 위해서 였답니다. (워크2 부터 블리자드가 "배틀넷" 방식을 사용하기 시작했지요.)
(2) Storm.dll
mpq가 게임의 데이터를 압축/암호화 하는 거라면, "storm.dll"은 게임 실행시 그 mpq파일을 열어주는 역할을 하는 파일입니다.
그래서, 스타~ 패치를 하면 새로 까는 파일 중에는 거의 반드시,
패치의 바뀐 게임 데이터를 담은 "patch-rt.mpq" 파일과,
그리고 새 버전의 "storm.dll" 이 있습니다.
(3) Mod/드래프트 Draft의 탄생
그런데, 블리자드게임에 관심이 많았던 사람들 중 (개중에는 이런 저런 방식으로 워크나 스타의 개발에 참가했던 사람도 있다는 설도 있습니다만...) 누군가가, 정말로 게임 데이터의 변조를 막을 수 있는지 시험삼아 "mpq/storm.dll"을 크랙해 본 것이지요. 그 결과는 - 드래프트를 열심히 하구 계시니까 뻔 한 거지만 - mpq데이터를 열어서 바꾸는게 가능했다는 겁니다. (물론, 배틀넷등 멀티플레이에서는 아시다시피 버전이 맞질 않으면 게임이 진행되지 않으니까 멀티플레이시에는 사실상 적용될 수 없구, 블리자드의 방식은 그런대로 성공적 이라구 할 수 있지요.)
아무튼, 그 후에 나오게 된 것이 바로 캐멀롯 시스템Camelot Systems의 "스타드래프트"를 비롯해서, 스타~ 의 게임 데이터를 편집할 수 있는 여러가지 드래프트용 프로그램들 입니다.
원리적으루 말하면, 일부 게임 데이터를 편집해서, 그걸 mpq 방식의 압축파일로 저장한 다음, 그걸 스타~ 폴더에 있는 mpq,특히 가장 최근 패치의 내용을 담은 "patch-rt.mpq" 와 바꿔주면 변형된 스타크래프트가 되는 것이지요. 하지만 이렇게 해버리면, 스타~를 하면 항상 바꾼 내용의 게임만 실행되겠지요.
그래서 스타~의 원래 데이터는 그대루 놔두고, 필요할때만 선택적으로 수정된 데이터를 불러들여 게임을 진행하게 해 주는 프로그램이 만들어 졌습니다. 그게 바로 앞서 말한 "스타드래프트" 입니다.
(4) 스타드래프트
즉, "스타드래프트"의 가장 중요한 기능은 기본적으로 스타~의 실행파일이 "patch-rt.mpq" 대신에 게이머가 임의로 수정한 게임 데이터를 가지고 게임을 진행하게 하는 것 입니다. (뭐 정확히 어떻게 하는 건지는 저는 잘 모르겠습니다만...)
"스타드래프트SE"를 사용해 본 분은 잘 아시겠지만, "스타드래프트"는 원래 수정된 게임 데이터를 "cwd"라는 형태로 저장/압축 합니다. 그리고 드래프트 프로그램에서 그걸 불러들여 스타의 원래 게임 데이터 대신 사용하게 합니다. 그런데, 최근에 문제가 생겼습니다. 스타드래프트가 사용하던 cwd 라는 파일 형식과, 그걸 불러들이는 프로그램은 ("도스dos"모드가 지원되는) 윈도우 95/98을 기반으루 만들어진 것입니다. xp는 지원되지 않는 것 이었지요 그래서, 윈도우xp 에서는 cwd 형태의 파일을 사용하는 스타드래프트는 쓸 수 없게 되었습니다.
(5) MPQ 드래프트
그런데 스타드래프트는 작동 안해도, 스타~ 자체는 윈95/98 은 물론 xp에서도 여전히 작동하구 있습니다. 즉, 스타의 원래 데이터 형태인 mpq 파일은 xp에서두 사용이 가능하다는 것 이지요.
그래서 사용되는 것이 "mpq드래프트"라는 프로그램입니다. mpq드래프트는 원래 "스타드래프트"의 가장 중요한 기능, 즉 수정된 게임 데이터를 불러들여 게임을 실행하는 (그리고, 그걸 실행파일로 작성하는 것) 프로그램입니다. 차이가 있다면, 원래의 스타드래프트는 수정된 게임 데이터를 "cwd"라는 별개의 파일형식으로 저장/압축해서 사용했다면, mpq드래프트는 이름 그대로 스타~의 원래 게임 데이터와 같은 mpq형태의 데이터를 사용한다는 점 입니다.
"mpq드래프트"는 (지금은 사이트를 닫은) "캐멀롯 시스템"의 사실상 마지막 작품인데 원래 xp에서 드래프트를 사용하기 위한 것 뿐 아니라, 디아, 워크 같은 mpq라는 파일 형태를 사용하는 모든 블리자드 게임에 적용 가능한 "통합 드래프트"를 위해 만들어진 프로그램 입니다. (즉, 만일 "디아"나 "워크"용 데이터 편집도구가 있다면, 그걸루 수정한 데이터를 이용해서 "디아블로 드래프트"를 실행시킬 수 있다는 것이지요.)
그리구, "옛날"에는 mpq파일 자체를 열어보거나 작성할 수 있는 프로그램은 도스용의 프롬프터 방식의 프로그램들 밖에 없었습니다. (저 같은 준 컴맹은 이해 할 수 없지만, 컴 전문가 수준의 사람들에겐 프롬프터 방식이 더 나은 거라는...)
하지만, 요즘은 대표적으로 "WinMPQ" 같이 사용하기 편한 mpq파일 편집/작성 도구가 있기 때문에, 많은 사람이 "mpq드래프트" 방식으로 드플을 만들고 있는 것이지요.
게다가, 최근에는 스타~ 1.10패치가 나왔습니다. 1.10패치에서는 스타.exe나 storm.dll에 변화가 많아서 예전의 cwd방식의, 즉 스타드래프트se 로 만들어진 드래프트는 작동을 하지 않게 되었습니다. 그래서 더욱 더 "mpq드래프트" 방식으로 드플을 만드는 사람이 많아질 거다... 뭐 이런 이야기지요...
(... 결론적으로 ... 별 내용 없는 글이네요 ^ ^;;)
* P.S) 광고 한 말씀 : 여기 제 홈에 있는 제 자작 드래프트는 모두 mpq드래프트 입니다. xp및 스타 1.10 버전에서도 정상 작동이 가능하다는 것이지요. (물론, 스타그래프트/memgraft가 적용되어 테크트리가 수정된 드플들은 "1.10 버전에서 만(!)" 돌아 갑니다. 원래 1.07버전 까지만 지원되는 스타그래프트를 적용시키기 위해 사용하는 memgraft가 1.10 한 버전만 지원하기 때문이지요...) | | |
|
| |