적 500마리, 방 두 개, 좁은 출입구, 넓은 틈새, 그리고 막다른 길. Claude Code의 Claude Opus 5.5에게 하나의 프롬프트만 입력했습니다: '이 무리를 만들어라. 아무것도 끼어 움직이지 못하는 일이 없게 하라.' 다른 모델을 사용하지 않았습니다. 첫 번째 시도 전에 작성된 점수표와 출시된 무리가 갖춰야 할 여덟 가지 요소들. 그리고 버그 보고서와 검토 요약본까지입니다.
출처: https://flockbay.com/blog/claude-opus-5-5-builds-a-500-enemy-horde-in-godot/ · 2026-10-12 업데이트
프롬프트
첫 번째 시도에 사용된 정확한 프롬프트(참고 이미지 세 장 포함):
Godot에서 탑다운 생존 게임을 위한 하나의 메커니즘을 구축하세요: 플레이어에게 다가오지만 절대 끼이지 않는 근접 적 무리. 3D로 만들되, 전체 아레나를 보여주는 높은 각도의 카메라 시점과, 플레이어를 따라가는 더 가까운 카메라 시점이 전환되는 구조여야 합니다. 이 시도는 참고 이미지의 깔끔한 모습으로 구성된 그레이박스(grey-box)입니다: 모든 것을 기본 도형(primitives)으로 구축하고, 플레이어용 투명 전면부를 가진 캡슐과 적 하나당 작은 캡슐을 사용하며, 3D 모델은 다운로드하거나 생성하지 마세요. 이미지는 모습과 아이디어를 보여주므로, 이미지의 레이아웃이 이 설명과 다를 경우 설명을 따르세요. 가로 약 48미터, 깊이 약 28미터 크기의 벽으로 둘러싸인 아레나 하나를 구축하세요. 서쪽을 화면 왼쪽에, 북쪽을 상단에 두는 구조입니다. 중앙의 벽이 이를 서쪽 방과 동쪽 방으로 나누며, 이 벽에는 두 개의 개구부가 있습니다: 북쪽 끝 근처에 폭 2미터의 출입구와 남쪽 끝 근처에 폭 5미터의 틈새가 있습니다. 적들은 북서쪽 모서리에서 스폰되며 플레이어는 동쪽 방 중앙에서 시작합니다. 출입구에서 플레이어 시작 지점까지 직선으로, 가로 약 6미터 크기의 U자형 벽을 배치하고 그 열린 면이 출입구를 향하도록 하세요. 그리하여 거기서 플레이어를 향해 곧장 걸어오는 모든 것이 막다른 길에 갇히게 됩니다. 양쪽 방에 몇 개의 기둥과 상자를 여기저기 배치하세요. 플레이어는 W A S D 키를 화면 방향으로 약 시속 6미터의 속도로 이동하며 공격 기능은 없습니다: 게임의 목표는 생존하는 것입니다.
각 적은 폭이 약 0.8미터이고 초당 약 4미터로 이동하며, 플레이어 근처에 있을 때 공격합니다. 플레이어의 체력, 생존한 적의 수, 그리고 생존 시간을 표시해야 합니다. 체력이 0이 되면 시간만 표시하고, 'R'을 누르면 다시 시작합니다.
'무리(horde)'가 핵심입니다. 적의 수가 아무리 많더라도, 모든 적은 실제로 걸어갈 수 있는 경로를 통해 플레이어에게 도달해야 합니다. 즉, U자형을 돌아가거나, 가장 빨리 도착할 수 있는 개구부를 통과하는 등, 벽이나 모서리에 멈추지 않고, 벽, 상자 또는 다른 적을 통과하지 않으며, 막히지 않는 출입구에서 정체(jam)를 일으키며 대기해서는 안 됩니다. 플레이어가 다른 방으로 이동할 때, 이전 경로가 아닌 가장 짧은 새로운 길을 따라 그를 추격해야 합니다. 개방된 공간에서 플레이어에게 도달할 때는, 일렬로 줄 서는 것이 아니라 모든 방향에서 그를 에워싸야 합니다.
그리고 적의 수가 많아도 작동해야 합니다. 키 1, 2, 3, 4는 무리를 초기화하고 각각 10마리, 100마리, 300마리, 500마리의 적을 생성합니다. 특히 300마리가 있을 때도 이 PC에서 V-Sync를 끈 상태로 측정하여 초당 60프레임으로 작동해야 합니다.
테스트용 기능입니다: F2는 '갓 모드(god mode)'를 켜고 끄며, 플레이어에게 피해가 발생하지 않게 합니다. F3은 디버그 보기(debug view)를 활성화하여 바닥에서 사용하는 내비게이션 데이터(메시, 그리드 또는 필드)와 최대 20마리의 적이 따르는 경로를 그립니다. 두 기능 모두 기본적으로 비활성화되어 있습니다.
위에 언급된 모든 키를 이름으로 누를 수 있는 입력 액션(input action)으로 설정해야 합니다: move_up, move_down, move_left, move_right, camera_toggle, restart, horde_10, horde_100, horde_300, horde_500, god_mode 및 debug_view.
따라서 플레이 테스트를 위해 외부에서 적의 수를 셀 수 있도록 하고, 플레이어를 'player' 그룹에 배치하며, 모든 살아있는 적의 위치를 담고 있는 PackedVector3Array를 반환하는 enemy_positions() 메서드를 가진 노드 하나를 'horde' 그룹에 유지해야 합니다. 아직 다른 것은 없습니다: 무기, 픽업 아이템, 웨이브(waves), 메뉴, 사운드도 제외됩니다. 시각적인 요소는 나중에 추가할 예정이므로, 씬과 스크립트는 확장하기 쉽도록 유지해야 합니다.
게임은 Flockbay의 도구들(flockbay_play, flockbay_run_headless, flockbay_script_errors, flockbay_game_input, flockbay_game_get, flockbay_game_set, flockbay_game_screenshot, flockbay_last_run, flockbay_stop)을 통해서만 실행하고 테스트해야 합니다. Godot를 직접 셸(shell)에서 시작하지 마십시오. 또한 이 도구들 중 필요한 기능을 수행할 수 없는 것이 있다면, 인계 과정에서 정확히 어떤 부분이 부족했는지 명시해야 합니다. 스스로 플레이테스트를 진행하고 완료되었다고 판단될 때 넘겨주세요.
평가된 항목 (What was judged)
점수표에 따른 무리(horde): 다시 실행할 수 있는 드라이브가 담긴 8개의 행.
개시 게임들과 나란히 움직이는 방식: 장애물을 돌아가고, 문을 통과하며, 플레이어를 감싸는 원형 이동.
구축된 방식: 내비게이션 데이터, 경로 검색 빈도, 개체들 사이의 간격 유지 메커니즘, 매 프레임마다 실행되는 로직.
개체가 더 많아졌을 때의 성능: 100, 300, 그리고 500 마리일 때의 프레임 시간(frame time).
소요된 자원: 테스트 과정, 소요 시간, 자체 플레이 횟수, 추정 API 비용.
메커니즘이 명확해진 후의 외관: 레퍼런스 자료와 나란히 배치된 동일한 무리 모습들.
영상 내용 (In the video)
- 0:00 게임이 무리를 움직이는 방식
- 1:14 1차 테스트: 그레이 박스(grey-box)
- 2:03 내부 구조 분석 (Under the hood)
- 2:53 잘못된 부분
- 3:10 외관 테스트(The look pass)
- 4:04 버그, 두 번째 시도
- 4:30 비용 청구서(The bill)
- 4:41 그래서 가능한가?
Claude Code와 Flockbay의 MCP 서버에서 실행됨
Claude Opus 5.5는 위의 프롬프트를 기반으로 Claude Code 내에서 92분 동안 실행되었으며, Flockbay의 도구들이 MCP를 통해 연결되었습니다. 이 과정에서 Flockbay의 도구가 117회 호출되었고, Claude Code 자체 기능이 141회 호출되었습니다. 실행 기록(transcript)에 담긴 모든 호출 내용은 다음과 같습니다:
Godot의 출력이 첫 번째 버그를 포착하다
실패한 첫 번째 검사는 res://tests/horde_test.tscn에서 flockbay_run_headless였습니다. 문제가 명시된 반환 라인은 다음과 같습니다:
Ran res://tests/horde_test.tscn headless: it quit by itself with exit code 1 after 62.52 s of game time (frame 3751 of 18000).
[12] FAIL: two enemies overlapped by 0.226 m
[13] RESULT: FAIL
다음 수정은 res://scripts/horde.gd로 이루어졌다
Claude Code가 해당 검사 이후 Bash를 통해 수행한 다음 수정 내용은 다음과 같습니다:
sed -i 's/^const SOLVER_ITERATIONS := 2/const SOLVER_ITERATIONS := 4/; s/var push := minf((diam - a) * 0.5, 0.15) \/ a/var push := minf((diam - a) * 0.5, 0.2) \/ a/' scripts/horde.gd
전달된 res://scripts/horde.gd의 내용
빌드 마지막 단계에 있는 게임 폴더의 979줄 중 51행부터 83행까지입니다.
@export var arena_size := Vector2(48, 28)
## 새로운 무리가 모여서 뛰쳐나가는 곳입니다.
@export var spawn_corner := Vector2(-24, -14)
...
Flockbay 무료 다운로드: Godot을 기반으로 제작된 무료 AI 게임 메이커입니다. https://flockbay.com/free-ai-game-maker/
관련 자료: The Blender episode: where this dwarf was built, Opus 5.5 and Godot's stairs problem, How to make games in Claude Code
저는 Godot을 기반으로 구축된 무료 AI 게임 제작 도구인 Flockbay를 만들었습니다. 원본 내용은 다음 링크에서 확인할 수 있습니다: flockbay.com.