docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
---
|
||||
id: wiki-2026-0508-puzzles-survival
|
||||
title: "Puzzles & Survival"
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [P&S, Puzzles and Survival, 37Games P&S]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [game-design, hybrid-casual, monetization, 4x, match-3]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: csharp
|
||||
framework: unity
|
||||
---
|
||||
|
||||
# Puzzles & Survival
|
||||
|
||||
## 매 한 줄
|
||||
> **"매 hybrid casual 의 archetype — match-3 hook + 4X meta — 의 monetization printing press"**. 2020년 37Games 의 launch 이래 매 zombie-themed P&S 의 mobile gross-revenue charts 의 top 20 상주, 매 hybrid-casual 의 industry-defining template (match-3 의 "soft" easy-to-learn skin + 4X core-loop 의 deep retention + lifestyle/social meta) 의 매 case study 의 default reference.
|
||||
|
||||
## 매 핵심
|
||||
|
||||
### 매 hybrid casual structure
|
||||
- **Layer 1 (hook)**: match-3 puzzle — 매 첫 5 분 의 frictionless onboarding. 매 ad-creative 의 100% 의 match-3 footage.
|
||||
- **Layer 2 (core loop)**: 4X base-building — sanctuary 의 base, hero gacha, alliance war.
|
||||
- **Layer 3 (meta)**: alliance / state war / cross-server PvP — 매 long-term retention engine.
|
||||
- **매 핵심 trick**: match-3 의 ad bait. Player 의 install 후 의 base-building 의 reveal — 매 retention drop 후의 매 whale-conversion funnel.
|
||||
|
||||
### 매 4X meta
|
||||
- **Sanctuary**: HQ-level driven progression. 매 build-time gate (P2W bypass via gem speedup).
|
||||
- **Hero gacha**: SSR/SR/R rarity. Pity 의 70-pull soft / 200 의 hard. Dupe 의 ascension shards.
|
||||
- **Alliance**: 100-member cap. Reinforcement / rally attack / trade. Diplomatic identity 의 server politics 의 driver.
|
||||
- **State war**: Cross-server seasonal. Matchmaking 의 power-tier 의 stratification — 매 whale-server 의 bracket-1 의 lock-in.
|
||||
|
||||
### 매 monetization
|
||||
1. **Daily packs** (~$0.99 / $4.99 / $9.99) — 매 ARPDAU 의 floor.
|
||||
2. **Hero summon bundles** (~$19.99 / $49.99) — 매 gacha 의 burst-monetization.
|
||||
3. **VIP** (cumulative spend tier) — 매 long-tail psychological lock-in.
|
||||
4. **War-prep packs** (event-gated, $99.99+) — 매 whale 의 PvP arms-race accelerator.
|
||||
5. **Subscription** (~$14.99/mo) — 매 retention 의 stabilizer.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### Match-3 board state
|
||||
```csharp
|
||||
// Unity / C#
|
||||
public class Match3Board : MonoBehaviour {
|
||||
private const int W = 7, H = 8;
|
||||
private GemType[,] grid = new GemType[W, H];
|
||||
|
||||
public List<(int x, int y)> FindMatches() {
|
||||
var matches = new HashSet<(int, int)>();
|
||||
// Horizontal
|
||||
for (int y = 0; y < H; y++)
|
||||
for (int x = 0; x < W - 2; x++)
|
||||
if (grid[x, y] == grid[x+1, y] && grid[x+1, y] == grid[x+2, y])
|
||||
for (int k = 0; k < 3; k++) matches.Add((x+k, y));
|
||||
// Vertical (analog)
|
||||
return matches.ToList();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Sanctuary build-timer with speedup
|
||||
```csharp
|
||||
public class BuildQueue {
|
||||
public DateTime CompletesAt { get; private set; }
|
||||
public bool TrySpeedup(int gems) {
|
||||
var remaining = (CompletesAt - DateTime.UtcNow).TotalMinutes;
|
||||
var cost = Mathf.CeilToInt((float)remaining / 5f); // 5min/gem
|
||||
if (gems < cost) return false;
|
||||
Wallet.Spend(gems);
|
||||
CompletesAt = DateTime.UtcNow;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Hero gacha with pity
|
||||
```csharp
|
||||
public class HeroSummon {
|
||||
private int pityCount = 0;
|
||||
private const int HARD_PITY = 200;
|
||||
private const float SSR_RATE = 0.015f;
|
||||
|
||||
public Hero Summon() {
|
||||
pityCount++;
|
||||
bool guaranteed = pityCount >= HARD_PITY;
|
||||
if (guaranteed || Random.value < SSR_RATE) {
|
||||
pityCount = 0;
|
||||
return RollSSR();
|
||||
}
|
||||
return Random.value < 0.10f ? RollSR() : RollR();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Alliance rally attack
|
||||
```csharp
|
||||
public class AllianceRally {
|
||||
public int LeaderId;
|
||||
public List<int> Joiners = new();
|
||||
public DateTime LaunchAt;
|
||||
public int TargetX, TargetY;
|
||||
|
||||
public bool Join(int memberId, Army army) {
|
||||
if (DateTime.UtcNow >= LaunchAt) return false;
|
||||
if (Joiners.Count >= 19) return false; // 20 cap incl. leader
|
||||
Joiners.Add(memberId);
|
||||
ReservedTroops[memberId] = army;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Server-power matchmaking
|
||||
```csharp
|
||||
public Server MatchStateWar(Server s) {
|
||||
int tier = s.TotalPower / 1_000_000_000;
|
||||
return AvailableServers
|
||||
.Where(o => Math.Abs(o.TotalPower / 1_000_000_000 - tier) <= 1)
|
||||
.OrderBy(_ => Random.value)
|
||||
.First();
|
||||
}
|
||||
```
|
||||
|
||||
### LTV-driven offer rotation
|
||||
```csharp
|
||||
public Offer SelectOffer(Player p) {
|
||||
var ltv = p.SpendTotal;
|
||||
if (ltv == 0) return offers.StarterPack; // $4.99
|
||||
if (ltv < 50) return offers.BeginnerBundle; // $9.99
|
||||
if (ltv < 500) return offers.MidGameVIP; // $49.99
|
||||
return offers.WhalePack; // $199.99
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Ad creative | Match-3 footage 의 default — 매 install funnel 의 wider top |
|
||||
| Onboarding | Tutorial 의 puzzle-first 5 분, base-build 의 day 2-3 의 reveal |
|
||||
| Whale targeting | War-prep events 의 quarterly cycle |
|
||||
| F2P retention | Daily login + alliance bond — 매 social cost-of-leaving |
|
||||
|
||||
**기본값**: 매 hybrid-casual 의 launching team 의 P&S template 의 study + 매 own-IP 의 skin (zombie 의 X — fantasy/sci-fi/historical 의 reskin).
|
||||
|
||||
## 🔗 Graph
|
||||
- 응용: [[Gacha Mechanics Analysis]] · [[Live Service]] · [[Live Operations (LiveOps)]]
|
||||
- Adjacent: [[4X 시스템 (4X System)]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: hybrid-casual archetype 의 분석, monetization-funnel 의 reverse-engineering, P&S-clone 의 design 의 reference 매.
|
||||
**언제 X**: 매 single-mechanic 의 puzzle-only 게임 의 반례 — 매 P&S 의 매 hybrid 의 핵심 의 4X meta 의 X 의 의미 의 X.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Match-3 만 의 build**: ad-creative 의 misleading 매 D7 retention crash.
|
||||
- **4X-only 직접 노출**: install rate 의 50% 의 drop. 매 puzzle hook 의 의도된 disguise.
|
||||
- **Pity 없는 gacha**: 2026 의 regulated markets (CN/KR/JP) 의 X. Hard-pity 의 mandatory.
|
||||
- **Alliance cap 의 too small**: <50 member 의 social-cost-of-leaving 의 weak.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (Sensor Tower 2024-2025 P&S revenue ~$50M-$80M/month).
|
||||
- 매 37Games official + data.ai (App Annie) cross-reference.
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — hybrid-casual archetype + monetization patterns |
|
||||
Reference in New Issue
Block a user