Files
echoes-of-the-ash/old/CHANGELOG_STEAM_ICONS_2025-11-09.md
2025-11-27 16:27:01 +01:00

8.7 KiB

Summary of Changes - Steam Integration & Icon System

Date: November 9, 2025


1. Icon System Implementation

Created Icon Directory Structure

images/icons/
├── items/       # Item icons (weapons, armor, consumables)
├── ui/          # UI elements (buttons, menus)
├── status/      # Status indicators (HP, stamina)
└── actions/     # Action icons (attack, defend, flee)

Icon Specifications

  • Format: SVG (recommended) or PNG
  • Size: 64x64px standard, 128x64px large, 32x32px small
  • Naming: kebab-case matching item IDs (e.g., iron-sword.svg)
  • Usage: Icons referenced via icon_path field, emojis kept as fallback

Documentation

  • Created /images/icons/README.md with full guidelines

2. Database Migration - Steam Support

Migration Script: migrate_steam_support.py

Added Columns:

ALTER TABLE players ADD COLUMN:
- steam_id VARCHAR(255) UNIQUE  -- Steam user ID
- email VARCHAR(255)             -- Required for web users
- premium_expires_at TIMESTAMP   -- NULL = premium, timestamp = trial end
- account_type VARCHAR(20)       -- 'web', 'steam', 'telegram'

Removed:

  • telegram_id column (deprecated, no longer supporting Telegram)

Indexes Created:

  • idx_players_steam_id - Fast Steam ID lookups
  • idx_players_email - Email verification/login

Constraints:

  • CHECK (account_type IN ('web', 'steam', 'telegram'))
  • Steam ID must be unique
  • Email used for password reset and communications

Migration Results

✅ Added columns successfully
✅ Created indexes
✅ Updated 5 existing users to 'web' account type
✅ Dropped telegram_id column (no legacy users found)
✅ Added account_type constraint

3. Premium System Design

Account Types

Web Users:

  • Email/password registration
  • Free trial: Level 1-10
  • Premium: Full access after payment

Steam Users:

  • Auto-authenticated via Steam
  • Always premium (owns game on Steam)
  • No email/password needed

Premium Logic

Premium Status:

premium_expires_at == NULL  # Lifetime premium (purchased or Steam)
premium_expires_at > now()  # Active trial/subscription
premium_expires_at < now()  # Expired, back to free tier

Restrictions for Non-Premium (Level 10+):

  • No XP gain after level 10
  • Full map access (naturally gated by difficulty)
  • Can party with premium players
  • All items/crafting/combat features

4. UI Fixes - Equipment Slots

Problem

Equipment slots changed size when items equipped due to emoji + button content.

Solution

Fixed dimensions in Game.css:

.equipment-slot {
  min-height: 100px;
  max-height: 100px;
  height: 100px;
  overflow: hidden; /* Prevent content overflow */
}

Reduced button sizes:

.equipment-action-btn {
  padding: 0.2rem 0.4rem;
  font-size: 0.75rem;
  white-space: nowrap;
}

.equipment-emoji {
  font-size: 1.2rem; /* Reduced from 1.5rem */
}

Result: All equipment slots now same size, whether empty or filled.


5. Comprehensive Planning Document

Created: STEAM_AND_PREMIUM_PLAN.md

Contents:

  1. Account System - Database schema, account types
  2. Distribution Channels - Web, Steam, Standalone
  3. Asset Bundling Strategy - Hybrid approach for desktop
  4. Steam Integration - Steamworks SDK, authentication flow
  5. Build Variants - Web vs Steam vs Standalone configs
  6. Premium Enforcement - XP restrictions, helper functions
  7. Implementation Roadmap - 5-phase plan
  8. Tech Stack Recommendations - Tauri for desktop client
  9. Cost Estimates - $100 Steam fee + payment processing
  10. Monetization Strategy - Pricing options

Key Decisions:

  • Desktop Framework: Tauri (Rust + WebView)

    • Smaller than Electron (~5MB vs 100MB+)
    • Better security
    • Native performance
  • Asset Strategy: Hybrid bundling

    • Bundle core assets (~50MB)
    • Lazy load rare content
    • Cache everything locally
  • Pricing Model: Steam-paid, web-freemium

    • Steam: $14.99 (full game)
    • Web: Free trial to level 10, $4.99 upgrade

6. Next Steps (Prioritized)

Immediate (This Week)

  1. Database migration complete
  2. Icon folders created
  3. Update /api/auth/register to require email
  4. Add premium check functions (is_player_premium())
  5. Implement XP restriction for non-premium level 10+

Short Term (Next 2 Weeks)

  1. Design and create icon set (replace emojis)
  2. Payment integration (Stripe)
  3. Email verification system
  4. Premium upgrade endpoint
  5. Premium status UI indicators

Medium Term (Next Month)

  1. Set up Steamworks partner account
  2. Prototype Tauri desktop app
  3. Steam authentication flow
  4. Asset bundling system

Long Term (2-3 Months)

  1. Complete Steam integration
  2. Desktop client with auto-updater
  3. Beta testing
  4. Official launch

7. Required External Setup

Steamworks Partner

  1. Sign up at: https://partner.steamgames.com/
  2. Pay $100 app submission fee (one-time)
  3. Create app entry
  4. Get Steam App ID and Web API Key
  5. Download Steamworks SDK

Payment Processing

  1. Stripe Account

  2. PayPal Business (optional)

    • Alternative payment method
    • Popular in some regions

CDN for Assets

  1. CloudFlare (recommended, free tier)

    • Fast global delivery
    • Free SSL
    • DDoS protection
  2. AWS CloudFront (alternative)

    • More control
    • Pay per use (~$0.085/GB)

8. Files Modified

New Files

  • /images/icons/README.md - Icon system documentation
  • /migrate_steam_support.py - Database migration script
  • /STEAM_AND_PREMIUM_PLAN.md - Complete implementation plan
  • THIS FILE - Change summary

Modified Files

  • /pwa/src/components/Game.css - Fixed equipment slot sizing
  • Database: players table structure updated

New Directories

/images/icons/
├── items/
├── ui/
├── status/
└── actions/

9. Breaking Changes

For Existing Users

  • ⚠️ telegram_id removed (no Telegram users in database)
  • Existing users marked as account_type='web'
  • All existing users start with free tier (can be upgraded)

For API Clients

  • ⚠️ /api/auth/register will soon require email field (not yet enforced)
  • All existing endpoints remain compatible
  • New optional fields in player responses

10. Testing Checklist

Database Migration

  • Migration runs without errors
  • Existing users preserved
  • Indexes created successfully
  • Constraints applied

UI Changes

  • Equipment slots same size empty/filled
  • Button text doesn't wrap
  • Icons fit within slots
  • Mobile responsive

Premium System (To Test)

  • XP gain stops at level 10 for non-premium
  • Premium status displayed correctly
  • Steam users auto-premium
  • Payment flow works

11. Security Considerations

Added

  • Email field for account recovery
  • Steam ID validation (external verification)
  • Account type constraints

Todo

  • Email verification before account activation
  • Steam ticket validation on server
  • Rate limiting on premium upgrade attempts
  • Secure payment token handling

12. Performance Impact

Database

  • Indexes added: +2 (steam_id, email) - Minimal impact
  • Column additions: +4 per player - ~100 bytes per row
  • Query performance: Improved (indexed lookups)

UI

  • Fixed slot heights: Prevents layout shifts (better CLS)
  • Smaller buttons: Reduced DOM size
  • Icon system: No impact yet (emojis still used)

Questions for Product Decision

  1. Free Tier Level Cap:

    • Current: Level 10
    • Alternative: Level 5? Level 15?
    • Recommendation: Level 10 (enough to hook players)
  2. Premium Pricing:

    • Web upgrade: $4.99? $9.99?
    • Steam full game: $14.99? $19.99?
    • Recommendation: $4.99 web, $14.99 Steam
  3. Email Verification:

    • Required immediately on registration?
    • Or allow play, verify for premium upgrade?
    • Recommendation: Optional initially, required for premium
  4. Steam-Exclusive Features:

    • Any features only for Steam users?
    • Or complete parity with web premium?
    • Recommendation: Complete parity (fair for web buyers)

Contact & Support

For questions about this implementation:

  • Steam Integration: See STEAM_AND_PREMIUM_PLAN.md Section 4
  • Database Schema: See migrate_steam_support.py
  • Icon System: See /images/icons/README.md
  • UI Changes: See pwa/src/components/Game.css lines 1955-2050

Migration Status: Complete and Deployed UI Fixes: Complete (Needs Testing) Planning: Complete Implementation: 🔄 Ready to Begin