PGR21.com
- 경험기, 프리뷰, 리뷰, 기록 분석, 패치 노트 등을 올리실 수 있습니다.
Date 2004/03/07 11:18:03
Name 김연우
Subject 스타크래프트 파고들기 3 - 프로그래밍적 측면들

어찌하다 2회까지 쓰기는 했지만, 3회를 쓰기는 아주 막막했습니다. 어떤 주제는 글 하나로 쓰기는 너무 양이 적고, 어떤 주제는 이미 보편화된 지식이고, 어떤 주제는 별로 재미가 없는 것들이고-_-

그렇게 미루다 미루다 보니 아예 스스로 조차 까먹을 지경이 되었습니다. 그래서 '복잡히 생각 말자'라고 마음 먹고, 아무 주제나 골라잡아 버렸습니다.


::랜덤의 규칙성::

3년전즘 이었을까요, 임요환 선수가 랜덤을 고른 상대방의 종족을 색깔만 보고서 맞춘 적이 있습니다. 대체로 '어느색깔이 어느 종족이더라'라는 경험에서 나온, 당시로서는 놀라운 예측이었죠.

이현승 선수가 '랜덤을 선택하면 보통 상대 종족에 대한 상성종족이 나오더라'라는 생각을 가지고, 박태민 선수로 랜덤을 선택했으면서 테란을 예측했고, 그 결과 정말 테란이 나왔습니다.

랜덤을 정말 '무작위'일까요?

아닙니다. 컴퓨터는 무작위적 숫자를 만들어 내지 못합니다. 단지 미리 입력된 '무작위 숫자 배열'중 몇개를 꺼내서 보여줄 뿐이죠.

예를 들어
...32 230 1 142 94...등의 숫자가 저장되있고, 프로그램에서 '무작위 숫자'를 요청하면, 저것들을 순서대로 꺼내주는 것입니다.
그렇기에 랜덤은 '예측가능'한 것입니다. 미리 저장된 숫자를 꺼내니까요.

그렇다고 해서 플레이어에게 까지 예측 가능하게 돼서는 안됩니다. 색을 보고 종족을 맞추는 플레이 등은, 생각보다 무진장 오래 스타크래프트의 인기가 지속되면서 생긴 일이니까요.

그래서 '무작위 숫자'를 꺼내는 순서를 게임 할때마다 바꿔줘야 합니다. 그리고 그 기준은 '시간'입니다.

C언어를 배우신 분은
...
srand(time(NULL));
....
이란 문장을 본적이 있을 것입니다. 여기서 srand는 '무작위 숫자 추출 순서 변경 함수'이고, time(NULL)은 '현재 시간 함수' 입니다.

스타크래프트 또한 이렇게 구성되어 있고, 그렇기에 '컴퓨터 시간을 고정시키는 프로그램'을 이용하여 스타크래프트를 돌리면, 언제나 같은 스타팅 포인트, 같은 색깔, 같은 종족이 나옵니다.(참고로 현재 전 그 프로그램을 가지고 있지 않습니다.)



::리플레이와 멀티플레이::

스타크래프트는 전략시뮬레이션 이면서도, 아주 간단 명료한 게임입니다. 쏘면 100%맞고, 지형은 3,4단계 뿐이며 모든 것들을 오브젝트로 묶어서 관리하죠.

이런 간단 명료함은 멀티플레이의 장점이 되었습니다. 스타크래프트는 멀티플레이를 할때, 서로에게 '명령들'만 전송합니다. '같은 상황, 같은 시간, 같은 명령을 내려주면 같은 상황이 발생한다.'이란 전제아래 가능한 것이죠.

리플레이도 같은 맥락에서 연장됩니다. 멀티플레이는 '상대방에서' 리플레이는 '저장된 리플레이 파일에서' 명령을 받는다는게 다른 점이죠.

그렇기에 1.10에서 1.09의 리플레이를 볼수 없습니다. 패치로 약간이나마 달라진 프로그래밍 구조가, '같은 상황, 같은 시간, 같은 명령을 내려주면 같은 상황이 발생한다.'는 규칙을 깨트렸기 때문이죠.


지금까지의 설명들을 이해하셨으면

'뒤로 감기'기능이 없는 이유,
세이브 파일로 플레이를 하면 리플레이 저장이 안되는 이유,
리플레이 파일이 그토록 용량이 작은 이유.

들을 자연스레 알게될 것입니다.



::기타 등등::

이하는 게임을 플레이 하는데는 필요가 없는 사실들 입니다.
한마디로...
일반 유저분들게는 재미없는 내용입니다.-_- 게임 제작에 관심있는 분들께는 유익할 수 있어도요.

-유닛 능력치 규칙
1. 모든 유닛들은 비슷한 공격력을 가진다.
('공격 데미지 수치'의 차이는 큽니다만, 공격 속도를 조정해서 비슷한 공격력으로 맞춥니다.)
2. HP는 유닛의 가격과 비례한다.
3. 특별한 능력이 없는한, HP와 공격 데미지 수치는 8:1 정도로 비례한다.
이유는? 전력비는 병력비의 제곱이라는 멘체스터 제2법칙 때문입니다. 저런 규칙도 맞추지 않으면 벨런스 맞추기가 너무 힘들죠.


-256칼라에의 반투명
256칼라와 16bit 칼라의 차이점은, 256칼라는 '정해진 색을 골라서'찍고, 16bit칼라는 '원하는 색을 자유롭게 찍는다'는 점입니다. 그렇기에 16bit칼라 부터는 온갖 특수효과들이 가능하지만, 256칼라는 정해진 색만 가능하기에 '혼합색'같은것은 있을수 없고, 그렇기에 반투명은 불가능 합니다.

그렇다면 스타크래프트는?
어찌 생각하면 간단합니다.  '혼합색'을 미리 만들어 놓으면 되는거죠. 그리고 혼합색이 만들어 지는 특정 색들을 계산해 둡니다. 그리하여 게임상에서 반투명이 필요할때마다 미리 만들어진 혼합색을 그립니다.


-보이지 않는 상태

클록킹만 이야기하는게 아닙니다. 벙커 or 수송유닛에 타서, 존재는 하는데 보이지 않는 유닛을 이야기하는거죠.

생산되고 있는 유닛도 마찬가지입니다. 아마 '탱크를 완성 직전에 취소했더니, 팩토리에서 나오자 마자 취소되더라'라는 이야기 들어 보셨을 것입니다.
그 이유는 이렇습니다.
팩토리에서 탱크 생산을 누르자 마자, 팩토리 안에 '실제로 탱크'를 생성합니다. 단지 보이지 않을 뿐입니다. 그리고 생산이 완료 돼었을때, 탱크 '보이는 상태'로 만듭니다.
마찬가지로, '생산 취소'는 '탱크 생성을 중단'하는게 아니라, 탱크를 '파괴'합니다.  단지 폭발하는 장면이 보이지 않을 뿐이죠.
그런데, 탱크가 완성직전이라 '보이는 상태'로 만들어 '생산 완료'를 준비하는 상황에서, 탱크를 취소하게 되면 '탱크 파괴 행위'가 눈에 보이게 되는 것입니다.

참고로 이 '보이지 않는 상태'에서는 '타겟 지정 불가능 상태'가 되버립니다. 미네랄을 강제 공격하는것과 같은 상태이죠.
드래군이 탱크에게 포탄을 날렸는데, 탱크가 드랍쉽에 타자 공격이 무효되는 것의 이유입니다.


-오브젝트

스타크래프트는 65536개의 한계 오브젝트를 가지고 있습니다. 무한맵에서 4:4로 열심히 팀플하면서 건물로 글씨를 쓰는등 엽기(?)행위를 하다가, '건물을 더이상 지을수 없다'는 메세지를 본적이 있을 것입니다. 그것은 스타크래프트가 65536개의 오브젝트를 한계로 가지기 때문입니다.
여기서 오브젝트는 건물,유닛 뿐만 아니라 특수효과, 미사일, 미네랄,가스,두데드 등도 포함합니다.
'발키리 미사일 버그'는 그렇기에 일어나는 것이죠. 특수효과가 지나치게 화려하다 보니 그 특수효과에서 엄청나게 많은 오브젝트를 소비하기 되고, 미사일 생성에 투자할만한 오브젝트 여유가 부족하게 됩니다. 그래서 미사일이 쏘다 마는 것입니다.


통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
04/03/07 11:20
수정 아이콘
이야... 정말 좋은 글이네요.. 잘 읽었습니다 ^^
04/03/07 11:45
수정 아이콘
음.... 한 가지 더...
쏘지 못하는 발키리의 비밀 인데요...

SC내부에는 제가 생각하기에 한 화면에 표시가능한 Object수 (스프릿 이라고도 하죠.) 가 있을 것이라 생각 됨니다. 따라서 인스턴트 공격을 하는 유닛은 그런 경우가 없겠지만... 발키리 처럼 미사일이 보이는 형태의 공격 유닛의 경우 화면에 유닛이 꽉 찬 경우 더이상 Object를 생성할 수 없기 때문에 딜레이가 있을 수 있죠. 그 딜레이 상태가 커지면 쏘지 못하는 발키리가 되는 것이죠...

예전에 스타크레프트 택스트 버젼을 만들다가 귀찮아서 관둔적이 있었는데... 이글을 읽다 보니 갑자기 다시 만들어 보고 싶어지는 군요..
04/03/07 11:49
수정 아이콘
~_~ 맨체스터 유나이티드
04/03/07 11:50
수정 아이콘
파고들기 1,2편을 봐야겠다는...
테리아
04/03/07 11:54
수정 아이콘
와 몰랐던 사실들을 알게되었네요!! 특히 랜덤 규칙성이 ^^저에게 크나큰 충격이었습니다. 때론 저도 어떤 규칙성이 있지 않을까 생각했었는데 과연 그렇네요,.
마린이랑러커
04/03/07 11:58
수정 아이콘
저는 그동안 '맞랜덤을 하면 절대 같은종족이 선택되지 않는다'라는 신념이 있었는데, 이것도 항상 그렇지는 않더군요. 같은 종족이 아니라는 신념 때문에 제가 저그가 걸리면 12드론 멀티를 가져가곤 했는데, 상대방이 9드론 저글링 달리고 있는경우가 종종 생기더군요..-_-
04/03/07 12:03
수정 아이콘
또한 조금 부연하면.... 렌덤은 - 컴퓨터에서 렌덤을 기대 하대 한다는 것은 사기에 가깝다 라고 Knuth인가 본 노이만 인가가 말했듯이(기억이...)... 컴퓨터 에서 말하는 랜덤은 진정한 랜덤이 아니라 슈도 랜덤 이죠.
그리고, 리플레이의 그런 방식은 백터 드로잉 방식의 일종이죠...
음. 그리고 드랍쉽 같은 유닛에 대해 조금더 부연 하면...
제 생각으로는 드랍쉽 오브젝드에 탑승한 유닛은 드랍쉽에 링트리스트 로(혹은 비슷한 자료구조) 연결되어 있는거죠. 연결 되어 있을때는 보임이 Disable 될 뿐만 아니라, 유닛의 기능도 Disable되죠... 만일 탑승시 드랍쉽이 파괴 되었을 때는 연결된 모든 오브젝트가 Delete되는 것 이라고 생각 합니다.

생산되던 유닛의 최소시는 음... 제가 유닛 카운터를 본적이 없기때문에... 파괴된다 아니다라는 말씀을 드리기가.... 한번 실험해 봐야 겠군요...

좋은글 잘 읽었습니다.
04/03/07 12:07
수정 아이콘
오..발키리 미사일 버그는 버그라기보다는 스타크래프트 프로그램의 한계였던 것이군요..
04/03/07 12:07
수정 아이콘
음.. 방금 확인해 봤는데... 아마도 유닛 최소시는 파괴가 아니라 Object 생성 취소 인것 같군요.... 아마 파괴라면 게임이 끝나고 유닛 카운터에 나와야 하지 않을까 생각 되네요...
배추도사
04/03/07 12:14
수정 아이콘
그럼 발키리 버그가 안 나게 하는 방법은 없을까요?... 한꺼번에 안 쏘고 나눠서 쏘게 해야 하나;;;
휘발유
04/03/07 12:17
수정 아이콘
그런데 C에서만 해도 정말 랜덤이 가능하지 않나요?
숫자 범위를 정해주고 랜덤을 돌린후 정확히 그 숫자들을 3등분해서
종족을 선택하게 하면 될껏같은데요..
배추도사
04/03/07 12:18
수정 아이콘
베르트랑 선수 랜덤을 떠올리면... 대 이윤열 - 테란 대 박경락 - 저그 대 김성제 - 저그
김성제 선수와의 경우는 맞아 떨어지네요;
04/03/07 12:18
수정 아이콘
휘발유// 어떤한 컴퓨터에서도, 어떠한 언어 에서도 완벽한 랜덤은 불가능 합니다....
04/03/07 12:42
수정 아이콘
오브젝트가 한계에 다다르면 스캔도 안써지고 싸이오닉스톰도 안써지더군요. 유즈맵하면서 알게됨.
양창식
04/03/07 13:02
수정 아이콘
이렇게 생각해볼 수 있지 않을까요
그러니까 컴퓨터와 주사위는 다릅니다. 컴퓨터는 랜덤(무작위선택)이 가능하지 않지만 주사위는 그 무작위선택이 가능합니다. 하지만 주사위도 중력을 알고 얼마만큼의 힘으로 던졌는가를 알고 맨 윗면은 뭐였는가, 그리고 수많은 변수들을 알고 계산하면 나올 수를 미리 알수 있지 않을까 하네요. 만약 가능하다면..컴퓨터가 계산하다가 터지겠군요..음하핫^^;
04/03/07 13:05
수정 아이콘
생각해 보니 정규분포에 따른 렌덤은 가능하군요 -_- 예전에 주사위 프로그렘 짜다가 알게되었습니다만. 렌덤 불가능-_- 맞지요. 맞구요~ 나중에 양자 컴퓨터 나오면 가능할지도? -.-
BeAmbitious
04/03/07 14:19
수정 아이콘
컴맹이라 글은 잘 이해 못했지만 김연우님 정말 대단하시네요.
아이노드
04/03/07 14:31
수정 아이콘
양창식 // 주사위의 예측가능성은 불확정성의 원리에 의해 부정됩니다.
렐랴 // 양자컴퓨터 역시 수도랜덤만이 가능합니다. 이는 튜링머신의 한계이지요.
언뜻 유재석
04/03/07 14:44
수정 아이콘
*항즐이님에 의해 게시물 이동 될것 같습니다.(2004-03-07 14:42:30)
04/03/07 14:57
수정 아이콘
글 잘읽었습니다. ^_^
서창희
04/03/07 15:48
수정 아이콘
으하하하 언뜻 유재석님 많이 웃었습니다.
남자의로망은
04/03/07 16:30
수정 아이콘
언제나 김연우님의 글은 대단하다는 생각만 듭니다. 이글도 곧 추게로 가지 않을까 생각됩니다. ^^
Connection Out
04/03/07 16:38
수정 아이콘
아이노드// 주사위와 바닥의 물리적인 특성치를 제공하면 양창식님 말씀대로 충분히 시뮬레이션이 가능하고 실제로 구현된 것을 본 적이 있습니다. 물론 이를 위해서는 주사위를 던질때의 위치와 힘의 방향등의 조건이 완벽하게 주어져야 하는 한계는 있습니다.
아이노드
04/03/07 17:00
수정 아이콘
Connection Out // 불확정성의 원리에 대해 알아보세요. 기본입자 단위에서의 위치와 운동량의 정확한 파악은 불가능함을 시사하고 있습니다.
따라서 엄밀한 의미에서의 예측은 불가능합니다.
Connection Out
04/03/07 17:51
수정 아이콘
아이노드// 학부 때 불확정성의 원리에 대한 수업은 이미 들었습니다.
제 댓글에서 주사위를 던질때의 위치와 힘의 방향등의 조건이 완벽하게 주어져야 하는 한계가 있다고 말씀드렸건만.....
냉장고
04/03/07 18:21
수정 아이콘
이쪽으로는 무지한 저도 무척 재미있게 읽었습니다 ^^ 설명문같은거 아주 잘 쓰실것 같네요 그럼 이만 1,2편 찾으러~~ ^^
아이노드
04/03/07 18:57
수정 아이콘
Connection Out // 제가 말한 바는 위치와 힘의 방향을 완벽하게 제시할 수 없음입니다. 말씀하신 대로 모든 조건이 완벽하게 주어진 경우의 계산 가능성에 대해서는 인정합니다.
양창식
04/03/07 21:40
수정 아이콘
아이노드, Connection Out/모두들 제 수준 위에서 노시는 분들이시군요..(머엉..)
clonrainbow
04/03/08 04:06
수정 아이콘
내용도 내용이지만 덧글도 재밌군요..

주사위와 불확정성의 원리라...
vividvoyage
04/03/08 15:38
수정 아이콘
이번에도 대단한 글쓰기 솜씨... 잘 읽었습니다.
이제 색깔보고 랜덤 맞추는 연습을 해볼까나... (퍽!)
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
4082 레퀴엠 포톤푸쉬... 이런 방어는 어떨까요. [6] 김연우3747 04/04/28 3747 0
3950 차재욱 선수가 말해준 '기요틴은 이것이다!' [29] 김연우9087 04/04/22 9087 0
3949 [편지] PgR21의 누군가에게(7) [8] Bar Sur3271 04/04/22 3271 0
3843 주간 PGR 리뷰 - 2004년 4월 18일 [14] 주간 PGR 리뷰4309 04/04/18 4309 0
3817 프리매치 맵의 특징들 [2] 김연우3949 04/04/17 3949 0
3736 OSL맵의 언벨런스 [42] 김연우7154 04/04/14 7154 0
3491 e-sports의 미래는? [14] 김연우4228 04/04/05 4228 0
3478 나는 pgr21이 좋다. [10] 지바고3516 04/04/04 3516 0
3304 안티 테란의 축 [47] 김연우6424 04/03/31 6424 0
2735 스타크래프트 파고들기 3 - 프로그래밍적 측면들 [30] 김연우6945 04/03/07 6945 0
2709 [PvT] 리메이크 다나 토스 [2] 김연우3591 04/03/06 3591 0
2701 OSL 5판3선승제 승부의 데이터로 분석한 종족상성... [37] 스타매니아3885 04/03/06 3885 0
2699 3전 2선승제,5전 3선승제의 승률을 계산하면? [7] 김연우6705 04/03/06 6705 0
2392 국민맵 확대 운동 [37] 김연우6102 04/02/25 6102 0
2186 최강의 프로게이머는 누구인가? (프로게이머 래더 랭킹) - #1 들어가기까지(잡설) [12] 그리피5447 04/02/18 5447 0
1838 프로게이머.. 굳이 점수를 매긴다면?? [23] 기다리다6489 04/02/09 6489 0
1728 스타의 밸런스와 테란... 프로게이머와 일반유저 [33] 스타매니아3967 04/02/05 3967 0
1694 테란의 강함에 대한 오해들 [35] 김연우5874 04/02/04 5874 0
1564 오늘 강민vs전태규에서 한가지 아쉬운 점.(스포일러 있음) [23] 김연우6068 04/01/31 6068 0
1529 MBC 팀리그 KTFvs4U의 흐름은, 이것 이었을까? [8] 김연우5174 04/01/29 5174 0
936 마인에 폭사해버린 넋두리. [14] 김연우4916 04/01/10 4916 0
509 갑자기 생각난 트리플 커맨드의 장점 [2] 김연우4723 03/12/28 4723 0
442 훨씬 나아진 패러독스 II PvsZ [25] 김연우7813 03/12/26 7813 0
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로