Migrating from MTA
Moving a Multi Theft Auto server to Vital.sandbox
Overview
MTA: San Andreas is an open-source multiplayer modification for GTA San Andreas. Its scripting environment runs on top of the GTA SA engine with Lua, and supports custom assets, UIs, and server-side logic.
Vital.sandbox is a standalone platform with no dependency on GTA SA or its assets. Vital.sandbox runs on Godot 4 + C++17 with a purpose-built Lua sandbox. Asset formats, the resource system, and scripting patterns differ from MTA.
Platform comparison
| Area | MTA | Vital.sandbox |
|---|---|---|
| Open source | Partially — networking layer is closed source | Yes |
| Base game required | Yes — GTA SA client | No — standalone |
| Licensing | No restrictions | No restrictions |
| Hosting | Self-hosted | Self-hosted |
| Discovery | External master list | External master list |
| Monetization | Your own implementation | Your own implementation |
| Revenue cut | None | None |
| Language | Lua, primarily single-threaded | Lua — async threads, promises, event-driven, per-environment isolation |
| Maintenance | Active | Actively developed |
| Rendering | GTA SA renderer | Godot 4 — PBR, SDFGI, SSR, SSAO, volumetric fog, glow, full GFX API |
| Physics | GTA SA physics | Godot physics — rigid body, character, vehicle, area, collision shapes, raycast |
| Networking | MTA network layer (closed source) | Built-in sync — net IDs, ISyncable, server-authoritative replication |
| UI | CEF browser + MTA GUI | Native WebView, Canvas 2D, SVG, Render Targets, custom fonts and textures |
| Audio | OpenAL via GTA | Audio 2D + Audio 3D — spatial attenuation, pitch, FX chain |
| Model formats | .DFF (RenderWare) | GLB |
| Texture formats | .TXD (RenderWare) | JPG, PNG, WEBP, BMP, DDS, KTX, EXR |
| Collision formats | .COL | Built into GLB |
| Audio formats | GTA SA audio | OGG, WAV, MP3 |
| Database | MySQL via plugin | MySQL — core.database with async query API |
| HTTP | Fetch via plugin | util.http — GET/POST, custom headers, timeout |
| File I/O | fileOpen / fileWrite / fileRead | util.file — read, write, hash, delete |
What carries over
| System | MTA | Vital.sandbox |
|---|---|---|
| Events | • addEventHandler• triggerEvent• triggerClientEvent | • util.event.on• util.event.off• util.event.emit• util.event.emit_callback |
| Timers | • setTimer• killTimer | • util.timer.create• util.timer.next_tick |
| HTTP | • Fetch via plugin | • util.http.get• util.http.post |
| Database | • MySQL via plugin | • core.database.create• core.database_query.select• core.database_query.insert• core.database_query.update• core.database_query.delete• core.database_query.fetch• core.database_query.execute |
| 3D Models | • engineLoadDFF• engineLoadTXD• engineLoadCOL• engineApplyShaderToWorldTexture | • core.model.load• core.model.unload• core.model.create |
| Vehicles | • MTA vehicle API | • physics.vehicle_body.create• physics.vehicle_wheel.create |
| UI | • CEF browser • MTA GUI elements | • core.webview.create• core.svg.create• core.svg.create_from_raw |
| Audio | • OpenAL via GTA | • core.audio_2d.create• core.audio_3d.create |
| Images | • GTA SA textures | • core.image.create |
| File I/O | • fileOpen• fileWrite• fileRead | • util.file.read• util.file.write• util.file.exists• util.file.delete• util.file.hash• util.file.size• util.file.contents |
| Networking | • MTA sync layer | • core.engine.get_entity_by_net_id |
| Async scripting | • Coroutine-based | • util.thread.create• util.thread.current• util.promise.create |
What does not carry over
- GTA San Andreas assets — map, vehicles, weapons, peds, interiors. You need your own assets in supported formats.
- GTA-SA specific APIs — ped animation sets, weapon pickups, wanted level, and anything that addresses the GTA engine binary directly. These have no equivalent.
- MTA XML resource format — Vital.sandbox uses
manifest.yamlper resource with a different script declaration and dependency structure. - Built-in game world — there is no world loaded by default. Map, terrain, and environment are your own assets to load.