코드로 나서는 포보스 기지: 동현둠TM
스테이지·난이도·체력·방어구와 치트 IDDQD·IDKFA는 동현랭으로 정하고, 싸움은 키보드로 한다.
처음이라면? 예제를 고르고 출전을 눌러 보자. 게임 화면을 누르면 키보드가 게임으로 가고, 코드 칸을 누르면 다시 코드로 온다.
동현랭 배우기 · 실행기 ↗키보드 필수 동현둠은 실제 키보드로만 움직인다. 화면 단추나 터치 조작은 없다. 휴대폰·태블릿은 블루투스 키보드를 연결하면 출전할 수 있다. 데스크톱 화면에서의 이용을 권장한다.
A 전장
출전을 기다린다원래 화면으로 돌아오려면 오른쪽 위 ✕ 전체 화면 닫기를 누른다. Esc는 게임 메뉴를 연다.
오른쪽 코드에서 출전을 누르면 엔진과 Shareware 자료(약 6MB)를 불러와 이 자리에서 시작한다.
- WS 앞·뒤
- ←→ 돌기
- AD 옆걸음
- Space 쏘기
- E 문·스위치
- Shift 달리기
- 1–5 무기
- Tab 지도
- Esc 메뉴
- F2F3 저장·불러오기
- 효과음은 게임 화면을 마우스로 한 번 클릭(휴대폰·태블릿은 손가락으로 한 번 누르기)하거나 게임 안에서 아무 키나 누르면 나기 시작한다.
B 동현랭 출전 코드
doom.dh예제를 고른 뒤 출전을 눌러 보자. 여섯 값은 코드로만 정한다.
동현둠 규약
정하는 것은 여섯 숫자다
동현랭 코드가 출력한 정수 여섯 개를 차례로 읽는다.
| 순서 | 값 | 범위 | 기본 |
|---|---|---|---|
| 1 | 스테이지 E1Mn | 1–9 | 1 |
| 2 | 난이도 | 1–5 | 3 |
| 3 | 체력 | 1–200 | 100 |
| 4 | 방어구 | 0–200 | 0 |
| 5 | IDDQD 무적 | 0 끔 · 1 켬 | 0 |
| 6 | IDKFA 무기·열쇠 | 0 끔 · 1 켬 | 0 |
- 아무것도 출력하지 않으면 기본값
1 3 100 0 0 0으로 나선다. - 정수가 여섯 개가 아니거나 범위를 벗어나면 출전하지 않고 오류를 알려 준다.
- 난이도 1–5는 원작의 I'm too young to die · Hey, not too rough · Hurt me plenty · Ultra-Violence · Nightmare!이다.
예제
01 · 기본은 1 3 100 0 0 0을 출력한다. 0은 도옹ㅠ, 100은 도오오오오오오오오옹 도오오오오오오오오옹(10×10)으로 쓴다. 06 · 계산해서 정하기는 체력을 스테이지 × 25로 계산한다.
값이 듣는 때
- 체력·방어구는 처음 나설 때와 쓰러져 다시 시작할 때 코드 값으로 정해진다. 다음 맵으로 넘어가면 원작처럼 이어진다.
- 방어구가 100 이하이면 초록 방어구(피해의 1/3을 막음), 100을 넘으면 파란 방어구(1/2을 막음)로 친다.
- 무기 6종(주먹·전기톱·권총·산탄총·기관총·로켓 발사기)은 맵이 시작될 때마다 늘 쥐어 준다. 탄약이 모자라면 총알 100 · 산탄 20 · 로켓 10까지 채운다.
- IDDQD를 켜면 맵마다 무적이 켜진다. 체력은 코드 값 그대로다.
- IDKFA를 켜면 맵마다 열쇠 셋, 탄약 가득, 파란 방어구 200을 받는다. 방어구 값보다 IDKFA가 앞선다.
게임 중 치트 입력은 없다
원작처럼 게임 중에 IDDQD·IDKFA·IDCLEV 같은 글자를 쳐도 듣지 않는다. 치트는 동현랭 코드로만 켠다. 원작은 Nightmare!에서 치트를 막지만, 코드로 켜는 치트는 이 난이도에서도 듣는다.
Shareware에는 플라스마 라이플과 BFG9000이 없다. 그래서 IDKFA를 켜도 쓸 수 있는 무기는 6종이다.
조작과 맵
키보드
| W S | 앞으로 · 뒤로 |
| ← → | 왼쪽 · 오른쪽으로 돌기 |
| A D | 왼쪽 · 오른쪽 옆걸음 |
| Space | 쏘기 |
| E | 문 열기 · 스위치 누르기 |
| Shift 누른 채 | 달리기 |
| 1 | 주먹 · 전기톱(누를 때마다 바뀜) |
| 2 3 4 5 | 권총 · 산탄총 · 기관총 · 로켓 발사기 |
| Tab | 자동 지도 |
| Esc | 메뉴(새 게임·설정·불러오기·저장·끝내기) |
| F2 F3 | 저장 · 불러오기(슬롯 여섯) |
| F6 F9 | 빠른 저장 · 빠른 불러오기 |
반드시 실제 키보드가 있어야 한다. 화면 단추나 터치 조작은 없다. 휴대폰·태블릿은 블루투스 키보드를 연결하면 컴퓨터와 같이 싸울 수 있다. 데스크톱 화면에서의 이용을 권장한다. 마우스는 쓰지 않는다. 게임 화면을 한 번 누르면 키보드가 게임으로 가고, 아래 띠의 표시가 「키보드: 게임」으로 바뀐다. 코드 칸을 누르면 다시 코드로 돌아온다.
전체 화면에서는 Esc가 게임 메뉴를 연다. 원래 화면으로 돌아오려면 오른쪽 위 ✕ 전체 화면 닫기를 누른다.
저장은 Esc 메뉴의 Save Game이나 F2로 한다. 슬롯을 고르고 Enter, 이름을 쓰고 다시 Enter를 누르면 「GAME SAVED.」가 뜬다. 저장은 이 브라우저 안에만 남아 새로고침하거나 다음에 와도 Load Game(F3)으로 이어 할 수 있다. 다른 브라우저·기기로는 옮겨지지 않고, 브라우저의 사이트 데이터를 지우면 함께 지워진다. 불러오면 저장할 때의 맵·체력·무기로 돌아가며, 코드로 정한 체력·방어구는 출전할 때만 들어간다.
소리는 효과음만 난다. 브라우저에서 음악 장치(OPL) 초기화가 멈추는 문제가 있어 음악은 껐다.
에피소드 1의 아홉 맵
| E1M1 | Hangar · 격납고 |
| E1M2 | Nuclear Plant · 원자력 발전소 |
| E1M3 | Toxin Refinery · 독극물 정제소 |
| E1M4 | Command Control · 사령 통제실 |
| E1M5 | Phobos Lab · 포보스 연구소 |
| E1M6 | Central Processing · 중앙 처리 시설 |
| E1M7 | Computer Station · 컴퓨터 기지 |
| E1M8 | Phobos Anomaly · 포보스 이상 지대 |
| E1M9 | Military Base · 군사 기지(비밀 맵) |
맵 이름은 원작의 이름이다(Doom Wiki). 원작에서 E1M9는 E1M3의 비밀 출구로만 간다. 동현둠에서는 스테이지 9로 바로 나설 수 있다. E1M8의 끝에서 에피소드가 끝난다.
엔진과 출처
엔진: Chocolate Doom · doom-wasm
게임 엔진은 Cloudflare의 doom-wasm이다. 원작 둠 1.9의 동작을 충실히 따르는 Chocolate Doom을 브라우저(WebAssembly)로 옮긴 것이고, 바탕은 id Software가 공개한 둠 소스 코드다. 모두 GNU GPL 2.0 또는 그 이후 판이다.
동현둠은 엔진을 네 곳 고쳤다. 동현랭 값을 받는 명령줄 인자(-dhhealth -dharmor -dhgod -dhkfa), 맵마다 무기 6종 주기, 게임 중 치트 입력 끄기(자동 지도 IDDT 포함), 빌드 설정이다. 고친 소스 전체와 고친 부분(engine/donghyun-doom.patch), 빌드 방법(engine/build.sh)을 저장소에 함께 둔다.
게임 자료: DOOM1.WAD
맵·그림·소리는 둠 Shareware v1.9의 DOOM1.WAD다. © 1994 id Software. 고치지 않은 원래 파일(MD5 f0cefca49926d00903cf57551d901abe)을 그대로 함께 둔다. Shareware 파일은 고치지 않으면 자유롭게 나눌 수 있다(Debian 저작권 파일의 John Carmack 회신, Raphael Quinet). 이 파일은 GPL이 아니며 id Software의 사용 허락을 따른다. 돈을 받고 나눌 수 없다.
권리
DOOM은 id Software(ZeniMax Media)의 상표다. 동현둠은 id Software·ZeniMax·Bethesda·Microsoft·Cloudflare와 관계가 없고 승인도 받지 않은 비상업 취미 작품이다.
동현둠이 만든 것
화면, 동현랭 출전 규약, 예제, 문서, 엔진 수정. 엔진과 함께 나가므로 저장소 전체는 GPL 2.0 또는 그 이후 판을 따른다. 동현랭 실행기(donghyun.js)는 동현랭 v1.53을 고치지 않고 썼으며 MIT 라이선스다.
글꼴
Black Han Sans, Nanum Gothic Coding, Pretendard — SIL Open Font License 1.1.
시험
node qa/core-tests.cjs가 예제 출력과 규약 판정(개수·범위·기본값)을 확인한다. 엔진은 브라우저에서 스테이지·난이도·체력·방어구·IDDQD·IDKFA가 듣는지, 게임 중에 친 치트가 듣지 않는지 확인했다.