|
포토로그
메뉴릿
주저리 주저리
이 블로그는 구글 애드센스를 통해 월 $100 이상의 수익을 창출하고 싶습니다. 방명록 인사말은 이곳에 about madchick 미친병아리 소개 홈페이지 서평모음 미투데이 스프링노트 프로그래밍 이야기 포토로그 포토갤러리 내가 하는 일 다울소프트 네오테스트 티칭메이트 네오웹보드 렉쳐메이커 웹수식편집 요즘 읽는 책 ![]() 닷넷 프로그래밍 정복 ![]() Programming Collective Intelligence ![]() Applied C++ ![]() Art of UNIX Programming 자주 놀러가고 싶은 곳 강남컴퓨터서적 ZDNet Korea Bellona2 OS MSDN 매거진 GotW.ca C/C++ User's Journal Gamasutra O'reilly Open Book RaySoda mydoob Visual C++ News Group wired 올블로그 오픈 블로그 블로그 코리아 블로그 플러스 다음 블로그뉴스 ![]() 라이프로그
|
읽고 있는 Quake Mod 만들기 책의 중간쯤에 가보니 Quake Virtual Machine에 대한 이야기가 나온다.. 책이나 인터넷에서 찾은 내용대로 아무리 따라해봐도 QVM이 빌드가 되지 않아 정말 꽤 많은 시간을 허비했다.. 잊어먹기 전에 삽질한 내용 정리를..
퀘이크 소스는 게임엔진 (서버), 게임엔진 (클라이언트), UI, 그래픽 엔진으로 소스가 나뉘어져 있는데, 그래픽 엔진을 제외한 부분의 소스가 공개되어 있다.. 그래픽 엔진과 나머지 부분의 인터페이스가 VM으로 되어 있다.. 물론, DLL로 빌드하여도 된다.. (그래, 모듈화란 대충해서는 안되고 이렇게 해야한다.. 그래픽엔진, UI, 게임엔진이 정말로 잘 분리되어 있으며, 해킹방지를 위해 - 퀘이크 아레나는 본격적인 네트워크 기반 게임이다.. 싱글모드 조차 로봇과 해야하는.. 혼자 미션을 깨는게 없는 오락인 것이다.. - VM 모듈까지 만들어 넣고.. 시간과 돈이 있어서 이렇게 만들 수 있는게 아니라, 이렇게 만들 수 있기 때문에 시간과 돈을 확보하고 있는 사람들이라는 생각이 든다..) 근데 Quake3를 설치하면 아무리 봐도 그래픽 엔진 (Quake3.exe)만 있고 나머지 파일들은 없다.. 처음엔 신기했었는데, 설마 이 파일들이 없이 실행될리 만무하다.. 찾아보니 baseq3 폴더 하위에 있는 *.pk3 파일 안에 들어있더군.. *.pk3 파일은 *.zip 파일을 확장자만 바꿔둔 것으로 *.zip 파일로 확장자를 바꾸고 압축을 풀어보면 무슨 파일들이 들어있는지 확인해볼 수 있다.. 압축을 풀어보면 *.qvm 이라는 파일들로 들어가 있다.. 존 카멕은 왜 QVM을 만들었을까.. 먼저 해킹에 대한 방어를 위해서다.. 해킹이라기 보다는 결과 조작일 수 있겠다.. 혹은 다른 사람보다 유리할 수 있는 그 어떤 조작들.. 물론, VM을 만든다고 해서 이에 자유로울 수는 없을 것이다.. 하지만, DLL을 후킹할 줄 아는 프로그래머들이 VM을 후킹할 줄 아는 프로그래머들 보다 훨씬 많을테니 이런 선택을 한 것 같다.. (귀찮은 일이지만, API의 스펙이 공개되면 얼마든지 후킹이 가능하다.. 예전에 윈속 DLL을 이런식으로 가로채는 것을 심심해서 만들어본 적이 있는데, 귀찮아서 그렇지 얼마든지 가능하고 아주 쉽다.. 내 DLL을 하나 만들고 이 DLL에서 원본 DLL을 로드해서 API를 원본과 똑같이 만든다.. 그리고 실행파일을 조작해서 원본이 아닌 내 DLL을 로드하도록 만들면 모든 API들이 호출될때 내가 만들 DLL을 통해 원본이 호출되게 된다.. 이 방법은 워낙에 유명한 널리 알려진 방법이기 때문에 많은 사람들이 시도하는 방법일 수 있다.. 이를 통한 조작이 널리 퍼지는 것은 힘들지만, 퀘이크 처럼 나만 이렇게 동작하여 대전에서 유리할 수 있으면 되기 때문에 이런 후킹이 카멕은 아주 싫었던 모양이다.. VM까지 만들걸 보면.. 윈속 DLL 가로채기법은 나중에 시간이 되면 함 정리해보자.. 아마 인터넷에서 찾으면 보다 쉽게 잘 정리된 내용을 찾을 수 있을지 모른다..) 두번째 이유로는 포팅.. 한번 빌드한 QVM은 윈도, 리눅스, 맥.. 어디로든 파일 카피만 해도 돌아간다.. 자바도 같은 특징을 가지고 있다.. 윈도용, 리눅스용, 맥용 등 플랫폼 별로 빌드하는데 지겨웠나보다.. 흐흐흐.. 하긴 VM 한번 만들어두면 그 다음부터는 이런 삽질 안해도 되니 충분한 가치가 있다.. 그래도 행동에 옮기긴 쉽지 않은 결정이기도 하다.. 일단 빌드를 해보기 전에 어케 만들어지는지 관련 *.bat 파일들을 좀 둘러봤다.. 흠, 컴파일러는 lcc를 사용하는 듯 하다.. (책은 예전부터 사놓고 읽지 않고 있는 lcc를 이렇게 다시 만나게 되네..) 이를 바이트코드로 만들어 퀘이크 어셈블리로 만드는 것 같은데, 보아하니 오리지널 lcc를 그대로 쓰는 것이 아니라 소스가 오픈되어 있으니 수정하여 퀘이크용 바이트 코드를 만들어내는 것으로 보인다.. 물론, 그래픽 엔진과 함께 VM 환경을 조성하는 엔진 역시 아직 소스가 오픈되어 있지 않다.. id 소프트도 먹고 살아야 하니.. Quake III의 소스코드 풀 라이센스는 여전히 아주 비싼 가격이다.. (250만불) Quake II 역시 GPL로 오픈되어 있지만, GPL을 따르는 경우 내 소스도 오픈해야 하므로 상용 게임을 만들려면 다른 라이센스를 받아야 한다.. Quake II의 경우는 만불 정도 된다.. Quake 정도의 그래픽 엔진을 가져다 쓰는데 이정도 가격이면, 글쎄 게임에 대해 아는건 별로 없지만 인력투입해 맨땅에 만드는 비용을 생각해보면 라이센스를 받는것도 나쁘지 않은 선택으로 보인다.. 인력투입해서 이정도 나온다는 보장이 없다면.. 물론, 존 카멕은 Quake I, II에 이어 Quake III도 GPL로 소스 오픈을 한다고 이야기 한 바 있다.. 이때가 되면 그래픽 엔진과 VM 엔진을 어케 만들었는지 알아볼 수 있을 것 같다.. QVM을 빌드하는 것은 간단하다.. 같이 제공되는 소스에 필요한 *.bat 파일들이 이미 만들어져 있기 때문이다.. 배치파일 실행시키면 QVM 파일이 만들어진다.. 만들어지면 아래와 같이 실행시키면 된다.. DLL로 실행시킬때와는 옵션이 좀 다르다.. !MadchickMod! 자리에 자신의 VM이 위치하는 경로를 넣으면 된다.. 나는 QVM을 빌드하는데 꽤 시간낭비를 했는데, 알고보니 VS .NET 2003 때문이었다.. 환경변수의 include와 lib 변수에 .NET SDK 1.1의 include와 lib 폴더가 설정되어 있었는데 이것 때문에 lcc가 이상하게 동작을 했다.. 환경변수에서 이 값들을 공백으로 만들어주니 아주 잘 빌드가 되었다.. 으~ 이걸 알아내느라 정말 별별 시도를 다 해봤다.. 공개된 다른 Q3 소스도 찾아서 해봤지만, 결과는 같아서 내 PC에 lcc가 이상하게 동작하는데 같은 파일이 내 PC에서만 그런 것으로 보아 환경세팅 문제다.. 이 개발자들은 없는데, 나는 있는게 뭔가.. 이짓 저짓 해서 알아낸게 바로 VS .NET 2003의 include, lib 경로 설정.. 환경변수에서 이거 없애니 아주 빌드가 잘 되는데.. 좀 허탈하더구만.. lcc가 include와 lib 환경변수를 참조하는 부분이 있는가 보다.. 그리고, DLL 파일로 하던 것과 QVM을 만들어 하는 것의 차이를 발견했는데 DLL로 만든 경우 이상하게 한 게임이 끝나고 다시 게임이 시작되면 내가 변경한 mod가 반영되지 않고, 오리지날 게임이 진행된다.. 하지만, QVM으로 하는 경우는 계속 내가 변경한 것으로 시작되었다.. 이게 게임 실행옵션에서 뭐가 다른 건지 알 수 없지만, 아무튼 현재 알아낸 바로는 그렇다.. DLL로 만든 경우도 mod가 계속 반영될 수 있는 옵션이 있는데 아직 내가 못 찾아냈는지도 모르지.. QVM을 쉽게 빌드할 수 있는 소스코드는 여기서 다운로드 가능하다.. 물론, 예전에 소개했던 소스코드로도 충분히 빌드 가능하지만 이 소스코드가 비교적 QVM을 빌드할 수 있는 배치파일들이 정리가 더 잘되어 있다.. 빌드에 필요한 설명은 소스코드 다운로드후 압축을 풀면 나오는 Readme_eng.html 파일을 읽어보면 알아둬야 하는 모든 내용이 담겨있다..
|
이글루 파인더
카테고리
▣ 알립니다 ▣
▣ 링크보기 ▣ ▣ 삐약삐약 ▣ ▣ 모아두기 ▣ ▣ 책이야기 ▣ ▣ 세상에는 ▣ ▣ 유안일기 ▣ ▣ 심심할때 ▣ ▣ 일이야기 ▣ ▣ 컴터야그 ▣ ▣ 영어공부 ▣ ▣ 퀘크야그 ▣ ▣ 팰콘야그 ▣ ▣ 운영체제 ▣ ▣ 공개자료 ▣ 태그
블로깅안했더니좀허전했어
KSTAR
미국드라마
CSI
촛불시위
네이버
PC방
조선일보
미드
깍뚜기문화
CSINY
빌게이츠
촛불집회
이글루스
이글루스API
자우림
서태지
그레이스아나토미
리더쉽
다음
웨스트윙
마이크로소프트
PDF표준
조중동
컴백홈
금강산관광객피격사건
안철수연구소
아이폰
Lively
노무현
최근 등록된 덧글
^^;; 톰켓, 아파치를 ..
by 지난가는이 at 18:35 한동안 이 앺을 잘 썼는데.. by 수학의정석 at 01/06 gw031511@naver.com .. by gw031511 at 01/05 최고입니다! by 아리스 at 12/28 귀환 축하드립니다~ㅎㅎ by 라디오키즈 at 12/23 ftp이동시 한글/중국어/.. by 흐흠... at 12/17 YOIU MAD CHICK YOU. by my name at 12/17 YOU MAD CHICK YOU. by my name at 12/17 Solution for Error code:.. by C광 at 12/14 저도내복사야하는디.... by 미친감자 at 12/09 하하^^ 저도 요즘 뜸하.. by 김정수 at 11/27 잘 봤습니다. UML에 대.. by ohyecloudy at 11/21 잘 지내시죠? 여전히 일로.. by hehua at 11/20 월동준비없이 간만에 오.. by 쩌비 at 11/20 블로그가 업데이트 되어.. by Funny at 11/19 간만의 포스팅 반갑습니.. by 135th at 11/19 오랜만이세요.. 어케 .. by zoops at 11/19 오래간만 입니다. :) by 마음으로 찍는 사진 at 11/19 오랜만에 돌아오셨네요~.. by jely at 11/19 좋은평가 감사드립니다. .. by ilsooni at 11/16 최근 등록된 트랙백
[펌] UTF-8 인코딩과..
by 돈버는 기계로 살것인가?.. 크리스마스 영어 표현들 by 영어와 가제트 이야기 [.. 데꾸벅의 생각 by techbug's me2DAY UML, 실전에서는 이것.. by Ohyecloudy's Progr.. 데드라인 - 소설로 재미.. by Ohyecloudy's S3 실전적 문장비법 글쓰기.. by 블로거1.0의 WEB2.0 도전기 우분투 리눅스 8.10 하루.. by joogunking 마이클잭슨 사망 소식들.. by Bluesky 후아유(2002) : 2000년대 .. by 생활의 발견 知的人의 생각 by peter_c's me2DAY 톰캣!! by 나두미키님의 이글루 정규 표현식 완전 해부와.. by 김재호의 디지털보단 아.. HTML 소스 제대로 보자,.. by [부동산]개발.정비구역 내 손안의 PC - 자바가 .. by 上善若水 Stringbuilder OutOfMe.. by Pinch of Smack for D.. 웹 오피스 정리 by Web N Bizr 네이버 블로그 검색 - .. by InformationRedesign 에반게리온: 서 - 사운드.. by LG전자 XCANVAS홈.. 블로그에서 수익은 기대.. by IT, 모바일, 엔터테.. "다음으로 지원한 이메일.. by 민노씨.네 이글루링크
EBC (Egloos Broad..
erehwon.LAB About willy Living Loving and L.. 修身齊家萬事成 【 이름쟁이™의 눈으로 】 개 풀 뜯어먹는 소리 觀鷄者의 망상 공간 Oz in Wonderland 김명신의 즐거운 하루 함께.. 늘 그렇게.. 荷花(hehua) 소스코드위를 걷다..... 네러티브 오프로드 zoops 이야기 까모의 룰루랄라~ ▒ 제닉스의 사고뭉치 ▒ 河伊兒의 고물상 가로수들은 여전히 제자.. 餘分D: physics and fun 극한추리 hansang\'s w.. 길고양이 이야기 어쨌건간에 흘러가는 者 선인장 일지 ~★~ 우하하!!~ 프로.. without coffee Lady Nariel's Golde.. 검색엔진 루씬 Lucene.. fire, walk with me 디지털을 말한다 by oojoo ♠후리지아 향기처럼♠ 일상 생활 속의 파편들 뽐뿌 inside 책읽는 엄마의 보석창고 Mono log blogger jely 반복되는 일상속의 비정.. 골룸의 골방 질풍 17주의 머브러브 라.. maniacs AURA's Showcase ozzyz review 허지웅.. 디제의 애니와 영화 이야기 ANTIEGOIST : GyuHo.. 미달이의 육아일기 All about IT Trends Suicide Solution 얼음집 Trouble n Travel 모기불통신 Trip 찬별은 초식동물 숲 속 작은 섬 snowcat blog 전도서에 바치는 장미 한글이 꿈틀 이우진의 UCC 제작실 .. INVENT 위로..위로..위로.. woody's film review Show me the money 전자음악 알아보기 sunny's store 이규영 연예영화 블로그 ◀ M.HOUSE - Masade.. Urban Living 쉽니다. roadster 무디의 무책임한 세상 이제 다시... 바라보다. random life Beyond Web ricordati di me Jania's Blog Gaious 功房 네오베.. 애자일 이야기 - Last Paromix - T9T9 Research Center 양군 블로그 소프트웨어 이야기 식사일보 food daily Software Engineering.. 티오 고재관의 블로그 mocca yundream의 프로그래.. 통TON lalou 생각이 없는 블로그 이전블로그
2009년 11월
2009년 08월 2009년 07월 2009년 01월 2008년 12월 2008년 11월 2008년 10월 2008년 09월 2008년 08월 2008년 07월 2008년 06월 2008년 05월 2008년 04월 2008년 03월 2008년 02월 2008년 01월 2007년 12월 2007년 11월 2007년 10월 2007년 09월 2007년 08월 2007년 07월 2007년 06월 2007년 05월 2007년 04월 2007년 03월 2007년 02월 2007년 01월 2006년 12월 2006년 11월 2006년 10월 2006년 09월 2006년 08월 2006년 07월 2006년 06월 2006년 05월 2006년 04월 2006년 03월 2006년 02월 2006년 01월 2005년 12월 2005년 11월 2005년 10월 2005년 09월 2005년 08월 2005년 07월 2005년 06월 2005년 05월 2005년 04월 2005년 03월 2005년 02월 2005년 01월 2004년 12월 2004년 11월 2004년 10월 2004년 09월 2004년 08월 2004년 07월 2004년 06월 2004년 05월 2004년 04월 2004년 03월 2004년 02월 2004년 01월 2003년 12월 2003년 11월 2003년 10월 2003년 09월 2003년 08월 |