diff --git a/Content.Shared/Silicons/Borgs/SharedBorgSystem.cs b/Content.Shared/Silicons/Borgs/SharedBorgSystem.cs index 0431d95a42..f618cea785 100644 --- a/Content.Shared/Silicons/Borgs/SharedBorgSystem.cs +++ b/Content.Shared/Silicons/Borgs/SharedBorgSystem.cs @@ -1,4 +1,5 @@ -using Content.Shared.Access.Components; +using System.Linq; +using Content.Shared._White.TTS; using Content.Shared.Containers.ItemSlots; using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; @@ -7,6 +8,8 @@ using Content.Shared.PowerCell.Components; using Content.Shared.Silicons.Borgs.Components; using Content.Shared.Wires; using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Shared.Silicons.Borgs; @@ -30,10 +33,21 @@ public abstract partial class SharedBorgSystem : EntitySystem SubscribeLocalEvent(OnInserted); SubscribeLocalEvent(OnRemoved); SubscribeLocalEvent(OnRefreshMovementSpeedModifiers); + SubscribeLocalEvent(RandomTTS); InitializeRelay(); } + private void RandomTTS(EntityUid uid, SharedTTSComponent component, ComponentStartup args) + { + if (TryComp(uid, out var borgChassis) && borgChassis.Initialized) + { + var voices = IoCManager.Resolve().EnumeratePrototypes().ToList(); + var voice = IoCManager.Resolve().Pick(voices); + component.VoicePrototypeId = voice.ID; + } + } + private void OnItemSlotInsertAttempt(EntityUid uid, BorgChassisComponent component, ref ItemSlotInsertAttemptEvent args) { if (args.Cancelled) diff --git a/Content.Shared/_White/TTS/TTSVoicePrototype.cs b/Content.Shared/_White/TTS/TTSVoicePrototype.cs index 61429165b9..cb6a22b263 100644 --- a/Content.Shared/_White/TTS/TTSVoicePrototype.cs +++ b/Content.Shared/_White/TTS/TTSVoicePrototype.cs @@ -34,3 +34,25 @@ public sealed class TTSVoicePrototype : IPrototype [DataField] public bool BorgVoice { get; } } + +[Prototype("ttsBorgVoice")] +public sealed class TTSBorgVoicePrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + [DataField] + public string Name { get; } = string.Empty; + + [DataField(required: true)] + public Sex Sex { get; } + + [ViewVariables(VVAccess.ReadWrite), DataField(required: true)] + public string Speaker { get; } = string.Empty; + + /// + /// Whether the species is available "at round start" (In the character editor) + /// + [DataField] + public bool RoundStart { get; } = true; +} diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index 6706411861..a05e50badd 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -128,12 +128,7 @@ - Flashed - type: TypingIndicator proto: robot - - type: Speech - speechVerb: Robotic - speechSounds: Borg - - type: Vocal - sounds: - Unsexed: UnisexSilicon + - type: TTS - type: UnblockableSpeech - type: FootstepModifier footstepSoundCollection: @@ -282,10 +277,6 @@ - Syndicate - type: ShowSyndicateIcons - type: MovementAlwaysTouching - - type: Speech - speechSounds: SyndieBorg - - type: Vocal - sounds: - Unsexed: UnisexSiliconSyndicate + - type: TTS - type: PointLight color: "#dd200b" diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index 052b084f72..984bd9f35e 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -27,8 +27,6 @@ name: cyborg - type: Construction node: cyborg - - type: Speech - speechVerb: Robotic - type: InteractionPopup interactSuccessString: petting-success-generic-cyborg interactFailureString: petting-failure-generic-cyborg @@ -95,8 +93,6 @@ interactFailureString: petting-failure-salvage-cyborg interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: Speech # WD - speechSounds: BorgUpgraded - type: entity id: BorgChassisEngineer @@ -150,8 +146,6 @@ interactFailureString: petting-failure-engineer-cyborg interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: Speech # WD - speechSounds: BorgUpgraded - type: entity id: BorgChassisJanitor @@ -213,8 +207,6 @@ interactFailureString: petting-failure-janitor-cyborg interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: Speech # WD - speechSounds: BorgUpgraded - type: entity id: BorgChassisMedical @@ -289,8 +281,6 @@ interactFailureString: petting-failure-medical-cyborg interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: Speech # WD - speechSounds: BorgUpgraded - type: entity id: BorgChassisService @@ -344,8 +334,6 @@ interactFailureString: petting-failure-service-cyborg interactSuccessSound: path: /Audio/Ambience/Objects/periodic_beep.ogg - - type: Speech # WD - speechSounds: BorgUpgraded - type: entity id: BorgChassisSyndicateAssault diff --git a/Resources/Prototypes/_Honk/tts-borg-voices.yml b/Resources/Prototypes/_Honk/tts-borg-voices.yml new file mode 100644 index 0000000000..bb72c889a7 --- /dev/null +++ b/Resources/Prototypes/_Honk/tts-borg-voices.yml @@ -0,0 +1,956 @@ +- type: ttsBorgVoice + id: Aidar + name: tts-voice-name-aidar + sex: Male + speaker: aidar + +- type: ttsBorgVoice + id: Eugene + name: tts-voice-name-eugene + sex: Male + speaker: eugene + +- type: ttsBorgVoice + id: Baya + name: tts-voice-name-baya + sex: Female + speaker: baya + +- type: ttsBorgVoice + id: Kseniya + name: tts-voice-name-kseniya + sex: Female + speaker: kseniya + +- type: ttsBorgVoice + id: Xenia + name: tts-voice-name-xenia + sex: Female + speaker: xenia + +- type: ttsBorgVoice + id: Charlotte + name: tts-voice-name-charlotte + sex: Female + speaker: charlotte + +- type: ttsBorgVoice + id: Bebey + name: tts-voice-name-bebey + sex: Male + speaker: bebey + +- type: ttsBorgVoice + id: Biden + name: tts-voice-name-biden + sex: Male + speaker: biden + +#- type: ttsBorgVoice +# id: Ddr2 +# name: tts-voice-name-ddr2 +# sex: Male +# speaker: ddr2 + +- type: ttsBorgVoice + id: Papa + name: tts-voice-name-papa + sex: Male + speaker: papa + +- type: ttsBorgVoice + id: Mykyta + name: tts-voice-name-mykyta + sex: Male + speaker: mykyta + +- type: ttsBorgVoice + id: Glados + name: tts-voice-name-glados + sex: Female + speaker: glados + roundStart: false + +- type: ttsBorgVoice + id: Sentrybot + name: tts-voice-name-sentrybot + sex: Male + speaker: sentrybot + roundStart: false + borgVoice: true + +- type: ttsBorgVoice + id: Mana + name: tts-voice-name-mana + sex: Female + speaker: mana + +- type: ttsBorgVoice + id: Soldier + name: tts-voice-name-soldier + sex: Male + speaker: soldier + +- type: ttsBorgVoice + id: Planya + name: tts-voice-name-planya + sex: Female + speaker: planya + +- type: ttsBorgVoice + id: Amina + name: tts-voice-name-amina + sex: Female + speaker: amina + +- type: ttsBorgVoice + id: AdventureCore + name: tts-voice-name-adventure-core + sex: Male + speaker: adventure_core + roundStart: false + borgVoice: true + +- type: ttsBorgVoice + id: SpaceCore + name: tts-voice-name-space-core + sex: Male + speaker: space_core + roundStart: false + borgVoice: true + +- type: ttsBorgVoice + id: FactCore + name: tts-voice-name-fact-core + sex: Male + speaker: fact_core + roundStart: false + borgVoice: true + +- type: ttsBorgVoice + id: Kleiner + name: tts-voice-name-kleiner + sex: Male + speaker: kleiner + +- type: ttsBorgVoice + id: Dbkn + name: tts-voice-name-dbkn + sex: Male + speaker: dbkn + +- type: ttsBorgVoice + id: Neco + name: tts-voice-name-neco + sex: Female + speaker: neco + +- type: ttsBorgVoice + id: Gman + name: tts-voice-name-gman + sex: Male + speaker: gman + +- type: ttsBorgVoice + id: Obama + name: tts-voice-name-obama + sex: Male + speaker: obama + +- type: ttsBorgVoice + id: Trump + name: tts-voice-name-trump + sex: Male + speaker: trump + +- type: ttsBorgVoice + id: Briman + name: tts-voice-name-briman + sex: Male + speaker: briman + +- type: ttsBorgVoice + id: FatherGrigori + name: tts-voice-name-father-grigori + sex: Male + speaker: father_grigori + +- type: ttsBorgVoice + id: Vance + name: tts-voice-name-vance + sex: Male + speaker: vance + +- type: ttsBorgVoice + id: Barni + name: tts-voice-name-barni + sex: Male + speaker: barni + +- type: ttsBorgVoice + id: Alyx + name: tts-voice-name-alyx + sex: Female + speaker: alyx + +- type: ttsBorgVoice + id: Mossman + name: tts-voice-name-mossman + sex: Female + speaker: mossman + +- type: ttsBorgVoice + id: Bandit + name: tts-voice-name-bandit + sex: Male + speaker: bandit + +- type: ttsBorgVoice + id: Geralt + name: tts-voice-name-geralt + sex: Male + speaker: geralt + +- type: ttsBorgVoice + id: Triss + name: tts-voice-name-triss + sex: Female + speaker: triss + +- type: ttsBorgVoice + id: KodlakWhiteMane + name: tts-voice-name-kodlak-white-mane + sex: Male + speaker: kodlakwhitemane + +- type: ttsBorgVoice + id: Cicero + name: tts-voice-name-cicero + sex: Male + speaker: cicero + +- type: ttsBorgVoice + id: Sheogorath + name: tts-voice-name-sheogorath + sex: Male + speaker: sheogorath + +- type: ttsBorgVoice + id: TurretFloor + name: tts-voice-name-turret-floor + sex: Female + speaker: turret_floor + roundStart: false + borgVoice: true + +- type: ttsBorgVoice + id: Cirilla + name: tts-voice-name-cirilla + sex: Female + speaker: cirilla + +- type: ttsBorgVoice + id: Lambert + name: tts-voice-name-lambert + sex: Male + speaker: lambert + +- type: ttsBorgVoice + id: Polina + name: tts-voice-name-polina + sex: Female + speaker: polina + +- type: ttsBorgVoice + id: Arthas + name: tts-voice-name-arthas + sex: Male + speaker: arthas + +- type: ttsBorgVoice + id: Xrenoid + name: tts-voice-name-xrenoid + sex: Male + speaker: xrenoid + +- type: ttsBorgVoice + id: Azir + name: tts-voice-name-azir + sex: Male + speaker: azir + +- type: ttsBorgVoice + id: Caitlyn + name: tts-voice-name-caitlyn + sex: Female + speaker: caitlyn + +- type: ttsBorgVoice + id: Ekko + name: tts-voice-name-ekko + sex: Male + speaker: ekko + +- type: ttsBorgVoice + id: Twitch + name: tts-voice-name-twitch + sex: Male + speaker: twitch + +- type: ttsBorgVoice + id: Strelok + name: tts-voice-name-strelok + sex: Male + speaker: strelok + +- type: ttsBorgVoice + id: Ziggs + name: tts-voice-name-ziggs + sex: Male + speaker: ziggs + +- type: ttsBorgVoice + id: Tracer + name: tts-voice-name-tracer + sex: Female + speaker: tracer + +- type: ttsBorgVoice + id: Illidan + name: tts-voice-name-illidan + sex: Male + speaker: illidan + +- type: ttsBorgVoice + id: Rexxar + name: tts-voice-name-rexxar + sex: Male + speaker: rexxar + +- type: ttsBorgVoice + id: Voljin + name: tts-voice-name-voljin + sex: Male + speaker: voljin + +- type: ttsBorgVoice + id: Forester + name: tts-voice-name-forester + sex: Male + speaker: forester + +- type: ttsBorgVoice + id: Sidorovich + name: tts-voice-name-sidorovich + sex: Male + speaker: sidorovich + +- type: ttsBorgVoice + id: TfEngineer + name: tts-voice-name-tf-engineer + sex: Male + speaker: engineer + +- type: ttsBorgVoice + id: TfHeavy + name: tts-voice-name-tf-heavy + sex: Male + speaker: heavy + +- type: ttsBorgVoice + id: TfMedic + name: tts-voice-name-tf-medic + sex: Male + speaker: medic + +- type: ttsBorgVoice + id: TfSniper + name: tts-voice-name-tf-sniper + sex: Male + speaker: sniper + +- type: ttsBorgVoice + id: TfSpy + name: tts-voice-name-tf-spy + sex: Male + speaker: spy + +- type: ttsBorgVoice + id: TfDemoman + name: tts-voice-name-tf-demoman + sex: Male + speaker: demoman + +- type: ttsBorgVoice + id: Valtos + name: tts-voice-name-valtos + sex: Female + speaker: valtos + +- type: ttsBorgVoice + id: Khajiit + name: tts-voice-name-khajiit + sex: Male + speaker: khajiit + +- type: ttsBorgVoice + id: Punisher + name: tts-voice-name-punisher + sex: Male + speaker: punisher + +- type: ttsBorgVoice + id: Johnny + name: tts-voice-name-johnny + sex: Male + speaker: johnny + +- type: ttsBorgVoice + id: Panam + name: tts-voice-name-panam + sex: Female + speaker: panam + +- type: ttsBorgVoice + id: Dornan + name: tts-voice-name-dornan + sex: Male + speaker: dornan + +- type: ttsBorgVoice + id: VFemale + name: tts-voice-name-v-female + sex: Female + speaker: v_female + +- type: ttsBorgVoice + id: OfficerEnclave + name: tts-voice-name-officer-enclave + sex: Male + speaker: officer_enclave + roundStart: false + borgVoice: true + +- type: ttsBorgVoice + id: Richardson + name: tts-voice-name-richardson + sex: Male + speaker: richardson + +- type: ttsBorgVoice + id: Elenwen + name: tts-voice-name-elenwen + sex: Female + speaker: elenwen + +- type: ttsBorgVoice + id: EmperorTit + name: tts-voice-name-emperor-tit + sex: Male + speaker: emperor + +- type: ttsBorgVoice + id: GuardSkyrim + name: tts-voice-name-guard-skyrim + sex: Male + speaker: guard + +- type: ttsBorgVoice + id: Hagraven + name: tts-voice-name-hagraven + sex: Male + speaker: hagraven + +- type: ttsBorgVoice + id: HermaeusMora + name: tts-voice-name-hermaeus-mora + sex: Male + speaker: hermaeus_mora + +- type: ttsBorgVoice + id: Nord + name: tts-voice-name-nord + sex: Male + speaker: nord + +- type: ttsBorgVoice + id: Ulfric + name: tts-voice-name-ulfric + sex: Male + speaker: ulfric + +- type: ttsBorgVoice + id: GoodThalya + name: tts-voice-name-good-thalya + sex: Female + speaker: good_thalya + +- type: ttsBorgVoice + id: Cerys + name: tts-voice-name-cerys + sex: Female + speaker: cerys + +- type: ttsBorgVoice + id: Judy + name: tts-voice-name-judy + sex: Female + speaker: judy + +- type: ttsBorgVoice + id: Mitch + name: tts-voice-name-mitch + sex: Male + speaker: mitch + +- type: ttsBorgVoice + id: Skippy + name: tts-voice-name-skippy + sex: Male + speaker: skippy + +- type: ttsBorgVoice + id: Butch + name: tts-voice-name-butch + sex: Male + speaker: butch + +- type: ttsBorgVoice + id: Marcus + name: tts-voice-name-marcus + sex: Male + speaker: marcus + +- type: ttsBorgVoice + id: Sulik + name: tts-voice-name-sulik + sex: Male + speaker: sulik + +- type: ttsBorgVoice + id: Astrid + name: tts-voice-name-astrid + sex: Female + speaker: astrid + +- type: ttsBorgVoice + id: Maven + name: tts-voice-name-maven + sex: Female + speaker: maven + +- type: ttsBorgVoice + id: Nazir + name: tts-voice-name-nazir + sex: Male + speaker: nazir + +- type: ttsBorgVoice + id: Jackie + name: tts-voice-name-jackie + sex: Male + speaker: jackie + +- type: ttsBorgVoice + id: EvilThalya + name: tts-voice-name-evil-thalya + sex: Female + speaker: evil_thalya + +- type: ttsBorgVoice + id: PostalDude + name: tts-voice-name-dude + sex: Male + speaker: dude + +- type: ttsBorgVoice + id: Anduin + name: tts-voice-name-anduin + sex: Male + speaker: anduin + +- type: ttsBorgVoice + id: Brukan + name: tts-voice-name-brukan + sex: Male + speaker: brukan + +- type: ttsBorgVoice + id: Puchkow + name: tts-voice-name-puchkow + sex: Male + speaker: puchkow + +- type: ttsBorgVoice + id: Moriarti + name: tts-voice-name-moriarti + sex: Male + speaker: moriarti + +- type: ttsBorgVoice + id: NecoArcTwo + name: tts-voice-name-neco-arc-two + sex: Female + speaker: neco_arc_2 + +- type: ttsBorgVoice + id: AngryNecoArc + name: tts-voice-name-angry-neco-arc + sex: Female + speaker: angry_neco_arc + +- type: ttsBorgVoice + id: Squidward + name: tts-voice-name-squidward + sex: Male + speaker: squidward + +- type: ttsBorgVoice + id: Garrosh + name: tts-voice-name-garrosh + sex: Male + speaker: garrosh + +- type: ttsBorgVoice + id: Jaina + name: tts-voice-name-jaina + sex: Female + speaker: jaina + +- type: ttsBorgVoice + id: Adjutant + name: tts-voice-name-adjutant + sex: Female + speaker: adjutant + +- type: ttsBorgVoice + id: Hanson + name: tts-voice-name-hanson + sex: Female + speaker: hanson + +- type: ttsBorgVoice + id: Bralik + name: tts-voice-name-bralik + sex: Male + speaker: bralik + +- type: ttsBorgVoice + id: Horner + name: tts-voice-name-horner + sex: Male + speaker: horner + +- type: ttsBorgVoice + id: Villager + name: tts-voice-name-villager + sex: Male + speaker: villager + roundStart: false + +- type: ttsBorgVoice + id: AmitTakkar + name: tts-voice-name-amitkakkar + sex: Male + speaker: amitkakkar + +- type: ttsBorgVoice + id: EleazarFig + name: tts-voice-name-eleazarfig + sex: Male + speaker: eleazarfig + +- type: ttsBorgVoice + id: ErnieLark + name: tts-voice-name-ernielark + sex: Male + speaker: ernielark + +- type: ttsBorgVoice + id: IgnatiaFlootravel + name: tts-voice-name-ignatiaflootravel + sex: Female + speaker: ignatiaflootravel + +- type: ttsBorgVoice + id: Lodgok + name: tts-voice-name-lodgok + sex: Male + speaker: lodgok + +- type: ttsBorgVoice + id: PhineasBlack + name: tts-voice-name-phineasblack + sex: Male + speaker: phineasblack + +- type: ttsBorgVoice + id: Ranrak + name: tts-voice-name-ranrak + sex: Male + speaker: ranrak + +- type: ttsBorgVoice + id: VictorRookwood + name: tts-voice-name-victorrookwood + sex: Male + speaker: victorrookwood + +- type: ttsBorgVoice + id: ZenobiaNoke + name: tts-voice-name-zenobianoke + sex: Female + speaker: zenobianoke + +- type: ttsBorgVoice + id: GladwinMoon + name: tts-voice-name-gladwinmoon + sex: Male + speaker: gladwinmoon + +- type: ttsBorgVoice + id: MatildaWeasley + name: tts-voice-name-matildaweasley + sex: Female + speaker: matildaweasley + +- type: ttsBorgVoice + id: Romka + name: tts-voice-name-romka + sex: Male + speaker: romka + +- type: ttsBorgVoice + id: Myron + name: tts-voice-name-myron + sex: Male + speaker: myron + +- type: ttsBorgVoice + id: NatsaiOnai + name: tts-voice-name-natsaionai + sex: Female + speaker: natsaionai + +- type: ttsBorgVoice + id: OminisGaunt + name: tts-voice-name-ominisgaunt + sex: Male + speaker: ominisgaunt + +- type: ttsBorgVoice + id: PoppySweeting + name: tts-voice-name-poppysweeting + sex: Female + speaker: poppysweeting + +- type: ttsBorgVoice + id: NarratorD3 + name: tts-voice-name-narrator_d3 + sex: Male + speaker: narrator_d3 + +- type: ttsBorgVoice + id: Tosh + name: tts-voice-name-tosh + sex: Male + speaker: tosh + +- type: ttsBorgVoice + id: Tychus + name: tts-voice-name-tychus + sex: Male + speaker: tychus + +- type: ttsBorgVoice + name: tts-voice-name-boris-petrov + sex: Male + speaker: boris_petrov_father_tb + id: BorisPetrovFatherTb + +- type: ttsBorgVoice + name: tts-voice-name-karina-petrova + sex: Female + speaker: karina_petrova_tb + id: KarinaPetrovaTb + +- type: ttsBorgVoice + name: tts-voice-name-kate-smirnova + sex: Female + speaker: kate_smirnova_tb + id: KateSmirnovaTb + +- type: ttsBorgVoice + name: tts-voice-name-semen-baburin + sex: Male + speaker: semen_baburin_tb + id: SemenBaburinTb + +- type: ttsBorgVoice + name: tts-voice-name-tihonov + sex: Male + speaker: tihonov_tb + id: TihonovTb + +- type: ttsBorgVoice + name: tts-voice-name-uther + sex: Male + speaker: uther_hs + id: UtherHs + +- type: ttsBorgVoice + name: tts-voice-name-female-commander + sex: Female + speaker: female_commander + id: FemaleCommander + +- type: ttsBorgVoice + name: tts-voice-name-lord-harkon + sex: Male + speaker: lord_harkon + id: LordHarkon + +- type: ttsBorgVoice + name: tts-voice-name-serana + sex: Female + speaker: serana + id: Serana + +- type: ttsBorgVoice + name: tts-voice-name-moira-brown + sex: Female + speaker: moira_brown + id: MoiraBrown + +- type: ttsBorgVoice + name: tts-voice-name-robert-maccready + sex: Male + speaker: robert_maccready + id: RobertMaccready + +- type: ttsBorgVoice + name: tts-voice-name-threedog + sex: Male + speaker: threedog + id: Threedog + +- type: ttsBorgVoice + name: tts-voice-name-threedog-radio + sex: Male + speaker: threedog_radio + id: ThreedogRadio + +- type: ttsBorgVoice + name: tts-voice-name-generic-goblin-c + sex: Male + speaker: generic_goblin_c + id: GenericGoblinC + +- type: ttsBorgVoice + name: tts-voice-name-dinah-hecat + sex: Female + speaker: dinah_hecat + id: DinahHecat + +- type: ttsBorgVoice + name: tts-voice-name-aesop-sharp + sex: Male + speaker: aesop_sharp + id: AesopSharp + +- type: ttsBorgVoice + name: tts-voice-name-abraham-ronen + sex: Male + speaker: abraham_ronen + id: AbrahamRonen + +- type: ttsBorgVoice + name: tts-voice-name-samantha-dale + sex: Female + speaker: samantha_dale + id: SamanthaDale + +- type: ttsBorgVoice + name: tts-voice-name-sirona-ryan + sex: Female + speaker: sirona_ryan + id: SironaRyan + +- type: ttsBorgVoice + name: tts-voice-name-sophronia-franklin + sex: Female + speaker: sophronia_franklin + id: SophroniaFranklin + +- type: ttsBorgVoice + name: tts-voice-name-mister-handy-fl3 + sex: Male + speaker: mister_handy_fl3 + id: MisterHandyFl3 + +- type: ttsBorgVoice + name: tts-voice-name-mister-gutsy-fl3 + sex: Male + speaker: mister_gutsy_fl3 + id: MisterGutsyFl3 + +- type: ttsBorgVoice + name: tts-voice-name-jericho-fl3 + sex: Male + speaker: jericho_fl3 + id: JerichoFl3 + +- type: ttsBorgVoice + name: tts-voice-name-elder-lyons-fl3 + sex: Male + speaker: elder_lyons_fl3 + id: ElderLyonsFl3 + +- type: ttsBorgVoice + name: tts-voice-name-sarah-lyons-fl3 + sex: Female + speaker: sarah_lyons_fl3 + id: SarahLyonsFl3 + +- type: ttsBorgVoice + name: tts-voice-name-kovir-nobleman + sex: Male + speaker: kovir_nobleman + id: KovirNobleman + +- type: ttsBorgVoice + name: tts-voice-name-zoltan-chivay + sex: Male + speaker: zoltan_chivay + id: ZoltanChivay + +- type: ttsBorgVoice + name: tts-voice-name-maiko + sex: Female + speaker: maiko + id: Maiko + +- type: ttsBorgVoice + name: tts-voice-name-brendan + sex: Male + speaker: brendan + id: Brendan + +- type: ttsBorgVoice + name: tts-voice-name-nancy-hartley + sex: Female + speaker: nancy_hartley + id: NancyHartley + +- type: ttsBorgVoice + name: tts-voice-name-oswald-forrest + sex: Male + speaker: oswald_forrest + id: OswaldForrest + +- type: ttsBorgVoice + name: tts-voice-name-steve + sex: Male + speaker: steve + id: Steve +