QuakeC

QuakeC
QuakeC
패러다임필수적(구조적), 구조화된
설계자존 카맥
개발자id 소프트웨어
처음 등장한1996
타이핑 분야정적, 강력
주요 구현
Quake C 컴파일러, FastQCC, FTEQCC, QCCx, GMQCC
영향을 받다
C

QuakeC는 1996년 id Software의 John Carmack이 비디오 게임 Quake의 일부를 프로그래밍하기 위해 개발한 컴파일 언어입니다.프로그래머는 QuakeC를 사용하여 무기를 추가하고 게임 로직과 물리학을 변경하며 복잡한 시나리오를 프로그래밍함으로써 Quake를 큰 범위로 커스터마이즈할 수 있습니다.AI의 일부, 트리거, 레벨의 변화 등 게임 자체의 많은 측면을 제어하는 데 사용할 수 있습니다.Quake 엔진은 QuakeC를 사용한 유일한 게임 엔진이었다.다음 엔진은 C로 작성된 커스터마이즈에 DLL 게임 모듈을 사용했으며, ID Tech 4부터 C++로 작성된 게임 모듈을 사용했습니다.

개요

오리지널 아이디 SoftwareQuake 게임 로직의 QuakeC 소스는 1996년에 공개되었으며 플래그 캡처 [1]수정 기준으로 사용되었습니다.QuakeC 소스 코드는 qcc라는 도구를 사용하여 컴파일되어 파일 내에 저장되어 있는 바이트코드로 변환됩니다.progs.dat.그러면 Quake 수정 프로그래머는 소스 코드를 공개하지 않고 progs.dat 바이트 코드를 공개할 수 있습니다.대부분의 Quake 모드는 이렇게 게시되었습니다.

QuakeC는 Quake 엔진1인칭 슈팅 [citation needed]장르의 방향을 지배할 수 있도록 했다.무한 확장성을 추가하여 비디오 게임 수명을 연장하려는 Carmack의 아이디어 덕분에(확장은 이미 Doom에서 역할을 했다) 게이머와 프로그래머의 거대한 인터넷 커뮤니티가 생겨났고 많은 현대 멀티플레이어 게임들이 어떤 [citation needed]형태로든 확장 가능하다.

QuakeC는 Quake 실행 progs.dat [2]파일을 계속 해석하기 때문에 해석된 것으로 알려져 있습니다.

제한 사항 및 후속 솔루션

QuakeC의 구문은 C 프로그래밍 언어의 구문에 기반하여 이름을 설명하지만 새로운 유형, 구조체, 배열 또는 "엔티티" 유형(항상 참조) 이외의 모든 종류의 참조 구현을 지원하지 않습니다.또한 QuakeC는 많은 임베디드 함수(QuakeC 코드로 프로토타입이지만 실제로 게임엔진 내에서 정의되어 C로 기술된 함수)가 임시 문자열 버퍼로 문자열을 반환하며, 이 버퍼는 항상 하나의 문자열만 저장할 수 있습니다.즉, 다음과 같은 구조입니다.

SomeFunction (ftos (num1), ftos (num2));

에의 두 번째 콜이 실패하기 때문에ftos(부동소수점 값을 문자열로 변환합니다).SomeFunction이 첫 번째 콜에서 반환된 문자열을 덮어씁니다.QuakeC에는 오리지널 게임에서는 필요 없었던 문자열 처리 기능이나 파일 처리 기능이 포함되어 있지 않습니다.

당시 대부분의 비디오 게임들은 게임 로직이 플레인 C/C++로 작성되어 실행 파일로 컴파일 되어 있어 속도가 더 빨랐다.그러나 이는 커뮤니티에서 mod를 만드는 것을 어렵게 하고 게임을 다른 플랫폼(Linux )으로 이식하는 과정을 더 비싸게 만든다.

그 장점에도 불구하고 커스텀 스크립트 언어인터프리터를 사용한 게임 로직 구현의 선택은 차세대 Quake II 엔진에서 제외되어 컴파일된 C 코드를 선호하게 되었습니다.이는 게임 로직이 네이티브 다이내믹에 패키징됨으로써 얻을 수 있는 성능, 점점 복잡해지는 QuakeC의 전체적인 유연성이 떨어졌기 때문입니다.잉크 라이브러리 및 이미 확립된 프로그래밍 언어의 커뮤니티, 도구, 교육 자료 및 [3]문서를 활용하는 이점.

네이티브 코드를 배포함에 따라 보안 및 휴대성에 대한 새로운 우려가 제기되었습니다.네이티브 코드는 머신 전체에 액세스 할 수 있는 반면, QuakeC 바이트 코드는 장난칠 가능성이 거의 없었습니다.QuakeC 바이트 코드는 Quake를 실행할 수 있는 모든 기계에서도 작동합니다.네이티브 코드로 컴파일은 초보 모드 개발자들에게 더 복잡한 프로그래밍 환경을 설정하도록 요구되었기 때문에 진입 장벽을 추가했습니다.Quake III 엔진에 의해 구현된 최종 솔루션은 원래 QuakeC의 장점과 C를 네이티브 코드로 컴파일하는 장점을 결합하는 것이었습니다.LCC C 컴파일러는 표준 C를 바이트 코드로 컴파일하도록 확장되었으며, 이는 QuakeC와 유사한 방식으로 가상 머신에 의해 해석될 수 있습니다.이로 인해 보안, 휴대성 및 툴 체인 문제가 해결되었지만 네이티브 코드의 성능 이점을 상실했습니다.이는 지원되는 머신에서 [4]런타임에 바이트 코드를 네이티브 코드로 추가로 컴파일함으로써 해결되었습니다.

수정된 컴파일러 및 언어 확장자

디컴파일러와 리컴파일러는 Armin Rigo에 의해 출시되었습니다.DEACC그리고.REACC를 참조해 주세요).이 프로그램들은 리버스 엔지니어링 과정을 통해 만들어졌으며, 대부분의 경우 릴리즈 전에 공개되었습니다.qcc를 클릭합니다.[5]

id Software가 소스를 공개했습니다.qccQuakeC 컴파일러와 1996년 오리지널 QuakeC 코드.Jonathan Roy's를 포함한 수정된 버전이 곧 출시되었습니다.fastqcc라이언 "FrikaC" 스미스의 FrikQCC입니다.이것에 의해, 기능, 최적화, 및 컴파일 속도가 향상되었습니다.

1999년 id Software가 GNU General Public License(GPL)에 따라 Quake의 엔진에서 코드를 출시했을 때 바이트 코드 인터프리터의 동작이 검사되고 J.P. Grossman의 컴파일러와 같은 새로운 QuakeC 컴파일러가 출시되었습니다.qccx새로운 버전의 FrikQCC를 준비했습니다.이들 컴파일러는 새로 발견된 기능을 역호환 방식으로 이용했기 때문에 바이트 코드를 수정되지 않은 Quake 엔진에서도 올바르게 해석할 수 있었습니다.루프 및 문자열 조작을 위한 새로운 기능에는 배열, 포인터, 정수 등이 있습니다.

이제 Quake 엔진 소스 코드를 변경할 수 있게 됨에 따라 QuakeC에 새로운 내장 기능의 형태로 추가 기능이 추가되었습니다.QuakeC는 파일 및 문자열 처리 기능, 확장된 문자열 버퍼, 더 많은 연산 기능 등을 갖추고 있어 QuakeC 코더가 오랫동안 갈망해 온 기능을 마침내 실현했습니다.그러나 이러한 변경의 이점을 활용하는 프로그래머들은 수정되지 않은 Quake 엔진과의 하위 호환성을 상실했습니다.

버전 0.7 이후 Xonotic은 gmqcc [6]컴파일러를 사용합니다.

클라이언트 측 QuakeC

일부 확장 Quake 엔진(Darkplaces 및 FTEQW)[clarification needed]클라이언트 측에서만 Quake 엔진을 스크립팅할 수 있는 일반 QuakeC(현재는 일반적으로 서버 측 QuakeC) 확장을 지원합니다.이것은, 서버상에서 시뮬레이트[clarification needed] 해 네트워크를 개입시켜 [7]전송할 필요가 없는, GUI, HUD, 및 시각적으로 큰 영향을 주는 경우에 특히 도움이 됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Lasse Lehtinen (1996-07-25). "QuakeC released". Quake and QuakeWorld history. Retrieved 2011-01-14.
  2. ^ Andrew Wu. "Quake C Basics". Retrieved 2013-04-06.
  3. ^ Carmack, John (13 March 1997). "Here is a technical issue to be discussed, Pg.18" (PDF). .plan. id Software. Retrieved 5 November 2018.
  4. ^ Carmack, John (24 July 1999). "Jul 24, 1999, Pg.54" (PDF). .plan. id Software. Retrieved 5 November 2018.
  5. ^ "Interview with Armin Rigo - Feb. 12th 1997". April 30, 1997. Archived from the original on 1997-04-30.
  6. ^ "Xonotic 0.7 Release".
  7. ^ "Client-Side QuakeC". QuakeWiki. Retrieved 2016-11-16.

외부 링크