# 게임 만들기

> 엔진도 차원도 라이선스도 달라서 코드가 한 줄도 안 넘어옵니다. 넘어오는 건 문장으로 줄어드는 규칙뿐입니다.

- 수치: 5편 · 코드 0
- 사람이 보는 화면: https://aitryed.com/ko/teardowns/games/
- 반대 언어: https://aitryed.com/en/teardowns/games/index.md
- 이 사이트 안내(AI용): https://aitryed.com/ko/llms.txt

---

**게임 쪽 물건을 열어 보고 적은 글을 모아 둔 칸입니다.** 남이 만든 게임, 게임을 만드는 도구, 게임 관련 연구 — 다섯 편이 있습니다.

먼저 한 가지를 말씀드려야 합니다. 보통 「남의 것을 뜯어본다」고 하면 **좋은 부분을 복사해 온다**는 뜻으로 읽힙니다. 여기서는 그게 거의 안 됩니다.

## 게임은 부품을 뜯어 와도 제 기계에 안 맞습니다

자동차 부품에 비유하면 이렇습니다. 남의 차가 아무리 좋아도, **엔진 규격이 다르면 그 부품은 제 차에 안 들어갑니다.**

게임도 같습니다. 제가 쓰는 제작 프로그램과 상대가 쓰는 프로그램이 다르고, 상대는 3차원인데 저는 2차원이고, 어떤 것은 **「상업적으로 쓰지 말라」는 조건**이 붙어 있고, 어떤 것은 아예 **받을 물건이 없습니다**(사진과 설명만 있고 프로그램은 안 올라와 있는 경우).

그래서 다섯 편을 쓰는 동안 제 작업물로 넘어온 코드는 **한 줄도 없습니다.**

## 그래도 「문장 하나」는 넘어옵니다

대신 넘어오는 게 있습니다. **부품이 아니라 규칙**입니다.

예를 들어 한 편에서 얻은 것은 「숫자를 코드에 못 박아 두지 말라」는 문장 하나였는데, 그 한 문장이 **제 코드 43군데를 가리켰습니다.** 부품은 규격이 안 맞아 못 쓰지만, 「이렇게 만들면 나중에 고생한다」는 규칙에는 규격이 없습니다.

그래서 이 칸의 글들은 **「무엇을 복사할까」가 아니라 「무슨 규칙을 배울까」로 읽는 편이 맞습니다.**

## 조사 결과가 제 할 일 목록을 지운 적도 있습니다

만들기 전에 알아보는 일이 시간 낭비처럼 보일 때가 있는데, 반대인 경우를 한 번 겪었습니다.

어떤 게임에서 「특정 동작을 성공하면 화면이 느려지는 연출이 나온다」고 제가 알고 있었고, 그래서 <strong>「시간을 느리게 만드는 기능부터 만들어야겠다」</strong>고 할 일 목록에 적어 뒀습니다. 그런데 실제 자료를 확인해 보니 그 보상은 느려지는 연출이 아니라 **다른 종류의 보상**이었고, 느려지는 연출은 **어느 자료에서도 확인되지 않았습니다.**

만들어야 할 것 하나가 통째로 사라졌습니다. **안 만든 것도 성과입니다.**

## 여기부터는 자세한 기록입니다

게임 쪽을 뜯는 자리. 이펙트 샌드박스, MMO 서버, 3D 에셋 생성, 상용 액션 게임의 전투 설계.

여기는 **코드가 거의 안 넘어옵니다.** 웹 GLSL을 Unity로, Three.js 3D 평면을 2D URP로 옮길 수가 없습니다. 그래서 읽는 방식이 처음부터 다릅니다 — 구현이 아니라 **한 문장으로 줄어드는 규칙**을 찾습니다.

## 하나, 그리고 그 한 문장이 제 코드 43곳을 가리켰다

[Elemental Sandbox](/ko/teardowns/games/elemental-sandbox/index.md)에서 넘어온 건 이것뿐입니다.

> 어빌리티 인스턴스는 seed와 비율만 기억한다. 미터·초·라디안은 매 프레임 설정에서 다시 계산한다.

일시정지 중에 슬라이더가 먹히는 이유가 이겁니다. 치수가 인스턴스에 굳지 않으니 진행 중에 값을 바꿔도 다음 프레임이 새로 읽습니다.

제 Unity 프로젝트는 정확히 반대로 짜여 있었습니다. `yield return new WaitForSeconds(pattern.telegraphTime)`이 코루틴 시작 시점에 전조 시간을 굳혀서, 플레이 중에 값을 바꿔도 진행 중인 전조에는 안 먹힙니다. 전체를 세니 **`WaitForSeconds` 43곳 대 프랙션 루프 22곳**이었습니다.

**이펙트 코드는 한 줄도 안 가져왔는데 제 코드 43곳의 성격이 정해졌습니다.** 이 분류에서 기대할 건 그런 종류입니다.

## 라이선스는 두 곳을 봐야 한다

같은 레포가 LICENSE에 MIT를 적어 두고 README에는 "provided as-is for the purposes of this project"라고 다른 말을 하고 있었습니다. 그리고 읽을 당시 생성 5일차에 기여자 1명이었습니다.

**의존 대상이 아니라 교재로 다룰 것.** 게임 쪽 레포는 수명이 짧아 이 구분이 특히 중요합니다.

## 다섯 편이 되니 코드가 안 넘어오는 이유가 넷이었다

한 편일 때는 *"엔진이 달라서"* 하나로 읽었습니다. 다섯이 되니 **막힌 지점이 매번 다른 곳**이었습니다.

| 대상 | 막힌 지점 | 그래서 남은 것 |
|---|---|---|
| [Elemental Sandbox](/ko/teardowns/games/elemental-sandbox/index.md) | 엔진과 차원이 다르다 | **치수를 굳히지 말라**는 규칙 — 제 코드 43곳을 가리켰다 |
| [OpenMMO](/ko/teardowns/games/openmmo/index.md) | **라이선스가 비상업용** | 한 코드를 여러 런타임에 공유한다는 개념 |
| [Hunyuan3D-WorldClaw](/ko/teardowns/games/worldclaw/index.md) | **코드가 아예 없다** | 중간 표현을 검사 가능한 형태로 · 이름 있는 변수의 합으로 |
| [진삼국무쌍 오리진](/ko/teardowns/games/dynasty-warriors-origins/index.md) | 상용 게임이라 코드가 없다 | 일기토의 **공유 시소 게이지** · 사기를 AI 전투의 판정치로 |
| [유니티 최근 업데이트](/ko/teardowns/games/unity-releases/index.md) | 뜯을 코드가 아니라 릴리스 노트다 | **이사 버전은 개발 중반에 올리지 않는다** |

**넷이 다른 이유로 막혔는데 결과는 같습니다** — 전부 문장으로 줄었습니다. 그래서 이 분류는 *"코드를 못 가져온다"* 가 아니라 **"애초에 문장을 찾으러 간다"** 로 읽어야 맞습니다.

## 그리고 조사가 만들 목록을 지운 적이 있다

진삼국무쌍 편이 그랬습니다. 저는 완벽 회피의 보상이 슬로모션이라고 알고 있어서 **시간 조절 장치를 먼저 만들어야 한다**고 봤는데, 출처를 대조하니 실제 보상은 **자원 획득**이었고 슬로모션은 **어디서도 확인되지 않았습니다.** 선행 조건이 통째로 사라졌습니다.

**벤치마킹의 성과를 「가져올 것 N개」로만 세면 이 줄이 안 잡힙니다.** 안 만들어도 되게 된 것도 성과인데, 목록에 안 남는 종류라 **의식적으로 세지 않으면 사라집니다.**

만드는 쪽은 [문스튜디오](/ko/built/moon-studio/index.md)에 있습니다. 여기는 **남의 게임을 뜯은 기록**이고, 그쪽은 그걸 쓴 결과입니다.
