Jump to content

Recommended Posts

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;
*/

 

 

  • Like 6
  • Thanks 6

Share this post


Link to post
Share on other sites
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!!!

  • Like 3
  • Thanks 1

Share this post


Link to post
Share on other sites
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.  

  • Like 1

Share this post


Link to post
Share on other sites
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.

  • Haha 2

Share this post


Link to post
Share on other sites

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!

  • Like 1

Share this post


Link to post
Share on other sites

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
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.

  • Thanks 1

Share this post


Link to post
Share on other sites

I see the soldier in the demo has the appropriate hat on. That explains his multi-lingual talents.

 

  • Haha 1

Share this post


Link to post
Share on other sites

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",

 

 

  • Like 2
  • Thanks 2

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×