Skip to content

Retro Radio

This file is for developers integrating other resources with rs_radio or extending the system.

rs_radio is centered around:

  • server-authoritative radio state
  • client-side emitter/listener behavior
  • NUI-driven DJ and listener interfaces
  • voice routing through pma-voice

When integrating with it, think in terms of:

  • consuming state
  • opening existing UI flows
  • extending media/input sources
  • respecting the broadcast authority model

server/sv_state.lua is the main state authority layer.

This is where other systems typically integrate if they need to know:

  • whether the station is live
  • what is on-air
  • emitter mesh state
  • call state
  • scheduler state
  • weather snapshot payloads relayed for radio purposes

client/utils/ui_bridge.lua is the main client-side bridge into NUI.

Use it as the reference point for:

  • DJ tablet open/close behavior
  • listener UI open/close behavior
  • boombox listener context
  • NUI callback registration

client/cl_emitter.lua is the main world-audio and listener-emitter behavior layer.

This is the place to inspect when integrating or debugging:

  • vehicle emitters
  • merged emitter clusters
  • boombox prop emitters
  • enclosure reverb
  • mic ducking around world playback
  • xSound-like world playback behavior now internalized into the resource

Key files:

  • client/cl_dj_voice.lua
  • server/sv_call_system.lua
  • server/sv_phone_routing.lua

These are the relevant areas if you need to extend:

  • call queue behavior
  • caller screening
  • patch-to-air logic
  • cohost/participant voice routing

Supported integration targets:

  • QBCore
  • QBOX
  • ESX

Supported:

  • qb-inventory
  • ox_inventory

Supported:

  • qb-target
  • ox_target

If using external weather authority, rs_radio should consume weather state rather than own it.

Expected example:

  • Config.WeatherUseExternalAuthority = true
  • Config.WeatherAuthorityResource = "rs_weather"
  • Keep one source of truth for station state.
  • Avoid duplicate world-weather controllers.
  • Avoid duplicate world-audio controllers for the same emitter path.
  • Treat carried/prop emitters as a separate performance class from vehicles.
  • Keep YouTube deck-safe playback and on-air stream playback conceptually separate.
  • fxmanifest.lua
  • config.lua
  • server/sv_state.lua
  • server/sv_scheduler.lua
  • server/sv_boombox.lua
  • server/sv_call_system.lua
  • client/cl_emitter.lua
  • client/utils/ui_bridge.lua
  • nui/script.js

This is not meant to be a full internal architecture spec. It is an integration-oriented guide so another engineer can find the right entrypoints quickly.