Project Name: The Bazaar Gate Type: Windows Desktop Application (The Bazaar launcher helper) Core Functionality: Bypasses Tempo Launcher's file integrity verification by automating mod backup/deletion/capture/restore workflow Target Users: Gamers who want to use mods with games that require Tempo Launcher
- Language: Python 3.9+
- GUI Framework: Tkinter (ttk widgets)
- Platform: Windows only (uses win32gui, psutil)
- Build Tool: PyInstaller
- Dependencies:
- psutil (process management)
- pywin32 (Windows API)
-
Multi-Language Support
- CSV-based translation system
- Language file embedded in executable
- Runtime language switching
- Auto-detect system language
- Extensible: add new languages by modifying source and rebuilding
-
Path Management
- Game directory selection with validation
- Launcher directory selection with auto-detection
- Default path detection
- Persistent settings storage
-
Mod Management
- Configurable mod file list
- Automatic backup before launch
- Automatic restore after parameter capture
- Support for files and folders
-
Parameter Capture
- Launch Tempo Launcher automatically
- Wait for user interaction (click PLAY)
- Capture command-line parameters
- Close game process gracefully
-
Modern UI
- Flat design with card-based layout
- Dark terminal-style log output
- Color-coded status messages
- Responsive layout
-
Single-File Distribution
- All resources embedded in executable
- No external configuration files needed
- Portable - just run and go
- Default Size: 500 x 600 pixels
- Minimum Size: 450 x 500 pixels
- Resizable: Yes
- Title: "The Bazaar Gate" (localized)
| Element | Color |
|---|---|
| Background | #f0f2f5 |
| Card Background | #ffffff |
| Primary Button | #0078d4 |
| Primary Button Hover | #106ebe |
| Text Primary | #1a1a1a |
| Text Secondary | #333333 |
| Text Hint | #888888 |
| Success | #00ff00 |
| Error | #ff0000 |
| Warning | #ffa500 |
| Log Background | #1e1e1e |
| Log Text | #cccccc |
- Title: Microsoft YaHei UI, 16px, Bold
- Header: Microsoft YaHei UI, 11px, Bold
- Label: Microsoft YaHei UI, 10px
- Log: Consolas, 9px
┌────────────────────────────────────┐
│ [Title: 🎮 The Bazaar Gate] │
├────────────────────────────────────┤
│ [🌐 Language ▼] [⚙️ Settings] │ <- Language Card
├────────────────────────────────────┤
│ 📁 Game Directory │
│ [________________] [Browse] │ <- Settings Card
│ │
│ 🚀 Launcher Directory │
│ [________________] [Browse] │
├────────────────────────────────────┤
│ [ 🎯 启动游戏 ] │ <- Button Card
├────────────────────────────────────┤
│ [Status: ✅ Ready] │ <- Status Label
├────────────────────────────────────┤
│ 📋 Operation Log │
│ ┌──────────────────────────────┐ │
│ │ [Dark terminal log output] │ │ <- Log Card
│ │ │ │
│ └──────────────────────────────┘ │
└────────────────────────────────────┘
┌────────────────────────────────────┐
│ [← Back] [📦 Mod Files Config] │
├────────────────────────────────────┤
│ 📝 Mod Files List (click to edit) │
│ 📖 Enter one file/folder per... │
│ ┌──────────────────────────────┐ │
│ │ [Text editor with mod list] │ │
│ │ │ │
│ └──────────────────────────────┘ │
│ [ 💾 Save Settings ] │
└────────────────────────────────────┘
File: settings.txt (JSON format, created in the program directory at runtime)
{
"game_path": "C:\\path\\to\\game",
"launcher_path": "C:\\path\\to\\launcher",
"language": "zh",
"mod_items": ["BepInEx", "BazaarPlusPlus", "doorstop_config.ini", "winhttp.dll"]
}File: dist/language.csv (embedded in executable at build time)
key,zh,en
app_title,The Bazaar Gate,The Bazaar Gate
title_with_emoji,🎮 The Bazaar Gate,🎮 The Bazaar Gate
...Rules:
- Column 1: Translation key (unique identifier)
- Columns 2+: Language codes (zh, en, ja, etc.)
- Format strings use
{}placeholders - Multiline values should be quoted
1.1. Get list of mod files from mod_items
1.2. For each existing file/folder:
- Copy to mod_backup/ directory
- Delete from game directory
1.3. Log operation results
2.1. Launch Tempo Launcher
2.2. Wait for launcher window (30s timeout)
2.3. Wait for game process (120s timeout)
2.4. Capture command-line parameters
2.5. Terminate game process gracefully
3.1. Copy files from mod_backup/ back to game directory
3.2. Delete mod_backup/ folder
3.3. Log operation results
4.1. Launch game with captured parameters
4.2. Exit application
| Error | Handling |
|---|---|
| Game path not set | Show error dialog, abort |
| Game exe not found | Show error dialog, abort |
| Launcher exe not found | Show error dialog, abort |
| Backup failed | Show error, try cleanup, abort |
| Delete mods failed | Restore backups, show error, abort |
| Parameter capture timeout | Show error, try cleanup, abort |
| Restore failed | Log error, continue |
| Settings save failed | Log error, continue |
- No network communication required
- Local file operations only
- No sensitive data stored
- Executable runs with user privileges
- Output Name: TheBazaarGate.exe
- Mode: Onefile, windowed (no console)
- Data Files: language.csv (embedded)
- Hidden Imports: psutil, win32gui, win32con, pywintypes, shlex
Source:
The_Bazaar_Gate/
├── dist/
│ ├── launcher_tool.py # Main application source
│ └── language.csv # Language file (embedded when built)
├── build_exe.py # Build script
└── requirements.txt # Python dependencies
Build Output:
dist/TheBazaarGate.exe # Self-contained executable
| Code | Language | Status |
|---|---|---|
| zh | Chinese (Simplified) | Default |
| en | English | Full |
| zh_Hant | Chinese (Traditional) | Full |
| ru | Russian | Full |
| ko | Korean | Full |
| ja | Japanese | Full |
- Edit
dist/language.csvin source code - Add new column with language code
- Translate all values
- Rebuild executable with
python build_exe.py - New language will appear in dropdown automatically
All UI text must use translation keys. No hardcoded strings allowed.
- Custom mod file patterns (regex support)
- Multiple mod profiles
- Backup versioning
- Cross-platform support (Linux/macOS)
- Configurable timeouts
- Dark/Light theme toggle
- Log export functionality