나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-10-04 15:41:26

파일런의 건물 소환 가능 범위는 대칭이 아니야

파일:디시인사이드 심볼.svg
파일:디시인사이드 로고 닷컴포함 흰색.svg
문화 및 유행어
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px); word-break:keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
밈 모음 (롤갤 · 야갤 · 여연갤 · 연뮤갤 · 원버갤 · 해야갤) · 디시콘 모음 (디얍콘 · 만두콘 · 둘리콘 · 좋은말콘 · 쭐어콘 · 판토콘 · 케장콘 · 코코넛콘(기적의 블루아카콘)) · 꾸준글
<colbgcolor=#4a56a8><colcolor=#fff>
기타1557 · 888484 · 2번남 · JPG · MC무현 · MH세대 · ON 드립 · WWE · You Just Activated My Trap Card
가놈 · 가성비 댓글 · 가즈아 · 가 하다 · 갈드컵 · · · 갓플란트 · 개같이 · 개고기 탕후루 · 개꿀잼 몰카 · 개새끼 해봐 · 개추 · 갤러리 순회열차 · 갤주 · 거기 내 자리 · 거북유방단 · 게이 · 결혼하지마 · 고로시 · 고트 드립 · 공중제비 · 광녀 · 광인의 천옷 · 굉장히 귀엽지 나도 좋아해 · 국뽕 · 군지 · 그건 니가 · 그게 무슨 소리니 · 그 긴거 · 그런건 없다 게이야 · 그뭔씹 · 그렇습니다 우리는 망했습니다 · 근본론 · 근데 어쩔건데 · 근데 이제 뭐함 · 근첩 · 금사빠 · 김헌곤 유니버스 · 까흥 빨망 · 꺼어억 · 꼭 해라 두 번 해라
나 인데 개추 눌렀다 · 나거한 · 난 경기도 안양의 이준영이다 · 내가 고자라니 · 너 고소 · 너굴맨 · 네덕 · 노괴 · 노잼 (꿀잼) · · 뇌절 · · 누칼협 · 뉴진스럽다 · 는 신이야 는 무적이고
다들 좋아하면 개추좀 눌러볼까 · 닥눈삼 · 닦이 · 단또단또 · 담당일진 · 담요단 · 대륙의 기상 · 도르 · 돈이 복사가 된다고 · 동탄 · 되는 상상함 · 두창 · 드립 (고인드립 · 개드립 · 패드립) · 따갚되 · 딸녀 · 또 이러신다 밥이나 드세요 · 똥송합니다
라고 할 뻔 · 라는 내용의 애니 없냐 · 람쥐썬더 · 럼자오자레 · 레알 · 롤랑송 · 를 들어올린다 · 리즈 시절
마 갱기에 집중 안하나 · 마따끄 · 마렵다 · 만두조공 · 멘탈붕괴 · 모든 스타팬들의 꿈과 염원 · 몰루 · 못난 아버지를 둔 딸에게 정말 미안하다 · 문어가 죽었슴다 · 물로켓 · 물리치료사 드립 · 미안하다 이거 보여주려고 어그로끌었다 · 민주평통 연설 (부끄러운 줄 알아야지 · 이기야 · 응딩이) · 민지 뿌우
박보검 나 웃겨 · 반갈죽 · 반중롤깨 · 방구석 여포 · 베트남론 · 병림픽 · 병맛 · 병신력 · 보내드렸습니다 · 부들부들 · 부적 · 붕이 · 뷰지 · 비둘기야 먹자 · 비추실명제 · 비틱질 · 빅데이터 드립 · 빵셔틀
사실이 아닙니다 · 사이버 유격 · 사탄드립 · 새삼 가 대단하다고 느껴지네 (기습숭배 드립) · 설거지론 · 설명충 · 세계 최악의 게임회사 · 세 줄 요약 · 센송 · 속보 · 솔직히 야겜 안하는 애들이 사랑이 뭔지나 알겠냐 · 수갤 전사 · 스타벅스 입장권 · 슨상님 · 식객민우 · 신박하다 · 실시간 붕이 좆됐다 · 싱글벙글 · 싱하형 · 쌀국수 뚝배기 · 씨발련아 · 씹선비
아시발꿈 · 아오 페리시치 · 아햏햏 · 안아줘요 · 알바 · 알빠노 · 앙망 · · 야 기분 좋다 · 야민정음 · 야스 · 야카오톡 · 야코드립 · 야 형이야 · 어둠에다크에서 죽음의데스를 느끼며 · 어 맞아맞아 놀랍지만 그건 사실이야 · 엄근진 · 에미야 물좀다오 · 여자가 말대꾸 · 역사상 최고 고트 · 예토전생 · 온 세상이 XXX다 · 와바박 · 와 젖탱이보소 · 와캬퍄헉농 · 왤케 왤케임 · 우리 · 우왕ㅋ굳ㅋ · 우하하하 팡파레 (하하하) · 우효 · 우흥 · 운지 · 응 더 해 봐 · 응 아니야 · 응애 나 아기 · 응우옌 · 의문의 1승 · 의문의 1패 · 의주빈 · 이거 보고 이재명 뽑기로 했다이분 배우신 분 · 이야 흰색 더블넥서스 가네(쓰리넥 좋지도 않네) · 이왜진 · 인생 하드모드 · 인증 없으면 뭐다 · 입갤
자강두천 · 자 드가자 · 자짤 · 자택에서 검거 · 작명 및 국적변경 드립 · 정말 고민이 있습니다 · 정벅 · 정신나갈것같애 · 제기랄 또 야 · 제너럴 조 · 좋아 빠르게 가 주먹왕 윤프 · 주모드립 · 죽창드립 · 중계 · 쥬지 · 지구 온라인 · 지금부터 여기는 맨체스터 유나이티드 갤러리다 · 지듣노 · 지역드립 (경상도 · 전라도) · 진보의 거인 (문크 예거) · 질럿은 야마토 한방에 안죽어 · 짤방 · 짱구야 아빠를 속인거니
참피 (실장석) · 창렬 · 축대남 · 치킨을 시켰는데 여고생이 배달
케이크처럼 쉽게 먹는 법 · 큰거온다 · 크아아악 아 · 키보드 워리어
토끼공듀 · 퇴갤
파일런의 건물 소환 가능 범위는 대칭이 아니야 · 판드랄추 · 판사드립 · 팩폭 · · 페미니즘을 알기 전까지는 에브리데이가 드림이었다 이기야 · · 폐인의 세계 · 폰은정 · 퐁퐁단 · 퐁퐁시티 · 필수요소 (고갤)
하루만 기다리면 가 나와요 · 한잔해 · 할카스 · 합필리 시리즈 · 해병문학 (황근출) · 해줘 · 햇살무늬 발작증 · 헬조선 · 헬창 · 혜지 · 호감 고닉 · 호성 드립 · 화살표글 · 확실히 아이폰을 사고 나서 내 인생이 달라졌다 · 흠좀무 · 히트다 히트}}}}}}}}}


1. 개요2. 원인3. 진짜 좌빨인가?4. 여담5. 관련 문서

1. 개요

파일:attachment/파일런의 건물 소환 가능 범위는 대칭이 아니야/pylon_left_1.jpg
파일:attachment/파일런의 건물 소환 가능 범위는 대칭이 아니야/pylon_left_2.jpg
해당 게시물의 사용되는 사진
잘봐
첫번째 사진에서는 파일런의 좌측 상단에 게이트웨이를 지을수있지만
대칭의 같은부분에는 게이트웨이가 지어지지 않아
여기서 우리는 파일런 건물 소환 가능 범위의 좌편향을 통해 프로토스좌빨이란걸알수있어

디시인사이드 스타크래프트 갤러리에서 새로운 태양으로 떠올랐던 꾸준글. yeoni라는 유저가 올렸던 꾸준글로 게이트웨이파일런의 건설범위로 소환하려 할 때 왼편이 같은 범위 안에 지을 수 있는 건물 수가 더 많다고 설명한 글이다. 위 그림처럼 파일런 서쪽의 동력망 가장자리에 걸치는 위치에는 건물을 소환할 수 있지만 동쪽의 대칭되는 위치에는 소환할 수 없는 것을 볼 수 있다.

사실 이대로 끝나면 평범한 꾸준글로 잊혔겠지만 "프로토스는 좌빨"이라는 기적의 논리 때문에 스갤 밖에서도 이 꾸준글은 유명했다. 온게임넷의 방송 '용선생의 매너파일런'에서도 이 건설 범위 비대칭을 말한 바 있을 정도. 다만 좌익 빨갱이라는 문제시 되는 단어 때문에 인지도와 별개로 원문 전체가 인용되는 일은 별로 없다.

2. 원인

[ 실제 동력원 범위를 정리한 표. 펼치기 · 접기 ]
||<height=20px><tablebgcolor=blue><rowbgcolor=#000><width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||<width=20px> ||
원래 기능했어야 할 수정탑 동력망 범위
실제로 동작하는 수정탑 동력망 범위
비교: 청록색은 의도를 벗어난 범위
해당 짤방의 게이트웨이 위치를 붉은색으로 표현한 표.
좌측은 중심이 동력망에 걸쳐있지만 우측은 그렇지 않다.

논지만 간단히 요약하자면, 실제로 수정탑의 범위는 좌상단으로 편향되어 있으며, 원인은 스타크래프트의 최소 단위 체계를 정수로 사용하기 때문에 생긴 오류이다.

스타크래프트의 그래픽 단위는 그래픽 최소 단위이자 동시에 코드를 처리하는 좌표 단위로 '픽셀'을 사용하지만, 실제로 건물 및 오브젝트의 크기, 로케이션 범위 등을 32 x 32 픽셀로 이루어진 '칸'을 기본 단위로 사용한다. 그리고 픽셀을 칸으로 바꾸는 함수는 Unsigned Int로 처리하기 때문에 소숫점 이하(31칸 이하)는 내림된다. 이런 이유로 인해 우측 하단은 본래 의도한 대로 동력망이 동작하지만, 우측 상단과 좌측 하단은 의도보다 1칸 더 넓게 동작하며, 좌측 상단은 3칸이나 더 넓게 동작한다. 건물을 동력망의 좌측 상단에 아슬아슬하게 걸쳐 지을 수 있지만 대칭의 같은 위치에는 지을 수 없는 현상은 좌측 상단의 더 넓게 동작하는 범위에 절묘하게 걸치기 때문에 발생하는 현상이다.

이 내림 처리 때문에 스타크래프트에는 파일런 좌우대칭 뿐 아니라 여러가지 오류가 발생한다. 예를 들어서 사거리가 6칸인 드라군이 똑같은 6칸 거리의 적을 공격하는데도 오른쪽에 붙어서 공격하면 사거리가 안 되는데 왼쪽에 붙어서 공격하면 사거리가 돼서 공격이 된다든지. 현실의 래더에서는 보기 힘들지만 정말 드라군 - 대상 간의 거리를 픽셀 단위로 촘촘하게 계산해서 타일을 배치하면 이런 상황을 발생시킬 수 있다.

즉 파일런 좌우비대칭도 픽셀 내림 문제로 생기는 현상이며 희귀한 현상은 아니다. 단지 픽셀 단위로 계산해줘야 의도적으로 발생하는 타 현상과 달리 실전에서 매우 쉽게 찾아볼 수 있는 문제라는 것, 그리고 스타크래프트가 나온지 30년이 되어가는 고전 게임이라 뜯길 대로 뜯기고 개발자 단위에서나 얻을 수 있는 정보가 범용화된 2020년대와 달리, 아직 2000년대 중반이라 게임의 세부적인 부분이 잘 알려지지 않았기에 생긴 혼선이 원인이다.

에디터를 통해 칸이 아닌 픽셀 단위로 파일런을 아주 살짝 오른쪽 아래로 당겨주면 좌우대칭 파일런을 만들 수 있다. 또한 스타크래프트 2에서는 대다수 건물의 크기가 3×3이며 동력망 판정 거리값을 정수 단위가 아닌 실수 단위로 사용하므로 이런 문제가 발생하지 않는다.

이하의 내용은 OpenBW라는 브루드 워 역설계 프로젝트에 기반한 설명이며, 공식 자료는 아니다. 다만 역설계 과정을 보면 이런 오류가 왜 발생했구나 하고 추측되는 정도.

[ OpenBW 기반 서술 펼치기 / 접기 ]
어떤 건물 오브젝트의 '중심점 = 오브젝트의 위치 좌표'는 실제 중심점으로부터 우측 하단에 위치한다. 그런데 코딩 상 중심점이 실제 중심점으로 벗어났기 때문에 생기는 오류를 방지하기 위해서 바운더리를 체크할 때는 의도적으로 우측과 하단으로는 1픽셀 덜 체크한다. 예를 들어서 기준점 주위 256 x 256 픽셀을 체크하는 알고리즘의 경우 좌측 상단으로는 128픽셀씩 체크하는데, 우측 하단으로는 127픽셀만 체크한다. 이게 문제의 핵심이다.
bool is_in_psionic_matrix_range(xy rel) const {
	unsigned x = std::abs(rel.x);
	unsigned y = std::abs(rel.y);
	if (x >= 256) return false;
	if (y >= 160) return false;
	if (rel.x < 0) --x;
	if (rel.y < 0) --y;
	return psi_field_mask[y / 32u][x / 32u];
} 

그 다음 문제는 코드 내부에서 픽셀 단위를 칸 단위로 바꿀 때 생기는 문제인데, 픽셀 값을 Unsigned Int 32로 나누면 칸수로 변환된다. 문제는 uint로 나누는 과정은 반올림이 아니라 버림이기 때문에 나머지가 0이든 1이든 31이든 모조리 버린다. 다시 말해 픽셀이 32의 배수일 때는 문제가 없으나, 32의 배수 픽셀에서 1픽셀만 빼도 1칸이 줄어든 것으로 취급한다. 이것이 두 번째 문제다.
bool is_in_psionic_matrix(int owner, xy pos) const {
	for (const unit_t* u : ptr(st.psionic_matrix_units)) {
		if (u->owner != owner) continue;
		if (is_in_psionic_matrix_range(pos - u->sprite->position)) return true;
	}
	return false;
} 
마지막은 파일런이 건물이 동력장 내부에 있는지를 판단하는 소스 코드의 구성이다. 동력원을 측정하는 함수는 프로토스 건물을 기준으로 한 파일런 간의 상대 좌표를 측정한 다음 그 [세로 차이][가로 차이]값을 다음과 같은 boolean 표에다가 집어넣어서 1일 경우 동력이 활성화된 것으로 친다.
{{{#!wiki style="margin:-5px -10px; vertical-align:middle"
static const bool psi_field_mask[5][8] = {
    { 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 0 },
    { 1, 1, 1, 1, 1, 1, 0, 0 },
    { 1, 1, 1, 0, 0, 0, 0, 0 }
};
→ {{{#!wiki style="display:inline-flex; font-size:0.3em; vertical-align:middle"
}}}}}}||

그런데 앞서 이야기했듯 스타크래프트는 엔진의 한계로 인해 우측과 하단으로는 1픽셀 더 가까운 것으로 판정한다. 일너 상태에서 동력장 유무 판별을 건물"을" 중심으로 파일런"의" 위치를 파악하는 함수다. 그 때문에 건물이 파일런보다 좌측이거나 상단에 위치할 경우, 그 건물 입장에서는 파일런은 우측이거나 하단에 위치한 셈이다. 그리고 앞서 말했듯 우측하단은 1픽셀 덜 판정하는 시스템 특성 상, 건물이 파일런의 좌측이나 상단에 있을 경우 파일런에 1픽셀 더 가깝다고 판정하게 된다.

그리고 앞서 말했듯 어떤 값을 unsinged int 32로 나눌 경우, 그 값이 32의 배수에서 1이라도 적으면 소숫점은 모조리 제거된다. 즉 8칸 = 256이 오른쪽 거리일 경우 32u로 나누면 8칸이 되지만, 왼쪽 거리 8칸은 -255로 입력되고, 절댓값 255를 32u로 나누면 7.96875 = 7칸으로 판정하는 것이다. 따라서 건물이 왼쪽이나 위에 있을 경우에는 파일런에 1칸 더 가까운 것으로 취급하게 된다.

3. 진짜 좌빨인가?

농담으로 나온 비약적인 결론이지만, 설정상 프로토스는 좌익이라기보다 오히려 매우 보수적으로 우익에 더 가깝다. 프로토스는 기본적으로 이미 발전할 대로 발전해서 더 이상의 진보란 없고 옛것을 따라야 한다는 입장이 강하다.[1] 차별은 두드러지지 않는다 해도[2] 확고하게 나뉜 계급 역시 평등을 중시하는 좌익과는 잘 맞지 않는다.

사실 프로토스 사회는 현대 좌우 대립이 나타나기 이전 시대의 봉건제신정정치의 색이 강하게 나타내기 때문에 애당초 좌익인지 우익인지를 따지기 어렵다. 또한 스타크래프트 시리즈에서는 좌우를 나누는 중요한 기준 중 한 가지인 경제관 묘사가 부족하기 때문에 프로토스의 정치관을 확신할 순 없다. 애당초 화폐로 거래하는 시장이라는 개념이 있는지조차도 묘사된 적이 없다. 만약 프로토스에게 물질재조합장치 같은 게 있어서 물질적 가치가 전혀 중요하지 않다고 한다면 현 지구에서 나타나는 자본에 대한 관점에 따라 나타나는 사회 이념은 프로토스에게 아무 의미가 없을 것이다. 다만 설정상으론 사업가와 노동자 둘 다 존재한다고 한다.

4. 여담

질럿은 야마토 한방에 안죽어처럼 속편인 스타크래프트 2에서도 수정탑의 건물 소환 가능 범위는 대칭인데 이제는 좌우만 말고 위아래도 대칭인 발전된 모습을 보여준다. 카메라 각도가 스1에서는 프론트 뷰인 35도 기울어진 환경에서 완전 3D인 스2로 넘어가면서 생긴 변화.

스타크래프트: 리마스터가 발매되면서 이 꾸준글도 리마스터됐다. 그 와중에 미니맵까지 재현한 게 소름 끼친다. 6, 9, 12시 저그에 오버로드 위치까지 그대로다.
파일:ㄷㅊ1.jpg파일:Screenshot_20210504-101527_Chrome.jpg
스타크래프트 관련 에피소드에서도 나온다.

5. 관련 문서



[1] 기술적인 측면에서는 확실히 그러하다. 가령 스타크래프트 2에서 등장한 신무기인 거신이나 아둔의 창은 이제 와서 새로 개발한 무기가 아니라 예전 전성기 때 만든 것을 다시 꺼내온 것들이다. 프로토스 사회를 크게 규정짓는 칼라 역시 등장 시점을 따지기 어려울 정도로 매우 예전에 나타난 것이다.[2] 다만 심판관, 기사단 계급이 기술자 계급보다 다소 우위에 있다는 묘사는 종종 나타난다. 카락스가 전사로서 인정을 받는 부분은 흡사 '그 전까지와는 달리 이젠 더 이상 무시할 수 없다'처럼도 보인다. 또한 기사단 역시 심판관의 명령에 기본적으로 복종하게 되어있다.