feat: P14 — 반복 런·로비·영혼·도적·몬스터 랜덤성 (요청 17항목) #52

Merged
maple merged 11 commits from feature/p14-loop-lobby-soul into main 2026-06-14 01:50:20 +09:00
Owner

P14 — 반복 런 기반 재편 + 신규 시스템

사용자 요청 17개 항목을 9개 Phase로 구현. 모든 변경은 생성기(tools/)·데이터(data/)만 수정하고 산출물은 재생성(RULES.md 준수). 메이커 플레이테스트로 로비→도적 선택→가로 맵→전투→카드 플레이 전 루프 검증 완료.

맵/노드 (P14-1·2)

  • 맵 5막화: ACT_MAPS=map01~map05, RUN_LENGTH/ACT_COUNT=5, map06~11 삭제, SectorConfig 정리
  • 노드 depth 8→7(걷는 행 6+보스), 막 배율 0.6→0.45 완화
  • rest/shop/elite 다음 노드에 같은 타입 연속 금지(Lua+rogue-map.mjs 미러+테스트)
  • 노드 맵 세로→가로 진행(왼→오른쪽), 보스 최우측

몬스터 (P14-3)

  • 구성 랜덤: 일반 13 / 엘리트 1+일반02 / 보스 1 (BuildMonsters 그룹별 추첨)
  • 행동 랜덤: 정의된 intent 중 무작위 선택(순차→랜덤, sim 미러)
  • StS2식 덱 오염: AddCard intent + 저주 카드(상처/화상). 손패 막힘·턴종료 피해
  • map01 일반 5종+엘리트1+보스1, 우측 포메이션(왼쪽 바라봄). red_snail/stump 신규

직업 (P14-4)

  • 도적 클래스(HP 75) + 2차 전직 어쌔신/시프. 카드 11종+스타터덱, bandit 프레임
  • 전사 2차(파이터/페이지/스피어맨)·법사 2차(위자드 불독/썬콜/클레릭)는 기존 완비 확인

카드 (P14-5·6)

  • 전 카드 아트를 실제 메이플 스킬 아이콘으로 교체(경로 검증 28종), 피격 이펙트(fx) 분리(18종)
  • 손패 최대 10장, 초과 드로 자동 버림. 마우스오버 시 카드 확대(UIScale)+상세 툴팁

경제 (P14-7)

  • 골드→메소 표기 완성(goldIdol 정정), TopBar·상점에 메소 코인 아이콘 추가

로비·영혼 (P14-8·9)

  • 로비 허브: NPC 4종(모험가=런시작·사서=카드도감·상인=영혼상점·안내원=게시판)
  • 첫 실행/패배/클리어 모두 로비 기점 — 반복 런 루프
  • 영혼 메타: 2차 전직 후 보스 클리어로 적립(영속 저장 RPC), 로비 상점에서 4종 해금
    (시작 메소/HP/유물/덱 정제) → 다음 런 덱빌딩 이점. 승천(패널티)과 분리 공존

검증

  • node --test(rogue-map 9 + sim-balance 35 = 44/44 통과)
  • 전 생성기 재생성 완전 멱등(변경 0), 전 산출물 JSON 유효·엔티티 id 유일
  • 메이커 빌드 콘솔 에러 0(BuySoulUnlock 정적 분석 Info 경고만, 런타임 가드 안전)

🤖 Generated with Claude Code

## P14 — 반복 런 기반 재편 + 신규 시스템 사용자 요청 17개 항목을 9개 Phase로 구현. 모든 변경은 생성기(`tools/`)·데이터(`data/`)만 수정하고 산출물은 재생성(RULES.md 준수). 메이커 플레이테스트로 로비→도적 선택→가로 맵→전투→카드 플레이 전 루프 검증 완료. ### 맵/노드 (P14-1·2) - 맵 5막화: `ACT_MAPS=map01~map05`, `RUN_LENGTH/ACT_COUNT=5`, map06~11 삭제, SectorConfig 정리 - 노드 depth 8→7(걷는 행 6+보스), 막 배율 0.6→0.45 완화 - rest/shop/elite 다음 노드에 같은 타입 연속 금지(Lua+rogue-map.mjs 미러+테스트) - 노드 맵 세로→**가로 진행(왼→오른쪽)**, 보스 최우측 ### 몬스터 (P14-3) - 구성 랜덤: 일반 1~3 / 엘리트 1+일반0~2 / 보스 1 (BuildMonsters 그룹별 추첨) - 행동 랜덤: 정의된 intent 중 무작위 선택(순차→랜덤, sim 미러) - StS2식 덱 오염: `AddCard` intent + 저주 카드(상처/화상). 손패 막힘·턴종료 피해 - map01 일반 5종+엘리트1+보스1, 우측 포메이션(왼쪽 바라봄). red_snail/stump 신규 ### 직업 (P14-4) - 도적 클래스(HP 75) + 2차 전직 어쌔신/시프. 카드 11종+스타터덱, bandit 프레임 - 전사 2차(파이터/페이지/스피어맨)·법사 2차(위자드 불독/썬콜/클레릭)는 기존 완비 확인 ### 카드 (P14-5·6) - 전 카드 아트를 **실제 메이플 스킬 아이콘**으로 교체(경로 검증 28종), 피격 이펙트(fx) 분리(18종) - 손패 최대 10장, 초과 드로 자동 버림. 마우스오버 시 카드 확대(UIScale)+상세 툴팁 ### 경제 (P14-7) - 골드→메소 표기 완성(goldIdol 정정), TopBar·상점에 메소 코인 아이콘 추가 ### 로비·영혼 (P14-8·9) - 로비 허브: NPC 4종(모험가=런시작·사서=카드도감·상인=영혼상점·안내원=게시판) - 첫 실행/패배/클리어 모두 로비 기점 — **반복 런 루프** - 영혼 메타: 2차 전직 후 보스 클리어로 적립(영속 저장 RPC), 로비 상점에서 4종 해금 (시작 메소/HP/유물/덱 정제) → 다음 런 덱빌딩 이점. 승천(패널티)과 분리 공존 ### 검증 - `node --test`(rogue-map 9 + sim-balance 35 = 44/44 통과) - 전 생성기 재생성 완전 멱등(변경 0), 전 산출물 JSON 유효·엔티티 id 유일 - 메이커 빌드 콘솔 에러 0(BuySoulUnlock 정적 분석 Info 경고만, 런타임 가드 안전) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gahusb added 11 commits 2026-06-14 01:33:54 +09:00
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ACT_COUNT/RUN_LENGTH 3→5, ACT_MAPS map01~map05 (반복 런 기반 확장)
- MAP_ROWS 7→6 (걷는 행 6 + 보스 = depth 최대 7), 막 배율 0.6→0.45 완화
- 노드 타입 인접 금지를 elite 단독 → rest/shop/elite 3종으로 일반화
  (Lua GenerateMap + rogue-map.mjs JS 미러 동시 수정, 테스트 9/9 통과)
- 맵 파일 생성기 카운트 11→5, map06~map11 삭제, SectorConfig 정리(stale 제거)
- 산출물 재생성(ui/codeblock/map01~05). 검증 헬퍼 tools/verify/count.mjs 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- nodeX=행(좌→우)·nodeY=열(분기)로 좌표축 스왑, 보스는 최우측 중앙
- 호출부(노드/도트/보스 간선) 인자 스왑. Lua 무수정(좌표는 JS 빌더 전담)
- 도트 보간·간선·라벨 좌표 함수 파생이라 자동 추종. 산출물 재생성

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 구성 랜덤화: BuildMonsters를 그룹별 수집 후 노드 타입별 추첨
  (일반 1~3 / 엘리트 1+일반0~2 / 보스 1, MAX_MONSTERS=4 내)
- 행동 랜덤화: EnemyActStep 순차(round-robin) → 정의된 intent 중 math.random 선택
  (스폰 시 시작 intent도 랜덤, sim-balance.mjs 미러 동기화)
- StS2식 덱 오염: AddCard intent 신규 — 저주 카드(Wound/Burn)를 버린 더미에 추가
  · Wound=사용불가 사석, Burn=사용불가+턴종료 피해2(EndPlayerTurn 처리)
  · PlayCard unplayable 가드, CardPool class 필터로 보상/상점 자동 제외
  · luaIntentsArray(card/count)·luaCardsTable(unplayable/curse/endTurnDamage) 직렬화
- map01 인카운터: 일반 5종(주황/초록/빨강달팽이/파랑/돼지) + 엘리트1 + 보스1, 우측 포메이션
  · enemies.json red_snail/stump 신규, blue_mushroom/mushmom에 AddCard intent
  · gen-map-encounters 레이아웃 맵별 분기 + 풀 인덱싱 일반화
- 막 배율 0.6→0.45(5막 기준 완화). sim 테스트 35/35 통과(신규 3 포함). 산출물 재생성

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- CLASSES.thief(maxHp 75), JOBS.thief = [어쌔신(CriticalThrow), 시프(SavageBlow)]
- 카드 11종: 도적1차(럭키세븐/더블스탭/다크사이트/헤이스트/드레인)
  · 어쌔신(크리티컬스로우/쉐도우스타/클로마스터리)
  · 시프(새비지블로우/스틸/메소가드), starterDecks.thief 추가
- cardframes classToFrame: thief/assassin/bandit → bandit 프레임(기존 RUID 재사용)
- CharacterSelectHud Thief 해금, BindMenuButtons ThiefButton, RenderCharacterSelect·
  StartNewGame·StartRun·JobLabel 도적 분기. 전사/법사 2차는 기존 완비 확인
- 산출물 재생성(생성기 검증 통과)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 카드 아트(image)를 경로 검증된 실제 스킬 아이콘 RUID로 교체(28종)
  · mapleImgFullPath의 /icon 경로 확인으로 스킬 아이콘 보장(기존엔 이펙트 프레임·맵
    오브젝트가 섞여 있었음)
- 피격 이펙트(fx) 필드 신설(18종) — 스킬 effect/hit 프레임 RUID
  · PlayCard가 PlayAttackFx/PlayAoeFx에 c.fx or c.image 전달(이펙트 분리, 없으면 폴백)
  · luaCardsTable fx 직렬화. MSW asset 메타데이터 경로 검증으로 수급(워크플로 6에이전트)
- 아이콘 미발견 카드는 기존 RUID 유지. sim 35/35 통과. 산출물 재생성

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 손패 슬롯 5→10 확장(Card6~10 신규 생성), RenderHand 장수 비례 동적 간격 배치
- DrawCards 손패 10장 상한 — 초과 드로는 버린 더미로 자동 이동(StS식, sim 미러)
- 카드 마우스오버: UITouchEnter→UIScale 1.3배 확대 + ShowTooltip(이름/설명),
  Exit→복원+숨김. 드래그 중(DragSlot) 확대 억제. RenderHand가 UIScale 리셋
- HoverCard/UnhoverCard 메서드 신설. sim 35/35 통과. 산출물 재생성

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- relics.json goldIdol 설명 "골드"→"메소" (유일하게 남았던 표면 잔존 정정)
- CombatHud TopBar·ShopHud 메소 금액 옆에 금색 코인 아이콘 스프라이트 추가
  (공식 RUID 흰박스 리스크 회피 위해 색상 채움 스프라이트 사용)
- 내부 식별자 self.Gold 등은 산출물 id 안정성 위해 유지. 산출물 재생성

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- LobbyHud: 메이플 로비 화면. NPC 4종 클릭 — 모험가(런 시작)·사서(카드 도감)·
  상인(영혼 상점)·안내원(게시판) + 승천 +/- + 영혼 수치 표시
- ShowState "lobby" 추가, OnBeginPlay·EndRun → ShowLobby (첫 실행/패배/클리어 모두
  로비 기점, 반복 런 루프). ShowLobby가 BindMenuButtons도 호출(전직 버튼 바인딩 보존)
- 카드 도감: DeckAllHud 재사용(CodexMode) — 저주 제외 전 카드 표시, 닫으면 로비 복귀
- 게시판(BoardHud): 게임 규칙/팁 패널. 영혼 상점(SoulShopHud): 셸(P9에서 해금 채움)
- guid 네임스페이스 lob/brd/soul 추가(id 충돌 방지). 산출물 재생성(id 유일성 검증 통과)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 2차 전직 상태로 맵 보스 클리어 시 영혼 +1 적립(CheckCombatEnd 보스 분기 AwardSouls)
- UserDataStorage 영속 RPC: ReqLoadSouls/RecvSouls/SaveSouls(ExecSpace 5/6, 승천 패턴 복제)
  · key soulPoints(수치)·soulUnlocks(해금 set, 콤마 직렬화). OnBeginPlay에서 로드
- 로비 영혼 상점(SoulShopHud) 4종 해금: 두둑한 지갑(시작 메소+60)·단련된 육체(시작HP+15)
  ·덱 정제(기본카드 1장 제거)·유물 수집가(시작 유물+1). BuySoulUnlock 구매·영속 저장
- ApplySoulUnlocks가 StartRun에서 해금 효과 적용 → 덱빌딩 이점. 승천(패널티)과 분리 공존
- 산출물 재생성(id 유일성·JSON 검증 통과)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- ShowCodex가 self.Cards를 순회하는데 런 시작 전(로비)엔 미설정이라 pairs(nil) 오류
  → OnBeginPlay에서 luaCardsTable/luaFramesTable을 미리 주입(StartRun과 중복 무해)
- 메이커 플레이테스트로 로비·도감·가로맵·전투(도적/메소아이콘/스킬아이콘) 전 루프 검증

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
maple merged commit 8f233296af into main 2026-06-14 01:50:20 +09:00
maple deleted branch feature/p14-loop-lobby-soul 2026-06-14 01:50:29 +09:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gahusb/maplecontest#52