Rydygier

Rydygier's Trivia Vault

41 posts in this topic

RYDYGIER'S TRIVIA VAULT
a shelter for homeless mods

 

 

Through last year I scattered here and there small side projects, too small for separate threads. But recently realized, for certain, practical reasons I should gather all of them in the one, common place, where those trifles could be discussed, updates announced etc. So here it is, central hub, a shelter for all of them.

 

 

1. Bigger Trunks

images?q=tbn:ANd9GcRxgDMadFzBU-GpU2pqGd8

 

For those, who want to stash in the A3's vehicles more, than their default trunks could hold. With this trunks become much roomier, still proportional to the kind of vehicle. In the reasonable limits of course.

 

Source code:

Spoiler

Config.cpp



class CfgPatches
	{
	class RYD_BT
		{
		units[] = {};
		weapons[] = {};
		requiredVersion = 1.0;
		requiredAddons[] = {"A3_Boat_F","A3_armor_f_beta","A3_Air_F","A3_Air_F_Heli_Light_01","A3_Air_F_Heli_Light_02","A3_Air_F_Beta_Heli_Transport_01","A3_Air_F_Beta_Heli_Transport_02","A3_Air_F_EPB_Heli_Light_03","A3_Soft_F","A3_Soft_F_Quadbike","A3_Soft_F_Offroad_01","A3_Soft_F_MRAP_01","A3_Soft_F_MRAP_02","A3_Soft_F_MRAP_03","A3_Soft_F_HEMTT","A3_Soft_F_TruckHeavy","A3_Soft_F_EPC_Truck_03","A3_Soft_F_Car","A3_Soft_F_SUV","A3_Soft_F_Truck"};
		};
	};
	
class CfgVehicles
	{
	class Helicopter;
	class Tank;
	class Car;
	class Ship_F;
	
	class Car_F: Car
		{
		maximumLoad = 10000;
		};
		
	class Offroad_01_base_F: Car_F
		{
		maximumLoad = 15000;
		};
		
	class Wheeled_APC_F: Car_F
		{
		maximumLoad = 30000;
		};
		
	class Truck_F: Car_F
		{
		maximumLoad = 300000;
		};
		
	class Truck_02_base_F: Truck_F
		{
		maximumLoad = 200000;
		};
		
	class Van_01_base_F: Truck_F
		{
		maximumLoad = 100000;
		};
			
	class MRAP_01_base_F: Car_F
		{
		maximumLoad = 20000;
		};	
	
	class MRAP_02_base_F: Car_F
		{
		maximumLoad = 20000;
		};

	class MRAP_03_base_F: Car_F
		{
		maximumLoad = 20000;
		};
		
	class Quadbike_01_base_F : Car_F
		{
		maximumLoad = 3000;
		};
		
	class Tank_F: Tank
		{
		maximumLoad = 15000;
		};
		
	class Boat_F: Ship_F
		{
		maximumLoad = 5000;
		};
		
	class Helicopter_Base_F : Helicopter
		{
		maximumLoad = 20000;
		};
		
	class Helicopter_Base_H : Helicopter_Base_F
		{
		maximumLoad = 20000;
		};
		
		
	class I_Heli_light_03_base_F: Helicopter_Base_F
		{
		maximumLoad = 10000;
		};
		
	class Heli_Light_01_base_F: Helicopter_Base_H
		{
		maximumLoad = 10000;
		};
		
	class Heli_Light_02_base_F: Helicopter_Base_H
		{
		maximumLoad = 10000;
		};
		
	class Heli_Transport_01_base_F: Helicopter_Base_H
		{
		maximumLoad = 40000;
		};
		
	class Heli_Transport_02_base_F: Helicopter_Base_H
		{
		maximumLoad = 40000;
		};
	};

 


 

2. Liability Insurance

images?q=tbn:ANd9GcQ8eKzpepMoWXdMV6Q_0zm

 

Although hopefully driving AI will be fixed any decade, till then here is LI, workaround for the problem of vehicles ramming to death allied infantry, especially along the roads. They will still ramming allied infantry, sadly, but thanks to LI not to death. Units are now immune to damage caused by not hostile vehicle collisions.

Not really my idea, I just put things together.

Source code:

 

Spoiler

config.cpp


class CfgPatches  
	{ 
	class RYD_LI  
		{ 
		units[] = {}; 
		weapons[] = {}; 
		requiredAddons[] = {"Extended_EventHandlers"}; 
		requiredVersion = 0.1; 
		}; 
	}; 
     
class CfgFunctions
	{
	class RYD
		{
		class AI
			{
			class Insurance 
				{
				file = "\RYD_LI\LIInit.sqf";
				preInit = 1;
				postInit = 0;
				recompile = 0;
				ext = ".sqf";
				};
			};
		};	
	};

class Extended_Init_EventHandlers 
	{ 
	class CAManBase 
    		{ 
		RYD_LI_Init_Man = "(_this select 0) call RYD_LI_Init;"; 
		}; 
	}; 

LIInit.sqf


RYD_LI_Init = 
	{
	_ix = _this addEventHandler ["HandleDamage",
		{
		_unit = _this select 0;
		_sel = _this select 1;
		_damage = _this select 2;
		_source = _this select 3;
		_proj = _this select 4;

		if (isNull _source) exitWith {0};
		
		_totalDam = 0;
		
		if (_sel isEqualTo "") then
			{
			_totalDam = (damage _unit) + _damage
			};
		
		if (_unit == _source) exitWith 
			{
			if not (_totalDam < 1) then
				{
				_ix = _unit getVariable "RYD_LI_MyEH";
				if not (isNil {_ix}) then
					{
					_unit removeEventHandler ["HandleDamage",_ix]
					}
				};
				
			_damage
			};
			
		if ((side _source) getFriend (side _unit) < 0.6) exitWith 
			{
			if not (_totalDam < 1) then
				{
				_ix = _unit getVariable "RYD_LI_MyEH";
				if not (isNil {_ix}) then
					{
					_unit removeEventHandler ["HandleDamage",_ix]
					}
				};
				
			_damage
			};

		if (_proj == "") then {0} else 
			{
			if not (_totalDam < 1) then
				{
				_ix = _unit getVariable "RYD_LI_MyEH";
				if not (isNil {_ix}) then
					{
					_unit removeEventHandler ["HandleDamage",_ix]
					}
				};
				
			_damage
			};
		}];
		
	_this setVariable ["RYD_LI_MyEH",_ix]
	};

 


 

 

3. Incognito

images?q=tbn:ANd9GcS5xjjgw8YDTOtMe89_EIz

 

AI is well known for its amazing spotting skills. They'll recognize, you're hostile even if it's dark, you're unarmed, far and hidden inside a civilian vehicle. You can admire these skills as before or use Incognito mod. In current state Incognito makes you and your group not attacked by enemies as long you don't act in the compromising way or close too much to them. More thorough description here. It's still early version though, with significant room for improvements. Requires CBA.

Source code:

Spoiler

config.cpp


class CfgPatches 
	{
	class RYD_INC 
		{
		units[] = {};
		weapons[] = {};
		requiredAddons[] = {"Extended_EventHandlers"};
		requiredVersion = 0.1;
		};
	};
	
class Extended_PostInit_EventHandlers
	{
	RYD_INC_Post_Init = "RYD_INC_Post_Init_Var = [] execVM '\RYD_INCOGNITO\INCInit.sqf'";
	};
	
class CfgCommunicationMenu
	{
	class INCSwitch
		{
		text = "Switch Incognito difficulty";
		submenu = "";
		expression = "nul = [] spawn RYD_INC_Switch;";
		icon = "";
		cursor = "";
		enable = "1";
		removeAfterExpressionCall = 0;
		}		
	};

INCInit.sqf


RYD_INC_Diff = 1;

RYD_INC_Switch =
	{
	switch (RYD_INC_Diff) do
		{
		case (0.5) : {RYD_INC_Diff = 1;hint format ["Incognito set to NORMAL\nsafe distance: 100%1\nnotifications: LIMITED",'%']};
		case (1) : {RYD_INC_Diff = 1.5;hint format ["Incognito set to HARD\nsafe distance: 150%1\nnotifications: NONE",'%']};
		case (1.5) : {RYD_INC_Diff = 0.5;hint format ["Incognito set to EASY\nsafe distance: 50%1\nnotifications: FULL",'%']};
		};
	};

_LOSCheck =
	{
	private ["_pos1","_pos2","_isLOS","_cam","_target","_pX1","_pY1","_pX2","_pY2","_pos1ATL","_pos2ATL","_lvl1","_lvl2","_pos1O","_pos2O"];

	_pos1O = _this select 0;
	_pos2O = _this select 1;

	_pos1 = eyePos _pos1O;
	_pos2 = eyePos _pos2O;

	_pX1 = _pos1 select 0;
	_pY1 = _pos1 select 1;

	_pX2 = _pos2 select 0;
	_pY2 = _pos2 select 1;

	_pos1ATL = ASLtoATL _pos1;
	_pos2ATL = ASLtoATL _pos2;

	_cam = objNull;

	if ((count _this) > 2) then {_cam = _this select 2};

	_target = objNull;

	if ((count _this) > 3) then {_target = _this select 3};

	_isLOS = not (terrainintersect [_pos1ATL, _pos2ATL]);
	
	if (_isLOS) then
		{ 
		_isLOS = not (lineintersects [_pos1, _pos2,_cam,_target]); 
		};

	_isLOS
	};

_isFlanking =
	{
	private ["_point","_Rpoint","_angle","_diffA","_axis","_isFlanking","_eyeD"];

	_point = _this select 0;
	_rPoint = _this select 1;

	_eyeD = eyeDirection _rPoint;

	_axis = (_eyeD select 0) atan2 (_eyeD select 1);

	_angle = [getPosATL _rPoint,getPosATL _point,10] call _angTowards;

	_isFlanking = false;

	if (_angle < 0) then {_angle = _angle + 360};
	if (_axis < 0) then {_axis = _axis + 360};

	_diffA = _angle - _axis;

	if (_diffA < 0) then {_diffA = _diffA + 360};

	if ((_diffA > 45) and (_diffA < 315)) then
		{
		_isFlanking = true
		};

	_isFlanking
	};

_angTowards =
	{
	private ["_source0", "_target0", "_rnd0","_dX0","_dY0","_angleAzimuth0"];

	_source0 = _this select 0;
	_target0 = _this select 1;
	_rnd0 = _this select 2;

	_dX0 = (_target0 select 0) - (_source0 select 0);
	_dY0 = (_target0 select 1) - (_source0 select 1);

	_angleAzimuth0 = (_dX0 atan2 _dY0) + (random (2 * _rnd0)) - _rnd0;

	_angleAzimuth0
	};

_wasIncognito = false;
RYD_INC_Fired = -10;
_lastTxt = "Incognito status at risk";
_lastIncognito = 0;
_txt = "";

waituntil
	{
	sleep 1;

	not (isNull player)
	};

sleep 20;

//_mainCycle = 0;

while {true} do
	{
	waituntil
		{
		sleep (2 + (random 2));

		not (isNull player)
		};

	//_mainCycle = _mainCycle + 1;

		{
		_switch = _x getvariable "RYD_INC_Switched";
		if isNil ("_switch") then
			{
			_x setVariable ["RYD_INC_Switched",true];
			_sw = [_x,"INCSwitch","","",""] call BIS_fnc_addCommMenuItem;
			}
		}
	foreach switchableUnits;

//_stoper = diag_Ticktime;

	_pgp = group player;
	_units = units _pgp;

		{
		_vh = vehicle _x;
		if not (_x == _vh) then
			{
			_fEHadded = _vh getVariable "RYD_INC_FEH";
			if (isNil "_fEHadded") then
				{
				_ix = _vh addEventHandler ["Fired",{if (({(_x in (_this select 0))} count (units (group player))) > 0) then {RYD_INC_Fired = time} else {(vehicle (_this select 0)) removeEventHandler ((vehicle (_this select 0)) getVariable "RYD_INC_FEH")}}];
				_vh setVariable ["RYD_INC_FEH",_ix];
				}
			}
		else
			{
			_fEHadded = _vh getVariable "RYD_INC_FEH";
			if (isNil "_fEHadded") then
				{
				_ix = _vh addEventHandler ["Fired",{RYD_INC_Fired = time}];
				_vh setVariable ["RYD_INC_FEH",_ix];
				}			
			}
		}
	foreach _units;

	_sideP = configFile >> "CfgVehicles" >> (typeOf player) >> "Side";

	if (isNumber _sideP) then
		{
		_sideP = getNumber _sideP
		}
	else
		{
		_sideP = -1
		};

	switch (_sideP) do
		{
		case (0) : {_sideP = east};
		case (1) : {_sideP = west};
		case (2) : {_sideP = resistance};
		case (3) : {_sideP = civilian};
		default {_sideP = sideFriendly}
		};

	_knownForAll = 0;

	_vehs = [];
	_allEnemyG = [];

		{
		_knowAboutMe = [];
		_knowAboutMeG = [];
		_vh = vehicle _x;
		_asVh = assignedVehicle _x;

		if (isNull _asVh) then
			{
			_asVh = _vh
			};

			{
			if (((side _x) getFriend _sideP) < 0.6) then
				{
				if (((leader _x) distance _vh) < viewDistance) then
					{
					if (((_x knowsAbout _vh) max (_x knowsAbout _asVh)) > 1) then
						{
						_knowAboutMeG pushBack _x;

							{
							if not (captive _x) then
								{
								_knowAboutMe pushBack _x
								}
							}
						foreach (units _x);
						}
					};

				_allEnemyG pushBack _x
				}
			}
		foreach allGroups;

		_vehs pushBack [_x,_vh,_asVh,_knowAboutMe,_knowAboutMeG];
		}
	foreach _units;

		{
		_unit = _x select 0;
		_vh = _x select 1;
		_asVh = _x select 2;
		_enemies = _x select 3;
		_enemiesG = _x select 4;

		_onFoot = (_unit == _vh);

		_armed = false;
		_wrongVeh = false;
		_firing = false;
		_recognized = false;

		if ((_onFoot) and {(({not ((toLower _x) in ["","throw"])} count [(currentWeapon _unit),(primaryWeapon _unit),(secondaryWeapon _unit)]) > 0)}) then
			{
			_armed = true
			};

		if not (_armed) then
			{
			if not (_onFoot) then
				{
				_side = configFile >> "CfgVehicles" >> (typeOf _vh) >> "Side";

				if (isNumber _side) then
					{
					_side = getNumber _side
					}
				else
					{
					_side = -1
					};

				switch (_side) do
					{
					case (0) : {_side = east};
					case (1) : {_side = west};
					case (2) : {_side = resistance};
					case (3) : {_side = civilian};
					default {_side = sideFriendly}
					};

					{
					if (((side _x) getFriend _side) < 0.6) exitWith
						{
						_wrongVeh = true
						}
					}
				foreach _allEnemyG
				};

			if not (_wrongVeh) then
				{
				if ((time - RYD_INC_Fired) < 10) then
					{
					_firing = true
					};

				if not (_firing) then
					{
					_div = 3 + sunOrMoon;
					_safeDst = 80 * RYD_INC_Diff;

					if (_onFoot) then
						{
						_speed = [0,0,0] distance (velocity _vh);
						_stance = stance _unit;

						switch (_stance) do
							{
							case ("CROUCH") :
								{
								_div = _div/1.5;
								_safeDst = _safeDst * (1.25/(1.5 - (sunOrMoon/2)));
								};

							case ("PRONE") :
								{
								_div = _div/2;
								_safeDst = _safeDst * (1.5/(2 - sunOrMoon));
								};
							};

						if (_speed > 2.5) then
							{
							_safeDst = _safeDst * ((_speed - 1.5)^0.45);
							}
						}

					else
						{
						_safeDst = 50 * RYD_INC_Diff
						};

					_safeDst = _safeDst - ((_safeDst * (1 - sunOrMoon))/2);

						{
						if ((_x distance _vh) < _safeDst) then
							{
							if ((_x distance _vh) < (random (_safeDst/_div)) + (random (_safeDst/_div)) + (random (_safeDst/_div)) + (random (_safeDst/_div))) then
								{
								_flank = [_vh,_x] call _isFlanking;

								if not (_flank) then
									{
									_isLOS = [_x,_vh] call _LOSCheck;

									if (_isLOS) then {_recognized = true}
									}
								}
							};

						if (_recognized) exitWith {}
						}
					foreach _enemies
					}
				}
			};

		RYD_INC_Fired = -10;

		_unit setVariable ["RYD_INC_Compromised",((_unit getVariable ["RYD_INC_Exposed",false]) or {(_armed) or {(_wrongVeh) or {(_firing) or {(_recognized)}}}})];

		_knownFor = count _enemiesG;

		_unit setVariable ["RYD_INC_Exposed",false];

		if (_unit getVariable ["RYD_INC_Compromised",false]) then
			{
			if (_knownFor > 0) then
				{
				_unit setVariable ["RYD_INC_Exposed",true]
				}
			};

		if (_knownFor > 0) then
			{
			_knownForAll = _knownFor
			};

		if not (_unit getVariable ["RYD_INC_Exposed",false]) then
			{
			_unit setVariable ["RYD_INC_Undercover",true];
			_wasIncognito = true
			}
		else
			{
			_unit setVariable ["RYD_INC_Undercover",false]
			};
		
		if ((_unit getVariable ["RYD_INC_Exposed",false]) or {(_armed) or {(_wrongVeh) or {(_firing) or {(_recognized)}}}}) then
			{	
			diag_log format ["unit %7 : %1 reason - exposed: %2 armed: %3 wrongVeh: %4 firing: %5 recognized: %6 weaponry: %8 vh: %9 unit: %10",time,(_unit getVariable ["RYD_INC_Exposed",false]),_armed,_wrongVeh,_firing,_recognized,name _unit,[(currentWeapon _unit),(primaryWeapon _unit),(secondaryWeapon _unit)],_vh,_unit];
			};
		}
	foreach _vehs;

	_exposed = {(_x getVariable ["RYD_INC_Exposed",false])} count _units;
	_compromised = {((_x getVariable ["RYD_INC_Compromised",false]) and {(_x getVariable ["RYD_INC_Undercover",false])})} count _units;
	_incognito = {(_x getVariable ["RYD_INC_Undercover",false]) and {not (_x getVariable ["RYD_INC_Compromised",false])}} count _units;

	if ((_compromised > 0) and {_lastIncognito > 0}) then
		{
		diag_log "at risk"
		};

	if (_exposed == 0) then
		{
			{
			_unit = _x;
			_unit setVariable ["RYD_INC_Settings",[behaviour _unit,combatMode _unit]];
			_unit setCombatMode "CARELESS";
			_unit setBehaviour "BLUE";
			_unit setCaptive true;
			}
		foreach _units
		}
	else
		{
			{
			_unit = _x;

			_unit setVariable ["RYD_INC_Undercover",false];
			_settings = _unit getVariable ["RYD_INC_Settings",["AWARE","YELLOW"]];
			_unit setCombatMode (_settings select 0);
			_unit setBehaviour (_settings select 1);
			_unit setCaptive false
			}
		foreach _units
		};

	//hintSilent format ["comp: %1 exp: %2 inc: %3",_compromised,_exposed,_incognito];

	if (RYD_INC_Diff < 1.5) then
		{
		if (_wasIncognito) then
			{
			_txt = "";
			switch (true) do
				{
				case (_exposed > 0) :
					{
					_txt = "You've been exposed!"
					};

				case (_incognito > _lastIncognito) :
					{
					if ((count _units) == 1) then
						{
						_txt = "You're now incognito"
						}
					else
						{
						if (_incognito == 1) then
							{
							_txt = "One of you is now incognito"
							}
						else
							{
							_txt = format ["The %1 of you are now incognito",_incognito]
							}
						}
					};

				default
					{
					if ((count _units) > 1) then
						{
						if (_compromised > 0) then
							{
							if (_lastIncognito > 0) then
								{
								_txt = format ["Incognito status at risk for %1 of you",_compromised]
								}
							};

						if (RYD_INC_Diff < 1) then
							{
							if (_knownForAll > 0) then
								{
								if (_knownForAll == 1) then
									{
									_txt = _txt + (format ["\nOne of you is being observed",_knownForAll])
									}
								else
									{
									_txt = _txt + (format ["\nThe %1 of you are being observed",_knownForAll])
									}
								}
							}
						}
					else
						{
						switch (true) do
							{
							case (_compromised > 0) :
								{
								if (_lastIncognito > 0) then
									{
									_txt = "Incognito status at risk"
									}
								};

							case (_knownForAll > 0) :
								{
								if (RYD_INC_Diff < 1) then
									{
									_txt = "You're being observed"
									}
								}
							}
						}
					}
				}
			};

		//if (_mainCycle > 10) then
			//{
			if not (_txt in [""]) then
				{
				if not (_lastTxt in [_txt]) then
					{
					//titleText [_txt,"PLAIN DOWN",0.55];
					hintSilent _txt;
					_lastTxt = _txt
					}
				}
			//}
		};

	_lastIncognito = _incognito;

	//player sidechat format ["czas: %1",diag_Ticktime - _stoper]
	};

 


 

Post Scriptum

 

For those, who want learn more about my A3 projects, here are:

HETMAN - Artificial Leader (field commander level AI)
FIRE FOR EFFECT: The God of War (autonomous AI artillery)
ARTEMIS - Hunting Instinct AI (animal-like predator AI)

Pilgrimage (dynamic SP mission)
HETMAN: War Stories (dynamic SP battle generator)
Ngwa-ngwa-dinta (short SP mission)

Problematic Scripts Museum collection (weird scripts of unclear use):

 

DRUNKEN MARATHONER
ANGRY SPARTAN
HECTIC MUSE

 

 

 

Projects are released under APL-SA license. 

9 people like this

Share this post


Link to post
Share on other sites

Good decission, thanks! :)

Release frontpaged on the Armaholic homepage.

================================================

We have also "connected" these pages to your account on Armaholic.

This means soon you will be able to maintain these pages yourself if you wish to do so. Once this new feature is ready we will contact you about it and explain how things work and what options you have.

When you have any questions already feel free to PM or email me!

PS: the other files will be added as well soon!

Edited by Foxhound

Share this post


Link to post
Share on other sites

New mod 1.0 available at withSIX. Download now by clicking:

banner-420x120.png

New mod 1.0 available at withSIX. Download now by clicking:

banner-420x120.png

New mod 1.0 available at withSIX. Download now by clicking:

banner-420x120.png

New mod 1.0 available at withSIX. Download now by clicking:

banner-420x120.png

@Rydygier;

You are now able to manage your own promo pages of your content on our web platform and soon also publish new content yourself.

To do so, please hit 'this is me' button on the page while logged in and follow the quick and safe claim procedure to get connected to your work.

For now you can send new content or releases our way through withsix.wetransfer.com or add your notification at getsatisfaction.withsix.com.

Share this post


Link to post
Share on other sites

Good job!

Have you thought about releasing scripted versions as well, e.g. as resources for fellow mission makers?

Share this post


Link to post
Share on other sites

Dude big fan of you and your work. I much appreciate all of these mods!!! Great way to end Thanksgiving here in America :)

Share this post


Link to post
Share on other sites

Thanks. :)

Have you thought about releasing scripted versions as well, e.g. as resources for fellow mission makers?

That's good idea. Or maybe even I'll just paste source code itself here, under spoiler buttons, projects are small enough to do so. EDIT: so I did for those with actual scripts. 1 and 4 are pure config mods, and code is too big for 4. There is limit of signs in the single post, and post would be too heavy anyway. Due to that limit seems, it's temporary solution. If there will be more small projects to add, I'll need to link to pastebin or something... Or I'll add unpacked version to the zip. For now, people have to depbo to see, what's inside.

Edited by Rydygier

Share this post


Link to post
Share on other sites

Nice little bundle of joy, I'm sure some of these things will come in handy! Thanks.

Share this post


Link to post
Share on other sites
That's good idea. Or maybe even I'll just paste source code itself here, under spoiler buttons, projects are small enough to do so. EDIT: so I did for those with actual scripts. 1 and 4 are pure config mods, and code is too big for 4. There is limit of signs in the single post, and post would be too heavy anyway. Due to that limit seems, it's temporary solution. If there will be more small projects to add, I'll need to link to pastebin or something... Or I'll add unpacked version to the zip. For now, people have to depbo to see, what's inside.

Great, thanks! ;)

Share this post


Link to post
Share on other sites

This looks like a great set of addons. There are quite a few small tweaks that would go a long way to improving the ARMA experience.

I have an idea that might be in the same spirit as what you have here. For vehicles like the Hunter, wouldn't it be great if you could mount and unmount the crew served weapons? For instance, adding a .50 cal backpack to the cargo of an unarmed hunter gives the option to turn the vehicle into an HMG hunter (assuming the CROWS-type equipment is SL3 for the vehicle). Likewise, armed Hunters could have the weapons unmounted and turned into a backpack in cargo. Just a thought.

Share this post


Link to post
Share on other sites

Thanks for sharing this idea, I thought would be great, if in this place we could also do exactly that - discuss ideas for potential next "trifle" addons.

As for that idea. One way, I see to achieve this looks as follows. When certain condition is met (appriopriate class of backpack in the Hunter's trunk) become visible an action bounded to the Hunter. That action would execute a script, that removes Hunter object and sets in the same place armed Hunter instead, with same direction, fuel, hitpoints etc, passangers/crew/cargo moved from one to another if necessary, with possible problems in details like amount of ammo in stored magazines and such. Cheap trick. That new or any armed Hunter may have action for opposite transition. Although I can forsee also risk of possible problems. For the player eye this may be about arming unarmed vehicle. But for the scripts etc. it's about removing one object from the map and replacing it with another. So for some scripts vehicle will vanish, other may generate errors because of that. Possible workaround would be not removing previous vehicle, but hiding it and disabling simulation. That of course may cause another set of problems with other scripts sensitive on such changes like caching scripts...

Shortly - it's possible that way, but potentially highly troublemaking.

Although not tested yet, potential, much more promising alternative could be provided by addWeaponTurret and removeWeaponTurret. These are new commands, I see. Don't know, how effect looks like, but sadly seems it's only about adding or removing weapons for already existing turrets, while we're about add/remove whole turrets from the model.

Share this post


Link to post
Share on other sites

Would it be possible to add the turret as a proxy and still have it function like normal? This thread makes it seem quite difficult, but perhaps there's another way.

Share this post


Link to post
Share on other sites

No idea. I don't know anything about modelling because never was interested in this aspect of modding. I'm only a scripter with additional basic knowledge about config, unable to create such things (whatever this "proxy" is...). If doable that way, seems much better choice than those, I could provide.

Edited by Rydygier

Share this post


Link to post
Share on other sites

My crew and I are running incognito and though it's abit of learning on our part (how close is too close etc) it's a huge boost to our mission set and we are thankful for it!

Share this post


Link to post
Share on other sites

Great. :)

How close is too close depends. Base value is 80 meters if on foot and 50 if in the vehicle. But it's multiplied depending on difficulty setting x0.5 for easy, x1 for normal and x1.5 for hard. So it may be from 40 to 120 (25 to 75 for vehicle passengers). If unit is on foot, there are additional factors: speed in m/s (running is suspicious and brings attention so increases safe distance) and unusual stances (crouching is supicious, prone position even more). In the same time crouching and the more prone makes unit harder to recognize (as unit) if not bright day, So at full night it may be better to crouch or prone. Daytime/amount of light matter as another factor for both, on foot and vehicles. There is also default knowledge factor - if enemy's knowledge is too low, you'll stay unrecognized. But this matters mostly for very dense fog or at night.

Closing below safe distance doesn't mean automatic exposure. There is some randomization too, so it's rather about smoothly increasing risk of exposure with reducing distance.

As you can see, it's complex. :)

Edited by Rydygier

Share this post


Link to post
Share on other sites

Ya it seems a lot of realistic factors were taken into account so mad props for doing the leg work.

Now just gotta get a sabotage mission going. ;)

Share this post


Link to post
Share on other sites

Along with Pilgrimage tested today Incognito again - wanted to learn, why sometimes "at risk" message appear. Still don't know, why it happens, when whole group in the civilian car, but found one reason, why it appear, when we're unarmed on foot. Code checks, if unit is armed by checking current weapon, primary weapon and secondary weapon. All have to be equal to "" to pass unarmed test. But sometimes AI chooses "Throw" "weapon" even, when completely unarmed. Knowing this, I can whitelist it, but I wonder, how code will behave after such change if unit would actually throw a grenade...

---------- Post added at 19:25 ---------- Previous post was at 18:47 ----------

OK. Incognito updated to alpha 7:

- fixed false "at risk" state due to unarmed AI choosing "Throw" "weapon";

- additionally firing a weapon will trigger "at risk" temporarily, which makes a difference only for throwing grenades.

Share this post


Link to post
Share on other sites

THAT IS REALLY INTERESTING HAVE TO TRY THIS OUT Incognito AND SEE HOW THIS WORKS

Share this post


Link to post
Share on other sites

Thanks for taking the time to inform us about the update :)

New version frontpaged on the Armaholic homepage.

================================================

We have also "connected" these pages to your account on Armaholic.

This means soon you will be able to maintain these pages yourself if you wish to do so. Once this new feature is ready we will contact you about it and explain how things work and what options you have.

When you have any questions already feel free to PM or email me!

Share this post


Link to post
Share on other sites

Is the incognito mode tested with Multiplayer? Sounds awesome and fitting for my IED Spree :o Awesome work

Share this post


Link to post
Share on other sites

Not tested in MP. Basically all my work so far is designed for SP. Some things however may work in MP aswell. Mostly depends on locality. First post contain also source code, if one would like to test/adjust for MP if required. Most likely should be server side only, so at least isServer check may be needed.

Share this post


Link to post
Share on other sites

Have a truckload of thanks from me,Rydygier.I just stumbled into Limited insurance script and it helps immensely by improving the gameplay.This was a problem since OFP era,but no one at BI gave a crap about fixing it through the series.

 

It isn't perfect but it's 100 times better than seeing vehicles and armor running over friendly troops.

In towns it looked like AI was playing friggin Carmageddon.

So happy I can have proper combined ops now,can't wait to test Incognito too. :ph34r:

Share this post


Link to post
Share on other sites

Hah I'd not seen that either... do we add the LI code to the mission or must it be added to a unit ?

Share this post


Link to post
Share on other sites

Hah I'd not seen that either... do we add the LI code to the mission or must it be added to a unit ?

Just drop the pbo in your addons folder and it will do the job in every mission.The units will still fall down when ran over but they'll back up,no damage,no deaths just pure combined ops. :)

Something like this really deserves more exposure considering what it does.

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