Use when you have a written implementation plan to execute in a separate session with review checkpoints
npx skills add pluginagentmarketplace/custom-plugin-game-developer --skill "monetization-systems"
Install specific skill from multi-skill repository
# Description
|
# SKILL.md
name: monetization-systems
version: "2.0.0"
description: |
Game monetization strategies, in-app purchases, battle passes, ads integration,
and player retention mechanics. Ethical monetization that respects players.
sasmp_version: "1.3.0"
bonded_agent: 07-game-publishing
bond_type: PRIMARY_BOND
parameters:
- name: model
type: string
required: false
validation:
enum: [premium, f2p, freemium, subscription, ad_supported]
- name: platform
type: string
required: false
validation:
enum: [mobile, pc, console, web]
retry_policy:
enabled: true
max_attempts: 3
backoff: exponential
observability:
log_events: [start, complete, error, purchase, refund]
metrics: [arpu, arppu, conversion_rate, ltv, retention]
Monetization Systems
Monetization Models
CHOOSING YOUR MODEL:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GAME TYPE β RECOMMENDED MODEL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Story-driven / Single play β PREMIUM ($10-60) β
β Competitive multiplayer β F2P + Battle Pass β
β Mobile casual β F2P + Ads + Light IAP β
β MMO / Live service β Subscription + Cosmetics β
β Indie narrative β Premium + Optional tip jar β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ETHICAL PRINCIPLES:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
DO: β DON'T: β
β β’ Cosmetics only β’ Pay-to-win β
β β’ Clear pricing β’ Hidden costs β
β β’ Earnable alternatives β’ Predatory targeting β
β β’ Transparent odds β’ Gambling mechanics β
β β’ Respect time/money β’ Exploit psychology β
β β’ Value for purchase β’ Bait and switch β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
IAP Implementation
// β
Production-Ready: Unity IAP Manager
public class IAPManager : MonoBehaviour, IStoreListener
{
public static IAPManager Instance { get; private set; }
private IStoreController _storeController;
private IExtensionProvider _extensionProvider;
// Product IDs (match store configuration)
public const string PRODUCT_STARTER_PACK = "com.game.starterpack";
public const string PRODUCT_GEMS_100 = "com.game.gems100";
public const string PRODUCT_BATTLE_PASS = "com.game.battlepass";
public const string PRODUCT_VIP_SUB = "com.game.vip_monthly";
public event Action<string> OnPurchaseComplete;
public event Action<string, string> OnPurchaseFailed;
private void Awake()
{
if (Instance != null) { Destroy(gameObject); return; }
Instance = this;
DontDestroyOnLoad(gameObject);
InitializePurchasing();
}
private void InitializePurchasing()
{
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
// Consumables
builder.AddProduct(PRODUCT_GEMS_100, ProductType.Consumable);
// Non-consumables
builder.AddProduct(PRODUCT_STARTER_PACK, ProductType.NonConsumable);
// Subscriptions
builder.AddProduct(PRODUCT_VIP_SUB, ProductType.Subscription);
builder.AddProduct(PRODUCT_BATTLE_PASS, ProductType.Subscription);
UnityPurchasing.Initialize(this, builder);
}
public void BuyProduct(string productId)
{
if (_storeController == null)
{
OnPurchaseFailed?.Invoke(productId, "Store not initialized");
return;
}
var product = _storeController.products.WithID(productId);
if (product != null && product.availableToPurchase)
{
_storeController.InitiatePurchase(product);
}
else
{
OnPurchaseFailed?.Invoke(productId, "Product not available");
}
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
{
var productId = args.purchasedProduct.definition.id;
// Validate receipt (server-side recommended for security)
if (ValidateReceipt(args.purchasedProduct.receipt))
{
// Grant the purchase
GrantPurchase(productId);
OnPurchaseComplete?.Invoke(productId);
}
return PurchaseProcessingResult.Complete;
}
private void GrantPurchase(string productId)
{
switch (productId)
{
case PRODUCT_GEMS_100:
PlayerInventory.AddGems(100);
break;
case PRODUCT_STARTER_PACK:
PlayerInventory.UnlockStarterPack();
break;
case PRODUCT_BATTLE_PASS:
BattlePassManager.Activate();
break;
}
}
// IStoreListener implementation...
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
_storeController = controller;
_extensionProvider = extensions;
}
public void OnInitializeFailed(InitializationFailureReason error) { }
public void OnPurchaseFailed(Product product, PurchaseFailureReason reason) { }
}
Battle Pass Design
BATTLE PASS STRUCTURE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SEASON LENGTH: 8-12 weeks β
β TIERS: 100 levels β
β XP PER TIER: 1000 (increases gradually) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β FREE TRACK: β
β β’ Common rewards every 5 levels β
β β’ 1-2 rare items mid-season β
β β’ Currency to buy next pass (partial) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β PREMIUM TRACK ($10): β
β β’ Exclusive skin at level 1 (instant value) β
β β’ Premium rewards every level β
β β’ Legendary items at 25, 50, 75, 100 β
β β’ Enough currency to buy next pass (with effort) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β XP SOURCES: β
β β’ Daily challenges: 500 XP β
β β’ Weekly challenges: 2000 XP each β
β β’ Playtime: 50 XP per match β
β β’ Special events: Bonus XP weekends β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Economy Design
DUAL CURRENCY SYSTEM:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SOFT CURRENCY (Gold/Coins): β
β β’ Earned through gameplay β
β β’ Used for: Upgrades, basic items, consumables β
β β’ Sink: Level-gated purchases, repair costs β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β HARD CURRENCY (Gems/Diamonds): β
β β’ Purchased with real money β
β β’ Small amounts earnable in-game β
β β’ Used for: Premium cosmetics, time skips β
β β’ NEVER required for core gameplay β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PRICING PSYCHOLOGY:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β $0.99 - Impulse buy, low barrier β
β $4.99 - Starter pack sweet spot β
β $9.99 - Battle pass standard β
β $19.99 - High-value bundles β
β $49.99 - Whale offering (best value/gem) β
β $99.99 - Maximum purchase (regulations) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key Metrics
MONETIZATION KPIS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CONVERSION RATE: 2-5% (F2P) β
β ARPU: $0.05-0.50/DAU (casual mobile) β
β ARPPU: $5-50/paying user β
β LTV: Should exceed CPI by 1.5x+ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β HEALTHY INDICATORS: β
β β D1 retention > 40% β
β β D7 retention > 20% β
β β Conversion > 2% β
β β LTV/CPI > 1.5 β
β β Refund rate < 5% β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π§ Troubleshooting
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROBLEM: Low conversion rate (< 1%) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ROOT CAUSES: β
β β’ IAP offers too expensive β
β β’ Poor first purchase experience β
β β’ No perceived value β
β β’ Wrong timing β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SOLUTIONS: β
β β Add high-value starter pack β
β β Show IAP after engagement hook β
β β A/B test price points β
β β Improve soft currency scarcity β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROBLEM: High refund rate (> 10%) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ROOT CAUSES: β
β β’ Unclear what purchase provides β
β β’ Buyers remorse (poor value) β
β β’ Accidental purchases β
β β’ Technical issues β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SOLUTIONS: β
β β Add purchase confirmation β
β β Show exactly what user receives β
β β Improve purchase value β
β β Fix any delivery bugs β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROBLEM: Economy inflation β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β SOLUTIONS: β
β β Add more currency sinks β
β β Reduce faucets gradually β
β β Introduce prestige/reset systems β
β β Create consumable high-end items β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Compliance
| Region | Requirement |
|---|---|
| EU | Loot box odds disclosure |
| Belgium | No loot boxes |
| China | Odds, spending limits |
| Japan | Kompu gacha banned |
| US | COPPA for under-13 |
Use this skill: When designing monetization, balancing economy, or implementing purchasing systems.
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.