SNAIP_ 2 Posted April 9, 2018 (edited) Hello everyone, first time poster here, although I've been lurking and learning from other experienced community members. I have made a single-player mission which I'm pretty happy about the outcome. An icing on the cake would be to add radio chat between 3 entities - Player, Highway (AI) and Tower (AI). The mission is a carrier operation with 6 tasks - Take-off, Intercept Enemy Fighters, Intercept Enemy Helicopters, Destroy Anti-Air, Destroy Artillery, Land. I have created the text I wish to use in the mission but I simply have no clue how to make it appear after a certain thing has happened f.e when I fire an AMRAAM I want my guy to say "Fox Three" and when a missile hits - "Splash One!". Same thing with a BIM-9X but "Fox Two" instead as that is the correct term since it's an IR missile. List of enemy combatants: 4x To-201 Shikra (Bandit1/2/3/4) 1x CH-49 Mohawk (Condor) 1x WY-55 Hellcat (Vulture) 4x ZSU-39 Tigris (AA1/2/3/4) 3x 2S9 Sochor (SPG1/2/3) I tried compiling a description.ext script (note: I don't have actual sound files yet, I'd appreciate it if I can get an idea what Text-to-Speech I can use to make myself audio files and then convert to .ogg): Spoiler //////////////////////RADIO///////////////////////////// class CfgRadio { sounds[] = {mes1,mes2,mes3,mes4,mes5,mes6,mes7,mes8,mes9,mes10,mes11,mes12,mes13,mes14,mes15,mes16,mes17,mes18,mes19,mes20,mes21,mes22,mes23,mes24,mes25,mes26,mes27,mes28,mes29,mes30,mes31,mes32,mes33,mes34,mes35,mes36,mes37,mes38,mes39,mes40,mes41,mes42,mes43,mes44,mes45,mes46,mes47,mes48,mes49,mes50,mes51,mes52,mes53,mes54,mes55,mes56,mes57,mes58,mes59,mes60,mes61,mes62}; class mes1 { name = "mes1"; sound[] = {"rs\mes1.ogg", db+0, 1.0}; title = "Captain - update."; }; class mes2 { name = "mes2"; sound[] = {"rs\mes2.ogg", db+0, 1.0}; title = "Early-warning radars have 2 pairs of unknown contacts, about 80 klicks north, approaching fast."; }; class mes3 { name = "mes3"; sound[] = {"rs\mes3.ogg", db+0, 1.0}; title = "Potential CSAT strike on our ground assault forces. Get up there and interdict; we are stretched thin and our entire operation would be at risk should they succeed."; }; class mes4 { name = "mes4"; sound[] = {"rs\mes4.ogg", db+0, 1.0}; title = "We already have Eagles in the air, they'll provide assistance."; }; class mes5 { name = "mes5"; sound[] = {"rs\mes5.ogg", db+0, 1.0}; title = "Understood, sir."; }; class mes6 { name = "mes6"; sound[] = {"rs\mes6.ogg", db+0, 1.0}; title = "Let's rock."; }; class mes7 { name = "mes7"; sound[] = {"rs\mes7.ogg", db+0, 1.0}; title = "Highway, this is Eagle-1 flight. Ready on the safe-shots. Over."; }; class mes8 { name = "mes8"; sound[] = {"rs\mes8.ogg", db+0, 1.0}; title = "Eagle 1, you're cleared for take-off."; }; class mes9 { name = "mes9"; sound[] = {"rs\mes9.ogg", db+0, 1.0}; title = "Copy. Out."; }; class mes10 { name = "mes10"; sound[] = {"rs\mes10.ogg", db+0, 1.0}; title = "Eagle 1 in the air."; }; class mes11 { name = "mes11"; sound[] = {"rs\mes11.ogg", db+0, 1.0}; title = "Highway copies. Climb to 600. Head 030. Full throttle to intercept."; }; class mes12 { name = "mes12"; sound[] = {"rs\mes12.ogg", db+0, 1.0}; title = "Eagle 1, radar contact!"; }; class mes13 { name = "mes13"; sound[] = {"rs\mes13.ogg", db+0, 1.0}; title = "Fox Three."; }; class mes14 { name = "mes14"; sound[] = {"rs\mes14.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes15 { name = "mes15"; sound[] = {"rs\mes15.ogg", db+0, 1.0}; title = "Fox Three."; }; class mes16 { name = "mes16"; sound[] = {"rs\mes16.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes17 { name = "mes17"; sound[] = {"rs\mes17.ogg", db+0, 1.0}; title = "Fox Three."; }; class mes18 { name = "mes18"; sound[] = {"rs\mes18.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes19 { name = "mes19"; sound[] = {"rs\mes19.ogg", db+0, 1.0}; title = "Fox Three."; }; class mes20 { name = "mes20"; sound[] = {"rs\mes20.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes21 { name = "mes21"; sound[] = {"rs\mes21.ogg", db+0, 1.0}; title = "Fox Three."; }; class mes22 { name = "mes22"; sound[] = {"rs\mes22.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes23 { name = "mes23"; sound[] = {"rs\mes23.ogg", db+0, 1.0}; title = "Fox Three."; }; class mes24 { name = "mes24"; sound[] = {"rs\mes24.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes25 { name = "mes25"; sound[] = {"rs\mes25.ogg", db+0, 1.0}; title = "Fox Two."; }; class mes26 { name = "mes26"; sound[] = {"rs\mes26.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes27 { name = "mes27"; sound[] = {"rs\mes27.ogg", db+0, 1.0}; title = "Fox Two."; }; class mes28 { name = "mes28"; sound[] = {"rs\mes28.ogg", db+0, 1.0}; title = "Splash one!"; }; class mes29 { name = "mes29"; sound[] = {"rs\mes29.ogg", db+0, 1.0}; title = "All enemy fighters destroyed - skies are clear."; }; class mes30 { name = "mes30"; sound[] = {"rs\mes30.ogg", db+0, 1.0}; title = "Eagle 1, radar picked up 2 contacts approaching from the north-east."; }; class mes31 { name = "mes31"; sound[] = {"rs\mes31.ogg", db+0, 1.0}; title = "They're flying low and heading south-west. Definitely helicopters."; }; class mes32 { name = "mes32"; sound[] = {"rs\mes32.ogg", db+0, 1.0}; title = "Eagle 1, they probably want to deploy troops or drop supplies on the other part of the island."; }; class mes33 { name = "mes33"; sound[] = {"rs\mes33.ogg", db+0, 1.0}; title = "Try to intercept them."; }; class mes34 { name = "mes34"; sound[] = {"rs\mes4.ogg", db+0, 1.0}; title = "Copy that."; }; class mes35 { name = "mes35"; sound[] = {"rs\mes35.ogg", db+0, 1.0}; title = "Eagle 1 to Highway, enemy helos successfully intercepted."; }; class mes36 { name = "mes36"; sound[] = {"rs\mes36.ogg", db+0, 1.0}; title = "Solid copy, Eagle 1."; }; class mes37 { name = "mes37"; sound[] = {"rs\mes37.ogg", db+0, 1.0}; title = "Eagle 1, tasking - JTAC on the ground have eyes on enemy AA positions and are being lased right now."; }; class mes38 { name = "mes38"; sound[] = {"rs\mes38.ogg", db+0, 1.0}; title = "Take them out to clear a path for callsigns Bulldog."; }; class mes39 { name = "mes39"; sound[] = {"rs\mes39.ogg", db+0, 1.0}; title = "Eagle 1 copies; climbing to a safe altitude for Laser-Guided Bombing."; }; class mes40 { name = "mes40"; sound[] = {"rs\mes40.ogg", db+0, 1.0}; title = "Bombs away."; }; class mes41 { name = "mes41"; sound[] = {"rs\mes41.ogg", db+0, 1.0}; title = "Bombs away."; }; class mes42 { name = "mes42"; sound[] = {"rs\mes42.ogg", db+0, 1.0}; title = "Bombs away."; }; class mes43 { name = "mes43"; sound[] = {"rs\mes43.ogg", db+0, 1.0}; title = "Bombs away."; }; class mes44 { name = "mes44"; sound[] = {"rs\mes44.ogg", db+0, 1.0}; title = "Direct hit."; }; class mes45 { name = "mes45"; sound[] = {"rs\mes45.ogg", db+0, 1.0}; title = "Direct hit."; }; class mes46 { name = "mes46"; sound[] = {"rs\mes46.ogg", db+0, 1.0}; title = "Direct hit."; }; class mes47 { name = "mes47"; sound[] = {"rs\mes47.ogg", db+0, 1.0}; title = "Direct hit."; }; class mes48 { name = "mes48"; sound[] = {"rs\mes48.ogg", db+0, 1.0}; title = "Highway, this is Eagle 1; all enemy AA positions have been neutralized. Over."; }; class mes49 { name = "mes49"; sound[] = {"rs\mes49.ogg", db+0, 1.0}; title = "Highway copies; Eagle 1, tasking - we have located enemy artillery. Neutralize them, how copy?"; }; class mes50 { name = "mes50"; sound[] = {"rs\mes50.ogg", db+0, 1.0}; title = "Eagle 1, solid copy."; }; class mes51 { name = "mes51"; sound[] = {"rs\mes51.ogg", db+0, 1.0}; title = "Rifle."; }; class mes52 { name = "mes52"; sound[] = {"rs\mes52.ogg", db+0, 1.0}; title = "Shack!"; }; class mes53 { name = "mes53"; sound[] = {"rs\mes53.ogg", db+0, 1.0}; title = "Rifle."; }; class mes54 { name = "mes54"; sound[] = {"rs\mes54.ogg", db+0, 1.0}; title = "Shack!"; }; class mes55 { name = "mes55"; sound[] = {"rs\mes55.ogg", db+0, 1.0}; title = "Rifle."; }; class mes56 { name = "mes56"; sound[] = {"rs\mes56.ogg", db+0, 1.0}; title = "Shack!"; }; class mes57 { name = "mes57"; sound[] = {"rs\mes57.ogg", db+0, 1.0}; title = "Eagle 1, all enemy armor neutralized. Over."; }; class mes58 { name = "mes58"; sound[] = {"rs\mes58.ogg", db+0, 1.0}; title = "Solid work, Eagle 1 - come on home."; }; class mes59 { name = "mes59"; sound[] = {"rs\mes59.ogg", db+0, 1.0}; title = "Highway, Eagle 1 on approach. Request landing. Over."; }; class mes60 { name = "mes60"; sound[] = {"rs\mes60.ogg", db+0, 1.0}; title = "Affirmative, Eagle 1. Your signal's Delta."; }; class mes61 { name = "mes61"; sound[] = {"rs\mes61.ogg", db+0, 1.0}; title = "Right on the ball. Bring her down."; }; class mes62 { name = "mes62"; sound[] = {"rs\mes62.ogg", db+0, 1.0}; title = "Bringing her down."; }; }; And a radio.sqf script Spoiler Highway sideRadio "mes1"; Sleep 4; Highway sideRadio "mes2"; Sleep 4; Highway sideRadio "mes3"; Sleep 4; Highway sideRadio "mes4"; Sleep 4; Player1 sideRadio "mes5"; Sleep 4; Player1 sideRadio "mes6"; Sleep 4; Player1 sideRadio "mes7"; Sleep 4; Highway sideRadio "mes8"; Sleep 4; Player1 sideRadio "mes9"; Sleep 4; Player1 sideRadio "mes10"; Sleep 4; Highway sideRadio "mes11"; Sleep 4; Player1 sideRadio "mes12"; Sleep 4; Player1 sideRadio "mes13"; Sleep 4; Player1 sideRadio "mes14"; Sleep 4; Player1 sideRadio "mes15"; Sleep 4; Player1 sideRadio "mes16"; Sleep 4; Player1 sideRadio "mes17"; Sleep 4; Player1 sideRadio "mes18"; Sleep 4; Player1 sideRadio "mes19"; Sleep 4; Player1 sideRadio "mes20"; Sleep 4; Player1 sideRadio "mes21"; Sleep 4; Player1 sideRadio "mes22"; Sleep 4; Player1 sideRadio "mes23"; Sleep 4; Player1 sideRadio "mes24"; Sleep 4; Player1 sideRadio "mes25"; Sleep 4; Player1 sideRadio "mes26"; Sleep 4; Player1 sideRadio "mes27"; Sleep 4; Player1 sideRadio "mes28"; Sleep 4; Player1 sideRadio "mes29"; Sleep 4; Tower sideRadio "mes30"; Sleep 4; Tower sideRadio "mes31"; Sleep 4; Highway sideRadio "mes32"; Sleep 4; Highway sideRadio "mes33"; Sleep 4; Player1 sideRadio "mes34"; Sleep 4; Player1 sideRadio "mes35"; Sleep 4; Highway sideRadio "mes36"; Sleep 2; Highway sideRadio "mes37"; Sleep 4; Highway sideRadio "mes38"; Sleep 4; Player1 sideRadio "mes39"; Sleep 4; Player1 sideRadio "mes40"; Sleep 4; Player1 sideRadio "mes41"; Sleep 4; Player1 sideRadio "mes42"; Sleep 4; Player1 sideRadio "mes43"; Sleep 4; Player1 sideRadio "mes44"; Sleep 4; Player1 sideRadio "mes45"; Sleep 4; Player1 sideRadio "mes46"; Sleep 4; Player1 sideRadio "mes47"; Sleep 4; Player1 sideRadio "mes48"; Sleep 4; Highway sideRadio "mes49"; Sleep 4; Player1 sideRadio "mes50"; Sleep 4; Player1 sideRadio "mes51"; Sleep 4; Player1 sideRadio "mes52"; Sleep 4; Player1 sideRadio "mes53"; Sleep 4; Player1 sideRadio "mes54"; Sleep 4; Player1 sideRadio "mes55"; Sleep 4; Player1 sideRadio "mes56"; Sleep 4; Player1 sideRadio "mes57"; Sleep 4; Highway sideRadio "mes58"; Sleep 4; Player1 sideRadio "mes59"; Sleep 4; Highway sideRadio "mes60"; Sleep 4; Highway sideRadio "mes61"; Sleep 4; Player1 sideRadio "mes62"; Sleep 4; "Sleep 4" is short, it's a placeholder. I hope you can understand my query. Sorry for this really long post, TLDR: I need to have radio chat to be activated after doing a certain thing. Edited April 9, 2018 by SNAIP_ Changed the scripts from Quotes to Spoilers to spare people's scrollwheels as suggested Share this post Link to post Share on other sites
Harzach 2517 Posted April 9, 2018 First, welcome! Second, it's best practice to wrap large code blocks in "spoiler" tags. Everyone's scroll wheels will thank you. Third, there's no one simple answer, obviously, and I'm sure you realize this. You'll probably need to handle each radio event on a case-by-case basis. The FOX calls will probably involve a "fired" eventHandler, the splash calls either an alive check on the target or a "killed" eventHandler, etc. https://community.bistudio.com/wiki/Arma_3:_Event_Handlers That's all I have at the moment, but there are plenty of far more knowledgeable and helpful folks here that will be by shortly I'm sure. Share this post Link to post Share on other sites
SNAIP_ 2 Posted April 9, 2018 36 minutes ago, Harzach said: First, welcome! Second, it's best practice to wrap large code blocks in "spoiler" tags. Everyone's scroll wheels will thank you. Third, there's no one simple answer, obviously, and I'm sure you realize this. You'll probably need to handle each radio event on a case-by-case basis. The FOX calls will probably involve a "fired" eventHandler, the splash calls either an alive check on the target or a "killed" eventHandler, etc. https://community.bistudio.com/wiki/Arma_3:_Event_Handlers That's all I have at the moment, but there are plenty of far more knowledgeable and helpful folks here that will be by shortly I'm sure. Thank you so much for the quick response! First time I actually hear about Event Handlers and their possibilities are vast! I also edited the OP to spare the scrollwheels :D Share this post Link to post Share on other sites
major-stiffy 279 Posted April 10, 2018 18 hours ago, SNAIP_ said: I tried compiling a description.ext script (note: I don't have actual sound files yet, I'd appreciate it if I can get an idea what Text-to-Speech I can use to make myself audio files and then convert to .ogg): Audacity. Free open source. Use mic to speak text and can save as ogg. It’s not text to speech but it’s an idea. Share this post Link to post Share on other sites
SNAIP_ 2 Posted April 11, 2018 On 4/10/2018 at 6:25 PM, major-stiffy said: Audacity. Free open source. Use mic to speak text and can save as ogg. It’s not text to speech but it’s an idea. I don't mind doing the talking myself but I'm not a native English speaker, I'd probably rather have a bot do it for me. Must not forget there are 3 speakers who need to sound different. Share this post Link to post Share on other sites
Harzach 2517 Posted April 11, 2018 Never tried it, but just found this: https://www.naturalreaders.com/online/ The free version gives you 20 minutes per day, but I'm not sure if that means 20 minutes of audio or 20 minutes of use? Still, if you compile all of your lines into one text file (or three, one for each voice), you could do it all in one go then edit it into individual files. As @major-stiffy recommended, Audacity is good for this (also free!) and will convert to .ogg as well. Keep in mind that text-to-speech doesn't understand context or acronyms, so you'll need to give it phonetic spellings for certain things. For example, you might want to change "CSAT" to "see sat" in the script you provide it. 2 Share this post Link to post Share on other sites