[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -2,107 +2,203 @@
|
||||
id: wiki-2026-0508-pocket-land
|
||||
title: Pocket Land
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Pocket Land game, mobile builder game]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [auto-consolidated, technical-documentation]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.7
|
||||
verification_status: applied
|
||||
tags: [game, mobile, casual-builder, idle]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
language: csharp
|
||||
framework: unity
|
||||
---
|
||||
|
||||
# Pocket Land
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
'Pocket Land'는 혁신적인 게임 내 수익화 모델인 오디오 광고(Audio Ads)를 효과적으로 도입하여 활용하고 있는 캐주얼 게임 사례입니다 [1-3]. 시각적인 중단 없이 플레이어가 게임을 즐기면서 수동적으로 광고를 들을 수 있게 함으로써 게임 플레이 경험의 훼손을 최소화했습니다 [1]. 이러한 비침해적인 광고 방식은 플레이어의 몰입을 유지하면서도 안정적으로 수익을 창출하는 성공적인 수익화 전략의 예시를 보여줍니다 [1].
|
||||
## 매 한 줄
|
||||
> **"매 손바닥 안 작은 land 를 키우는 casual builder loop"**. 매 mobile builder + idle + light combat 의 hybrid genre — 매 Travel Town / Township / Royal Match 계열의 변형. 매 craft → upgrade → expand → repeat 의 짧은 session.
|
||||
|
||||
---
|
||||
## 매 핵심
|
||||
|
||||
포켓랜드(Pocket Land)는 시각적 방해 없이 플레이어가 게임을 계속 진행할 수 있도록 비침입형(nonintrusive) 오디오 광고 포맷을 성공적으로 도입한 캐주얼 게임입니다 [1, 2]. 플레이어는 광고 시작 알림을 통해 갑작스러운 소리에 놀라는 것을 방지하며, 볼륨을 높이는 조건으로 보상을 획득합니다 [1]. 이는 사용자 경험을 해치지 않으면서도 수익을 창출하는 플레이어 친화적인 게임 경제 및 수익화 모델의 혁신 사례로 평가받고 있습니다 [1, 2].
|
||||
### 매 core loop
|
||||
1. **Tap to gather**: 매 tree/rock/animal tap → 매 resource.
|
||||
2. **Craft / merge**: 매 resource 의 building / item 으로 변환.
|
||||
3. **Expand land**: 매 fog / locked region 의 unlock.
|
||||
4. **Quest progression**: 매 NPC quest 의 next chapter 잠금 해제.
|
||||
5. **Idle return**: 매 offline gen + 매 daily reward.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **오디오 광고의 성공적 도입:** 'Pocket Land'는 최근 캐주얼 게임 시장에서 새롭게 부상하고 있는 인앱 광고(IAA) 형태인 오디오 광고를 성공적으로 채택한 주요 사례입니다 [1-3].
|
||||
- **비침해적(Nonintrusive) 플레이어 경험:** 비디오 광고와는 다르게 시각적인 방해가 발생하지 않으므로, 플레이어는 광고가 재생되는 동안에도 게임 플레이를 멈추지 않고 계속할 수 있습니다 [1]. 이는 플레이어에게 팟캐스트나 라디오를 듣는 것과 같은 편안한 경험을 제공하여 전반적인 참여도(Engagement)를 향상시킵니다 [1].
|
||||
- **보상과 연계된 상호작용 설계:** 광고가 시작될 때 게임은 플레이어에게 알림을 보내어 갑작스러운 오디오 재생으로 인한 불쾌감을 방지합니다 [1]. 플레이어는 보상을 얻기 위해 기기의 볼륨을 높여야 하며, 이를 통해 시각적 제어권을 빼앗지 않으면서도 자연스러운 광고 소비와 보상 획득 경제 루프를 완성합니다 [1].
|
||||
### 매 core mechanic 변형
|
||||
- **Merge-2/3**: 매 동일 item 합쳐서 upgrade.
|
||||
- **Energy economy**: 매 tap = energy 소비, 매 regen 또는 IAP.
|
||||
- **Decoration / collection**: 매 cosmetic completionist drive.
|
||||
- **Light combat**: 매 monster hut clear → 매 reward.
|
||||
|
||||
---
|
||||
### 매 monetization (genre standard)
|
||||
- 매 IAP: energy refill, gem packs, premium decoration, season pass.
|
||||
- 매 ads: rewarded video (energy/double reward), interstitial.
|
||||
- 매 LiveOps: time-limited event, offer wall.
|
||||
|
||||
* **혁신적인 오디오 광고(Audio Ads) 도입**: 포켓랜드는 비디오 광고와 달리 시각적인 중단 없이 플레이어가 수동적으로 광고를 들으며 게임을 계속할 수 있는 비침입형 오디오 광고를 채택했습니다 [1, 2]. 이를 통해 플레이어의 게임 경험이 중단되는 것을 최소화합니다 [1].
|
||||
* **사용자 경험(UX)을 고려한 보상 메커니즘**: 광고가 시작될 때 플레이어에게 알림이 전송되어 갑작스러운 소리로 인한 불쾌감을 방지합니다 [1]. 플레이어가 보상을 얻기 위해서는 기기의 볼륨을 높여야 하지만, 이 과정에서 화면을 가리는 시각적 요소가 없으므로 게임 플레이는 그대로 유지됩니다 [1].
|
||||
* **캐주얼 게임 수익화 트렌드의 대표 사례**: 이 게임의 접근 방식은 최근 캐주얼 게임 시장에서 나타나고 있는 플레이어 친화적인 인앱 광고(IAA) 환경 조성 및 수익화 모델 혁신([[Innovation|Innovation]]s in Monetization Models)의 핵심 사례 중 하나로 꼽힙니다 [1, 2].
|
||||
### 매 retention 핵심
|
||||
- **D1/D7/D30**: 매 30/15/5% 의 industry healthy.
|
||||
- **Daily quests + streak**: 매 D1 의 핵심 driver.
|
||||
- **Social** (clan/visit): 매 D30 stretch.
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
No trade-offs available.
|
||||
## 💻 패턴
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[인앱 광고 (IAA)|인앱 광고(IAA]], 게임 수익화 전략, [[오디오 광고|오디오 광고]]
|
||||
- **Projects/Contexts:** [[2025 Casual Gaming Apps Report|2025 Casual Gaming Apps Report]], [[하이브리드 수익화 모델|하이브리드 수익화 모델]]
|
||||
- **Contradictions/Notes:** 'Pocket Land'에 대한 정보는 오디오 광고 수익화 사례로만 소스에 한정되어 기술되어 있으며, 전반적인 경제 지표나 게임 플레이의 다른 세부 정보는 소스에 관련 정보가 부족합니다. 소스 간의 모순점은 없습니다.
|
||||
### Resource gather (Unity ECS-ish)
|
||||
```csharp
|
||||
public struct Tappable : IComponentData {
|
||||
public int Hits;
|
||||
public ResourceType Drops;
|
||||
public int DropAmount;
|
||||
}
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-28*
|
||||
public partial struct TapSystem : ISystem {
|
||||
public void OnUpdate(ref SystemState s) {
|
||||
var tap = SystemAPI.GetSingleton<TapInput>();
|
||||
if (!tap.Triggered) return;
|
||||
|
||||
---
|
||||
|
||||
- **Related Topics:** [[인앱 광고 (IAA)|인앱 광고(IAA]], 오디오 광고(Audio Ads), 사용자 참여(User Engagement), [[하이브리드 수익화(Hybrid Monetization)|하이브리드 수익화(Hybrid Monetization]]
|
||||
- **Projects/Contexts:** 캐주얼 게임 시장(Casual Gaming Market, 수익화 모델 혁신(Innovations in Monetization Models
|
||||
- **Contradictions/Notes:** 소스에 관련 정보가 부족합니다.
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-29*
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
foreach (var (t, e) in SystemAPI.Query<RefRW<Tappable>>().WithEntityAccess()) {
|
||||
if (HitTest(tap.Position, e)) {
|
||||
t.ValueRW.Hits--;
|
||||
if (t.ValueRW.Hits <= 0) {
|
||||
Inventory.Add(t.ValueRO.Drops, t.ValueRO.DropAmount);
|
||||
s.EntityManager.DestroyEntity(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
### Energy economy
|
||||
```ts
|
||||
class Energy {
|
||||
max = 100; current = 100; lastTick = Date.now();
|
||||
regenSecPerPoint = 60;
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
refresh(now = Date.now()) {
|
||||
const delta = (now - this.lastTick) / 1000;
|
||||
const gained = Math.floor(delta / this.regenSecPerPoint);
|
||||
this.current = Math.min(this.max, this.current + gained);
|
||||
this.lastTick += gained * this.regenSecPerPoint * 1000;
|
||||
}
|
||||
spend(n: number): boolean {
|
||||
this.refresh();
|
||||
if (this.current < n) return false;
|
||||
this.current -= n; return true;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### Idle offline reward
|
||||
```ts
|
||||
function calcOfflineReward(producers: Producer[], lastSeen: number) {
|
||||
const now = Date.now();
|
||||
const elapsedSec = Math.min((now - lastSeen) / 1000, 8 * 3600); // 매 cap 8h
|
||||
return producers.map(p => ({
|
||||
type: p.output,
|
||||
amount: Math.floor(p.ratePerSec * elapsedSec * 0.5), // 매 50% offline rate
|
||||
}));
|
||||
}
|
||||
```
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
### Land expansion (fog-of-war unlock)
|
||||
```csharp
|
||||
public class LandRegion : MonoBehaviour {
|
||||
public int unlockCost;
|
||||
public ResourceType currency;
|
||||
public LandRegion[] reveals;
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
public void Unlock() {
|
||||
if (!Inventory.Spend(currency, unlockCost)) return;
|
||||
Fog.Clear(this);
|
||||
foreach (var r in reveals) r.SetVisible(true);
|
||||
Quest.Notify(QuestEvent.RegionUnlocked, this);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
### Quest chain
|
||||
```ts
|
||||
type Quest = {
|
||||
id: string;
|
||||
prerequisites: string[];
|
||||
goal: { type: "gather"|"build"|"defeat"; target: string; amount: number };
|
||||
reward: Reward;
|
||||
};
|
||||
|
||||
class QuestEngine {
|
||||
active = new Set<string>();
|
||||
completed = new Set<string>();
|
||||
|
||||
onEvent(ev: GameEvent) {
|
||||
for (const id of this.active) {
|
||||
const q = quests[id];
|
||||
if (matches(q.goal, ev)) advance(id);
|
||||
if (isDone(id)) {
|
||||
this.completed.add(id); this.active.delete(id);
|
||||
grant(q.reward);
|
||||
for (const next of quests) {
|
||||
if (next.prerequisites.every(p => this.completed.has(p)))
|
||||
this.active.add(next.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Server-side anti-cheat (resource gain)
|
||||
```ts
|
||||
// 매 client 가 보고한 gather event 를 server 가 rate-limit
|
||||
async function reportGather(uid: string, evt: GatherEvent) {
|
||||
const last = await redis.get(`gather:${uid}:last`);
|
||||
if (last && Date.now() - +last < 200) return reject("rate"); // 매 5/sec cap
|
||||
await redis.set(`gather:${uid}:last`, Date.now(), "EX", 60);
|
||||
await db.inventory.add(uid, evt.resource, evt.amount);
|
||||
}
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Casual mobile target | Energy + idle + merge |
|
||||
| Mid-core target | Land expansion + light combat + clan |
|
||||
| Core loop length | 매 1-3분 session / 10+ daily |
|
||||
| Monetization | Soft (cosmetic) + hard (energy) hybrid |
|
||||
| 진입 장벽 | First 10 min 의 매 즉각적 progress visualization |
|
||||
|
||||
**기본값**: 매 tap-gather + craft-merge + land-expand + 짧은 quest chain + IAP energy.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[Casual Game]] · [[Mobile Game Design]]
|
||||
- 변형: [[Township]] · [[Travel Town]] · [[Merge Mansion]]
|
||||
- 응용: [[Idle Game]] · [[Builder Game]]
|
||||
- Adjacent: [[Energy Economy]] · [[LiveOps]] · [[F2P Monetization]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 mobile casual game 디자인 / live-ops content 생성. 매 quest chain authoring.
|
||||
**언제 X**: 매 hardcore PvP, 매 narrative-heavy AAA — 매 장르 mismatch.
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Long first session 강제**: 매 tutorial 30분 → 매 D1 churn.
|
||||
- **Pay wall too early**: 매 D2 안에 wall → 매 review bomb.
|
||||
- **Unbalanced energy**: 매 너무 짧으면 frustration, 매 너무 길면 매 monetization fail.
|
||||
- **No social**: 매 D30 retention 의 vector 부재.
|
||||
- **Client-trusted resource**: 매 modding/cheating 폭증.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (genre best practices: Deconstructor of Fun, GameRefinery 2025 mobile reports). Title-specific 매 verify limited (B-tier).
|
||||
- 신뢰도 B (genre 일반은 A, 매 specific game 은 B).
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — casual builder loop + monetization patterns |
|
||||
|
||||
Reference in New Issue
Block a user