Synide – User talk
The following is temporary...
This is my init.sqf file I use in all my missions. It correctly identifies in what context the init.sqf file is being run.
/*
Synide
11/6/2007
v1.0
Things to note...
If you are there at mission launch from that point on your 'Context'
will always be 'MP_CLIENT' and will stay as such even when you respawn.
If you are an 'MP_CLIENT' then you 'disconnect' from a continuing mission
and select a new playable character or the same playable character you will
become a 'JIP_CLIENT'.
If you join an inprogress mission you will be a 'JIP_CLIENT' from that
point till the mission ends.
*/
//init.sqf
debug=false;
if (isServer) then
{
if (isnull player) then {Context = "mp_server";}else{Context = "sp_server";};
}else{
if (isnull player) then {Context = "jip_client";}else{Context = "mp_client";};
};
call compile preprocessFileLineNumbers "scripts\common\init.sqf";
call compile preprocessFileLineNumbers format["scripts\%1\init.sqf",Context];
processInitCommands;
finishMissionInit;
Things to note about the above for MP only.
- If you are there at mission launch from that point on your 'Context' will always be 'MP_CLIENT' and will stay as such even when you respawn.
- If you are an 'MP_CLIENT' then you 'disconnect' from the continuing mission and select a new playable character you will become a 'JIP_CLIENT'.
- If you join an inprogress mission you will be a 'JIP_CLIENT' from that point till the mission ends.
LOD Stuff
A typical 'character' model has approx. 16 LOD's.
10000 is the 'Stencil Shadow' LOD.
- What is LOD 10010?
What is the 11000 LOD, seems to have approx. 1/3 of the Poly's of a 'Stencil Shadow' LOD.
What is LOD 11010?
Model Stuff
- OFP2_ManSkeleton (has 75 Bones)
- neck
- neck1
- head
- lbrow
- mbrow
- rbrow
- lmouth
- mmouth
- rmouth
- eyelids (10)
- llip
- head
- neck1
- weapon
- launcher
- camera
- spine
- spine1
- spine2
- spine3
- pelvis
- leftshoulder (20)
- leftarm
- leftarmroll
- leftforearm
- leftforearmroll
- lefthand
- lefthandring
- lefthandring1
- lefthandring2
- lefthandring3
- lefthandpinky1 (30)
- lefthandpinky2
- lefthandpinky3
- lefthandmiddle1
- lefthandmiddle2
- lefthandmiddle3
- lefthandindex1
- lefthandindex2
- lefthandindex3
- lefthandthumb1
- lefthandthumb2 (40)
- lefthandthumb3
- rightshoulder
- rightarm
- rightarmroll
- rightforearm
- rightforearmroll
- righthand
- righthandring
- righthandring1
- righthandring2 (50)
- righthandring3
- righthandpinky1
- righthandpinky2
- righthandpinky3
- righthandmiddle1
- righthandmiddle2
- righthandmiddle3
- righthandindex1
- righthandindex2
- righthandindex3 (60)
- righthandthumb1
- righthandthumb2
- righthandthumb3
- leftupleg
- leftuplegroll
- leftleg
- leftlegroll
- leftfoot
- lefttoebase
- rightupleg (70)
- rightuplegroll
- rightleg
- rightlegroll
- rightfoot
- righttoebase (75)
- neck
M1_Abrams.p3d
- Has 19 LOD's.
- 1,2,3.5,7,10,15,20,1000,1200,10000,10010, 1.0e13 (Geometry), 1.0e15 (Memory), 2.0e15 (LandContact), 5.0e15 (Hitpoints), 6.0e15 (View Geometry), 7.0e15 (Fire Geometry),11000 and 11010.
- The first LOD in the file (which ever LOD that might be...) has 6302 Poly's.
- This first LOD has 20 Components
- otochlaven (has 735 selected faces)
- otocvez (has 1634 selected faces)
- zasleh (has 1 selected face)
- otocvelitele (has 651 selected faces)
- poklop_commander (has 432 selected faces)
- poklop_gunner (has 170 selected faces)
- proxy:\ca\temp\proxies\abrams\gunner.01
- proxy:\ca\wheeled\flag_alone.01
- proxy:\ca\temp\proxies\abrams\commander.01
- otochlavenvelitele (has 2668 selected faces)
- feedtray_cover (has 85 selected faces)
- bolt (has 6 selected faces)
- charging_handle (has 50 selected faces)
- \ca\weapons\m2_static.01 (has 1158 selected faces)
- zasleh_1 (has 1 selected face)
- telo (has 6297 selected faces)
- damagehide (has 792 selected faces)
- damagevez (has 317 selected faces)
- proxy:\ca\weapons\zasleh2_proxy.001 (has 1 selected face)
- proxy:\ca\weapons\zasleh2_proxy.002 (has 1 selected face)
- Has 1 property. (lodnoshadow=1)
M1A1Skeleton (has 81 Bones)
- koll1
- koll2
- koll3
- koll4
- koll5
- koll6
- koll7
- koll8
- kolp1
- kolp2 (10)
- kolp3
- kolp4
- kolp5
- kolp6
- kolp7
- kolp8
- podkolol1
- kolol1
- podkolol1_hide
- podkolol2 (20)
- kolol2
- podkolol2_hide
- podkolol3
- kolol3
- podkolol3_hide
- podkolol4
- kolol4
- podkolol4_hide
- podkolol5
- kolol5 (30)
- podkolol5_hide
- podkolol6
- kolol6
- podkolol6_hide
- podkolol7
- kolol7
- podkolol7_hide
- podkolol8
- kolol8
- podkolol8_hide (40)
- podkolop1
- kolop1
- podkolop1_hide
- podkolop2
- kolop2
- podkolop2_hide
- podkolop3
- kolop3
- podkolop3_hide
- podkolop4 (50)
- kolop4
- podkolop4_hide
- podkolop5
- kolop5
- podkolop5_hide
- podkolop6
- kolop6
- podkolop6_hide
- podkolop7
- kolop7 (60)
- podkolop7_hide
- podkolop8
- kolop8
- podkolop8_hide
- ukaz_rychlo
- ukaz_rychlo2
- ukaz_rpm
- ukaz_radar
- hodinova
- minutova (70)
- kompas
- ukazsmer
- damagehide
- otocvez
- otochlaven
- otocvelitele
- otochlavenvelitele
- poklop_commander
- poklop_gunner
- damagevez (80)
- poklop_driver
Animation Selections (61 in total)
No. | AnimSelection | AnimSource |
---|---|---|
[0] | damageHide | damage |
[1] | HatchDriver | hatchDriver |
[2] | Wheel_kolL1 | wheelL |
[3] | Wheel_koloL1 | wheelL |
[4] | Wheel_podkoloL1 | damper |
[5] | Wheel_kolP1 | wheelR |
[6] | Wheel_koloP1 | wheelR |
[7] | Wheel_podkoloP1 | damper |
[8] | Wheel_kolL2 | wheelL |
[9] | Wheel_kolP2 | wheelR |
[10] | Wheel_koloL2 | wheelL |
[11] | Wheel_koloL3 | wheelL |
[12] | Wheel_koloL4 | wheelL |
[13] | Wheel_koloL5 | wheelL |
[14] | Wheel_koloL6 | wheelL |
[15] | Wheel_koloL7 | wheelL |
[16] | Wheel_koloP2 | wheelR |
[17] | Wheel_koloP3 | wheelR |
[18] | Wheel_koloP4 | wheelR |
[19] | Wheel_koloP5 | wheelR |
[20] | Wheel_koloP6 | wheelR |
[21] | Wheel_koloP7 | wheelR |
[22] | Wheel_podkoloL2 | damper |
[23] | Wheel_podkoloL3 | damper |
[24] | Wheel_podkoloL4 | damper |
[25] | Wheel_podkoloL5 | damper |
[26] | Wheel_podkoloL6 | damper |
[27] | Wheel_podkoloL7 | damper |
[28] | Wheel_podkoloL8 | damper |
[29] | Wheel_podkoloP2 | damper |
[30] | Wheel_podkoloP3 | damper |
[31] | Wheel_podkoloP4 | damper |
[32] | Wheel_podkoloP5 | damper |
[33] | Wheel_podkoloP6 | damper |
[34] | Wheel_podkoloP7 | damper |
[35] | Wheel_podkoloP8 | damper |
[36] | podkoloL1_hide_damage | damage |
[37] | podkoloL2_hide_damage | damage |
[38] | podkoloL3_hide_damage | damage |
[39] | podkoloL4_hide_damage | damage |
[40] | podkoloL5_hide_damage | damage |
[41] | podkoloL6_hide_damage | damage |
[42] | podkoloL7_hide_damage | damage |
[43] | podkoloL8_hide_damage | damage |
[44] | podkoloP1_hide_damage | damage |
[45] | podkoloP2_hide_damage | damage |
[46] | podkoloP3_hide_damage | damage |
[47] | podkoloP4_hide_damage | damage |
[48] | podkoloP5_hide_damage | damage |
[49] | podkoloP6_hide_damage | damage |
[50] | podkoloP7_hide_damage | damage |
[51] | podkoloP8_hide_damage | damage |
[52] | damageVez | damage |
[53] | MainTurret | mainTurret |
[54] | MainGun | mainGun |
[55] | ObsTurret | obsTurret |
[56] | ObsGun | obsGun |
[57] | HatchCommander | hatchCommander |
[58] | OtocVelitele_damage | damage |
[59] | poklop_commander_damage | damage |
[60] | poklop_driver_damage | damage |
UH_60MG.p3d
Basically a good Air Model should have about 8 LOD's + the necessary LOD's.
- Has 24 LOD's.
- 1,2,3,4,5,6,7,8, 1000, 1100, 1200, 10000, 10010, 1.0e13 (Geometry), 1.0e15 (Memory), 2.0e15 (LandContact), 5.0e15 (Hitpoints), 6.0e15 (View Geometry), 7.0e15 (Fire Geometry), 8.0e15 (View Cargo-Geometry), 1.3e16 (View Pilot-Geometry), 1.5e16 (View Gunner-Geometry), 11000 and 11010.
- Has approx. 14768 Poly's in most detailed LOD.
UH60MGSkeleton (has 34 Bones)
- velka vrtule
- mala vrtule
- otocvez
- otochlaven
- gatling_1
- otochlaven
- alt
- alt2
- nm_alt
- nm_alt2
- mph (10)
- mph2
- vert_speed
- vert_speed2
- rpm
- rpm2
- horizont_dive
- horizont
- horizont2_dive
- horizont2
- kompas (20)
- kompas2
- hodinova
- hodinova2
- minutova
- minutova2
- damagehide
- rotorshaft
- dampers
- damper_rear
- elevator (30)
- horizont_dive2
- otocvez_1
- otochlaven_1
- gatling_2 (34)
- otochlaven_1
ODOL v40 File Format
Introduction
The general file format of a ArmA ODOL v40 p3d model file is similar to the ODOL v7 format. The major differences are that in ArmA models there is now included (but not always) a model.cfg and the resolutions are ordered in the file in reverse numerical order.
The order of resolutions denoted in the header portion of the file is not necessarily the numerical order of the resolutions. (often the 11,000 resolution is the last in the header array) The header resolutions need to be sorted in descending order. The resultant sorted array of resolutions is the order in which they appear in the file.
Legend
Type | Description |
---|---|
byte | 8 bit (1 byte) |
ushort | 16 bit unsigned short (2 bytes) |
int | 32 bit signed integer (4 bytes) |
float | 32 bit signed single precision floating point value (4 bytes) |
asciiz | Null terminated (0x00) variable length ascii string |
Enums
int enum PixelShaderId
{
Normal = 0x00,
NormalMap = 0x02,
NormalMapMacroASSpecularMap = 0x14,
NormalMapSpecularDIMap = 0x16,
NormalMapMacroASSpecularDIMap = 0x18,
AlphaShadow = 0x0C,
AlphaNoShadow = 0x0D,
Glass = 0x38,
Detail = 0x06,
NormalMapSpecularMap = 0x12
}
int enum VertexShaderId
{
Basic = 0x00,
NormalMap = 0x01,
NormalMapAS = 0x0F
}
Structures
struct structP3DHeader
{
string Filetype; //eg. ODOL
int Version; //eg. 0x2800 0000 = 40
int NoOfResolutions;
float[NoOfResolutions] HeaderResolutions;
}
structBone
{
asciiz Bone;
asciiz Parent;
}
structSkeleton
{
asciiz SkeletonName;
bool isInherited;
int NoOfBones;
structBone[NoOfBones] Bones;
}
structAnimation
{
int AnimTransformType;
string AnimSelection;
string AnimSource;
if (AnimTransformType == 9)
{
float[6] Transforms;
}
else
{
float[7] Transforms;
}
}
File Format
ODOLv40
{
structP3DHeader Header;
}
Reference Tables
Note: These are not part of the p3d model file but are reference tables used for processing.
Resolutions
refResolutions
{
float Resolution;
string ResolutionName;
}
Value | Value | Description |
---|---|---|
1.0e3 | 1,000 | View Gunner |
1.1e3 | 1,100 | View Pilot |
1.2e3 | 1,200 | View Cargo |
1.0e4 | 10,000 | Stencil Shadow |
1.001e4 | 10,010 | Stencil Shadow 2 |
1.1e4 | 11000 | Shadow Volume |
1.101e4 | 11010 | Shadow Volume 2 |
1.0e13 | 10,000,000,000,000 | Geometry |
1.0e15 | 1,000,000,000,000,000 | Memory |
2.0e15 | 2,000,000,000,000,000 | Land Contact |
3.0e15 | 3,000,000,000,000,000 | Roadway |
4.0e15 | 4,000,000,000,000,000 | Paths |
5.0e15 | 5,000,000,000,000,000 | HitPoints |
6.0e15 | 6,000,000,000,000,000 | View Geometry |
7.0e15 | 7,000,000,000,000,000 | Fire Geometry |
8.0e15 | 8,000,000,000,000,000 | View Cargo Geometry |
9.0e15 | 9,000,000,000,000,000 | View Cargo Fire Geometry |
1.0e16 | 10,000,000,000,000,000 | View Commander |
1.1e16 | 11,000,000,000,000,000 | View Commander Geometry |
1.2e16 | 12,000,000,000,000,000 | View Commander Fire Geometry |
1.3e16 | 13,000,000,000,000,000 | View Pilot Geometry |
1.4e16 | 14,000,000,000,000,000 | View Pilot Fire Geometry |
1.5e16 | 15,000,000,000,000,000 | View Gunner Geometry |
1.6e16 | 16,000,000,000,000,000 | View Gunner Fire Geometry |
Material Stages
The number of material stages is dependant on the type of Shader that is used to process the material by the ArmA game engine. A reference table is used when processing materials where depending on the shader specified the given number of stages should be processed.
refShaderStages
{
int PixelShaderId;
int NoOfStages;
};
PixelShaderId enum | NoOfStages |
---|---|
PixelShaderId.Normal | 0 |
PixelShaderId.NormalMapSpecularDIMap | 2 |
PixelShaderId.AlphaNoShadow | 0 |
PixelShaderId.AlphaShadow | 0 |
PixelShaderId.NormalMapMacroASSpecularDIMap | 4 |
PixelShaderId.Glass | 2 |
PixelShaderId.Detail | 1 |
PixelShaderId.NormalMap | 3 |
PixelShaderId.NormalMapMacroASSpecularMap | 4 |
PixelShaderId.NormalMapSpecularMap | 2 |