docs: Progress Quest 언급 제거 + README 전면 재작성
Some checks failed
CI / analyze-and-test (push) Has been cancelled

- README: 프로젝트 설명, 게임 시스템, 스탯 표 포함 재작성
- CLAUDE.md, ARCHITECTURE.md: PQ 참조 제거
- skill_data, pq_logic, game_state, game_mutations: 주석에서 PQ 언급 제거
- analysis/market-analysis: PQ 언급 제거
This commit is contained in:
JiWoong Sul
2026-03-31 00:22:28 +09:00
parent b346fdebe8
commit 0116db1056
8 changed files with 59 additions and 35 deletions

View File

@@ -68,7 +68,7 @@ Config.dfm에서 추출한 종족, 직업, 스킬, 포션, 스토리 데이터.
| 파일 | 역할 | | 파일 | 역할 |
|------|------| |------|------|
| `pq_config_data.dart` | PQ 원본 데이터 (몬스터, 아이템, 주문 등) | | `pq_config_data.dart` | 게임 원본 정적 데이터 (몬스터, 아이템, 주문 등) |
| `class_data.dart` | 직업 정의 + 특성 | | `class_data.dart` | 직업 정의 + 특성 |
| `race_data.dart` | 종족 정의 + 특성 | | `race_data.dart` | 종족 정의 + 특성 |
| `skill_data.dart` | 68개 스킬 정의 | | `skill_data.dart` | 68개 스킬 정의 |

View File

@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## 프로젝트 개요 ## 프로젝트 개요
Askii Never Die는 Progress Quest 6.4의 핵심 메커니즘을 기반으로, 독자적 세계관("디지털 판타지")과 확장된 시스템으로 재구성한 오프라인 싱글플레이어 방치형 RPG입니다. 네트워크 기능은 제외됩니다. Askii Never Die는 "디지털 판타지" 세계관의 오프라인 싱글플레이어 방치형 RPG입니다. ASCII 아트 비주얼과 자동 전투 시스템이 특징이며, 네트워크 기능은 제외됩니다.
## 빌드 및 실행 ## 빌드 및 실행
@@ -29,7 +29,7 @@ flutter test
lib/ lib/
├── main.dart # 앱 진입점 ├── main.dart # 앱 진입점
├── data/ # 정적 데이터 (Config.dfm 추출 + 확장) ├── data/ # 정적 데이터 (Config.dfm 추출 + 확장)
│ ├── pq_config_data.dart # PQ 원본 정적 데이터 │ ├── pq_config_data.dart # 게임 원본 정적 데이터
│ ├── class_data.dart # 직업 데이터 │ ├── class_data.dart # 직업 데이터
│ ├── race_data.dart # 종족 데이터 │ ├── race_data.dart # 종족 데이터
│ ├── skill_data.dart # 스킬 데이터 │ ├── skill_data.dart # 스킬 데이터

View File

@@ -1,6 +1,6 @@
# Ascii Never Die # ASCII Never Die
Progress Quest 6.4의 핵심 메커니즘을 기반으로, "디지털 판타지" 세계관과 확장된 시스템으로 재구성한 오프라인 싱글플레이어 방치형 RPG. "디지털 판타지" 세계관의 오프라인 방치형 RPG. ASCII 아트 비주얼과 자동 전투 시스템으로, 켜두기만 하면 캐릭터가 성장합니다.
## 스크린샷 ## 스크린샷
@@ -15,25 +15,47 @@ Progress Quest 6.4의 핵심 메커니즘을 기반으로, "디지털 판타지"
## 주요 기능 ## 주요 기능
- **6개 화면** -- 타이틀/세이브 선택, 캐릭터 생성(3d6 스탯 롤), 게임 진행(장비/인벤토리/퀘스트/스킬/전투로그/스토리), 아레나 PvP, 명예의 전당, 설정 - **방치형 자동 전투** -- 전투, 레벨업, 퀘스트, 스토리가 자동으로 진행
- **완전 오프라인** -- 네트워크 불필요. 모든 게임 데이터와 세이브가 로컬에 저장 - **ASCII 아트 애니메이션** -- Canvas 기반 전투/탐험/마을 씬, 21개 종족별 캐릭터 프레임
- **수익화** -- AdMob 리워드/인터스티셜 광고 + IAP 광고 제거/프리미엄 - **깊은 캐릭터 빌드** -- 21개 종족, 18개 직업, 68개 스킬, 11개 장비 슬롯
- **다국어 지원** -- 한국어, 영어, 일본어 (앱 UI + 게임 데이터) - **로컬 아레나** -- 클리어한 캐릭터들끼리 1:1 전투, 장비 약탈
- **ASCII 아트 애니메이션** -- Canvas 기반 전투/탐험/마을 씬, 종족별 캐릭터 프레임 - **완전 오프라인** -- 네트워크 불필요, 모든 데이터가 로컬에 저장
- **보안** -- 세이브 파일 HMAC-SHA256 무결성 검증, IAP 영수증 RSA 서명 검증 - **다국어 지원** -- 한국어, 영어, 일본어
## 게임 시스템
### 스탯
| 스탯 | 효과 |
|------|------|
| STR | 물리 공격력, 쳐내기 |
| CON | 방어력, 최대 HP, 방패 방어 |
| DEX | 크리티컬, 회피, 명중, 공격 속도 |
| INT | 마법 공격력, DoT 데미지, MP |
| WIS | 마법 방어력, DoT 틱 간격, MP |
| CHA | 상점 할인 (최대 15%), 희귀 아이템 드롭률 보정 |
### 장비 희귀도
Common → Uncommon → Rare → Epic → Legendary (스탯 1.0x ~ 3.0x)
### 스킬 시스템
68개 전투 스킬 (공격/회복/버프/디버프), 쿨타임 기반, 자동 선택 AI
### 수익화
- AdMob 리워드/인터스티셜 광고
- IAP 광고 제거 + 프리미엄 (영구 5배속, 되돌리기 3회, 보물 상자 10개, 오프라인 2배)
## 기술 스택 ## 기술 스택
| 구분 | 기술 | | 구분 | 기술 |
|------|------| |------|------|
| 프레임워크 | Flutter 3.x / Dart ^3.9.2 | | 프레임워크 | Flutter 3.x / Dart 3.9+ |
| 상태 관리 | Stream + 직접 관리 | | 상태 관리 | ValueNotifier + Stream |
| 코드 생성 | freezed + json_serializable | | 코드 생성 | freezed + json_serializable |
| DI | GetIt (서비스 로케이터) | | DI | GetIt (서비스 로케이터) |
| 광고 | google_mobile_ads 7.x | | 광고 | google_mobile_ads 7.x |
| 인앱결제 | in_app_purchase 3.x | | 인앱결제 | in_app_purchase 3.x |
| 보안 저장 | flutter_secure_storage, crypto (HMAC), pointycastle (RSA) | | 보안 | flutter_secure_storage, HMAC-SHA256, RSA 서명 검증 |
| 오디오 | just_audio | | 오디오 | just_audio (BGM 11곡, SFX 10종) |
| 폰트 | JetBrainsMono (ASCII), PressStart2P (레트로 UI) | | 폰트 | JetBrainsMono (ASCII), PressStart2P (레트로 UI) |
## 빌드 및 실행 ## 빌드 및 실행
@@ -48,6 +70,9 @@ dart run build_runner build --delete-conflicting-outputs
# 실행 (-d macos, -d chrome, -d android 등) # 실행 (-d macos, -d chrome, -d android 등)
flutter run flutter run
# 릴리즈 빌드 (난독화 포함)
flutter build appbundle --obfuscate --split-debug-info=build/debug-info
# 검증 # 검증
dart format --set-exit-if-changed . dart format --set-exit-if-changed .
flutter analyze flutter analyze
@@ -58,7 +83,7 @@ flutter test
``` ```
lib/ lib/
├── main.dart # 앱 진입점 ├── main.dart # 앱 진입점 + 에러 핸들링
├── data/ # 정적 게임 데이터 (종족, 직업, 스킬, 포션, 스토리) ├── data/ # 정적 게임 데이터 (종족, 직업, 스킬, 포션, 스토리)
├── l10n/ # 앱 UI 다국어 리소스 (arb) ├── l10n/ # 앱 UI 다국어 리소스 (arb)
└── src/ └── src/
@@ -66,11 +91,12 @@ lib/
├── core/ ├── core/
│ ├── engine/ # 게임 루프, 전투, 보상, 스킬 등 30개 서비스 │ ├── engine/ # 게임 루프, 전투, 보상, 스킬 등 30개 서비스
│ ├── model/ # GameState, 장비, 스킬, 전투 등 데이터 모델 │ ├── model/ # GameState, 장비, 스킬, 전투 등 데이터 모델
│ ├── infrastructure/ # AdMob, IAP 외부 서비스 구현 │ ├── infrastructure/ # AdMob, IAP 외부 서비스
│ ├── di/ # GetIt 서비스 로케이터 + 인터페이스 │ ├── di/ # GetIt 서비스 로케이터 + 인터페이스
│ ├── audio/ # BGM/SFX 오디오 서비스 │ ├── audio/ # BGM/SFX 오디오 서비스
│ ├── storage/ # 세이브/설정/통계 저장소 │ ├── storage/ # 세이브/설정/통계 저장소
── util/ # RNG, 밸런스 상수, PQ 로직 헬퍼 ── logging/ # 로컬 에러 로거
│ └── util/ # RNG, 밸런스 상수, 로직 헬퍼
├── features/ ├── features/
│ ├── front/ # 타이틀/세이브 선택 │ ├── front/ # 타이틀/세이브 선택
│ ├── new_character/ # 캐릭터 생성 │ ├── new_character/ # 캐릭터 생성
@@ -80,8 +106,8 @@ lib/
│ └── settings/ # 설정 │ └── settings/ # 설정
└── shared/ # 테마, 레트로 위젯, ASCII 애니메이션 └── shared/ # 테마, 레트로 위젯, ASCII 애니메이션
example/pq/ # Delphi 원본 소스 (참조용) test/ # 단위/위젯/회귀 테스트 (276개)
test/ # 단위/위젯/회귀 테스트 (25개 파일) analysis/ # 프로젝트 감사/시장 분석 리포트
``` ```
아키텍처 상세는 [ARCHITECTURE.md](ARCHITECTURE.md) 참조. 아키텍처 상세는 [ARCHITECTURE.md](ARCHITECTURE.md) 참조.
@@ -90,7 +116,7 @@ test/ # 단위/위젯/회귀 테스트 (25개 파일)
| 버전 | 날짜 | 주요 내용 | | 버전 | 날짜 | 주요 내용 |
|------|------|-----------| |------|------|-----------|
| 1.1.0 | 2026-03-30 | IAP RSA 검증, HMAC 세이브, CI, 테스트 105개 추가 | | 1.1.0 | 2026-03-30 | IAP RSA 검증, HMAC 세이브, CI, 아키텍처 개선, 테스트 276개 |
| 1.0.1 | 2026-03-19 | 초기 릴리즈 (Google Play 내부 테스트) | | 1.0.1 | 2026-03-19 | 초기 릴리즈 (Google Play 내부 테스트) |
전체 변경 이력은 [CHANGELOG.md](CHANGELOG.md) 참조. 전체 변경 이력은 [CHANGELOG.md](CHANGELOG.md) 참조.
@@ -99,5 +125,4 @@ test/ # 단위/위젯/회귀 테스트 (25개 파일)
비공개 프로젝트. 무단 배포 금지. 비공개 프로젝트. 무단 배포 금지.
Progress Quest 원본 소스(`example/pq/`)는 참조용으로만 포함되어 있습니다.
폰트 라이선스: JetBrains Mono (SIL OFL 1.1), Press Start 2P (SIL OFL 1.1). 폰트 라이선스: JetBrains Mono (SIL OFL 1.1), Press Start 2P (SIL OFL 1.1).

View File

@@ -6,7 +6,7 @@
## 프로젝트 포지셔닝 ## 프로젝트 포지셔닝
**장르**: 오프라인 방치형 Idle RPG + ASCII 아트 **장르**: 오프라인 방치형 Idle RPG + ASCII 아트
**원형**: Progress Quest 6.4 **원형**: 클래식 방치형 RPG
**수익화**: AdMob 광고 + IAP 광고 제거 프리미엄 (₩9,900) **수익화**: AdMob 광고 + IAP 광고 제거 프리미엄 (₩9,900)
**플랫폼**: Android (출시), iOS (예정) **플랫폼**: Android (출시), iOS (예정)
**다국어**: 한/영/일 **다국어**: 한/영/일
@@ -33,7 +33,7 @@
## 3. Askii Never Die 차별화 ## 3. Askii Never Die 차별화
1. **순수 ASCII 비주얼** — 그래픽 피로도 제로 1. **순수 ASCII 비주얼** — 그래픽 피로도 제로
2. **Progress Quest 정통 계승** — Zero-player 철학의 모바일 최적화 2. **방치형 RPG 정통 계승** — Zero-player 철학의 모바일 최적화
3. **완전 오프라인** — 데이터/서버 의존 없음 3. **완전 오프라인** — 데이터/서버 의존 없음
4. **3개 국어** — 텍스트 게임에서 현지화가 핵심 경쟁력 4. **3개 국어** — 텍스트 게임에서 현지화가 핵심 경쟁력
@@ -49,14 +49,14 @@
## 5. 타겟 유저 ## 5. 타겟 유저
- **코어**: 30-40대 남성, IT 종사자, MUD/Progress Quest 경험자 - **코어**: 30-40대 남성, IT 종사자, MUD/방치형 RPG 경험자
- **서브**: 디지털 디톡스 선호 미니멀리즘 게이머 - **서브**: 디지털 디톡스 선호 미니멀리즘 게이머
- **페르소나**: "업무 중 옆에 켜두어도 눈치 안 보이는 게임" - **페르소나**: "업무 중 옆에 켜두어도 눈치 안 보이는 게임"
## 6. 성장 전략 ## 6. 성장 전략
1. **커뮤니티 바이럴**: Reddit r/incremental_games, DC인사이드, 5ch 1. **커뮤니티 바이럴**: Reddit r/incremental_games, DC인사이드, 5ch
2. **ASO 키워드**: ASCII, MUD, Progress Quest, Text RPG, Idle RPG 2. **ASO 키워드**: ASCII, MUD, 방치형 RPG, Text RPG, Idle RPG
3. **크로스 플랫폼**: Android → iOS → Steam (PC) 3. **크로스 플랫폼**: Android → iOS → Steam (PC)
4. **유저 기여**: ASCII 아트/이벤트 모딩 시스템 (장기) 4. **유저 기여**: ASCII 아트/이벤트 모딩 시스템 (장기)

View File

@@ -2,8 +2,8 @@ import 'package:asciineverdie/src/core/model/skill.dart';
/// 게임 내 스킬 정의 /// 게임 내 스킬 정의
/// ///
/// PQ 스펠을 기반으로 68개 전투 스킬로 재구성 /// 68개 전투 스킬 정의
/// 스펠 이름(영문)으로 스킬 조회 가능 /// 스킬 ID(영문)로 조회 가능
class SkillData { class SkillData {
SkillData._(); SkillData._();
@@ -1081,9 +1081,9 @@ class SkillData {
// 스펠 이름 → 스킬 매핑 // 스펠 이름 → 스킬 매핑
// ============================================================================ // ============================================================================
/// PQ 스펠 이름으로 스킬 조회 /// 스킬 ID로 스킬 조회
/// ///
/// 스펠 이름(영문) 키로 사용하여 해당 전투 스킬을 반환 /// 스킬 ID(영문) 키로 사용하여 해당 전투 스킬을 반환
static const Map<String, Skill> spellNameToSkill = { static const Map<String, Skill> spellNameToSkill = {
// 공격 스킬 // 공격 스킬
'Stack Trace': stackTrace, 'Stack Trace': stackTrace,

View File

@@ -5,7 +5,7 @@ import 'package:asciineverdie/src/core/model/game_state.dart';
import 'package:asciineverdie/src/core/model/pq_config.dart'; import 'package:asciineverdie/src/core/model/pq_config.dart';
import 'package:asciineverdie/src/core/util/pq_logic.dart' as pq_logic; import 'package:asciineverdie/src/core/util/pq_logic.dart' as pq_logic;
/// Game state mutations that mirror the original PQ win/reward logic. /// 게임 상태 변경(mutation) 함수 — 보상, 장비, 스탯 획득 로직.
class GameMutations { class GameMutations {
const GameMutations(this.config); const GameMutations(this.config);

View File

@@ -28,8 +28,7 @@ import 'package:asciineverdie/src/core/util/deterministic_random.dart';
/// 게임 전체 상태 (Game State) /// 게임 전체 상태 (Game State)
/// ///
/// Progress Quest 구조를 미러링하는 최소 스켈레톤 상태. /// 게임 진행에 필요한 모든 데이터를 포함하는 불변(immutable) 상태 객체.
/// 로직은 Delphi 소스에서 충실하게 포팅됨.
class GameState { class GameState {
GameState({ GameState({
required DeterministicRandom rng, required DeterministicRandom rng,

View File

@@ -1,6 +1,6 @@
/// Progress Quest 핵심 로직 모듈 /// 게임 핵심 로직 모듈
/// ///
/// 원본 Delphi 소스(Main.pas / NewGuy.pas)의 유틸리티 함수들을 포팅. /// 유틸리티 함수 모음.
/// 이 파일은 분할된 모듈들을 re-export하여 기존 코드 호환성 유지. /// 이 파일은 분할된 모듈들을 re-export하여 기존 코드 호환성 유지.
// 랜덤/확률 함수 // 랜덤/확률 함수