- MSW 로컬 워크스페이스 데이터(Global/RootDesk/map/ui) 형상관리 시작 - Slay the Spire 풍 덱빌더 전투 프레임워크 초안 포함 - README.md: 협업(로컬 워크스페이스+git) 방식·구조·프레임워크 현황 문서화 - .gitignore: Authorization 토큰 포함된 .mcp.json/.codex 제외 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
121 lines
5.3 KiB
Markdown
121 lines
5.3 KiB
Markdown
# SlayMaple
|
|
|
|
[MapleStory Worlds(MSW)](https://maplestoryworlds.nexon.com/) 기반으로 제작하는 **Slay the Spire 풍 덱빌더 로그라이크** 월드.
|
|
턴제 카드 전투, 덱 구성, 보상 선택, 맵 노드 진행을 메이플 월드 위에서 구현하는 것을 목표로 합니다.
|
|
|
|
> 이 저장소는 MSW **로컬 워크스페이스(Local Workspace)** 데이터를 git으로 형상관리하기 위한 것입니다.
|
|
> 공동작업자는 이 저장소를 통해 월드 데이터를 주고받습니다. (클라우드 공동제작 모드 미사용)
|
|
|
|
---
|
|
|
|
## 협업 방식 (중요)
|
|
|
|
MSW에는 두 가지 공동작업 모드가 있고, 이 프로젝트는 **로컬 워크스페이스 + git** 방식을 사용합니다.
|
|
|
|
| | 클라우드 공동제작 | **로컬 워크스페이스 + git (이 프로젝트)** |
|
|
|---|---|---|
|
|
| 데이터 위치 | 넥슨 클라우드 단일 월드 | 각자 PC 로컬 + git 원격 |
|
|
| 공유 단위 | Check In / Check Out | `git commit` / `push` / `pull` |
|
|
| 충돌 처리 | 엔티티 잠금 | git merge |
|
|
|
|
> ⚠️ 로컬 워크스페이스를 켜면 메이커 내 실시간 동기화(클라우드 공동제작)는 비활성화됩니다.
|
|
> 따라서 **변경 공유는 전적으로 git을 통해** 이루어집니다.
|
|
|
|
### 내 작업을 공유하기
|
|
```bash
|
|
git add .
|
|
git commit -m "작업 내용"
|
|
git push
|
|
```
|
|
|
|
### 공동작업자 작업 받아오기
|
|
```bash
|
|
git pull
|
|
```
|
|
받아온 뒤, 메이커에서 **로컬 워크스페이스를 다시 로드(reload)** 해야 새 codeblock/모델 파일이 에디터 상태로 반영됩니다.
|
|
|
|
> 💡 같은 파일을 동시에 수정하면 git 충돌이 날 수 있으니, **서로 다른 맵/codeblock/UI를 나눠서** 작업하는 것을 권장합니다.
|
|
|
|
---
|
|
|
|
## 디렉토리 구조
|
|
|
|
```
|
|
slaymaple/
|
|
├── Global/ # 월드 전역 설정 · 공용 모델 · 게임로직
|
|
│ ├── common.gamelogic # SlayCardCatalog / SlayRunState / SlayCombatManager 부착 지점
|
|
│ ├── Player.model # 플레이어 모델
|
|
│ ├── *.model # 몬스터 등 공용 모델
|
|
│ ├── WorldConfig.config # 월드 설정
|
|
│ └── ...
|
|
├── RootDesk/
|
|
│ └── MyDesk/ # 작업용 책상 — codeblock(스크립트)·모델·타일셋
|
|
│ ├── Monster.codeblock
|
|
│ ├── MonsterAttack.codeblock
|
|
│ ├── PlayerAttack.codeblock
|
|
│ ├── PlayerHit.codeblock
|
|
│ ├── UIPopup.codeblock
|
|
│ ├── UIToast.codeblock
|
|
│ └── RectTileData_Henesys.tileset
|
|
├── map/
|
|
│ └── map01.map # 메인 맵
|
|
├── ui/ # UI 그룹 (Default / Popup / Toast)
|
|
├── docs/
|
|
│ └── slaymaple_basic_framework.md # 전투 프레임워크 설계 문서
|
|
└── README.md
|
|
```
|
|
|
|
> `.mcp.json`, `.codex/` 는 **Authorization 토큰이 포함**되어 있어 git에서 제외됩니다(`.gitignore`). 각자 로컬에서 직접 구성하세요.
|
|
|
|
---
|
|
|
|
## 게임 프레임워크 현황
|
|
|
|
`Global/common.gamelogic`의 `/common` 엔티티에 부착된 세 컴포넌트가 전투의 핵심입니다.
|
|
|
|
| 컴포넌트 | 역할 |
|
|
|---|---|
|
|
| `SlayCardCatalog` | 카드 데이터, 시작 덱 구성, 보상 풀, 카드 복제 정의 |
|
|
| `SlayRunState` | HP·골드·층수·덱·유물·카드 보상 등 런(run) 영속 데이터 관리 |
|
|
| `SlayCombatManager` | 턴 진행, 드로우/버림/소멸 더미, 에너지, 적 의도, 방어도, 데미지, 승패 처리 |
|
|
|
|
### 프로토타입 흐름
|
|
1. `SlayRunState`가 HP 80 · 10장 시작 덱으로 새 런 시작
|
|
2. `SlayCombatManager`가 데모 전투 자동 시작
|
|
3. 매 플레이어 턴: 에너지 3 회복, 방어도 초기화, 적 의도 갱신, 5장 드로우
|
|
4. 카드 사용 시 에너지 소모 → 데미지/방어/드로우/에너지/상태이상 적용 → 버림 또는 소멸
|
|
5. 턴 종료 시 손패 버림, 적 의도 실행, 상태이상 처리, 다음 턴 시작
|
|
6. 전투 승리 시 잔여 HP 저장, 골드 15 지급, 카드 보상 3종 생성
|
|
|
|
### 유용한 스크립트 호출
|
|
`/common` 엔티티에 붙은 스크립트에서:
|
|
```lua
|
|
self.Entity.SlayCombatManager:PlayCard(1, 1)
|
|
self.Entity.SlayCombatManager:EndPlayerTurn()
|
|
self.Entity.SlayCombatManager:DebugPlayFirstPlayable()
|
|
self.Entity.SlayRunState:PickReward(1)
|
|
self.Entity.SlayCombatManager:StartCombat("elite")
|
|
```
|
|
|
|
상세 설계는 [`docs/slaymaple_basic_framework.md`](docs/slaymaple_basic_framework.md) 참조.
|
|
|
|
---
|
|
|
|
## 다음 구현 단계
|
|
- [ ] HP·방어도·에너지·적 의도·손패 5버튼을 렌더링하는 전투 UI
|
|
- [ ] 전투/엘리트/상점/휴식/이벤트/보스 노드를 가진 맵 노드 UI
|
|
- [ ] `OnCombatStart` / `OnCardPlayed` / `OnTurnStart` / `OnCombatReward` 훅을 가진 유물 시스템
|
|
- [ ] 적 행동 패턴을 데이터로 정의 (현재 단순 의도 패턴 → 무브셋)
|
|
- [ ] 런 루프 완성 후 저장/불러오기
|
|
|
|
---
|
|
|
|
## 신규 참여자 셋업
|
|
1. 저장소 클론
|
|
```bash
|
|
git clone https://gitea.gahusb.synology.me/gahusb/maplecontest.git slaymaple
|
|
```
|
|
2. MSW Maker에서 이 폴더를 **로컬 워크스페이스 경로**로 지정해 월드 열기
|
|
3. `.mcp.json` / `.codex/` 는 git에 없으므로, 본인 토큰으로 직접 생성 (MCP·Codex 사용 시)
|
|
4. 작업 전 항상 `git pull`, 작업 후 `git add/commit/push`
|