A fully functional Windows 99-style operating system interface for Arma 3, featuring a complete desktop environment, interactive applications, and seamless multiplayer integration.
📖 View Full Documentation | 🚀 Quick Start | 💬 Discord Community
- Install Required Mods: CBA_A3 and ACE3
- Load Mission: Open
forge_os_bare.VRin the Arma 3 Editor - Preview: Click Preview and approach the keyboard object
- Open OS: Press Windows key (ACE interaction) → Select "Open OS"
- Explore: Use the desktop, start menu, and applications!
Add Custom Mission Briefings:
- Place your markdown file in
mpmissions/forge_os_bare.VR/snet/ops/briefings/ - Run the converter:
tools/media_to_base64.exe(enter..when prompted for recursive processing) - Update
Win99UI/js/config.jsto register the file - Your briefing is now accessible in the SNet Intelligence Center!
View Full Media Management Guide →
Create Your First App:
class MyApp extends Window {
constructor() {
super({
title: 'My Application',
icon: 'FORGE_FX_Desktop_Ico_Notepad01_CA',
width: 800,
height: 600
});
// Your app code here
}
}
window.MyApp = MyApp;Forge OS brings a vintage Windows 98/99 computing experience into Arma 3. Players can interact with a fully functional operating system through in-game computer terminals, complete with draggable windows, functional applications, and multiplayer synchronization. Perfect for role-playing scenarios, mission briefings, intelligence coordination, and immersive gameplay experiences.
- Authentic Windows 98/99 aesthetic with retro UI elements
- Window management system - Draggable, resizable, minimizable windows
- Start menu with organized program categories
- Taskbar with active window tracking
- Desktop shortcuts with custom icons
- Wallpaper system with customization support
- Create, edit, and save text files
- Full file menu (New, Open, Save)
- Edit operations (Cut, Copy, Paste, Select All)
- Persistent storage across game sessions
- Real-time multiplayer chat system
- Player list with online status indicators
- Status updates (Online, Away, Busy)
- Message history and notifications
- CBA event-based synchronization
- Event creation with title, date, time, and location
- Event list view with color coding
- Event management (create, delete)
- Persistent event storage
- In-game web browser interface
- Custom web applications support
- Navigation controls and address bar
- Iframe-based page rendering
- Mission briefing viewer
- Intelligence document browser
- Media viewer (images, videos, audio)
- Markdown rendering support
- Categorized file system (Operations, Intel, Surveillance)
- Synchronized player chat across all connected clients
- Real-time status updates for all players
- Shared calendar events visible to all team members
- CBA event system for efficient network communication
- Server-authoritative player tracking and data management
- Python 3.7+ - For asset processing tools
- PyInstaller - For building standalone executables
-
Subscribe to the required mods on Steam Workshop:
-
Enable the mods in Arma 3 Launcher
-
Load the forge_os_bare.VR mission from the Virtual Reality map
-
In-game, approach a keyboard object and use ACE interaction (Windows key by default) to select "Open OS"
-
Clone this repository into your Arma 3 missions folder:
git clone https://github.com/yourusername/forge_os.git cd forge_os -
Install Python development tools (optional):
cd mpmissions/forge_os_bare.VR/Win99UI/tools pip install -r requirements.txt -
Edit mission files in your preferred code editor
-
Test in Arma 3 editor or dedicated server
- Backend: SQF (Arma 3 scripting language)
- Frontend: HTML/CSS/JavaScript with Windows 98/99 UI theme
- Bridge: Arma 3 ↔ CEF browser communication via JSDialog events
- State Management: HashMapObject pattern for object-oriented design
- Networking: CBA event system for multiplayer synchronization
- Storage: Profile namespace for persistent client data
forge_os/
├── mpmissions/
│ └── forge_os_bare.VR/
│ ├── Win99/ # Backend SQF modules
│ │ ├── main/ # Core initialization
│ │ ├── calendar/ # Calendar application
│ │ ├── messenger/ # Messenger application
│ │ ├── notepad/ # Notepad application
│ │ ├── snet/ # Intelligence system
│ │ ├── email/ # Email module (stub)
│ │ └── db/ # Database utilities
│ │
│ ├── Win99UI/ # Frontend JavaScript
│ │ ├── index.html # Entry point
│ │ ├── js/ # Core JS modules
│ │ │ ├── main.js # OS orchestrator
│ │ │ ├── config.js # System configuration
│ │ │ ├── loader.js # Component loader
│ │ │ ├── a3bridge.js # Arma-browser bridge
│ │ │ └── globalFunctions.js
│ │ │
│ │ ├── apps/ # Applications
│ │ │ ├── calendar.js
│ │ │ ├── messenger.js
│ │ │ ├── notepad.js
│ │ │ ├── snet.js
│ │ │ ├── internetexplorer.js
│ │ │ └── helpers/ # Shared utilities
│ │ │
│ │ ├── components/ # UI components
│ │ │ ├── desktop/
│ │ │ ├── window/
│ │ │ ├── taskbar/
│ │ │ ├── startmenu/
│ │ │ └── dialog/
│ │ │
│ │ ├── styles/ # CSS files
│ │ └── tools/ # Build utilities
│ │
│ ├── snet/ # Intelligence data
│ │ ├── ops/briefings/
│ │ ├── intel/
│ │ └── surveillance/
│ │
│ ├── init.sqf # Mission initialization
│ ├── initServer.sqf # Server initialization
│ ├── initPlayerLocal.sqf # Client initialization
│ └── description.ext # Mission config
Forge OS 2.0 uses a modern object-oriented architecture with HashMapObject instances for state management:
Benefits:
- Encapsulated state per application
- Clean API surface with public methods
- Independent data management
- Better multiplayer synchronization
- Easier testing and debugging
Example:
// Create a Calendar instance
private _calendar = [] call win99_calendar_fnc_createCalendar;
// Call methods
_calendar call ["createEvent", [_eventData]];
_calendar call ["deleteEvent", [_eventId]];- JavaScript calls
A3Bridge.sendCommand(command, data) - Command formatted as JSON and sent via
alert() - CEF triggers
JSDialogevent in Arma initPlayerLocal.sqfevent handler routes to HashMapObject- HashMapObject processes command and triggers CBA events if needed
- SQF executes
_ctrl ctrlWebBrowserAction ["ExecJS", "functionName(args)"] - JavaScript function executes in browser context
- UI updates accordingly
Located in mpmissions/forge_os_bare.VR/Win99UI/tools/
Compresses CSS files using zlib + base64 encoding.
python compress_css.py
# Enter: .. (recursive) or . (current directory only)Output: .css.b64 files ready for framework
Converts media files to base64 encoding.
python media_to_base64.py
# Supports: .png, .jpg, .jpeg, .mp3, .mp4, .webm, .mdOutput: .b64 files for media assets
Advanced CSS packaging with multiple compression options.
compress_css.py for production.
python -m PyInstaller --onefile --name compress_css Win99UI\tools\compress_css.py
python -m PyInstaller --onefile --name media_to_base64 Win99UI\tools\media_to_base64.pyExecutables will be created in dist/ directory.
-
Create SQF module in
Win99/your_app/- Implement
fnc_createYourApp.sqfwith HashMapObject - Define methods for data management
- Add XEH files for initialization
- Implement
-
Create JavaScript application in
Win99UI/apps/- Extend base application class
- Implement UI rendering
- Use
A3Bridgefor backend communication
-
Register in config (
Win99UI/js/config.js)- Add to applications registry
- Define start menu entry
- Configure desktop shortcut (optional)
-
Add event handlers in
initPlayerLocal.sqf- Route commands to HashMapObject methods
- Use HashMapObject for stateful components
- Client-side processing whenever possible for performance
- CBA events for multiplayer synchronization only when needed
- Profile namespace for persistent client data
- Compress assets using provided tools before deployment
- Document your code with JSDoc comments
- Follow existing patterns in codebase for consistency
Comprehensive guides and tutorials available online:
Getting Started:
- Introduction - Overview and features
- Installation - Setup for players and developers
- Project Structure - Codebase organization
Customization:
- Media Management - Add images, videos, audio, and markdown
- Custom Applications - Build your own apps
Additional Resources:
- codebase-summary.md - Complete technical overview
- workshop-readme.md - Steam Workshop description
- Win99UI/tools/README.md - Asset processing tools guide
- snet/ops/briefings/ - Example mission briefings
- Migrated to HashMapObject architecture for all applications
- Client-side event handling for improved performance
- Enhanced multiplayer synchronization
- Comprehensive documentation and code cleanup
- Fixed timestamp tracking in database systems
- Deprecated legacy centralized event handler
- Full desktop environment with window management
- 5 functional applications (Notepad, Messenger, Calendar, Browser, SNet)
- Multiplayer synchronization via server-side handlers
- Persistent data storage
- Windows 98/99 retro UI aesthetic
- Single OS instance - Currently hardcoded to "OS1"
- Email module - Stub implementation, not fully functional
- Screen mirroring - Physical screen display needs modernization
- CSS compression - Framework only supports zlib (not gzip/brotli)
- CSS minification - Not yet supported by loader
Contributions are welcome! Areas that need help:
- Screen Mirroring System - Modernize to work with HashMapObject architecture
- Email Module - Complete implementation
- Additional Applications - Create new apps (File Explorer, Paint, etc.)
- UI Improvements - Enhance visual polish and animations
- Documentation - Add tutorials and guides
- Fork the repository
- Create a feature branch (
git checkout -b feature/YourFeature) - Follow existing code patterns and architecture
- Document your changes
- Test thoroughly in multiplayer
- Submit a pull request
Mission Design & Development: J. Schmidt
Icons & Textures: VolumeInfinite
UI Framework: Windows 98 CSS Recreation
Dependencies: CBA_A3, ACE3
Community: Arma 3 modding community
This project is provided as-is for the Arma 3 community. Please respect CBA and ACE3 licensing terms.
- Issues: Report bugs via GitHub Issues
- Discord: Join our community Discord server
- Workshop: Discuss on Steam Workshop page
- Documentation: Review comprehensive docs in mission folder
Built for the Arma 3 community