johnnyboy 3793 Posted October 28, 2019 This script allows scripters to re-use all the voice command phrases in Arma. This is especially useful for AI type mods where scripts are making AI perform tasks, and you want to hear the audible commande like "Move Up", "Set Charge", "Detonate Charge", "Frag out", etc. Features: Unit's ingame language is used (i.e., English, French, Russian, Persian, etc). Sound file may be played loud or soft depending on unit's current behavior (Normal, Combat, Stealth) Lip animation Download sample Mission: Here. Credit: @Larrow for his badass utility for finding sound file paths. Use this tool to find additional sound paths to add to this script. If you add more paths to this script, please post them in this topic, so I can add them to my script. Boring Video of Demo Spoiler Sample init.sqf script from mission showing how to call the script: Spoiler JBOY_Speak = compile preprocessFileLineNumbers "JBOY\JBOY_Speak.sqf"; JBOY_PainGrunt = compile preprocessFileLineNumbers "JBOY\JBOY_PainGrunt.sqf"; JBOY_Lip = compile preprocessFileLineNumbers "JBOY\JBOY_Lip.sqf"; _n = [dude] spawn { sleep 3; params["_dude"]; //_voices = ['Male01ENG','Male01RUS','Male01POL','Male01ENGB','Male01ENGFRE','Male01FRE','Male01CHI','Male01PER','Male01GRE']; _voices = ['Male01ENGB','Male01RUS','Male01POL','Male01FRE','Male01CHI','Male01PER']; _phrases = [ ["moveUp_1","moveUp_2","advance"], ["Confirmation1_9","Confirmation2_10"], ["CeaseFire_1","CeaseFire_2"], ["OpenThatDoor"], ["SetCharge"], ["DetonateCharge","ThrowingGrenadeE_1"], ["Stop","Halt"], ["CheeringE_1","CheeringE_2","CheeringE_3"], ["ReloadingE_1","ReloadingE_3"], ["HealthWounded","HealthSomebodyHelpMe","HealthIAmBadlyHurt"] ]; { _phraseArray = _x; { _dude setSpeaker _x; [_dude,selectRandom _phraseArray] call JBOY_Speak; sleep 2.3; } foreach _voices; } foreach _phrases; }; /* ...more phrase sets for reference ["EndangeredE_3","EndangeredE_2","EndangeredE_3"], ["AreaClear","Clear"], ["GoProne_1","GoProne_2","TakeCover"], ["AwaitingOrders","ReadyForOrders"], ["Engage_1","Engage_2"], ["CombatOpenFire_4","Attack_1"], ["FormOnMe","RallyUp","OnTheWay_1","OnTheWay_1"], */ The JBOY_Speak script (so you don't have to download demo mission to see it) Spoiler //JBOY_StackSpeak.sqf // [player, "Halt"] call JBOY_StackSpeak; if (!isServer) exitwith {}; params["_unit","_soundFileName"]; if (isNull _unit or !alive _unit) exitWith {}; // If only one guy in stack, then don't say anything. Except swearing/grunting when hit by a nade. if (!(_unit getVariable ["JBOY_chatterOn",true]) and _soundfileName find "Endangered" < 0 and _soundfileName != "Grunt") exitWith {}; if (_soundFileName == "Grunt") then { [_unit] call JBOY_PainGrunt; // Randomly play 1 of a 100 pain grunts, and exit this script } else { _speaker = ""; if (isNull _unit) exitwith {}; _speaker = speaker _unit; //if (isNil _speaker) exitWith{}; _behaviour = behaviour _unit; if (["CARELESS","AWARE"] find _behaviour >= 0) then {_behaviour = "NORMAL";}; // No sound file path exists for "CARELESS","AWARE" //_behaviour = "STEALTH"; _s = format["JBOY_Speak: No match found for _soundFileName %1",_soundFileName]; _lastSubDir = "100_Commands"; // most stack related commands are in this subdirectory switch (true) do { case (_soundFileName find "Sitrep" >= 0):{_lastSubDir = "120_Com_Ask"; }; case (_soundFileName find "Confirmation" >= 0):{_lastSubDir = "130_Com_Reply"; }; case (_soundFileName find "OnTheWay_1" >= 0):{_lastSubDir = "130_Com_Reply"; }; case (_soundFileName find "Engage" >= 0):{_lastSubDir = "015_Targeting"; }; case (_soundFileName find "Attack" >= 0):{_lastSubDir = "015_Targeting"; }; case (_soundFileName find "CancelTarget" >= 0):{_lastSubDir = "015_Targeting"; }; case (_soundFileName find "moveUp" >= 0):{_lastSubDir = "070_MoveDirectionRelative1"; }; case (_soundFileName find "moveBack" >= 0):{_lastSubDir = "070_MoveDirectionRelative1"; }; case (_soundFileName find "Team" >= 0):{_lastSubDir = "030_Teams"; }; // redTeam, blueTeam, greenTeam, yellowTeam, whiteTeam case (_soundFileName find "TakingCommand" >= 0):{_lastSubDir = "110_Com_Announce"; _behaviour = "Normal";}; case (_soundFileName find "AwaitingOrders" >= 0):{_lastSubDir = "110_Com_Announce"; _behaviour = "Normal";}; case (_soundFileName find "ReadyForOrders" >= 0):{_lastSubDir = "110_Com_Announce"; _behaviour = "Normal";}; case (_soundFileName find "Health" >= 0):{_lastSubDir = "140_Com_Status"; _behaviour = "Normal";}; case (_soundFileName find "HeIs" >= 0):{_lastSubDir = "140_Com_Status"; _behaviour = "Normal";}; case (_soundFileName find "CriticalDamage" >= 0):{_lastSubDir = "140_Com_Status"; _behaviour = "Normal";}; case (_soundFileName find "CombatGeneric" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "UnderFire" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Witness" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "ThrowingGrenadeE_1" >= 0):{ _behaviour = "Stealth";}; // Fire in the hole! case (_soundFileName find "Throwing" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "IncomingGren" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Reloading" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Screaming" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Cheering" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Endangered" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; //EndangeredE_1 case (_soundFileName find "SetCharge" >= 0):{ _behaviour = "Stealth";}; case (_soundFileName find "DetonateCharge" >= 0):{ _behaviour = "Stealth";}; case (_soundFileName find "OpenThatDoor" >= 0):{ _behaviour = "Stealth";}; // //case (_soundFileName find "SetCharge" >= 0):{_lastSubDir = "015_Targeting"; }; }; switch (alive _unit) do { // hardcoded sounds for certain languages and sounds case (_speaker find "eng" >= 0 and _soundFileName == 'Clear'): {_s = "a3\dubbing_f_bootcamp\boot_m04\85_All_Clear\boot_m04_85_all_clear_LAC_0.ogg";}; // sounds per language case (_speaker find "pervr" >= 0): {_s = "A3\Dubbing_Radio_F\data\VR\"+_speaker+"\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "grevr" >= 0): {_s = "A3\Dubbing_Radio_F\data\VR\"+_speaker+"\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "engvr" >= 0): {_s = "A3\Dubbing_Radio_F\data\VR\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "engb" >= 0): {_s = "A3\Dubbing_Radio_F\data\ENGB\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "engfre" >= 0): {_s = "A3\Dubbing_Radio_F_EXP\data\ENGFRE\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "eng" >= 0): {_s = "A3\Dubbing_Radio_F\data\ENG\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "gre" >= 0): {_s = "A3\Dubbing_Radio_F\data\GRE\"+_speaker+"\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "per" >= 0): {_s = "A3\Dubbing_Radio_F\data\PER\"+_speaker+"\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "fre" >= 0): {_s = "A3\Dubbing_Radio_F_EXP\data\FRE\"+_speaker+"\RadioProtocolFRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "chi" >= 0): {_s = "A3\Dubbing_Radio_F_EXP\data\CHI\"+_speaker+"\RadioProtocolCHI\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "pol" >= 0): {_s = "A3\Dubbing_Radio_F_Enoch\data\POL\"+_speaker+"\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "rus" >= 0): {_s = "A3\Dubbing_Radio_F_Enoch\data\RUS\"+_speaker+"\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; //playSound3d["A3\Dubbing_Radio_F_Enoch\data\RUS\Male01RUS\Combat\200_CombatShouts\CombatGenericE_1.ogg",player]; }; if (!isNull _unit and alive _unit) then { playSound3D [_s, _unit]; [_unit, 1] call JBOY_Lip; //[_s, _unit] remoteExec ["playSound3D",-2]; }; }; /* Sample calls [_unit, selectRandom ["IncomingGrenadeE_1","IncomingGrenadeE_2","IncomingGrenadeE_3","TakeCover"]] call JBOY_StackSpeak; // if ai spots incoming grenade [_unit,selectRandom ["EndangeredE_1","EndangeredE_2","EndangeredE_3","Grunt","Grunt","Grunt"]] call JBOY_StackSpeak; // react after grenade explodes [_unit,selectRandom ["moveUp_1","moveUp_2","advance"]] call JBOY_StackSpeak; [player,selectRandom ["moveBack_1","moveBack_2"]] call JBOY_StackSpeak; [_leader, selectRandom ["FormOnMe","RallyUp"]] call JBOY_StackSpeak; [_unit, selectRandom ["AwaitingOrders","ReadyForOrders"]] call JBOY_StackSpeak; [player,selectRandom ["CombatOpenFire_4","Attack_1"]] call JBOY_StackSpeak; [_unit,selectRandom ["Stop","Halt"]] call JBOY_StackSpeak; [_unit, selectRandom ["GoProne_1","GoProne_2","TakeCover"]] call JBOY_StackSpeak; [selectRandom _stackMembers,selectRandom ["CheeringE_1","CheeringE_2","CheeringE_3"]] call JBOY_StackSpeak; */ 6 6 Share this post Link to post Share on other sites
zagor64bz 1225 Posted October 28, 2019 15 minutes ago, johnnyboy said: This script allows scripters to re-use all the voice command phrases in Arma. This is especially useful for AI type mods where scripts are making AI perform tasks, and you want to hear the audible commande like "Move Up", "Set Charge", "Detonate Charge", "Frag out", etc. Features: Unit's ingame language is used (i.e., English, French, Russian, Persian, etc). Sound file may be played loud or soft depending on behaviour (Normal, Combat, Stealth) Lip animation Download Mission: Here. Credit: @Larrow for his badass utility for finding sound file paths. Use this tool to find additional sound paths to add to this script. If you add more paths to this script, please post them in this topic, so I can add them to my script. Boring Video of Demo Reveal hidden contents Sample init.sqf script from mission showing how to call the script: Reveal hidden contents JBOY_Speak = compile preprocessFileLineNumbers "JBOY\JBOY_Speak.sqf"; JBOY_PainGrunt = compile preprocessFileLineNumbers "JBOY\JBOY_PainGrunt.sqf"; JBOY_Lip = compile preprocessFileLineNumbers "JBOY\JBOY_Lip.sqf"; _n = [dude] spawn { sleep 3; params["_dude"]; //_voices = ['Male01ENG','Male01RUS','Male01POL','Male01ENGB','Male01ENGFRE','Male01FRE','Male01CHI','Male01PER','Male01GRE']; _voices = ['Male01ENGB','Male01RUS','Male01POL','Male01FRE','Male01CHI','Male01PER']; _phrases = [ ["moveUp_1","moveUp_2","advance"], ["Confirmation1_9","Confirmation2_10"], ["CeaseFire_1","CeaseFire_2"], ["OpenThatDoor"], ["SetCharge"], ["DetonateCharge","ThrowingGrenadeE_1"], ["Stop","Halt"], ["CheeringE_1","CheeringE_2","CheeringE_3"], ["ReloadingE_1","ReloadingE_3"], ["HealthWounded","HealthSomebodyHelpMe","HealthIAmBadlyHurt"] ]; { _phraseArray = _x; { _dude setSpeaker _x; [_dude,selectRandom _phraseArray] call JBOY_Speak; sleep 2.3; } foreach _voices; } foreach _phrases; }; /* ...more phrase sets for reference ["EndangeredE_3","EndangeredE_2","EndangeredE_3"], ["AreaClear","Clear"], ["GoProne_1","GoProne_2","TakeCover"], ["AwaitingOrders","ReadyForOrders"], ["Engage_1","Engage_2"], ["CombatOpenFire_4","Attack_1"], ["FormOnMe","RallyUp","OnTheWay_1","OnTheWay_1"], */ The JBOY_Speak script (so you don't have to download demo mission to see it) Reveal hidden contents //JBOY_StackSpeak.sqf // [player, "Halt"] call JBOY_StackSpeak; if (!isServer) exitwith {}; params["_unit","_soundFileName"]; if (isNull _unit or !alive _unit) exitWith {}; // If only one guy in stack, then don't say anything. Except swearing/grunting when hit by a nade. if (!(_unit getVariable ["JBOY_chatterOn",true]) and _soundfileName find "Endangered" < 0 and _soundfileName != "Grunt") exitWith {}; if (_soundFileName == "Grunt") then { [_unit] call JBOY_PainGrunt; // Randomly play 1 of a 100 pain grunts, and exit this script } else { _speaker = ""; if (isNull _unit) exitwith {}; _speaker = speaker _unit; //if (isNil _speaker) exitWith{}; _behaviour = behaviour _unit; if (["CARELESS","AWARE"] find _behaviour >= 0) then {_behaviour = "NORMAL";}; // No sound file path exists for "CARELESS","AWARE" //_behaviour = "STEALTH"; _s = format["JBOY_Speak: No match found for _soundFileName %1",_soundFileName]; _lastSubDir = "100_Commands"; // most stack related commands are in this subdirectory switch (true) do { case (_soundFileName find "Sitrep" >= 0):{_lastSubDir = "120_Com_Ask"; }; case (_soundFileName find "Confirmation" >= 0):{_lastSubDir = "130_Com_Reply"; }; case (_soundFileName find "OnTheWay_1" >= 0):{_lastSubDir = "130_Com_Reply"; }; case (_soundFileName find "Engage" >= 0):{_lastSubDir = "015_Targeting"; }; case (_soundFileName find "Attack" >= 0):{_lastSubDir = "015_Targeting"; }; case (_soundFileName find "CancelTarget" >= 0):{_lastSubDir = "015_Targeting"; }; case (_soundFileName find "moveUp" >= 0):{_lastSubDir = "070_MoveDirectionRelative1"; }; case (_soundFileName find "moveBack" >= 0):{_lastSubDir = "070_MoveDirectionRelative1"; }; case (_soundFileName find "Team" >= 0):{_lastSubDir = "030_Teams"; }; // redTeam, blueTeam, greenTeam, yellowTeam, whiteTeam case (_soundFileName find "TakingCommand" >= 0):{_lastSubDir = "110_Com_Announce"; _behaviour = "Normal";}; case (_soundFileName find "AwaitingOrders" >= 0):{_lastSubDir = "110_Com_Announce"; _behaviour = "Normal";}; case (_soundFileName find "ReadyForOrders" >= 0):{_lastSubDir = "110_Com_Announce"; _behaviour = "Normal";}; case (_soundFileName find "Health" >= 0):{_lastSubDir = "140_Com_Status"; _behaviour = "Normal";}; case (_soundFileName find "HeIs" >= 0):{_lastSubDir = "140_Com_Status"; _behaviour = "Normal";}; case (_soundFileName find "CriticalDamage" >= 0):{_lastSubDir = "140_Com_Status"; _behaviour = "Normal";}; case (_soundFileName find "CombatGeneric" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "UnderFire" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Witness" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "ThrowingGrenadeE_1" >= 0):{ _behaviour = "Stealth";}; // Fire in the hole! case (_soundFileName find "Throwing" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "IncomingGren" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Reloading" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Screaming" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Cheering" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; case (_soundFileName find "Endangered" >= 0):{_lastSubDir = "200_CombatShouts"; _behaviour = "COMBAT";}; //EndangeredE_1 case (_soundFileName find "SetCharge" >= 0):{ _behaviour = "Stealth";}; case (_soundFileName find "DetonateCharge" >= 0):{ _behaviour = "Stealth";}; case (_soundFileName find "OpenThatDoor" >= 0):{ _behaviour = "Stealth";}; // //case (_soundFileName find "SetCharge" >= 0):{_lastSubDir = "015_Targeting"; }; }; switch (alive _unit) do { // hardcoded sounds for certain languages and sounds case (_speaker find "eng" >= 0 and _soundFileName == 'Clear'): {_s = "a3\dubbing_f_bootcamp\boot_m04\85_All_Clear\boot_m04_85_all_clear_LAC_0.ogg";}; // sounds per language case (_speaker find "pervr" >= 0): {_s = "A3\Dubbing_Radio_F\data\VR\"+_speaker+"\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "grevr" >= 0): {_s = "A3\Dubbing_Radio_F\data\VR\"+_speaker+"\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "engvr" >= 0): {_s = "A3\Dubbing_Radio_F\data\VR\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "engb" >= 0): {_s = "A3\Dubbing_Radio_F\data\ENGB\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "engfre" >= 0): {_s = "A3\Dubbing_Radio_F_EXP\data\ENGFRE\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "eng" >= 0): {_s = "A3\Dubbing_Radio_F\data\ENG\"+_speaker+"\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "gre" >= 0): {_s = "A3\Dubbing_Radio_F\data\GRE\"+_speaker+"\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "per" >= 0): {_s = "A3\Dubbing_Radio_F\data\PER\"+_speaker+"\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "fre" >= 0): {_s = "A3\Dubbing_Radio_F_EXP\data\FRE\"+_speaker+"\RadioProtocolFRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "chi" >= 0): {_s = "A3\Dubbing_Radio_F_EXP\data\CHI\"+_speaker+"\RadioProtocolCHI\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "pol" >= 0): {_s = "A3\Dubbing_Radio_F_Enoch\data\POL\"+_speaker+"\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; case (_speaker find "rus" >= 0): {_s = "A3\Dubbing_Radio_F_Enoch\data\RUS\"+_speaker+"\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";}; //playSound3d["A3\Dubbing_Radio_F_Enoch\data\RUS\Male01RUS\Combat\200_CombatShouts\CombatGenericE_1.ogg",player]; }; if (!isNull _unit and alive _unit) then { playSound3D [_s, _unit]; [_unit, 1] call JBOY_Lip; //[_s, _unit] remoteExec ["playSound3D",-2]; }; }; /* Sample calls [_unit, selectRandom ["IncomingGrenadeE_1","IncomingGrenadeE_2","IncomingGrenadeE_3","TakeCover"]] call JBOY_StackSpeak; // if ai spots incoming grenade [_unit,selectRandom ["EndangeredE_1","EndangeredE_2","EndangeredE_3","Grunt","Grunt","Grunt"]] call JBOY_StackSpeak; // react after grenade explodes [_unit,selectRandom ["moveUp_1","moveUp_2","advance"]] call JBOY_StackSpeak; [player,selectRandom ["moveBack_1","moveBack_2"]] call JBOY_StackSpeak; [_leader, selectRandom ["FormOnMe","RallyUp"]] call JBOY_StackSpeak; [_unit, selectRandom ["AwaitingOrders","ReadyForOrders"]] call JBOY_StackSpeak; [player,selectRandom ["CombatOpenFire_4","Attack_1"]] call JBOY_StackSpeak; [_unit,selectRandom ["Stop","Halt"]] call JBOY_StackSpeak; [_unit, selectRandom ["GoProne_1","GoProne_2","TakeCover"]] call JBOY_StackSpeak; [selectRandom _stackMembers,selectRandom ["CheeringE_1","CheeringE_2","CheeringE_3"]] call JBOY_StackSpeak; */ Ok man...I know you're getting better with your wrist and whatnot, BUT take it easy, bud!!!🤣 You're cooking up (pun intended..LOL) scripts like there's no tomorrow. Geez...give us time to digest the previous one!!!..HAHAHA HAHAHA Seriously now, THIS is very, VERY useful...especially to me, which when I build missions I'm always looking for ways to trow in funny moments and small details to get the immersion meter higher. THANK YOU A LOT,MAN!!! 3 1 Share this post Link to post Share on other sites
johnnyboy 3793 Posted October 28, 2019 21 minutes ago, zagor64bz said: Seriously now, THIS is very, VERY useful...especially to me, which when I build missions I'm always looking for ways to trow in funny moments and small details to get the immersion meter higher. THANK YOU A LOT,MAN!!! Thanks Mister Zagor. As you say, its great for those funny details and immersion. 1 Share this post Link to post Share on other sites
zagor64bz 1225 Posted October 28, 2019 10 minutes ago, johnnyboy said: Thanks Mister Zagor. Mister? No need to be that formal, bud. If that is a way to remark that I'm an old farty brain...well..you got that right, pal!!! hahahahahaha keep up the good work, man. 2 Share this post Link to post Share on other sites
LSValmont 789 Posted October 29, 2019 Very clean and sleek code @johnnyboy! A much needed script since there is nothing like this and missions will get such a huge immersion boost from this! 1 Share this post Link to post Share on other sites
AZCoder 921 Posted November 25, 2019 Am I the only one to try the demo mission? It won't load, requires Ravage mod. Just sayin'. Share this post Link to post Share on other sites
johnnyboy 3793 Posted November 28, 2019 On 11/24/2019 at 7:39 PM, AZCoder said: Am I the only one to try the demo mission? It won't load, requires Ravage mod. Just sayin'. Fixed link to demo mission in top post so no longer requires any addons. Thanks AZ for pointing this out. 1 Share this post Link to post Share on other sites
AZCoder 921 Posted December 1, 2019 I see the soldier in the demo has the appropriate hat on. That explains his multi-lingual talents. 1 Share this post Link to post Share on other sites
johnnyboy 3793 Posted June 7, 2020 Updated script in demo mission to include voice files for: directions "One O'Clock" through "Twelve O'Clock" unit and vehicle types (like "Sniper!", "Machine Gunner!", "APC", "Tank", etc. vehicle weapon ammo types ("Machine Gun", "Cannon", "Rockets", "Sabot", "Heat", etc.) Example calls: Spoiler // clock directions [player, "at11_1"] call JBOY_Speak; // 1 O'clock [player, "at11_1"] call JBOY_Speak; // 11 O'clock [player, "at12_1"] call JBOY_Speak; // 12 O'clock // vehicle ammo type (heat, sabot, rockets, flares, cannon, etc.) [player, "heat"] call JBOY_Speak; // 12 O'clock // infantry type or vehicle type [player, "veh_infantry_MG_s"] call JBOY_Speak; // Machine Gunner! [player, "veh_vehicle_tank_s"] call JBOY_Speak; // Tank! // List of infantry types and vehicle type voice file parameters supported: "veh_unknown_s", "veh_infantry_s", "veh_infantry_AT_s", "veh_infantry_MG_s", "veh_infantry_Sniper_s", "veh_infantry_officer_s", "veh_infantry_SF_s", "veh_infantry_pilot_s", "veh_infantry_civilian_s", "veh_vehicle_s", "veh_vehicle_car_s", "veh_vehicle_armedcar_s", "veh_vehicle_truck_s", "veh_vehicle_armor_s", "veh_vehicle_APC_s", "veh_vehicle_tank_s", "veh_air_s", "veh_air_helicopter_s", "veh_air_gunship_s", "veh_air_plane_s", "veh_air_parachute_s", "veh_ship_s", "veh_ship_boat_s", "veh_ship_attackBoat_s", "veh_ship_submarine_s", "veh_static_s", "veh_Static_MG_s", "veh_static_AA_s", "veh_static_AT_s", "veh_Static_mortar_s", "veh_static_GL_s", "veh_static_cannon_s", "veh_infantry_AA_s", "veh_infantry_medic_s", "veh_infantry_diver_s", "veh_vehicle_ugv_s", "veh_vehicle_mrap_s", "veh_air_uav_s", 2 2 Share this post Link to post Share on other sites
LSValmont 789 Posted June 8, 2020 An already unique tool made perfect. Thank you @johnnyboy! 1 Share this post Link to post Share on other sites