Savegame File-Listing: Difference between revisions

From BOTF-Wiki
DCER (talk | contribs)
m Renamed GTFStasisHd to GTFStasis because it was listed twice
Tribble (talk | contribs)
→‎systInfo: planet atmospheres bitmask
 
(53 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Most of the following data has been explored by using a vanilla singleplayer savegame at turn 1 with following settings:
This is a list of the explored content within the save games.
* tech 1
For learning to use this information, also have a look at [[Editing_Savegames]]!
* small galaxy
* irregular
* no minors
* impossible


At later turns there are additional files stored within the saves. These may have been partially discarded.
For turn 1 saves, most unexplored data seems to be relatively unimportant and often can be zero!
Please aware that some information might be incomplete or even incorrect.  
Please aware that some information might be incomplete or even incorrect.  


So, after extracting a savegame with UltimateEditor you get quite a ton of files. Here's an overview about them and the hexcode they contain:
After extracting a savegame with UltimateEditor you get quite a ton of files. Here's an overview about them and the hexcode they contain:


== General Information ==
== General Information ==
Line 19: Line 13:
* filename
* filename
* gamesave name
* gamesave name
* galaxy type
* galaxy shape
* galaxy size
* galaxy size
* minor race setting
* difficulty level
* difficulty level
* random events on/off
* strategical timer
* strategical timer
* tactical timer
* tactical timer
Line 34: Line 30:
* player names (if MP)
* player names (if MP)


Offset 0x0000 to 0x000D(?) filename (00 terminated)<br/>
Offset 0x0000 to 0x000C filename (00 terminated)<br/>
Offset 0x000D to 0x003E savename (00 terminated)<br/>
Offset 0x000D to 0x003F savename (00 terminated)<br/>
Offset 0x0040 last turn (for savename)<br/>
Offset 0x0040 last turn (for savename)<br/>
Offset 0x004C 00 = singleplayer 01 = multiplayer<br/>
Offset 0x004C 00 = singleplayer 01 = multiplayer<br/>
Offset 0x0250 important but unknown (crash if wrong)<br/>
Offset 0x0250 player empires bitmask<br/>
Offset 0x0252 player's race (00 = card, 01 = fed, 02=ferg, 03=kling, 04=rom)<br/>
Offset 0x0252 player empire (00 = card, 01 = fed, 02=ferg, 03=kling, 04=rom)<br/>
Offset 0x0254 to 0x0258 technology starting levels of the five majors (card, fed, ferg, kling, rom)<br/>
Offset 0x0253 predictor for starting EL of minor races<br/>
Offset 0x0260 galaxytype (00 = irregular, 01 = elliptic, 02 = ring, 03 = spiral)<br/>
Offset 0x0254 to 0x0258 technology starting levels for each major (card, fed, ferg, kling, rom)<br/>
Offset 0x0264 galaxyszie (00 = small, 01 = middle, 03 = big)<br/>
Offset 0x0260 galaxy shape (00 = irregular, 01 = elliptic, 02 = ring, 03 = spiral)<br/>
Offset 0x026C difficulty (00 = very easy, 01 = easy, 02 = normal, 03 = hard, 04 = impossible)<br/>
Offset 0x0264 galaxy size (00 = small, 01 = middle, 03 = big)<br/>
Offset 0x0270 to 0x0275(?) races in game (bitwise XOR, little endian (8bit packets) => order is the same with alienInfo)<br/>
Offset 0x0268 Minor Races setting (0=none, ..., 3=many)<br />
Offset 0x026C difficulty level (00 = simple, 01 = easy, 02 = normal, 03 = hard, 04 = impossible; attention, deviation with dynamic key variables)<br/>
Offset 0x026E random events (0=OFF, 1=ON)<br />
Offset 0x0270 races in game (bitwise XOR, little endian (8bit packets) => order is the same with alienInfo)<br/>
Offset 0x0278 beaten empires (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)<br/>
Offset 0x0278 beaten empires (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)<br/>
Offset 0x0280 to 0x0285(?) races with ships<br/>
Offset 0x0280 to 0x0285(?) races with ships<br/>
Offset 0x0290 tactical mode (0=DETAILED, 2=ABSTRACT)<br/>
Offset 0x0294 a cheat button bitmask<br/>
Offset 0x0298 (test nz) 1=trade guild strike, 2=subspace anomaly, 8=end trade strike, 10h=end anomaly<br/>
Offset 0x02A0 generated monsters bitmask ([http://www.armadafleetcommand.com/botf/modules.php?name=Forums&file=viewtopic&t=611&start=22 not loaded by game])<br />
Offset 0x02A4 strategical timer<br/>
Offset 0x02A4 strategical timer<br/>
Offset 0x02A8 tactical timer<br/>
Offset 0x02A8 tactical timer<br/>
Offset 0x02AC actual turn<br/>
Offset 0x02AC current turn<br/>
Offset 0x02AE last turn points (for statistic)<br/>
Offset 0x02AE last turn points (for statistic)<br/>
Offset 0x02BA(maybe less)+ statistic of the cards<br/>
Offset 0x02BA(maybe less)+ statistic of the cards<br/>
Line 71: Line 74:
* number of running dilithium sources
* number of running dilithium sources
* number of ships under construction
* number of ships under construction
* population (total ?)
* population total
* moral shown in empire state
* moral shown in empire state
* ship-population support
* ship-population support
* empire-wide ground combat bonus
* known empires (for diplomacy)
* known empires (for diplomacy)


Line 80: Line 84:
Offset 0x0000 to 0x0027 empire name<br/>
Offset 0x0000 to 0x0027 empire name<br/>
Offset 0x0028 to 0x004F emperor name<br/>
Offset 0x0028 to 0x004F emperor name<br/>
Offset 0x0050 to 0x0053 = address of gdlList ? (8 bytes per system), at [+4] number of held systems<br/>
Offset 0x0050 to 0x0053 address of provInfo (8 bytes per system), at[+4] number of held systems
Offset 0x0054 to 0x0057 credits (for F1 emps info display)<br/>
----
Offset 0x0058 to 0x005B income (for F1 emps info display, not updated properly for AI players, could be due to cheats ?)<br/>
=> [area 0x54 to 0x97 -> GUI / preview]<br/>
Offset 0x005C to 0x005F real ship support cost ? (- pop support)<br/>
Offset 0x0054 to 0x0057 credits<br/>
Offset 0x0058 to 0x005B income<br/>
Offset 0x005C to 0x005F real fleet support cost (i.e. -pop support) + building support costs (cf. 0x00A0)<br/>
Offset 0x0060 to 0x0063 number of running dilithium sources<br/>
Offset 0x0060 to 0x0063 number of running dilithium sources<br/>
Offset 0x0064 to 0x0067 number of ships under construction<br/>
Offset 0x0064 to 0x0067 number of ships under construction<br/>
Offset 0x0068 to 0x006B = current research points different if changed during that turn AI shows 0<br/>
Offset 0x0068 to 0x006B current research points<br/>
Offset 0x006C to 0x006F population (?main system or total?)<br/>
Offset 0x006C to 0x006F cumulated total population<br/>
Offset 0x0070 to 0x0073 unknown<br/>
Offset 0x0070 to 0x0071 unused<br/>
Offset 0x0074 to 0x0077 = current morale ?<br/>
Offset 0x0072 to 0x0073 unknown<br/>
Offset 0x0078 to 0x007B current intel different if changed during that turn AI shows 0<br/>
Offset 0x0074 to 0x0075 morale shown in empire state (cf. 0x00B8)<br/>
Offset 0x007C to 0x0093 unknown<br/>
Offset 0x0076 to 0x0077 unknown<br/>
Offset 0x0094 to 0x0097 ship-population support (not updated properly for AI players, could be due to cheats ?)<br/>
Offset 0x0078 to 0x007B current intel<br/>
Offset 0x007C to 0x0093 (6 tech areas * 4bytes) cumulated research bonus in percent<br/>
Offset 0x0094 to 0x0097 ship-population support (0 if fleetcost is larger i.e. not always the display value)<br/>
=> [area 0x98 to 0xDB -> effective used values (displacement 0x44)]<br/>
Offset 0x0098 to 0x009B credits<br/>
Offset 0x0098 to 0x009B credits<br/>
Offset 0x009C to 0x00AB unknown<br/>
Offset 0x009C to 0x009F income (used as empire strength indicator for base of gifts & demands)<br/>
Offset 0x00AC to 0x00AF = research at end of last turn<br/>
Offset 0x00A0 to 0x00A3 real fleet support cost (i.e. -pop support) + building support costs (from edifice.bst+7E, subtracted from credits each turn)<br/>
Offset 0x00B0 to 0x00B3 unknown (originaly thought to be ship-population support)<br/>
Offset 0x00A4 to 0x00A7 number of running dilithium sources<br/>
Offset 0x00B4 to 0x00B7 unknown<br/>
Offset 0x00A8 to 0x00AB number of ships under construction<br/>
Offset 0x00B8 to 0x00B9 moral shown in empire state (signed integer, little endian! 0xFCFF = rebellious, 0xFFFF = apathetic, 0x0000 = normal, 0x0300 = fanatic)<br/>
Offset 0x00AC to 0x00AF research total<br/>
Offset 0x00B0 to 0x00B3 cumulated total population (for ship support calculation)<br/>
Offset 0x00B4 to 0x00B5 empire-wide morale effect of current events (not at 0x70)<br/>
Offset 0x00B6 to 0x00B7 unknown<br/>
Offset 0x00B8 to 0x00B9 morale text (signed integer, little endian! -4 =Rebellious, -3 =Defiant, -2 =Disgruntled, -1=Apathetic, 0 =Content, 1 =Pleased, 2 = Loyal, 3 =Fanatic)<br/>
Offset 0x00BA to 0x00BB unknown<br/>
Offset 0x00BA to 0x00BB unknown<br/>
Offset 0x00BC to 0x00BF = intel total<br/>
Offset 0x00BC to 0x00BF intel total<br/>
Offset 0x00C0 to 0x010F unknown<br/>
Offset 0x00C0 to 0x00D7 (6 tech areas * 4bytes) cumulated research bonus in percent<br/>
Offset 0x00D8 to 0x00DB ship-population support (0 if fleetcost is larger)
----
=> [area 0xDC to 0xF5 -> GUI / preview]<br/>
Offset 0x00DC to 0x00DD +% credits<br/>
Offset 0x00DE to 0x00DF empire-wide morale bonus<br/>
Offset 0x00E0 to 0x00E1 +% raiding (not working)<br/>
Offset 0x00E2 to 0x00E3 +% industry (missing feature)<br/>
Offset 0x00E4 to 0x00E5 +% research (all areas)<br/>
Offset 0x00E6 to 0x00E7 +% security<br/>
Offset 0x00E8 to 0x00E9 +% espionage total<br/>
Offset 0x00EA to 0x00EB +% sabotage total<br/>
Offset 0x00EC to 0x00ED +% economic intel (not working)<br/>
Offset 0x00EE to 0x00EF +% scientific intel (not working/missing feature)<br/>
Offset 0x00F0 to 0x00F1 +% military intel (not working/missing feature)<br/>
Offset 0x00F2 to 0x00F3 +% traderoute credits<br/>
Offset 0x00F4 to 0x00F5 +% ground combat (e.g. Hall of Warriors)<br/>
=> [area 0xF6 to 0x10F -> effective used values (displacement 0x1A)]<br/>
Offset 0x00F6 to 0x00F7 +% credits<br/>
Offset 0x00F8 to 0x00F9 empire-wide morale bonus<br/>
Offset 0x00FA to 0x00FB +% raiding (not working)<br/>
Offset 0x00FC to 0x00FD +% industry (missing feature)<br/>
Offset 0x00FE to 0x00FF +% research (all areas)<br/>
Offset 0x0100 to 0x0101 +% security<br/>
Offset 0x0102 to 0x0103 +% espionage total<br/>
Offset 0x0104 to 0x0105 +% sabotage total<br/>
Offset 0x0106 to 0x0107 +% economic intel (not working)<br/>
Offset 0x0108 to 0x0109 +% scientific intel (not working/missing feature)<br/>
Offset 0x010A to 0x010B +% military intel (not working/missing feature)<br/>
Offset 0x010C to 0x010D +% traderoute credits<br/>
Offset 0x010E to 0x010F +% ground combat (e.g. Hall of Warriors)
----
Offset 0x0110 to 0x0123 (5empires * 4bytes) = treaty label: 0=Neutral, 1=War, 2=Alliance, 3=Peace<br/>
Offset 0x0110 to 0x0123 (5empires * 4bytes) = treaty label: 0=Neutral, 1=War, 2=Alliance, 3=Peace<br/>
Offset 0x0124 to 0x0137 (5empires * 4bytes) = territory accessible: 0=No, 1=Yes<br/>
Offset 0x0124 to 0x0137 (5empires * 4bytes) = territory accessible: 0=No, 1=Yes<br/>
Offset 0x0138 to 0x014B (5empires * 4bytes) = trade allowed: 0=No, 1=Yes<br/>
Offset 0x0138 to 0x014B (5empires * 4bytes) = trade allowed: 0=No, 1=Yes<br/>
Offset 0x014C to 0x0157 unknown<br/>
Offset 0x014C to 0x014F total number of traderoutes<br/>
Offset 0x0150 unknown<br/>
Offset 0x0151 to 0x0153 unused?<br/>
Offset 0x0154 to 0x0157 address of  trdeInfo<br/>
Offset 0x0158 to 0x015F known races (bitwise XOR with 0x01 = card, 0x02 = fed, 0x04 = ferg, 0x08 = kling, 0x10 = rom, 0x20 = acam ...)<br/>
Offset 0x0158 to 0x015F known races (bitwise XOR with 0x01 = card, 0x02 = fed, 0x04 = ferg, 0x08 = kling, 0x10 = rom, 0x20 = acam ...)<br/>
Offset 0x0160 to 0x01B3 unknown<br/>
Offset 0x0160 to 0x01AF present (or in production queue) "one per empire" 2 byte building IDs, 40 entries max.<br/>
Offset 0x01B4 to 0x01B7 = cumulative build costs of fleet (ship functions 0-4)<br/>
Offset 0x01B0 to 0x01B3 random events bitmask<br />
Offset 0x01B8 to 0x01BB unknown
Offset 0x01B4 to 0x01B7 cumulated build cost of war fleet (ship functions 0-4)<br/>
Offset 0x01B8 to 0x01BB credits lost due to raids, subtracted from [0x98]


== Aliens ==
== Aliens ==
Line 122: Line 170:
Offset 0x0000 = 01 if race is alive<br/>
Offset 0x0000 = 01 if race is alive<br/>
Offset 0x0018 = starID of homesystem<br/>
Offset 0x0018 = starID of homesystem<br/>
Offset 0x001C = address of ?[at +4 address of alienTFInfo entry?, number of hold fleets/ships]<br/>
Offset 0x0020 = known races (bitwise XOR with 0x01 = card, 0x02 = fed, 0x04 = ferg, 0x08 = kling, 0x10 = rom, 0x20 = acam ...)<br/>
Offset 0x0020 = known races (bitwise XOR with 0x01 = card, 0x02 = fed, 0x04 = ferg, 0x08 = kling, 0x10 = rom, 0x20 = acam ...)<br/>
Offset 0x0024 = known races (IDs 0x20+)<br/>
Offset 0x0024 = known races (IDs 0x20+)<br/>
Line 129: Line 178:
== Map ==
== Map ==
=== galInfo ===
=== galInfo ===
* galaxy size (small/middle/big)
* galaxy shape (irregular, elliptic, ring, spiral)
* galaxy size (small, medium, large)
* count of sectors
* count of sectors
* count of stars
* count of stars
* count of anomalies
* count of anomalies
* count of outposts/starbases


Offset 0x0008 to 0x000B = galaxy size (00 = small, 01 = middle, 02 = big)<br/>
Offset 0x0004 to 0x0007 = galaxy shape (0=irregular, 1=elliptic, 2=ring, 3=spiral)<br/>
Offset 0x0008 to 0x000B = galaxy size (0 = small, 1 = medium, 2 = large)<br/>
Offset 0x000C to 0x000D = number of stars<br/>
Offset 0x000C to 0x000D = number of stars<br/>
Offset 0x000E to 0x000F = number of anomalies<br/>
Offset 0x000E to 0x000F = number of anomalies<br/>
Offset 0x0010 to 0x0011 = number of outposts/starbases<br/>
Offset 0x0014 to 0x0015 = number of sectors
Offset 0x0014 to 0x0015 = number of sectors


Line 170: Line 223:
Offset 0x0028 to 0x0029 = explored by majors (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)<br/>
Offset 0x0028 to 0x0029 = explored by majors (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)<br/>
Offset 0x0030 to 0x0031 = sector scanned by majors (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom, 20 = blackhole)<br/>
Offset 0x0030 to 0x0031 = sector scanned by majors (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom, 20 = blackhole)<br/>
Offset 0x0038 to 0x003B = if >0 sector monster occupied?<br/>
Offset 0x003C to 0x003F = address of  ???, lists all task forces in sector (8 bytes/taskforce)<br/>
Offset 0x0040 to 0x0043 = scanpower of card (signed, little endian)<br/>
Offset 0x0040 to 0x0043 = scanpower of card (signed, little endian)<br/>
Offset 0x0044 to 0x0047 = scanpower of fed (signed, little endian)<br/>
Offset 0x0044 to 0x0047 = scanpower of fed (signed, little endian)<br/>
Offset 0x0048 to 0x004B = scanpower of ferg (signed, little endian)<br/>
Offset 0x0048 to 0x004B = scanpower of ferg (signed, little endian)<br/>
Offset 0x004C to 0x004F = scanpower of kling (signed, little endian)<br/>
Offset 0x004C to 0x004F = scanpower of kling (signed, little endian)<br/>
Offset 0x0050 to 0x0054 = scanpower of rom (signed, little endian)
Offset 0x0050 to 0x0053 = scanpower of rom (signed, little endian)<br/>
Offset 0x0054 to 0x0067= (5empires * 4bytes) = sector accessible: 0=No, 1=Yes (cf. empsInfo+124h)


=== stellInfo ===
=== stellInfo ===
Line 210: Line 266:
gives a view of the galaxy map for every empire<br/>
gives a view of the galaxy map for every empire<br/>
decreasing values around home system position<br/>
decreasing values around home system position<br/>
might be relevant for the influence of systems to mark the territory
<br/>
Some observations regarding the ownership claim and the sphere of influence value:<br/>
 
- sectors owned by an empire are only under that empire's influence<br/>
- non-membered minor race sectors can be under the influence of more than one empire<br/>
- disputed sectors are under the influence of at least two empires<br/>
- unclaimed sectors may be under influence of empires as well<br/>
- the value of the influence is not the deciding factor whether a sector is claimed or not, for example a sector with value 10 may or may not be claimed<br/>
- editing sector.lst claim data and setting empire influence in the sector to 0 will not remove the empire's claim of a disputed sector<br/>


== Systems ==
== Systems ==
Line 253: Line 317:
* green star = 73 2D 67 2D
* green star = 73 2D 67 2D
* blue star = 73 2D 62 2D
* blue star = 73 2D 62 2D
Offset 0x0036 to 0x003E unknown<br/>
Offset 0x003F = system explored by empires (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)<br/>
Offset 0x003F = system explored by empires (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)<br/>
Offset 0x0040 to 0x0041 = population (uninhabited = FF FF)<br/>
Offset 0x0040 to 0x0043 = population (uninhabited 0x40-0x41 = FF FF, but also read as dword)<br/>
Offset 0x0044 to 0x0047 = race of population<br/>
Offset 0x0044 to 0x0047 = raceID of population<br/>
Offset 0x004C to 0x004D = raceID ( = owner, noone = 23)<br/>
Offset 0x004C to 0x004F = owner raceID (noone, minor & rebel = 23h)<br/>
Offset 0x0050 to 0x0053 = starID<br/>
Offset 0x0050 to 0x0053 = starID<br/>
Offset 0x0054 to 0x0057 = people assigned to economy<br/>
Offset 0x0054 to 0x0057 = people assigned to economy<br/>
Line 263: Line 328:
Offset 0x0060 to 0x0063 = people assigned to science<br/>
Offset 0x0060 to 0x0063 = people assigned to science<br/>
Offset 0x0064 to 0x0067 = people assigned to intelligence<br/>
Offset 0x0064 to 0x0067 = people assigned to intelligence<br/>
Offset 0x0068 to 0x0069 = random value 0-99 (Minos 0-499) for up to 6 uninhabited systems<br/>
Offset 0x006A to 0x006B = number of planets <= 09 00<br/>
Offset 0x006A to 0x006B = number of planets <= 09 00<br/>
Offset 0x006E = dilithium icon F1-map (0=No, 1=Yes)<br/>
Offset 0x006C to 0x006D = number of ? (cf. 0x00B8)<br/>
Offset 0x006F = unknown (majors = 05, uninhabited = 00, ? = 02,...)<br/>
Offset 0x006E to 0x006F = dilithium resource level (0, 1, 2, 3, 4, 5, or 10), set by subroutine 4B7A50, if>0 dilithium icon gets shown (F1-map)<br/>
Offset 0x0070 unknown<br/>
Offset 0x0070 to 0x0073 = given system requirements bitmask for buildings (panet types & dilithium, e.g. 0x71 or 0x8 = dilithium flag)<br/>
Offset 0x0071 = effective dilithium ? (0=No, 8=Yes)<br/>
Offset 0x0074 to 0x0077 = planet atmospheres bitmask (minor races only, sub_4B49C0)<br/>
Offset 0x0072 to 0x0077 unkown<br/>
Offset 0x0078 to 0x007B = galaxy map picture position x (5 per sector)<br/>
Offset 0x0078 to 0x007B = galaxy map picture position x (5 per sector)<br/>
Offset 0x007C to 0x007F = galaxy map picture position y (5 per sector)<br/>
Offset 0x007C to 0x007F = galaxy map picture position y (5 per sector)<br/>
Offset 0x0080 to 0x0083 = ORDER ECONOMY (typeID) 1=build building, 2=upgrade building(s), 3=build ship, 5=tradegoods, 7=unrest order<br/>
Offset 0x0080 to 0x0083 = ORDER ECONOMY (typeID) 1=build building, 2=upgrade building(s), 3=build ship, 5=tradegoods, 7=unrest order<br/>
Offset 0x0084 to 0x0087 = invested industry<br/>
Offset 0x0084 to 0x0085 = invested industry<br/>
Offset 0x0088 to 0x008B = ID of building/ship under construction<br/>
Offset 0x0086 to 0x0087 = turn count for unrest order delay<br/>
Offset 0x008C to 0x00AB unknown<br/>
Offset 0x0088 to 0x0089 = edifice.bst ID of building under construction (else 7F FF)<br/>
Offset 0x00AC to 0x00AF = ? number of entries in strcInfo ?<br/>
Offset 0x008A to 0x008B = new edifice.bst building ID for uprgades (else 7F FF)<br/>
Offset 0x00B0 to 0x00BB = base offset of planet entry array ?<br/>
Offset 0x008C to 0x008F = total cost of upgrade<br/>
Offset 0x00BC to 0x00BD = max population * 10<br/>
Offset 0x0090 to 0x0091 = shiplist.sst ID of ship under construction (else FF FF)<br/>
Offset 0x0220 unknown (=32 for colonys (?))<br/>
Offset 0x0092 to 0x00A7 unknown<br/>
Offset 0x0298 to 0x029B = FF FF FF FF (used as base offset for moral entries)<br/>
Offset 0x00A8 to 0x00AB = address of GUI data for production Queue, length 0x6C<br/>
Offset 0x00AC to 0x00AF = address of strcInfo<br/>
Offset 0x00B0 to 0x00B3 = address of planet entry array, length 0x4C/planet (cf. 0x0328+)<br/>
Offset 0x00B4 to 0x00B7 = address of  ???, length 4bytes/planet<br/>
Offset 0x00B8 to 0x00BB = address of  ???, length 0x40 * unknown at [0x006C]<br/>
Offset 0x00BC to 0x00BD = max population * 10 (for a feature of edifice.bst+7A)<br/>
Offset 0x00BE to 0x00BF unknown
----
=> [area 0xC0 to 0x17F -> GUI / preview]<br/>
Offset 0x00C0 to 0x00C3 = cumulated edifice.bst output of main Food<br/>
Offset 0x00C4 to 0x00C7 = +% food (blg + planet bonuses)<br/>
Offset 0x00C8 to 0x00CB = cumulated edifice.bst output of main Energy<br/>
Offset 0x00CC to 0x00CF = +% energy (blg + planet bonuses)<br/>
Offset 0x00D0 to 0x00D3 = cumulated edifice.bst output of main Industry<br/>
Offset 0x00D4 to 0x00D7 = +% industry<br/>
Offset 0x00D8 to 0x00DB = cumulated edifice.bst output of main Research<br/>
Offset 0x00DC to 0x00DF = +% research (not working)<br/>
Offset 0x00E0 to 0x00E3 = +% research empire-wide (all areas)<br/>
Offset 0x00E4 to 0x00E7 = + Credits (blg output 0x4 = tradegoods -> unused)<br/>
Offset 0x00E8 to 0x00EB = +% credits<br/>
Offset 0x00EC to 0x00EF = +% total credits (i.e. empire-wide)<br/>
Offset 0x00F0 to 0x00F3 = Shield per Energy Tech<br/>
Offset 0x00F4 to 0x00F7 = + Morale (blg output 0x14 -> e.g. Holo Cinema)<br/>
Offset 0x00F8 to 0x00FB = cumulated edifice.bst output of main Intel<br/>
Offset 0x00FC to 0x00FF = +% general intelligence (& +% intel local -> bug)<br/>
Offset 0x0100 to 0x0103 = +% intel total<br/>
Offset 0x0104 to 0x0107 = +% security<br/>
Offset 0x0108 to 0x010B = +% espionage total<br/>
Offset 0x010C to 0x010F = +% sabotage total<br/>
Offset 0x0110 to 0x0113 = +% economic intel (not working)<br/>
Offset 0x0114 to 0x0117 = Anti-Ship Defenses (base output of running OBs)<br/>
Offset 0x0118 to 0x011B = Ship experience<br/>
Offset 0x011C to 0x011F = Builds Ships (i.e. yard output value -> unused)<br/>
Offset 0x0120 to 0x0123 = +% biotech research<br/>
Offset 0x0124 to 0x0127 = +% computer research<br/>
Offset 0x0128 to 0x012B = +% construction research<br/>
Offset 0x012C to 0x012F = +% propulsion research<br/>
Offset 0x0130 to 0x0133 = +% weapon research<br/>
Offset 0x0134 to 0x0137 = +% energy research<br/>
Offset 0x0138 to 0x013B = Scan range<br/>
Offset 0x013C to 0x013F = Dilithium (running)<br/>
Offset 0x0140 to 0x0143 = + Trade routes<br/>
Offset 0x0144 to 0x0147 = unused<br/>
Offset 0x0148 to 0x014B = + Morale empire-wide<br/>
Offset 0x014C to 0x014F = +/- Morale (extra morale [edifice.bst+82h] & unrest order)<br/>
Offset 0x0150 to 0x0153 = +% income on trade route (empire-wide)<br/>
Offset 0x0154 to 0x0157 = +% ground defense<br/>
Offset 0x0158 to 0x015B = +% raiding (not working)<br/>
Offset 0x015C to 0x015F = unused<br/>
Offset 0x0160 to 0x0163 = + Food (local static bonus)<br/>
Offset 0x0164 to 0x0167 = + Energy (local static bonus)<br/>
Offset 0x0168 to 0x016B = + Industry (local static bonus -> missing feature?)<br/>
Offset 0x016C to 0x016F = + Intelligence (local static bonus)<br/>
Offset 0x0170 to 0x0173 = + Research (local static bonus)<br/>
Offset 0x0174 to 0x0177 = Shipbuilding bonus to industry (e.g. utopia planetia)<br/>
Offset 0x0178 to 0x017B = bribe resistance (minor member systems)<br/>
Offset 0x017C to 0x017F = +% ground combat (empire-wide)<br/>
=> [area 0x180 to 0x23F -> effective used values (displacement 0xC0)]<br/>
Offset 0x0180 to 0x0183 = cumulated edifice.bst output of main Food<br/>
Offset 0x0184 to 0x0187 = +% food (blg + planet bonuses)<br/>
Offset 0x0188 to 0x018B = cumulated edifice.bst output of main Energy<br/>
Offset 0x018C to 0x018F = +% energy (blg + planet bonuses)<br/>
Offset 0x0190 to 0x0193 = cumulated edifice.bst output of main Industry<br/>
Offset 0x0194 to 0x0197 = +% industry<br/>
Offset 0x0198 to 0x019B = cumulated edifice.bst output of main Research<br/>
Offset 0x019C to 0x019F = +% research (not working)<br/>
Offset 0x01A0 to 0x01A3 = +% research empire-wide (all areas)<br/>
Offset 0x01A4 to 0x01A7 = + Credits (blg output 0x4 = tradegoods -> unused)<br/>
Offset 0x01A8 to 0x01AB = +% credits<br/>
Offset 0x01AC to 0x01AF = +% total credits (i.e. empire-wide)<br/>
Offset 0x01B0 to 0x01B3 = Shield per Energy Tech<br/>
Offset 0x01B4 to 0x01B7 = + Morale (blg output 0x14 -> e.g. Holo Cinema)<br/>
Offset 0x01B8 to 0x01BB = cumulated edifice.bst output of main Intel<br/>
Offset 0x01BC to 0x01BF = +% general intelligence (& +% intel local -> bug)<br/>
Offset 0x01C0 to 0x01C3 = +% intel total<br/>
Offset 0x01C4 to 0x01C7 = +% security<br/>
Offset 0x01C8 to 0x01CB = +% espionage total<br/>
Offset 0x01CC to 0x01CF = +% sabotage total<br/>
Offset 0x01D0 to 0x01D3 = +% economic intel (not working)<br/>
Offset 0x01D4 to 0x01D7 = Anti-Ship Defenses (base output of running OBs)<br/>
Offset 0x01D8 to 0x01DB = Ship experience<br/>
Offset 0x01DC to 0x01DF = Builds Ships (i.e. yard output value -> unused)<br/>
Offset 0x01E0 to 0x01E3 = +% biotech research<br/>
Offset 0x01E4 to 0x01E7 = +% computer research<br/>
Offset 0x01E8 to 0x01EB = +% construction research<br/>
Offset 0x01EC to 0x01EF = +% propulsion research<br/>
Offset 0x01F0 to 0x01F3 = +% weapon research<br/>
Offset 0x01F4 to 0x01F7 = +% energy research<br/>
Offset 0x01F8 to 0x01FB = Scan range<br/>
Offset 0x01FC to 0x01FF = Dilithium (running)<br/>
Offset 0x0200 to 0x0203 = + Trade routes<br/>
Offset 0x0204 to 0x0207 = unused<br/>
Offset 0x0208 to 0x020B = + Morale empire-wide<br/>
Offset 0x020C to 0x020F = +/- Morale (extra morale [edifice.bst+82h] & unrest order)<br/>
Offset 0x0210 to 0x0213 = +% income on trade route (empire-wide)<br/>
Offset 0x0214 to 0x0217 = +% ground defense<br/>
Offset 0x0218 to 0x021B = +% raiding (not working)<br/>
Offset 0x021C to 0x021F = unused<br/>
Offset 0x0220 to 0x0223 = + Food (local static bonus)<br/>
Offset 0x0224 to 0x0227 = + Energy (local static bonus)<br/>
Offset 0x0228 to 0x022B = + Industry (local static bonus -> missing feature?)<br/>
Offset 0x022C to 0x022F = + Intelligence (local static bonus)<br/>
Offset 0x0230 to 0x0233 = + Research (local static bonus)<br/>
Offset 0x0234 to 0x0237 = Shipbuilding bonus to industry (e.g. utopia planetia)<br/>
Offset 0x0238 to 0x023B = bribe resistance (minor member systems)<br/>
Offset 0x023C to 0x023F  = +% ground combat (empire-wide)
----       
=> [area 0x240 to 0x297 -> GUI / preview]<br/>
Offset 0x0240 to 0x0243 = FF FF FF FF (unknown)<br/>
Offset 0x0244 to 0x0245 = unused<br/>
Offset 0x0246 to 0x0247 = % of manned vs total main Industry units<br/>
Offset 0x0248 to 0x0249 = % of manned vs total main Food units<br/>
Offset 0x024A to 0x024B = % of manned vs total main Energy units<br/>
Offset 0x024C to 0x024D = % of manned vs total main Intel units<br/>
Offset 0x024E to 0x024F = % of manned vs total main Research units<br/>
Offset 0x0250 to 0x0251 = unemployed population<br/>
Offset 0x0254 to 0x0255 = Food output total after bonuses<br/>
Offset 0x0258 to 0x0259 = Food surplus or shortfall<br/>
Offset 0x025A to 0x025B = Food consumption<br/>
Offset 0x025C to 0x025D = current pop*2 (for max growth popup -> wrong)<br/>
Offset 0x025E to 0x025F = Energy output total after bonuses<br/>
Offset 0x0260 to 0x0261 = Energy consumption<br/>
Offset 0x0262 to 0x0263 = Energy surplus or shortfall<br/>
Offset 0x0264 to 0x0265 = Credits output total after bonuses<br/>
Offset 0x0268 to 0x0269 = system Credits effective (i.e. -support costs)<br/>
Offset 0x026A to 0x026B = total building support cost of system (from edifice.bst+7E)<br/>
Offset 0x026C to 0x026F = Industry output total after bonuses<br/>
Offset 0x0270 to 0x0273 = Research output total after bonuses<br/>
Offset 0x0274 to 0x0277 = Dilithium (running) -> loaded from 0x013C<br/>
Offset 0x0278 to 0x027B = dilithium shortage indicator (unused)<br/>
Offset 0x027C to 0x027F = build ship marker (? cf. +80 =3)<br/>
Offset 0x0280 to 0x0283 = Intel output total after bonuses<br/>
Offset 0x0284 to 0x0285 = moral value<br/>
Offset 0x0286 to 0x0287 = moral text (cf. 0x02DE)<br/>
Offset 0x0288 to 0x028B = sets Industry output to zero if 1 (e.g. general strike)<br/>
Offset 0x028C to 0x028F = sets Credit output to zero if 1 (e.g. general strike)<br/>
Offset 0x0290 to 0x0293 = sets Research output to zero if 1 (e.g. general strike)<br/>
Offset 0x0294 to 0x0297 = sets Intel output to zero if 1 (e.g. general strike)<br/>
=> [area 0x298 to 0x2EF -> effective used values (displacement 0x58)]<br/>
Offset 0x0298 to 0x029B = FF FF FF FF (unknown)<br/>
Offset 0x029C to 0x029D = pop increase/loss due to growth/starvation<br/>
Offset 0x029E to 0x029F = % of manned vs total main Industry units<br/>
Offset 0x02A0 to 0x02A1 = % of manned vs total main Food units<br/>
Offset 0x02A2 to 0x02A3 = % of manned vs total main Energy units<br/>
Offset 0x02A4 to 0x02A5 = % of manned vs total main Intel units<br/>
Offset 0x02A6 to 0x02A7 = % of manned vs total main Research units<br/>
Offset 0x02A8 to 0x02A9 = unemployed population<br/>
Offset 0x02AC to 0x02AD = Food output total after bonuses<br/>
Offset 0x02B0 to 0x02B1 = Food surplus or shortfall<br/>
Offset 0x02B2 to 0x02B3 = Food consumption<br/>
Offset 0x02B4 to 0x02B5 = current pop*2 (for max growth popup -> wrong)<br/>
Offset 0x02B6 to 0x02B7 = Energy output total after bonuses<br/>
Offset 0x02B8 to 0x02B9 = Energy consumption<br/>
Offset 0x02BA to 0x02BB = Energy surplus or shortfall<br/>
Offset 0x02BC to 0x02BD = Credits output total after bonuses<br/>
Offset 0x02C0 to 0x02C1 = system Credits effective (i.e. -support costs)<br/>
Offset 0x02C2 to 0x02C3 = total building support cost of system (from edifice.bst+7E) + buy costs<br/>
Offset 0x02C4 to 0x02C7 = Industry output total after bonuses<br/>
Offset 0x02C8 to 0x02CB = Research output total after bonuses<br/>
Offset 0x02CC to 0x02CF = Dilithium (running) -> loaded from 0x01FC<br/>
Offset 0x02D0 to 0x02D3 = dilithium shortage indicator (unused)<br/>
Offset 0x02D4 to 0x02D7 = build ship marker (? cf. +80 =3)<br/>
Offset 0x02D8 to 0x02DB = Intel output total after bonuses<br/>
Offset 0x02DC to 0x02DD = moral value<br/>
Offset 0x02DC to 0x02DD = moral value<br/>
Offset 0x02DE to 0x2DF = moral text (signed integer, little endian! : -4 = Rebellious, -3 = Defiant, -2 = Disgruntled, -1= Apathetic, 0 = Content, 1 = Pleased, 2 =  Loyal, 3 = Fanatic)<br/>
Offset 0x02DE to 0x02DF = moral text (signed integer, little endian! : -4 = Rebellious, -3 = Defiant, -2 = Disgruntled, -1= Apathetic, 0 = Content, 1 = Pleased, 2 =  Loyal, 3 = Fanatic)<br/>
Offset 0x02F0 to 0x02F2 = base morale<br/>
Offset 0x02E0 to 0x02E3 = sets Industry output to zero if 1 (e.g. general strike)<br/>
Offset 0x02F4 unknown (maybe moral - normally 32hex = 50dez)<br/>
Offset 0x02E4 to 0x02E7 = sets Credit output to zero if 1 (e.g. general strike)<br/>
Offset 0x0309 unknown (for majors = 01)<br/>
Offset 0x02E8 to 0x02EB = sets Research output to zero if 1 (e.g. general strike)<br/>
Offset 0x02EC to 0x02EF = sets Intel output to zero if 1 (e.g. general strike)
----
Offset 0x02F0 to 0x02F1 = base morale<br/>
Offset 0x02F2 to 0x02F3 = unused<br/>
Offset 0x02F4 to 0x02F7 = unlocks positive/negative morale events if 0 (random manipulated, default 32h)<br/>
Offset 0x02F8 to 0x02F9 = edifice.bst ID of main Food (no 7F FF)<br/>
Offset 0x02FA to 0x02FB = edifice.bst ID of main Energy (no 7F FF)<br/>
Offset 0x02FC to 0x02FD = edifice.bst ID of main Industry (no 7F FF)<br/>
Offset 0x02FE to 0x02FF = edifice.bst ID of main Intel (no 7F FF)<br/>
Offset 0x0300 to 0x0301 = edifice.bst ID of main Research (no 7F FF)<br/>
Offset 0x0302 to 0x0303 unknown<br/>
Offset 0x0304 to 0x0307 = random events bitmask<br/>
Offset 0x0308 = number of incoming traderoutes<br/>
Offset 0x0309 = number of system traderoutes<br/>
Offset 0x030A to 0x030B unknown<br/>
Offset 0x030C to 0x030F = address of incoming traderoutes list<br/>
Offset 0x0310 to 0x0313 = address of system traderoutes list<br/>
Offset 0x0314 to 0x0317 = update worker assignments marker (f.e. after pop loss) -> bugged!<br/>
Offset 0x0318 to 0x031B = update powered buildings marker (f.e. after energy output reduction) -> bugged!<br/>
Offset 0x031C to 0x031F = skips traderoute & tradegoods output if not 0 (siege/Blockade marker? unused?)<br/>
Offset 0x0320 to 0x0323 = bombing marker -> skips pop growth if not 0<br/>
Offset 0x0324 to 0x0327 = production queue setting (0=manual, 1=automatic)
 
Offset 0x0328+ list of all planets of that starsystem
Offset 0x0328+ list of all planets of that starsystem
----
----
Line 298: Line 548:
Offset 0x036A to 0x036B = population bonus (few = 00 00, normal = 36 01, much = 6C02, else = normal)<br/>
Offset 0x036A to 0x036B = population bonus (few = 00 00, normal = 36 01, much = 6C02, else = normal)<br/>
Offset 0x036C to 0x036D = planetNr<br/>
Offset 0x036C to 0x036D = planetNr<br/>
Offset 0x0370 planet type (00 = arctic, 01 = barren, 02 = desert, 03 = gas giant, 04 = djungle, 05 = oceanic, 06 = earthlike, 07 = vulcanic, 08 = methanic, 09 = AUS, >09 = other)<br/>
Offset 0x0370 planet type (00 = arctic, 01 = barren, 02 = desert, 03 = gas giant, 04 = djungle, 05 = oceanic, 06 = earthlike, 07 = vulcanic, 08 = methanic???, 09 = AUS, >09 = other)<br/>
Offset 0x0372 to 0x0373 = 00 00
Offset 0x0372 to 0x0373 = 00 00
----
----
Offset [0x0328+0x004C*numberOfPlanets] to Offset [0x0328+0x004C*numberOfPlanets+0x0004*numberOfPlanets-0x0001]<br/>
Offset [0x0328+0x004C*numberOfPlanets] to Offset [0x0328+0x004C*numberOfPlanets+0x0004*numberOfPlanets-0x0001]<br/>
(for one planet that's Offset 0x0374 to 0x0377) = unknown (mostly 00 ... 00)<br/>
(for one planet that's Offset 0x0374 to 0x0377) = unknown (mostly 00 ... 00)<br/>
[if traderoutes are available:<br/>
[if traderoutes are available:<br/>
Offset afterwards = (number of incoming traderouts + number of system traderoutes) * (0x0002 length (16bit) raceID + 0x0002 length (16bit) tradeRouteNo. (tradeRouteNo + raceID = tradeRouteID))<br/>
Offset afterwards = (number of incoming traderouts + number of system traderoutes) * (0x0002 length (16bit) raceID + 0x0002 length (16bit) tradeRouteNo. (tradeRouteNo + raceID = tradeRouteID)]<br/>
] (don't know if and where the number of traderoutes is stored)<br/>
 
[if it's a players system:<br/>
[if it's a players system:<br/>
Offset afterwards = unknown, length = 0x006C<br/>
Offset afterwards = player GUI data for production Queue, length = 0x006C]<br/>
]


what a complicated file...
what a complicated file...
Line 319: Line 569:
* building type
* building type
* building count
* building count
* building is activated / has energy (for special buildings)
* number of activated (powered on) buildings (for special buildings and orbitals)


stored in variable blocksizes, depending on number of different building types<br/>
stored in variable blocksizes, depending on number of different building types<br/>
Line 326: Line 576:
[for number of entrys:<br/>
[for number of entrys:<br/>
Offset 0x0004 to 0x0005 = building count<br/>
Offset 0x0004 to 0x0005 = building count<br/>
Offset 0x0006 to 0x0007 = building type (same order as in stbof.res and UE)<br/>
Offset 0x0006 to 0x0007 = building type (same order as in [[stbof.res]] and UE, it's the building ID in [[edifice.bst]])<br/>
Offset 0x0008 to 0x0009 = receives energy (00 00 = false, 00 01 = true)<br/>
Offset 0x0008 to 0x000B = number of activated buildings (dword)]
Offset 0x000A to 0x000B = 00 00 (always?)<br/>
]


== Research ==
== Research ==
Line 335: Line 583:
<span style="color:#0000FF">hexview width: 108</span><br/>
<span style="color:#0000FF">hexview width: 108</span><br/>
lists science by raceID
lists science by raceID
* raceID
 
Contains:
 
* science levels
* science levels
* technology level
* technology levels
* science points done by science type
* science points done by science type
* actual science assignation
* actual science assignation
* actually buildable buildings
* actually buildable buildings
<br/>
<b>General file structure</b>


explained only for one race<br/>
Offset 0x0000 to 0x0001 = number of races in the game (major + minor)<br/>
Offset 0x0000 to 0x0001 = number of races (major + minor)<br/>
Offset 0x0002 to 0x0047 = list of tech entry indexes (35 slots for 35 races each 2 bytes in size, slots for races not in the game usually point to the first tech entry index -> 0)<br/>
[for number of races:<br/>
Offset 0x0048 to 0x00AB = list of empire science assignations (20 bytes per empire)<br/>
Offset length 0x0002 = raceID<br/>
Offset 0x00AC to +8*[minor races in game]= evolution data(2bytes/entry: current EL, advancement chance next turn in %, default chance multiplier, bonus/turn)<br/>
]<br/>
<br/>
[for number of races:<br/>
followed by a list of tech entries that have the same structure as those in [[racetech.tec]]<br/>
Offset length 0x0012 = unknown (always = 00 ... 00 ?)<br/>
<br/>
]<br/>
<b>List of empire science assignations</b><br/>
[for number of races:<br/>
Contains 5 entries - one for each empire.<br/>
Offset length 0x0006 = unknown (always = 00 ... 00 ?)<br/>
<br/>
Entry structure:<br/>
<br/>
Offset length 0x0006 = unknown<br/>
Offset length 0x0002 = science assignation biotech<br/>
Offset length 0x0002 = science assignation biotech<br/>
Offset length 0x0002 = science assignation computer<br/>
Offset length 0x0002 = science assignation computer<br/>
Line 358: Line 613:
Offset length 0x0002 = science assignation engines<br/>
Offset length 0x0002 = science assignation engines<br/>
Offset length 0x0002 = science assignation weapons<br/>
Offset length 0x0002 = science assignation weapons<br/>
Offset length 0x0002 = unknown (always = 00 00 ?)<br/>
Offset length 0x0002 = unknown<br/>
]<br/>
<br/>
[for number of races:<br/>
<b>List of tech entries</b><br/>
Number of entries equals number of races listed in this file. The list of tech entry indexes links each race to it's tech entry. The first entry carries the index 0, the next 1 and so on.<br/>
<br/>
Entry structure:<br/>
<br/>
Offset length 0x0002 = raceID<br/>
Offset length 0x0002 = raceID<br/>
Offset length 0x0002 = unknown<br/>
Offset length 0x0002 = unknown<br/>
Line 381: Line 640:
Offset length 0x0002 = unknown<br/>
Offset length 0x0002 = unknown<br/>
Offset length 0x0004 = FP done<br/>
Offset length 0x0004 = FP done<br/>
Offset length 0x0002 = technology level<br/>
Offset length 0x0002 = lowest technology level (for all techs requirement)<br/>
Offset length 0x0002 = unknown<br/>
Offset length 0x0006 = unknown<br/>
Offset length 0x0004 = FP done<br/>
 
Offset length 0x000B = buildable special buildings (bitwise XOR, same order as in stbof.res and UE, but little endian: mirrored 8bit blocks)
Offset length 0x000B = buildable special buildings (bitwise XOR, same order as in stbof.res and UE, but little endian: mirrored 8bit blocks)
* &0x8000000000000000000000 = phenix device
* &0x8000000000000000000000 = phenix device
Line 474: Line 733:
* &0x0000000000000000000001 = mythology library (of the Tamarians)Offset length 0x001D = buildable normal buildings / upgrades (bitwise XOR, same order as in stbof.res and UE, but little endian: mirrored 8bit blocks)
* &0x0000000000000000000001 = mythology library (of the Tamarians)Offset length 0x001D = buildable normal buildings / upgrades (bitwise XOR, same order as in stbof.res and UE, but little endian: mirrored 8bit blocks)
Offset length 0x0008 = unknown (always 00 ... 00 ?)<br/>
Offset length 0x0008 = unknown (always 00 ... 00 ?)<br/>
]


== Intel ==
== Intel ==
=== intelInfo ===
=== intelInfo ===
<span style="color:#0000FF">hexview width: 16</span><br/>
<span style="color:#0000FF">hexview width: 16</span><br/>
mostly unknown - seems to include intel reports
* actual intel assignation for every major


Offset 0x0000 to 0x02D7 unknown<br/>
0x0000 to 0x0057 unknown<br/>
[for all five majors: blocklength = 0x2C1C<br/>
0x0058 to 0x02D7 (5 empires * 0x80) = empire stats intel screen data (not the stats), structure:<br/>
Offset length 0x0070 = unknown<br/>
+0x0 (4 bytes * 4 other empires) = turn number of last update<br/>
Offset length 0x0002 = intelligance assignation of internal security<br/>
+0x10-0x7F = unknown<br/>
]
 
0x02D8 to 0xDF63 (5 empires * 0x2C1C) = block structure: (for +0x4 to +0x5B see [http://www.armadafleetcommand.com/botf/phpBB3/viewtopic.php?p=31490&sid=c8f4bdeff8fbc10843ec88f3ccc2368b#p31490 intel.bin])<br/>
+0x0 = index value for all areas output (loops +1/turn 0-13h)<br/>
+0x4 (4 bytes * 5 empires) = base for espionage attack threshold<br/>
+0x18 (4 bytes * 5 empires) = base for sabotage attack threshold<br/>
+0x2C (4 bytes * 8 empsInfo morale labels) = security defense modifier%<br/>
+0x4C (4 bytes * 4 empsInfo treaty labels) = attack threshold modifier%<br/>
+0x5C = unused ?<br/>
+0x60 (4 bytes * 4 enemies) = department setting (0=general, 1=economy, 2=science, 3=military)<br/>
+0x70 (4 bytes * 9 areas -> security 0, espionage 1-4, sabotage 5-8) = percentage assignation<br/>
+0x94-0xA3 = unknown<br/>
+0xA4 (9 areas * 0x58 bytes) = block structure:
+0x0 = turn number of last intel attack (unless security)
+0x4 = stockpile points for attack threshold, re-set to 0 if attack (unless security)
+0x8 (4 bytes * 20 turns) = area output of the last 20 turns
+0x3BC (4 bytes * 4 enemies * 4 departments) = agents training status 1-1Eh (+/- 2 turn)<br/>
+0x3FC = index for reports 41+ (loops 0-27h) -> overwrite/clear old pointer ?<br/>
+0x400 = index for next intel report (loops 0-27h)<br/>
+0x404 = number of intel reports (28h max.)<br/>
+0x408-0x2C07 (up to 40 Intel reports * 0x100 bytes) = block structure:
+0x0 = Index value of report
+0x4 = turn number of event
+0x8 = blamed ? race ID or -1
+0x9 = opponent race ID ?
+0xA-0xB = unknown
+0xC = index for report list ?
+0x10 = report text
+0x?? to 0xFF = unknown
+0x2C08 (4 bytes * 5 empires) = turn number of last intel attack?


== Diplomacy ==
== Diplomacy ==
Line 508: Line 792:
lists fleetIDs of every race
lists fleetIDs of every race
* number of taskforces/fleets
* number of taskforces/fleets
* shipIDs
* fleet IDs


[for [numberOfRaces]:<br/>
Offset 0x0000 to 0x0003 = number of controled fleets<br/>
Offset 0x0000 to 0x0003 = number of controled fleets<br/>
[for [numberOfRaces]:<br/>
Offset length 0x0002 = fleetID]
Offset length 0x0002 = fleetID<br/>
]


=== shipname.dat ===
=== shipname.dat ===
Line 540: Line 823:
next fleetID
next fleetID


=== GShipHead = GTForceHd = GWTForceHd ===
=== GShipHead = GTForceHd = GWTForceHd = GTFStasisHd ===
* number of ships


Offset 0x0018 to 0x001B = ship count
These are global list headers.
 
<table border="1">
<tr>
<th>Header</th>
<th>List</th>
<th>Contains</th>
</tr>
<tr>
<td>GShipHead</td>
<td>GShipList</td>
<td>Ships</td>
</tr>
<tr>
<td>GTForceHd</td>
<td>GTForceList</td>
<td>Task forces</td>
</tr>
<tr>
<td>GWTForceHd</td>
<td>GWTForce</td>
<td>Task forces</td>
</tr>
<tr>
<td>GTFStasisHd</td>
<td>GTFStasis</td>
<td>Unknown</td>
</tr>
</table>
 
 
Identified fields:
 
* slot size
* total number of slots in list
* number of occupied slots (slots with data)
 
 
File structure (40 bytes):
 
Offset 0x0000 to 0x000F = unknown<br>
Offset 0x0010 to 0x0013 = slot size<br>
Offset 0x0014 to 0x0017 = total number of slots<br>
Offset 0x0018 to 0x001B = number of occupied slots<br>
Offset 0x000C to 0x0027 = unknown


=== GShipList ===
=== GShipList ===
Line 560: Line 886:
* crew experience value
* crew experience value
* crew experience level
* crew experience level
* base ground combat strength


stored in blocks of 0x0074<br/>
stored in blocks of 0x0074<br/>
Line 574: Line 901:
Offset 0x0048 to 0x004F = unknown<br/>
Offset 0x0048 to 0x004F = unknown<br/>
Offset 0x0050 to 0x0051 = fleetID<br/>
Offset 0x0050 to 0x0051 = fleetID<br/>
Offset 0x0052 to 0x0055 = ship type (manufactoring type, used as shiplistID in stbof.res, e.g. in shiptech.sst and is in same order as in UE)<br/>
Offset 0x0052 to 0x0053 = ship type (manufactoring type, used as shiplistID in stbof.res, e.g. in shiptech.sst and is in same order as in UE)<br/>
Offset 0x0056 to 0x0073 = unknown
Offset 0x0054 to 0x0057 = unknown<br/>
Offset 0x0058 to 0x005B = cloak indicator for battles 1=yes<br/>
Offset 0x005C to 0x005F = shipfunction/=value:[0/8, 1/10, 2/6, 3/2, 4/4, 5-8/0, 9/1] +shiptech.sst computer +propulsion tech requirements<br/>
Offset 0x0060 to 0x0063 = (for warships only /function 0-4) value at 5C + map speed<br/>
Offset 0x0064 to 0x0067 = (for warships only /function 0-4) shiptech.sst computer + weapon tech requirements, if >0 bombing capable<br/>
Offset 0x0068 to 0x006B = unknown<br/>
Offset 0x006C to 0x006F = (for TTs only) 50 times shiptech.sst construction tech requirement<br/>
Offset 0x0070 to 0x0073 = base ground combat strength (i.e. TT production value /10)


=== GTForceList = GWTForce ===
=== GTForceList = GWTForce ===
Line 587: Line 921:
* sector row
* sector row
* sector column
* sector column
* scanrange
* first Colony ShipID
* flightrange
* control category
* contains colony ships
* scan range
* flight range
* speed
* speed
* order (evade, attack,...)
* order (evade, attack,...)
Line 609: Line 946:
* 01 = terraform
* 01 = terraform
* 02 = colonize
* 02 = colonize
* 03 = rade
* 03 = raid
* 04 = intercept
* 04 = intercept
* 05 = evade
* 05 = evade
Line 622: Line 959:
* 0E = attack system
* 0E = attack system
* >0E = invalid
* >0E = invalid
Offset 0x0030 to 0x0033 = unknown<br/>
Offset 0x0030 to 0x0033 = for TT based system attacks  (1 = conquer, else liberate)<br/>
Offset 0x0034 to 0x0037 = raceID<br/>
Offset 0x0034 to 0x0037 = raceID<br/>
Offset 0x0038 to 0x003B = sector row (GTForceList => next turn, GWTForce => actual turn)<br/>
Offset 0x0038 to 0x003B = sector row (GTForceList => next turn, GWTForce => actual turn)<br/>
Offset 0x003C to 0x003F = sector column (GTForceList => next turn, GWTForce => actual turn)<br/>
Offset 0x003C to 0x003F = sector column (GTForceList => next turn, GWTForce => actual turn)<br/>
Offset 0x0040 to 0x0043 = unknown<br/>
Offset 0x0040 to 0x0043 = ability bitmask<br/>
Offset 0x0044 to 0x0047 = unknown<br/>
Offset 0x0044 to 0x0047 = first Colony shipID (same as one of the ship slots values)<br/>
Offset 0x0048 to 0x004B = unknown<br/>
Offset 0x0048 to 0x004B = unknown<br/>
Offset 0x004C to 0x004F = unknown<br/>
Offset 0x004C to 0x004F = control category (1 - major empire, 2 - minor race, 3 - alien)<br/>
Offset 0x0050 to 0x0051 = unknown<br/>
Offset 0x0050 to 0x0051 = contains colony ships (0 - no, 1 - yes)<br/>
Offset 0x0052 to 0x0053 = scan range, keeps only one turn<br/>
Offset 0x0052 to 0x0053 = scan range, keeps only one turn<br/>
Offset 0x0054 to 0x005D = unknown<br/>
Offset 0x0054 to 0x0057 = unknown<br/>
Offset 0x005E to 0x005F = flight range, keeps only one turn (short = 00 00, middle = F03F, high = 0040)<br/>
Offset 0x0058 to 0x005F = flight range, keeps only one turn (double precision floating point number; short = 0, middle = 1, high = 2)<br/>
Offset 0x0060 to 0x0065 = unknown<br/>
Offset 0x0060 to 0x0067 = speed, keeps only one turn (double precision floating point number; values 0 to 5)<br/>
Offset 0x0066 to 0x0067 = speed, keeps only one turn (0 = 00 00, 1 = F0 3F, 2 = 00 40, 3 = 08 40, 4 = 10 40)<br/>
Offset 0x0068 to 0x006B = cloaking (01 00 00 00 = cloaked, else 00 00 00 00)
Offset 0x0068 to 0x006B = cloaking (01 00 00 00 = cloaked, else 00 00 00 00)


=== GTFStasis ===
=== GTFStasis ===
number of starbases/outposts (guessed)
unknown (was thought to be number of starbases/outposts)
 
=== GTFStasisHd ===
unexplored


=== starBaseInfo ===
=== starBaseInfo ===
Line 651: Line 984:
* ship function (valid values are 6 for outpost and 7 for starbase)
* ship function (valid values are 6 for outpost and 7 for starbase)
* ship type (links to shiplist.sst entry)
* ship type (links to shiplist.sst entry)
* sector row
* sector column
* sector column
* sector row
* production/build cost (usually same as ship build cost in [[shiplist.sst]])
* production invested (outpost completion is production invested/production cost)
* hull
* hull
<br/>
<br/>
Line 662: Line 997:
Offset 0x002C to 0x002D = ship function<br/>
Offset 0x002C to 0x002D = ship function<br/>
Offset 0x002E to 0x002F = ship type<br/>
Offset 0x002E to 0x002F = ship type<br/>
Offset 0x0030 to 0x0033 = sector column<br/>
Offset 0x0030 to 0x0033 = sector row / y coord<br/>
Offset 0x0034 to 0x0037 = sector row<br/>
Offset 0x0034 to 0x0037 = sector column / x coord<br/>
Offset 0x0038 to 0x004B = unknown<br/>
Offset 0x0038 to 0x003F = production cost (8 byte floating point number - double)<br/>
Offset 0x0040 to 0x0047 = production invested (8 byte floating point number - double)<br/>
Offset 0x0048 to 0x004B = scan range<br/>
Offset 0x004C to 0x004F = hull<br/>
Offset 0x004C to 0x004F = hull<br/>
Offset 0x0050 to 0x005B = unknown<br/>
Offset 0x0050 to 0x005B = unknown<br/>
Line 747: Line 1,084:
=== ordInfo ===
=== ordInfo ===
<span style="color:#0000FF">hexview width: 84</span><br/>
<span style="color:#0000FF">hexview width: 84</span><br/>
mostly unknown, includes peace proposals
Mostly unknown, includes peace proposals, system and fleet orders...
 
Each entry in this file contains two segments - a header and a body.<br>
<br>
<b>Header structure</b>
 
Size of the header is constant for all entries and is 32 bytes.
 
It contains:
 
* entry hash
* turn of occurrence
* raceID
* raceID
* turn of occurance
* order type
* starID
* body size in bytes
<br>
Detailed structure:


has variable blocksizes!<br/>
Offset 0x0000 to 0x0003 = entry hash - unknown hashing function, applies either to the body only or the whole entry (exluding the hash)<br/>
on turn 1 there's only one for each major starsystem with a blocksize of 0x0054<br/>
Offset 0x0004 to 0x0007 = turn of occurrence<br/>
Offset 0x0004 to 0x0007 = turn of occurance<br/>
Offset 0x0008 to 0x000B = raceID<br/>
Offset 0x0008 to 0x000B = raceID<br/>
Offset 0x0024 to 0x0025 = starID
Offset 0x000C to 0x000F = unknown<br/>
Offset 0x0010 to 0x0013 = order type (0 - system order, 2 - fleet order, others unknown)<br/>
Offset 0x0014 to 0x001B = unknown<br/>
Offset 0x001C to 0x001F = size of the body in bytes<br/>
 
Size of the body depends on type - it might even vary independent of type.
Body size of orders for fleets and systems seems to be 52 bytes which together with the header amounts to 84 bytes per entry.
<br>
<br>
<b>Fleet order body structure (type 2)</b>
 
Contains:
 
* target sector row
* target sector column
* source sector row
* source sector column
* fleetID
* scan range ?
* map speed ?
<br>
Detailed structure:
 
Offset 0x0000 to 0x0003 = unknown<br/>
Offset 0x0004 to 0x0007 = target sector row<br/>
Offset 0x0008 to 0x000B = target sector column<br/>
Offset 0x000C to 0x000F = source sector row<br/>
Offset 0x0010 to 0x0013 = source sector column<br/>
Offset 0x0014 to 0x001B = unknown<br/>
Offset 0x001C to 0x001D = fleetID<br/>
Offset 0x001E to 0x002B = unknown<br/>
Offset 0x002C to 0x002F = scan range ?<br/>
Offset 0x0030 to 0x0033 = map speed ?<br/>
 
The source sector row and column mark the sector that the fleet was in when it initially received the order not the current location. For ships terraforming planets the source location is usually set to row -1 and column -1.


=== SeedInfo ===
=== SeedInfo ===

Latest revision as of 22:08, 17 May 2016

This is a list of the explored content within the save games. For learning to use this information, also have a look at Editing_Savegames!

Please aware that some information might be incomplete or even incorrect.

After extracting a savegame with UltimateEditor you get quite a ton of files. Here's an overview about them and the hexcode they contain:

General Information

version

  • for me it's always 08

gameInfo

  • filename
  • gamesave name
  • galaxy shape
  • galaxy size
  • minor race setting
  • difficulty level
  • random events on/off
  • strategical timer
  • tactical timer
  • actual and next turn
  • player race
  • races in game (major + minor)
  • races with ships (major + minor)
  • races beaten
  • goal (vendetta/dominance)
  • empire status informations (occupied systems, science, economy, military)
  • statistic
  • player names (if MP)

Offset 0x0000 to 0x000C filename (00 terminated)
Offset 0x000D to 0x003F savename (00 terminated)
Offset 0x0040 last turn (for savename)
Offset 0x004C 00 = singleplayer 01 = multiplayer
Offset 0x0250 player empires bitmask
Offset 0x0252 player empire (00 = card, 01 = fed, 02=ferg, 03=kling, 04=rom)
Offset 0x0253 predictor for starting EL of minor races
Offset 0x0254 to 0x0258 technology starting levels for each major (card, fed, ferg, kling, rom)
Offset 0x0260 galaxy shape (00 = irregular, 01 = elliptic, 02 = ring, 03 = spiral)
Offset 0x0264 galaxy size (00 = small, 01 = middle, 03 = big)
Offset 0x0268 Minor Races setting (0=none, ..., 3=many)
Offset 0x026C difficulty level (00 = simple, 01 = easy, 02 = normal, 03 = hard, 04 = impossible; attention, deviation with dynamic key variables)
Offset 0x026E random events (0=OFF, 1=ON)
Offset 0x0270 races in game (bitwise XOR, little endian (8bit packets) => order is the same with alienInfo)
Offset 0x0278 beaten empires (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)
Offset 0x0280 to 0x0285(?) races with ships
Offset 0x0290 tactical mode (0=DETAILED, 2=ABSTRACT)
Offset 0x0294 a cheat button bitmask
Offset 0x0298 (test nz) 1=trade guild strike, 2=subspace anomaly, 8=end trade strike, 10h=end anomaly
Offset 0x02A0 generated monsters bitmask (not loaded by game)
Offset 0x02A4 strategical timer
Offset 0x02A8 tactical timer
Offset 0x02AC current turn
Offset 0x02AE last turn points (for statistic)
Offset 0x02BA(maybe less)+ statistic of the cards
Offset 0x04AE(maybe less)+ statistic of the feds
Offset 0x06A2(maybe less)+ statistic of the fergs
Offset 0x0896(maybe less)+ statistic of the klings
Offset 0x0A8A(maybe less)+ statistic of the roms
Offset 0x0C84+(?) empire state (intelligence)

  • Offset 0x0C8E+ military
  • Offset 0x0D06+ economy
  • Offset 0x0D1A+ science
  • Offset 0x0D92+ occupied systemsOffset

0x0DBC victory condition (00=single/Multi player dominance 01=Muilt player team dominance, 02=vendetta)

empsInfo

hexview width: 444
lists information about majors

  • empirenames
  • name of the emperor
  • credits
  • number of running dilithium sources
  • number of ships under construction
  • population total
  • moral shown in empire state
  • ship-population support
  • empire-wide ground combat bonus
  • known empires (for diplomacy)

is stored in blocks of 0x01BC length for every major
only the first one (card) gets explained
Offset 0x0000 to 0x0027 empire name
Offset 0x0028 to 0x004F emperor name
Offset 0x0050 to 0x0053 address of provInfo (8 bytes per system), at[+4] number of held systems


=> [area 0x54 to 0x97 -> GUI / preview]
Offset 0x0054 to 0x0057 credits
Offset 0x0058 to 0x005B income
Offset 0x005C to 0x005F real fleet support cost (i.e. -pop support) + building support costs (cf. 0x00A0)
Offset 0x0060 to 0x0063 number of running dilithium sources
Offset 0x0064 to 0x0067 number of ships under construction
Offset 0x0068 to 0x006B current research points
Offset 0x006C to 0x006F cumulated total population
Offset 0x0070 to 0x0071 unused
Offset 0x0072 to 0x0073 unknown
Offset 0x0074 to 0x0075 morale shown in empire state (cf. 0x00B8)
Offset 0x0076 to 0x0077 unknown
Offset 0x0078 to 0x007B current intel
Offset 0x007C to 0x0093 (6 tech areas * 4bytes) cumulated research bonus in percent
Offset 0x0094 to 0x0097 ship-population support (0 if fleetcost is larger i.e. not always the display value)
=> [area 0x98 to 0xDB -> effective used values (displacement 0x44)]
Offset 0x0098 to 0x009B credits
Offset 0x009C to 0x009F income (used as empire strength indicator for base of gifts & demands)
Offset 0x00A0 to 0x00A3 real fleet support cost (i.e. -pop support) + building support costs (from edifice.bst+7E, subtracted from credits each turn)
Offset 0x00A4 to 0x00A7 number of running dilithium sources
Offset 0x00A8 to 0x00AB number of ships under construction
Offset 0x00AC to 0x00AF research total
Offset 0x00B0 to 0x00B3 cumulated total population (for ship support calculation)
Offset 0x00B4 to 0x00B5 empire-wide morale effect of current events (not at 0x70)
Offset 0x00B6 to 0x00B7 unknown
Offset 0x00B8 to 0x00B9 morale text (signed integer, little endian! -4 =Rebellious, -3 =Defiant, -2 =Disgruntled, -1=Apathetic, 0 =Content, 1 =Pleased, 2 = Loyal, 3 =Fanatic)
Offset 0x00BA to 0x00BB unknown
Offset 0x00BC to 0x00BF intel total
Offset 0x00C0 to 0x00D7 (6 tech areas * 4bytes) cumulated research bonus in percent
Offset 0x00D8 to 0x00DB ship-population support (0 if fleetcost is larger)


=> [area 0xDC to 0xF5 -> GUI / preview]
Offset 0x00DC to 0x00DD +% credits
Offset 0x00DE to 0x00DF empire-wide morale bonus
Offset 0x00E0 to 0x00E1 +% raiding (not working)
Offset 0x00E2 to 0x00E3 +% industry (missing feature)
Offset 0x00E4 to 0x00E5 +% research (all areas)
Offset 0x00E6 to 0x00E7 +% security
Offset 0x00E8 to 0x00E9 +% espionage total
Offset 0x00EA to 0x00EB +% sabotage total
Offset 0x00EC to 0x00ED +% economic intel (not working)
Offset 0x00EE to 0x00EF +% scientific intel (not working/missing feature)
Offset 0x00F0 to 0x00F1 +% military intel (not working/missing feature)
Offset 0x00F2 to 0x00F3 +% traderoute credits
Offset 0x00F4 to 0x00F5 +% ground combat (e.g. Hall of Warriors)
=> [area 0xF6 to 0x10F -> effective used values (displacement 0x1A)]
Offset 0x00F6 to 0x00F7 +% credits
Offset 0x00F8 to 0x00F9 empire-wide morale bonus
Offset 0x00FA to 0x00FB +% raiding (not working)
Offset 0x00FC to 0x00FD +% industry (missing feature)
Offset 0x00FE to 0x00FF +% research (all areas)
Offset 0x0100 to 0x0101 +% security
Offset 0x0102 to 0x0103 +% espionage total
Offset 0x0104 to 0x0105 +% sabotage total
Offset 0x0106 to 0x0107 +% economic intel (not working)
Offset 0x0108 to 0x0109 +% scientific intel (not working/missing feature)
Offset 0x010A to 0x010B +% military intel (not working/missing feature)
Offset 0x010C to 0x010D +% traderoute credits
Offset 0x010E to 0x010F +% ground combat (e.g. Hall of Warriors)


Offset 0x0110 to 0x0123 (5empires * 4bytes) = treaty label: 0=Neutral, 1=War, 2=Alliance, 3=Peace
Offset 0x0124 to 0x0137 (5empires * 4bytes) = territory accessible: 0=No, 1=Yes
Offset 0x0138 to 0x014B (5empires * 4bytes) = trade allowed: 0=No, 1=Yes
Offset 0x014C to 0x014F total number of traderoutes
Offset 0x0150 unknown
Offset 0x0151 to 0x0153 unused?
Offset 0x0154 to 0x0157 address of trdeInfo
Offset 0x0158 to 0x015F known races (bitwise XOR with 0x01 = card, 0x02 = fed, 0x04 = ferg, 0x08 = kling, 0x10 = rom, 0x20 = acam ...)
Offset 0x0160 to 0x01AF present (or in production queue) "one per empire" 2 byte building IDs, 40 entries max.
Offset 0x01B0 to 0x01B3 random events bitmask
Offset 0x01B4 to 0x01B7 cumulated build cost of war fleet (ship functions 0-4)
Offset 0x01B8 to 0x01BB credits lost due to raids, subtracted from [0x98]

Aliens

alienInfo

hexview width: 64

  • races in game (major + minor)
  • starID of homesystem

stored in blocks of 0x0040 for every possible race
in same order as races in stbof.res or UE
only first one gets explained
Offset 0x0000 = 01 if race is alive
Offset 0x0018 = starID of homesystem
Offset 0x001C = address of ?[at +4 address of alienTFInfo entry?, number of hold fleets/ships]
Offset 0x0020 = known races (bitwise XOR with 0x01 = card, 0x02 = fed, 0x04 = ferg, 0x08 = kling, 0x10 = rom, 0x20 = acam ...)
Offset 0x0024 = known races (IDs 0x20+)
Offset 0x0028 (5empires * 4bytes) = treaty level (minors) 0=Neutral, 1=Friendly, 2=Affiliated, 3=Member, 4=War
Offset 0x003C = (for minors) 0=free diplomacy, 1=subjugated, 2=restricted diplomacy(membership)

Map

galInfo

  • galaxy shape (irregular, elliptic, ring, spiral)
  • galaxy size (small, medium, large)
  • count of sectors
  • count of stars
  • count of anomalies
  • count of outposts/starbases

Offset 0x0004 to 0x0007 = galaxy shape (0=irregular, 1=elliptic, 2=ring, 3=spiral)
Offset 0x0008 to 0x000B = galaxy size (0 = small, 1 = medium, 2 = large)
Offset 0x000C to 0x000D = number of stars
Offset 0x000E to 0x000F = number of anomalies
Offset 0x0010 to 0x0011 = number of outposts/starbases
Offset 0x0014 to 0x0015 = number of sectors

sector.lst

hexview width: 104
lists all sectors

  • sector row
  • sector column
  • outpostID
  • anomalyID
  • starID
  • sector scanned by race
  • sector explored by race
  • sector influenced by anomaly (?)
  • claim
  • owner of the sector
  • actual scan value by race

stored in blocks of 0x0068
only the first one gets explained
Offset 0x0000 to 0x0003 = map row
Offset 0x0004 to 0x0007 = map column
Offset 0x0008 to 0x0009 = outpostID from starBaseInfo or -1 if none
Offset 0x000A to 0x000B = anomalyID
Offset 0x000C to 0x000D = starID
Offset 0x000E to 0x000F = claim (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)
Offset 0x0010 to 0x0013 = 00 00 00 00 if owned by card, else FF FF FF FF
Offset 0x0014 to 0x0017 = 01 00 00 00 if owned by fed, else FF FF FF FF
Offset 0x0018 to 0x001B = 02 00 00 00 if owned by ferg, else FF FF FF FF
Offset 0x001C to 0x001F = 03 00 00 00 if owned by kling, else FF FF FF FF
Offset 0x0020 to 0x0023 = 04 00 00 00 if owned by rom, else FF FF FF FF
Offset 0x0024 to 0x0027 = [raceID] if owned by minor, else FF FF FF FF
Offset 0x0028 to 0x0029 = explored by majors (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)
Offset 0x0030 to 0x0031 = sector scanned by majors (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom, 20 = blackhole)
Offset 0x0038 to 0x003B = if >0 sector monster occupied?
Offset 0x003C to 0x003F = address of  ???, lists all task forces in sector (8 bytes/taskforce)
Offset 0x0040 to 0x0043 = scanpower of card (signed, little endian)
Offset 0x0044 to 0x0047 = scanpower of fed (signed, little endian)
Offset 0x0048 to 0x004B = scanpower of ferg (signed, little endian)
Offset 0x004C to 0x004F = scanpower of kling (signed, little endian)
Offset 0x0050 to 0x0053 = scanpower of rom (signed, little endian)
Offset 0x0054 to 0x0067= (5empires * 4bytes) = sector accessible: 0=No, 1=Yes (cf. empsInfo+124h)

stellInfo

hexview width: 88
lists all anomalies (in ID order?)

  • anomaly type
  • anomaly name
  • anomaly map picture
  • anomaly map picture position (x/y)
  • wormhole connections
  • visited by majors

stored in blocks of 0x0058
Offset 0x0000 to 0x0003 = type of anomaly (00 00 00 00 = blackhole, 01 00 00 00 = X-ray pulsar, 02 00 00 00 = nebula, 03 00 00 00 = neutron star, 0A 00 00 00 = wormhole, 0B 00 00 00 = radio pulsar)
Offset 0x0004 to 0x002B = anomaly name
Offset 0x002C to 0x003F = galaxy map picture file (00 terminated string: blackhole = "blkh" = 62 6C 6B 68, X-ray pulsar = "xp-" = 78 70 2D, nebula = "neb-" = 6E 65 62 2D, neutron star = "ns" = 6E 73, wormhole = "worm" = 77 6F 72 6D, radio pulsar = "rpls" = 72 70 6C 73)
Offset 0x0040 to 0x0041 = anomalyID for wormhole connection, else FF FF
Offset 0x0042 to 0x0043 = 00 00
Offset 0x0044 to 0x0047 = galaxy map picture position x (5 per sector)
Offset 0x0048 to 0x004B = galaxy map picture position y (5 per sector)
Offset 0x004C to 0x004F = galaxy map picture position x (5 per sector)
Offset 0x0050 to 0x0053 = galaxy map picture position y (5 per sector)
Offset 0x0054 to 0x0057 = sector visited by major (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)

RToSInfo

RToS = race to star (major + minor)
races are in the following order 1: Card 2: Fed 3: Ferg 4: Kling 5: Rom

  • starID of homesystem

lists StarIDs of the homesystems of all races, if not available = FF 00

SphOfIn0 to SphOfIn4

hexview width: [GalaxyMapWidth]
relevance unclear
gives a view of the galaxy map for every empire
decreasing values around home system position

Some observations regarding the ownership claim and the sphere of influence value:

- sectors owned by an empire are only under that empire's influence
- non-membered minor race sectors can be under the influence of more than one empire
- disputed sectors are under the influence of at least two empires
- unclaimed sectors may be under influence of empires as well
- the value of the influence is not the deciding factor whether a sector is claimed or not, for example a sector with value 10 may or may not be claimed
- editing sector.lst claim data and setting empire influence in the sector to 0 will not remove the empire's claim of a disputed sector

Systems

systInfo

hexview width: 76
lists all starsystems

  • system name
  • race (owner)
  • race (population)
  • population count
  • population orders (work assignation)
  • moral (value)
  • moral (shown text)
  • dilithium
  • system visited by race
  • star type
  • star picture
  • star picture position on map (x/y)
  • planet count
  • planetnames
  • planet animations
  • planet types
  • planet sizes (small/middle/big)
  • terraforming value total
  • terraforming value done
  • planet bonuses (population/energy/food => pure/normal/much)
  • incoming traderouts
  • traderoutes of the system

stored in variable blocksizes, depending on planetnumber, traderoutes and if it's a player's system only one example starsystem with a single planet gets explained
Offset 0x0000 to 0x0003 = starID
Offset 0x0004 to 0x0007 uninhabited = 00 00 00 00, AI = 00 00 00 01, player = 00 00 00 02
Offset 0x0008 to 0x002F = system name
Offset 0x0030 = system type (0=home, 1=native, 2=non native, 3=subjugated, 4=affiliated, 5=independent minor, 6=conquered home, 7&8=invalid?, 9=any, A=rebel, B=empty)
Offset 0x0031 = star type (red giant=04, orange=05, yellow=06, white=07, green=08, blue=09)
Offset 0x0032 to 0x0035 = star picture

  • red giant = 73 2D 72 2D
  • orange star = 73 2D 6F 2D
  • yellow star = 73 2D 79 2D
  • white star = 73 2D 77 2D
  • green star = 73 2D 67 2D
  • blue star = 73 2D 62 2D

Offset 0x0036 to 0x003E unknown
Offset 0x003F = system explored by empires (bitwise XOR with 01 = card, 02 = fed, 04 = ferg, 08 = kling, 10 = rom)
Offset 0x0040 to 0x0043 = population (uninhabited 0x40-0x41 = FF FF, but also read as dword)
Offset 0x0044 to 0x0047 = raceID of population
Offset 0x004C to 0x004F = owner raceID (noone, minor & rebel = 23h)
Offset 0x0050 to 0x0053 = starID
Offset 0x0054 to 0x0057 = people assigned to economy
Offset 0x0058 to 0x005B = people assigned to energy
Offset 0x005C to 0x005F = people assigned to food production
Offset 0x0060 to 0x0063 = people assigned to science
Offset 0x0064 to 0x0067 = people assigned to intelligence
Offset 0x0068 to 0x0069 = random value 0-99 (Minos 0-499) for up to 6 uninhabited systems
Offset 0x006A to 0x006B = number of planets <= 09 00
Offset 0x006C to 0x006D = number of ? (cf. 0x00B8)
Offset 0x006E to 0x006F = dilithium resource level (0, 1, 2, 3, 4, 5, or 10), set by subroutine 4B7A50, if>0 dilithium icon gets shown (F1-map)
Offset 0x0070 to 0x0073 = given system requirements bitmask for buildings (panet types & dilithium, e.g. 0x71 or 0x8 = dilithium flag)
Offset 0x0074 to 0x0077 = planet atmospheres bitmask (minor races only, sub_4B49C0)
Offset 0x0078 to 0x007B = galaxy map picture position x (5 per sector)
Offset 0x007C to 0x007F = galaxy map picture position y (5 per sector)
Offset 0x0080 to 0x0083 = ORDER ECONOMY (typeID) 1=build building, 2=upgrade building(s), 3=build ship, 5=tradegoods, 7=unrest order
Offset 0x0084 to 0x0085 = invested industry
Offset 0x0086 to 0x0087 = turn count for unrest order delay
Offset 0x0088 to 0x0089 = edifice.bst ID of building under construction (else 7F FF)
Offset 0x008A to 0x008B = new edifice.bst building ID for uprgades (else 7F FF)
Offset 0x008C to 0x008F = total cost of upgrade
Offset 0x0090 to 0x0091 = shiplist.sst ID of ship under construction (else FF FF)
Offset 0x0092 to 0x00A7 unknown
Offset 0x00A8 to 0x00AB = address of GUI data for production Queue, length 0x6C
Offset 0x00AC to 0x00AF = address of strcInfo
Offset 0x00B0 to 0x00B3 = address of planet entry array, length 0x4C/planet (cf. 0x0328+)
Offset 0x00B4 to 0x00B7 = address of  ???, length 4bytes/planet
Offset 0x00B8 to 0x00BB = address of  ???, length 0x40 * unknown at [0x006C]
Offset 0x00BC to 0x00BD = max population * 10 (for a feature of edifice.bst+7A)
Offset 0x00BE to 0x00BF unknown


=> [area 0xC0 to 0x17F -> GUI / preview]
Offset 0x00C0 to 0x00C3 = cumulated edifice.bst output of main Food
Offset 0x00C4 to 0x00C7 = +% food (blg + planet bonuses)
Offset 0x00C8 to 0x00CB = cumulated edifice.bst output of main Energy
Offset 0x00CC to 0x00CF = +% energy (blg + planet bonuses)
Offset 0x00D0 to 0x00D3 = cumulated edifice.bst output of main Industry
Offset 0x00D4 to 0x00D7 = +% industry
Offset 0x00D8 to 0x00DB = cumulated edifice.bst output of main Research
Offset 0x00DC to 0x00DF = +% research (not working)
Offset 0x00E0 to 0x00E3 = +% research empire-wide (all areas)
Offset 0x00E4 to 0x00E7 = + Credits (blg output 0x4 = tradegoods -> unused)
Offset 0x00E8 to 0x00EB = +% credits
Offset 0x00EC to 0x00EF = +% total credits (i.e. empire-wide)
Offset 0x00F0 to 0x00F3 = Shield per Energy Tech
Offset 0x00F4 to 0x00F7 = + Morale (blg output 0x14 -> e.g. Holo Cinema)
Offset 0x00F8 to 0x00FB = cumulated edifice.bst output of main Intel
Offset 0x00FC to 0x00FF = +% general intelligence (& +% intel local -> bug)
Offset 0x0100 to 0x0103 = +% intel total
Offset 0x0104 to 0x0107 = +% security
Offset 0x0108 to 0x010B = +% espionage total
Offset 0x010C to 0x010F = +% sabotage total
Offset 0x0110 to 0x0113 = +% economic intel (not working)
Offset 0x0114 to 0x0117 = Anti-Ship Defenses (base output of running OBs)
Offset 0x0118 to 0x011B = Ship experience
Offset 0x011C to 0x011F = Builds Ships (i.e. yard output value -> unused)
Offset 0x0120 to 0x0123 = +% biotech research
Offset 0x0124 to 0x0127 = +% computer research
Offset 0x0128 to 0x012B = +% construction research
Offset 0x012C to 0x012F = +% propulsion research
Offset 0x0130 to 0x0133 = +% weapon research
Offset 0x0134 to 0x0137 = +% energy research
Offset 0x0138 to 0x013B = Scan range
Offset 0x013C to 0x013F = Dilithium (running)
Offset 0x0140 to 0x0143 = + Trade routes
Offset 0x0144 to 0x0147 = unused
Offset 0x0148 to 0x014B = + Morale empire-wide
Offset 0x014C to 0x014F = +/- Morale (extra morale [edifice.bst+82h] & unrest order)
Offset 0x0150 to 0x0153 = +% income on trade route (empire-wide)
Offset 0x0154 to 0x0157 = +% ground defense
Offset 0x0158 to 0x015B = +% raiding (not working)
Offset 0x015C to 0x015F = unused
Offset 0x0160 to 0x0163 = + Food (local static bonus)
Offset 0x0164 to 0x0167 = + Energy (local static bonus)
Offset 0x0168 to 0x016B = + Industry (local static bonus -> missing feature?)
Offset 0x016C to 0x016F = + Intelligence (local static bonus)
Offset 0x0170 to 0x0173 = + Research (local static bonus)
Offset 0x0174 to 0x0177 = Shipbuilding bonus to industry (e.g. utopia planetia)
Offset 0x0178 to 0x017B = bribe resistance (minor member systems)
Offset 0x017C to 0x017F = +% ground combat (empire-wide)
=> [area 0x180 to 0x23F -> effective used values (displacement 0xC0)]
Offset 0x0180 to 0x0183 = cumulated edifice.bst output of main Food
Offset 0x0184 to 0x0187 = +% food (blg + planet bonuses)
Offset 0x0188 to 0x018B = cumulated edifice.bst output of main Energy
Offset 0x018C to 0x018F = +% energy (blg + planet bonuses)
Offset 0x0190 to 0x0193 = cumulated edifice.bst output of main Industry
Offset 0x0194 to 0x0197 = +% industry
Offset 0x0198 to 0x019B = cumulated edifice.bst output of main Research
Offset 0x019C to 0x019F = +% research (not working)
Offset 0x01A0 to 0x01A3 = +% research empire-wide (all areas)
Offset 0x01A4 to 0x01A7 = + Credits (blg output 0x4 = tradegoods -> unused)
Offset 0x01A8 to 0x01AB = +% credits
Offset 0x01AC to 0x01AF = +% total credits (i.e. empire-wide)
Offset 0x01B0 to 0x01B3 = Shield per Energy Tech
Offset 0x01B4 to 0x01B7 = + Morale (blg output 0x14 -> e.g. Holo Cinema)
Offset 0x01B8 to 0x01BB = cumulated edifice.bst output of main Intel
Offset 0x01BC to 0x01BF = +% general intelligence (& +% intel local -> bug)
Offset 0x01C0 to 0x01C3 = +% intel total
Offset 0x01C4 to 0x01C7 = +% security
Offset 0x01C8 to 0x01CB = +% espionage total
Offset 0x01CC to 0x01CF = +% sabotage total
Offset 0x01D0 to 0x01D3 = +% economic intel (not working)
Offset 0x01D4 to 0x01D7 = Anti-Ship Defenses (base output of running OBs)
Offset 0x01D8 to 0x01DB = Ship experience
Offset 0x01DC to 0x01DF = Builds Ships (i.e. yard output value -> unused)
Offset 0x01E0 to 0x01E3 = +% biotech research
Offset 0x01E4 to 0x01E7 = +% computer research
Offset 0x01E8 to 0x01EB = +% construction research
Offset 0x01EC to 0x01EF = +% propulsion research
Offset 0x01F0 to 0x01F3 = +% weapon research
Offset 0x01F4 to 0x01F7 = +% energy research
Offset 0x01F8 to 0x01FB = Scan range
Offset 0x01FC to 0x01FF = Dilithium (running)
Offset 0x0200 to 0x0203 = + Trade routes
Offset 0x0204 to 0x0207 = unused
Offset 0x0208 to 0x020B = + Morale empire-wide
Offset 0x020C to 0x020F = +/- Morale (extra morale [edifice.bst+82h] & unrest order)
Offset 0x0210 to 0x0213 = +% income on trade route (empire-wide)
Offset 0x0214 to 0x0217 = +% ground defense
Offset 0x0218 to 0x021B = +% raiding (not working)
Offset 0x021C to 0x021F = unused
Offset 0x0220 to 0x0223 = + Food (local static bonus)
Offset 0x0224 to 0x0227 = + Energy (local static bonus)
Offset 0x0228 to 0x022B = + Industry (local static bonus -> missing feature?)
Offset 0x022C to 0x022F = + Intelligence (local static bonus)
Offset 0x0230 to 0x0233 = + Research (local static bonus)
Offset 0x0234 to 0x0237 = Shipbuilding bonus to industry (e.g. utopia planetia)
Offset 0x0238 to 0x023B = bribe resistance (minor member systems)
Offset 0x023C to 0x023F = +% ground combat (empire-wide)


=> [area 0x240 to 0x297 -> GUI / preview]
Offset 0x0240 to 0x0243 = FF FF FF FF (unknown)
Offset 0x0244 to 0x0245 = unused
Offset 0x0246 to 0x0247 = % of manned vs total main Industry units
Offset 0x0248 to 0x0249 = % of manned vs total main Food units
Offset 0x024A to 0x024B = % of manned vs total main Energy units
Offset 0x024C to 0x024D = % of manned vs total main Intel units
Offset 0x024E to 0x024F = % of manned vs total main Research units
Offset 0x0250 to 0x0251 = unemployed population
Offset 0x0254 to 0x0255 = Food output total after bonuses
Offset 0x0258 to 0x0259 = Food surplus or shortfall
Offset 0x025A to 0x025B = Food consumption
Offset 0x025C to 0x025D = current pop*2 (for max growth popup -> wrong)
Offset 0x025E to 0x025F = Energy output total after bonuses
Offset 0x0260 to 0x0261 = Energy consumption
Offset 0x0262 to 0x0263 = Energy surplus or shortfall
Offset 0x0264 to 0x0265 = Credits output total after bonuses
Offset 0x0268 to 0x0269 = system Credits effective (i.e. -support costs)
Offset 0x026A to 0x026B = total building support cost of system (from edifice.bst+7E)
Offset 0x026C to 0x026F = Industry output total after bonuses
Offset 0x0270 to 0x0273 = Research output total after bonuses
Offset 0x0274 to 0x0277 = Dilithium (running) -> loaded from 0x013C
Offset 0x0278 to 0x027B = dilithium shortage indicator (unused)
Offset 0x027C to 0x027F = build ship marker (? cf. +80 =3)
Offset 0x0280 to 0x0283 = Intel output total after bonuses
Offset 0x0284 to 0x0285 = moral value
Offset 0x0286 to 0x0287 = moral text (cf. 0x02DE)
Offset 0x0288 to 0x028B = sets Industry output to zero if 1 (e.g. general strike)
Offset 0x028C to 0x028F = sets Credit output to zero if 1 (e.g. general strike)
Offset 0x0290 to 0x0293 = sets Research output to zero if 1 (e.g. general strike)
Offset 0x0294 to 0x0297 = sets Intel output to zero if 1 (e.g. general strike)
=> [area 0x298 to 0x2EF -> effective used values (displacement 0x58)]
Offset 0x0298 to 0x029B = FF FF FF FF (unknown)
Offset 0x029C to 0x029D = pop increase/loss due to growth/starvation
Offset 0x029E to 0x029F = % of manned vs total main Industry units
Offset 0x02A0 to 0x02A1 = % of manned vs total main Food units
Offset 0x02A2 to 0x02A3 = % of manned vs total main Energy units
Offset 0x02A4 to 0x02A5 = % of manned vs total main Intel units
Offset 0x02A6 to 0x02A7 = % of manned vs total main Research units
Offset 0x02A8 to 0x02A9 = unemployed population
Offset 0x02AC to 0x02AD = Food output total after bonuses
Offset 0x02B0 to 0x02B1 = Food surplus or shortfall
Offset 0x02B2 to 0x02B3 = Food consumption
Offset 0x02B4 to 0x02B5 = current pop*2 (for max growth popup -> wrong)
Offset 0x02B6 to 0x02B7 = Energy output total after bonuses
Offset 0x02B8 to 0x02B9 = Energy consumption
Offset 0x02BA to 0x02BB = Energy surplus or shortfall
Offset 0x02BC to 0x02BD = Credits output total after bonuses
Offset 0x02C0 to 0x02C1 = system Credits effective (i.e. -support costs)
Offset 0x02C2 to 0x02C3 = total building support cost of system (from edifice.bst+7E) + buy costs
Offset 0x02C4 to 0x02C7 = Industry output total after bonuses
Offset 0x02C8 to 0x02CB = Research output total after bonuses
Offset 0x02CC to 0x02CF = Dilithium (running) -> loaded from 0x01FC
Offset 0x02D0 to 0x02D3 = dilithium shortage indicator (unused)
Offset 0x02D4 to 0x02D7 = build ship marker (? cf. +80 =3)
Offset 0x02D8 to 0x02DB = Intel output total after bonuses
Offset 0x02DC to 0x02DD = moral value
Offset 0x02DE to 0x02DF = moral text (signed integer, little endian! : -4 = Rebellious, -3 = Defiant, -2 = Disgruntled, -1= Apathetic, 0 = Content, 1 = Pleased, 2 = Loyal, 3 = Fanatic)
Offset 0x02E0 to 0x02E3 = sets Industry output to zero if 1 (e.g. general strike)
Offset 0x02E4 to 0x02E7 = sets Credit output to zero if 1 (e.g. general strike)
Offset 0x02E8 to 0x02EB = sets Research output to zero if 1 (e.g. general strike)
Offset 0x02EC to 0x02EF = sets Intel output to zero if 1 (e.g. general strike)


Offset 0x02F0 to 0x02F1 = base morale
Offset 0x02F2 to 0x02F3 = unused
Offset 0x02F4 to 0x02F7 = unlocks positive/negative morale events if 0 (random manipulated, default 32h)
Offset 0x02F8 to 0x02F9 = edifice.bst ID of main Food (no 7F FF)
Offset 0x02FA to 0x02FB = edifice.bst ID of main Energy (no 7F FF)
Offset 0x02FC to 0x02FD = edifice.bst ID of main Industry (no 7F FF)
Offset 0x02FE to 0x02FF = edifice.bst ID of main Intel (no 7F FF)
Offset 0x0300 to 0x0301 = edifice.bst ID of main Research (no 7F FF)
Offset 0x0302 to 0x0303 unknown
Offset 0x0304 to 0x0307 = random events bitmask
Offset 0x0308 = number of incoming traderoutes
Offset 0x0309 = number of system traderoutes
Offset 0x030A to 0x030B unknown
Offset 0x030C to 0x030F = address of incoming traderoutes list
Offset 0x0310 to 0x0313 = address of system traderoutes list
Offset 0x0314 to 0x0317 = update worker assignments marker (f.e. after pop loss) -> bugged!
Offset 0x0318 to 0x031B = update powered buildings marker (f.e. after energy output reduction) -> bugged!
Offset 0x031C to 0x031F = skips traderoute & tradegoods output if not 0 (siege/Blockade marker? unused?)
Offset 0x0320 to 0x0323 = bombing marker -> skips pop growth if not 0
Offset 0x0324 to 0x0327 = production queue setting (0=manual, 1=automatic)

Offset 0x0328+ list of all planets of that starsystem


Offset 0x0328 to 0x034F = planetname (00 terminated)
Offset 0x0350 to 0x0357 = planet animation filename (= ****.ani)
Offset 0x0358 to 0x035D = 00 FB 57 00 30 59 (always?)
Offset 0x035E to 0x035F = planetNr
Offset 0x0360 to 0x0361 = planet size (small = 00 00, middle = 01 00, big = 02 00)
Offset 0x0362 to 0x0363 = terraforming value total
Offset 0x0364 to 0x0365 = terraforming value done
Offset 0x0366 to 0x0367 = food bonus (few = 00 00, normal = 36 01, much = 6C02, else = normal)
Offset 0x0368 to 0x0369 = energy bonus (few = 00 00, normal = 36 01, much = 6C02, else = normal)
Offset 0x036A to 0x036B = population bonus (few = 00 00, normal = 36 01, much = 6C02, else = normal)
Offset 0x036C to 0x036D = planetNr
Offset 0x0370 planet type (00 = arctic, 01 = barren, 02 = desert, 03 = gas giant, 04 = djungle, 05 = oceanic, 06 = earthlike, 07 = vulcanic, 08 = methanic???, 09 = AUS, >09 = other)
Offset 0x0372 to 0x0373 = 00 00


Offset [0x0328+0x004C*numberOfPlanets] to Offset [0x0328+0x004C*numberOfPlanets+0x0004*numberOfPlanets-0x0001]
(for one planet that's Offset 0x0374 to 0x0377) = unknown (mostly 00 ... 00)

[if traderoutes are available:
Offset afterwards = (number of incoming traderouts + number of system traderoutes) * (0x0002 length (16bit) raceID + 0x0002 length (16bit) tradeRouteNo. (tradeRouteNo + raceID = tradeRouteID)]

[if it's a players system:
Offset afterwards = player GUI data for production Queue, length = 0x006C]

what a complicated file...

strcInfo

hexview width: 4
lists all buildings for each star

  • starID
  • number of entries for each star
  • building type
  • building count
  • number of activated (powered on) buildings (for special buildings and orbitals)

stored in variable blocksizes, depending on number of different building types
Offset 0x0000 to 0x0001 = starID
Offset 0x0002 to 0x0003 = number of entrys
[for number of entrys:
Offset 0x0004 to 0x0005 = building count
Offset 0x0006 to 0x0007 = building type (same order as in stbof.res and UE, it's the building ID in edifice.bst)
Offset 0x0008 to 0x000B = number of activated buildings (dword)]

Research

techInfo

hexview width: 108
lists science by raceID

Contains:

  • science levels
  • technology levels
  • science points done by science type
  • actual science assignation
  • actually buildable buildings


General file structure

Offset 0x0000 to 0x0001 = number of races in the game (major + minor)
Offset 0x0002 to 0x0047 = list of tech entry indexes (35 slots for 35 races each 2 bytes in size, slots for races not in the game usually point to the first tech entry index -> 0)
Offset 0x0048 to 0x00AB = list of empire science assignations (20 bytes per empire)
Offset 0x00AC to +8*[minor races in game]= evolution data(2bytes/entry: current EL, advancement chance next turn in %, default chance multiplier, bonus/turn)

followed by a list of tech entries that have the same structure as those in racetech.tec

List of empire science assignations
Contains 5 entries - one for each empire.

Entry structure:

Offset length 0x0006 = unknown
Offset length 0x0002 = science assignation biotech
Offset length 0x0002 = science assignation computer
Offset length 0x0002 = science assignation construction
Offset length 0x0002 = science assignation energy
Offset length 0x0002 = science assignation engines
Offset length 0x0002 = science assignation weapons
Offset length 0x0002 = unknown

List of tech entries
Number of entries equals number of races listed in this file. The list of tech entry indexes links each race to it's tech entry. The first entry carries the index 0, the next 1 and so on.

Entry structure:

Offset length 0x0002 = raceID
Offset length 0x0002 = unknown
Offset length 0x0002 = science level biotech
Offset length 0x0002 = unknown
Offset length 0x0004 = FP done
Offset length 0x0002 = science level computer
Offset length 0x0002 = unknown
Offset length 0x0004 = FP done
Offset length 0x0002 = science level construction
Offset length 0x0002 = unknown
Offset length 0x0004 = FP done
Offset length 0x0002 = science level energy
Offset length 0x0002 = unknown
Offset length 0x0004 = FP done
Offset length 0x0002 = science level engines
Offset length 0x0002 = unknown
Offset length 0x0004 = FP done
Offset length 0x0002 = science level weapons
Offset length 0x0002 = unknown
Offset length 0x0004 = FP done
Offset length 0x0002 = lowest technology level (for all techs requirement)
Offset length 0x0006 = unknown

Offset length 0x000B = buildable special buildings (bitwise XOR, same order as in stbof.res and UE, but little endian: mirrored 8bit blocks)

  • &0x8000000000000000000000 = phenix device
  • &0x4000000000000000000000 = dilithium raffinery
  • &0x2000000000000000000000 = orbital cannon
  • &0x1000000000000000000000 = communication network
  • &0x0800000000000000000000 = charge collector
  • &0x0400000000000000000000 = bunker
  • &0x0200000000000000000000 = simple replicator
  • &0x0100000000000000000000 = improved replicator
  • &0x0080000000000000000000 = shipyard
  • &0x0040000000000000000000 = isolinear scanner
  • &0x0020000000000000000000 = listening post
  • &0x0010000000000000000000 = subspace scanner
  • &0x0008000000000000000000 = subautomatic simulator
  • &0x0004000000000000000000 = thery simulator
  • &0x0002000000000000000000 = private farm
  • &0x0001000000000000000000 = oceanic farm
  • &0x0000800000000000000000 = obsedian congregation
  • &0x0000400000000000000000 = reeducation center
  • &0x0000200000000000000000 = union yard
  • &0x0000100000000000000000 = shield generator
  • &0x0000080000000000000000 = wind turbine
  • &0x0000040000000000000000 = trade goods
  • &0x0000020000000000000000 = trade center
  • &0x0000010000000000000000 = agrarian store
  • &0x0000008000000000000000 = trade tower
  • &0x0000004000000000000000 = trade commission
  • &0x0000002000000000000000 = holo cinema
  • &0x0000001000000000000000 = fantasy land
  • &0x0000000800000000000000 = inquisition
  • &0x0000000400000000000000 = work camp
  • &0x0000000200000000000000 = command center
  • &0x0000000100000000000000 = hidden sensor grid
  • &0x0000000080000000000000 = laws of war
  • &0x0000000040000000000000 = utopia planetia
  • &0x0000000020000000000000 = starfleet academy
  • &0x0000000010000000000000 = federation council
  • &0x0000000008000000000000 = daystorm institute
  • &0x0000000004000000000000 = genesis sciencelab
  • &0x0000000002000000000000 = festival of fun
  • &0x0000000001000000000000 = franchise office
  • &0x0000000000800000000000 = astronomic academy
  • &0x0000000000400000000000 = singularity facility
  • &0x0000000000200000000000 = center for fighttests
  • &0x0000000000100000000000 = police state
  • &0x0000000000080000000000 = tactical school
  • &0x0000000000040000000000 = big hall
  • &0x0000000000020000000000 = prison mine
  • &0x0000000000010000000000 = hall of warriors
  • &0x0000000000008000000000 = military yard
  • &0x0000000000004000000000 = federation yard
  • &0x0000000000002000000000 = federation replicator
  • &0x0000000000001000000000 = alliance yard
  • &0x0000000000000800000000 = tribunal
  • &0x0000000000000400000000 = fleet academy
  • &0x0000000000000200000000 = talshiar main quater
  • &0x0000000000000100000000 = imperial senate
  • &0x0000000000000080000000 = industrial center (of the Bencites)
  • &0x0000000000000040000000 = architectural center (of the Bandi)
  • &0x0000000000000020000000 = bajoran jalanda forum (of the Bajorans)
  • &0x0000000000000010000000 = harvest complex (of the Antedians)
  • &0x0000000000000008000000 = examination base (of the Anticans)
  • &0x0000000000000004000000 = supersoldier academy (of the Angosians)
  • &0x0000000000000002000000 = andorian war school (of the Andorians)
  • &0x0000000000000001000000 = acamerian clanhall (of the Acamerians)
  • &0x0000000000000000800000 = cinetic laboratory (of the Malcorians)
  • &0x0000000000000000400000 = ktarian game studio (of the Ktarians)
  • &0x0000000000000000200000 = edo palace (of the Edos)
  • &0x0000000000000000100000 = gladiator arena (of the Chalnoth)
  • &0x0000000000000000080000 = science thinking factory (of the Caldonians)
  • &0x0000000000000000040000 = planetary computer (of the Bynare)
  • &0x0000000000000000020000 = cosmetic center (of the Bolarians)
  • &0x0000000000000000010000 = councelor academy (of the Betazoids)
  • &0x0000000000000000008000 = defense network (of the Talarian)
  • &0x0000000000000000004000 = physical institute (of the Takarians)
  • &0x0000000000000000002000 = biotec center (of the Sheliak)
  • &0x0000000000000000001000 = examination base (of the Selay)
  • &0x0000000000000000000800 = collector place (of the Pakleds)
  • &0x0000000000000000000400 = recruitment center (of the Nausicaans)
  • &0x0000000000000000000200 = monument of subjugation (of the Mizarians)
  • &0x0000000000000000000100 = mintaca farm (of the Mintacarians)
  • &0x0000000000000000000080 = imperial yard
  • &0x0000000000000000000040 = orgenic regenerator
  • &0x0000000000000000000020 = military academy (of the Zakdorn)
  • &0x0000000000000000000010 = intelligence (of the Yridians)
  • &0x0000000000000000000008 = science academy (of the Vulcans)
  • &0x0000000000000000000004 = archive of psycho history (of the Ullians)
  • &0x0000000000000000000002 = science committee (of the Trillian)
  • &0x0000000000000000000001 = mythology library (of the Tamarians)Offset length 0x001D = buildable normal buildings / upgrades (bitwise XOR, same order as in stbof.res and UE, but little endian: mirrored 8bit blocks)

Offset length 0x0008 = unknown (always 00 ... 00 ?)

Intel

intelInfo

hexview width: 16

0x0000 to 0x0057 unknown
0x0058 to 0x02D7 (5 empires * 0x80) = empire stats intel screen data (not the stats), structure:
+0x0 (4 bytes * 4 other empires) = turn number of last update
+0x10-0x7F = unknown

0x02D8 to 0xDF63 (5 empires * 0x2C1C) = block structure: (for +0x4 to +0x5B see intel.bin)
+0x0 = index value for all areas output (loops +1/turn 0-13h)
+0x4 (4 bytes * 5 empires) = base for espionage attack threshold
+0x18 (4 bytes * 5 empires) = base for sabotage attack threshold
+0x2C (4 bytes * 8 empsInfo morale labels) = security defense modifier%
+0x4C (4 bytes * 4 empsInfo treaty labels) = attack threshold modifier%
+0x5C = unused ?
+0x60 (4 bytes * 4 enemies) = department setting (0=general, 1=economy, 2=science, 3=military)
+0x70 (4 bytes * 9 areas -> security 0, espionage 1-4, sabotage 5-8) = percentage assignation
+0x94-0xA3 = unknown
+0xA4 (9 areas * 0x58 bytes) = block structure:

+0x0 = turn number of last intel attack (unless security)
+0x4 = stockpile points for attack threshold, re-set to 0 if attack (unless security)
+0x8 (4 bytes * 20 turns) = area output of the last 20 turns

+0x3BC (4 bytes * 4 enemies * 4 departments) = agents training status 1-1Eh (+/- 2 turn)
+0x3FC = index for reports 41+ (loops 0-27h) -> overwrite/clear old pointer ?
+0x400 = index for next intel report (loops 0-27h)
+0x404 = number of intel reports (28h max.)
+0x408-0x2C07 (up to 40 Intel reports * 0x100 bytes) = block structure:

+0x0 = Index value of report
+0x4 = turn number of event
+0x8 = blamed ? race ID or -1
+0x9 = opponent race ID ?
+0xA-0xB = unknown
+0xC = index for report list ?
+0x10 = report text
+0x?? to 0xFF = unknown

+0x2C08 (4 bytes * 5 empires) = turn number of last intel attack?

Diplomacy

treaty

completely unknown
for turn 1 it's 00 00 00 00 00 00 00 00

Trade

trdeInfo0.cnt to trdeInfo4.cnt

number of traderoutes for each empire

trdeInfo0 to trdeInfo4

partially unexplored
lists traderoutes

  • raceID
  • traderoute number (+ raceID = traderouteID)
  • starIDs

Ships & Task Forces

alienTFInfo0 to alienTFInfo[numberOfRaces]

lists fleetIDs of every race

  • number of taskforces/fleets
  • fleet IDs

[for [numberOfRaces]:
Offset 0x0000 to 0x0003 = number of controled fleets
Offset length 0x0002 = fleetID]

shipname.dat

hexview width: 12
is divided into several shipname categorys
shipnames aren't in the same order with these in shipname.bin of stbof.res!
this file also influences the shipIDs for newly builded ones

  • first given shipname
  • next given shipname
  • counter of repeatings (for name endings A, B, C,...)

stored in blocks of 0x000C
block position equals shipname category position in shipname.bin of stbof.res as well as category position in UE Each race has its own categorys, seperated for different ship types
Warning! shipID for new constructed ships gets wrong, if distance between first and next name is wrong! (next name reffering number can be less as well as higher than first, distance is based on list iterations)
If next reffering number reaches first reffering number, counter gets increased
Offset 0x0000 to 0x0003 = first given name reffering number of corresponding shipname category or if none given = FF FF FF FF
Offset 0x0004 to 0x0007 = next given name reffering number of corresponding shipname category or if none given = FF FF FF FF
Offset 0x0008 to 0x0009 = counter of repeating/iteration or if no name of this category has been used yet = FF FF (defines the appendix of the shipname: A, B, ...)
Offset 0x000A to 0x000B = 00 00

ShipCntr

next shipID

TForceCntr

next fleetID

GShipHead = GTForceHd = GWTForceHd = GTFStasisHd

These are global list headers.

Header List Contains
GShipHead GShipList Ships
GTForceHd GTForceList Task forces
GWTForceHd GWTForce Task forces
GTFStasisHd GTFStasis Unknown


Identified fields:

  • slot size
  • total number of slots in list
  • number of occupied slots (slots with data)


File structure (40 bytes):

Offset 0x0000 to 0x000F = unknown
Offset 0x0010 to 0x0013 = slot size
Offset 0x0014 to 0x0017 = total number of slots
Offset 0x0018 to 0x001B = number of occupied slots
Offset 0x000C to 0x0027 = unknown

GShipList

hexview width: 116
list all ships with

  • shipname
  • raceID
  • shipID
  • fleetID
  • shield
  • hull
  • ship type (manufactoring type / =shiplistID in shiplist.sst)
  • experience bonus for beam accuracy
  • experience bonus for torpedo accuracy
  • experience bonus for defense
  • crew experience value
  • crew experience level
  • base ground combat strength

stored in blocks of 0x0074
Offset 0x0000 to 0x0027 = shipname
Offset 0x0028 to 0x0029 = raceID (only for ship icon)
Offset 0x002A to 0x002B = shipID (NOT shiplist.sst ID)
Offset 0x002C to 0x002F = experience bonus for beam accuracy
Offset 0x0030 to 0x0033 = experience bonus for torpedo accuracy
Offset 0x0034 to 0x0037 = experience bonus for defense
Offset 0x0038 to 0x003B = shield (can lead to crash if wrong)
Offset 0x003C to 0x003F = hull (leads to crash in tactical fight if too high)
Offset 0x0040 to 0x0043 = crew experience value
Offset 0x0044 to 0x0047 = crew experience level (0=green,.. , 4=legendary) accessed for stars, raid, intercept & damage control
Offset 0x0048 to 0x004F = unknown
Offset 0x0050 to 0x0051 = fleetID
Offset 0x0052 to 0x0053 = ship type (manufactoring type, used as shiplistID in stbof.res, e.g. in shiptech.sst and is in same order as in UE)
Offset 0x0054 to 0x0057 = unknown
Offset 0x0058 to 0x005B = cloak indicator for battles 1=yes
Offset 0x005C to 0x005F = shipfunction/=value:[0/8, 1/10, 2/6, 3/2, 4/4, 5-8/0, 9/1] +shiptech.sst computer +propulsion tech requirements
Offset 0x0060 to 0x0063 = (for warships only /function 0-4) value at 5C + map speed
Offset 0x0064 to 0x0067 = (for warships only /function 0-4) shiptech.sst computer + weapon tech requirements, if >0 bombing capable
Offset 0x0068 to 0x006B = unknown
Offset 0x006C to 0x006F = (for TTs only) 50 times shiptech.sst construction tech requirement
Offset 0x0070 to 0x0073 = base ground combat strength (i.e. TT production value /10)

GTForceList = GWTForce

hexview width: 108
differences only exist in behavior
in later turns there might remain fragments of old turns at the end of the list - they get ignored by botf
lists all fleets

  • fleetID
  • shipIDs
  • raceID
  • sector row
  • sector column
  • first Colony ShipID
  • control category
  • contains colony ships
  • scan range
  • flight range
  • speed
  • order (evade, attack,...)

stored in blocks of 0x006C
data fragments at the end of the file happen if fleet count decreases
Offset 0x0000 to 0x0003 = fleetID
Offset 0x0004 to 0x0007 = ship count of that fleet
Offset 0x0008 to 0x000B = shipID of first fleet slot, if unused FF FF FF FF
Offset 0x000C to 0x000F = shipID of second fleet slot, if unused FF FF FF FF
Offset 0x0010 to 0x0013 = shipID of third fleet slot, if unused FF FF FF FF
Offset 0x0014 to 0x0017 = shipID of fourth fleet slot, if unused FF FF FF FF
Offset 0x0018 to 0x001B = shipID of fifth fleet slot, if unused FF FF FF FF
Offset 0x001C to 0x001F = shipID of sixth fleet slot, if unused FF FF FF FF
Offset 0x0020 to 0x0023 = shipID of seventh fleet slot, if unused FF FF FF FF
Offset 0x0024 to 0x0027 = shipID of eighth fleet slot, if unused FF FF FF FF
Offset 0x0028 to 0x002B = shipID of ninth fleet slot, if unused FF FF FF FF
Offset 0x002C to 0x002F = order/command - seems only to define the display: systemattack remains if changed

  • 00 = invalid
  • 01 = terraform
  • 02 = colonize
  • 03 = raid
  • 04 = intercept
  • 05 = evade
  • 06 = attack
  • 07 = build outpost
  • 08 = build starbase
  • 09 = crew training
  • 0A = expand
  • 0B = invalid
  • 0C = scrap
  • 0D = into wormhole
  • 0E = attack system
  • >0E = invalid

Offset 0x0030 to 0x0033 = for TT based system attacks (1 = conquer, else liberate)
Offset 0x0034 to 0x0037 = raceID
Offset 0x0038 to 0x003B = sector row (GTForceList => next turn, GWTForce => actual turn)
Offset 0x003C to 0x003F = sector column (GTForceList => next turn, GWTForce => actual turn)
Offset 0x0040 to 0x0043 = ability bitmask
Offset 0x0044 to 0x0047 = first Colony shipID (same as one of the ship slots values)
Offset 0x0048 to 0x004B = unknown
Offset 0x004C to 0x004F = control category (1 - major empire, 2 - minor race, 3 - alien)
Offset 0x0050 to 0x0051 = contains colony ships (0 - no, 1 - yes)
Offset 0x0052 to 0x0053 = scan range, keeps only one turn
Offset 0x0054 to 0x0057 = unknown
Offset 0x0058 to 0x005F = flight range, keeps only one turn (double precision floating point number; short = 0, middle = 1, high = 2)
Offset 0x0060 to 0x0067 = speed, keeps only one turn (double precision floating point number; values 0 to 5)
Offset 0x0068 to 0x006B = cloaking (01 00 00 00 = cloaked, else 00 00 00 00)

GTFStasis

unknown (was thought to be number of starbases/outposts)

starBaseInfo

  • outpost name
  • owner raceID
  • outpostID
  • ship function (valid values are 6 for outpost and 7 for starbase)
  • ship type (links to shiplist.sst entry)
  • sector row
  • sector column
  • production/build cost (usually same as ship build cost in shiplist.sst)
  • production invested (outpost completion is production invested/production cost)
  • hull


Stored in blocks of 92 bytes.

Offset 0x0000 to 0x0027 = outpost name (ASCII)
Offset 0x0028 to 0x0029 = raceID
Offset 0x002A to 0x002B = outpostID
Offset 0x002C to 0x002D = ship function
Offset 0x002E to 0x002F = ship type
Offset 0x0030 to 0x0033 = sector row / y coord
Offset 0x0034 to 0x0037 = sector column / x coord
Offset 0x0038 to 0x003F = production cost (8 byte floating point number - double)
Offset 0x0040 to 0x0047 = production invested (8 byte floating point number - double)
Offset 0x0048 to 0x004B = scan range
Offset 0x004C to 0x004F = hull
Offset 0x0050 to 0x005B = unknown

monster.lst

unexplored

AI / Agents

AINumAgents

number of AI agents

AIAgtIdCtrl

next agentID (for filenames)

AIAgent0 to AIAgent[NumAgents]

mostly unexplored

  • agentID
  • raceID

Offset 0x0000 to 0x0003 = agentID
Offset 0x0004 to 0x0007 = 01 00 00 00 if major, 02 00 00 00 if minor
Offset 0x0008 to 0x000B = raceID
Offset 0x000C to 0x00CB = unknown

AgtSy0.cnt to AgtSy[NumAgents].cnt

number of systems to control

AgtSy0 to AgtSy[NumAgents]

starIDs to control

AgtSh0.cnt to AgtSh[NumAgents].cnt

number of ships to control

AgtSh0 to AgtSh[NumAgents]

shipIDs to control

AgtDp0.cnt to AgtDp[NumAgents].cnt

number of entrys in AgtDpxx

AgtDp0 to AgtDp[NumAgents]

hexview width: 266
unknown - mayby diplomatics

AgtTk0.cnt to AgtTk[NumAgents].cnt

number of tasks for that agent

AgtTk0 to AgtTk[NumAgents]

TaskIDs (for TskSh and TskSy filenames)

AISysUnt.cnt

number of AI controled systems

AISysUnt

hexview width: 12
starIDs to manage (for whatever) / partially unexplored

AIShpUnt.cnt

number of AI controled ships

AIShpUnt

hexview width: 24
shipIDs to manage (for whatever) / partially unexplored

stored in blocks of 0x0018
Offset 0x0000 to 0x0001 = shipID
Offset 0x0002 to 0x0003 = unknown (if not 05 00 for colony ships, AI doesn't colonize)
Offset 0x0004 to 0x0017 = unknown

AINumTasks =

number of Tsk-files

= AITaskIDCtr

next TskID for filename (of TskSh/TskSy)

Other

provInfo0 to provInfo4

lists starIDs of every major empire

  • star count
  • starIDs

ordInfo

hexview width: 84
Mostly unknown, includes peace proposals, system and fleet orders...

Each entry in this file contains two segments - a header and a body.

Header structure

Size of the header is constant for all entries and is 32 bytes.

It contains:

  • entry hash
  • turn of occurrence
  • raceID
  • order type
  • body size in bytes


Detailed structure:

Offset 0x0000 to 0x0003 = entry hash - unknown hashing function, applies either to the body only or the whole entry (exluding the hash)
Offset 0x0004 to 0x0007 = turn of occurrence
Offset 0x0008 to 0x000B = raceID
Offset 0x000C to 0x000F = unknown
Offset 0x0010 to 0x0013 = order type (0 - system order, 2 - fleet order, others unknown)
Offset 0x0014 to 0x001B = unknown
Offset 0x001C to 0x001F = size of the body in bytes

Size of the body depends on type - it might even vary independent of type. Body size of orders for fleets and systems seems to be 52 bytes which together with the header amounts to 84 bytes per entry.

Fleet order body structure (type 2)

Contains:

  • target sector row
  • target sector column
  • source sector row
  • source sector column
  • fleetID
  • scan range ?
  • map speed ?


Detailed structure:

Offset 0x0000 to 0x0003 = unknown
Offset 0x0004 to 0x0007 = target sector row
Offset 0x0008 to 0x000B = target sector column
Offset 0x000C to 0x000F = source sector row
Offset 0x0010 to 0x0013 = source sector column
Offset 0x0014 to 0x001B = unknown
Offset 0x001C to 0x001D = fleetID
Offset 0x001E to 0x002B = unknown
Offset 0x002C to 0x002F = scan range ?
Offset 0x0030 to 0x0033 = map speed ?

The source sector row and column mark the sector that the fleet was in when it initially received the order not the current location. For ships terraforming planets the source location is usually set to row -1 and column -1.

SeedInfo

completely unknown

result.lst

completely unknown

incident.dat

completely unknown but normally it's 00 00 00 00