ThePrimeagen이 자신이 개발 중인 게임 Mordoria(더 정확히는 ‘more Doria’라고 언급) 의 최근 업데이트를 공유하는 영상이다. 그는 몇 주간 게임에 새로운 타워·카드 시스템을 추가하고, 게임 테스트를 위해 JSON 인터페이스, FIFO 기반 다중 인스턴스, Grok 4.5 기반 AI 플레이어, Linear 자동 버그 리포팅 등을 연결한 실험적 파이프라인을 보여준다. 영상의 핵심은 “게임 개발자로서 직접 코드를 작성하면서도, AI와 자동화를 결합해 테스트와 버그 트래킹을 어떻게 확장할 수 있는가”이다.
2계층: 새로운 게임 시스템과 AI 테스트 아키텍처
2.1 새로 추가된 타워/카드
- Tar Tower(타르 타워): 적을 느리게 만드는 CC(군중 제어) 타워. ThePrimeagen은 “원래 항상 원했던 것”이라고 표현하며, 적이 느려지는 장면을 직접 보여준다.
- Lonely Tower(외톨이 타워): 다른 타워 사정권 밖에 단독으로 배치하면 공격력이 두 배로 증가하는 시너지 타워.
- 타워 강화(Enhancement): 특정 강화 카드를 타워에 적용해 공격력을 올리는 시스템. 영상에서는 7 → 9 데미지로 증가하는 예시를 보여준다.
- Poison Card(중독 카드): 적을 맞출 때마다 지속적으로 중독 스택이 쌓이는 DoT(지속 피해) 메커니즘. 작은 초록색 숫자(3)가 뜨는 것을 확인시켜 준다.
- 업그레이드 UI는 아직 마음에 들지 않지만, 기능적으로 작동한다고 언급한다.
2.2 테스트 문제의 발생
게임이 커지면서 직접 플레이 테스트가 어려워졌다. 그는 이전에 스냅샷 테스트를 도입하려 했으나:
- 서로 다른 VM/환경에서 동일한 렌더링이 약간 다른 픽셀을 만들어내는 문제가 있었고,
- 이로 인해 사소한 버그를 쫓아다니는 데 많은 시간을 낭비했다.
결국 “더 이상 직접 눈으로 보지 않고도 게임을 퍼즈(fuzz)하고 검증할 방법”이 필요하다고 판단했다.
2.3 JSON 인터페이스: 게임을 외부에서 조작하기
그는 게임에 JSON 기반 제어/질의 인터페이스를 추가했다.
type: ready, value: true같은 상태를 JSON으로 받을 수 있다.- “지금 UI 트리를 보여줘”, “현재 게임 스탯을 보여줘” 같은 질의에 JSON으로 응답한다.
- “마우스를 여기로 이동”, “마우스를 눌러”, “여기로 드래그” 같은 명령을 JSON으로 날리면 게임이 실제로 조작된다.
이렇게 하면 렌더링 없이도 게임 상태를 관찰하고, 외부 프로그램이 게임을 플레이할 수 있는 기반이 마련된다.
2.4 Phazor: FIFO 기반 다중 인스턴스 런처
JSON 인터페이스를 활용해 Phazor라는 프로젝트를 만들었다.
- 이름은 딱히 의미가 없고, 나중에 바꿔야 한다고 농담한다.
- Mordoria를 FIFO(명명 파이프) 를 통해 입출력할 수 있도록 띄운다.
- 이를 서버로 감싸면 동시에 10개의 Mordoria 인스턴스를 실행할 수 있다.
- 여러 인스턴스를 병렬로 돌리면서 AI 기반 테스트를 할 수 있게 된다.
3계층: 세부 구현과 파이프라인
3.1 Grok 4.5가 게임을 플레이하도록 만들기
Phazor 위에 클라이언트를 실행하고, Grok 4.5 fast extra high 모델에 게임 ID를 부여해 실행한다.
- 클라이언트는 게임의 기본 규칙만 설명받는다.
- Grok은 타이틀 화면에서 “플레이” 버튼을 누르고, 캐릭터 선택 화면까지 진입하는 것을 보여준다.
- 마우스 이동·클릭을 JSON 명령으로 게임에 전달한다.
3.1.1 ‘도박꾼(Gambler)’ 페르소나
ThePrimeagen은 AI가 사용할 캐릭터 빌드로 ‘도박꾼’ 페르소나를 만들었다.
- 이 페르소나는 모든 것을 희생하고서라도 최대한 높은 데미지를 추구한다.
- AI가 이 빌드로 플레이한 결과, 한 번의 공격에 60~66 데미지까지 나오는 것을 확인했다.
- 그는 이 결과에 꽤 흥분하며 “이 빌드가 실제로 작동한다”고 말한다.
3.2 의도적 Assertion + Linear 자동 리포팅
그는 게임 모드 진입 시 assert(false, "I hate you")를 삽입해 런타임 assertion을 유발한다.
- Assertion이 터지면 스택 트레이스를 받아 Linear에 자동으로 이슈를 생성한다.
- 동일한 스택 트레이스가 다시 발생하면 Linear가 “이미 같은 이슈가 있다”고 판단해 중복 생성을 막는다.
- 영상에서는 assertion이 발생한 직후 Linear에
Mordoria 478: urgent bug on Mordoria, the I hate you assertion runtime이라는 이슈가 생성된 것을 보여준다. - 디버그 빌드가 아니라서 스택 트레이스가 다소 빈약했지만, 디버그 빌드에서는 더 풍부한 정보를 얻을 수 있을 것이라고 설명한다.
3.2.1 궁극적인 자동화 비전
그가 그리는 비전은 다음과 같다.
- 밤에 500번의 게임을 AI가 자동으로 플레이한다.
- 새로운 assertion/crash가 발생하면 스택 트레이스를 Linear에 등록한다.
- Linear에서 특정 라벨(예:
robo-reported)과 우선순위로 표시된 이슈를 감지하면, AI가 GitHub PR까지 자동 생성한다. - 개발자는 아침에 일어나서 “두 개의 작은 버그”만 확인하고 수정하면 된다.
3.3 발견된 버그 사례: 죽은 적을 따라가는 투사체
현재 그가 발견한 버그 중 하나는 투사체 관련이다.
- 투사체가 적을 향해 날아가는 도중 적이 죽으면, 투사체가 그 자리에 멈추고 게임에서 사라지지 않는다.
- 이 상황에 assertion을 추가할 계획이다: “투사체가 업데이트되는데, 대상 적이 죽어 있고 투사체 자신도 죽지 않았다면 assert.”
- 이렇게 하면 AI가 밤에 게임을 돌리다가 자동으로 Linear 이슈를 생성하고, PR까지 연결할 수 있다.
3.4 prime agent review / takeover: AI 코딩 워크플로우
게임 테스트 외에도 개발 워크플로우에 AI를 더 깊이 통합했다.
- prime agent review: GitHub PR URL과 컨텍스트를 주면 AI가 코드 리뷰를 수행한다. ThePrimeagen은 병합 과정에서 실수로 코드가 빠진 것을 이 리뷰로 발견했다고 한다.
- takeover: 60% 정도 완성한 변경 사항을 클라우드 에이전트에게 넘기면, 에이전트가 나머지 40%를 작업한다. 완료되면 다시 리뷰를 요청하고, 최종적으로 본인이 마지막을 검토한다.
- 이 방식은 “직접 코드 라인을 읽고 작성하는 것”을 포기하지 않으면서도 AI를 활용해 생산성을 높이는 형태를 지향한다.
4계층: 시사점 및 개발자 적용
4.1 핵심 인사이트
- 복잡한 게임/소프트웨어는 수동 테스트에 한계가 있다. 렌더링에 의존하지 않는 JSON/CLI 인터페이스를 열어두면 자동화 가능성이 크게 확장된다.
- 다중 인스턴스 + AI 플레이어는 퍼즈 테스트(fuzz testing)와 탐색적 테스트를 결합한 형태로, 사람이 발견하지 못하는 엣지 케이스를 찾아낼 수 있다.
- Assertion → Issue Tracker → PR 생성으로 이어지는 파이프라인은 “밤새 버그를 모아두고 아침에 고치는” 개발 사이클을 현실화할 수 있다.
- AI를 단순한 코딩 보조가 아닌, 실행·검증·리뷰 루프에 연결하는 것이 ThePrimeagen이 추구하는 방향이다.
4.2 적용할 수 있는 실천
- 개발 중인 프로그램에 JSON/CLI 제어 인터페이스를 추가해 외부 자동화 도구가 상태를 읽고 조작할 수 있도록 한다.
- 장기 실행 테스트를 위해 헤드리스 모드(렌더링 OFF) + 다중 인스턴스를 지원한다.
- 런타임 assertion을 적극적으로 활용하고, assertion 발생 시 스택 트레이스를 이슈 트래커로 자동 전송한다.
- AI가 코드 리뷰와 “남은 40% 완성” 같은 보조 작업을 맡도록 하되, 최종 결정은 인간이 유지한다.
- 테스트 환경 간 픽셀/바이너리 차이로 인한 스냅샷 테스트 실패를 줄이려면, 의미적(semantic) 검증을 우선시한다.
4.3 추가 참고 사항
- 영상 말미에는 CodeRabbit 스폰서 스케치(“Merge Cop” 풍경)가 포함되어 있다. 이는 본 기술 내용과 직접적인 연결은 적지만, AI 기반 코드 리뷰/자동화라는 주제와 은근히 맞닿아 있다.
- ThePrimeagen은 “이 영상에 편집 컷이 3개밖에 없다”며, 자동화에 집중하다가 로딩 스피너에 잠깐 정신이 팔렸다는 일화를 덧붙인다.
