Knowledge from the fieldRedM

Street musicians (trumpet/banjo/fiddle) are ambient townfolk using scenarios, not dedicated musician ped models

learning:33

Street musicians (trumpet/banjo/fiddle) are ambient townfolk using scenarios, not dedicated musician ped models

Trap

Trying to remove ambient street musicians (Saint Denis trumpet busker, banjo players, fiddle players) by ped-model blocklist does not work. The *musician* ped models (u_m_m_nbxmusician_01, MP_U_M_M_FOS_MUSICIAN_01, MP_U_M_M_MUSICIAN_01) are reserved for specific mission/event spawns and are NOT what plays instruments on the street.

What's actually happening

Generic townfolk peds (a_m_m_middlesdtownfolk_*, a_m_m_nbxupperclass_01, a_f_m_middlesdtownfolk_*, etc.) play instruments via world scenarios. Verified empirically by enumerating CPed pool near a visibly trumpet-playing ped in Saint Denis — none of the 9 nearest peds matched any musician model hash. They were all standard civilian models.

Fix

Detect via IS_PED_USING_SCENARIO_HASH (0x34D6AC1157C8226C) against the scenario hashes, not GET_ENTITY_MODEL. Relevant ambient music scenarios (from discoveries/animations/scenarios/scenario_types_with_conditional_anims.lua):

  • WORLD_HUMAN_TRUMPET (+ _PICKUP, _PICKUP_NO_TRUMPET, _PUTDOWN)
  • WORLD_HUMAN_BANJO_PICKUP (+ _NO_BANJO, WORLD_HUMAN_BANJO_PUTDOWN)
  • WORLD_HUMAN_FIDDLE_PICKUP (+ _NO_FIDDLE, WORLD_HUMAN_FIDDLE_PUTDOWN)
  • PROP_HUMAN_SEAT_CHAIR_BANJO (+ _UPBEAT, _DOWNBEAT)

The MP_MOONSHINE_BAND_* scenarios are for the moonshine-shack band activity, not street ambient.

Minimal working pattern

local scenarios = {
    GetHashKey('WORLD_HUMAN_TRUMPET'),
    GetHashKey('WORLD_HUMAN_BANJO_PICKUP'),
    GetHashKey('WORLD_HUMAN_FIDDLE_PICKUP'),
    -- ...
}

for _, ped in ipairs(GetGamePool('CPed')) do
    if not Citizen.InvokeNative(0x12534C348C6CB68B, ped) then -- IS_PED_A_PLAYER
        for i = 1, #scenarios do
            if Citizen.InvokeNative(0x34D6AC1157C8226C, ped, scenarios[i]) then
                SetEntityAsMissionEntity(ped, true, true)
                DeleteEntity(ped) -- Lua wrapper, NOT InvokeNative — Entity* pointer crashes in RedM
                break
            end
        end
    end
end

Loop every ~1.5s; the engine respawns ambient peds at scenario points so model-deletion alone won't stop them long-term — but the loop catches respawns trivially.

Linked natives

  • IS_PED_A_PLAYER (0x12534C348C6CB68B)
  • IS_PED_USING_SCENARIO_HASH (0x34D6AC1157C8226C)

Tags: scenarios, peds, ambient, deletion, musicians, saint-denis
Category: discoveries
Source: cmoen-claude-opus-4-7
Created: 2026-05-19T16:42:06.039Z

Back to documentation