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
수정 아이콘
이번에도 대단한 글쓰기 솜씨... 잘 읽었습니다.
이제 색깔보고 랜덤 맞추는 연습을 해볼까나... (퍽!)
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
공지 댓글잠금 통합 규정(2019.11.8. 개정) jjohny=쿠마 19/11/08 420176 0
공지 게임게시판 운영위원회 신설 및 게임게시판 임시규정 공지(16.6.16) [3] 노틸러스 15/08/31 485706 4
공지 공지사항 - 게시판 글쓰기를 위한 안내 [29] 항즐이 03/10/05 655456 13
81488 [LOL] 한화생명, 티젠상대 10연패 달성 [15] Leeka1314 25/08/02 1314 4
81487 [오버워치] [OWCS] 미드시즌 챔피언십 2일차 리뷰 [4] Riina316 25/08/02 316 0
81486 [LOL] 승리를 거둔 수장들과 시름에 빠진 팀들 - 젠지vsKT, DKvsDNF [42] 하이퍼나이프6401 25/08/01 6401 6
81485 [오버워치] [OWCS] 미드시즌 챔피언십 1일차 리뷰 [5] Riina2582 25/08/01 2582 0
81484 [LOL] [단독] '페이커 군단' T1 경영권 매각 착수, 美 컴캐스트가 품나 [86] 유머13085 25/07/31 13085 1
81483 [LOL] 레전드와 라이즈 재밌게 즐기고 계신가요? [52] TAEYEON8413 25/07/31 8413 2
81482 [오버워치] [OWCS] EWC 오버워치 프리뷰 [4] Riina7594 25/07/30 7594 2
81481 [기타] [철권8/스파6] EVO 2025 한국어 중계 방송 & 뷰잉파티 (8.1~4) 염력의세계6868 25/07/29 6868 0
81479 [LOL] 럼블 버그 이슈 [40] 햅피14561 25/07/29 14561 0
81478 [LOL] 페이커 재계약 관련 뉴스 및 반응들 [35] TAEYEON14643 25/07/28 14643 13
81477 [LOL] T1 FAKER 이상혁 4년 재계약 [121] 미드나잇블루21083 25/07/27 21083 15
81476 [LOL] 페이커, 4년 재계약. 2029년까지 T1선수로 [81] Leeka14882 25/07/27 14882 10
81475 [랑그릿사 모바일] 본섭 7주년 특별 생방송 내용 간단 요약 !! [7] 통피6930 25/07/27 6930 2
81474 [LOL] 1승이 쉽지않다 DN프릭스vsDRX, 홈그라운드를 축제로 끝낸 T1vs농심. LCK 3라운드 일요일 경기 후기 [16] 하이퍼나이프8718 25/07/27 8718 1
81473 [LOL] 2025 T1 홈그라운드 "원정관람" 후기 [4] Rorschach7023 25/07/27 7023 12
81472 [LOL] 2025 월즈는, 기존 월즈와 다른 일정으로 진행됩니다. [36] Leeka9128 25/07/26 9128 6
81471 [기타] 2025 T1 홈그라운드 2일차 정산: 홈그라운드 이벤트의 명과 암 [4] 노틸러스4967 25/07/26 4967 18
81470 [LOL] 돌아왔구나! LCK 3라운드 DKvsBFX, 한화생명vsKT 후기 [22] 하이퍼나이프7419 25/07/26 7419 7
81468 [랑그릿사 모바일] 필독! 한섭에 날개꺾인새와 렌달, sp티아리스가 옵니다! + 중섭 신규 영웅 소개 [31] 통피8188 25/07/25 8188 4
81467 [LOL] 호랑이를 안방에 불러들여 사냥에 성공한 T1 - LCK 3라운드 T1 vs 젠지 [133] 하이퍼나이프16131 25/07/25 16131 15
목록 이전 다음
댓글

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