t1k:designer:economy:shop-offering
| Field | Value |
|---|---|
| Module | economy |
| Version | 1.7.2 |
| Effort | high |
| Tools | — |
Keywords: economy, offerings, shop, store
How to invoke
Section titled “How to invoke”/t1k:designer:economy:shop-offeringGame Shop Offering
Section titled “Game Shop Offering”When This Skill Triggers
Section titled “When This Skill Triggers”- Designing pick-N-of-M item offering mechanics
- Implementing weighted rarity item draws
- Adding pity timers for guaranteed rare drops
- Making shops show synergistic or diverse offerings
- Designing shop economy (gold budget, pricing scaling)
- Implementing reroll or refresh mechanics
- Tuning strategic choice difficulty in offers
Offering Algorithms
Section titled “Offering Algorithms”Weighted Rarity Draw (Standard)
Section titled “Weighted Rarity Draw (Standard)”Rarity | Base Weight | Adjusted Weight (depth 5+)Common | 500 | 400Uncommon | 300 | 300Rare | 150 | 200Epic | 40 | 80Legendary | 10 | 20- Normalize weights to sum = 1000, draw with Random.Range(0, 1000)
- Increase higher-rarity weights by depth to reward run persistence
Pick-1-of-N Rule
Section titled “Pick-1-of-N Rule”- 3 choices = optimal: enough diversity, not overwhelming
- Mobile: 2 choices acceptable to reduce decision fatigue
- Never offer 2 items of same rarity in same slot (guarantee variety)
→ See references/offering-algorithms.md for weighted draw code, diversity enforcement, exclusion lists
Pity Timer System
Section titled “Pity Timer System”Pity Counter Pattern
Section titled “Pity Counter Pattern”per-run counters: shops_since_rare = 0 (reset on rare+ offer) shops_since_legendary = 0 (reset on legendary offer)
on each offer generation: if shops_since_rare >= 4: force at least 1 rare slot if shops_since_legendary >= 12: force 1 legendary slot- Display pity progress (“Rare guaranteed in N shops”) — reduces anxiety
- Pity resets per-run only; do NOT persist across runs (breaks tension arc)
→ See references/offering-algorithms.md for full pity implementation patterns
Synergy-Aware Offering
Section titled “Synergy-Aware Offering”Scoring Each Candidate Item Against Current Inventory
Section titled “Scoring Each Candidate Item Against Current Inventory”synergy_score = (adjacency_matches * 2) + (set_completion_bonus * 3) + (type_bonus * 1)- Sort candidates by synergy_score; pick top 60% slots from high-score pool
- Reserve 1 of N slots for “wildcard” (0% synergy weight) — enables discovery
- Cap synergy weight at 60% to prevent “obvious best choice” every offer
Diversity Enforcement
Section titled “Diversity Enforcement”- Track item type histogram for current run
- Penalize item types player already has 3+: weight * 0.5
- Bonus weight for item types player has 0 of: weight * 1.5
→ See references/offering-algorithms.md for synergy scoring, diversity formulas
Shop Economy
Section titled “Shop Economy”Gold Budget Per Floor
Section titled “Gold Budget Per Floor”gold_earned_per_floor = base_gold * (1 + depth * 0.1) + enemy_count * gold_per_killshop_price_common = gold_per_floor * 0.15shop_price_uncommon = gold_per_floor * 0.25shop_price_rare = gold_per_floor * 0.45shop_price_legendary = gold_per_floor * 0.80- Player should afford 1 common item most floors, 1 rare every 3 floors
- Price scaling ensures same relative cost throughout run
Reroll Mechanics
Section titled “Reroll Mechanics”| Type | Cost | Limit | When to Use |
|---|---|---|---|
| Single item | 10% item price | Unlimited | When 1 offer is weak |
| Full refresh | 30% avg offer value | 1x/shop | No offers fit current strategy |
| Premium reroll | Hard currency | 1x/run | High-stakes decision point |
→ See references/shop-economy.md for pricing tables, reroll cost scaling, gold distribution
Strategic Choice Design
Section titled “Strategic Choice Design”Choice Difficulty Spectrum
Section titled “Choice Difficulty Spectrum”Too Easy: 1 great item + 2 useless items → player feels robbed of real choiceToo Hard: 3 roughly equal items → cognitive overloadSweet Spot: 1 clearly good + 1 situationally good + 1 build-enabling wildcard- Aim for “hard choice” 30% of the time (memorable decisions)
- “Easy choice” 50% (progression momentum)
- “Trap choice” 20% (tests player knowledge; must be learnable)
→ See references/strategic-choice-patterns.md for difficulty tuning, trap item design
Anti-Patterns
Section titled “Anti-Patterns”| # | Anti-Pattern | Problem | Fix |
|---|---|---|---|
| 1 | Always synergistic items | No discovery; known meta only | Reserve 1 wildcard slot per offer |
| 2 | No pity timer | Dry streaks cause rage-quit | Guarantee rare after 4 shops |
| 3 | Uniform rarity per offer | No hierarchy feel | Enforce rarity diversity per slot |
| 4 | Reroll too cheap | Players reroll until perfect | Cost 20-30% of item value |
| 5 | Price does not scale | Late-game gold meaningless | Scale prices with depth |
| 6 | Only 2 choices on PC | Feels binary | Use 3 minimum on PC |
Cross-References
Section titled “Cross-References”game-economy-design— gold earn rates, sink/faucet balance for shop currencygame-roguelike-design— shop placement in run arc, gold budget per floorgame-synergy-combos— synergy scoring used in synergy-aware offeringrpg-game-design— item power tier definitions used in rarity weightingpuzzle-game-design— adjacency bonuses shown in offer UI (BackpackCrawler)
Reference Files
Section titled “Reference Files”| File | Coverage |
|---|---|
references/offering-algorithms.md | Weighted draw, pity timers, synergy scoring, diversity |
references/shop-economy.md | Pricing formulas, gold budgets, reroll cost scaling |
references/strategic-choice-patterns.md | Choice difficulty tuning, trap items, offer composition |
Gotchas
Section titled “Gotchas”- Pity timers without visibility are wasted — players need to see the bar fill or the rare-drop guarantee shifts no behavior.
- Reroll cost should scale with offering value — flat reroll defeats the strategic-choice goal; players just spam reroll until they like the offering.
- Synergy-aware offerings require knowing the player’s build state — if your shop doesn’t read inventory, synergy-tags are decorative.