Files
thecrimesynticate/PROJECT_PLAN.md
T
2026-06-27 14:38:18 +03:00

938 lines
34 KiB
Markdown

# 🎮 Text Mafia Browser Game - Project Plan
**Inspired by Omerta & Torn City**
**Built with Laravel**
**Last Updated:** 2026-06-26
---
## 📋 Overview
A persistent browser-based text MMORPG where players build criminal empires, join factions, commit crimes, trade items, and engage in PvP/PvE combat. The game features deep economic systems, territory control, and social interactions.
---
## 🎯 Core Concept
- **Persistent World**: Game state continues even when players are offline
- **Text-Based**: Primary interface is text with minimal graphics
- **Turn-Based Actions**: Most actions cost energy and have cooldowns
- **Player-Driven Economy**: Players trade, control markets, and manage resources
- **Faction Warfare**: Competing criminal organizations battle for control
- **Progression System**: Level up characters through experience and training
---
## 📊 Phase Breakdown
---
### 🔹 Phase 1: Foundation (2-3 weeks)
*Core infrastructure, user management, and basic game loop*
| Priority | Feature | Description | Laravel Components |
|----------|---------|-------------|-------------------|
| ⭐⭐⭐ | **User Authentication** | Registration, login, password reset, email verification | `Auth`, `Breeze`, `Sanctum` |
| ⭐⭐⭐ | **Character Creation** | Name, gender, starting stats, backstory | `Character` model, migration, factory |
| ⭐⭐⭐ | **Basic Game UI** | Layout, navigation, responsive design | Blade templates, Tailwind CSS |
| ⭐⭐⭐ | **Energy System** | Actions cost energy, regenerates over time | `energy` column, scheduler |
| ⭐⭐⭐ | **Health System** | HP, hospital on death, regen timer | `health`, `in_hospital` columns |
| ⭐⭐ | **Basic Crimes** | Simple crimes (pickpocket, mugging) | `Crime`, `CrimeAttempt` models |
| ⭐⭐ | **Inventory System** | Items, equipment, consumables | `Item`, `Inventory` pivot table |
| ⭐⭐ | **Money System** | Cash, bank, interest | `money`, `bank` columns |
| ⭐ | **User Profile** | Stats display, avatar, status | `Profile` component |
| ⭐ | **News/Feed System** | Global and user-specific events | `ActivityLog`, `Notification` |
**Deliverables:**
- Working Laravel application with authentication
- Character creation flow
- Energy and health systems with regeneration
- 5-10 basic crimes to commit
- Inventory with item management
- Basic UI with navigation
---
### 🔹 Phase 2: Core Gameplay (3-4 weeks)
*Economy, combat, and faction basics*
| Priority | Feature | Description | Laravel Components |
|----------|---------|-------------|-------------------|
| ⭐⭐⭐ | **Attack System** | Attack other players, hit lists | `Attack`, `Hit` models, cooldowns |
| ⭐⭐⭐ | **Faction System** | Create/join factions, ranks, chat | `Faction`, `FactionMember`, `FactionChat` |
| ⭐⭐⭐ | **Skills System** | Strength, defense, speed, dexterity | `skill_*` columns, training |
| ⭐⭐⭐ | **Item Market** | Buy/sell items from other players | `MarketListing` model |
| ⭐⭐ | **Shops** | NPC shops for weapons, armor, items | `Shop`, `ShopItem` models |
| ⭐⭐ | **Jail System** | Sentenced after losing attacks | `jail_time` column, release scheduler |
| ⭐⭐ | **Hospital System** | Revive after death, medical items | `hospital_time`, `revive_cost` |
| ⭐⭐ | **Travel System** | Travel between cities/countries | `Location` model, travel costs |
| ⭐ | **Bank System** | Deposit/withdraw, interest | `Bank` model, daily interest job |
| ⭐ | **Mail System** | Send/receive messages | `Mail` model, `read_at` timestamp |
**Deliverables:**
- Full PvP combat system
- Faction creation and management
- Skill training and progression
- Player-to-player marketplace
- Jail and hospital mechanics
- Travel between multiple locations
---
### 🔹 Phase 3: Advanced Features (4-5 weeks)
*Depth, strategy, and social systems*
| Priority | Feature | Description | Laravel Components |
|----------|---------|-------------|-------------------|
| ⭐⭐⭐ | **Faction Wars** | Faction vs faction warfare | `FactionWar`, `WarAttack` models |
| ⭐⭐⭐ | **Territory System** | Control areas for bonuses | `Territory`, `TerritoryControl` |
| ⭐⭐⭐ | **Missions/Quests** | Storyline and daily missions | `Mission`, `MissionStep` models |
| ⭐⭐ | **Casino** | Gambling games (roulette, blackjack) | `CasinoGame`, `Bet` models |
| ⭐⭐ | **Stock Market** | Invest in game companies | `Stock`, `Portfolio` models |
| ⭐⭐ | **Properties** | Buy houses, businesses | `Property`, `PropertyUpgrade` |
| ⭐⭐ | **Vehicles** | Faster travel, combat bonuses | `Vehicle` model |
| ⭐⭐ | **Awards/Medals** | Achievements system | `Award`, `UserAward` |
| ⭐ | **Bounties** | Place bounties on players | `Bounty` model |
| ⭐ | **Alliances** | Faction alliances | `Alliance` pivot table |
| ⭐ | **Spies** | Infiltrate other factions | `SpyReport` model |
| ⭐ | **Merits** | Premium currency system | `merits` column |
**Deliverables:**
- Faction warfare and territory control
- Mission/quest system with rewards
- Casino with multiple games
- Stock market with fluctuations
- Property ownership system
- Advanced social features
---
### 🔹 Phase 4: Polish & Scale (2-3 weeks)
*Performance, moderation, and extras*
| Priority | Feature | Description | Laravel Components |
|----------|---------|-------------|-------------------|
| ⭐⭐⭐ | **Admin Panel** | Manage users, items, economy | `Nova` or custom admin |
| ⭐⭐⭐ | **Moderation Tools** | Ban, mute, freeze users | `ModerationLog` model |
| ⭐⭐ | **API for Mobile** | REST/GraphQL endpoints | `Sanctum`, API resources |
| ⭐⭐ | **Real-time Chat** | WebSocket-based chat | `Laravel Echo`, `Pusher` |
| ⭐⭐ | **Leaderboards** | Top players, factions, wealth | Cached queries, weekly resets |
| ⭐⭐ | **Event System** | Holiday events, double XP | `GameEvent` model |
| ⭐ | **Referral System** | Invite friends for rewards | `Referral` model |
| ⭐ | **Two-Factor Auth** | Security for accounts | `Jetstream` 2FA |
| ⭐ | **Backup System** | Database backups | Scheduled commands |
| ⭐ | **Caching** | Optimize performance | Redis, cache helpers |
**Deliverables:**
- Full admin dashboard
- Moderation capabilities
- Mobile API (if needed)
- Real-time features
- Performance optimizations
---
## 🗄️ Database Schema
### Core Tables (Phase 1-2)
```sql
-- Users & Characters
users (id, name, email, password, email_verified_at, last_active_at, ip_address, user_agent, created_at, updated_at)
characters (id, user_id, name, gender, level, experience, money, bank, energy, max_energy,
health, max_health, strength, defense, speed, dexterity, location_id,
faction_id, in_hospital_until, in_jail_until, last_action_at, status, created_at, updated_at)
-- Game World
locations (id, name, slug, description, travel_cost, requires_level, faction_control, created_at)
-- Economy
items (id, name, slug, description, type, value, buy_price, sell_price, requires_level,
attack_bonus, defense_bonus, health_bonus, energy_bonus, is_tradeable, is_usable, created_at)
inventories (id, character_id, item_id, quantity, equipped, created_at, updated_at)
shops (id, name, slug, location_id, restock_interval, restock_amount, created_at)
shop_items (id, shop_id, item_id, stock, price, created_at, updated_at)
-- Actions
crimes (id, name, slug, description, difficulty, success_rate, reward_min, reward_max,
experience, energy_cost, cooldown, requires_level, location_id, created_at)
crime_attempts (id, character_id, crime_id, success, reward, experience_gained, attempted_at)
attacks (id, attacker_id, defender_id, attacker_health_after, defender_health_after,
attacker_damage, defender_damage, weapon_id, armor_id, result, attacked_at)
hits (id, target_id, bounty, placed_by_id, expires_at, claimed_by_id, claimed_at, created_at)
-- Factions
factions (id, name, tag, slug, description, leader_id, bank, respect, founded_at, created_at)
faction_members (id, faction_id, character_id, rank, joined_at, created_at)
faction_ranks (id, faction_id, name, level_requirement, permissions, created_at)
faction_chat (id, faction_id, character_id, message, created_at)
-- Communication
mail (id, sender_id, recipient_id, subject, body, read_at, is_system, created_at)
notifications (id, user_id, type, data, read_at, created_at)
-- System
activity_logs (id, character_id, action, description, ip_address, user_agent, created_at)
game_events (id, name, slug, description, start_at, end_at, is_active, created_at)
```
### Additional Tables (Phase 3-4)
```sql
-- Phase 3
missions (id, name, slug, description, type, difficulty, reward_money, reward_exp, reward_item_id, cooldown, created_at)
mission_steps (id, mission_id, step_number, description, requirements, created_at)
character_missions (id, character_id, mission_id, step_completed, completed_at, created_at)
faction_wars (id, attacker_faction_id, defender_faction_id, started_by_id, start_reason,
start_at, end_at, status, winner_faction_id, created_at)
war_attacks (id, war_id, attacking_faction_id, defending_faction_id, attacker_id, defender_id,
attacker_damage, defender_damage, result, attacked_at)
territories (id, name, slug, location_id, controlling_faction_id, income_bonus, defense_bonus, created_at)
stocks (id, company_name, symbol, current_price, min_price, max_price, volatility, created_at)
portfolios (id, character_id, stock_id, quantity, average_price, created_at, updated_at)
stock_history (id, stock_id, price, volume, recorded_at)
properties (id, name, slug, location_id, owner_id, type, level, purchase_price, sell_price,
income_per_hour, defense_bonus, storage_capacity, created_at)
vehicles (id, name, slug, type, speed_bonus, attack_bonus, defense_bonus, purchase_price,
sell_price, fuel_capacity, fuel_consumption, created_at)
character_vehicles (id, character_id, vehicle_id, fuel, created_at)
-- Phase 4
bounties (id, target_id, amount, placed_by_id, reason, expires_at, claimed_by_id, claimed_at, created_at)
alliances (id, faction_id_1, faction_id_2, initiated_by_id, status, created_at, accepted_at, ended_at)
spy_reports (id, faction_id, target_faction_id, reported_by_id, report_type, data, created_at)
awards (id, name, slug, description, icon, created_at)
character_awards (id, character_id, award_id, awarded_at, created_at)
referrals (id, referrer_id, referred_id, code, reward_claimed, created_at)
moderation_logs (id, moderator_id, target_id, action, reason, duration, expires_at, created_at)
-- Admin
admin_settings (id, key, value, description, created_at, updated_at)
reports (id, reporter_id, reported_id, type, reason, status, handled_by_id, handled_at, created_at)
```
---
## 🏗️ Laravel Architecture
### Directory Structure
```
app/
├── Console/
│ └── Commands/
│ ├── Game/
│ │ ├── ProcessEnergyRegen.php
│ │ ├── ProcessHealthRegen.php
│ │ ├── ReleaseFromJail.php
│ │ ├── ReleaseFromHospital.php
│ │ ├── DailyInterest.php
│ │ └── RestockShops.php
│ └── ...
├── Http/
│ ├── Controllers/
│ │ ├── Auth/
│ │ │ └── (Laravel default)
│ │ ├── Game/
│ │ │ ├── CharacterController.php
│ │ │ ├── CrimeController.php
│ │ │ ├── AttackController.php
│ │ │ ├── FactionController.php
│ │ │ ├── InventoryController.php
│ │ │ ├── ShopController.php
│ │ │ ├── MarketController.php
│ │ │ ├── MailController.php
│ │ │ └── ...
│ │ └── Admin/
│ │ ├── DashboardController.php
│ │ ├── UserController.php
│ │ └── ...
│ ├── Middleware/
│ │ ├── CheckEnergy.php
│ │ ├── CheckInJail.php
│ │ ├── CheckInHospital.php
│ │ ├── VerifyCharacter.php
│ │ ├── CheckLevel.php
│ │ ├── RateLimitActions.php
│ │ └── LogActivity.php
│ └── Requests/
│ ├── Game/
│ │ ├── AttemptCrimeRequest.php
│ │ ├── AttackRequest.php
│ │ └── ...
│ └── Admin/
├── Models/
│ ├── Character.php
│ ├── Crime.php
│ ├── Faction.php
│ ├── Item.php
│ ├── Attack.php
│ ├── Location.php
│ ├── ActivityLog.php
│ ├── Notification.php
│ └── ...
├── Policies/
│ ├── CharacterPolicy.php
│ ├── FactionPolicy.php
│ └── ...
├── Services/
│ ├── Game/
│ │ ├── CombatService.php
│ │ ├── EconomyService.php
│ │ ├── EnergyService.php
│ │ ├── CrimeService.php
│ │ ├── FactionService.php
│ │ ├── InventoryService.php
│ │ └── NotificationService.php
│ └── ...
├── Traits/
│ ├── HasCharacter.php
│ ├── HasInventory.php
│ ├── HasExperience.php
│ └── ...
├── Enums/
│ ├── ActionResult.php
│ ├── AttackResult.php
│ ├── CharacterStatus.php
│ ├── CrimeType.php
│ ├── ItemType.php
│ └── ...
└── Providers/
└── GameServiceProvider.php
routes/
├── web.php
├── api.php
└── channels.php
resources/
├── views/
│ ├── layouts/
│ │ ├── app.blade.php
│ │ ├── game.blade.php
│ │ └── auth.blade.php
│ ├── game/
│ │ ├── partials/
│ │ │ ├── energy-bar.blade.php
│ │ │ ├── health-bar.blade.php
│ │ │ ├── nav.blade.php
│ │ │ ├── notifications.blade.php
│ │ │ └── ...
│ │ ├── dashboard.blade.php
│ │ ├── character/
│ │ │ ├── show.blade.php
│ │ │ ├── create.blade.php
│ │ │ └── edit.blade.php
│ │ ├── crimes/
│ │ │ ├── index.blade.php
│ │ │ └── attempt.blade.php
│ │ ├── attack/
│ │ │ ├── index.blade.php
│ │ │ └── hit-list.blade.php
│ │ ├── factions/
│ │ │ ├── index.blade.php
│ │ │ ├── show.blade.php
│ │ │ └── manage.blade.php
│ │ ├── inventory.blade.php
│ │ ├── shops.blade.php
│ │ ├── market.blade.php
│ │ ├── mail/
│ │ │ ├── inbox.blade.php
│ │ │ └── compose.blade.php
│ │ └── leaderboards.blade.php
│ └── auth/
│ └── (Laravel default)
└── lang/
└── en/
├── game.php
└── ...
database/
├── migrations/
├── seeders/
└── factories/
public/
├── css/
├── js/
└── images/
config/
├── game.php
└── ...
storage/
logs/
tests/
```
---
### Key Services (Business Logic Layer)
| Service | Purpose | Key Methods |
|---------|---------|-------------|
| **CombatService** | Handles all attack calculations | `calculateDamage()`, `processAttack()`, `determineWinner()`, `applyCrit()` |
| **EconomyService** | Money, bank, transactions | `transfer()`, `deposit()`, `withdraw()`, `applyInterest()`, `addMoney()`, `removeMoney()` |
| **EnergyService** | Energy management | `consumeEnergy()`, `regenEnergy()`, `getMaxEnergy()`, `getRegenRate()` |
| **HealthService** | Health management | `takeDamage()`, `heal()`, `revive()`, `isDead()`, `isInHospital()` |
| **CrimeService** | Crime attempts | `attemptCrime()`, `calculateSuccess()`, `applyRewards()`, `applyPenalties()` |
| **FactionService** | Faction operations | `createFaction()`, `joinFaction()`, `leaveFaction()`, `promoteMember()`, `demoteMember()` |
| **InventoryService** | Item management | `addItem()`, `removeItem()`, `useItem()`, `equipItem()`, `unequipItem()` |
| **NotificationService** | User notifications | `sendNotification()`, `broadcastEvent()`, `factionAnnouncement()`, `systemMessage()` |
| **TravelService** | Location travel | `travelTo()`, `calculateCost()`, `isUnlocked()`, `getLocations()` |
| **MarketService** | Player marketplace | `createListing()`, `purchaseListing()`, `cancelListing()`, `getListings()` |
---
## ⚡ Scheduled Commands
```php
// In app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
// Energy regen (every 5 minutes)
$schedule->command('game:regen-energy')->everyFiveMinutes()->name('energy-regen');
// Health regen (every 10 minutes)
$schedule->command('game:regen-health')->everyTenMinutes()->name('health-regen');
// Release from hospital (every minute)
$schedule->command('game:release-hospital')->everyMinute()->name('hospital-release');
// Release from jail (every minute)
$schedule->command('game:release-jail')->everyMinute()->name('jail-release');
// Daily bank interest (midnight)
$schedule->command('game:daily-interest')->dailyAt('00:00')->name('daily-interest');
// Restock shops (every 6 hours)
$schedule->command('game:restock-shops')->everySixHours()->name('restock-shops');
// Cleanup old activity (daily)
$schedule->command('game:cleanup-logs')->dailyAt('01:00')->name('cleanup-logs');
// Faction wars reset (weekly)
$schedule->command('game:reset-wars')->weekly()->mondays()->at('00:00')->name('reset-wars');
// Process cooldowns (every minute)
$schedule->command('game:process-cooldowns')->everyMinute()->name('process-cooldowns');
// Update leaderboards (hourly)
$schedule->command('game:update-leaderboards')->hourly()->name('update-leaderboards');
}
```
---
## 🛡️ Middleware
| Middleware | Purpose | Logic |
|------------|---------|-------|
| **CheckEnergy** | Ensure user has enough energy | Redirect if energy < action cost |
| **CheckInJail** | Block actions if in jail | Redirect to jail page with release time |
| **CheckInHospital** | Block actions if in hospital | Redirect to hospital page with release time |
| **VerifyCharacter** | Ensure user has a character | Redirect to character creation |
| **CheckLevel** | Verify level requirements | Abort 403 if level too low |
| **RateLimitActions** | Prevent action spamming | Throttle by action type (configurable) |
| **LogActivity** | Track user actions | Create activity log entries automatically |
| **CheckCooldown** | Prevent action spamming | Check if action is on cooldown |
| **CheckAlive** | Ensure character is alive | Redirect if health <= 0 |
---
## 🎨 Frontend Approach
### Tech Stack
- **CSS Framework**: Tailwind CSS (via Laravel Breeze)
- **JavaScript**: Alpine.js (lightweight reactivity)
- **Real-time**: Laravel Echo + Pusher (for chat, notifications)
- **Charts**: Chart.js (for stats, leaderboards)
- **Icons**: Heroicons or Font Awesome
### Key Pages
#### Phase 1 Pages
1. **Home/Dashboard** - Overview, stats, recent activity, quick actions
2. **Character Create** - Name, gender, starting stats selection
3. **Character Profile** - Stats, equipment, achievements
4. **Crimes** - Available crimes list, attempt history
5. **Inventory** - Items, equipment, use/equip actions
6. **Shops** - Browse and purchase items
7. **City/Locations** - Current location info, available actions
8. **Leaderboards** - Top players by level, money, etc.
#### Phase 2 Pages
9. **Attack** - Find targets, view hit lists, attack history
10. **Factions** - Faction list, create/join, member list
11. **Faction Management** - Ranks, members, bank, chat
12. **Market** - Player-to-player item trading
13. **Mail** - Inbox, compose, read messages
14. **Bank** - Deposit, withdraw, transfer
15. **Travel** - Map, travel between locations
16. **Jail** - Current sentence, breakout attempt
17. **Hospital** - Revive options, healing items
#### Phase 3+ Pages
18. **Missions** - Available missions, progress tracking
19. **Faction Wars** - Active wars, attack history
20. **Territory** - Controlled areas, income bonuses
21. **Casino** - Gambling games
22. **Stock Market** - Company listings, portfolio
23. **Properties** - Owned properties, upgrades
24. **Admin Dashboard** - User management, game settings
### UI Components (Blade + Alpine)
```html
<!-- Energy Bar Component -->
<div class="w-full bg-gray-200 rounded-full h-4">
<div
class="bg-blue-600 h-4 rounded-full transition-all duration-500"
style="width: {{ $character->energy_percentage }}%"
x-data="{ energy: {{ $character->energy }}, max: {{ $character->max_energy }} }"
x-text="energy + '/' + max"
></div>
</div>
<!-- Cooldown Timer -->
<span
x-data="{
cooldown: {{ $cooldownSeconds }},
formatTime(seconds) {
const mins = Math.floor(seconds / 60);
const secs = seconds % 60;
return `${mins}:${secs.toString().padStart(2, '0')}`;
}
}"
x-text="formatTime(cooldown)"
x-init="setInterval(() => { if(cooldown > 0) cooldown--; }, 1000)"
></span>
<!-- Action Button with Energy Check -->
<button
@click="attemptCrime({{ $crime->id }})"
:disabled="energy < {{ $crime->energy_cost }}"
class="px-4 py-2 bg-blue-600 text-white rounded disabled:opacity-50"
>
Attempt ({{ $crime->energy_cost }} energy)
</button>
```
---
## ⚙️ Game Configuration
```php
// config/game.php
return [
'energy' => [
'start_amount' => 100,
'max' => 100,
'regen_rate' => 5, // Energy regenerated per interval
'regen_interval' => 300, // Seconds between regen (5 minutes)
'action_costs' => [
'crime' => 10,
'attack' => 15,
'travel' => 5,
'train' => 20,
],
],
'health' => [
'start_amount' => 100,
'max' => 100,
'regen_rate' => 2, // Health regenerated per interval
'regen_interval' => 600, // Seconds between regen (10 minutes)
'hospital_cost' => 1000, // Cost to revive from hospital
'death_threshold' => 0, // Health <= 0 = dead
],
'combat' => [
'base_damage' => 5,
'damage_variation' => 0.20, // +/- 20% random variation
'crit_chance' => 0.10, // 10% chance for critical hit
'crit_multiplier' => 2.0, // Critical hits do 2x damage
'defense_reduction' => 0.5, // Each defense point reduces damage by 0.5
'min_damage' => 1, // Minimum damage per hit
'attack_cooldown' => 300, // 5 minutes between attacks
'hit_list_cost' => 5000, // Cost to place a hit
],
'crime' => [
'success_rate' => 0.70, // 70% base success rate
'failure_penalty' => 0.10, // 10% health loss on failure
'cooldown_reduction' => 0.10, // 10% cooldown reduction per level
'reward_multiplier' => 1.10, // 10% more reward per level
],
'jail' => [
'sentence_length' => 3600, // 1 hour base sentence
'breakout_chance' => 0.05, // 5% chance to break out per attempt
'breakout_cost' => 1000, // Cost to attempt breakout
'sentence_multiplier' => 1.5, // Sentence increases by 50% for repeat offenses
],
'economy' => [
'bank_interest' => 0.05, // 5% daily interest
'tax_rate' => 0.10, // 10% tax on faction bank withdrawals
'start_money' => 5000, // Starting cash
'start_bank' => 0, // Starting bank balance
'max_bank' => 10000000, // Maximum bank balance
],
'leveling' => [
'exp_curve' => 'exponential', // 'linear' or 'exponential'
'exp_per_level' => 1000, // Base EXP per level
'exp_multiplier' => 1.20, // 20% more EXP needed per level
'stat_points_per_level' => 2, // Points to allocate per level
'max_level' => 100, // Maximum character level
],
'skills' => [
'strength' => [
'attack_bonus' => 0.5, // +0.5 damage per point
'max' => 100,
],
'defense' => [
'damage_reduction' => 0.5, // -0.5 damage per point
'max' => 100,
],
'speed' => [
'attack_first_chance' => 0.02, // +2% chance to attack first per point
'max' => 100,
],
'dexterity' => [
'crit_chance' => 0.005, // +0.5% crit chance per point
'max' => 100,
],
'training_cost' => 100, // Money cost to train a stat
'training_limit' => 5, // Max stat points per training session
],
'factions' => [
'create_cost' => 10000, // Cost to create a faction
'create_level' => 10, // Minimum level to create a faction
'max_members' => 50, // Maximum faction members
'respect_per_win' => 10, // Respect gained per war win
'respect_per_loss' => -5, // Respect lost per war loss
'bank_tax' => 0.05, // 5% tax on faction bank deposits
],
'locations' => [
'start_location' => 1, // ID of starting location
'travel_cost_base' => 100, // Base travel cost
'travel_cost_per_level' => 10, // Additional cost per location level
],
'limits' => [
'max_inventory_items' => 100,
'max_equipped_items' => 10,
'max_mail_messages' => 50,
'max_market_listings' => 20,
'max_faction_chat_history' => 100,
],
'cooldowns' => [
'default' => 60, // 1 minute default cooldown
'attack' => 300, // 5 minutes
'crime' => 120, // 2 minutes
'travel' => 60, // 1 minute
'train' => 300, // 5 minutes
'market_listing' => 60, // 1 minute
],
];
```
---
## 🎯 Character Progression
### Starting Stats (Level 1)
- **Health**: 100/100
- **Energy**: 100/100
- **Money**: $5,000
- **Bank**: $0
- **Strength**: 5
- **Defense**: 5
- **Speed**: 5
- **Dexterity**: 5
- **Experience**: 0/1000
- **Level**: 1
### Level Up Rewards
- **Experience**: Reset to 0, next level requires more EXP
- **Stat Points**: +2 points to distribute among stats
- **Health**: +5 max health
- **Energy**: +5 max energy
- **Money**: +$1,000 bonus
### Experience Sources
| Action | EXP Reward |
|--------|------------|
| Successful Crime | 50-200 (scaled by difficulty) |
| Failed Crime | 10-50 |
| Winning Attack | 100-300 |
| Losing Attack | 25-100 |
| Killing Player | 500 |
| Training Stat | 10 |
| Completing Mission | 100-1000 |
| Faction War Win | 500 |
| Daily Login | 50 |
---
## 💰 Economy Balance
### Money Sources
| Source | Amount | Frequency |
|--------|--------|-----------|
| Starting | $5,000 | Once |
| Crime Rewards | $50-$500 | Per crime |
| Attack Wins | $100-$1,000 | Per win |
| Selling Items | Variable | Per sale |
| Bank Interest | 5% daily | Daily |
| Faction Bank | Variable | Per deposit |
| Property Income | $100-$10,000 | Per hour |
| Stock Market | Variable | Per trade |
### Money Sinks
| Sink | Amount | Frequency |
|------|--------|-----------|
| Attack Loses | $50-$500 | Per loss |
| Crime Failures | $10-$100 | Per failure |
| Hospital Revival | $1,000 | Per death |
| Jail Breakout | $1,000 | Per attempt |
| Training Stats | $100 | Per point |
| Travel | $100-$1,000 | Per trip |
| Buying Items | Variable | Per purchase |
| Faction Creation | $10,000 | Once |
| Hit List Placement | $5,000 | Per hit |
| Property Purchase | Variable | Per property |
---
## 🎲 Game Mechanics Details
### Combat System
```
Attacker Rolls Initiative:
- Base: 50% chance to attack first
- Speed bonus: +2% per speed point
- Random: +/- 10% variation
If Attacker goes first:
1. Attacker calculates damage
2. Defender calculates damage (if still alive)
Damage Calculation:
Base Damage = attacker_strength * 0.5 + weapon_attack_bonus
Damage Variation = Base Damage * (0.8 + random(0, 0.4))
Critical Check = if random(0, 1) < (0.1 + attacker_dexterity * 0.005)
Damage *= 2
Defender Reduction:
Defense Reduction = defender_defense * 0.5
Actual Damage = max(1, Damage - Defense Reduction)
Defender Health -= Actual Damage
If Defender Health <= 0:
Attacker wins
Defender goes to hospital
Attacker gets EXP and money rewards
```
### Crime System
```
Success Check:
Base Success Rate = crime_success_rate
Modified Rate = Base Rate + (player_level * 0.01) - (crime_difficulty * 0.05)
Final Rate = clamp(Modified Rate, 0.1, 0.95)
Roll = random(0, 1)
If Roll <= Final Rate:
Success!
Reward = random(crime_reward_min, crime_reward_max)
EXP = crime_experience * (1 + player_level * 0.01)
Else:
Failure
Health Loss = max(1, player_max_health * crime_failure_penalty)
No reward
```
### Faction Wars
```
War Declaration:
- Requires: 5,000 respect
- Cooldown: 24 hours between declarations
- Duration: 7 days (configurable)
War Actions:
- Members can attack enemy faction members
- Each kill: +10 respect for faction
- Each death: -5 respect for faction
War Victory:
- Faction with most kills wins
- Winner gets: 50% of loser's faction bank
- Loser gets: Respect penalty, temporary debuffs
```
---
## 📅 Development Timeline
| Phase | Duration | Deliverables | Team Size | Status |
|-------|----------|--------------|-----------|--------|
| **Phase 1: Foundation** | 2-3 weeks | Auth, Character, Energy, Crimes, Inventory, UI | 1-2 devs | ⬜ Not Started |
| **Phase 2: Core Gameplay** | 3-4 weeks | Combat, Factions, Skills, Market, Jail/Hospital | 2 devs | ⬜ Not Started |
| **Phase 3: Advanced Features** | 4-5 weeks | Wars, Territory, Missions, Casino, Stock Market | 2-3 devs | ⬜ Not Started |
| **Phase 4: Polish** | 2-3 weeks | Admin, Moderation, API, Real-time | 1-2 devs | ⬜ Not Started |
| **Testing** | 2 weeks | Bug fixes, balance, stress testing | All | ⬜ Not Started |
| **Launch** | 1 week | Deployment, monitoring | All | ⬜ Not Started |
**Total Estimated Time: 14-17 weeks (3.5-4 months)**
---
## 🚀 Deployment Strategy
### Environment Requirements
- **PHP**: 8.2+
- **Laravel**: 11.x
- **Database**: MySQL 8.0+ or PostgreSQL 15+
- **Cache**: Redis 7.0+
- **Queue**: Redis + Supervisor
- **Web Server**: Nginx or Apache
- **OS**: Ubuntu 22.04 LTS
### Hosting Options
1. **Laravel Forge + DigitalOcean** (Recommended for simplicity)
2. **Laravel Vapor** (Serverless, scales automatically)
3. **AWS EC2 + RDS** (For enterprise scale)
4. **Self-hosted VPS** (For full control)
### Deployment Steps
1. Set up server with PHP, MySQL, Redis, Nginx
2. Configure Laravel environment variables
3. Run migrations and seeders
4. Set up cron jobs for scheduled commands
5. Configure queue workers
6. Set up SSL certificate (Let's Encrypt)
7. Configure monitoring (Sentry, Laravel Horizon)
8. Set up backups (daily database backups)
### Scaling Considerations
- **Database**: Use read replicas for leaderboards and reports
- **Queue**: Separate queue workers for different job types
- **Caching**: Aggressive caching for:
- Leaderboards (cache for 5-10 minutes)
- Shop items (cache for 1 hour)
- Character stats (cache for 1 minute)
- **Rate Limiting**: Per-action rate limits to prevent abuse
- **Horizontal Scaling**: Stateless app servers behind load balancer
### Security Measures
- HTTPS everywhere (301 redirect from HTTP)
- CSRF protection (Laravel default)
- Input validation (Form Requests)
- Rate limiting (Laravel ThrottleRequests)
- SQL injection prevention (Eloquent ORM)
- XSS protection (Blade {{ }} escaping)
- Regular backups (daily, encrypted)
- Security headers (CSP, X-Frame-Options, etc.)
- Fail2Ban for brute force protection
---
## 💡 Implementation Checklist
### Phase 1 Checklist
- [ ] Set up Laravel project with Breeze
- [ ] Configure database connection
- [ ] Create User model (extend Laravel default)
- [ ] Create Character model and migration
- [ ] Create Character factory and seeder
- [ ] Create Location model and migration
- [ ] Create Item model and migration
- [ ] Create Inventory pivot table
- [ ] Create Crime model and migration
- [ ] Create ActivityLog model and migration
- [ ] Create Notification model and migration
- [ ] Set up relationships between models
- [ ] Create CharacterController
- [ ] Create CrimeController
- [ ] Create InventoryController
- [ ] Create EnergyService
- [ ] Create HealthService
- [ ] Create EconomyService
- [ ] Create CrimeService
- [ ] Create NotificationService
- [ ] Create middleware: CheckEnergy, CheckInJail, CheckInHospital, VerifyCharacter
- [ ] Create scheduled commands for energy/health regen
- [ ] Create game config file
- [ ] Set up Tailwind CSS
- [ ] Create base layout (app.blade.php)
- [ ] Create game layout (game.blade.php)
- [ ] Create character creation pages
- [ ] Create dashboard page
- [ ] Create crimes page
- [ ] Create inventory page
- [ ] Create partials: energy-bar, health-bar, nav, notifications
- [ ] Add Alpine.js for interactivity
- [ ] Test character creation flow
- [ ] Test energy consumption and regen
- [ ] Test crime attempts
- [ ] Test inventory management
- [ ] Deploy to staging environment
---
## 📝 Notes & Assumptions
1. **Game Name**: "The Crime Syndicate" (can be changed)
2. **Single Character per User**: Initially, one character per user account
3. **Turn-Based**: Actions are not real-time; players take turns
4. **Persistent World**: Game state updates even when players are offline
5. **Browser-Based**: No downloads required; works in any modern browser
6. **Mobile-Friendly**: Responsive design for mobile devices
7. **Free to Play**: Core gameplay is free; premium features optional
---
## 🔗 Resources & References
- **Omerta Game**: https://www.omertagame.com/
- **Torn City**: https://www.torn.com/
- **Laravel Documentation**: https://laravel.com/docs
- **Tailwind CSS**: https://tailwindcss.com/docs
- **Alpine.js**: https://alpinejs.dev/
---
## 📞 Contacts & Contributors
- **Project Lead**: [Your Name]
- **Developers**: [Team Members]
- **Designers**: [Team Members]
- **Testers**: [Team Members]
---
**Document Version**: 1.0
**Last Updated**: 2026-06-26
**Next Review**: After Phase 1 completion