====== Falcon 4 .TEA file ====== [[https://www.pmctactical.org/forum/viewforum.php?f=47|Falcon 4.0 Forum]], [[:falcon4|Falcon 4 Home]], [[falcon4:campaign|Falcon 4 Campaign]], [[falcon4:cockpits|Falcon 4 Cockpits]], [[falcon4:database|Falcon 4 Database]], [[falcon4:file_formats|Falcon 4 File Formats]], [[falcon4:srtm|Falcon 4 SRTM Terrain]], [[falcon4:terrain|Falcon 4 Terrain]], [[falcon4:textures|Falcon 4 Textures]], [[falcon4:tools|Falcon 4 Tools]] The .TEA file is one of the files embedded within a .CAM/.TRN/.TAC file. The TEA file holds information about the teams. Unlike some other embedded files, it is not compressed. ===== .TEA file format ===== ^Field^Data Type^Width (in bytes)^Description^Versions^ |numTeams|Signed 16-bit integer|2|if numTeams >8, set it to 8 |All| |teamRecord[]|TeamRecord[numTeams]| | |All| ===== Structures used ===== ==== TeamRecord structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |team|Team| | |All| |atm|AirTaskingManager| | |All| |gtm|GroundTaskingManager| | |All| |ntm|NavalTaskingManager| | |All| ==== Team structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |id|VU_ID|8 | |All| |entityType|unsigned 16-bit integer|2 | |All| |who|byte|1 | |All| |cteam|byte|1 | |All| |flags|Signed 16-bit integer|2 | |All| |member[]|byte[8]|8 | |> 2| |member[]|byte[7]|7 | |< = 2| |stance[]|array of Signed 16-bit integer * 8|2 * 8= 16 bytes| |> 2| |stance[]|array of Signed 16-bit integer * 7|2 * 7= 14 bytes| |< = 2| |firstColonel|Signed 16-bit integer|2 | |All| |firstCommander|Signed 16-bit integer|2 | |All| |firstWingman|Signed 16-bit integer|2 | |All| |lastWingman|Signed 16-bit integer|2 | |All| |airExperience|byte|1 |set to 80 for earlier versions (not present in the file) |> 11| |airDefenseExperience|byte|1 | set to 80 for earlier versions (not present in the file)|> 11| |groundExperience|byte|1 |set to 80 for earlier versions (not present in the file)|> 11| |navalExperience|byte|1 |set to 80 for earlier versions (not present in the file)|> 11| |junk|byte[4]|4 | covers ignoring the airExperience, airDefenseExperience, groundExperience, and navalExperience fields in earlier versions |< = 11| |initiative|Signed 16-bit integer|2 | |All| |supplyAvail|unsigned 16-bit integer|2 | |All| |fuelAvail|unsigned 16-bit integer|2 | |All| |replacementsAvail|unsigned 16-bit integer|2 | |>53| |playerRating|single-precision 32-bit floating point|4 | |>53| |lastPlayerMission|unsigned 32-bit integer|4 | |>53| |junk2|byte[4]|4 | |< 40| |currentStats|TeamStatus| | |All| |startStats|TeamStatus| | |All| |reinforcement|Signed 16-bit integer|2 | |All| |bonusObjs[]|VU_ID[20]|20 * 8 = 160 bytes | |All| |bonusTime[]|array of unsigned 32-bit integer * 20|20 * 4 = 80 bytes | |All| |objtype_priority[]|byte[36]|36| |All| |unittype_priority[]|byte[20]|20| |All| |mission_priority[]|byte[40]|40| |< 30| |mission_priority[]|byte[41]|41| |> = 30| |attackTime|unsigned 32-bit integer|4| |< 34| |offensiveLoss|byte|1| |< 34| |max_vehicle[]|byte[4]|4| |All| |teamFlag|byte|1| |> 4| |teamColor|byte|1| |> 32| |equipment|byte|1| |> 4| |name|_TCHAR[20]|20| |> 4| |teamMotto|_TCHAR[200]|200| |> 32| |groundAction|TeamGndAction| | |> 50| |junk[]|byte[27]|27 | | 42 thru 50 (inclusive)| |junk[]|byte[23]|23 | | 34 thru 41 (inclusive)| |defensiveAirAction|TeamAirAction| | |> 33| |offensiveAirAction|TeamAirAction| | |> 33| ==== TeamAirAction structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |actionStartTime|unsigned 32-bit integer|4 | |All| |actionStopTime|unsigned 32-bit integer|4 | |All| |actionObjective|VU_ID|8 | |All| |lastActionObjective|VU_ID|8 | |All| |actionType|byte|1 | |All| |padding[]|byte[3]|3 |necessary for aligning on int32 boundary |All| ==== TeamGndAction structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |actionTime|unsigned 32-bit integer|4 | |All| |actionTimeout|unsigned 32-bit integer|4 | |All| |actionObjective|VU_ID|8 | |All| |actionType|byte|1 | |All| |actionTempo|byte|1 | |All| |actionPoints|byte|1 | |All| ==== TeamStatus structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |airDefenseVehs|unsigned 16-bit integer|2 | |All| |aircraft|unsigned 16-bit integer|2 | |All| |groundVehs|unsigned 16-bit integer|2 | |All| |ships|unsigned 16-bit integer|2 | |All| |supply|unsigned 16-bit integer|2 | |All| |fuel|unsigned 16-bit integer|2 | |All| |airbases|unsigned 16-bit integer|2 | |All| |supplyLevel|byte|1 | |All| |fuelLevel|byte|1 | |All| ==== AirTaskingManager structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |id|VU_ID|8 | |All| |entityType|unsigned 16-bit integer|2 | |All| |managerFlags|Signed 16-bit integer|2 | |All| |owner|byte|1 | |All| |flags|Signed 16-bit integer|2 | |All| |averageCAStrength|Signed 16-bit integer|2 | if version < 63 set this to 500, not present in file |> = 63| |averageCAMissions|Signed 16-bit integer|2 | if version <63 set this to 500, not present in file |> = 28| |sampleCycles|byte|1 |if version <63 set this to 10, not present in file |> = 28| |numAirbases|byte|1 | |All| |airbase[]|ATMAirbase[numAirbases]| | |All| |cycle|byte|1 | |All| |numMissionRequests|Signed 16-bit integer|2 | |All| |junk[][]|byte[numMissionRequests][64] | (64 * numMissionRequests) bytes | |< 35| |missionRequests[]|MissionRequest[numMissionRequests]| | |> = 35| ==== MissionRequest structure ==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |requesterID|VU_ID|8 | |All| |targetID|VU_ID|8 | |All| |secondaryID|VU_ID|8 | |All| |pakID|VU_ID|8 | |All| |who|byte|1 | |All| |vs|byte|1 | |All| |padding[]|byte[2]|2 |necessary so data lands on an Int32 boundary |All| |tot|unsigned 32-bit integer|4 | |All| |tx|Signed 16-bit integer|2 | |All| |ty|Signed 16-bit integer|2 | |All| |flags|unsigned 32-bit integer|4 | |All| |caps|Signed 16-bit integer|2 | |All| |target_num|Signed 16-bit integer|2 | |All| |speed|Signed 16-bit integer|2 | |All| |match_strength|Signed 16-bit integer|2 | |All| |priority|Signed 16-bit integer|2 | |All| |tot_type|byte|1 | |All| |action_type|byte|1 | |All| |mission|byte|1 | |All| |aircraft|byte|1 | |All| |context|byte|1 | |All| |roe_check|byte|1 | |All| |delayed|byte|1 | |> = 35| |start_block|byte|1 | |> = 35| |final_block|byte|1 | |> = 35| |slots[]|byte[4]|4 | |> = 35| |min_to|byte|1 | |> = 35| |max_to|byte|1 | |> = 35| |morepadding[]|byte[3]|3 | necessary so data lands on an Int32 boundary|> = 35| ==== ATMAirbase structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |id|VU_ID|8 | |All| |schedule[]|byte[32]|32 | |All| ==== GroundTaskingManager structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |id|VU_ID|8 | |All| |entityType|unsigned 16-bit integer|2 | |All| |managerFlags|Signed 16-bit integer|2 | |All| |owner|byte|1 | |All| |flags|Signed 16-bit integer|2 | |All| ==== NavalTaskingManager structure==== ^Field^Data Type^Width (in bytes)^Description^Versions^ |id|VU_ID|8 | |All| |entityType|unsigned 16-bit integer|2 | |All| |managerFlags|Signed 16-bit integer|2 | |All| |owner|byte|1 | |All| |flags|Signed 16-bit integer|2 | |All| ==== VU_ID structure==== ^Field^Data Type^Width (in bytes)^Description^ |num_|unsigned 32-bit integer|4| | |creator_|unsigned 32-bit integer|4| |