wghost81 Posted October 11, 2014 Share Posted October 11, 2014 Interesting. I've tried to add similar dummy function to bank class directly and it didn't worked, because it's a part of XComGame package, which is a script package. Link to comment Share on other sites More sharing options...
tracktwo Posted October 11, 2014 Share Posted October 11, 2014 (edited) I didn't put mine in the XComGame package, but in a brand new package that's only a script editor package. At any rate, I think it's kind of academic at this point. Not having the native c++ code to properly cook the package complete with the event map means extra work for each bank even if we do figure it out, whereas your script mod lets us just use banks produced directly by UDK. Also: the classes aren't xcom specific, you can set the voice class right from the UDK in the cues. It doesn't help though :smile: Edited October 11, 2014 by tracktwo Link to comment Share on other sites More sharing options...
tracktwo Posted October 11, 2014 Share Posted October 11, 2014 Ok, I figured it out: it's a licensing issue. because as you said, the c++ native code doesn't work with the free version. When the engine loads the voice bank, it notes that the licensee number in the package is 0, so clearly there cannot be any native code to execute, even though the actual XComCharacterVoiceBank class is a licensed, native class. Simply changing the byte in the package so that it pretends to be a licensed version tells the engine there may be code to run and the package works exactly as I expected it to the very first time I created it. I don't know if it's ok to distribute packages that lie about their licensee version, even though XCom itself is fully licensed, so your script method is probably the way to go here. Link to comment Share on other sites More sharing options...
Amineri Posted October 12, 2014 Share Posted October 12, 2014 Wghost, I found a small type in your PatchUPK code : //case 49: 0A [@case50] 24 <%b 50> //Cue = CurrentVoiceBank.MeldSpotted 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MeldSpotted> 00 01 <XComCharacterVoiceBank.MeldSpotted> //break 06 [@Play] [#case50] //case 50: 0A [@case57] 24 <%b 50> //Cue = CurrentVoiceBank.MeldCollected 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MeldCollected> 00 01 <XComCharacterVoiceBank.MeldCollected> //break 06 [@Play] the case 49 is set up to use the value for 50 instead, which would result in Meld Spotting having no sound and Meld Collecting playing the Meld Spotted sound. I spotted this while converting the replacement function to UPKmodder format. For those interested in such things here is the equivalent UPKmodder file : Hex only : MODFILEVERSION=4 UPKFILE=XComGame.upk GUID=1C 18 A1 1A 2B C3 34 4E 8B 2C 72 33 CD 16 7E 3E // XComGame_EW_patch3.upk FUNCTION=PlaySoundForEvent@XComCharacterVoice RESIZE=A70 // replace vanilla native GetSoundCue with switch/case to map ECharacterSpeech even to SoundCue [BEFORE_HEX] [HEADER] 5A 01 00 00 E2 00 00 00 [/HEADER] [CODE] //if(XComOnlineProfileSettings(class'Engine'.static.GetEngine().GetProfileSettings()).Data.bDisableSoldierChatter || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_bDisableSoldierChatter) 07 F0 00 84 19 19 2E 07 6A 00 00 19 12 20 35 FE FF FF 0A 00 91 F9 FF FF 00 1C D4 FB FF FF 16 0A 00 90 F9 FF FF 00 1B FA 3A 00 00 00 00 00 00 16 09 00 63 69 00 00 00 01 63 69 00 00 0A 00 24 6A 00 00 00 2D 01 24 6A 00 00 18 7E 00 19 19 19 2E E4 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 F0 32 00 00 00 01 F0 32 00 00 09 00 C9 B0 00 00 00 01 C9 B0 00 00 0A 00 A8 B4 00 00 00 2D 01 A8 B4 00 00 16 //return 04 0B //Cue = GetSoundCue(Event) 0F 00 AF 4B 00 00 1C AC 4B 00 00 00 B1 4B 00 00 16 //if(Cue != none) 07 57 01 77 00 AF 4B 00 00 2A 16 //Owner.PlaySound(Cue, true) 19 00 B0 4B 00 00 18 00 00 00 00 00 00 1C 30 FC FF FF 00 AF 4B 00 00 27 4A 4A 4A 4A 16 //StreamNextVoiceBank(true) 1C AE 4B 00 00 27 16 //else 06 57 01 //return 04 0B //EOS 53 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [HEADER] FA 10 00 00 52 0B 00 00 [/HEADER] [CODE] //if(XComOnlineProfileSettings(class'Engine'.static.GetEngine().GetProfileSettings()).Data.bDisableSoldierChatter || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_bDisableSoldierChatter) 07 F0 00 84 19 19 2E 07 6A 00 00 19 12 20 35 FE FF FF 0A 00 91 F9 FF FF 00 1C D4 FB FF FF 16 0A 00 90 F9 FF FF 00 1B FA 3A 00 00 00 00 00 00 16 09 00 63 69 00 00 00 01 63 69 00 00 0A 00 24 6A 00 00 00 2D 01 24 6A 00 00 18 7E 00 19 19 19 2E E4 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 F0 32 00 00 00 01 F0 32 00 00 09 00 C9 B0 00 00 00 01 C9 B0 00 00 0A 00 A8 B4 00 00 00 2D 01 A8 B4 00 00 16 //return 04 0B //if (CurrentVoiceBank != none) 07 A8 10 77 01 A7 4B 00 00 2A 16 //switch(Event) 05 B1 4B 00 00 00 00 B1 4B 00 00 //case 1: 0A 42 01 24 01 //Cue = CurrentVoiceBank.HunkerDown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FC 4B 00 00 00 01 FC 4B 00 00 //break 06 A8 10 //case 2: 0A 72 01 24 02 //Cue = CurrentVoiceBank.Reload 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FB 4B 00 00 00 01 FB 4B 00 00 //break 06 A8 10 //case 3: 0A A2 01 24 03 //Cue = CurrentVoiceBank.Overwatching 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FA 4B 00 00 00 01 FA 4B 00 00 //break 06 A8 10 //case 4: 0A D2 01 24 04 //Cue = CurrentVoiceBank.Moving 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F9 4B 00 00 00 01 F9 4B 00 00 //break 06 A8 10 //case 5: 0A 02 02 24 05 //Cue = CurrentVoiceBank.Dashing 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F8 4B 00 00 00 01 F8 4B 00 00 //break 06 A8 10 //case 6: 0A 32 02 24 06 //Cue = CurrentVoiceBank.JetPackMove 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F7 4B 00 00 00 01 F7 4B 00 00 //break 06 A8 10 //case 7: 0A 62 02 24 07 //Cue = CurrentVoiceBank.LowAmmo 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F6 4B 00 00 00 01 F6 4B 00 00 //break 06 A8 10 //case 8: 0A 92 02 24 08 //Cue = CurrentVoiceBank.OutOfAmmo 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F5 4B 00 00 00 01 F5 4B 00 00 //break 06 A8 10 //case 9: 0A C2 02 24 09 //Cue = CurrentVoiceBank.Suppressing 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F4 4B 00 00 00 01 F4 4B 00 00 //break 06 A8 10 //case 10: 0A F2 02 24 0A //Cue = CurrentVoiceBank.AreaSuppressing 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F3 4B 00 00 00 01 F3 4B 00 00 //break 06 A8 10 //case 11: // painting target 0A 22 03 24 0B //Cue = CurrentVoiceBank.HunkerDown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FC 4B 00 00 00 01 FC 4B 00 00 //break 06 A8 10 //case 12: // destroying cover 0A 52 03 24 0C //Cue = CurrentVoiceBank.HunkerDown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FC 4B 00 00 00 01 FC 4B 00 00 //break 06 A8 10 //case 13: 0A 82 03 24 0D //Cue = CurrentVoiceBank.FlushingTarget 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F2 4B 00 00 00 01 F2 4B 00 00 //break 06 A8 10 //case 14: 0A B2 03 24 0E //Cue = CurrentVoiceBank.HealingAlly 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F1 4B 00 00 00 01 F1 4B 00 00 //break 06 A8 10 //case 15: 0A E2 03 24 0F //Cue = CurrentVoiceBank.StabilizingAlly 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 F0 4B 00 00 00 01 F0 4B 00 00 //break 06 A8 10 //case 16: 0A 12 04 24 10 //Cue = CurrentVoiceBank.RevivingAlly 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 EF 4B 00 00 00 01 EF 4B 00 00 //break 06 A8 10 //case 17: 0A 42 04 24 11 //Cue = CurrentVoiceBank.CombatStim 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 EE 4B 00 00 00 01 EE 4B 00 00 //break 06 A8 10 //case 18: // PrimingGrenade 0A 72 04 24 12 //Cue = CurrentVoiceBank.HunkerDown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FC 4B 00 00 00 01 FC 4B 00 00 //break 06 A8 10 //case 19: 0A A2 04 24 13 //Cue = CurrentVoiceBank.FragOut 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 ED 4B 00 00 00 01 ED 4B 00 00 //break 06 A8 10 //case 20: 0A D2 04 24 14 //Cue = CurrentVoiceBank.SmokeGrenadeThrown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 EC 4B 00 00 00 01 EC 4B 00 00 //break 06 A8 10 //case 21: 0A 02 05 24 15 //Cue = CurrentVoiceBank.SpyGrenadeThrown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 EB 4B 00 00 00 01 EB 4B 00 00 //break 06 A8 10 //case 22: // FlashbangThrown 0A 32 05 24 16 //Cue = CurrentVoiceBank.HunkerDown 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 FC 4B 00 00 00 01 FC 4B 00 00 //break 06 A8 10 //case 23: 0A 62 05 24 17 //Cue = CurrentVoiceBank.FiringRocket 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 EA 4B 00 00 00 01 EA 4B 00 00 //break 06 A8 10 //case 24: 0A 92 05 24 18 //Cue = CurrentVoiceBank.GhostModeActivated 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E9 4B 00 00 00 01 E9 4B 00 00 //break 06 A8 10 //case 25: // CollateralDamage 0A C2 05 24 19 //Cue = CurrentVoiceBank.CollateralDamage 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 BC 4B 00 00 00 01 BC 4B 00 00 //break 06 A8 10 //case 26: 0A F2 05 24 1A //Cue = CurrentVoiceBank.JetPackDeactivated 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E8 4B 00 00 00 01 E8 4B 00 00 //break 06 A8 10 //case 27: 0A 22 06 24 1B //Cue = CurrentVoiceBank.ArcThrower 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E7 4B 00 00 00 01 E7 4B 00 00 //break 06 A8 10 //case 28: 0A 52 06 24 1C //Cue = CurrentVoiceBank.RepairSHIV 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E6 4B 00 00 00 01 E6 4B 00 00 //break 06 A8 10 //case 29: 0A 82 06 24 1D //Cue = CurrentVoiceBank.Kill 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E5 4B 00 00 00 01 E5 4B 00 00 //break 06 A8 10 //case 30: 0A B2 06 24 1E //Cue = CurrentVoiceBank.MultiKill 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E4 4B 00 00 00 01 E4 4B 00 00 //break 06 A8 10 //case 31: 0A E2 06 24 1F //Cue = CurrentVoiceBank.Missed 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E3 4B 00 00 00 01 E3 4B 00 00 //break 06 A8 10 //case 32: 0A 12 07 24 20 //Cue = CurrentVoiceBank.TargetSpotted 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E2 4B 00 00 00 01 E2 4B 00 00 //break 06 A8 10 //case 33: 0A 42 07 24 21 //Cue = CurrentVoiceBank.TargetSpottedHidden 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E1 4B 00 00 00 01 E1 4B 00 00 //break 06 A8 10 //case 34: 0A 72 07 24 22 //Cue = CurrentVoiceBank.HeardSomething 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 E0 4B 00 00 00 01 E0 4B 00 00 //break 06 A8 10 //case 35: 0A A2 07 24 23 //Cue = CurrentVoiceBank.TakingFire 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 DF 4B 00 00 00 01 DF 4B 00 00 //break 06 A8 10 //case 36: 0A D2 07 24 24 //Cue = CurrentVoiceBank.FriendlyKilled 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 DE 4B 00 00 00 01 DE 4B 00 00 //break 06 A8 10 //case 37: 0A 02 08 24 25 //Cue = CurrentVoiceBank.Panic 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 DD 4B 00 00 00 01 DD 4B 00 00 //break 06 A8 10 //case 38: 0A 32 08 24 26 //Cue = CurrentVoiceBank.PanickedBreathing 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 DC 4B 00 00 00 01 DC 4B 00 00 //break 06 A8 10 //case 39: 0A 62 08 24 27 //Cue = CurrentVoiceBank.Wounded 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 DB 4B 00 00 00 01 DB 4B 00 00 //break 06 A8 10 //case 40: 0A 92 08 24 28 //Cue = CurrentVoiceBank.Died 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 DA 4B 00 00 00 01 DA 4B 00 00 //break 06 A8 10 //case 41: 0A C2 08 24 29 //Cue = CurrentVoiceBank.Flanked 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D9 4B 00 00 00 01 D9 4B 00 00 //break 06 A8 10 //case 42: 0A F2 08 24 2A //Cue = CurrentVoiceBank.Suppressed 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D8 4B 00 00 00 01 D8 4B 00 00 //break 06 A8 10 //case 43: //ElectroPulse 0A 22 09 24 2B //Cue = CurrentVoiceBank.ElectroPulse 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 BB 4B 00 00 00 01 BB 4B 00 00 //break 06 A8 10 //case 44: 0A 52 09 24 2C //Cue = CurrentVoiceBank.PsiControlled 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D7 4B 00 00 00 01 D7 4B 00 00 //break 06 A8 10 //case 45: 0A 82 09 24 2D //Cue = CurrentVoiceBank.Flamethrower 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 BA 4B 00 00 00 01 BA 4B 00 00 //break 06 A8 10 //case 46: 0A B2 09 24 2E //Cue = CurrentVoiceBank.JetBoots 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 B9 4B 00 00 00 01 B9 4B 00 00 //break 06 A8 10 //case 47: 0A E2 09 24 2F //Cue = CurrentVoiceBank.KineticStrike 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 B8 4B 00 00 00 01 B8 4B 00 00 //break 06 A8 10 //case 48: 0A 12 0A 24 30 //Cue = CurrentVoiceBank.OneForAll 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 B7 4B 00 00 00 01 B7 4B 00 00 //break 06 A8 10 //case 49: 0A 3F 0A 24 31 //Cue = CurrentVoiceBank.MeldSpotted 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D5 4B 00 00 00 01 D5 4B 00 00 //break 06 A8 10 //case 50: 0A 72 0A 24 32 //Cue = CurrentVoiceBank.MeldCollected 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D4 4B 00 00 00 01 D4 4B 00 00 //break 06 A8 10 //case 51: 0A A2 0A 24 33 //Cue = CurrentVoiceBank.CivilianRescued 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D6 4B 00 00 00 01 D6 4B 00 00 //break 06 A8 10 //case 52: 0A D2 0A 24 34 //Cue = CurrentVoiceBank.AlienRetreat 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D1 4B 00 00 00 01 D1 4B 00 00 //break 06 A8 10 //case 53: 0A 02 0B 24 35 //Cue = CurrentVoiceBank.AlienMoving 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D0 4B 00 00 00 01 D0 4B 00 00 //break 06 A8 10 //case 54: 0A 32 0B 24 36 //Cue = CurrentVoiceBank.AlienNotStunned 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CF 4B 00 00 00 01 CF 4B 00 00 //break 06 A8 10 //case 55: 0A 62 0B 24 37 //Cue = CurrentVoiceBank.AlienReinforcements 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CE 4B 00 00 00 01 CE 4B 00 00 //break 06 A8 10 //case 56: 0A 92 0B 24 38 //Cue = CurrentVoiceBank.AlienSighting 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CD 4B 00 00 00 01 CD 4B 00 00 //break 06 A8 10 //case 57: 0A C2 0B 24 39 //Cue = CurrentVoiceBank.RunAndGun 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D3 4B 00 00 00 01 D3 4B 00 00 //break 06 A8 10 //case 58: 0A F2 0B 24 3A //Cue = CurrentVoiceBank.ProximityMine 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 B6 4B 00 00 00 01 B6 4B 00 00 //break 06 A8 10 //case 59: //PrecisionShot_DEPRECATED 0A 22 0C 24 3B //Cue = CurrentVoiceBank.CivilianRescued 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D6 4B 00 00 00 01 D6 4B 00 00 //break 06 A8 10 //case 60: 0A 52 0C 24 3C //Cue = CurrentVoiceBank.DisablingShot 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CC 4B 00 00 00 01 CC 4B 00 00 //break 06 A8 10 //case 61: //Executioner_DEPRECATED 0A 82 0C 24 3D //Cue = CurrentVoiceBank.CivilianRescued 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D6 4B 00 00 00 01 D6 4B 00 00 //break 06 A8 10 //case 62: //DoubleTap_DEPRECATED 0A B2 0C 24 3E //Cue = CurrentVoiceBank.CivilianRescued 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D6 4B 00 00 00 01 D6 4B 00 00 //break 06 A8 10 //case 63: //InTheZone_DEPRECATED 0A E2 0C 24 3F //Cue = CurrentVoiceBank.CivilianRescued 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D6 4B 00 00 00 01 D6 4B 00 00 //break 06 A8 10 //case 64: 0A 12 0D 24 40 //Cue = CurrentVoiceBank.ShredderRocket 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CB 4B 00 00 00 01 CB 4B 00 00 //break 06 A8 10 //case 65: //HotPotato_DEPRECATED 0A 42 0D 24 41 //Cue = CurrentVoiceBank.ShredderRocket 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CB 4B 00 00 00 01 CB 4B 00 00 //break 06 A8 10 //case 66: 0A 72 0D 24 42 //Cue = CurrentVoiceBank.PsionicsMindfray 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 CA 4B 00 00 00 01 CA 4B 00 00 //break 06 A8 10 //case 67: 0A A2 0D 24 43 //Cue = CurrentVoiceBank.PsionicsPanic 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C9 4B 00 00 00 01 C9 4B 00 00 //break 06 A8 10 //case 68: 0A D2 0D 24 44 //Cue = CurrentVoiceBank.PsionicsInspiration 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C8 4B 00 00 00 01 C8 4B 00 00 //break 06 A8 10 //case 69: 0A 02 0E 24 45 //Cue = CurrentVoiceBank.PsionicsTelekineticField 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C7 4B 00 00 00 01 C7 4B 00 00 //break 06 A8 10 //case 70: 0A 32 0E 24 46 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D2 4B 00 00 00 01 D2 4B 00 00 //break 06 A8 10 //case 71: //GainingElevation_DEPRECATED 0A 62 0E 24 47 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D2 4B 00 00 00 01 D2 4B 00 00 //break 06 A8 10 //case 72: //GenericResponse 0A 92 0E 24 48 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D2 4B 00 00 00 01 D2 4B 00 00 //break 06 A8 10 //case 73: 0A C2 0E 24 49 //Cue = CurrentVoiceBank.SoldierControlled 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C6 4B 00 00 00 01 C6 4B 00 00 //break 06 A8 10 //case 74: 0A F2 0E 24 4A //Cue = CurrentVoiceBank.StunnedAlien 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C5 4B 00 00 00 01 C5 4B 00 00 //break 06 A8 10 //case 75: 0A 22 0F 24 4B //Cue = CurrentVoiceBank.Explosion 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C4 4B 00 00 00 01 C4 4B 00 00 //break 06 A8 10 //case 76: 0A 52 0F 24 4C //Cue = CurrentVoiceBank.RocketScatter 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C3 4B 00 00 00 01 C3 4B 00 00 //break 06 A8 10 //case 77: 0A 82 0F 24 4D //Cue = CurrentVoiceBank.PsiRift 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C2 4B 00 00 00 01 C2 4B 00 00 //break 06 A8 10 //case 78: 0A B2 0F 24 4E //Cue = CurrentVoiceBank.Poisoned 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C1 4B 00 00 00 01 C1 4B 00 00 //break 06 A8 10 //case 79: 0A E2 0F 24 4F //Cue = CurrentVoiceBank.HiddenMovement 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 C0 4B 00 00 00 01 C0 4B 00 00 //break 06 A8 10 //case 80: 0A 12 10 24 50 //Cue = CurrentVoiceBank.HiddenMovementVox 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 BF 4B 00 00 00 01 BF 4B 00 00 //break 06 A8 10 //case 81: //CriticallyWounded_DEPRECATED 0A 42 10 24 51 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 D2 4B 00 00 00 01 D2 4B 00 00 //break 06 A8 10 //case 82: 0A 72 10 24 52 //Cue = CurrentVoiceBank.ExaltChatter 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 BE 4B 00 00 00 01 BE 4B 00 00 //break 06 A8 10 //case 83: 0A A2 10 24 53 //Cue = CurrentVoiceBank.Strangled 0F 00 AF 4B 00 00 19 01 A7 4B 00 00 09 00 BD 4B 00 00 00 01 BD 4B 00 00 //break 06 A8 10 //default: 0A FF FF //break 06 A8 10 //if(Cue != none) 07 EF 10 77 00 AF 4B 00 00 2A 16 //Owner.PlaySound(Cue, true) 19 00 B0 4B 00 00 18 00 00 00 00 00 00 1C 30 FC FF FF 00 AF 4B 00 00 27 4A 4A 4A 4A 16 //StreamNextVoiceBank(true) 1C AE 4B 00 00 27 16 //return 04 0B //null ops 0b 0b 0b 0b 0b 0b 0b 0b //EOS 53 [/CODE] [/AFTER_HEX] With Named references more similar to the PatchUPK format : MODFILEVERSION=4 UPKFILE=XComGame.upk GUID=1C 18 A1 1A 2B C3 34 4E 8B 2C 72 33 CD 16 7E 3E // XComGame_EW_patch3.upk FUNCTION=PlaySoundForEvent@XComCharacterVoice RESIZE=A70 // replace vanilla native GetSoundCue with switch/case to map ECharacterSpeech even to SoundCue [BEFORE_HEX] [HEADER] 5A 01 00 00 E2 00 00 00 [/HEADER] [CODE] //if(XComOnlineProfileSettings(class'Engine'.static.GetEngine().GetProfileSettings()).Data.bDisableSoldierChatter || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_bDisableSoldierChatter) 07 F0 00 84 19 19 2E 07 6A 00 00 19 12 20 35 FE FF FF 0A 00 91 F9 FF FF 00 1C D4 FB FF FF 16 0A 00 90 F9 FF FF 00 1B FA 3A 00 00 00 00 00 00 16 09 00 63 69 00 00 00 01 63 69 00 00 0A 00 24 6A 00 00 00 2D 01 24 6A 00 00 18 7E 00 19 19 19 2E E4 32 00 00 19 12 20 35 FE FF FF 0A 00 92 F9 FF FF 00 1C D5 FB FF FF 16 09 00 50 F9 FF FF 00 01 50 F9 FF FF 09 00 F0 32 00 00 00 01 F0 32 00 00 09 00 C9 B0 00 00 00 01 C9 B0 00 00 0A 00 A8 B4 00 00 00 2D 01 A8 B4 00 00 16 //return 04 0B //Cue = GetSoundCue(Event) 0F 00 AF 4B 00 00 1C AC 4B 00 00 00 B1 4B 00 00 16 //if(Cue != none) 07 57 01 77 00 AF 4B 00 00 2A 16 //Owner.PlaySound(Cue, true) 19 00 B0 4B 00 00 18 00 00 00 00 00 00 1C 30 FC FF FF 00 AF 4B 00 00 27 4A 4A 4A 4A 16 //StreamNextVoiceBank(true) 1C AE 4B 00 00 27 16 //else 06 57 01 //return 04 0B //EOS 53 [/CODE] [/BEFORE_HEX] [AFTER_HEX] [HEADER] FA 10 00 00 52 0B 00 00 [/HEADER] [CODE] //if(XComOnlineProfileSettings(class'Engine'.static.GetEngine().GetProfileSettings()).Data.bDisableSoldierChatter || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_bDisableSoldierChatter) 07 F0 00 84 19 19 2E {|XComOnlineProfileSettings|} 19 12 20 {|Core:Engine@Engine|} 0A 00 {|Core:ReturnValue@GetEngine@Engine@Engine|} 00 1C {|Core:GetEngine@Engine@Engine|} 16 0A 00 {|Core:ReturnValue@GetProfileSettings@Engine@Engine|} 00 1B <|GetProfileSettings|> 00 00 00 00 16 09 00 {|Data@XComOnlineProfileSettings|} 00 01 {|Data@XComOnlineProfileSettings|} 0A 00 {|bDisableSoldierChatter@XComOnlineProfileSettingsDataBlob|} 00 2D 01 {|bDisableSoldierChatter@XComOnlineProfileSettingsDataBlob|} 18 7E 00 19 19 19 2E {|XComTacticalGRI|} 19 12 20 {|Core:Engine@Engine|} 0A 00 {|Core:ReturnValue@GetCurrentWorldInfo@Engine@Engine|} 00 1C {|Core:GetCurrentWorldInfo@Engine@Engine|} 16 09 00 {|Core:GRI@WorldInfo@Engine|} 00 01 {|Core:GRI@WorldInfo@Engine|} 09 00 {|m_kBattle@XComTacticalGRI|} 00 01 {|m_kBattle@XComTacticalGRI|} 09 00 {|m_kDesc@XGBattle|} 00 01 {|m_kDesc@XGBattle|} 0A 00 {|m_bDisableSoldierChatter@XGBattleDesc|} 00 2D 01 {|m_bDisableSoldierChatter@XGBattleDesc|} 16 //return 04 0B //if (CurrentVoiceBank != none) 07 A8 10 77 01 {|CurrentVoiceBank@XComCharacterVoice|} 2A 16 //switch(Event) 05 {|Event@PlaySoundForEvent@XComCharacterVoice|} 00 00 {|Event@PlaySoundForEvent@XComCharacterVoice|} //case 1: 0A 42 01 24 01 //Cue = CurrentVoiceBank.HunkerDown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HunkerDown@XComCharacterVoiceBank|} 00 01 {|HunkerDown@XComCharacterVoiceBank|} //break 06 A8 10 //case 2: 0A 72 01 24 02 //Cue = CurrentVoiceBank.Reload 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Reload@XComCharacterVoiceBank|} 00 01 {|Reload@XComCharacterVoiceBank|} //break 06 A8 10 //case 3: 0A A2 01 24 03 //Cue = CurrentVoiceBank.Overwatching 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Overwatching@XComCharacterVoiceBank|} 00 01 {|Overwatching@XComCharacterVoiceBank|} //break 06 A8 10 //case 4: 0A D2 01 24 04 //Cue = CurrentVoiceBank.Moving 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Moving@XComCharacterVoiceBank|} 00 01 {|Moving@XComCharacterVoiceBank|} //break 06 A8 10 //case 5: 0A 02 02 24 05 //Cue = CurrentVoiceBank.Dashing 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Dashing@XComCharacterVoiceBank|} 00 01 {|Dashing@XComCharacterVoiceBank|} //break 06 A8 10 //case 6: 0A 32 02 24 06 //Cue = CurrentVoiceBank.JetPackMove 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|JetPackMove@XComCharacterVoiceBank|} 00 01 {|JetPackMove@XComCharacterVoiceBank|} //break 06 A8 10 //case 7: 0A 62 02 24 07 //Cue = CurrentVoiceBank.LowAmmo 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|LowAmmo@XComCharacterVoiceBank|} 00 01 {|LowAmmo@XComCharacterVoiceBank|} //break 06 A8 10 //case 8: 0A 92 02 24 08 //Cue = CurrentVoiceBank.OutOfAmmo 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|OutOfAmmo@XComCharacterVoiceBank|} 00 01 {|OutOfAmmo@XComCharacterVoiceBank|} //break 06 A8 10 //case 9: 0A C2 02 24 09 //Cue = CurrentVoiceBank.Suppressing 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Suppressing@XComCharacterVoiceBank|} 00 01 {|Suppressing@XComCharacterVoiceBank|} //break 06 A8 10 //case 10: 0A F2 02 24 0A //Cue = CurrentVoiceBank.AreaSuppressing 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|AreaSuppressing@XComCharacterVoiceBank|} 00 01 {|AreaSuppressing@XComCharacterVoiceBank|} //break 06 A8 10 //case 11: // painting target 0A 22 03 24 0B //Cue = CurrentVoiceBank.HunkerDown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HunkerDown@XComCharacterVoiceBank|} 00 01 {|HunkerDown@XComCharacterVoiceBank|} //break 06 A8 10 //case 12: // destroying cover 0A 52 03 24 0C //Cue = CurrentVoiceBank.HunkerDown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HunkerDown@XComCharacterVoiceBank|} 00 01 {|HunkerDown@XComCharacterVoiceBank|} //break 06 A8 10 //case 13: 0A 82 03 24 0D //Cue = CurrentVoiceBank.FlushingTarget 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|FlushingTarget@XComCharacterVoiceBank|} 00 01 {|FlushingTarget@XComCharacterVoiceBank|} //break 06 A8 10 //case 14: 0A B2 03 24 0E //Cue = CurrentVoiceBank.HealingAlly 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HealingAlly@XComCharacterVoiceBank|} 00 01 {|HealingAlly@XComCharacterVoiceBank|} //break 06 A8 10 //case 15: 0A E2 03 24 0F //Cue = CurrentVoiceBank.StabilizingAlly 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|StabilizingAlly@XComCharacterVoiceBank|} 00 01 {|StabilizingAlly@XComCharacterVoiceBank|} //break 06 A8 10 //case 16: 0A 12 04 24 10 //Cue = CurrentVoiceBank.RevivingAlly 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|RevivingAlly@XComCharacterVoiceBank|} 00 01 {|RevivingAlly@XComCharacterVoiceBank|} //break 06 A8 10 //case 17: 0A 42 04 24 11 //Cue = CurrentVoiceBank.CombatStim 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CombatStim@XComCharacterVoiceBank|} 00 01 {|CombatStim@XComCharacterVoiceBank|} //break 06 A8 10 //case 18: // PrimingGrenade 0A 72 04 24 12 //Cue = CurrentVoiceBank.HunkerDown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HunkerDown@XComCharacterVoiceBank|} 00 01 {|HunkerDown@XComCharacterVoiceBank|} //break 06 A8 10 //case 19: 0A A2 04 24 13 //Cue = CurrentVoiceBank.FragOut 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|FragOut@XComCharacterVoiceBank|} 00 01 {|FragOut@XComCharacterVoiceBank|} //break 06 A8 10 //case 20: 0A D2 04 24 14 //Cue = CurrentVoiceBank.SmokeGrenadeThrown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|SmokeGrenadeThrown@XComCharacterVoiceBank|} 00 01 {|SmokeGrenadeThrown@XComCharacterVoiceBank|} //break 06 A8 10 //case 21: 0A 02 05 24 15 //Cue = CurrentVoiceBank.SpyGrenadeThrown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|SpyGrenadeThrown@XComCharacterVoiceBank|} 00 01 {|SpyGrenadeThrown@XComCharacterVoiceBank|} //break 06 A8 10 //case 22: // FlashbangThrown 0A 32 05 24 16 //Cue = CurrentVoiceBank.HunkerDown 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HunkerDown@XComCharacterVoiceBank|} 00 01 {|HunkerDown@XComCharacterVoiceBank|} //break 06 A8 10 //case 23: 0A 62 05 24 17 //Cue = CurrentVoiceBank.FiringRocket 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|FiringRocket@XComCharacterVoiceBank|} 00 01 {|FiringRocket@XComCharacterVoiceBank|} //break 06 A8 10 //case 24: 0A 92 05 24 18 //Cue = CurrentVoiceBank.GhostModeActivated 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|GhostModeActivated@XComCharacterVoiceBank|} 00 01 {|GhostModeActivated@XComCharacterVoiceBank|} //break 06 A8 10 //case 25: // CollateralDamage 0A C2 05 24 19 //Cue = CurrentVoiceBank.CollateralDamage 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CollateralDamage@XComCharacterVoiceBank|} 00 01 {|CollateralDamage@XComCharacterVoiceBank|} //break 06 A8 10 //case 26: 0A F2 05 24 1A //Cue = CurrentVoiceBank.JetPackDeactivated 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|JetPackDeactivated@XComCharacterVoiceBank|} 00 01 {|JetPackDeactivated@XComCharacterVoiceBank|} //break 06 A8 10 //case 27: 0A 22 06 24 1B //Cue = CurrentVoiceBank.ArcThrower 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|ArcThrower@XComCharacterVoiceBank|} 00 01 {|ArcThrower@XComCharacterVoiceBank|} //break 06 A8 10 //case 28: 0A 52 06 24 1C //Cue = CurrentVoiceBank.RepairSHIV 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|RepairSHIV@XComCharacterVoiceBank|} 00 01 {|RepairSHIV@XComCharacterVoiceBank|} //break 06 A8 10 //case 29: 0A 82 06 24 1D //Cue = CurrentVoiceBank.Kill 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Kill@XComCharacterVoiceBank|} 00 01 {|Kill@XComCharacterVoiceBank|} //break 06 A8 10 //case 30: 0A B2 06 24 1E //Cue = CurrentVoiceBank.MultiKill 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|MultiKill@XComCharacterVoiceBank|} 00 01 {|MultiKill@XComCharacterVoiceBank|} //break 06 A8 10 //case 31: 0A E2 06 24 1F //Cue = CurrentVoiceBank.Missed 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Missed@XComCharacterVoiceBank|} 00 01 {|Missed@XComCharacterVoiceBank|} //break 06 A8 10 //case 32: 0A 12 07 24 20 //Cue = CurrentVoiceBank.TargetSpotted 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|TargetSpotted@XComCharacterVoiceBank|} 00 01 {|TargetSpotted@XComCharacterVoiceBank|} //break 06 A8 10 //case 33: 0A 42 07 24 21 //Cue = CurrentVoiceBank.TargetSpottedHidden 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|TargetSpottedHidden@XComCharacterVoiceBank|} 00 01 {|TargetSpottedHidden@XComCharacterVoiceBank|} //break 06 A8 10 //case 34: 0A 72 07 24 22 //Cue = CurrentVoiceBank.HeardSomething 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HeardSomething@XComCharacterVoiceBank|} 00 01 {|HeardSomething@XComCharacterVoiceBank|} //break 06 A8 10 //case 35: 0A A2 07 24 23 //Cue = CurrentVoiceBank.TakingFire 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|TakingFire@XComCharacterVoiceBank|} 00 01 {|TakingFire@XComCharacterVoiceBank|} //break 06 A8 10 //case 36: 0A D2 07 24 24 //Cue = CurrentVoiceBank.FriendlyKilled 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|FriendlyKilled@XComCharacterVoiceBank|} 00 01 {|FriendlyKilled@XComCharacterVoiceBank|} //break 06 A8 10 //case 37: 0A 02 08 24 25 //Cue = CurrentVoiceBank.Panic 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Panic@XComCharacterVoiceBank|} 00 01 {|Panic@XComCharacterVoiceBank|} //break 06 A8 10 //case 38: 0A 32 08 24 26 //Cue = CurrentVoiceBank.PanickedBreathing 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PanickedBreathing@XComCharacterVoiceBank|} 00 01 {|PanickedBreathing@XComCharacterVoiceBank|} //break 06 A8 10 //case 39: 0A 62 08 24 27 //Cue = CurrentVoiceBank.Wounded 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Wounded@XComCharacterVoiceBank|} 00 01 {|Wounded@XComCharacterVoiceBank|} //break 06 A8 10 //case 40: 0A 92 08 24 28 //Cue = CurrentVoiceBank.Died 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Died@XComCharacterVoiceBank|} 00 01 {|Died@XComCharacterVoiceBank|} //break 06 A8 10 //case 41: 0A C2 08 24 29 //Cue = CurrentVoiceBank.Flanked 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Flanked@XComCharacterVoiceBank|} 00 01 {|Flanked@XComCharacterVoiceBank|} //break 06 A8 10 //case 42: 0A F2 08 24 2A //Cue = CurrentVoiceBank.Suppressed 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Suppressed@XComCharacterVoiceBank|} 00 01 {|Suppressed@XComCharacterVoiceBank|} //break 06 A8 10 //case 43: //ElectroPulse 0A 22 09 24 2B //Cue = CurrentVoiceBank.ElectroPulse 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|ElectroPulse@XComCharacterVoiceBank|} 00 01 {|ElectroPulse@XComCharacterVoiceBank|} //break 06 A8 10 //case 44: 0A 52 09 24 2C //Cue = CurrentVoiceBank.PsiControlled 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PsiControlled@XComCharacterVoiceBank|} 00 01 {|PsiControlled@XComCharacterVoiceBank|} //break 06 A8 10 //case 45: 0A 82 09 24 2D //Cue = CurrentVoiceBank.Flamethrower 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Flamethrower@XComCharacterVoiceBank|} 00 01 {|Flamethrower@XComCharacterVoiceBank|} //break 06 A8 10 //case 46: 0A B2 09 24 2E //Cue = CurrentVoiceBank.JetBoots 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|JetBoots@XComCharacterVoiceBank|} 00 01 {|JetBoots@XComCharacterVoiceBank|} //break 06 A8 10 //case 47: 0A E2 09 24 2F //Cue = CurrentVoiceBank.KineticStrike 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|KineticStrike@XComCharacterVoiceBank|} 00 01 {|KineticStrike@XComCharacterVoiceBank|} //break 06 A8 10 //case 48: 0A 12 0A 24 30 //Cue = CurrentVoiceBank.OneForAll 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|OneForAll@XComCharacterVoiceBank|} 00 01 {|OneForAll@XComCharacterVoiceBank|} //break 06 A8 10 //case 49: 0A 3F 0A 24 31 //Cue = CurrentVoiceBank.MeldSpotted 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|MeldSpotted@XComCharacterVoiceBank|} 00 01 {|MeldSpotted@XComCharacterVoiceBank|} //break 06 A8 10 //case 50: 0A 72 0A 24 32 //Cue = CurrentVoiceBank.MeldCollected 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|MeldCollected@XComCharacterVoiceBank|} 00 01 {|MeldCollected@XComCharacterVoiceBank|} //break 06 A8 10 //case 51: 0A A2 0A 24 33 //Cue = CurrentVoiceBank.CivilianRescued 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CivilianRescued@XComCharacterVoiceBank|} 00 01 {|CivilianRescued@XComCharacterVoiceBank|} //break 06 A8 10 //case 52: 0A D2 0A 24 34 //Cue = CurrentVoiceBank.AlienRetreat 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|AlienRetreat@XComCharacterVoiceBank|} 00 01 {|AlienRetreat@XComCharacterVoiceBank|} //break 06 A8 10 //case 53: 0A 02 0B 24 35 //Cue = CurrentVoiceBank.AlienMoving 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|AlienMoving@XComCharacterVoiceBank|} 00 01 {|AlienMoving@XComCharacterVoiceBank|} //break 06 A8 10 //case 54: 0A 32 0B 24 36 //Cue = CurrentVoiceBank.AlienNotStunned 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|AlienNotStunned@XComCharacterVoiceBank|} 00 01 {|AlienNotStunned@XComCharacterVoiceBank|} //break 06 A8 10 //case 55: 0A 62 0B 24 37 //Cue = CurrentVoiceBank.AlienReinforcements 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|AlienReinforcements@XComCharacterVoiceBank|} 00 01 {|AlienReinforcements@XComCharacterVoiceBank|} //break 06 A8 10 //case 56: 0A 92 0B 24 38 //Cue = CurrentVoiceBank.AlienSighting 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|AlienSighting@XComCharacterVoiceBank|} 00 01 {|AlienSighting@XComCharacterVoiceBank|} //break 06 A8 10 //case 57: 0A C2 0B 24 39 //Cue = CurrentVoiceBank.RunAndGun 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|RunAndGun@XComCharacterVoiceBank|} 00 01 {|RunAndGun@XComCharacterVoiceBank|} //break 06 A8 10 //case 58: 0A F2 0B 24 3A //Cue = CurrentVoiceBank.ProximityMine 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|ProximityMine@XComCharacterVoiceBank|} 00 01 {|ProximityMine@XComCharacterVoiceBank|} //break 06 A8 10 //case 59: //PrecisionShot_DEPRECATED 0A 22 0C 24 3B //Cue = CurrentVoiceBank.CivilianRescued 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CivilianRescued@XComCharacterVoiceBank|} 00 01 {|CivilianRescued@XComCharacterVoiceBank|} //break 06 A8 10 //case 60: 0A 52 0C 24 3C //Cue = CurrentVoiceBank.DisablingShot 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|DisablingShot@XComCharacterVoiceBank|} 00 01 {|DisablingShot@XComCharacterVoiceBank|} //break 06 A8 10 //case 61: //Executioner_DEPRECATED 0A 82 0C 24 3D //Cue = CurrentVoiceBank.CivilianRescued 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CivilianRescued@XComCharacterVoiceBank|} 00 01 {|CivilianRescued@XComCharacterVoiceBank|} //break 06 A8 10 //case 62: //DoubleTap_DEPRECATED 0A B2 0C 24 3E //Cue = CurrentVoiceBank.CivilianRescued 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CivilianRescued@XComCharacterVoiceBank|} 00 01 {|CivilianRescued@XComCharacterVoiceBank|} //break 06 A8 10 //case 63: //InTheZone_DEPRECATED 0A E2 0C 24 3F //Cue = CurrentVoiceBank.CivilianRescued 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|CivilianRescued@XComCharacterVoiceBank|} 00 01 {|CivilianRescued@XComCharacterVoiceBank|} //break 06 A8 10 //case 64: 0A 12 0D 24 40 //Cue = CurrentVoiceBank.ShredderRocket 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|ShredderRocket@XComCharacterVoiceBank|} 00 01 {|ShredderRocket@XComCharacterVoiceBank|} //break 06 A8 10 //case 65: //HotPotato_DEPRECATED 0A 42 0D 24 41 //Cue = CurrentVoiceBank.ShredderRocket 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|ShredderRocket@XComCharacterVoiceBank|} 00 01 {|ShredderRocket@XComCharacterVoiceBank|} //break 06 A8 10 //case 66: 0A 72 0D 24 42 //Cue = CurrentVoiceBank.PsionicsMindfray 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PsionicsMindfray@XComCharacterVoiceBank|} 00 01 {|PsionicsMindfray@XComCharacterVoiceBank|} //break 06 A8 10 //case 67: 0A A2 0D 24 43 //Cue = CurrentVoiceBank.PsionicsPanic 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PsionicsPanic@XComCharacterVoiceBank|} 00 01 {|PsionicsPanic@XComCharacterVoiceBank|} //break 06 A8 10 //case 68: 0A D2 0D 24 44 //Cue = CurrentVoiceBank.PsionicsInspiration 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PsionicsInspiration@XComCharacterVoiceBank|} 00 01 {|PsionicsInspiration@XComCharacterVoiceBank|} //break 06 A8 10 //case 69: 0A 02 0E 24 45 //Cue = CurrentVoiceBank.PsionicsTelekineticField 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PsionicsTelekineticField@XComCharacterVoiceBank|} 00 01 {|PsionicsTelekineticField@XComCharacterVoiceBank|} //break 06 A8 10 //case 70: 0A 32 0E 24 46 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|GrapplingHook@XComCharacterVoiceBank|} 00 01 {|GrapplingHook@XComCharacterVoiceBank|} //break 06 A8 10 //case 71: //GainingElevation_DEPRECATED 0A 62 0E 24 47 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|GrapplingHook@XComCharacterVoiceBank|} 00 01 {|GrapplingHook@XComCharacterVoiceBank|} //break 06 A8 10 //case 72: //GenericResponse 0A 92 0E 24 48 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|GrapplingHook@XComCharacterVoiceBank|} 00 01 {|GrapplingHook@XComCharacterVoiceBank|} //break 06 A8 10 //case 73: 0A C2 0E 24 49 //Cue = CurrentVoiceBank.SoldierControlled 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|SoldierControlled@XComCharacterVoiceBank|} 00 01 {|SoldierControlled@XComCharacterVoiceBank|} //break 06 A8 10 //case 74: 0A F2 0E 24 4A //Cue = CurrentVoiceBank.StunnedAlien 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|StunnedAlien@XComCharacterVoiceBank|} 00 01 {|StunnedAlien@XComCharacterVoiceBank|} //break 06 A8 10 //case 75: 0A 22 0F 24 4B //Cue = CurrentVoiceBank.Explosion 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Explosion@XComCharacterVoiceBank|} 00 01 {|Explosion@XComCharacterVoiceBank|} //break 06 A8 10 //case 76: 0A 52 0F 24 4C //Cue = CurrentVoiceBank.RocketScatter 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|RocketScatter@XComCharacterVoiceBank|} 00 01 {|RocketScatter@XComCharacterVoiceBank|} //break 06 A8 10 //case 77: 0A 82 0F 24 4D //Cue = CurrentVoiceBank.PsiRift 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|PsiRift@XComCharacterVoiceBank|} 00 01 {|PsiRift@XComCharacterVoiceBank|} //break 06 A8 10 //case 78: 0A B2 0F 24 4E //Cue = CurrentVoiceBank.Poisoned 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Poisoned@XComCharacterVoiceBank|} 00 01 {|Poisoned@XComCharacterVoiceBank|} //break 06 A8 10 //case 79: 0A E2 0F 24 4F //Cue = CurrentVoiceBank.HiddenMovement 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HiddenMovement@XComCharacterVoiceBank|} 00 01 {|HiddenMovement@XComCharacterVoiceBank|} //break 06 A8 10 //case 80: 0A 12 10 24 50 //Cue = CurrentVoiceBank.HiddenMovementVox 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|HiddenMovementVox@XComCharacterVoiceBank|} 00 01 {|HiddenMovementVox@XComCharacterVoiceBank|} //break 06 A8 10 //case 81: //CriticallyWounded_DEPRECATED 0A 42 10 24 51 //Cue = CurrentVoiceBank.GrapplingHook 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|GrapplingHook@XComCharacterVoiceBank|} 00 01 {|GrapplingHook@XComCharacterVoiceBank|} //break 06 A8 10 //case 82: 0A 72 10 24 52 //Cue = CurrentVoiceBank.ExaltChatter 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|ExaltChatter@XComCharacterVoiceBank|} 00 01 {|ExaltChatter@XComCharacterVoiceBank|} //break 06 A8 10 //case 83: 0A A2 10 24 53 //Cue = CurrentVoiceBank.Strangled 0F 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 19 01 {|CurrentVoiceBank@XComCharacterVoice|} 09 00 {|Strangled@XComCharacterVoiceBank|} 00 01 {|Strangled@XComCharacterVoiceBank|} //break 06 A8 10 //default: 0A FF FF //break 06 A8 10 //if(Cue != none) 07 EF 10 77 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 2A 16 //Owner.PlaySound(Cue, true) 19 00 {|Owner@PlaySoundForEvent@XComCharacterVoice|} 18 00 00 00 00 00 00 1C {|Core:PlaySound@Actor@Engine|} 00 {|Cue@PlaySoundForEvent@XComCharacterVoice|} 27 4A 4A 4A 4A 16 //StreamNextVoiceBank(true) 1C {|StreamNextVoiceBank@XComCharacterVoice|} 27 16 //return 04 0B //null ops 0b 0b 0b 0b 0b 0b 0b 0b //EOS 53 [/CODE] [/AFTER_HEX] I went ahead and included cases for all ECharacterSpeech events (even the deprecated ones) in case some future mod takes advantage of them. I've tested that this code retains the existing vanilla voice functionality, although I don't have a new voice package to use to test it with. Link to comment Share on other sites More sharing options...
wghost81 Posted October 12, 2014 Share Posted October 12, 2014 (edited) tracktwo, good catch! I didn't know XCOM code would reject any XCOM specific native code, though. And I thought the engine version handles such things, not licensee number. Interesting discovery, very interesting. But you're right: it's better not to touch licensee stuff. Amineri, thanks, fixed it: UPK_FILE=XComGame.upk OBJECT=XComCharacterVoice.PlaySoundForEvent:AUTO [REPLACEMENT_CODE] //if(XComOnlineProfileSettings(class'Engine'.static.GetEngine().GetProfileSettings()).Data.bDisableSoldierChatter || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_bDisableSoldierChatter) 07 [@VoicesEnabled] 84 19 19 2E <Class.XComOnlineProfileSettings> 19 12 20 <Engine.Engine> 0A 00 <Engine.Engine.GetEngine.ReturnValue> 00 1C <Engine.Engine.GetEngine> 16 0A 00 <Engine.Engine.GetProfileSettings.ReturnValue> 00 1B <GetProfileSettings> 16 09 00 <XComOnlineProfileSettings.Data> 00 01 <XComOnlineProfileSettings.Data> 0A 00 <XComOnlineProfileSettingsDataBlob.bDisableSoldierChatter> 00 2D 01 <XComOnlineProfileSettingsDataBlob.bDisableSoldierChatter> 18 7E 00 19 19 19 2E <Class.XComTacticalGRI> 19 12 20 <Engine.Engine> 0A 00 <Engine.Engine.GetCurrentWorldInfo.ReturnValue> 00 1C <Engine.Engine.GetCurrentWorldInfo> 16 09 00 <Engine.WorldInfo.GRI> 00 01 <Engine.WorldInfo.GRI> 09 00 <XComTacticalGRI.m_kBattle> 00 01 <XComTacticalGRI.m_kBattle> 09 00 <XGBattle.m_kDesc> 00 01 <XGBattle.m_kDesc> 0A 00 <XGBattleDesc.m_bDisableSoldierChatter> 00 2D 01 <XGBattleDesc.m_bDisableSoldierChatter> 16 //return 04 0B [#VoicesEnabled] //if (CurrentVoiceBank != none) 07 [@Play] 77 01 <@CurrentVoiceBank> 2A 16 //switch(Event) 05 <.Event> 00 00 <.Event> //case 1: 0A [@case2] 24 <%b 1> //Cue = CurrentVoiceBank.HunkerDown 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HunkerDown> 00 01 <XComCharacterVoiceBank.HunkerDown> //break 06 [@Play] [#case2] //case 2: 0A [@case3] 24 <%b 2> //Cue = CurrentVoiceBank.Reload 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Reload> 00 01 <XComCharacterVoiceBank.Reload> //break 06 [@Play] [#case3] //case 3: 0A [@case4] 24 <%b 3> //Cue = CurrentVoiceBank.Overwatching 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Overwatching> 00 01 <XComCharacterVoiceBank.Overwatching> //break 06 [@Play] [#case4] //case 4: 0A [@case5] 24 <%b 4> //Cue = CurrentVoiceBank.Moving 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Moving> 00 01 <XComCharacterVoiceBank.Moving> //break 06 [@Play] [#case5] //case 5: 0A [@case6] 24 <%b 5> //Cue = CurrentVoiceBank.Dashing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Dashing> 00 01 <XComCharacterVoiceBank.Dashing> //break 06 [@Play] [#case6] //case 6: 0A [@case7] 24 <%b 6> //Cue = CurrentVoiceBank.JetPackMove 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.JetPackMove> 00 01 <XComCharacterVoiceBank.JetPackMove> //break 06 [@Play] [#case7] //case 7: 0A [@case8] 24 <%b 7> //Cue = CurrentVoiceBank.LowAmmo 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.LowAmmo> 00 01 <XComCharacterVoiceBank.LowAmmo> //break 06 [@Play] [#case8] //case 8: 0A [@case9] 24 <%b 8> //Cue = CurrentVoiceBank.OutOfAmmo 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.OutOfAmmo> 00 01 <XComCharacterVoiceBank.OutOfAmmo> //break 06 [@Play] [#case9] //case 9: 0A [@case10] 24 <%b 9> //Cue = CurrentVoiceBank.Suppressing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Suppressing> 00 01 <XComCharacterVoiceBank.Suppressing> //break 06 [@Play] [#case10] //case 10: 0A [@case13] 24 <%b 10> //Cue = CurrentVoiceBank.AreaSuppressing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AreaSuppressing> 00 01 <XComCharacterVoiceBank.AreaSuppressing> //break 06 [@Play] [#case13] //case 13: 0A [@case14] 24 <%b 13> //Cue = CurrentVoiceBank.FlushingTarget 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FlushingTarget> 00 01 <XComCharacterVoiceBank.FlushingTarget> //break 06 [@Play] [#case14] //case 14: 0A [@case15] 24 <%b 14> //Cue = CurrentVoiceBank.HealingAlly 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HealingAlly> 00 01 <XComCharacterVoiceBank.HealingAlly> //break 06 [@Play] [#case15] //case 15: 0A [@case16] 24 <%b 15> //Cue = CurrentVoiceBank.StabilizingAlly 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.StabilizingAlly> 00 01 <XComCharacterVoiceBank.StabilizingAlly> //break 06 [@Play] [#case16] //case 16: 0A [@case17] 24 <%b 16> //Cue = CurrentVoiceBank.RevivingAlly 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RevivingAlly> 00 01 <XComCharacterVoiceBank.RevivingAlly> //break 06 [@Play] [#case17] //case 17: 0A [@case19] 24 <%b 17> //Cue = CurrentVoiceBank.CombatStim 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.CombatStim> 00 01 <XComCharacterVoiceBank.CombatStim> //break 06 [@Play] [#case19] //case 19: 0A [@case20] 24 <%b 19> //Cue = CurrentVoiceBank.FragOut 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FragOut> 00 01 <XComCharacterVoiceBank.FragOut> //break 06 [@Play] [#case20] //case 20: 0A [@case21] 24 <%b 20> //Cue = CurrentVoiceBank.SmokeGrenadeThrown 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.SmokeGrenadeThrown> 00 01 <XComCharacterVoiceBank.SmokeGrenadeThrown> //break 06 [@Play] [#case21] //case 21: 0A [@case23] 24 <%b 21> //Cue = CurrentVoiceBank.SpyGrenadeThrown 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.SpyGrenadeThrown> 00 01 <XComCharacterVoiceBank.SpyGrenadeThrown> //break 06 [@Play] [#case23] //case 23: 0A [@case24] 24 <%b 23> //Cue = CurrentVoiceBank.FiringRocket 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FiringRocket> 00 01 <XComCharacterVoiceBank.FiringRocket> //break 06 [@Play] [#case24] //case 24: 0A [@case26] 24 <%b 24> //Cue = CurrentVoiceBank.GhostModeActivated 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.GhostModeActivated> 00 01 <XComCharacterVoiceBank.GhostModeActivated> //break 06 [@Play] [#case26] //case 26: 0A [@case27] 24 <%b 26> //Cue = CurrentVoiceBank.JetPackDeactivated 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.JetPackDeactivated> 00 01 <XComCharacterVoiceBank.JetPackDeactivated> //break 06 [@Play] [#case27] //case 27: 0A [@case28] 24 <%b 27> //Cue = CurrentVoiceBank.ArcThrower 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ArcThrower> 00 01 <XComCharacterVoiceBank.ArcThrower> //break 06 [@Play] [#case28] //case 28: 0A [@case29] 24 <%b 28> //Cue = CurrentVoiceBank.RepairSHIV 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RepairSHIV> 00 01 <XComCharacterVoiceBank.RepairSHIV> //break 06 [@Play] [#case29] //case 29: 0A [@case30] 24 <%b 29> //Cue = CurrentVoiceBank.Kill 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Kill> 00 01 <XComCharacterVoiceBank.Kill> //break 06 [@Play] [#case30] //case 30: 0A [@case31] 24 <%b 30> //Cue = CurrentVoiceBank.MultiKill 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MultiKill> 00 01 <XComCharacterVoiceBank.MultiKill> //break 06 [@Play] [#case31] //case 31: 0A [@case32] 24 <%b 31> //Cue = CurrentVoiceBank.Missed 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Missed> 00 01 <XComCharacterVoiceBank.Missed> //break 06 [@Play] [#case32] //case 32: 0A [@case33] 24 <%b 32> //Cue = CurrentVoiceBank.TargetSpotted 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.TargetSpotted> 00 01 <XComCharacterVoiceBank.TargetSpotted> //break 06 [@Play] [#case33] //case 33: 0A [@case34] 24 <%b 33> //Cue = CurrentVoiceBank.TargetSpottedHidden 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.TargetSpottedHidden> 00 01 <XComCharacterVoiceBank.TargetSpottedHidden> //break 06 [@Play] [#case34] //case 34: 0A [@case35] 24 <%b 34> //Cue = CurrentVoiceBank.HeardSomething 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HeardSomething> 00 01 <XComCharacterVoiceBank.HeardSomething> //break 06 [@Play] [#case35] //case 35: 0A [@case36] 24 <%b 35> //Cue = CurrentVoiceBank.TakingFire 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.TakingFire> 00 01 <XComCharacterVoiceBank.TakingFire> //break 06 [@Play] [#case36] //case 36: 0A [@case37] 24 <%b 36> //Cue = CurrentVoiceBank.FriendlyKilled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FriendlyKilled> 00 01 <XComCharacterVoiceBank.FriendlyKilled> //break 06 [@Play] [#case37] //case 37: 0A [@case38] 24 <%b 37> //Cue = CurrentVoiceBank.Panic 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Panic> 00 01 <XComCharacterVoiceBank.Panic> //break 06 [@Play] [#case38] //case 38: 0A [@case39] 24 <%b 38> //Cue = CurrentVoiceBank.PanickedBreathing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PanickedBreathing> 00 01 <XComCharacterVoiceBank.PanickedBreathing> //break 06 [@Play] [#case39] //case 39: 0A [@case40] 24 <%b 39> //Cue = CurrentVoiceBank.Wounded 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Wounded> 00 01 <XComCharacterVoiceBank.Wounded> //break 06 [@Play] [#case40] //case 40: 0A [@case41] 24 <%b 40> //Cue = CurrentVoiceBank.Died 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Died> 00 01 <XComCharacterVoiceBank.Died> //break 06 [@Play] [#case41] //case 41: 0A [@case42] 24 <%b 41> //Cue = CurrentVoiceBank.Flanked 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Flanked> 00 01 <XComCharacterVoiceBank.Flanked> //break 06 [@Play] [#case42] //case 42: 0A [@case44] 24 <%b 42> //Cue = CurrentVoiceBank.Suppressed 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Suppressed> 00 01 <XComCharacterVoiceBank.Suppressed> //break 06 [@Play] [#case44] //case 44: 0A [@case51] 24 <%b 44> //Cue = CurrentVoiceBank.PsiControlled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsiControlled> 00 01 <XComCharacterVoiceBank.PsiControlled> //break 06 [@Play] [#case51] //case 51: 0A [@case49] 24 <%b 51> //Cue = CurrentVoiceBank.CivilianRescued 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.CivilianRescued> 00 01 <XComCharacterVoiceBank.CivilianRescued> //break 06 [@Play] [#case49] //case 49: 0A [@case50] 24 <%b 49> //Cue = CurrentVoiceBank.MeldSpotted 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MeldSpotted> 00 01 <XComCharacterVoiceBank.MeldSpotted> //break 06 [@Play] [#case50] //case 50: 0A [@case57] 24 <%b 50> //Cue = CurrentVoiceBank.MeldCollected 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MeldCollected> 00 01 <XComCharacterVoiceBank.MeldCollected> //break 06 [@Play] [#case57] //case 57: 0A [@case70] 24 <%b 57> //Cue = CurrentVoiceBank.RunAndGun 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RunAndGun> 00 01 <XComCharacterVoiceBank.RunAndGun> //break 06 [@Play] [#case70] //case 70: 0A [@case52] 24 <%b 70> //Cue = CurrentVoiceBank.GrapplingHook 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.GrapplingHook> 00 01 <XComCharacterVoiceBank.GrapplingHook> //break 06 [@Play] [#case52] //case 52: 0A [@case53] 24 <%b 52> //Cue = CurrentVoiceBank.AlienRetreat 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienRetreat> 00 01 <XComCharacterVoiceBank.AlienRetreat> //break 06 [@Play] [#case53] //case 53: 0A [@case54] 24 <%b 53> //Cue = CurrentVoiceBank.AlienMoving 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienMoving> 00 01 <XComCharacterVoiceBank.AlienMoving> //break 06 [@Play] [#case54] //case 54: 0A [@case55] 24 <%b 54> //Cue = CurrentVoiceBank.AlienNotStunned 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienNotStunned> 00 01 <XComCharacterVoiceBank.AlienNotStunned> //break 06 [@Play] [#case55] //case 55: 0A [@case56] 24 <%b 55> //Cue = CurrentVoiceBank.AlienReinforcements 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienReinforcements> 00 01 <XComCharacterVoiceBank.AlienReinforcements> //break 06 [@Play] [#case56] //case 56: 0A [@case60] 24 <%b 56> //Cue = CurrentVoiceBank.AlienSighting 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienSighting> 00 01 <XComCharacterVoiceBank.AlienSighting> //break 06 [@Play] [#case60] //case 60: 0A [@case64] 24 <%b 60> //Cue = CurrentVoiceBank.DisablingShot 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.DisablingShot> 00 01 <XComCharacterVoiceBank.DisablingShot> //break 06 [@Play] [#case64] //case 64: 0A [@case66] 24 <%b 64> //Cue = CurrentVoiceBank.ShredderRocket 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ShredderRocket> 00 01 <XComCharacterVoiceBank.ShredderRocket> //break 06 [@Play] [#case66] //case 66: 0A [@case67] 24 <%b 66> //Cue = CurrentVoiceBank.PsionicsMindfray 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsMindfray> 00 01 <XComCharacterVoiceBank.PsionicsMindfray> //break 06 [@Play] [#case67] //case 67: 0A [@case68] 24 <%b 67> //Cue = CurrentVoiceBank.PsionicsPanic 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsPanic> 00 01 <XComCharacterVoiceBank.PsionicsPanic> //break 06 [@Play] [#case68] //case 68: 0A [@case69] 24 <%b 68> //Cue = CurrentVoiceBank.PsionicsInspiration 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsInspiration> 00 01 <XComCharacterVoiceBank.PsionicsInspiration> //break 06 [@Play] [#case69] //case 69: 0A [@case73] 24 <%b 69> //Cue = CurrentVoiceBank.PsionicsTelekineticField 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsTelekineticField> 00 01 <XComCharacterVoiceBank.PsionicsTelekineticField> //break 06 [@Play] [#case73] //case 73: 0A [@case74] 24 <%b 73> //Cue = CurrentVoiceBank.SoldierControlled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.SoldierControlled> 00 01 <XComCharacterVoiceBank.SoldierControlled> //break 06 [@Play] [#case74] //case 74: 0A [@case75] 24 <%b 74> //Cue = CurrentVoiceBank.StunnedAlien 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.StunnedAlien> 00 01 <XComCharacterVoiceBank.StunnedAlien> //break 06 [@Play] [#case75] //case 75: 0A [@case76] 24 <%b 75> //Cue = CurrentVoiceBank.Explosion 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Explosion> 00 01 <XComCharacterVoiceBank.Explosion> //break 06 [@Play] [#case76] //case 76: 0A [@case77] 24 <%b 76> //Cue = CurrentVoiceBank.RocketScatter 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RocketScatter> 00 01 <XComCharacterVoiceBank.RocketScatter> //break 06 [@Play] [#case77] //case 77: 0A [@case78] 24 <%b 77> //Cue = CurrentVoiceBank.PsiRift 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsiRift> 00 01 <XComCharacterVoiceBank.PsiRift> //break 06 [@Play] [#case78] //case 78: 0A [@case79] 24 <%b 78> //Cue = CurrentVoiceBank.Poisoned 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Poisoned> 00 01 <XComCharacterVoiceBank.Poisoned> //break 06 [@Play] [#case79] //case 79: 0A [@case80] 24 <%b 79> //Cue = CurrentVoiceBank.HiddenMovement 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HiddenMovement> 00 01 <XComCharacterVoiceBank.HiddenMovement> //break 06 [@Play] [#case80] //case 80: 0A [@case82] 24 <%b 80> //Cue = CurrentVoiceBank.HiddenMovementVox 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HiddenMovementVox> 00 01 <XComCharacterVoiceBank.HiddenMovementVox> //break 06 [@Play] [#case82] //case 82: 0A [@case83] 24 <%b 82> //Cue = CurrentVoiceBank.ExaltChatter 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ExaltChatter> 00 01 <XComCharacterVoiceBank.ExaltChatter> //break 06 [@Play] [#case83] //case 83: 0A [@case25] 24 <%b 83> //Cue = CurrentVoiceBank.Strangled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Strangled> 00 01 <XComCharacterVoiceBank.Strangled> //break 06 [@Play] [#case25] //case 25: 0A [@case43] 24 <%b 25> //Cue = CurrentVoiceBank.CollateralDamage 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.CollateralDamage> 00 01 <XComCharacterVoiceBank.CollateralDamage> //break 06 [@Play] [#case43] //case 43: 0A [@case45] 24 <%b 43> //Cue = CurrentVoiceBank.ElectroPulse 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ElectroPulse> 00 01 <XComCharacterVoiceBank.ElectroPulse> //break 06 [@Play] [#case45] //case 45: 0A [@case46] 24 <%b 45> //Cue = CurrentVoiceBank.Flamethrower 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Flamethrower> 00 01 <XComCharacterVoiceBank.Flamethrower> //break 06 [@Play] [#case46] //case 46: 0A [@case47] 24 <%b 46> //Cue = CurrentVoiceBank.JetBoots 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.JetBoots> 00 01 <XComCharacterVoiceBank.JetBoots> //break 06 [@Play] [#case47] //case 47: 0A [@case48] 24 <%b 47> //Cue = CurrentVoiceBank.KineticStrike 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.KineticStrike> 00 01 <XComCharacterVoiceBank.KineticStrike> //break 06 [@Play] [#case48] //case 48: 0A [@case58] 24 <%b 48> //Cue = CurrentVoiceBank.OneForAll 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.OneForAll> 00 01 <XComCharacterVoiceBank.OneForAll> //break 06 [@Play] [#case58] //case 58: 0A [@default] 24 <%b 58> //Cue = CurrentVoiceBank.ProximityMine 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ProximityMine> 00 01 <XComCharacterVoiceBank.ProximityMine> //break 06 [@Play] [#default] //default: 0A FF FF //break 06 [@Play] [#Play] //if(Cue != none) 07 [@NoCue] 77 00 <.Cue> 2A 16 //Owner.PlaySound(Cue, true) 19 00 <.Owner> 18 00 <NullRef> 00 1C <Engine.Actor.PlaySound> 00 <.Cue> 27 4A 4A 4A 4A 16 //StreamNextVoiceBank(true) 1C <@StreamNextVoiceBank> 27 16 [#NoCue] //return 04 0B //EOS 53 I've tested that this code retains the existing vanilla voice functionality, although I don't have a new voice package to use to test it with.Record yourself for testing purposes :wink: or use some weird free sounds. Edited October 12, 2014 by wghost81 Link to comment Share on other sites More sharing options...
wghost81 Posted October 12, 2014 Share Posted October 12, 2014 About unused sounds and new sounds. There are number of entries, which have both SoundCue variable and event enum assigned, but not used. Those can be "activated" by calling UnitSpeak(EventEnum). For example, ability voices are triggered inside ApplyAbility with kAbility.m_kUnit.UnitSpeak(EventEnum) call. We can also try to add completely new sounds for completely new events with mutators. This will require creating a new classes, which extend XComCharacterVoice and XComCharacterVoiceBank classes, using those classes instead of original ones to create sound packages and inserting appropriate UnitSpeak calls to appropriate places. Link to comment Share on other sites More sharing options...
tracktwo Posted October 12, 2014 Share Posted October 12, 2014 Yeah, this looks to be purely a UE issue and probably not something specific to X-COM. I'd actually consider it a bug, I think, in that whether or not native code loads depends on the licensee number in the content package instead of the base game package where the native code actually resides. Having it depend on the base package licensee number would enable mods more easily. For all I know this might be fixed/changed in later UDKs, but that won't help much with XCOM. I'm not sure if it's because I had set things up differently before with a saved game, but when I switched to the modified GetSoundCue my game always crashes in the alien turn. Have either of you tested a more complete mission using this modded function? It doesn't crash when I use my native version. I'll try it again and load a game from the strategy layer and see if that helps. It seems like it's crashing at about the time I hear mechtoid or sectopod stomping when I disable the script change, but that could be just a coincidence. I've put together a sample voice + single bank of horrible text-to-speech clips. It sounds completely awful, and is too quiet compared to the other voices, but it's enough to get real content into the game to test with, if either of you would like to use it. It has entries for most events, but not quite all of them. Finally, regarding unused sounds: I was thinking that too. I tried playing a few samples of the "Alien spotted" cue, that all the voice banks have but isn't used. The few variants I've heard would be great for certain long war events involving very large creatures. "Uh... yeah. We have a new contact" Link to comment Share on other sites More sharing options...
wghost81 Posted October 12, 2014 Share Posted October 12, 2014 Thoughts about engine and licensee numbers: http://forums.nexusmods.com/index.php?/topic/1104408-r-d-xcom-map-alterations/?p=19149389 When you think of it, it becomes logical. There are hundreds of games, sharing the same engine version, but also using their own c++ code and adding a native serialized data to packages. Since licensee number appears to be game unique, it's a good way to distinguish base UE code and game specific code. Link to comment Share on other sites More sharing options...
wghost81 Posted October 12, 2014 Share Posted October 12, 2014 (edited) tracktwo, I'm not getting any crashes. Tested in tactical skirmish with Mechtoids. Edited October 12, 2014 by wghost81 Link to comment Share on other sites More sharing options...
tracktwo Posted October 12, 2014 Share Posted October 12, 2014 Weird... it crashes consistently for me, going back to the strategic game or not. If I add an if check to either use the new switch or fall back to the old original GetSoundCue() call depending on whether or not the actor is a soldier, it no longer crashes for me. (I didn't bother renaming the Play label to something more appropriate). Modded code: UPK_FILE=XComGame.upk OBJECT=XComCharacterVoice.PlaySoundForEvent:AUTO [REPLACEMENT_CODE] //if(XComOnlineProfileSettings(class'Engine'.static.GetEngine().GetProfileSettings()).Data.bDisableSoldierChatter || XComTacticalGRI(class'Engine'.static.GetCurrentWorldInfo().GRI).m_kBattle.m_kDesc.m_bDisableSoldierChatter) 07 [@VoicesEnabled] 84 19 19 2E <Class.XComOnlineProfileSettings> 19 12 20 <Engine.Engine> 0A 00 <Engine.Engine.GetEngine.ReturnValue> 00 1C <Engine.Engine.GetEngine> 16 0A 00 <Engine.Engine.GetProfileSettings.ReturnValue> 00 1B <GetProfileSettings> 16 09 00 <XComOnlineProfileSettings.Data> 00 01 <XComOnlineProfileSettings.Data> 0A 00 <XComOnlineProfileSettingsDataBlob.bDisableSoldierChatter> 00 2D 01 <XComOnlineProfileSettingsDataBlob.bDisableSoldierChatter> 18 7E 00 19 19 19 2E <Class.XComTacticalGRI> 19 12 20 <Engine.Engine> 0A 00 <Engine.Engine.GetCurrentWorldInfo.ReturnValue> 00 1C <Engine.Engine.GetCurrentWorldInfo> 16 09 00 <Engine.WorldInfo.GRI> 00 01 <Engine.WorldInfo.GRI> 09 00 <XComTacticalGRI.m_kBattle> 00 01 <XComTacticalGRI.m_kBattle> 09 00 <XGBattle.m_kDesc> 00 01 <XGBattle.m_kDesc> 0A 00 <XGBattleDesc.m_bDisableSoldierChatter> 00 2D 01 <XGBattleDesc.m_bDisableSoldierChatter> 16 //return 04 0B [#VoicesEnabled] // if (XComHumanPawn(Owner) != none) 07 [@NonHuman] 77 2E <Class.XComHumanPawn> 00 <.Owner> 2A 16 //if (CurrentVoiceBank != none) 07 [@Play] 77 01 <@CurrentVoiceBank> 2A 16 //switch(Event) 05 <.Event> 00 00 <.Event> //case 1: 0A [@case2] 24 <%b 1> //Cue = CurrentVoiceBank.HunkerDown 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HunkerDown> 00 01 <XComCharacterVoiceBank.HunkerDown> //break 06 [@Play] [#case2] //case 2: 0A [@case3] 24 <%b 2> //Cue = CurrentVoiceBank.Reload 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Reload> 00 01 <XComCharacterVoiceBank.Reload> //break 06 [@Play] [#case3] //case 3: 0A [@case4] 24 <%b 3> //Cue = CurrentVoiceBank.Overwatching 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Overwatching> 00 01 <XComCharacterVoiceBank.Overwatching> //break 06 [@Play] [#case4] //case 4: 0A [@case5] 24 <%b 4> //Cue = CurrentVoiceBank.Moving 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Moving> 00 01 <XComCharacterVoiceBank.Moving> //break 06 [@Play] [#case5] //case 5: 0A [@case6] 24 <%b 5> //Cue = CurrentVoiceBank.Dashing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Dashing> 00 01 <XComCharacterVoiceBank.Dashing> //break 06 [@Play] [#case6] //case 6: 0A [@case7] 24 <%b 6> //Cue = CurrentVoiceBank.JetPackMove 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.JetPackMove> 00 01 <XComCharacterVoiceBank.JetPackMove> //break 06 [@Play] [#case7] //case 7: 0A [@case8] 24 <%b 7> //Cue = CurrentVoiceBank.LowAmmo 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.LowAmmo> 00 01 <XComCharacterVoiceBank.LowAmmo> //break 06 [@Play] [#case8] //case 8: 0A [@case9] 24 <%b 8> //Cue = CurrentVoiceBank.OutOfAmmo 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.OutOfAmmo> 00 01 <XComCharacterVoiceBank.OutOfAmmo> //break 06 [@Play] [#case9] //case 9: 0A [@case10] 24 <%b 9> //Cue = CurrentVoiceBank.Suppressing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Suppressing> 00 01 <XComCharacterVoiceBank.Suppressing> //break 06 [@Play] [#case10] //case 10: 0A [@case13] 24 <%b 10> //Cue = CurrentVoiceBank.AreaSuppressing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AreaSuppressing> 00 01 <XComCharacterVoiceBank.AreaSuppressing> //break 06 [@Play] [#case13] //case 13: 0A [@case14] 24 <%b 13> //Cue = CurrentVoiceBank.FlushingTarget 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FlushingTarget> 00 01 <XComCharacterVoiceBank.FlushingTarget> //break 06 [@Play] [#case14] //case 14: 0A [@case15] 24 <%b 14> //Cue = CurrentVoiceBank.HealingAlly 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HealingAlly> 00 01 <XComCharacterVoiceBank.HealingAlly> //break 06 [@Play] [#case15] //case 15: 0A [@case16] 24 <%b 15> //Cue = CurrentVoiceBank.StabilizingAlly 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.StabilizingAlly> 00 01 <XComCharacterVoiceBank.StabilizingAlly> //break 06 [@Play] [#case16] //case 16: 0A [@case17] 24 <%b 16> //Cue = CurrentVoiceBank.RevivingAlly 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RevivingAlly> 00 01 <XComCharacterVoiceBank.RevivingAlly> //break 06 [@Play] [#case17] //case 17: 0A [@case19] 24 <%b 17> //Cue = CurrentVoiceBank.CombatStim 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.CombatStim> 00 01 <XComCharacterVoiceBank.CombatStim> //break 06 [@Play] [#case19] //case 19: 0A [@case20] 24 <%b 19> //Cue = CurrentVoiceBank.FragOut 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FragOut> 00 01 <XComCharacterVoiceBank.FragOut> //break 06 [@Play] [#case20] //case 20: 0A [@case21] 24 <%b 20> //Cue = CurrentVoiceBank.SmokeGrenadeThrown 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.SmokeGrenadeThrown> 00 01 <XComCharacterVoiceBank.SmokeGrenadeThrown> //break 06 [@Play] [#case21] //case 21: 0A [@case23] 24 <%b 21> //Cue = CurrentVoiceBank.SpyGrenadeThrown 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.SpyGrenadeThrown> 00 01 <XComCharacterVoiceBank.SpyGrenadeThrown> //break 06 [@Play] [#case23] //case 23: 0A [@case24] 24 <%b 23> //Cue = CurrentVoiceBank.FiringRocket 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FiringRocket> 00 01 <XComCharacterVoiceBank.FiringRocket> //break 06 [@Play] [#case24] //case 24: 0A [@case26] 24 <%b 24> //Cue = CurrentVoiceBank.GhostModeActivated 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.GhostModeActivated> 00 01 <XComCharacterVoiceBank.GhostModeActivated> //break 06 [@Play] [#case26] //case 26: 0A [@case27] 24 <%b 26> //Cue = CurrentVoiceBank.JetPackDeactivated 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.JetPackDeactivated> 00 01 <XComCharacterVoiceBank.JetPackDeactivated> //break 06 [@Play] [#case27] //case 27: 0A [@case28] 24 <%b 27> //Cue = CurrentVoiceBank.ArcThrower 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ArcThrower> 00 01 <XComCharacterVoiceBank.ArcThrower> //break 06 [@Play] [#case28] //case 28: 0A [@case29] 24 <%b 28> //Cue = CurrentVoiceBank.RepairSHIV 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RepairSHIV> 00 01 <XComCharacterVoiceBank.RepairSHIV> //break 06 [@Play] [#case29] //case 29: 0A [@case30] 24 <%b 29> //Cue = CurrentVoiceBank.Kill 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Kill> 00 01 <XComCharacterVoiceBank.Kill> //break 06 [@Play] [#case30] //case 30: 0A [@case31] 24 <%b 30> //Cue = CurrentVoiceBank.MultiKill 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MultiKill> 00 01 <XComCharacterVoiceBank.MultiKill> //break 06 [@Play] [#case31] //case 31: 0A [@case32] 24 <%b 31> //Cue = CurrentVoiceBank.Missed 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Missed> 00 01 <XComCharacterVoiceBank.Missed> //break 06 [@Play] [#case32] //case 32: 0A [@case33] 24 <%b 32> //Cue = CurrentVoiceBank.TargetSpotted 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.TargetSpotted> 00 01 <XComCharacterVoiceBank.TargetSpotted> //break 06 [@Play] [#case33] //case 33: 0A [@case34] 24 <%b 33> //Cue = CurrentVoiceBank.TargetSpottedHidden 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.TargetSpottedHidden> 00 01 <XComCharacterVoiceBank.TargetSpottedHidden> //break 06 [@Play] [#case34] //case 34: 0A [@case35] 24 <%b 34> //Cue = CurrentVoiceBank.HeardSomething 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HeardSomething> 00 01 <XComCharacterVoiceBank.HeardSomething> //break 06 [@Play] [#case35] //case 35: 0A [@case36] 24 <%b 35> //Cue = CurrentVoiceBank.TakingFire 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.TakingFire> 00 01 <XComCharacterVoiceBank.TakingFire> //break 06 [@Play] [#case36] //case 36: 0A [@case37] 24 <%b 36> //Cue = CurrentVoiceBank.FriendlyKilled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.FriendlyKilled> 00 01 <XComCharacterVoiceBank.FriendlyKilled> //break 06 [@Play] [#case37] //case 37: 0A [@case38] 24 <%b 37> //Cue = CurrentVoiceBank.Panic 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Panic> 00 01 <XComCharacterVoiceBank.Panic> //break 06 [@Play] [#case38] //case 38: 0A [@case39] 24 <%b 38> //Cue = CurrentVoiceBank.PanickedBreathing 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PanickedBreathing> 00 01 <XComCharacterVoiceBank.PanickedBreathing> //break 06 [@Play] [#case39] //case 39: 0A [@case40] 24 <%b 39> //Cue = CurrentVoiceBank.Wounded 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Wounded> 00 01 <XComCharacterVoiceBank.Wounded> //break 06 [@Play] [#case40] //case 40: 0A [@case41] 24 <%b 40> //Cue = CurrentVoiceBank.Died 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Died> 00 01 <XComCharacterVoiceBank.Died> //break 06 [@Play] [#case41] //case 41: 0A [@case42] 24 <%b 41> //Cue = CurrentVoiceBank.Flanked 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Flanked> 00 01 <XComCharacterVoiceBank.Flanked> //break 06 [@Play] [#case42] //case 42: 0A [@case44] 24 <%b 42> //Cue = CurrentVoiceBank.Suppressed 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Suppressed> 00 01 <XComCharacterVoiceBank.Suppressed> //break 06 [@Play] [#case44] //case 44: 0A [@case51] 24 <%b 44> //Cue = CurrentVoiceBank.PsiControlled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsiControlled> 00 01 <XComCharacterVoiceBank.PsiControlled> //break 06 [@Play] [#case51] //case 51: 0A [@case49] 24 <%b 51> //Cue = CurrentVoiceBank.CivilianRescued 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.CivilianRescued> 00 01 <XComCharacterVoiceBank.CivilianRescued> //break 06 [@Play] [#case49] //case 49: 0A [@case49] 24 <%b 49> //Cue = CurrentVoiceBank.MeldSpotted 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MeldSpotted> 00 01 <XComCharacterVoiceBank.MeldSpotted> //break 06 [@Play] [#case50] //case 50: 0A [@case57] 24 <%b 50> //Cue = CurrentVoiceBank.MeldCollected 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.MeldCollected> 00 01 <XComCharacterVoiceBank.MeldCollected> //break 06 [@Play] [#case57] //case 57: 0A [@case70] 24 <%b 57> //Cue = CurrentVoiceBank.RunAndGun 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RunAndGun> 00 01 <XComCharacterVoiceBank.RunAndGun> //break 06 [@Play] [#case70] //case 70: 0A [@case52] 24 <%b 70> //Cue = CurrentVoiceBank.GrapplingHook 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.GrapplingHook> 00 01 <XComCharacterVoiceBank.GrapplingHook> //break 06 [@Play] [#case52] //case 52: 0A [@case53] 24 <%b 52> //Cue = CurrentVoiceBank.AlienRetreat 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienRetreat> 00 01 <XComCharacterVoiceBank.AlienRetreat> //break 06 [@Play] [#case53] //case 53: 0A [@case54] 24 <%b 53> //Cue = CurrentVoiceBank.AlienMoving 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienMoving> 00 01 <XComCharacterVoiceBank.AlienMoving> //break 06 [@Play] [#case54] //case 54: 0A [@case55] 24 <%b 54> //Cue = CurrentVoiceBank.AlienNotStunned 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienNotStunned> 00 01 <XComCharacterVoiceBank.AlienNotStunned> //break 06 [@Play] [#case55] //case 55: 0A [@case56] 24 <%b 55> //Cue = CurrentVoiceBank.AlienReinforcements 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienReinforcements> 00 01 <XComCharacterVoiceBank.AlienReinforcements> //break 06 [@Play] [#case56] //case 56: 0A [@case60] 24 <%b 56> //Cue = CurrentVoiceBank.AlienSighting 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.AlienSighting> 00 01 <XComCharacterVoiceBank.AlienSighting> //break 06 [@Play] [#case60] //case 60: 0A [@case64] 24 <%b 60> //Cue = CurrentVoiceBank.DisablingShot 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.DisablingShot> 00 01 <XComCharacterVoiceBank.DisablingShot> //break 06 [@Play] [#case64] //case 64: 0A [@case66] 24 <%b 64> //Cue = CurrentVoiceBank.ShredderRocket 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ShredderRocket> 00 01 <XComCharacterVoiceBank.ShredderRocket> //break 06 [@Play] [#case66] //case 66: 0A [@case67] 24 <%b 66> //Cue = CurrentVoiceBank.PsionicsMindfray 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsMindfray> 00 01 <XComCharacterVoiceBank.PsionicsMindfray> //break 06 [@Play] [#case67] //case 67: 0A [@case68] 24 <%b 67> //Cue = CurrentVoiceBank.PsionicsPanic 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsPanic> 00 01 <XComCharacterVoiceBank.PsionicsPanic> //break 06 [@Play] [#case68] //case 68: 0A [@case69] 24 <%b 68> //Cue = CurrentVoiceBank.PsionicsInspiration 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsInspiration> 00 01 <XComCharacterVoiceBank.PsionicsInspiration> //break 06 [@Play] [#case69] //case 69: 0A [@case73] 24 <%b 69> //Cue = CurrentVoiceBank.PsionicsTelekineticField 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsionicsTelekineticField> 00 01 <XComCharacterVoiceBank.PsionicsTelekineticField> //break 06 [@Play] [#case73] //case 73: 0A [@case74] 24 <%b 73> //Cue = CurrentVoiceBank.SoldierControlled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.SoldierControlled> 00 01 <XComCharacterVoiceBank.SoldierControlled> //break 06 [@Play] [#case74] //case 74: 0A [@case75] 24 <%b 74> //Cue = CurrentVoiceBank.StunnedAlien 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.StunnedAlien> 00 01 <XComCharacterVoiceBank.StunnedAlien> //break 06 [@Play] [#case75] //case 75: 0A [@case76] 24 <%b 75> //Cue = CurrentVoiceBank.Explosion 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Explosion> 00 01 <XComCharacterVoiceBank.Explosion> //break 06 [@Play] [#case76] //case 76: 0A [@case77] 24 <%b 76> //Cue = CurrentVoiceBank.RocketScatter 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.RocketScatter> 00 01 <XComCharacterVoiceBank.RocketScatter> //break 06 [@Play] [#case77] //case 77: 0A [@case78] 24 <%b 77> //Cue = CurrentVoiceBank.PsiRift 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.PsiRift> 00 01 <XComCharacterVoiceBank.PsiRift> //break 06 [@Play] [#case78] //case 78: 0A [@case79] 24 <%b 78> //Cue = CurrentVoiceBank.Poisoned 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Poisoned> 00 01 <XComCharacterVoiceBank.Poisoned> //break 06 [@Play] [#case79] //case 79: 0A [@case80] 24 <%b 79> //Cue = CurrentVoiceBank.HiddenMovement 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HiddenMovement> 00 01 <XComCharacterVoiceBank.HiddenMovement> //break 06 [@Play] [#case80] //case 80: 0A [@case82] 24 <%b 80> //Cue = CurrentVoiceBank.HiddenMovementVox 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.HiddenMovementVox> 00 01 <XComCharacterVoiceBank.HiddenMovementVox> //break 06 [@Play] [#case82] //case 82: 0A [@case83] 24 <%b 82> //Cue = CurrentVoiceBank.ExaltChatter 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ExaltChatter> 00 01 <XComCharacterVoiceBank.ExaltChatter> //break 06 [@Play] [#case83] //case 83: 0A [@case25] 24 <%b 83> //Cue = CurrentVoiceBank.Strangled 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Strangled> 00 01 <XComCharacterVoiceBank.Strangled> //break 06 [@Play] [#case25] //case 25: 0A [@case43] 24 <%b 25> //Cue = CurrentVoiceBank.CollateralDamage 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.CollateralDamage> 00 01 <XComCharacterVoiceBank.CollateralDamage> //break 06 [@Play] [#case43] //case 43: 0A [@case45] 24 <%b 43> //Cue = CurrentVoiceBank.ElectroPulse 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ElectroPulse> 00 01 <XComCharacterVoiceBank.ElectroPulse> //break 06 [@Play] [#case45] //case 45: 0A [@case46] 24 <%b 45> //Cue = CurrentVoiceBank.Flamethrower 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.Flamethrower> 00 01 <XComCharacterVoiceBank.Flamethrower> //break 06 [@Play] [#case46] //case 46: 0A [@case47] 24 <%b 46> //Cue = CurrentVoiceBank.JetBoots 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.JetBoots> 00 01 <XComCharacterVoiceBank.JetBoots> //break 06 [@Play] [#case47] //case 47: 0A [@case48] 24 <%b 47> //Cue = CurrentVoiceBank.KineticStrike 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.KineticStrike> 00 01 <XComCharacterVoiceBank.KineticStrike> //break 06 [@Play] [#case48] //case 48: 0A [@case58] 24 <%b 48> //Cue = CurrentVoiceBank.OneForAll 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.OneForAll> 00 01 <XComCharacterVoiceBank.OneForAll> //break 06 [@Play] [#case58] //case 58: 0A [@default] 24 <%b 58> //Cue = CurrentVoiceBank.ProximityMine 0F 00 <.Cue> 19 01 <@CurrentVoiceBank> 09 00 <XComCharacterVoiceBank.ProximityMine> 00 01 <XComCharacterVoiceBank.ProximityMine> //break 06 [@Play] [#default] //default: 0A FF FF //break 06 [@Play] // } // if (XComHumanPawn(Owner) != none) [#Play] 06 [@PlaySound] [#NonHuman] // Cue = GetSoundCue(event) 0F 00 <.Cue> 1C <XComCharacterVoice.GetSoundCue> 00 <.Event> 16 [#PlaySound] //if(Cue != none) 07 [@NoCue] 77 00 <.Cue> 2A 16 //Owner.PlaySound(Cue, true) 19 00 <.Owner> 18 00 <NullRef> 00 1C <Engine.Actor.PlaySound> 00 <.Cue> 27 4A 4A 4A 4A 16 //StreamNextVoiceBank(true) 1C <@StreamNextVoiceBank> 27 16 [#NoCue] //return 04 0B //EOS 53 Link to comment Share on other sites More sharing options...
Recommended Posts