Table of Contents
ArmA 1 Ambient Life Configs
ArmA 1 Forum, ArmA 1 Home, ArmA 1 Config, ArmA 1 Tools, ArmA 1 File Formats, ArmA 1 Missions, ArmA 1 3D Modeling, ArmA 1 Terrain, ArmA 1 Texturing, 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])