CLAUDE · CODEX · GEMINI

3종 병렬 구현 통합 분석

같은 브리프로 만든 세 항해무역 게임을 심층 비교하고, BlackHorizon에 흡수할 통합 로드맵 · 2026-07-04

총평

BlackHorizon(Claude)는 서사 밀도·코드 계층화·에셋/오디오 파이프라인 깊이에서 3종 중 압도적 우위이고 기획-구현 정합성도 가장 높으나, 유일한 치명적 공백은 '컴파일까지만 검증, 실제 빌드 산출물·자동 QA 하네스 부재'(태스크 #10)다. Codex(MonsoonLedger)는 게임 자체는 갓클래스·단일 BGM으로 얕지만 108MB 실행 Mac 빌드·34 스크린샷·리플렉션 헤드리스 스모크·픽셀diff·터치타깃 CI 게이트라는 '검증 인프라'가 프로덕션급이라 여기서 훔칠 게 가장 많고, 시대 리디자인(1870s 인도양) 각도도 문서로 증명된 차별화다. Gemini(Ocean's Horizon)는 시스템 폭은 넓으나 현재 소스가 컴파일조차 안 되고(playerCombat 미선언, PlayCombatBGM 오호출) GDD 대비 3인 주인공·팩션이 전무해, 이식 가치는 '에셋리스 절차 비주얼·씬 조립 자동화' 코드 스니펫 몇 개로 국한된다.

차원별 스코어카드

차원Claude (BlackHorizon)Codex (계절풍장부)Gemini (Ocean's Horizon)
컨셉/시대·주제 각도1717 해적황금시대, 가공 카르텔 '오스프리'로 3직업 시점 수렴 — 견고하나 대항해 정통 계열16세기 대항해를 명시 폐기→1870s 인도양/홍해 물류·검역·전신 미스터리로 재설계, 안전 재설계 원칙을 문서로 증명16세기 오리지널 대륙 '아스테리아' — GDD는 3인/팩션 제시하나 실제는 유럽항구명·고전해적명 차용에 그침
코드 구조/확장성20파일 3.7k줄 4계층(Data/Core/UI/Screens) 분리, 데이터주도 스토리엔진, 죽은코드 거의 0 — PortScreen 777줄 비대만 부담MonsoonLedgerGame.cs 3.6k줄 단일 갓클래스(내부 구획은 양호)·데이터 코드리터럴 하드코딩67 MonoBehaviour 플랫구조 '매니저 메쉬', FindObjectOfType 85회로 강결합·이벤트버스 부재
콘텐츠 밀도(서사)27 StoryEvent(3주인공×3막+교차조우 멀티POV+대단원+은퇴회고) 전량 오리지널 한국어, 흑막 수렴 설계15 StoryBeat+63 선택+14계약+8항구사건, 원장 4단계 엔딩 — 충실하나 캐릭터 서사 깊이는 절제대사·퀘스트 스토리 데이터 사실상 전무, 이름은 소규모 문자열배열 랜덤조합
에셋 파이프라인PNG49+WAV28, PixelLab 17종 실생성+절차생성(world_map/UI/아이콘)+base64 육지마스크, 배포 스크립트PixelLab Pixflux REST 실호출 20종(재시도·배경제거·manifest·contact sheet) — 프로덕션급이나 종수 적음사실상 에셋리스, AI해시 JPG 4장뿐이라 GDD '독자 픽셀아트' 약속과 불일치
오디오자작 신디사이저로 BGM10곡(공용5+캐릭터테마3 항해화면 자동선곡+문화권2)+SFX18절차합성 64초 스테레오 BGM 실렌더 1곡+SFX5 — 실물이나 목표(5곡) 미달OnAudioFilterRead 사각파 단일 아르페지오 루프, 완성 WAV 2개뿐
완성도/빌드·QA플레이흐름 완결+컴파일OK지만 빌드산출물·스크린샷·QA로그 전무(Logs 비어있음, 태스크#10 pending)108MB 실행가능 Mac universal 빌드+34 스크린샷+build_report 전항목PASS+리플렉션 헤드리스 스모크+픽셀diff+터치타깃 CI게이트현재 소스 컴파일 실패(playerCombat 미선언/PlayCombatBGM 오호출), 빌드·QA 산출물 전무, 단일 커밋

초록 강조 = 해당 차원 우승. 6개 차원 중 Claude 4 · Codex 2 · Gemini 0.

구현별 강·약점

BlackHorizon (Claude)

1717년 스페인 왕위계승전쟁 직후 해적황금시대 — 실직 사략선원, 나소 해적공화국, 가공 해운 카르텔 '오스프리 상사'(물수리 문장)를 3주인공 공통 흑막으로 삼은 군상극. 각도가 영리함: 같은 사건을 상인(장부)·해적사냥꾼(총)·박물학자(지식) 3직업 관점에서 다른 장르(재건극/추적활극/학술탐사)로 열고 1막 끝에서

강점
  • 서사 밀도·구조가 압도적: 27이벤트 3막×3주인공 + 교차조우 + 대단원 + 은퇴 회고가 전량 오리지널 한국어로 실장, 흑막 '오스프리'로 수렴하는 설계가 코드-데이터로 완결
  • 데이터 주도 스토리 엔진(StoryData.NextFireable)으로 이벤트 추가가 배열 한 항목으로 끝나 확장성이 높음
  • 수급 반감기 경제·바람장·측량 격자·나소 밀무역·함대 진형 등 시스템이 문서 스펙과 실제로 일치(구현-기획 정합성 높음)
  • 오디오 파이프라인 깊이: 자작 신디사이저로 캐릭터 테마 3곡이 항해 화면에서 주인공 따라 선곡되고 문화권별 항구 테마가 자동 전환
  • 코드-퍼스트 UI 프레임워크(UIKit+ScreenHost)가 프리팹 없이 전 화면을 절차 조립 — 씬 의존 제로, 재현·diff·자동생성 친화
약점
  • 실제 빌드/플레이 QA 산출물 부재: 저장소에 apk/aab/app/Build/스크린샷/build_report 없음, Logs 비어 있음 — '컴파일 OK'까지만 검증되고 런타임 플레이 확인 흔적이 없음(태스크 #10 pending)
  • PortScreen.cs 701줄에 6개 시설 모달이 집중돼 단일 파일 비대·책임 과다(모달 재빌드 OpenTrade() 재호출로 전체 재생성하는 방식도 비효율)
  • SaveSystem이 PlayerPrefs 단일 문자열 1슬롯이고 Key가 'aov_save_v1' — 기획서의 '수동+10일 자동 JSON'은 맞으나 슬롯/버전 관리가 얕고 v0.1 잔재 네이밍
  • GameState 주석에 'days since 1522-03-10'이 남아 있는 등 v0.1(AgeOfVoyage)에서 이식한 잔재 주석/네이밍이 산발

MonsoonLedger 계절풍장부 (Codex)

1872-1876 인도양/홍해. 수에즈 운하 개통(1869)으로 증기선 석탄보급망(Aden)·전신망·검역이 항로를 바꾼 실제 물류사를 게임화. 실존 지명 7개(Zanzibar/Bombay/Aden/Suez/Muscat/Mombasa/Socotra)와 실존 선종(dhow/steam launch/Red Sea schooner

강점
  • 차별화된 시대·주제: 16세기 대항해를 폐기하고 1870년대 인도양 물류·검역·전신 미스터리로 재설계. 기획서에 '안전 재설계 원칙'과 역사 리서치 근거를 명시해 클론 회피를 문서로 증명.
  • 헤드리스 자동 QA 하네스가 매우 견고: MonsoonLedgerProjectBuilder가 리플렉션으로 private 게임 로직을 직접 구동해 슬롯 격리·능력 쿨다운·평판 게이트·계약 딜리버리를 예외로 검증하고, 34개 스크린샷을 RenderTexture로 자동 캡처.
  • 항해 애니메이션을 픽셀 diff로 검증: 프레임을 리플렉션으로 전진시켜 두 캡처를 찍고 AssertImagesDiffer로 실제 움직임(변경 픽셀·총 델타 임계값)을 강제 — '연출이 실제로 돈다'를 자동 증명.
  • 타깃별 비동기 프리로드 로딩 씬: Resources.LoadAsync로 대상 씬(Title/Main)마다 필요한 배경·초상·선박·오디오를 단계 표시하며 예열하고 씬 활성화를 지연 제어(allowSceneActivation).
  • 미리보기와 실제 결과가 동일 공식 공유: EstimateRoute()와 SailTo()가 같은 거리·계절풍 dot product·항해일수 계산을 써서 '예상 N일/순풍' UI와 실제 도착이 절대 어긋나지 않음.
약점
  • MonsoonLedgerGame.cs가 3543줄 단일 MonoBehaviour 갓클래스 — 데이터·UI·시뮬·저장·오디오가 한 파일에 집중돼 유지보수·테스트 분리가 어려움(내부 구획은 양호하나 구조적 확장성 낮음).
  • 데이터가 코드 리터럴에 하드코딩 — 계약/스토리/항구를 바꾸려면 재컴파일 필요. ScriptableObject·JSON 외부화 없음.
  • 해상 이벤트가 결정론적 시드(문자열 길이·day·trust 합의 mod 4)라 랜덤성이 얕고 4종뿐 — 반복 플레이 다양성 제한.
  • 전투 시스템 부재: 기획서엔 없지만 태스크#5는 '전투'를 언급 — 무역·계약·선택 중심으로 방향을 좁혀 액션성은 낮음(의도된 선택이나 장르 폭은 좁음).

Ocean's Horizon (Gemini)

16세기 대항해시대 해양 탐험·무역 RPG를 '아스테리아 대륙' 오리지널 세계관으로 재해석. GDD는 교역(수요/공급 동적 경제)·해양 생존(식량/식수/사기/내구도)·4대 상업 가문+해적 연합 팩션의 3축 코어 루프와, 서로 다른 시작·목표를 가진 3인 선택형 주인공(몰락귀족 탐험가 레온, 용병제독 발레리아, 천재상인 칼

강점
  • 시스템 커버리지가 넓다 — 교역·은행·투자·길드·바운티·낚시·인양·함대·전투·나포·날씨·세이브까지 항해무역 장르 기능을 폭넓게 스캐폴딩
  • 에셋 의존 없는 절차적 비주얼 — ShipVisualizer/WakeEffect/KrakenEvent가 코드만으로 배·항적·보스를 그려 자산 없이도 화면이 채워짐
  • SceneBuilder 에디터 자동화 — 씬 전체를 코드로 재현·재생성 가능해 씬 파일 유실/머지충돌에 강함
  • TradeManager의 거래-시세 피드백 루프가 단순하지만 체감되는 미시경제를 제공
  • 동반 헬퍼 클래스 패턴(WakeFader, BountyTargetTracker)으로 수명주기/콜백을 오브젝트 단위로 깔끔히 캡슐화
약점
  • 현재 소스가 클린 컴파일되지 않음 — SceneBuilder.cs line160이 미선언 변수 playerCombat 참조(playerShip의 CombatController를 캡처하지 않음), KrakenEvent.cs line48이 SoundManager에 없는 메서드 PlayCombatBGM() 호출(실제는 SwitchToCombatMusic)
  • 빌드된 Assembly-CSharp.dll이 최신 소스와 불일치 — DLL(13:14 컴파일)에 BountyBoard/KrakenEvent/RetroMusicSynth/FishingManager 등 신규 클래스가 없고 SoundManager만 존재. SceneBuilder.cs는 22:15에 수정돼 마지막 성공 컴파일 이후 코드가 깨진 상태
  • GDD 대비 대량 미구현 — 3인 선택형 주인공(Leon/Valeria/Khalil)·프롤로그·팩션 우호도 시스템이 코드에 전무(grep 0건). 타이틀→선택→프롤로그 흐름 없이 GameManager가 곧장 Sailing으로 진입
  • GDD 허위/과장 — '독자 16비트 픽셀아트'는 AI해시 JPG, 'FM신스 BGM 5곡'은 사각파 단일 아르페지오 루프, 'SFX 12종'은 WAV 2개, 완성 오디오 자산 부재로 SoundManager의 sailingBGM/combatBGM/포술SFX 등 대부분 필드가 미할당

BlackHorizon에 이식할 항목

우선출처항목 / 근거공수
P0codex리플렉션 기반 헤드리스 게임플로우 스모크 하네스 (Editor 배치모드에서 GameState/ScreenHost의 private 진행·세이브 로직을 UI 없이 구동, 슬롯 격리·플래그 게이트·현상금 보상 지급·가격임팩트 감쇠 등 불변식 위반 시 예외 강제)
BlackHorizon의 단 하나 치명 공백이 '런타임 검증 부재'다. StoryData.NextFireable 이벤트 게이팅, SaveSystem 왕복, Economy 반감기 같은 상태 로직은 실기 플레이로 잡으면 느린데 Codex처럼 리플렉션으로 초 단위 회귀 검증 가능. MonsoonLedgerProjectBuilder.cs:388-490 패턴을 BH 진행/세이브에 이식. 태스크#10을 '수동 QA'가 아닌 '자동 게이트'로 승격.
M
P0codex실제 빌드 추출 + QA 스크린샷 캡처 자동화 (배치모드 Mac/Android 빌드, RenderTexture로 타이틀→선택→항구→항해→전투→은퇴 전 화면 자동 캡처, build_report.md 생성, Android 모듈 미설치 시 정직하게 blocked 명시)
BH는 '컴파일 OK'까지만이고 apk/app/스크린샷/build_report가 전무해 실제 플레이 가능성이 미검증. Codex는 108MB 실행 빌드+34 캡처+PASS리포트로 이를 증명했다. UIKit이 프리팹 없이 절차조립이라 헤드리스 캡처와 궁합이 좋음. 태스크#10 직접 해소.
M
P1codex터치 타깃 접근성을 빌드 게이트로 강제 (AssertTouchTargets: 활성 버튼·지도 항구노드 rect가 47.5px 미만이면 빌드 실패)
BH는 모바일 가로 고정인데 UIKit 절차조립 버튼·SailScreen 지도 노드가 작아지기 쉽다. Codex의 47.5px CI 게이트를 UIKit.Btn/Place에 훅으로 넣으면 접근성 회귀를 수동 QA 없이 차단. 저비용 고효과.
S
P1codex미리보기=실제결과 단일 공식 항로 예측 UX (EstimateRoute와 SailTo가 동일 거리·바람 dot product·항해일수 공식 공유)
BH는 Voyage.Wind()/SpeedKnots로 바람장·역풍상한이 이미 있으나, 입항 전 '예상 N일/순풍·역풍' 미리보기 UI를 SailScreen에 붙일 때 예측과 실행을 물리적으로 같은 메서드에서 뽑아야 불일치 버그가 원천 차단됨. 플레이어 신뢰의 핵심.
S
P2codex픽셀 diff 애니메이션 회귀 검증 (AssertImagesDiffer: 리플렉션으로 프레임 전진 후 두 캡처의 변경픽셀수·총색차 임계값으로 '연출이 실제로 돈다' 증명)
BH의 전투 라운드제 코루틴 연출·항해 팬/바람 다이얼·타이프라이터 대사가 코드생성이라, 리팩터 후 '연출이 죽었는지'를 사람 눈 대신 CI에서 자동 증명 가능. P0 캡처 하네스가 깔린 뒤 확장 항목.
M
P2codex3슬롯 세이브 + 레거시 폴백 + 선택 로그 집약 엔딩 (파이프 직렬화 슬롯키, 구슬롯 폴백)
BH SaveSystem은 PlayerPrefs 단일 슬롯에 키가 'aov_save_v1'로 v0.1 잔재다. Codex의 3슬롯+per-slot key+레거시 폴백 구조로 마이그레이션하면 슬롯 관리가 정상화되고, BH의 은퇴회고(RetirementLines)와 결합해 '선택이 남았다' 엔딩 판정을 강화. 키 네이밍 정리도 겸함.
M
P2gemini절차적 선체 텍스처 폴백 (ShipVisualizer.GenerateShipTexture: 뱃머리/선미 테이퍼+외곽선 픽셀루프, FilterMode.Point 레트로 질감) — 함선 등급/색 파라미터화
BH는 PixelLab 함선 6종에 의존하는데, 신규 선종·적선 변형을 에셋 추가 없이 코드 폴백으로 즉시 생성하는 프로토타이핑 경로를 확보. IP-safe(순수 도형 생성). 단 Gemini 원본은 컴파일 안 되므로 로직만 발췌 이식.
S
P2gemini다부위 보스 링 조립 패턴 (KrakenEvent: 삼각함수로 N개 서브파츠 원형 배치+각자 중심 바라보게 회전, activeParts.RemoveAll(null)+count==0으로 격파 판정)
BH 전투가 기함1 vs 적1로 단순한데, 다부위 해양 보스(다함대 기함+호위)를 프리팹·애니메이터 없이 코드로 구성하는 재사용 패턴. BH BattleScreen 진형 데이터와 결합해 전투 시각화 다양성 확보. 선택적 확장.
M

사수할 것 (이미 우위)

통합 실행 로드맵

  1. [P0-1] 배치모드 빌드 추출부터 잠금: BlackHorizon을 Editor 배치모드로 Mac Standalone 빌드하고(Android는 모듈 있으면 함께, 없으면 build_report에 blocked 정직 표기) 산출물 존재를 확정. 태스크#10의 '빌드' 절반 해소.
  2. [P0-2] Codex MonsoonLedgerProjectBuilder의 리플렉션 헤드리스 스모크를 BH용으로 이식: GameState 진행·SaveSystem 왕복·StoryData.NextFireable 게이팅·현상금 보상 지급·PriceImpact 감쇠를 UI 없이 구동해 불변식 위반 시 예외. 회귀를 초 단위로 잡는 게이트 확보.
  3. [P0-3] RenderTexture 자동 캡처 하네스로 타이틀→3인선택→오프닝→항구허브(교역/조선/주점/은행/함대/나소밀무역)→세계지도항해→전투/현상금→은퇴 전 화면 스크린샷 + build_report.md 생성. 태스크#10 완결(수동QA→자동증명).
  4. [P1-4] AssertTouchTargets(47.5px) 게이트를 UIKit.Btn/Place와 SailScreen 지도노드에 훅으로 연결해 빌드 실패 조건화. 모바일 가로 접근성 회귀 차단.
  5. [P1-5] SailScreen에 '예상 N일/순풍·역풍/피로' 항로 미리보기 UI 추가하되, 예측과 실제 Voyage 실행을 동일 메서드에서 뽑아 불일치 원천 차단(Codex EstimateRoute=SailTo 패턴).
  6. [P2-6] SaveSystem을 3슬롯+per-slot key+레거시('aov_save_v1') 폴백으로 마이그레이션하고 v0.1 잔재 주석(1522 등)·네이밍 정리. 은퇴회고 엔딩 판정과 결합.
  7. [P2-7] AssertImagesDiffer 픽셀diff를 캡처 하네스 위에 얹어 전투 코루틴·항해 팬·타이프라이터 연출의 '살아있음'을 회귀 검증.
  8. [P2-8] (선택) 에셋리스 폴백 계열: Gemini의 ShipVisualizer 절차 선체·KrakenEvent 링보스 조립 로직만 발췌(원본은 컴파일 불가이므로 재작성)해 신규 선종·다부위 보스전을 에셋 추가 없이 프로토타이핑. IP-safe 순수 생성 유지.
  9. [상시] PortScreen 777줄 분해(6개 시설 모달 파일 분리)는 P1~P2 작업과 병행해 리팩터하되, 각 단계 후 P0-2 스모크로 회귀 확인. 모든 이식은 IP 안전(타 게임 에셋·데이터·대사 미복제, 역사 사실만 차용) 전제 준수.

결론

3종 비교 결과 BlackHorizon은 6개 차원 중 코드구조·콘텐츠·에셋·오디오 4개를 압도하고, Codex가 컨셉·완성도/QA 2개에서 우위다. 실질 통합 방향은 명확하다: BlackHorizon의 서사·시스템·아키텍처 우위는 그대로 사수하고, 유일한 공백인 '빌드 추출+자동 QA 하네스'를 Codex에서 통째로 흡수한다(P0: 배치빌드→리플렉션 헤드리스 스모크→RenderTexture 캡처+build_report, P1: 터치타깃 CI 게이트·미리보기=결과 단일공식, P2: 픽셀diff·3슬롯 세이브). Gemini는 컴파일 불가·핵심 미구현이라 이식 가치가 절차 선체/링보스 스니펫 재작성 수준으로 국한된다. 검증 결과 태스크#9(현상금 보드)는 BattleScreen에 이미 구현 완료이며, 남은 실질 과제는 태스크#10(빌드/QA)이고 이것이 로드맵 P0의 핵심이다.