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

AreaMTAVital.sandbox
Open sourcePartially — networking layer is closed sourceYes
Base game requiredYes — GTA SA clientNo — standalone
LicensingNo restrictionsNo restrictions
HostingSelf-hostedSelf-hosted
DiscoveryExternal master listExternal master list
MonetizationYour own implementationYour own implementation
Revenue cutNoneNone
LanguageLua, primarily single-threadedLua — async threads, promises, event-driven, per-environment isolation
MaintenanceActiveActively developed
RenderingGTA SA rendererGodot 4 — PBR, SDFGI, SSR, SSAO, volumetric fog, glow, full GFX API
PhysicsGTA SA physicsGodot physics — rigid body, character, vehicle, area, collision shapes, raycast
NetworkingMTA network layer (closed source)Built-in sync — net IDs, ISyncable, server-authoritative replication
UICEF browser + MTA GUINative WebView, Canvas 2D, SVG, Rendertargets, custom fonts and textures
AudioOpenAL via GTAAudio 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.COLBuilt into GLB
Audio formatsGTA SA audioOGG, WAV, MP3
DatabaseMySQL via pluginMySQL — core.database with async query API
HTTPFetch via pluginutil.http — GET/POST, custom headers, timeout
File I/OfileOpen / fileWrite / fileReadutil.file — read, write, hash, delete

What carries over

SystemMTAVital.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.yaml per 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.

On this page