Café Drift is a cozy, text-based café simulation game built with Python, focused on calm progression, clean architecture, and learning-by-building.
You run a small café, prepare orders, manage ingredients, earn money, and gradually expand your café through multiple gameplay systems.
The project is developed incrementally using versioned alpha releases, prioritizing strong foundations and modular architecture.
Version: v0.9.0-alpha | Gameplay Status: EXPANDED GAMEPLAY
Café Drift now includes dynamic daily systems such as weather, upgradeable café equipment, and daily order limits, expanding the core gameplay loop while maintaining a cozy CLI experience.
- Start a new café or continue from a saved state
- Each in-game day begins with a generated weather condition
- Weather influences how many orders appear that day
- Players can:
- Accept orders
- Reject orders
- Accepted orders:
- Validate ingredient availability
- Attempt preparation with success mechanics
- Earn money based on ingredients and stage
- Failed or imperfect orders trigger customer reactions
- Players manage inventory and restock ingredients
- Daily orders are limited to simulate realistic café workload
- End-of-day recap shows performance and earnings
- Between days, players can purchase café upgrades
- Customizable player name
- Stage-based café progression
- Persistent stats stored via JSON
- Upgrade levels stored in player state
- Persistent ingredient storage
- Ingredient consumption on successful orders
- Bulk ingredient restocking
- Storage capacity limits to prevent hoarding
- Extra capacity available through upgrades
- Stage-based order pool
- Random order generation
- Accept / Reject order flow
- Tracks completed, imperfect, failed, and rejected orders
- Success-based preparation mechanics
- Precision upgrade increases preparation success rate
- Imperfect orders give reduced reward
Ingredient-driven pricing system:
Order Price = Total Ingredient Cost × 1.5 × Stage Multiplier
- Prices rounded to the nearest multiple of 5
- Failed orders apply a 10% penalty
- Money is persisted between sessions
Each in-game day generates a weather condition.
Weather modifies the number of daily orders available.
Example weather effects:
- Sunny → normal customers
- Rain → slightly more customers
- Storm → less customers
- Festival → more customers
Weather is shown in the café status display.
Each day has a maximum number of orders determined by:
- Player stage
- Current weather
Once the daily limit is reached:
- The café automatically closes
- End-of-day recap is triggered
Players can upgrade café equipment between days.
Current upgrades include:
- Improves drink preparation accuracy
- Expands ingredient storage capacity
Upgrade costs scale with upgrade level.
Customers now react to drink quality with dialogue and emojis.
Examples:
- 🤤 Perfect orders
- 😓 Imperfect orders
- 🫤 Failed orders
This adds personality and immersion to the gameplay loop.
The status screen now shows:
- Current stage
- Current balance
- Weather today
- Orders served today
- Progress toward next stage
At the end of each day the game shows:
- Orders completed
- Imperfect and failed orders
- Money earned
- Current balance
- Progress toward next stage
- JSON-based storage for player stats and inventory
- Hash-based integrity checks to detect save tampering
- Reset / Start / Continue game flow
- Centralized default state via
default_state.json
New players can read the full gameplay guide inside:
player_guide/
It includes:
- How to play
- Orders and ingredients
- Inventory management
- Preparation mechanics
- Player stats
- Reset and save system
git clone <repository-url>
cd cafe-driftpython main.pyOr (PyCharm users):
Right Click → Run main.py
cafe-drift/
│
├── data/
│ ├── capacity_upgrades.json
│ ├── upgrades.json
│ ├── weather_rules.json
│ ├── customer_dialogue.json
│ ├── stage_rules.json
│ ├── default_state.json
│ ├── ingredient_pool.py
│ └── order_pool.py
│
├── models/
│ ├── player.py
│ ├── order.py
│ └── ingredient.py
│
├── player_guide/
│ ├── faq.md
│ ├── README.md
│ ├── how_to_play.md
│ ├── player_stats.md
│ ├── preparation.md
│ ├── inventory.md
│ ├── ingredients.md
│ ├── orders.md
│ └── reset_and_saves.md
│
├── runtime_data/
│ ├── integrity.json
│ ├── inventory.json
│ └── player_stats.json
│
├── services/
│ ├── inventory_service.py
│ ├── ingredient_service.py
│ ├── order_service.py
│ ├── preparation_service.py
│ ├── upgrade_service.py
│ ├── weather_service.py
│ ├── stage_service.py
│ └── economy_service.py
│
├── ui/
│ ├── inventory_display.py
│ └── status_display.py
│
├── utils/
│ ├── file_handler.py
│ ├── text_effects.py
│ └── validators.py
│
├── main.py
├── config.py
├── README.md
├── CHANGELOG.md
├── LICENSE
├── requirements.txt
└── .gitignore
Future updates may include:
- Gameplay balancing
- Expanded order variety
- More café upgrades
- Improved CLI interface
- Optional GUI version in future releases
Café Drift is currently in alpha development.
Gameplay systems may evolve and save compatibility is not guaranteed across versions.
Language: Python Storage: JSON (local persistence) Architecture: Modular service-based design Environment: Python virtual environment (venv)
Café Drift includes a Reset Game feature that restores:
- Player stats
- Inventory
- Save integrity data
This is useful for testing and restarting gameplay.
- This project is built as a learning-focused portfolio project
- Not intended for commercial release
- Feedback and architectural suggestions are welcome
Developed by GenStryke Codex
This project is licensed under the MIT License.
⭐ Café Drift is now feature-rich and fully playable, and future updates will focus on expanding gameplay depth and polish.