This summary might be useful to people designing their own tech tree.
Here's a quick run down of tech tree tags (and ignoring a few struture issues), I see the following things being read (and looked for in the order given), with the following parameters:
BEGIN_TECH string<name> num<id>
CATEGORY num
DESCRIPTION string
TEASER string
IMPROVE_DESC string
REQUIRES num<requiredTechId>
COST num
EDEN_COST num
PLYMOUTH_COST num
MAX_SCIENTISTS num
LAB num
PLAYER_PROP propName num<propValue>
FUNCTION_RESULT propName
UNIT_PROP unitName propName num<propValue>
END_TECH
Some tags can be used multiple times for the same tech to specify multiple results. These include "REQUIRES, "PLAYER_PROP", "FUNCTION_RESULT", and "UNIT_PROP".
The tag "FUNCTION_RESULT" is quite useless. It seems to be a feature that was never completed. The only function you can specify is "Test_Function", which just returns. (A DLL could overwrite this tag or the default function address, but since the function doesn't return a value, and must therefor handle all required effects itself, this is no different then using a ResearchTrigger).
If the research cost is the same for both colonies, then you can just use "COST". It will set the internal fields for both the Eden and Plymouth research costs. If you want them to be different, then specify "EDEN_COST" and "PLYMOUTH_COST". Note that you can probably mix these tags around, but "COST" will overwrite the results of the other tags when it's processed.
The "propName" values are looked up in a list. Each propName has an intended purpose, but the game doesn't error check these (as far as I remember), so you can mix propNames and stick them where they don't belong for odd effects. Beware though, as it might cause the game to crash. This is mainly in reference to mixing vehicle unit prop tags with building unit prop tags. (Such as Turn_Rate, and Power_Required). You can check the UnitTypeInfo.txt file in the internal data structures download to try and predict the effect of a tag when it's used where it wasn't intended. (Note that Rate_of_Fire and Storage_Capacity have the same offsets, and so they will have the same effect if you use either on a given unit).
Possible values for "propName" (prefixed by the hex offset of their value) are:
// UNIT_PROP
0x0 Hit_Points
0x8 Armor
0x34 Production_Capacity
0x24 Move_Speed
0x18 Sight_Range
0x30 Rate_Of_Fire
0x14 Build_Time
0x24 Power_Required
0x30 Storage_Capacity
0x38 Storage_Bays
0x2C Production_Rate
0x28 Concussion_Damage
0x2C Penetration_Damage
0x1D Improved
0x28 Workers_Required
0xC Common_Required
0x10 Rare_Required
0x28 Turn_Rate
0x14 Build_Points
// PLAYER_PROP
0x20 Ore
// FUNCTION_RESULT
0x472910 Test_Function
For UNIT_PROPs, most tags simply overwrite an offset at a fixed location within the UnitTypeInfo class for that player with the value given. A slight exception seems to be with the "Armor" tag. For this tag (identified by the address within the propName table), it uses the value as an index into a table of armor values. It sets the corresponding looked up value when research completes. The armor table is as follows:
0x100 = 256
0xB4 = 180
0x82 = 130
0x5A = 90
0x3C = 60
0x28 = 40
The armor table is followed by other data which is numerically very large, and will most likely cause rather odd results.
Mixing propName tags between UNIT_PROP, PLAYER_PROP, and FUNCTION_RESULT tags may cause a random property on a random unit, or a random player property to be set to a random value. Probably not a good idea, nor does this seem to be of any use. (I haven't tested this, but if someone wants to, let me know how it goes).
The value written for each unitProp is 4 bytes. Note that "Improved" is not a 4 byte aligned offset. (It might overwrite part of a second field?)
The "unitName" field can take any of the internal unit names. (It loops through the UnitTypeInfo array and calls the second function in the virtual function table to get the name of that unit type. If you write code to add a new unit, it's properties can be set with this tag name). Since this table didn't paste too cleanly, the part in caps is the actual tag name, and the lower case part is the more commonly know in game name of that unit. A list of these tags is:
// Unit type 0
MAX_OBJECT_TYPE first unit on the list
// Vehicles
BIG_TRUCK cargo truck
CON_TRUCK convec
SPIDER spider
SCORPION scorpion
LIGHT_TANK lynx
MED_TANK panther
BIG_TANK tiger
SURVEYOR robo surveyor
MINER robo miner
GEO_METRO geo con
SCOUT scout
BULL_DOZER robo dozer
MOBILE_HOME evacuation transport
REPAIR_TRUCK repair vehicle
WALL_TRUCK earthworker
SCAT small capacity air transport
// Walls and tubes
TUBE tube
WALL wall
WALL_LAVA lava wall
WALL_MICROBE microbe wall
// Buildings
MINE common ore mine
MINE_ADV rare ore mine
TOWER_GUARD guard post
TOWER_LIGHT light tower
STORAGE_ORE common ore storage
STORAGE_RARE rare ore storage
FORUM forum
COMMAND command center
ASE mhd generator
RESIDENCE residence
ROBOT_COMMAND robot command center
TRADE trade center
LAB basic lab
MED_CENTER medical center
NURSERY nursery
SOLAR solar power array
RECREATION recreation facility
UNIVERSITY university
AGRIDOME agridome
DIRT dirt
GARAGE garage
MAGMA_WELL magma well
METEOR_DEF meteor defense
GEOTHERMAL geothermal power plant
FACT_ANDROID arachnid factory
FACT_LUXURY consumer goods factory
FACT_STRUCTURE structure factory
FACT_VEHICLE vehicle factory
LAB_STANDARD standard lab
LAB_ADV advanced lab
OBSERVATORY observatory
RESIDENCE_P reinforced residence
RESIDENCE_E advanced residence
SMELTER common ore smelter
SPACEPORT spaceport
SMELTER_ADV rare ore smelter
GORF gorf
TOKAMAK tokamak
// Weapons
ACID acid cloud
EMP emp
LASER laser
MICROWAVE microwave
RAIL_GUN rail gun
CANNON rpg
SELF_DESTRUCT starflare
SELF_DESTRUCT_ADV supernova
TURRET_DESTRUCT guard post starflare
TURRET_DESTRUCT_ADV guard post supernova
SCUTTLE_DESTRUCT normal unit explosion
SPAM esg
FOAM stickyfoam
THORS_HAMMER thor's hammer
SCORPION_WEAPON energy cannon
EMP_BIG emp missile blast
BFG ...
// Disasters
LIGHTNING storm
TORNADO vortex
EARTHQUAKE earthquake
ERUPTION eruption
METEOR meteor
// Resources
BEACON mining beacon
MAGMA_VENT magma vent
FUMAROLE fumarole
// Wreckage
WRECK_FLAG wreckage
// Building explosions
BLD_EXPL_SML disasterous building explosion
BLD_EXPL_MED catastrophic building explosion
BLD_EXPL_BIG atheist building explosion
// Space
EDWARD edward satellite
SOLAR_SAT solar satellite
SPACE_1 ion drive module
SPACE_2 fusion drive module
SPACE_3 command module
SPACE_4 fueling systems
SPACE_5 habitat ring
SPACE_6 sensor package
SPACE_7 skydock
SPACE_8 stasis systems
SPACE_9 orbital package
SPACE_10 phoenix module
SPACE_11 rare metals cargo
SPACE_12 common metals cargo
SPACE_13 food cargo
SPACE_14 evacuation module
SPACE_15 children module
SULV sulv
RLV rlv
EMP_MISSILE emp missile
// Consumer goods
LUX_1 impulse items
LUX_2 wares
LUX_3 luxury wares
// Inter colont shuttle
SHUTTLE inter colony shuttle
// Arachnid packs
SPIDER_PACK spider 3 pack
SCORPION_PACK scorpion 3 pack
// Animations
AMBIENT_ANIM pretty art
// Unit type 0x74
MAX_OBJECT_TYPE last unit on the list