Hacking sim game?
			
		
		
				The UI codebase was suffering with complexity due to the need to manually convert between two different coordinate systems: - Top-down "screen coordinates" used by SDL for input and windowing. - Bottom-up "GL coordinates" used by low-level renderers. This was making layout calculations diffucult and is bug prone. With this commit, I'm introducing a 'UIRenderer' abstraction layer that wraps the low-level 'ShapeRenderer' and 'TextRenderer'. This is responsible for centralising all coordinate system conversations. All UI components has been refactored to use the 'UIRenderer' so the entire UI code opeates exclusively in a single, top-down screen coordinate system as one would expect.  | 
			||
|---|---|---|
| assets | ||
| client | ||
| common | ||
| server | ||
| .gitignore | ||
| CMakeLists.txt | ||
| Makefile | ||
| README.org | ||
Working Title: Bettola
A multiplayer hacking simulator with a graphical OS, built in C++ and OpenGL.
Dependencies
The following dependencies are required:
- A C++ compiler (e.g., clang, g++)
 - CMake (3.16 or newer)
 - SDL3 development libraries
 - SDL3_net development libraries (managed by CMake)
 - GLEW development libraries
 - FreeType development libraries
 - Lua 5.4 development libraries
 - sol2 (header-only, managed by CMake)
 
Installation (Debian)
You can install most required dependencies with the following command:
sudo apt update
sudo apt install build-essential clang cmake libsdl3-dev libglew-dev libfreetype-dev liblua5.4-dev
Build Instructions
This project uses a top-level Makefile to simplify the CMake workflow. Build
artifacts will be placed in the bin/ directory.
Simply run the following commands from the root of the project directory:
- 
Build the project:
make - 
Build and run the client:
make runc - 
Build and run the server:
make runs - 
Clean the project: This removes the
bin/directory.make clean 
Project Structure
The codebase is organised into three main components:
common/: A shared library (libbettola) containing code used by both the client and server.client/: The game client (bettolac), handles rendering, UI, and user input.server/: The game server (bettolas) manages game state and the world simulation.
Planned Features
Note: [X] indicates a feature that is currently in progress.
Core Gameplay & Hacking
- Custom-built graphical OS desktop environment.
 - Interactive terminal with command history and scrolling.
 - Draggable and focusable UI windows.
 - Local and remote virtual file systems (VFS).
 - Core filesystem commands (
ls,cd). - Remote system connections via ingame 
sshtool. - Network scanning tools to discover hosts, open ports, and running services.
 - A deep exploit system based on service versions (e.g., SSH, FTP, HTTP).
 - Ability to find, modify, and write new exploits.
 - Functionality to upload/download files to and from remote systems.
 - Log cleaning utilities and other tools for covering your tracks.
 - Social engineering through in-game email and websites.
 
The World
- Narrative-driven main storyline (serves as tutorial before the sandbox world).
 - Emergent gameplay arising from the interaction of world systems.
 - A persistent, shared "core" universe of high-level NPC networks.
 - A unique, procedurally generated "local neighbourhood" for each new player.
 - NPC factions and corporations with simulated goals and stock markets.
 - Dynamic missions generated organically from the state of the world.
 - Active NPC system administrators who patch vulnerabilities and hunt for intruders.
 
Player Systems & Progression
- Embedded Lua scripting engine for creating custom tools.
 - In-game code editor with syntax highlighting etc.
 - Secure, sandboxed execution of player scripts with CPU/RAM as a resource.
 - An in-game internet with a web browser, email, and online banking.
 - Online stores for purchasing virtual hardware, software, and exploits.
 - The ability to purchase and upgrade dedicated servers.
 - Hosting of player-owned services (web, FTP, etc.).
 - Creation of custom websites using HTML and basic JS.
 - Player-to-player secure messaging and file transfers.