This section contains various slightly random notes intended to assist people that wish to hex edit and 'hack' the game. Everything here is entirely at your own risk - I strongly suggest you copy anything you intend to change...
U2.04 Memory Address Map, based on the writings of flap:
"In this note, I explain where the game stores its data while the game is running." A full text could be found at Zedo's old forum, but that source is no longer available. I've edited this down to critical game-specific information. Note this is relevant to U2.04, and incomplete. All values can theoretically be edited without crashing the game, unless indicated as "***".
Fixed Addresses:
- 00 54 71 E4 : The player address (the value gives the player address).
- 00 55 60 04 : The day.
- 00 55 66 80 : The time (00 00 00 00 means it is 00.00).
- 00 4F 30 70 : The fog depth (from 0 to 2).
- 00 55 55 80 *** : Downtown trader address (first trader in memory).
- 00 53 E9 B8 (or is it 00 53 E9 BC ?) *** : Limbo! address (first building in memory).
- 00 54 5E 6C : Pause state (1 = pause, 0 = the game is playing).
- 00 53 EA 34 : State of the chat box (0 = The box is not on the screen, 1 = The box is on the screen, you are filling the 'To' field, 2 = The box is on the screen, you are filling the text field).
- 00 4F 63 28 : Where the 'To' is stored in memory.
- 00 4F 63 0C : Where the 'To' is stored in memory.
- 00 53 EA 20 : Title of the text box (you are allowed 19 signs).
- 00 53 EA 38 : Text of the text box (you are allowed 33 signs).
Pilot Addresses:
"Consider that 0 is the base address of the pilot. For the player, it is for example the one given at 00 54 71 E4. Add the value to address to go to the address you want:" (values are decimals)
- - 12 *** : Pilot signature (always A0 00 03 54).
- + 0 : Pilot name.
- + 20 : Pilot location (1 = in a moth, 2 = in a building, 3 = in a monorail, 4 = in a monorail hall, and maybe 0 = dead).
- + 24 *** : Vehicle or building address where the pilot is: (1) Monorail example: ?? ?? 00 01 = Central-Alpha-Mines. (2) Monorail Hall example: ?? ?? 00 01 = Alpha Depot.
- + 36 : Cash.
- + 40 : Pilot kind: 1 = player; 3 = Special (alien or plot); 4 = Trader; 5 = guard, attack, cop; 6 = Taxi; 7 = faction trader; 8 = Pirate; A = Scavenger; B = Police Patrol; C = Builder; E = Enforcer.
- + 112 : Address of the last message on the message board .
- + 248 : First command (see below).
- + 608 : Home Address (building).
- + 616 : Address of the first building in memory (add 4 to go to next building. Up to 20 buildings).
- + 716 : Address of the first pilot in memory (add 4 to go to the next pilot. Up to 10 pilots).
- + 768 *** : Address of the next pilot in the game (the last one as 00 00 00 00 here).
Command Addresses:
"One command is made of 6 Dwords (D for double - a word is made of two bytes), the first one tells what command it is. The commands follow each other. I don't know how many you can have." ("-" means it doesn't matter.) (Also see Duncan's AI Plans/Orders notes.)
- Buy : 00 00 00 08, goods ref, - , - , number of goods, building address
- Sell : 00 00 00 09, goods ref, - , - , number of goods, building address
- Order (get for free for factions) : 00 00 00 0B, goods ref, - , - , number of goods, building address
- Deliver (give for free for factions) : 00 00 00 0C, goods ref, - , - , number of goods, building address
- Dock hangar *** : 00 00 00 7A, - , - , - , - , -
- Leave Airlock *** : 00 00 00 7B, - , - , - , - , -
- Go Crater *** : 00 00 00 7C, crater ref , - , - , - , -
- Fly nodes *** : 00 00 00 7D, node ref, - , - , - , -
- Go Hangar : 00 00 00 02, building address, - , - , - , -
- Wait : 00 00 00 01, I don't remember after
- Hunt : 00 00 00 10, building address, - , - , - , -
- Rob Vh : 00 00 00 11, vehicle address, - , - , - , -
- Kill Vh : 00 00 00 03, vehicle address, - , - , - , -
- Scanvenge : 00 00 00 18, building address, - , - , - , -
- Get cargo : 00 00 00 12, cargo address, - , - , - , -
- Flypath *** : 00 00 00 82, ?
- Queue at *** : 00 00 00 23, building address, - , - , - , -
- Fit weapon : 00 00 00 13, equip ref, - , - , - , building address
- Unknown (probably sells everything) : 00 00 00 19, ?
- Get new moth *** : 00 00 00 0F, ?
- Unknown (wait until player is getting close ) : 00 00 00 1B, - , - , - , - , -
- Unknown (commits suicide) : 00 00 00 14, - , - , - , - , -
Goods Addresses: (all *** )
- 00 00 00 00 : Ore
- 00 00 00 01 : Water
- 00 00 00 02 : Chemicals
- 00 00 00 03 : Scrap metal
- 00 00 00 04 : Food
- 00 00 00 05 : Body parts
- 00 00 00 06 : Gems
- 00 00 00 07 : Ex metal
- 00 00 00 08 : Sheet metal
- 00 00 00 09 : ConstMat
- 00 00 00 0A : CompComp
- 00 00 00 0B : MachParts
- 00 00 00 0C : Plastics
- 00 00 00 0D : Explosives
- 00 00 00 0E : Fusion parts
- 00 00 00 0F : Trigger
- 00 00 00 10 : Matter
- 00 00 00 11 : Engine #1
- 00 00 00 12 : Engine #2
- 00 00 00 13 : Engine #3
- 00 00 00 14 : Cell #1
- 00 00 00 15 : Cell #2
- 00 00 00 16 : Cell #3
- 00 00 00 17 : Cell #4
- 00 00 00 18 : Fusion cell
- 00 00 00 19 : After burner
- 00 00 00 1A : Smallest pod
- 00 00 00 1B : Small pod
- 00 00 00 1C : Medium pod
- 00 00 00 1D : Large pod
- 00 00 00 1E : Largest pod
- 00 00 00 1F : Salvage drone
- 00 00 00 20 : Super drone
- 00 00 00 28 : Sprat*10
- 00 00 00 29 : Swarm*10
- 00 00 00 2A : Devastator
- 00 00 00 2B : Leach*10
- 00 00 00 2C : Flares*10
- 00 00 00 2D : Chaff*10
- 00 00 00 2E : Starchell*10
- 00 00 00 2F : Tac-nuke
- 00 00 00 30 : Big bob
- 00 00 00 31 : Fireburst
- 00 00 00 34 : Underkills*5
- 00 00 00 35 : Ground base*5
- 00 00 00 37 : Hologramms*5
- 00 00 00 38 : Laser
- 00 00 00 39 : Plasma kanon
- 00 00 00 3A : Laser turret
- 00 00 00 3B : Pulse laser
- 00 00 00 3C : Death ray
- 00 00 00 43 : Origin Unknown
- 00 00 00 44 : Mass driver part
- 00 00 00 45 : Mystery package
- 00 00 00 46 : Black box
- 00 00 00 47 : Minerals
- 00 00 00 48 : Air filters
- 00 00 00 49 : Pleasure cubes
- 00 00 00 4A : Alcohol
- 00 00 00 4B : Textiles
- 00 00 00 4C : Furs
- 00 00 00 4D : Huskar cigars
- 00 00 00 4E : Servant droids
- 00 00 00 4D : Narcotics
- 00 00 00 50 : Cloning device
Crater Addresses: (all *** )
- 00 00 00 01 : Riverside
- 00 00 00 02 : Reservoir
- 00 00 00 03 : Highrise
- 00 00 00 04 : Downtown
- 00 00 00 05 : Gamma
- 00 00 00 06 : Alpha
- 00 00 00 07 : Port
- 00 00 00 08 : Mine
Weapon Addresses:
- - 12 *** : Vehicle signature (always A0 00 04 54).
- + 472 : Owner address (pilot).
- + 480 : Power (max is 4000 in decimal).
- + 496 : Targetted vehicle .
- + 540 : First weapon (cannon, missile, or afterburner, from goods ref, 7F FF if nothing, +4 for next weapon, at most 10. 9 = Tac-Nuke, 10 = Big Bob).
- + 580 : Munitions (+4 for the next weapon).
- + 660 : Shield status (+4 for the next weapon).
- + 664 : Engine status (+4 for the next weapon).
- + 668 : Structure status (+4 for the next weapon).
- + 672 : CPU status (+4 for the next weapon).
- + 676 : Power status (+4 for the next weapon).
- + 680 : Weapon status (+4 for the next weapon).
Buildings Addresses:
- - 12 *** : Building signature (?).
- + 12 : Building name.
- + 68 : Owner address (pilot of HQ for factions).
- + 84 : First object in stock (goods ref 00 00 00 00 = Ore. Next object, + 4 : 00 00 00 01 = pure water).
- + 86 : Price (if sold by the player).
- + 768 : Money.
- + 796 : Vehicle in Building at bay 0 (+ 4 for next).
- + 892 *** : Next building address (the last building, tunnel blockage has 00 00 00 00).
Laser Turret: (precise location unknown)
- + 0 : Coordinate 1 (1 foot = 55 in decimal).
- + 4 : Height.
- + 8 : Coordinate 2.
- + 38 : Status (1 = here, 0 = destroyed).
- + 56 : Weapon type (see goods ref - but it doesn't aim).
- + 60 : Building address (don't know if it can change).
U3 Beta 4 Savegame Format, from Duncan:
"In order of appearance:
- Supply lists - It seems that every Trading Post has its own supply list. The section that contains these lists also has some coding that involves dependent traders and builders.
- Hangars - [see notes by Wez].
- Hangar ID list - Compilation of the Hangar IDs.
- MUD - Text describing hangars and building walkways.
- Messages - Your messages are just in between the MUD section and the pilots section. Each message occupies one line, one line contains 40 bytes.
- Pilots - Already described elsewhere.
- Pilot ID list - Compiled list of pilot IDs.
- Pod contents - Between the pilot ID list and the Mines section is a section that holds the contents of the pods. This is some sort of dump. The contents of all pods in the game are stored here (only the contents, so not when a pod is empty). Forgot to look at the linewidth, but one line contains the type of Good, the quantity and the ship its in. Contents are not ordered per pod.
- Monorail - Monorail text plus coding.
- Demands list - After the monorail text you find the demands. Thought it has a linewidth of 40. This list does not only contain the hangar and the good it wants, there is some additional code. Could be priority tags and/or tags to show up in demand lists of the Trading Posts etc.
- Moth Position, Orientation - If a moth is airborne it appears here. It holds the position, the orientation, speed, flight direction.
- Blank - I don't know the function of this, but it sure is an incredible amount of 00."
AI Occupation notes, based on the writings of smurph:
"AI 'profession' is encoded by a single byte in the save game file. Open up the save game in a hexeditor, and search for the pilot name as an ANSI string. About 45 bytes from the start of the pilot name you will see the following set of bytes ab,cd,00,00,xy where xy codes for the 'profession'. If you edit a save made right at the start of day 1 ab,cd is 10,27. The codes (xy) for pilots in existance at the start of the game in b4 are:"
- 00 - limbo
- 01 - human pilot
- 03 - plot moths (e.g. laz-research x2)
- 04 - trader
- 05 - edit - laz attak, klamp guard, police guard, scrubber guard
- 06 - cab
- 07 - faction trans
- 08 - pirate
- 0A - scavenger
- 0B - edit - police patrol, klamp patrol, laz patrol
- 0C - builder
- 0D - gang trans
- 0E - enforcer
- 10 - thug
- 11 - brother kahuna
"Codes 05 and 0B can be interchanged with no problems and some interesting effects. 0B pilots are more active (i.e always hunting for enemies) in the game (at least in b5)."
Unfortunately, changing careers does not automatically change the 'plans' for pilots - Duncan writes: "Pilots with new professions but behaving like their old days still have their old plans list. Clearing this list won't help, because as soon as no order is finished anymore, no new ones are going to get in. Normal beta 4 game example: Start as Admin as a dealer. Fly around a little, soon 2 shady pilots will target you and fire their devastators in your bud. If you are killed you will end up on foot in your hangar. Blag a moth, board and launch. You will notice that the bloke responsible for your early death is still hanging around doing nothing. When you look at the savegame you will notice the lack of plans. By the way these pilots have the profession 0F - it's missing in smurph's list, and 20 Devastators. This could of course also be the 0F order module not generating new plans."
AI Equipment notes, based on the writings of Eight:
Shown as address - hex dec - item:
Pirate
- 50CBD - 1C 28 - medium pod
- 50CC9 - 1F 31 - drone
- 50CEB - 28 40 - sprats (missile1)
- 50CF2 - 31 49 - fireburst (missile2)
- 50CF9 - 34 52 - underkill (missile3)
- 50D00 - 35 53 - groundbase (missile4)
- 50D0C - 3A 58 - laser turret
- 50D18 - 38 56 - laser
- 50D2F - 12 18 - engine 2
Scavenger
- 50D89 - 1A 26 - smallest pod
- 50D95 - 1F 31 - drone
- 50DA1 - 2C 44 - flares
- 50DAD - 38 56 - laser
Trader
- 50E06 - 1E 30 - largest pod
- 50E12 - 1F 31 - drone
- 50E1E - 2C 44 - flares
- 50E2A - 28 40 - sprats
- 50E36 - 38 56 - laser
- 50E42 - 13 19 - engine 3
- 50E4E - 39 57 - plasma kannon
Unknown
- 50B3C - 3A 58 - laser turret
- 50B48 - 39 57 - plasma kannon
- 50B54 - 31 49 - fireburst
- 50B60 - 29 41 - swarm
- 50B77 - 12 18 - engine 2
List of items (hex dec item)
- 00 0 ore
- 01 1 pure water
- 02 2 chemicals
- 03 3 scrap metal
- 04 4 food
- 05 5 body parts
- 06 6 gems
- 07 7 ex metal
- 08 8 sheetmetal
- 09 9 const mat
- 0A 10 comp comp
- 0B 11 mach parts
- 0C 12 plastics
- 0D 13 explosives
- 0E 14 fusion parts
- 0F 15 trigger
- 10 16 matter
- 11 17 engine 1
- 12 18 engine 2
- 13 19 engine 3
- 14 20 cell#1
- 15 21 cell#2
- 16 22 cell#3
- 17 23 cell#4
- 18 24 fusion cell
- 19 25 afterburner
- 1A 26 smallest pod
- 1B 27 small pod
- 1C 28 medium pod
- 1D 29 large pod
- 1E 30 largest pod
- 1F 31 drone
- 20 32 superdrone
- 21 33 frameMM
- 22 34 frameSY
- 23 35 FrameNT
- 24 36 FrameHK
- 25 37 FrameDH
- 26 38 FramePL
- 27 39 FrameAL
- 28 40 Sprat
- 29 41 Swarm
- 2A 42 Devastator
- 2B 43 Leach
- 2C 44 Flares
- 2D 45 Chaff
- 2E 46 Star Shells
- 2F 47 Tac Nuke
- 30 48 Big Bob
- 31 49 fireburst
- 32 50 fireburst sub
- 33 51 swarm sub
- 34 52 underkill
- 35 53 groundbase
- 36 54 groundbase sub
- 37 55 hologram
- 38 56 laser
- 39 57 plasmakanon
- 3A 58 laserturret
- 3B 59 pulse laser
- 3C 60 deathray
- 3D 61 NewMothNT
- 3E 62 NewMothHK
- 3F 63 NewMothDH
- 40 64 NewMothMM
- 41 65 NewMothSY
- 42 66 NewMothPL
- 43 67 Unknown Origin
- 44 68 MassDriver Part
- 45 69 Mystery Package
- 46 70 Blackbox
- 47 71 Minerals
- 48 72 Airfilters
- 49 73 Pleasure Cubes
- 4A 74 Alcohol
- 4B 75 Textiles
- 4C 76 Furs
- 4D 77 Huskar Cigars
- 4E 78 Servant Droids
- 4F 79 Narcotics
- 50 80 Clone
- 51 81 FrameSW
- 52 82 Trojan
- 53 83 NewmothSW
- 54 84 ManMunitions
- 55 85 ManComponent
- 56 86 ManOreProc
- 57 87 Distiller
- 58 88 Narcotron
- 59 89 Fumbler
- 5A 90 Disabler
- 5B 91 Blaster
Max notes: "Start of ~'case block' 0x50996 - first item assignment, end ~0x50EED."
U3 Beta 5 AI Starting Gear notes, based on the writings of Nazgutek:
"Open up the exe [hardwarW.exe] and starting at the following addresses, replace the 5 bytes with 0x90 (that's 90 HEX, not 90 decimal). These will remove various items from starting NPC types:"
Pirates:
- 50CC3 - no pod
- 50CCF - no drone (has no effect)
- 50D06 - no missile *
- 50D12 - no laser turret
Scavengers:
- 50D8F - no pod
- 50D9B - no drone (has no effect)
- 50DA7 - no flares
Traders:
- 50E24 - no flares
- 50E30 - no sprat
"Example: We wish to remove the pirates' laser turrets, so we would go to file offset 50D12 (which is in hex), and change the byte there and the next four to 0x90,0x90,0x90,0x90,0x90.
* Pirate Missile Note: The code seems to randomly choose either Sprats, Groundbase, Underkill or Fireburst. The hack address above will remove any missile install. If you feel adventurous, you can not apply the above hack, and instead change the four missile entries to other items: just before the above no missile hack address, you will find BA28000000, BA31000000, BA34000000, BA35000000. Keep the BA there, but the next four bytes are the item ID (stored in little endian format, as per all intel asm). To make them only have sprats, change the 31/34/35 to 28.
I noticed that pirates (and to an extent the faction patrol/guard moths) that don't have a laser turret exhibit some strange behaviour... upon entering a crater where their Kill/Rob target is, they'll sit there, pointing at it until the target either docks or enters a tunnel to another crater. If the target didn't dock, the 'hunter' will continue this impotent behaviour.
I'm concluding that the AI isn't coded to purchase upgrades for the moth, except for a few items, namely flares, sprats and plasmakannons."
AI Plan/Orders notes, based on the writings of Duncan:
"There are Pilot IDs in the game, the Hangar ID in the game and the place to find the destination of the pilot. These IDs change (sometimes) each time you start Hardwar. To make this a little more trackable I will use a relative byte position. Therefore I will call the bytes E8 03 byte 0 and 1. E8 03 is a few bytes before the bytes coding for the name of the pilot. Example: 78 FC 5F 02.
Some 72 bytes before E8, directly before the whole bunch of FFFFs, that seem to separate each pilots block, is the ID of that pilot. It's 3 bytes, always followed by 02. With Hangars also an ID can be found, if you take the E8 03 before a hangar's name and you go back some 44 bytes you will find the code for that hangar. Example D4 4B C3 02. These bytes are preceded by FF 7F 00 00."
Based on 'Downtown Trader 3' in U3 beta 4: "The byte E8 (in E8 03) is used as the reference position and numbered 0.
starting at pos.4 - name of the pilot
- pos.-72 = Pilot ID 1.
- pos.-20 = Pilot ID 2 of Zero Cool, note that it is repeated. Something with targeting/killing.
- pos.+48 = Pilot ID 2, occurs in multiple regions of the savegame file.
- pos.+64 = Pilot's profession (posted by Smurph).
- pos.600 = Home hangar.
Starting at pos.+300 are the orders/plans of the pilot. A row of 24 bytes stands for 1 order. The first byte identifies the order.
- 7D = FlyNodes.
- 7C = GoCrater.
- 02 = GoBg - go to hangar.
- 08 = B: - buy.
- 09 = S: - sell.
In this case Downtown Trader will go to the Mines crater, fly to Prison Mine, buy in total 16 units of ore and sell 8 units at Bargain Moths and 8 units at Shears Yard."
Other plans codes (plans as they appear in the terminal using exec [pilot],plans):
- 00 n.o.
- 01 Wait
- 02 GoBg
- 03 KillVh
- 04 n.o.
- 05 n.o.
- 06 n.o.
- 07 KillPil - Police Force
- 08 B: - buy
- 09 S: - sell
- 0A Passenger Wait - Cab
- 0B C: - collect
- 0C D: - deliver
- 0D n.o.
- 0E Board vehicle
- 0F Get New Moth
- 10 Hunt
- 11 RobVh
- 12 GetCargo
- 13 Fit F:
- 14 self destruct - E.T.
- 15 CordonArea - Police Patrol
- 16 GetCargoPos
- 17 GuardCargo - e.g. what Laz-Attak 909, Laz Repair 004, Laz Guard X1 and X2 do
- 18 Scavenge
- 19 unknown - Trader
- 1A RepairBg - Repair hangar
- 1B Unknown - Freeze until player gets near then next plan - E.T.
- 1C Unknown - Fly towards player and dance + freeze thrusters - E.T.
- 1D Unknown - Not restricted to E.T. also Laz-Research X1
- 1E n.o.
- 1F n.o.
- 20 BuzBg
- 21 AttackBg - attack hangar
- 22 Guard Area
- 23 Q at - queue
- 24 n.o.
- 25 n.o.
- 26 Get All - goods, sort of scavenging
- 78 Need pod
- 79 ReqBg - a request prior to docking
- 7A DockBg
- 7B LeaveAirlock
- 7C GoCrater
- 7D FlyNodes
- 7E n.o.
- 7F Recharge
- 80 Repair
- 81 n.o.
- 82 FlyPos
- n.o. = not observed in savegame file.
- E.T. = Extra Titanian.
- E.T./Police/Trader = typical command with typical pilot professions.
"A limited number of syntaxes are used for the plans rows. There's a syntax for doing something with a hangar - like 02 and 10. Something with goods like buy, sell, collect and dump. And something with coordinates - like FlyPos. Furthermore there are codes that are only present in these orders which function I do not know. They're not obligatory if you command a pilot.
Basically, if you want to command another pilot, you have to start a plan row with the necesary command, and add the basic requirements being e.g. the hangar to fly to or the type and amount and place to buy/sell/collect/dump goods.
Coordinate system example:
82 00 00 00 { 9B 92 86 *02* 52 B8 09 *00* 22 01 A7 *02* 03 } 00 00 00 2B 36 C8 0F
82 - FlyPos: This position is coded between the brackets. 2B36C80F can be left out. The stared (*) bytes separate the Y,Z and X coordinate (in that order). The three bytes that code for a coordinate are combined to form one hexadecimal number. Attention: start reading from the right. So 86929B and 09B852 and A70122. If you increase the X coordinate say from 00 00 90 to 22 01 A7 then the position is further in the North (or direction heading 000). If you increase Y - more east.
Got the altitude more accurately now, studied a couple:
- 090000 1208 ft (thats 00 00 09 in the file)
- 0A0000 1343 ft
- 0B0000 1477 ft
- 0C0000 1611 ft
- 0D0000 1745 ft
- 0E0000 1880 ft
- 0F0000 2014 ft
- All with an accuracy of +/- 1 ft.
This is not the entire altitude range of course. If you want to intrapolate or extrapolate you can recalculate the hexadecimal numbers to decimal and make a linear regression. Use the function for the line to calculate the decimal number and convert it back to hexadecimal."
Hangar header notes, based on the writings of smurph:
"Here is the structure of the first 3 lines (at line width of 24 bytes) of the hangar entries for the betas (and probably for 2.04 as well)."
aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa 00 00 00 00 00 00 00 00 bb bb 00 00 cc 00 00 00 dd 00 00 00 ee ee 00 00 ff 00 00 00 gg 00 00 00 hh hh hh hh ii 00 00 00 jj 00 00 00 kk 00 00 00
- aa - Hangar name.
- bb - Hangar software.
-
cc - I will call attribute 1. Known codes are:
- 01 Faction HQ
- 02 Trade Centre
- 03 Faction Garrison
- 04 Cabs
- 05 Factory
- 09 Produces Bodyparts
- 0A Reseller
- 0B Estate Engine
- 0D Bodyparts/Nuclear Stuff
- 0E Loan Shark
- 0F Abandoned Terminal
- 10 Misc. Colony Hangers
- 11 Make clones
-
dd - I will call attribute 2. This sets the type of business in combination with attribute 1. For attribute 1 05, attribute 2 values are:
- 00 - Weapons makers.
- 01 - Component Shops.
- 02 - Chemical factories
- 03 - Moth Factories.
- 04 - Ore processors.
- 05 - Mines.
- 06 - Food Factories.
- 07 - Purifiers.
- 08 - Recyclers.
- 09 - Cigar makers.
- 0A - Booze makers.
- 0B - Narcotics Fcctories.
- 0C - Sewage control.
- 0D - Techparts.
- 0E - Bargain Moths
- 0F - Central Industrial
- 10 - Shears Yard
-
For attribute 1 0A, attrbute 2 values are:
- 00 - Weapon resellers
- 01 - Breaker Makers
- 02 - Bars
- 03 - Builders
- ee - Some kind of hangar index. It runs from 0010, through to 8310, increasing by 1 in the order the hangars appear in the game save file. Not all hangars have this set, but it seems essential to have a hangar index for several of the above attributes to work.
- ff - Not sure about this one - player hangars are all 12, faction owned hangars always have this set, but the value is different between beta 4 and beta 5.
- gg - Not for sale, 01 is purchasable (if not currently owned), 02 is common to all faction owned hangars.
- hh - Owner ID.
- ii - Set access. 00 is public, 01 is private.
- jj and kk - Only set on faction, gang, and Police HQs."
Solidox notes: "From memory, jj and kk are lighting and turrets thus why it only appears on faction buildings. There are two private/public fields, one is a bitmask inside the menu options field. The other, ii, is a hard lock which overrides the other one, it is used in the Abandoned Terminal and also is the reason you can't get into Colony HQ when you've purchased it."
U3 Beta Hangar notes, based on the writings of Wez:
Hex edit a savegame. The header block for each hangar can be identified from a four-character code followed by the full current name of the hangar. The four letter codes never change. They are:
- AAWL Abandoned Terminal
- AAV1 Acid Hangar
- AAHY Agrochem
- AA1L Air Purifier A
- AAAX Air Purifier D
- AAN7 Air Purifier G
- AAE5 Air Purifier M
- AAH9 Alpha Cabs
- AAIA Alpha Construction
- AASM Alpha Depot
- AAH7 Alpha Depot II
- AAIZ Alpha Estate Agent
- AAUG Alpha Police Station
- AAIC Alpha Trading Post
- AAAO Bargain Moths
- AAC9 Bill Moritz
- AAV7 Blackeye's Hangar
- AAF2 Blue Repository
- AAG2 Breaker Maker 1
- AAC2 Breaker Maker 2
- AAH5 Breaker Maker 3
- AAFL Breaker Maker 4
- AAOC Breaker Maker 5
- AACZ Central Industrial
- AAWB Central Monorail
- AAFJ Charlie Wadsworth
- AAEU Charlie's Pizza
- AACU Clone Farm
- TEST Colony HQ
- AAVX Concealed Hideout
- KWIK Conurbation 1
- AAEF Conurbation 2
- AABE Conurbation 3
- AAPU Conurbation Two
- AAV4 Crash Hangar
- AAIB Craven Components
- AAUD Customs Block
- AAV3 Darkbase
- AAEX Derelict Factory
- AAF4 Derelict Warehouse
- NEWP Downtown 05
- AABN Downtown Builders
- AABS Downtown Chemicals
- AACW Downtown Components
- AAAH Downtown Estates
- AAEB Downtown Moths
- AABQ Downtown Munitions
- AAC4 Downtown Outpost
- AADG Downtown Recycling
- AAOH Dr Jobes Weapons
- AACI Dunroamin
- AAFX Empty Complex
- AA1U Empty Hangar A1
- AAUF Empty Hangar A2
- AA1S Empty Hangar A3
- AA1T Empty Hangar A4
- AA1Q Flight Academy
- AAPX Flyers Retreat
- AAOL Freds Builders
- AAPG Gamma Cabs
- AAPE Gamma Estate Agent
- AAPC Gamma H3
- AAPZ Gamma Monorail Depot
- AAPY Gamma Police Garrison
- AAOE Gamma Trading Post
- AAEW General Industrial
- AA1M Groover's Hangar
- AAAD Hardwarp FM
- EGG1 Hideout 1
- EGG2 Hideout 2
- EGG4 Hideout 4
- EGG5 Hideout 5
- EGG6 Hideout 6
- AASI Highrise Cabs
- AAFZ Highrise Construction
- AAEM Highrise Estates
- AASK Highrise Motors
- AAES Highrise Police Station
- AAF5 Highrise Trading Post
- AAHE Home Base
- AAEQ HR Conurbation 1
- AAEO HR Vacant 1
- AAEP HR Vacant 2
- AAEN HR Vacant Tower
- AAPT Hunger City
- AAP3 Island Garrison
- AACG Junkyard
- AAR0 Jupiter Four
- AAU5 Klamp Macro 1
- AAU6 Klamp Macro 2
- AAU7 Klamp Macro 3
- CTOP Klamp Secret Base
- AAN5 Klamp-G Arms
- AAPF Klamp-G Chemicals
- AAN6 Klamp-G Components
- AAUI Klamp-G FacDef
- AAOG Klamp-G Fe-Mill
- AAC7 Klamp-G Garrison
- KLAM klamp-G HQ
- AAE4 Klamp-G Medical
- AAE7 Klamp-G Mine
- AAOF Klamp-G Moth Factory
- AAHR Klamp-G Purifier 1
- AAHS Klamp-G Purifier 2
- AAHN Klamp-G Purifier 3
- AAHO Klamp-G Purifier 4
- AAHP Klamp-G Purifier 5
- AAHQ Klamp-G Purifier 6
- AAFY Klamp-G Weapons Shop
- AAHX Lazarus Alpha
- AAHZ Lazarus Chemicals
- AAHW Lazarus Components
- AAT7 Lazarus Hightower
- LAZA Lazarus HQ
- AAFP Lazarus HQ Garrison
- AAA1 Lazarus Macro 1
- AAA3 Lazarus Macro 2
- AAAJ Lazarus Macro 3
- AAEH Lazarus Macro 4
- AAEG Lazarus Macro 5
- AAAP Lazarus Macro 6
- AAEI Lazarus Macro 7
- AAFC Lazarus Mine
- AAFE Lazarus Mine Garrison
- AAFA Lazarus Mine OreProc
- AAHV Lazarus Moths
- AAHT Lazarus Munitions
- AAHU Lazarus Ore Proc
- AAPN Lazarus Purifier
- DOOR Lazarus Secret Base
- AAF7 Lazarus Weapons Shop
- LW01 LightWell 01
- LW02 LightWell 02
- LW03 LightWell 03
- LW04 LightWell 04
- LW05 LightWell 05
- LW06 LightWell 06
- LW06 LightWell 07
- LW08 LightWell 08
- LW09 LightWell 09
- AAV6 Lord Nicon's Hangar
- MAS2 Mass Driver 1
- AAVV Mines Cabs
- AAVU Mines Monorail Depot
- AAOM Mines Trading Post
- MOND Mis Op Cabs
- AAEV Misery Heights
- AADZ MisOp Finance
- AAB4 Monastery
- AAFR Monorail Depot
- AABH Ore Proc 2
- AACO Ore Processing
- AAPV Paranoidopolis
- AAV2 Pirates Nest
- PIG2 Police Garrison
- PIGS Police HQ
- AABV Prison Mine
- AAHK Prison Oubliette
- AAA5 Psycho Bobs 1
- AAGC Psycho Bobs 2
- AAV5 Purpledrome
- AAF8 Recycle Joint
- AARC Reservoir Cabs
- AASH Reservoir Central
- AARA Reservoir Def 1
- AAU9 Reservoir Def 2
- AAU4 Reservoir Trading
- AAG5 Restricted Area
- AAFI Riverside Cabs
- AAE3 Riverside Chemicals
- AAEZ Riverside Construction
- AAFU Riverside Cops
- AAFS Riverside Estates
- AAP6 Riverside Monorail
- AAN4 Riverside Parts
- AAEJ Scrubber Hngr
- AA1X Scrubber Outpost
- AAP0 Scrubber Xchng
- AAIY Scrubbers Alpha
- AAEK Scrubbers HQ
- AAV9 Secluded Residence
- AAC1 Sentinel 1
- AAAZ Sentinel 2
- AACJ Sentinel 3
- AACQ Sewage Control
- AAF0 Sewage Control
- AABT Shears Yard
- AAVW Sith Manor
- AAH6 Skinners HQ
- AAPO Skinners Outpost
- AAE2 Software Refinery
- AAG8 Software Shack 1
- AAB0 Software Shack 2
- AAP1 Special Arms Co
- AAAF Syd's Workshop
- AAVZ Tarquin's Hangar
- AAAL TechParts
- AAB7 Terraformer
- AAPW Terror-rise
- AAGS The After Dark
- AAER The Belfry
- AAFN The Garidge
- AAVB The Knocking Ship
- AAG9 The Morgue
- AAFV The Ore House
- AAV8 The Pit
- EGG3 The Shanty Inn
- AAFT The Slum
- AAIG The Squat
- AAE0 The Waterfront
- AAV0 Thunderbase
- AAEY Titan University
- AABI Trade Central
- AAEL Traders Rest
- BLOC Tunnel Blockage
- AABA Vacant 0007
- AAGB Vacant 0008
- AAED Vacant 0009
- AAD2 Vacant 0010
- AAD4 Vacant 0011
- AAD8 Vacant 0012
- AAGI Vacant 0013
- AACA Vacant 0014
- AACB Vacant 0015
- AAGL Vacant 0016
- AAGO Vacant 0017
- AAGW Vacant 0018
- AAAU Vacant 0019
- AAAW Vacant 0020
- AADE Vacant 0021
- AADI Vacant 0022
- AADS Vacant 0023
- AADV Vacant 0024
- AADX Vacant 0025
- AAB9 Vacant 0026
- AADO Vacant 0027
- AAGZ Vacant 0028
- AAG1 Vacant 0029
- AAAB Vacant 0030
- AAAM Vacant 0031
- MUN1 Vacant 0032
- AABC Vacant 0033
- ARSE Vacant 0034
- AABK Vacant 0035
- AABK Vacant 0036
- AACN Vacant 0037
- AACS Vacant 0038
- AAFW Vacant Unit
- AAN3 Waterfront Booze
- AAVY Zero Cool's Hangar
Below the header is a series of data for each item. Each cell is 1 hex byte, so 4 bytes are used per property (long integer). The format is:
HEX Stock Sell Price Buy price Max buy Unknown Produce Qty Item ST ST ST ST SP SP SP SP BP BP BP BP MB MB MB MB ?? ?? ?? ?? PM PM PM PM
Item codes follow the same order as listed in Eight's AI Equipment notes above, except that Wez appears to starts the list at 1 rather than 0.
The footer block takes the form:
?? ?? ?? ??|?? ?? ?? ??|?? ?? ?? ??|hangar cash|?? ?? ?? ??|?? ?? ?? ?? ?? ?? ?? ??|?? ?? ?? ??|?? ?? ?? ??|?? ?? ?? ??|moth @ bay1|moth @ bay2 moth @ bay3|moth @ bay4|moth @ bay5|moth @ bay6|
UIM map, from Flap:
- SAVEGAME_PATH_ADDRESS_UIM6 0x011b0ECF
- LIMBO_UIM6 0x00514D08 // where you get the address of the building structure
- PLAYER_BEGIN_UIM6 0x0051D9AC
- DAY_UIM6 0x0052D424
- TIME_UIM6 0x0052DAA0
- FOG_UIM6 0x004D51D8
- PAUSE_UIM6 0x0051C2F4
- PLAYER_HEIGHT_UIM6 0x5313BC
- DEBUG_SCREEN_UIM6 0x00534308
- DEBUG_PILOT_UIM6 0x0053430C
- DEBUG_DISTANCE_UIM6 0x0051BF20 //FALSE
- DEBUG_POSITION_UIM6 0x0051BF2A //FALSE
- COORDINATES_UIM6 0x005452E0
- COORDINATES_NEXT_UIM6 500
- COORDINATES_WEST_EAST_UIM6 16
- COORDINATES_ALTITUDE_UIM6 20
- COORDINATES_SOUTH_NORTH_UIM6 24
- COORDINATES_MONORAIL_HALL_UIM6 134
- COORDINATES_MONORAIL_DIRECTION_UIM6 122
- CHATBOX_UIM6 0x00514D84
- // CHAT_INTRO_204 0x004F6328
- CHAT_TITLE_UIM6 0x00514D6C
- CHAT_BODY_UIM6 0x00514D88
- CHAT_INDEX_UIM6 0x00514DD0
- // RECIEVE_INTRO_3005 0x004FD560
- RECIEVE_BOX_UIM6 0x00514DDC
- // RECIEVE_ADDRESS_204 0x0128C528
- RECIEVE_TIME_UIM6 4
- RECIEVE_TITLE_UIM6 8
- RECIEVE_BODY_UIM6 28
- PILOT_FIRST_UIM6 0x0052C998 // where you get the address of the pilot structure
- PILOT_NAME_UIM6 4
- PILOT_LOCATION_TYPE_UIM6 44
- PILOT_LOCATION_UIM6 48
- PILOT_SEAT_UIM6 52
- PILOT_JOB_UIM6 64
- PILOT_MONEY_UIM6 60
- PILOT_VIEW_UIM6 232
- PILOT_COMMAND_UIM6 300
- PILOT_HOME_1_UIM6 660
- PILOT_HOME_2_UIM6 664
- PILOT_MEMORY_BUILDING_UIM6 668
- PILOT_MEMORY_BUILDING_LOCK_UIM6 748
- PILOT_MEMORY_PILOT_UIM6 768
- PILOT_MEMORY_PILOT_LOCK_UIM6 808
- NEXT_PILOT_UIM6 820
- MOTH_FIRST_UIM6 0x0052DEC8 // where you get the address of the moth structure
- MOTH_HUD_UIM6 28
- MOTH_SOFTWARE_UIM6 184
- MOTH_ENERGY_UIM6 480
- MOTH_SHIELD_LEVEL_UIM6 660
- MOTH_STRUCTURE_LEVEL_UIM6 668
- MOTH_HANGAR_UIM6 464
- MOTH_SLOT_UIM6 468
- MOTH_OWNER_UIM6 472
- MOTH_TYPE_UIM6 476
- MOTH_TARGET_TYPE_UIM6 492
- MOTH_TARGET_UIM6 496
- MOTH_DRONE_UIM6 500
- MOTH_ENGINE_UIM6 512
- MOTH_CELL_UIM6 516
- MOTH_POD_UIM6 520
- MOTH_WEAPON_UIM6 540
- MOTH_WEAPON_NONE_UIM6 0x7FFF
- MOTH_AMMO_UIM6 580
- MOTH_CARGO_UIM6 712
- MOTH_PILOT_UIM6 732
- MOTH_PASSENGER_UIM6 736
- MOTH_NEXT_UIM6 744
- MOTH_STALL_UIM6 912
- CARGO_REF_UIM6 0
- CARGO_QUANTITY_UIM6 4
- BUILDING_NAME_UIM6 16
- BUILDING_SOFTWARE_UIM6 48
- BUILDING_TYPE_1_UIM6 52
- BUILDING_TYPE_2_UIM6 56
- BUILDING_SECOND_PART_UIM6 60
- BUILDING_OWNER_TYPE_UIM6 68
- BUILDING_OWNER_UIM6 72
- BUILDING_GOODS_UIM6 88
- BUILDING_GOODS_STOCK_UIM6 0
- BUILDING_GOODS_SELL_UIM6 4
- BUILDING_GOODS_BUY_UIM6 8
- BUILDING_GOODS_BUY_MAX_UIM6 12
- BUILDING_GOODS_MAN_MAX_UIM6 20
- BUILDING_GOODS_MAN_ON_OFF_UIM6 16
- BUILDING_GOODS_NEXT_UIM6 24
- BUILDING_MONEY_UIM6 2236
- BUILDING_NUKED_STATUS_UIM6 2256
- BUILDING_BAY_FIRST_UIM6 2264
- NEXT_BUILDING_UIM6 2360
- BUILDING_QUEUE_UIM6 2364
- BUILDING_QUEUE_INDEX_UIM6 2396
- BUILDING_STASHED_UIM6 1008
- HQ_WANTED_UIM6 0
- HQ_ENEMY_UIM6 360
- HQ_ENEMY_LEVEL_UIM6 364
- HQ_ENEMY_DAY_UIM6 368
- HQ_ENEMY_MINUTES_UIM6 372
- The location of the shapes (not the same as the location of the moving objects!):
- SHAPE_ADDRESS 0x5440B0
- SHAPE_NEXT 84 (it is a simple list, not a chained list)
- SHAPE_NAME 20
- SHAPE_POSITION1_X 24
- SHAPE_POSITION1_H 28
- SHAPE_POSITION1_Y 32
- SHAPE_POSITION2_X 36
- SHAPE_POSITION2_H 40
- SHAPE_POSITION2_Y 44
- SHAPE_POSITION3_X 48
- SHAPE_POSITION3_H 52
- SHAPE_POSITION3_Y 56
- SHAPE_BUILDING 68 (if 1: building.
- I would tell that it is a combination of +68 and +72 that indicates a building)
- SHAPE_TYPE 72 (I suspect that 200 indicates that it is a door,
- 0 the death ray in the hangar ? to be further investigated)
- SHAPE_??? 80 (Apperently it is two WORD. To be investigated)
- SHAPE_??? 82
Data Structures, from Ciaran Gultnieks:
Moth data structure
{
D ObjType; // Object type when not fitted.
B Name[32];
B FragName[32];
D Mass; // Mass in kg.
D DragFactor;
B ArticName[13]; // Base of artic name. (e.g. "MOTH1")
D NumWeapPoints; // Number of weapons points. (In artic data!)
D PassengerSeat; // One if has a passenger seat, else zero.
ResID ArticID;
// D Structure; // maximum structure rating 0-0x4000
D Struc2;
D Value; // Base value of a moth built out of this frame.
ResID Frag[4];
} Frame;
Object data structure
{
B TName[32]; // Name used in terminal commands
B Name[32]; // Original 'game' name
D Value;
D Properties; // Properties - see OP_xxxx in OBJECT.H
B CompShapeName[16];
B Description[256];
D Mass; // Mass per unit in kg.
} ObjDef;
Master object type list
- "ore", stOD_Ore, 200, OP_Commodity, "BOX_08.SHP", stObjDesc_ORE_, 5,
- "water", stOD_PureWater, 250, OP_Commodity, "BOX_07.SHP", stObjDesc_H20_, 5,
- "chemicals", stOD_Chemicals, 350, OP_Commodity, "BOX_02.SHP", stObjDesc_CHEM, 5,
- "scrapmetal", stOD_ScrapMetal, 200, OP_Commodity, "BOX_12.SHP", stObjDesc_SMET, 5,
- "food", stOD_Food, 500, OP_Commodity, "BOX_09.SHP", stObjDesc_FOOD, 5,
- "bodyparts", stOD_Bodyparts, 700, OP_Commodity, "BOX_05.SHP", stObjDesc_BODY, 5,
- "gems", stOD_Gems, 500, OP_Commodity, "BOX_04.SHP", stObjDesc_GEMS, 5,
- "exmetal", stOD_ExMetal, 400, OP_Commodity, "BOX_12.SHP", stObjDesc_EXMT, 5,
- "sheetmetal", stOD_SheetMetal, 400, OP_Commodity, "BOX_12.SHP", stObjDesc_SHMT, 5,
- "constmat", stOD_ConstMat, 100, OP_Commodity, "BOX_12.SHP", stObjDesc_CONS, 5,
- "compcomp", stOD_CompComp, 1550, OP_Commodity, "BOX_03.SHP", stObjDesc_COMP, 5,
- "machparts", stOD_MachParts, 700, OP_Commodity, "BOX_14.SHP", stObjDesc_MACH, 5,
- "plastics", stOD_Plastics, 450, OP_Commodity, "BOX_01.SHP", stObjDesc_PLAS, 5,
- "explosives", stOD_Explosives, 1320, OP_Commodity, "BOX_13.SHP", stObjDesc_EXPL, 5,
- "fusionparts", stOD_FusionParts, 2000, OP_Commodity|OP_Fusion, "BOX_06.SHP", stObjDesc_FUSP, 5,
- "trigger", stOD_Trigger, 3000, OP_Commodity|OP_Fusion, "BOX_11.SHP", stObjDesc_TRIG, 5,
- "matter", stOD_Matter, 3000, OP_Commodity|OP_Fusion, "BOX_10.SHP", stObjDesc_MATT, 5,
- "engine1", stOD_Engine1, 3105, OP_Part|OP_Commodity, "ENGINE1.SHP", stObjDesc_ENG1, 5,
- "engine2", stOD_Engine2, 3910, OP_Part|OP_Commodity, "ENGINE2.SHP", stObjDesc_ENG2, 5,
- "engine3", stOD_Engine3, 4660, OP_Part|OP_Commodity, "ENGINE3.SHP", stObjDesc_ENG3, 5,
- "cell1", stOD_Cell1, 1210, OP_Part|OP_Commodity, "CELL1.SHP", stObjDesc_CEL1, 5,
- "cell2", stOD_Cell2, 1720, OP_Part|OP_Commodity, "CELL2.SHP", stObjDesc_CEL2, 5,
- "cell3", stOD_Cell3, 2410, OP_Part|OP_Commodity, "CELL3.SHP", stObjDesc_CEL3, 5,
- "cell4", stOD_Cell4, 3220, OP_Part|OP_Commodity, "CELL4.SHP", stObjDesc_CEL4, 5,
- "fusioncell", stOD_FusionCell, 15000, OP_Part|OP_Commodity|OP_Fusion, "CELL5.SHP", stObjDesc_CEL5, 5,
- "afterburner", stOD_Afterburner, 8500, OP_Weapon|OP_Commodity, "CELL5.SHP", stObjDesc_Afterburner, 1,
- "pod1", stOD_SmallestPod, 3560, OP_Part|OP_Commodity|OP_Pod, "POD1.SHP", stObjDesc_POD1, 5,
- "pod2", stOD_SmallPod, 5350, OP_Part|OP_Commodity|OP_Pod, "POD2.SHP", stObjDesc_POD2, 5,
- "pod3", stOD_MediumPod, 7590, OP_Part|OP_Commodity|OP_Pod, "POD3.SHP", stObjDesc_POD3, 5,
- "pod4", stOD_LargePod, 8570, OP_Part|OP_Commodity|OP_Pod, "POD4.SHP", stObjDesc_POD4, 5,
- "pod5", stOD_LargestPod, 9030, OP_Part|OP_Commodity|OP_Pod, "POD5.SHP", stObjDesc_POD5, 5,
- "drone", stOD_SalvageDrone, 4000, OP_Part|OP_Commodity, "DRONE.SHP", stObjDesc_DRON, 5,
- "superdrone", stOD_SuperDrone, 9000, OP_Part|OP_Commodity, "DRONE.SHP", stObjDesc_SDRN, 5,
- "framemm", stOD_FrameMM, 6660, 0, "ERROR.SHP", stObjDesc_FRM1, 5,
- "framesy", stOD_FrameSY, 7880, 0, "ERROR.SHP", stObjDesc_FRM2, 5,
- "frament", stOD_FrameNT, 8800, 0, "ERROR.SHP", stObjDesc_FRM3, 5,
- "framehk", stOD_FrameHK, 11400, 0, "ERROR.SHP", stObjDesc_FRM4, 5,
- "framedh", stOD_FrameDH, 13680, 0, "ERROR.SHP", stObjDesc_FRM5, 5,
- "framepl", stOD_FramePL, 20000, 0, "ERROR.SHP", stObjDesc_FRM6, 5,
- "frameal", stOD_FrameAL, 99999, 0, "ERROR.SHP", stObjDesc_FRM7, 5,
- "sprat", stOD_Spratx10, 3000, OP_Weapon|OP_Commodity, "SPRAT.SHP", stObjDesc_Sprat, 5,
- "swarm", stOD_Swarmx10, 4000, OP_Weapon|OP_Commodity, "SWARM.SHP", stObjDesc_Swarm, 5,
- "devastator", stOD_Devastator, 8600, OP_Weapon|OP_Commodity, "DEVASTOR.SHP",stObjDesc_Devastator, 5,
- "leach", stOD_Leachx10, 4500, OP_Weapon|OP_Commodity, "LEACH.SHP", stObjDesc_Leach, 5,
- "flares", stOD_Flaresx10, 1000, OP_Part|OP_Commodity, "FLARE.SHP", stObjDesc_FLAR, 5,
- "chaff", stOD_Chaffx10, 1000, OP_Part|OP_Commodity, "FLARE.SHP", stObjDesc_Chaff, 5,
- "starshells", stOD_StarShellsx10, 1500, OP_Part|OP_Commodity, "STSHELL.SHP", stObjDesc_SHEL, 5,
- "tacnuke", stOD_TacNuke, 10000, OP_Weapon|OP_Commodity|OP_Fusion, "BIGMISS1.SHP",stObjDesc_BMS1, 5,
- "bigbob", stOD_BigBobMissile, 20000, OP_Weapon|OP_Commodity|OP_Fusion, "BIGMISS2.SHP",stObjDesc_BMS2, 5,
- "fireburst", stOD_FireBurstx10, 7800, OP_Weapon|OP_Commodity, "FBURST.SHP", stObjDesc_Fireburst, 5,
- "fireburstsub",stOD_FireBurstSub, 20000, OP_Weapon, "SPRAT.SHP", stObjDesc_NNNN, 5,
- "swarmsub", stOD_SwarmSub, 20000, OP_Weapon, "SPRAT.SHP", stObjDesc_NNNN, 5,
- "underkill", stOD_Underkillx5, 5000, OP_Weapon|OP_Commodity, "FBURST.SHP", stObjDesc_Underkill, 5,
- "groundbase", stOD_GroundBasex5, 7000, OP_Weapon|OP_Commodity, "SPRAT.SHP", stObjDesc_Groundbase, 5,
- "gbsub", stOD_GroundBaseSub, 20000, OP_Weapon, "SPRAT.SHP", stObjDesc_NNNN, 5,
- "hologram", stOD_Hologramx5, 4500, OP_Weapon|OP_Commodity, "SPRAT.SHP", stObjDesc_Hologram, 5,
- "laser", stOD_Laser, 2000, OP_Weapon|OP_EWeapon|OP_Commodity, "LASERGUN.SHP", stObjDesc_Laser, 5,
- "plasmakannon",stOD_PlasmaKannon, 5000, OP_Weapon|OP_EWeapon|OP_Commodity, "PLASGUN.SHP", stObjDesc_PlasmaKannon, 5,
- "laserturret", stOD_LaserTurret, 9500, OP_Weapon|OP_EWeapon|OP_Commodity, "LASERTUR.SHP", stObjDesc_LaserTurret, 5,
- "pulselaser", stOD_PulseLaser, 9900, OP_Weapon|OP_EWeapon|OP_Commodity, "LASERGUN.SHP", stObjDesc_PulseLaser, 5,
- "deathray", stOD_DeathRay, 9900, OP_Weapon|OP_EWeapon, "DEATHRAY.SHP", stObjDesc_DRAY, 5,
- "newmothnt", stOD_NewMothNT, 50000, OP_NewMoth, "ERROR.SHP", stObjDesc_MOT3, 15,
- "newmothhk", stOD_NewMothHK, 55000, OP_NewMoth, "ERROR.SHP", stObjDesc_MOT4, 15,
- "newmothdh", stOD_NewMothDH, 60000, OP_NewMoth, "ERROR.SHP", stObjDesc_MOT5, 15,
- "newmothmm", stOD_NewMothMM, 40000, OP_NewMoth, "ERROR.SHP", stObjDesc_MOT1, 15,
- "newmothsy", stOD_NewMothSY, 45000, OP_NewMoth, "ERROR.SHP", stObjDesc_MOT2, 15,
- "newmothpl", stOD_NewMothPL, 70000, OP_NewMoth, "ERROR.SHP", stObjDesc_MOT6, 15,
- "unknown", stOD_UnknownOrigin, 1, 0, "ERROR.SHP", stObjDesc_UNKN, 1,
- "massdriverpart",stOD_MassDriverPart, 2, 0, "ERROR.SHP", stObjDesc_MPRT, 1,
- "mystery", stOD_MysteryPackage, 2, 0, "ERROR.SHP", stObjDesc_MPCK, 1,
- "blackbox", stOD_BlackBox, 2, 0, "ERROR.SHP", stObjDesc_BLCK, 1,
- "minerals", stOD_Minerals, 120, 0, "BOX_08.SHP", stObjDesc_Minerals, 25,
- "airfilters", stOD_AirFilters, 620, 0, "BOX_08.SHP", stObjDesc_AirFilters, 25,
- "pleasurecubes", stOD_PleasureCubes, 310, 0, "BOX_08.SHP", stObjDesc_PleasureCube, 25,
- "alcohol", stOD_Alcohol, 520, OP_Commodity, "BOX_08.SHP", stObjDesc_Alcohol, 25,
- "textiles", stOD_Textiles, 220, 0, "BOX_08.SHP", stObjDesc_Textiles, 25,
- "furs", stOD_Furs, 460, OP_Commodity, "BOX_08.SHP", stObjDesc_Furs, 25,
- "cigars", stOD_HuskarCigars, 625, OP_Commodity, "BOX_08.SHP", stObjDesc_Cigars, 25,
- "servantdroids", stOD_ServantDroids, 820, 0, "BOX_08.SHP", stObjDesc_Droids, 25,
- "narcotics", stOD_Narcotics, 2520, OP_Commodity, "BOX_08.SHP", stObjDesc_Narcotics, 25,
- "clone", stOD_Clone, 5000, OP_Commodity|OP_BgInstall, "BOX_08.SHP", stObjDesc_Clone, 25,
- "framesw", "FRAME SW", 7880, 0, "ERROR.SHP", stObjDesc_FRM2, 5,
- "trojan", "Trojan", 8000, OP_Weapon|OP_Commodity, "BOX_08.SHP" ,"Trojan", 5,
- "newmothsw", "New Moth SW", 90000, OP_NewMoth, "ERROR.SHP", "A new Swallow Moth", 15,
- "manweapons", stOD_IndManWeapons, 41000, OP_Commodity|OP_BgInstall, "BOX_08.SHP", stObjDesc_IndManWeapons, 40,
- "mancomp", stOD_IndManComp, 28000, OP_Commodity|OP_BgInstall, "BOX_08.SHP", stObjDesc_IndManComp, 40,
- "manoreproc", stOD_IndManOreProc, 19000, OP_Commodity|OP_BgInstall, "BOX_08.SHP", stObjDesc_IndManOreProc, 40,
- "manbooze", stOD_IndManBooze, 25000, OP_Commodity|OP_BgInstall, "BOX_08.SHP", stObjDesc_IndManBooze, 40,
- "mannarcotics", stOD_IndManNarcotics, 58000, OP_Commodity|OP_BgInstall, "BOX_08.SHP", stObjDesc_IndManNarcotics, 40,
- "fumbler", "Fumblerx5", 6500, OP_Weapon|OP_Commodity, "SPRAT.SHP", "A pack of 5 Fumblers, guided missiles that cause very minor damage, but cargo loss when shields are low.", 5,
- "disabler", "Disablerx5", 7600, OP_Weapon|OP_Commodity, "SPRAT.SHP", "A pack of 5 Disablers, guided missiles that cause complete engine power loss for a short time.", 5,
- "blaster", "Blasterx2", 15000, OP_Weapon|OP_Commodity, "SWARM.SHP", "A pack of 2 Blasters, missiles specialised for building attacks.", 5,
The properties applied to an object type are defined as a bitmask. They're as follows:
- 1 OP_Commodity - A commodity that can be bought and sold.
- 2 OP_Part - A part that can be fitted to a moth.
- 4 OP_Weapon - Can be fitted, is a weapon.
- 8 OP_NewMoth - A complete new moth.
- 16 OP_EWeapon - An energy weapon (Always has OP_Weapon)
- 32 OP_Pod - A pod.
- 64 OP_Fusion - Requires fusion technology. Hidden from player until relevant point in plot
- 128 OP_BgInstall - Can be installed in a building.
Engines data structure
{
ObjType Type; // Object type when not fitted.
D MaxThrust; // Thrust provided at max power.
D CThrust; // Control thrust provided.
D IdleUsage; // Power usage when idle - includes power used
// to defy gravity!
D ThrustUsage; // Power usage per second at max power, on top
// of IdleUsage.
D ControlUsage; // Power usage per second for control thrust.
D Mass; // Mass in kg.
} Engine;
This is the actual data:
{
OT_None, 0, 0, 0, 0, 0, 0, // 0 - Not a valid engine.
OT_Engine1, Metre*70, Metre*40, 200, 2000, 200, 400,
OT_Engine2, Metre*95, Metre*50, 300, 2500, 200, 600,
OT_Engine3, Metre*115, Metre*60, 150, 3000, 200, 800,
};
Cell data structure
{
ObjType Type; // Object type when not fitted.
D MaxPower; // Power held when fully charged.
D ChargeRate; // Recharge rate at max light, per second.
// If zero, recharges to full all the time. (Fusion!)
D Mass; // Mass in kg.
} PowerCell;
And the data...
{
OT_None, 0, 0, 0, // 0 - Not a valid cell.
OT_Cell1, 2000000, 410, 10,
OT_Cell2, 4000000, 810, 20,
OT_Cell3, 2000000, 1010, 40,
OT_Cell4, 1500000, 610, 50,
OT_FCell, 2000000, 0, 30,
};
D=DWORD and B=BYTE.
Scale-wise:
- const D TD_Second=0xC22;
- #define Foot 488 #define Inch 41
- #define Metre 1600
- #define Mile 2575610
- #define Kilometre 1600000
- #define Gravity (Metre*8)
- #define MPH 715
- #define KMH 444