from SkyWolf
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.
DEC012345678910111213141516
HEX000102030405060708090A0B0C0D0E0F10

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.
TypeBytesValue RangeLabel
signed byte 1-128 to 127SB
unsigned byte 10 to 255B
signed short 2-32,768 to 32,767SS
unsigned short 20 to 65,535S
signed long 4-2,147,483,648 to 2,147,483,647SL
unsigned long 40 to 4,294,967,295L
signed quad 8-9223372036854775808 to 9223372036854775807SQ
unsigned quad 80 to 18446744073709551616Q
float 43.4E +/- 38F
double 81.7E +/- 308D
long double 101.2E +/- 4932LD
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.

editing shiplist.sst
Sub Class
(STR)
Class
( STR)
Description Pointer
(L)
Graphic Files
(STR)
Exp.
Stike
Cruiser Scout
Exp.
Keldon
Oberth
positionin shipdesc.sst to start reading from.
stops reading when NULL (h00) encountered
nameof the hob (3D models) and targa files to use

see below
Ship ID
(SS)
Ship Function
(S)
Ship Name
(S)
Beam Accuracy
(S)
Eachship is identified by this numberWhattype of ship

see below
whatgroup of names to use from shipname.binbasechance to hit with beam weapons
# of Beam Weapons
(L/SL)
Beam Multiplier
(L/SL)
Beam Damage
(L/SL)
Torpedoe Accuracy
(S)
howmany beam weaponsmultiplydamage after effects of enemy shieldsamountof damagebasechance to hit with torpedoes
# of Torpedoes
(L/SL)
Torpedoes Multiplier
(L/SL)
Torpedoes Damage
(L/SL)
Shield Strength
(SL)
howmany torpedoesmultiplydamage after effects of enemy shieldsamountof damagehowmuch damage the shields can take before failing
Shield Recharge
(SL)
Hull Strength
(SL)
Defense
(L)
Cloak
(B)
amountthe shields recharge each turnhowmuch damage the ship can take before being destroyedreducesthe chance to be hit by enemy shipstrengthof the cloak
1-2 stealth
3+ full cloak
Ship Range
(D)
Ship Speed
(D)
Scan Range
(S)
Production
(S)
howfar the ship can travel

see below
howmany sectors the ship can move per turn

see below
howmany sectors the ship can scanTroop Transport:
industry produced per turn for building Outpost andStarbase

Colony Ship:
points produced per turn for terraforming planets
Controlling Race
(S)
Build Cost
(L/SL)
Maintainance Cost
(S)
whichrace can build

see below
howmuch it cost to build or purchasehowmuch it costs per turn to maintain the ship
Note:(L/SL) indicates that the stat is indeed type Long but will showon certain screens in the game as Signed Long.

Graphic Files:Controlling Race
xxx_a.hob
xxx_b.hob
xxx_c.hob
i_xxx170.tga
i_xxx120.tga
i_xxx60.tga
i_xxx30.tga
i_xxxw.tga
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)

Ship Function
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
Ship Range
0000000000000000 =short
000000000000F03F = medium
0000000000000040 = long
Ship Speed
0000000000000000 =0
000000000000F03F = 1
0000000000000040 = 2
0000000000000840 = 3
0000000000001040 = 4
0000000000001440 = 5

ControllingRace
(S)
Ship ID
(SS)
Upgrade ID
(SS)
Biotech
(B)
Computer
(B)
Construction
(B)
Energy
(B)
Propulsion
(B)
Weapon
(B)
must matchshiplist

see above
the Ship ID thisrecord is forthe ID of the shipthis one upgrades from
Use FFFF if no upgrade
level of researchneededlevel of researchneededlevel of researchneededlevel of researchneededlevel of researchneededlevel of researchneeded
Note:
The last two bytes of each record are for the 7th and 8th techswhich do not work in the game.

Ship ID
(SL)
the first ship, by Ship ID, foreach major and minor race in order of the ControllingRace chart above
use FFFFFFFF for no ship

Shipdesc.sst:
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.