Commit Graph

434 Commits

Author SHA1 Message Date
4d8fa0f40f docs(rules): 카드 kind↔효과 규칙(§9)+검증도구 + codex 규칙 보강 (협업자 하네스 반영)
이번 세션에서 발견·수정한 하네스 학습을 저장소(공유 매개)에 반영해
협업자(codex 등)도 적용받게 한다. 메모리는 로컬이라 공유 안 됨.

- RULES.md §9 신설 (카드 kind ↔ 효과 일치): ResolveCardDrop 라우팅
  (Attack=몬스터드롭/Skill·Power=스윕/Status=unplayable)·Power 분기가
  damage/aoe 무시 → 데미지=Attack, block/유틸=Skill, 지속효과=Power.
  안 맞으면 사용불가/死카드(아이언 바디·분노 사고).
- tools/verify/cardkinds.mjs 신설: kind↔효과 위반(Attack-무데미지/
  Power-무효과/미지원 kind) 정적 검출(이상 0=exit 0). 현재 main 147장 0,
  Defend=Attack·Rage=Power 위반은 2건 검출 확인.
- docs/codex-working-rules.md 6~9 추가: ⑥ main 머지 충돌 시 머지 전체
  revert 금지(소스 충돌만 해소·산출물 재생성 — #98/#99가 #96 날린 사고)
  ⑦ 카드 kind 일치+cardkinds 검증 ⑧ 변경 후 검증 스위트 ⑨ RULES.md 권위.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-30 17:11:11 +09:00
9fd4b2d2e3 Merge pull request '복구: codex가 revert한 #96 수정 11개 재통합 + Defend 방어카드 수정 + RULES 경고' (#102) from fix/restore-96-defend into main 2026-06-30 08:35:52 +09:00
0def604f62 docs(rules): main 머지 충돌 시 머지 전체 revert 금지 규칙 추가
§4에 경고 추가 — 작업 브랜치에 main 머지 후 충돌나도 머지를 통째로
revert하면 타인 작업이 collateral로 유실된다. 소스 충돌만 해소하고
산출물은 재생성할 것. (2026-06-30 codex #98/#99가 #96을 날린 사고 근거.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-30 08:34:54 +09:00
a2e4f16402 fix: codex #98/#99가 revert한 #96 수정 11개 재통합 + Defend 카드 수정
codex #98/#99(도적 Rogue/시프 카드 확장)가 main을 작업 브랜치에 머지
후 그 머지를 통째로 revert하면서, 먼저 머지됐던 #96의 버그수정 11개가
collateral로 전부 사라졌다. 이를 현재 main(codex 카드 147장) 위에 재통합.

복원된 #96(상세는 PR #96): BindButtons 1회가드·drawDamage per-draw+
CheckCombatEnd 멱등가드·firstCardDamageBonus class→kind·PiercingWail
시뮬 음수힘·Envenom AoE attackPoison·firstShivDamageBonus 시뮬 첫Shiv만·
Prepared 실제방어+설명·DealDamageToAllMonsters isAttack 분리·useAllEnergy
코스트감소 무시·설명 정정 6장(Rage kind Power→Attack 포함).

추가: Defend(아이언 바디) kind Attack→Skill — block만 있는 방어 카드가
Attack 라우팅(몬스터 드롭 필요)이라 위로 스윕으로 사용 불가였던 것 수정.

codex 변경과 라인 충돌 없이 git apply --3way로 소스 재적용 후 재생성.
카드 147장 유지, 테스트 88, propcheck 0, cbgap 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-30 08:34:54 +09:00
66985c2af6 Merge pull request '도적 로그·시프·시프마스터 카드 확장' (#99) from codex/rogue-job-system into main
Reviewed-on: #99
2026-06-30 02:33:07 +09:00
1ecccb4ae7 feat(thief): add thief and thief master cards 2026-06-30 02:28:52 +09:00
985225dbd2 chore(cards): sync cards workbook 2026-06-30 02:14:39 +09:00
f0b7704fc1 feat(rogue): add first-job skill cards 2026-06-30 02:00:24 +09:00
8628727bcc Merge pull request '도적 전직 구조를 Rogue 기준으로 정리' (#98) from codex/rogue-job-system into main
Reviewed-on: #98
2026-06-30 01:55:18 +09:00
7db67e3ccd Refine rogue job progression 2026-06-30 01:53:45 +09:00
1847e2d9b2 Revert "Refine rogue progression and card pools"
This reverts commit 95d6155086.
2026-06-30 00:49:38 +09:00
5e2fd5db22 Revert "Merge branch 'main' of https://gitea.gahusb.synology.me/gahusb/maplecontest"
This reverts commit 17200d47ec, reversing
changes made to 95d6155086.
2026-06-30 00:49:30 +09:00
17200d47ec Merge branch 'main' of https://gitea.gahusb.synology.me/gahusb/maplecontest 2026-06-30 00:42:45 +09:00
95d6155086 Refine rogue progression and card pools 2026-06-29 23:34:19 +09:00
de917f812d Merge pull request '리뷰 발견 수정: 게임버그 6 + 시뮬 충실도 3 + 설명/데이터 정정 (Lua↔JS 동기화)' (#96) from fix/review-findings into main 2026-06-29 21:46:44 +09:00
8a43ca91da fix(data): 설명이 미구현 효과를 주장하던 5장을 실제 동작에 일치
각 카드 설명이 데이터에 없는 효과를 주장하고 있었다. 실제 런타임
동작에 맞게 설명 수정(미구현 메커니즘 구현 대신 설명 정정):
- Malaise(불쾌): "힘 감소+약화+소멸" → 실제는 useAllEnergy+xWeakPerEnergy
  뿐(단일 적 약화, 소멸/힘감소 없음) → "에너지를 모두 사용하고, 사용한
  에너지만큼 적에게 약화를 부여합니다."
- Mirage(신기루): "중독만큼 방어+소멸" → 실제 draw:1 → "카드를 1장 뽑습니다."
- KnifeTrap(칼날 함정): "표창 재사용" → 실제 draw:1 → "카드를 1장 뽑습니다."
- Strangle(목 조르기): "카드마다 체력감소" 부분 미구현 → "피해를 8 줍니다."
- Rage(분노): kind=Power라 damage:4/aoe가 무시되고 powerEffect도 없어
  재생 시 아무 효과 없던 死카드. 데이터의 damage:4/aoe 의도대로
  kind Power→Attack으로 기능화 + "모든 적에게 피해를 4 줍니다."

카드 121장 유지. 산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 21:45:24 +09:00
fc03d58ee7 fix(data): Tactician·Adrenaline 잘린 설명 완성 (필드와 일치)
Tactician(전략가) "교활. 을 얻습니다." → gainEnergy:1 반영해
"교활. 에너지를 1 얻습니다." Adrenaline(아드레날린) "를 얻습니다..."
→ "에너지를 1 얻습니다. 카드를 2장 뽑습니다. 소멸." 산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 20:50:04 +09:00
ead73b427e fix(deck): useAllEnergy 카드는 코스트감소를 무시하고 전 에너지 소비 (Lua/JS 동기화)
Malaise(불쾌, xWeakPerEnergy)·Skewer(꼬챙이, xDamagePerEnergy) 같은
useAllEnergy 카드는 X 효과가 소비 에너지에 비례하는데, Lua는 코스트
감소(스킬코스트감소·다음스킬무료·전투코스트감소)를 useAllEnergy에도
적용해 소비 에너지가 full보다 줄고 X도 약해졌다(코스트감소가 카드를
약화시키는 역설). JS는 스킬코스트감소만 건너뛰고 combatReduction은
적용해 양쪽이 미묘하게 달랐다.

정답: useAllEnergy는 "전 에너지 소비"이므로 어떤 코스트감소도 무시.
Lua는 3개 감소 조건에 useAllEnergy 제외 추가, JS는 finalCost를
useAllEnergy면 combatReduction 미적용으로. 양쪽 모두 full 에너지 소비로
일치. 산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 20:48:29 +09:00
d78049182b fix(deck): DealDamageToAllMonsters를 isAttack 매개변수화 (버스트 평면화)
DealDamageToAllMonsters는 AoE 공격(취약 1.5x·attackPoison 적용)과
Outbreak 독 버스트(평면 피해) 두 용도로 공유되는데, 취약을 항상
적용해 버스트가 취약 대상에 과다 피해를 줬다(JS 미러는 버스트를
평면 applyDamage로 처리 — Lua만 발산). 또한 직전 커밋에서 추가한
attackPoison도 버스트에 적용돼, Envenom+Outbreak 동시 활성 시
버스트→attackPoison→독 적용→또 버스트의 재귀 위험이 있었다.

isAttack 매개변수를 추가해 취약·attackPoison을 공격일 때만 적용:
AoE 공격(ResolveCardEffects)은 true, 버스트는 미전달(평면). JS의
dealToTarget(취약+attackPoison) vs 버스트(평면) 분리와 일치.
산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 20:45:03 +09:00
5f615e30e2 fix(balance): Prepared 시뮬에 blockPerDamageDealtThisTurn 실제 방어 적용 + 설명 정확화
Lua는 Prepared(예비)에서 AddCardBlock으로 실제 방어를 부여하는데, JS
시뮬은 blockGained(통계 카운터)만 증가시키고 addBlock을 호출하지 않아
플레이어가 실제 방어를 못 받았다(시뮬이 방어를 과소집계).

JS도 다른 블록 출처처럼 addBlock 경유로 변경(Lua 동기화). 또한
Prepared 데이터는 discard:1 + blockPerDamageDealtThisTurn뿐(draw 없음)
인데 설명이 "1장 뽑고 1장 버립니다"로 부정확해, 실제 동작(1장 버리고
이번 턴 피해만큼 방어)에 맞게 보강. RED-GREEN 테스트 추가. 88개.
산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 20:40:02 +09:00
222ed92807 fix(balance): firstShivDamageBonus 시뮬을 첫 Shiv에만 적용 (Lua 동기화)
PhantomBlades(환영검: 첫 Shiv +9) 사용 시 Lua는 첫 Shiv 처리 후
ShivFirstDamageBonusUsed를 set(Attack 경로)하는데, JS 시뮬은 이 플래그
set이 else(비-Attack/Skill) 분기에 있어 Shiv(kind=Attack)는 도달 못 함
→ 플래그 영영 false → 모든 Shiv가 +9를 받아 시뮬이 데미지를 과대집계.

Lua가 정답(게임 정상) — 시뮬만 수정: 죽은 else-분기 플래그 set 제거 +
Attack 분기(baseDamage 계산 직후, Lua 순서와 동일)에 추가. RED-GREEN
테스트로 턴당 첫 Shiv만 보너스 검증. 87개.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 18:58:10 +09:00
72750f3647 fix(deck): Envenom attackPoison을 광역 공격에도 적용 (Lua 누락)
Envenom(독 바르기: 공격이 막히지 않은 피해를 줄 때마다 중독 1)이
단일타겟(DealDamageToTarget)에는 적용됐지만 광역(DealDamageToAllMonsters)
에는 빠져 있어, Envenom+광역공격이 게임에선 아무 적도 중독 안 됐다
(JS 미러는 양쪽 적용 — Lua가 누락).

DealDamageToAllMonsters의 막히지 않은 피해(dmg>0) 분기에 단일타겟과
동일한 attackPoison 적용을 추가(적별 ApplyPoisonToMonster). JS 미러는
이미 올바라 무변경. 산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 18:53:24 +09:00
1291c52346 fix(balance): 시뮬 enemyStrengthLoss를 음수 힘 허용으로 (Lua 동기화)
PiercingWail(귀를 찢는 비명: 모든 적 힘 -6)에서 Lua는 적 공격을
(value+str-loss, 0클램프)로 줄여 StS처럼 힘이 음수로 작동하는데,
JS 시뮬은 max(0, str-loss)로 힘을 0에서 클램프해 모든 적 str=0일 때
공격이 전혀 안 줄었다(게임 -6, 시뮬 -0). 기존 테스트는 str>=loss
구간만 봐서 못 잡음.

Lua가 정답(게임은 정상) — 시뮬만 수정. calcEnemyAttack의 max(0,...)
제거(음수 힘 허용, 최종 calcAttack이 0클램프) + EnemyActStep을 그
헬퍼로 통일(중복 제거). RED-GREEN 테스트로 loss>str 구간 검증. 86개.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 18:50:22 +09:00
926733dbef fix(deck): firstCardDamageBonus 게이트 class→kind (영구 미발동 버그)
ChargedBlow(class=warrior, kind=Attack, firstCardDamageBonus=2)의 첫-카드
보너스가 Lua·JS 양쪽에서 `c.class == "Attack"`로 게이트돼 있었다. class는
warrior/bandit 등이라 절대 "Attack"이 아니어서 보너스가 영구 미발동(죽은 코드).
kind가 "Attack"이므로 `c.kind == "Attack"`로 수정(양쪽 미러).

RED-GREEN 회귀 테스트 추가: class=warrior·kind=Attack 카드의 첫 카드
보너스로 7뎀 → 1턴 처치(미수정 시 5뎀 2턴). 테스트 84→85.
산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 18:21:08 +09:00
d7813f9912 fix(deck): drawDamage/drawPoison를 per-play→per-draw로 (카드 설명과 일치)
Speedster("카드를 뽑을 때마다 피해")·CorrosiveWave("뽑을 때마다 중독")의
효과가 Lua에서는 ResolveCardEffects 끝에서 카드를 '낼 때마다' 발동해
카드 설명·JS 미러(sim-balance draw())와 어긋났다.

per-play 블록을 ApplyDrawTrigger() 메서드로 추출하고 DrawCards에서
뽑은 카드마다 호출해 per-draw로 정렬(JS와 동일). JS 미러는 이미
per-draw라 무변경 — 양쪽 일치.

부수: CheckCombatEnd에 self.CombatOver 멱등 가드 추가. per-draw로
호출이 잦아져(턴시작 5드로 등) 전멸 시 보상/골드/유물이 중복
발동할 수 있던 잠재 버그를 차단(공격+drawDamage 카드에서도 위험했음).

밸런스 영향: Speedster(Power)가 매턴 시작 드로에도 발동해 강해짐 —
값 튜닝은 sim으로 후속 조정 가능. 산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 18:17:01 +09:00
e6f351420b fix(deck): BindButtons 1회 바인드 가드로 2회차 런 핸들러 중복 차단
StartRun이 run마다 BindButtons를 호출하는데 앞 7개 핸들러만
disconnect 가드돼 있고 reward/skip/map/shop/monster/relic/potion/job
등 ~30개 ConnectEvent는 미가드라, 2회차+ 런에서 핸들러가 누적된다.
특히 PickReward는 RewardChoices·CombatOver를 클리어하지 않아 중복
핸들러로 두 번 불리면 같은 보상 카드가 RunDeck에 2번 추가된다.

BindLobbyButtons/BindSoulShopButtons와 동일하게 self.ButtonsBound
1회 가드를 추가(런 UI 엔티티는 영속이라 1회 바인드로 충분).
신규 prop ButtonsBound 선언. 산출물 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUvHKjrt8jqLzDeCsRRGmj
2026-06-29 18:02:49 +09:00
b4a4560678 Merge pull request 'fix: 버리기-뽑기 카드 미선언 prop 추가 (no such field 크래시)' (#95) from fix/discard-draw-props into main 2026-06-29 17:51:50 +09:00
1e0b91294a Merge pull request 'refactor: SlayDeckController 관심사별 모듈 분리 + 코드 규칙 3종' (#94) from refactor/cb-concern-modules into main 2026-06-29 17:39:18 +09:00
8f8f17bd8f fix(deck): 버리기-뽑기 카드의 미선언 prop 추가 (no such field 크래시)
`DiscardPostDraw`·`DiscardDrawPerPick`가 hand.mjs(BeginDiscardSelection·
AutoDiscardHand·FinishDiscardSelection·SelectDiscardSlot)에서 대입되는데
gen-slaydeck.mjs prop 목록에 선언되지 않아 런타임 "cannot set DiscardPostDraw,
no such field"로 BeginDiscardSelection이 중단됨. 그 직전 DiscardSelectRemaining/
Total이 이미 set되어 게임이 버리기-선택 모드에 갇혀, 이후 모든 카드(공중제비 포함)
클릭이 버리기 픽으로 처리됨("2장 버린다 표시 + 동작 없음").

근본 원인: 형제 prop DiscardPostShiv·DiscardShivPerPick는 선언됐으나
draw 변형 2개가 누락. 선언만 추가(병렬 패턴).

신규 가드 tools/verify/cbprops.mjs: cb의 `self.X =` 대입 ↔ 선언 prop 대조,
미선언 = no such field 후보 검출. 수정 전 2개 누락→후 0.
검증: cbprops 0·cbgap GAP 0·테스트 93/93. 산출물(codeblock) 재생성 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 02:44:06 +09:00
478fd1e5f0 docs(rules): PR 머지 후 브랜치 삭제·변수명·관심사 모듈화 규칙 추가
RULES.md 규칙 3종:
- §1: codeblock 메서드를 관심사별 모듈로(화면전환=screens·NPC=npc·
  포지션=navigation/layout). 17→20종. 새 메서드는 알맞은 모듈에.
- §4: PR 머지 후 머지된 feature/docs 브랜치 로컬·원격 삭제
  (merge-base --is-ancestor로 확인, 미머지·codex/* 보존).
- §8 신규: cb Lua 지역변수는 의미명(e→entity 등), 반복 인덱스만 단일문자 허용.

설계 문서 docs/superpowers/specs/2026-06-26-cb-concern-modules-design.md 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 18:40:53 +09:00
0c1dfd3162 refactor(cb): 분리 모듈 단일문자 지역변수 의미명으로 개명
손댄 모듈(screens·navigation·layout)의 단일문자 Lua 지역변수를
의미가 드러나는 이름으로 변경(규칙 시연):
- ActivateUIGroups: grp/n/g → enableGroup/name/group
- RenderSoulLabel: s → soulPoints
- BindLobbyButtons: e/fn → entity/handler
- GoLobbyMap: lp/go → localPlayer/tryTeleport
- TeleportToActMap: lp → localPlayer
- PositionMonsterSlot: m/tr/wp/e → monster/transform/worldPos/slotEntity

검증: cbset = 위 6개 메서드만 본문 변경(추가/삭제 0), cbgap GAP 0, 테스트 93/93.
산출물 재생성(SlayDeckController.codeblock) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 18:39:39 +09:00
8d2e320d60 refactor(cb): 컨트롤러 횡단 관심사 모듈 분리 (이동·본문 무변경)
화면 전환·NPC·포지션 관심사를 state.mjs/render.mjs/runend.mjs에서
전용 모듈로 분리. 런타임은 단일 SlayDeckController codeblock 유지.

- state.mjs → screens.mjs 개명 (화면 라우팅·버튼 바인딩)
- npc.mjs 신규: OnLobbyNpcInteract
- navigation.mjs 신규: GoLobbyMap·TeleportToActMap (월드 텔레포트)
- layout.mjs 신규: PositionMonsterSlot (UI 슬롯 배치)
- gen-slaydeck.mjs import·spread 갱신

검증: tools/verify/cbset.mjs (순서 무관 집합 비교) = 189/189 무손실,
본문/exec/params 변경 0. cbgap GAP 0, 테스트 93/93.
산출물 재생성(SlayDeckController.codeblock) 포함 — 메서드 순서만 바뀜.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 18:35:51 +09:00
7b5e79bcf2 Merge pull request 'Add Excel roundtrip for cards data' (#93) from codex/cards-excel-json into main
Reviewed-on: #93
2026-06-24 21:55:35 +09:00
39356e5038 Add cards Excel roundtrip tools 2026-06-24 21:52:24 +09:00
4878e5d8cc Merge pull request 'fix: 교활 카드 초기 필드 선언 추가' (#92) from codex/fix-skill-sly-fields into main
Reviewed-on: #92
2026-06-23 23:30:40 +09:00
5f047ae41b Revert "fix: 전투 데미지 팝업 순서 복구"
This reverts commit d83a377865.
2026-06-23 22:55:42 +09:00
d83a377865 fix: 전투 데미지 팝업 순서 복구 2026-06-23 22:00:20 +09:00
8292e26726 fix: 보상 스크린 상태 추가 2026-06-23 21:56:33 +09:00
07ae56909a fix: 쉬브 첫 피해 보너스 상태 추가 2026-06-23 21:47:49 +09:00
f33018194f fix: 교활 카드 초기 필드 추가 2026-06-23 21:40:17 +09:00
a682baa5dc Merge pull request 'fix: 스킬 반복 필드 중복 정리' (#91) from codex/fix-skill-repeat-fields into main
Reviewed-on: #91
2026-06-23 21:38:10 +09:00
6d0ebde863 fix: 스킬 반복 필드 정리 2026-06-23 21:36:27 +09:00
4ce87bec5d fix: 전투 드로우 필드 선언 추가 2026-06-23 21:28:15 +09:00
0cf714dca6 fix: 카드 호버 nil 가드 추가 2026-06-23 21:24:34 +09:00
fd00ed12d9 Merge pull request 'docs(readme): 도적 카드 공용 효과 항목 추가 + 테스트 수 갱신' (#90) from docs/readme-bandit-effects into main 2026-06-23 11:24:50 +09:00
74a2106021 docs(readme): 도적 카드 공용 효과 항목 추가 + 테스트 수 갱신
구현 기능 표에 "도적 카드 공용 효과" 행 추가 — 카드명 하드코딩 대신
data/cards.json 공용 필드로 효과 표현(불가침·x-cost·드로우 비례·다음 스킬
반복·처치 보상·키워드 하이라이트·독 버스트 등), Lua+JS 미러 양쪽 구현,
필드 사전 docs/card-effect-fields.md. 밸런스 시뮬 단위테스트 현 84종 명시.
(codex PRs #82~#89로 main 반영된 내용 README 동기화)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 11:24:03 +09:00
a2044e20af Merge pull request 'feat: 도적 공용 카드 효과 구현' (#89) from codex/bandit-shared-effects into main
Reviewed-on: #89
2026-06-22 22:18:15 +09:00
a3d5174b34 feat: 도적 공용 효과 정리 2026-06-22 21:59:28 +09:00
4f9be00ff2 Merge pull request '도적 카드 공통 효과 훅 정리' (#88) from codex/bandit-shared-hooks-pr into main 2026-06-22 17:50:37 +09:00
24a79a309f Add shared bandit effect hooks 2026-06-22 16:08:05 +09:00