aboutsummaryrefslogtreecommitdiff
path: root/Northstar.CustomServers/scripts/vscripts/_pain_death_sounds.gnut
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.CustomServers/scripts/vscripts/_pain_death_sounds.gnut')
-rw-r--r--Northstar.CustomServers/scripts/vscripts/_pain_death_sounds.gnut455
1 files changed, 0 insertions, 455 deletions
diff --git a/Northstar.CustomServers/scripts/vscripts/_pain_death_sounds.gnut b/Northstar.CustomServers/scripts/vscripts/_pain_death_sounds.gnut
deleted file mode 100644
index 10d2b6166..000000000
--- a/Northstar.CustomServers/scripts/vscripts/_pain_death_sounds.gnut
+++ /dev/null
@@ -1,455 +0,0 @@
-global function PainDeathSounds_Init
-global function PlayDeathSounds
-global function PlayPainSounds
-global function TogglePainDeathDebug
-
-struct PainOrDeathSound
-{
- bool functionref( entity, entity, bool, int, int ) isSoundTypeFunc
- string alias_1p_victim_only
- string alias_3p_except_victim
- string alias_3p_attacker_only
- string alias_3p_except_attacker
- bool blocksPriority
- int priority
-}
-
-struct
-{
- array< array<PainOrDeathSound> > painSounds
- array< array<PainOrDeathSound> > deathSounds
-
- bool painDeathDebug
-} file
-
-
-enum eBodyTypes
-{
- NPC_ANDROID
- NPC_GRUNT
- NPC_MARVIN
- NPC_PROWLER
- NPC_SPECIALIST
- NPC_SPECTRE
- NPC_STALKER
- NPC_SUPER_SPECTRE
- PLAYER_ANDROID_FEMALE
- PLAYER_ANDROID_MALE
- PLAYER_HUMAN_FEMALE
- PLAYER_HUMAN_MALE
- TITAN
- total
-}
-
-int function GetBodyTypeIndexFromVictim( entity victim )
-{
- // can add hologram support if needed
- if ( victim.IsHologram() )
- return -1
-
- if ( victim.IsTitan() )
- return eBodyTypes.TITAN
-
- if ( victim.IsPlayer() )
- {
- if ( victim.IsMechanical() )
- {
- if ( IsPlayerFemale( victim ) )
- return eBodyTypes.PLAYER_ANDROID_FEMALE
-
- return eBodyTypes.PLAYER_ANDROID_MALE
- }
- else
- {
- if ( IsPlayerFemale( victim ) )
- return eBodyTypes.PLAYER_HUMAN_FEMALE
-
- return eBodyTypes.PLAYER_HUMAN_MALE
- }
- }
-
- if ( IsSpecialist( victim ) )
- return eBodyTypes.NPC_SPECIALIST
-
- if ( IsGrunt( victim ) )
- return eBodyTypes.NPC_GRUNT
-
- if ( IsProwler( victim ) )
- return eBodyTypes.NPC_PROWLER
-
- if ( IsSuperSpectre( victim ) )
- return eBodyTypes.NPC_SUPER_SPECTRE
-
- if ( IsSpectre( victim ) )
- return eBodyTypes.NPC_SPECTRE
-
- if ( IsStalker( victim ) )
- return eBodyTypes.NPC_STALKER
-
- if ( IsMarvin( victim ) )
- return eBodyTypes.NPC_MARVIN
-
- return -1
-}
-
-void function PainDeathSounds_Init()
-{
- file.painSounds.resize( eBodyTypes.total )
- file.deathSounds.resize( eBodyTypes.total )
-
- var dataTable = GetDataTable( $"datatable/pain_death_sounds.rpak" )
- int numRows = GetDatatableRowCount( dataTable )
-
- int eventColumn = GetDataTableColumnByName( dataTable, "event" )
- int blocksPriorityColumn = GetDataTableColumnByName( dataTable, "blocksNextPriority" )
- int methodColumn = GetDataTableColumnByName( dataTable, "method" )
- int priorityColumn = GetDataTableColumnByName( dataTable, "priority" )
- int bodyTypeColumn = GetDataTableColumnByName( dataTable, "bodyType" )
- int alias_1p_victim_only_column = GetDataTableColumnByName( dataTable, "alias_1p_victim_only" )
- int alias_3p_except_victim_column = GetDataTableColumnByName( dataTable, "alias_3p_except_victim" )
- int alias_3p_attacker_only_column = GetDataTableColumnByName( dataTable, "alias_3p_attacker_only" )
- int alias_3p_except_attacker_column = GetDataTableColumnByName( dataTable, "alias_3p_except_attacker" )
- int visibleColumn = GetDataTableColumnByName( dataTable, "spmp" )
-
- table<string,bool> visibleMask
- visibleMask[ "spmp" ] <- true
- if ( IsMultiplayer() )
- visibleMask[ "mp" ] <- true
- else if ( IsSingleplayer() )
- visibleMask[ "sp" ] <- true
-
- for ( int i = 0; i < numRows; i++ )
- {
- string visible = GetDataTableString( dataTable, i, visibleColumn )
- if ( !( visible in visibleMask ) )
- continue
-
- int priority = GetDataTableInt( dataTable, i, priorityColumn )
- bool blocksPriority = GetDataTableBool( dataTable, i, blocksPriorityColumn )
- string event = GetDataTableString( dataTable, i, eventColumn )
- string method = GetDataTableString( dataTable, i, methodColumn )
- string bodyTypeName = GetDataTableString( dataTable, i, bodyTypeColumn )
- string alias_1p_victim_only = GetDataTableString( dataTable, i, alias_1p_victim_only_column )
- string alias_3p_except_victim = GetDataTableString( dataTable, i, alias_3p_except_victim_column )
- string alias_3p_attacker_only = GetDataTableString( dataTable, i, alias_3p_attacker_only_column )
- string alias_3p_except_attacker = GetDataTableString( dataTable, i, alias_3p_except_attacker_column )
- int bodyType = eBodyTypes[ bodyTypeName ]
-
- PainOrDeathSound painOrDeathSound
- painOrDeathSound.isSoundTypeFunc = GetSoundTypeFuncFromName( method )
- painOrDeathSound.alias_1p_victim_only = alias_1p_victim_only
- painOrDeathSound.alias_3p_except_victim = alias_3p_except_victim
- painOrDeathSound.alias_3p_attacker_only = alias_3p_attacker_only
- painOrDeathSound.alias_3p_except_attacker = alias_3p_except_attacker
- painOrDeathSound.blocksPriority = blocksPriority
- painOrDeathSound.priority = priority
-
- #if DEV
- if ( priority < 100 || priority > 500 )
- CodeWarning( "PainDeathSound event priority must be between 100 and 500. See " + event + " " + method )
- #endif
-
- switch ( event )
- {
- case "pain":
- file.painSounds[ bodyType ].append( painOrDeathSound )
- break
-
- case "death":
- file.deathSounds[ bodyType ].append( painOrDeathSound )
- break
-
- default:
- CodeWarning( "Couldn't find pain/death event type " + event )
- break
- }
- }
-
- for ( int i = 0; i < eBodyTypes.total; i++ )
- {
- file.painSounds[ i ].sort( PainOrDeathSort )
- file.deathSounds[ i ].sort( PainOrDeathSort )
- }
-}
-
-int function PainOrDeathSort( PainOrDeathSound a, PainOrDeathSound b )
-{
- if ( a.priority < b.priority )
- return -1
- if ( b.priority < a.priority )
- return 1
- return 0
-}
-
-
-bool functionref( entity, entity, bool, int, int ) function GetSoundTypeFuncFromName( string method )
-{
- switch ( method )
- {
- case "SE_ANY":
- return SE_ANY
-
- case "SE_GIB":
- return SE_GIB
-
- case "SE_BULLET":
- return SE_BULLET
-
- case "SE_DISSOLVE":
- return SE_DISSOLVE
-
- case "SE_ELECTRICAL":
- return SE_ELECTRICAL
-
- case "SE_EXPLOSION":
- return SE_EXPLOSION
-
- case "SE_FALL":
- return SE_FALL
-
- case "SE_HEADSHOT_BULLET":
- return SE_HEADSHOT_BULLET
-
- case "SE_HEADSHOT_SHOTGUN":
- return SE_HEADSHOT_SHOTGUN
-
- case "SE_HEADSHOT_TITAN":
- return SE_HEADSHOT_TITAN
-
- case "SE_NECK_SNAP":
- return SE_NECK_SNAP
-
- case "SE_THERMITE_GRENADE":
- return SE_THERMITE_GRENADE
-
- case "SE_PROWLER":
- return SE_PROWLER
-
- case "SE_SMOKE":
- return SE_SMOKE
-
- case "SE_TITAN_STEP":
- return SE_TITAN_STEP
- }
-}
-
-bool function SE_ANY( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return true
-}
-
-bool function SE_GIB( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return bool( damageTypes & DF_GIB )
-}
-
-bool function SE_BULLET( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return bool( damageTypes & DF_BULLET )
-}
-
-bool function SE_DISSOLVE( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return bool( damageTypes & DF_DISSOLVE )
-}
-
-bool function SE_ELECTRICAL( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return bool( damageTypes & DF_ELECTRICAL )
-}
-
-bool function SE_EXPLOSION( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return bool( damageTypes & DF_EXPLOSION )
-}
-
-bool function SE_FALL( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return damageSourceID == eDamageSourceId.fall
-}
-
-bool function SE_HEADSHOT_BULLET( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- if ( !isValidHeadshot )
- return false
-
- return bool( damageTypes & DF_BULLET )
-}
-
-bool function SE_HEADSHOT_SHOTGUN( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- if ( !isValidHeadshot )
- return false
-
- return bool( damageTypes & DF_SHOTGUN )
-}
-
-bool function SE_HEADSHOT_TITAN( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- if ( !attacker.IsTitan() )
- return false
-
- return isValidHeadshot
-}
-
-bool function SE_NECK_SNAP( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return damageSourceID == eDamageSourceId.human_execution
-}
-
-bool function SE_THERMITE_GRENADE( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return damageSourceID == eDamageSourceId.mp_weapon_thermite_grenade
-}
-
-bool function SE_PROWLER( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- if ( !IsValid( attacker ) )
- return false
-
- return IsProwler( attacker )
-}
-
-bool function SE_SMOKE( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return damageSourceID == eDamageSourceId.mp_weapon_grenade_electric_smoke
-}
-
-bool function SE_TITAN_STEP( entity victim, entity attacker, bool isValidHeadshot, int damageTypes, int damageSourceID )
-{
- return bool( damageTypes & DF_TITAN_STEP )
-}
-
-void function PlayPainSounds( entity victim, var damageInfo )
-{
- int bodyType = GetBodyTypeIndexFromVictim( victim )
- if ( bodyType >= 0 )
- PlayPainOrDeathSounds( file.painSounds[ bodyType ], victim, damageInfo )
-}
-
-void function PlayDeathSounds( entity victim, var damageInfo )
-{
- int bodyType = GetBodyTypeIndexFromVictim( victim )
- if ( bodyType >= 0 )
- PlayPainOrDeathSounds( file.deathSounds[ bodyType ], victim, damageInfo )
-}
-
-void function PlayPainOrDeathSounds( array<PainOrDeathSound> soundEvents, entity victim, var damageInfo )
-{
- array<string> alias_1p_victim_only
- array<string> alias_3p_except_victim
- array<string> alias_3p_attacker_only
- array<string> alias_3p_except_attacker
-
- entity attacker = DamageInfo_GetAttacker( damageInfo )
- bool isValidHeadshot = IsValidHeadShot( damageInfo, victim )
- int damageTypes = DamageInfo_GetCustomDamageType( damageInfo )
- int damageSourceID = DamageInfo_GetDamageSourceIdentifier( damageInfo )
-
- int lastPriority = 0
- bool blockingPriority
-
- foreach ( painOrDeathSound in soundEvents )
- {
- Assert( painOrDeathSound.priority >= lastPriority )
-
- if ( blockingPriority )
- {
- if ( painOrDeathSound.priority > lastPriority )
- break
- }
-
- if ( painOrDeathSound.isSoundTypeFunc( victim, attacker, isValidHeadshot, damageTypes, damageSourceID ) )
- {
- if ( painOrDeathSound.alias_1p_victim_only != "" )
- alias_1p_victim_only.append( painOrDeathSound.alias_1p_victim_only )
- if ( painOrDeathSound.alias_3p_except_victim != "" )
- alias_3p_except_victim.append( painOrDeathSound.alias_3p_except_victim )
- if ( painOrDeathSound.alias_3p_attacker_only != "" )
- alias_3p_attacker_only.append( painOrDeathSound.alias_3p_attacker_only )
- if ( painOrDeathSound.alias_3p_except_attacker != "" )
- alias_3p_except_attacker.append( painOrDeathSound.alias_3p_except_attacker )
-
- blockingPriority = painOrDeathSound.blocksPriority || blockingPriority
- }
-
- lastPriority = painOrDeathSound.priority
- }
-
- foreach ( sound in alias_3p_except_victim )
- {
- EmitSoundOnEntity( victim, sound )
- }
-
- if ( victim.IsPlayer() )
- {
- foreach ( sound in alias_1p_victim_only )
- {
- EmitSoundOnEntityOnlyToPlayer( victim, victim, sound )
- }
- }
-
- if ( attacker.IsPlayer() )
- {
- foreach ( sound in alias_3p_except_attacker )
- {
- EmitSoundOnEntityExceptToPlayer( victim, attacker, sound )
- }
-
- foreach ( sound in alias_3p_attacker_only )
- {
- EmitSoundOnEntityOnlyToPlayer( victim, attacker, sound )
- }
- }
- else
- {
- foreach ( sound in alias_3p_except_attacker )
- {
- EmitSoundOnEntity( victim, sound )
- }
- }
-
- #if DEV
- if ( !file.painDeathDebug )
- return
-
- foreach ( sound in alias_3p_except_victim )
- {
- printt( "PAIN_DEATH_DEBUG: EmitSoundOnEntity - " + sound )
- }
-
- if ( victim.IsPlayer() )
- {
- foreach ( sound in alias_1p_victim_only )
- {
- printt( "PAIN_DEATH_DEBUG: EmitSoundOnEntityOnlyToPlayer - " + sound )
- }
- }
-
- if ( attacker.IsPlayer() )
- {
- foreach ( sound in alias_3p_except_attacker )
- {
- printt( "PAIN_DEATH_DEBUG: EmitSoundOnEntityExceptToPlayer - " + sound )
- }
-
- foreach ( sound in alias_3p_attacker_only )
- {
- printt( "PAIN_DEATH_DEBUG: EmitSoundOnEntityOnlyToPlayer - " + sound )
- }
- }
- else
- {
- foreach ( sound in alias_3p_except_attacker )
- {
- printt( "PAIN_DEATH_DEBUG: EmitSoundOnEntity - " + sound )
- }
- }
- #endif
-}
-
-void function TogglePainDeathDebug()
-{
- file.painDeathDebug = !file.painDeathDebug
- printt( "PainDeathDebug is " + file.painDeathDebug )
-} \ No newline at end of file