First you need to know this
Here you'll find information on how to get themost out of the how to section along with the basic hex editing skillsyou will need to know. Please read it before going to the various how toareas.
Ok, lets's get started. Hex editing is not ashard as you might think. As long as you can count you can edit in hex.The main thing to know is unlike decimal, which is base 10, hexidecimalis base16. This basically means you count by 16 (0, 16, 32, 48,etc.) insteadof 10 (0, 10, 20, etc.). Hex values use number/letter combinations to expandthe available number pool. Instead of having Hex values increase in thepattern "08, 09, 10, 11, 12," they have the pattern of "08, 09, 0A, 0B,0C, 0D, 0E, 0F, 10, 11, 12." Look at the chart below.
As you can see instead of the next digit increaseing after the 10thdigit (9) is reached, as in decimal, the next digit is not increased untilafter the 16th digit (F). You'll also notice each hex entry, which is onebyte, is represented by a two-digit hexidecimal code This gives a rangeof 256 values from 00 to FF. If you was to use two bytes you would geta range of 65,536 values form 0000 to FFFF (256 x 256). If you don't fullyunderstand don't worry. Some editors have a hex calculator that can convertthe values for you. Also scientific calculators have this function too.
The next thing to know is that Intel and Motorola each store the valuesin memory differently. Motorola (Apple) uses Big Endian while Intel (PC)uses Little Endian.
Big Endian stores the most significant byte first and Little Endianstores the least significant byte first. Most significant is simply thedigit that would have the biggest effect on a value, while least significantwould have the smallest effect on a value. Take the decimal value 129 forexample. Changing the 1 would have the most effect while changing the 9would have the least.
In Big Endian the decimal number 1,000 would be stored as 03E8 and thedecimal number 100,000 would be stored as 000186A0.
In Little Endian the decimal number 1,000 would be stored as E803 andthe decimal number 100,000 would be stored as A0860100
Since the game is ran on Intel machines (this applies to AMD, etc.)the hex code may appear "backwards" for this reason.
The program determines how a file is read. Depending on what variablesthe code is read into, the value will be different. The code could be readas a single byte, two bytes, etc. The chart below will give the rangesof the different ways it can be read.
|signed byte ||1||-128 to 127||SB|
|unsigned byte ||1||0 to 255||B|
|signed short ||2||-32,768 to 32,767||SS|
|unsigned short ||2||0 to 65,535||S|
|signed long ||4||-2,147,483,648 to 2,147,483,647||SL|
|unsigned long ||4||0 to 4,294,967,295||L|
|signed quad ||8||-9223372036854775808 to 9223372036854775807||SQ|
|unsigned quad ||8||0 to 18446744073709551616||Q|
|float ||4||3.4E +/- 38||F|
|double ||8||1.7E +/- 308||D|
|long double ||10||1.2E +/- 4932||LD|
|ASCII|| ||read until NULL (h00)||STR|
It may look confusing but it's really not. Say you have a codeof 0203. This can be read as a single value consisting of two bytes. Itcould also be read as two values each having one byte. In the first caseit would have a value of 770 (dec.). In the second case it would be twovalues, 2 and 3.
The lable column is for the how to section. Some of the charts explainingwhat code controls what will have this label to tell you what range thegame will use. If there are two labels seperated by a slash, that meansthe game reads it in two different ways. This is the way the productioncosts are read. The str label will identify character strings which arejust ASCII characters (the letters and puncuation). The string will beread untils the NULL character (00 hex) is encountered.
Note:(L/SL) indicates that the stat is indeed type Long but will showon certain screens in the game as Signed Long.
|positionin shipdesc.sst to start reading from.|
stops reading when NULL (h00) encountered
|nameof the hob (3D models) and targa files to use|
|Eachship is identified by this number||Whattype of ship|
|whatgroup of names to use from shipname.bin||basechance to hit with beam weapons|
|# of Beam Weapons|
|howmany beam weapons||multiplydamage after effects of enemy shields||amountof damage||basechance to hit with torpedoes|
|# of Torpedoes|
|howmany torpedoes||multiplydamage after effects of enemy shields||amountof damage||howmuch damage the shields can take before failing|
|amountthe shields recharge each turn||howmuch damage the ship can take before being destroyed||reducesthe chance to be hit by enemy ship||strengthof the cloak|
3+ full cloak
|howfar the ship can travel|
|howmany sectors the ship can move per turn|
|howmany sectors the ship can scan||Troop Transport:|
industry produced per turn for building Outpost andStarbase
points produced per turn for terraforming planets
|whichrace can build|
|howmuch it cost to build or purchase||howmuch it costs per turn to maintain the ship|
|Graphic Files:||Controlling Race|
|0000 -Cardassian |
0100 - Federation
0200 - Ferengi
0300 - Klingon
0400 - Romulan
0500 - Acamarian
0600 - Andorians
0700 - Angosians
0800 - Anticans
0900 - Antideans
0A00 - Bajoran
0B00 - Bandi
0C00 - Benzites
0D00 - Betazoids
0E00 - Bolians
0F00 - Bynars
1000 - Caldonians
1100 - Chalnoth
1200 - Edo
1300 - Ktarian
1400 - Malcorians
1500 - Mintakans
1600 - Mizarians
1700 - Nausicaans
1800 - Pakled
1900 - Selay
1A00 - Sheliak
1B00 - Takarans
1C00 - Talarian
1D00 - Tamarian
1E00 - Trill
1F00 - Ullians
2000 - Vulcan
2100 - Yridian
2200 - Zakdorn
2400 - Aliens (Borg, Chodak, etc)
|0000 = Scout |
0100 = Fast Attack/Destroyer
0200 = Warship/Cruiser
0300 = Strike Cruiser
0400 = Command
0500 = Colony Ship
0600 = Outpost
0700 = Starbase
0800 = Alien (Borg, Chodak, etc.)
0900 = Troop Transport
000000000000F03F = medium
0000000000000040 = long
000000000000F03F = 1
0000000000000040 = 2
0000000000000840 = 3
0000000000001040 = 4
0000000000001440 = 5
|the Ship ID thisrecord is for||the ID of the shipthis one upgrades from|
Use FFFF if no upgrade
|level of researchneeded||level of researchneeded||level of researchneeded||level of researchneeded||level of researchneeded||level of researchneeded|
The last two bytes of each record are for the 7th and 8th techswhich do not work in the game.
|the first ship, by Ship ID, foreach major and minor race in order of the ControllingRace chart above|
use FFFFFFFF for no ship
This file contains the descriptions of the ships as shown in theObject Databse. It is a simple ASCII file in which thedescription for a ship starts at the position indicated in theshiplist.sst file and is read until NULL (h00) is encountered.