====== ArmA 1 Ambient Life Configs ======
[[https://www.pmctactical.org/forum/viewforum.php?f=42|ArmA 1 Forum]], [[:arma|ArmA 1 Home]], [[arma:config|ArmA 1 Config]], [[arma:tools|ArmA 1 Tools]], [[arma:file_formats|ArmA 1 File Formats]], [[arma:missions|ArmA 1 Missions]], [[arma:modeling|ArmA 1 3D Modeling]], [[arma:terrain|ArmA 1 Terrain]], [[arma:texturing|ArmA 1 Texturing]], [[arma:scripting|ArmA 1 Scripting]]
**ArmA 1** aka Armed Assault (ArmA)
====== Ambient Life Distribution ======
Ambien life is the birds, insects and possible other animals that are created/spawned around players area.
There is a probabilistic way to define ambient life distribution, depending on current time, place and weather conditions, defined in **CfgWorlds**.
Layer cost and species probability use Simple Expressions.
Ambient Parameters which can be used inside of expressions:
As far as probabilities are considered, for each Species class, the probabilities need sum to one. In the following example, for instance:
probability = "deadBody + (1 - deadBody) * (0.5 - forest * 0.1 - meadow * 0.2)";
probability = "(1 - deadBody) * (0.5 - forest * 0.1 + meadow * 0.2)";
probability = "(1 - deadBody) * (0.2 * forest)";
Which really sums into one, as one can easily check:
sum = deadBody + (1 - deadBody) * (0.5 - 0.1 * forest - 0.2 * meadow + 0.5 - 0.1 * forest + 0.2 * meadow + 0.2 * forest) =
= deadBody + (1 - deadBody) * 1 = 1
More complete example follows:
class CfgWorlds
{
class DefaultWorld
{
// ambient life configuration
class Ambient
{
class SmallInsects
{
radius=3; // radius in meters, where ambient lives (distance from the player)
cost="(10-5*hills)*(1-night)*(1-rain)*(1-sea)*(1-( (windy*2) min 1))"; //total number of all species
// species configuration
class Species
{
class HouseFly
{
probability="deadBody+(1-deadBody)*(0.5-forest*0.1-meadow*0.2)";
cost=1; //when the fly lives, it pays this cost to the total sum cost SmallInsects::cost
};
class HoneyBee
{
probability="(1-deadBody)*(0.5-forest*0.1+meadow*0.2)";
cost=1;
};
class Mosquito
{
probability="(1-deadBody)*(0.2*forest)";
cost=1;
};
};
};
...
};
};
};
====== Basic ambient behaviour ======
Basic ambient behaviour is defined in cfgVehicles.hpp
class CfgNonAIVehicles
{
class Bird
{
scope = private;
model="";
simulation = SeaGull; //which CPP class simulate ambient behaviour
reversed = false; //default is not reversed (ambients are oriented in other way, than a man)
//straightDistance,minHeight,avgHeight and maxHeight can be overiden by randomMove fsm function
minHeight=5;
avgHeight=10;
maxHeight=50;
straightDistance=50; // random move will use this to set the maximum distance, where to fly
minSpeed=-0.5; // m/s
maxSpeed=20; // m/s
acceleration = 7; //m/s^2
turning = 1; // angular acceleration - relative (the higher, the more maneuvrable)
flySound[]={"",db-30,1, 1};
singSound[]={"",db-30,1, 1};
canBeShot=true; //birds can, insect cannot
airFriction2[]={25,12,2.5}; //defines the matrix for computing friction
airFriction1[]={1500,700,100}; //multiplying columns changes friction in given coordinate
airFriction0[]={40,20,60};
};
...
};
====== Ambient behaviour specialization ======
For particular species, default Bird or Insect values, defined in cfgVehicles.hpp can be specialized:
class CfgNonAIVehicles
{
class Insect;
class Bird;
class ButterFly: Insect
{
model = "aglais_urticae.p3d";
fsm[] = {"Butterfly"}; //there could be more FSMs for layered FSM system, but it is not implemented yet
moves = CfgMovesButterfly; //animation subject is described on other place in wiki
//straightDistance,minHeight,avgHeight and maxHeight can be overiden by randomMove fsm function
straightDistance=2; // random move will use this to set the maximum distance, where to fly
minHeight=-0.10; // allow landing
avgHeight=0.3; // these Height values are used in random movement
maxHeight=1.5;
minSpeed=-0.1; // autopilot tries to make ambient fly within this range
maxSpeed=1; // but it is modulated only in Z coordinate, yet (side speed is still problem)
acceleration = 5; // m/s^2 this acceleration is used whenever possible. Ambient cannot fly with less effort.
turning = 5; // turning ability (less value, less turning ability)
reversed = false; // model is oriented in other way, than a man. With true value, ambient flies backwards.
autocenter = false; //important for proper rtm animation (bones mounted on proper place)
};
...
};
====== Ambient Parameters ======
**Rain** 0..1 rain intensity\\
**Night** 0..1 night "intensity"\\
**Meadow** 0..1 how much does the surrounding have a character of a meadow\\
**Trees** 0..1 how many tress are growing in the area\\
**Hills** 0..1 how much is the place "hilly" (160 ASL -> 0, 400 ASL -> 1)\\
**Houses** 0..1 how many houses or other building are around\\
**Windy** 0..1 wind streght (0 m/s ->0, 20 m/s -> 1)\\
**Forest** 0..1 forest density\\
**DeadBody** 0..1 is the place close to a dead body? (0 m ->1, 10 m -> 0)\\
**Sea** 0..1 is the place close to a sea? (0 m->1, approx. 100 m->0)\\
Parameters can be combined into Simple Expressions, like:
meadow*(1-rain)*(1-night)
(10-5*rain)*(1-sea)*(windy factor [0.2,0.5])