Difference between revisions of "Talk:GEOSCAPE.EXE"

From UFOpaedia
Jump to navigation Jump to search
m (→‎HWP weapons data: added TFTD info)
 
Line 100: Line 100:
  
 
===HWP weapons data===         
 
===HWP weapons data===         
                             00  02  04  06  08  0A  0C  0E  10  12
+
                             00  02  04  06  08  0A  0C  0E  10  12         TFTD Equivalent
  .data:0046D57C tank cannon  0,  4, 3Ch, 3Ch, 21h,  0,  0, 5Ah, 50h,  0
+
  .data:0046D57C tank cannon  0,  4, 3Ch, 3Ch, 21h,  0,  0, 5Ah, 50h,  0         Tank/harpoon
  .data:0046D    tank rocket  2,  Ch, 55h, 37h, 2Dh,  0,  0, 73h, 4Bh,  0
+
  .data:0046D    tank rocket  2,  Ch, 55h, 37h, 2Dh,  0,  0, 73h, 4Bh,  0         Tank/Torpedo
  .data:0046D    tank laser    3, 11h, 6Eh, 32h, 21h,  0,  0, 55h, 4Bh,  0
+
  .data:0046D    tank laser    3, 11h, 6Eh, 32h, 21h,  0,  0, 55h, 4Bh,  0         Tank/Gauss
  .data:0046D    tank plasma  4, 24h, 6Eh, 56h, 1Eh,  0,  0, 64h, 3Ch,  0
+
  .data:0046D    tank plasma  4, 24h, 6Eh, 56h, 1Eh,  0,  0, 64h, 3Ch,  0         Triscene/BioDrone/Displacer
  .data:0046D    blaster bomb  2, 28h, 8Ch,  0,  0,  0,  0, 78h, 50h,  1
+
  .data:0046D    blaster bomb  2, 28h, 8Ch,  0,  0,  0,  0, 78h, 50h,  1         Displacer/PWT
 
  .data:0046D    acid spit    7, 26h, 8Ch, 4Bh, 1Eh,  0,  0, 6Eh, 3Ch,  0
 
  .data:0046D    acid spit    7, 26h, 8Ch, 4Bh, 1Eh,  0,  0, 6Eh, 3Ch,  0
  .data:0046D    cyberdisk    4, 22h, 82h, 4Bh, 1Eh,  0,  0, 6Eh, 3Ch,  0
+
  .data:0046D    cyberdisk    4, 22h, 82h, 4Bh, 1Eh,  0,  0, 6Eh, 3Ch,  0         Xarquid
  .data:0046D    sectopod      3, 22h, 64h, 4Bh, 1Eh, 32h, 23h, 6Eh, 3Ch,  0
+
  .data:0046D    sectopod      3, 22h, 64h, 4Bh, 1Eh, 32h, 23h, 6Eh, 3Ch,  0         Deep One
 
   
 
   
 
  The structure is:
 
  The structure is:

Latest revision as of 05:55, 27 February 2016

X-COM Complete Packages

This entry is only a stub for the moment. We grognards on the wiki ask anyone who has bought one of the new packages to tell us things like:

  1. Who did you get it from - GamersGate, Steam, or elsewhere? (If it is found that they're both selling the exact same package, we'll say so here.)
  2. What version of X-COM UFO Defense is included? Probably the Win CE version (below), yes?
  3. Any trouble installing, or other considerations to keep in mind?
  4. Any problems versus what you expect from X-COM? (if you played it before, or have been reading this wiki, or whatever)

Et cetera. This info is intended to help those who might buy the packages in the future, and is also intended to tell us old hands what's in the package.

Once we get 3-5 mini-reviews, we'll remove these italicized comments, and collapse reviews into a more "wiki-like" overview. (We'll include a link to the time/version when you posted individual reviews.) So, newcomers who bought the Complete Package, please make a new "Review #(next #)" section below, with a summary review. And see the new Talk:GEOSCAPE.EXE#New Bundles section for more in-depth Q&A and comments.

If any of you have the ability to make comments on Steam or GamersGate that are tacked onto the new X-COM bundles, please post a comment letting people know about this wiki. www.UFOpaedia.org, loud and proud. It's 1999. We're here to save Earth.

Thanks, and welcome!

wfames, elliotw2, or other new Complete Package folks - please put your comments under a heading like the one below - thanks! -MikeTheRed 03:51, 19 January 2009 (CST)

Review #1 by wfames

Everything seems fine except for psionics. Soldiers in both original X-Com and TFTD do not seem to gain any Psi Skill for either successful or unsuccessful mind control attempts. MC also never seems to work more than once in any given battle. Makes psionics practically useless. It's still a great game, even with that frustration, though.


Review #2 by Draco Cracona

Had MC in TFTD work multiple times in one battle with the steam version and seemed like MC-Str was going up faster with those using it (can check tomorrow night) - they definately got some TUs from just MCing; will try to check out some of the TFTD research bugs soon, although the magnetic navigation is available as soon as ion armour is done iirc, although I do remember needing a lobsterman nav for something, I didn't spend much time going from ion to magnetic ion and I saw no Tasoth Commanders. Seems like UFO still has the very annoying difficulty bug; will try it with Xcomutil soon and see if theres a difference. Not played apocalypse yet. Tried many times with decent MC-skill to MC terror units; never managed it - no idea if this happens in the original too though.


Review #3 by Muton commander

I've had the Steam version package for a while, but I've mostly played Apoc or UFO Defense, not TFTD. In Apoc, I've yet to see anything wrong with it so far, and in UFO Defense, It appears to be the original DOS version, as the Blaster Launcher can fire normally, with no Up Waypoint Bug (accidently tested to my dismay and the death of half of my squad). I'm going to go test TFTD more, as it is really what needs or seems to need to most attention on the Wiki.

Review #4 by Diegoba

I've just downloaded the package from Direct2Disk.

  • Ufo Defense. Version 1.2 running under DOSBox. The installer takes care of all configuration and creates an icon for the game. I noticed some changes in the sounds. The intro seems to have been modified to include sounds from the game (weapons fire, doors opening). Sectoids don't make the high-pitched scream when killed, they sound more like Mutons. Maybe V1.2 is like this and I've never played it before? More on this as I keep playing.


Review #5 by niffiwan

I purchased the complete package from GamersGate. As Diegoba said above, the installer took care of everything. The "default" version (i.e. the one that the created icon launches) seems to be DOS 1.4 (running inside Dosbox 0.72) which doesn't seem to match with what elliotw2 found. I say 1.4 because the filesize of geoscape.exe is 382,957 bytes. The readme.txt included in the base XCOM dir says version 1.2?

Anyway, they have also included the Win CE version as they have the following two executables as well, 'UFO Defense.exe' and 'UFO Defense_Patched.exe'. The 1st doesn't seem to work properly on my PC with the intro & menu graphics being garbled but the 2nd seems to work OK (but I haven't tested further than checking that the 'load game' window displays correctly).

'UFO Defense_Patched.exe' is 6,144 bytes & I'd guess that it's just some sort of wrapper for 'UFO Defense.exe'.

I've played a fair bit of the way through a "superhuman" game (which given the version I've now found is really "beginner") and it all seems to work as expected. No hassles with the install or configuration. Everything seems to match what the wiki says. Unlike wfames the Psi skill seems to be increasing normally for the soldiers in my game. --Niffiwan 06:06, 15 February 2010 (EST)

Note on x_patched.exe

The patched EXE found in many of the packages is f0ders XCLoader.exe. This is a wrapper that patches in memory the way the games interact with Direct X. This resolves corrupt graphics. --BladeFireLight 18:05, 15 February 2010 (EST)

Review #6 by ciago

Bought the game from Gamestop Now. It installed using DOSBox v.72 and works great. Seem slightly more difficult than I expected, but I'm sure that's just newbie inexperience. However, it installed the game under 2K Games/X-COM UFO Defense and I cannot find a way to get the XCOMHack at http://www.stonepool.com/xcom/ to work. It tells me to find the save game directory but no matter where I select it won't accept it. If anyone knows how to fix this, let me know. If you don't need to mess with the save games, Gamestop Now works great! Ciago92 18:16, 4 September 2012 (EDT)

XcomHack is an old application that probably does not understand long path names, including path names with spaces in them. Try installing and running XcomHack in the actual XCOM directory, then you can specify the path to save game files as .\GAME_1 etc (don't forget the initial dot). If that fails, copy the save game directory you want to work on to C:\TEMP\game_1 (etc) and then copy it back. Or use XcomUtil, which does most of the same things (not all), and more. Enjoy! Spike 20:16, 4 September 2012 (EDT)
If it will only let you browse for the directory, you may be in trouble. Otherwise, try what Spike says. Another trick is that long file and directory names also have hidden short names... "C:\Documents and Settings" is also "C:\DOCUME~1". You can see them in a DOS command box (/Start /Run COMMAND[Enter], then type "DIR /X"). You can see where the savegames are, right? -MikeTheRed 23:21, 4 September 2012 (EDT)


I just remembered something: Some bitmaps are stored in the executable. I think one such bitmap belongs to the Geoscape side bar. If the offsets for this can be located in the executable, you should be able to sign it off as an irrelevant section if you're hunting for particular variables in the executable.

But that's the hard part. Where do you look? And what image width are we looking at?

I once tried creating a program that took in an offset number, a line width number and how many bytes you want displayed from then on as the parameters. It would then open up one of the executables and draw the bytes on the screen as a bitmap of sorts. Kind of never got off the ground - I got distracted and now a year has passed and all my programming knowledge has gone into a vegetative state. I wonder if a program like this would be useful in locating tables or images in the file?

- NKF


The Geoscape side bar? Isn't that in GEOBORD.SCR?

Regardless, something to mask out known offsets in the file would certainly come in handy.

- Bomb Bloke 22:41, 21 October 2006 (PDT)

Offsets

This page is going to get rather long if we explain in detail all of the offsets here. I don't know if we should merge the Alien stats to the Alien Stats page or make a new page for it?

Also technically the Weapon stats are stored in Tactical so probably should be put on that page.

I've found some other offsets and if I keep digging I'm sure I'll find more. See my talk page for a mock-up of what I'm thinking for the format. Pi Masta 15:21, 12 March 2007 (PDT)

Well, in terms of length, it is (or is going to be) much like other game files: lots and lots of offsets, and their descriptions. It's not a page a casual player is going to reference.--Ethereal Cereal 15:56, 12 March 2007 (PDT)

Added the Detection Range offsets that Seb76 found. By the way fwiw my view is that only technically minded people will be looking at the wiki entry for a game save file so it's ok to fill this page with a lot of offsets. Spike 16:13, 9 March 2008 (PDT)


Well then, if you don't mind about huge posts, I guess it is a good place to put some stuff I discovered with static dissassembly of the executable [before my hard drive burns down ;)], some info may already be known (gold edition, sorry about the crude format...):

Damage modifiers

.data:0046DE74 Incendiary 64h,64h,50h,  0,28h,46h,46h,64h,  0,50h,AAh,64h,64h,64h; 0
.data:0046DE90 HiEx       64h,64h,64h,64h,4Bh,64h,64h,64h,82h,64h,64h,50h,3Ch,50h; 0
.data:0046DEAC Laser      64h,64h,64h,64h,64h,64h,64h,64h,64h,64h,64h,96h,64h,46h; 0
.data:0046DEC8 Plasma     64h,64h,64h,64h,64h,64h,64h,64h,64h,64h,64h,50h,64h,46h; 0
.data:0046DEE4 Stun       64h,64h,5Ah,50h,64h,64h,50h,64h,64h,5Ah,64h,64h,64h,  0; 0
.data:0046DF00 Melee      64h,78h,64h,64h,5Ah,64h,64h,64h,64h,64h,64h,64h,64h,64h; 0
.data:0046DF1C Acid       64h,A0h,6Eh,64h,28h,64h,64h,64h,64h,64h,64h,64h,64h,64h; 0

HWP weapons data

                            00   02   04   06   08   0A   0C   0E   10  12         TFTD Equivalent
.data:0046D57C tank cannon   0,   4, 3Ch, 3Ch, 21h,   0,   0, 5Ah, 50h,  0         Tank/harpoon
.data:0046D    tank rocket   2,  Ch, 55h, 37h, 2Dh,   0,   0, 73h, 4Bh,  0         Tank/Torpedo
.data:0046D    tank laser    3, 11h, 6Eh, 32h, 21h,   0,   0, 55h, 4Bh,  0         Tank/Gauss
.data:0046D    tank plasma   4, 24h, 6Eh, 56h, 1Eh,   0,   0, 64h, 3Ch,  0         Triscene/BioDrone/Displacer
.data:0046D    blaster bomb  2, 28h, 8Ch,   0,   0,   0,   0, 78h, 50h,  1         Displacer/PWT
.data:0046D    acid spit     7, 26h, 8Ch, 4Bh, 1Eh,   0,   0, 6Eh, 3Ch,  0
.data:0046D    cyberdisk     4, 22h, 82h, 4Bh, 1Eh,   0,   0, 6Eh, 3Ch,  0         Xarquid
.data:0046D    sectopod      3, 22h, 64h, 4Bh, 1Eh, 32h, 23h, 6Eh, 3Ch,  0         Deep One

The structure is:
00 damage type               0A autoshot accuracy
02 ammo type                 0C autoshot TU 
04 damage                    0E aimshot accuracy 
06 snapshot accuracy         10 aimshot TU 
08 snapshot TU               12 guided weapon 

----------
People were asking about the location where the ammo amount is passed to TACTICAL.
For the Tank/Cannon:
44ED20  74 11 66 85 C0 75 06 C6 45 76 1E EB 0A C6 45 76 
the Rocket launcher and FBL:
44ED30  08 EB 04 C6 45 76 FF 33 FF C7 44 24 28 04 00 00 

There are several other places that must be altered to adjust base inventory properly. 
-Tycho

Funding countries borders polylines

.data:00474AD4 GeoBordersData dw 0FFFFh                ; DATA XREF: GeoDrawBorders+3�r
.data:00474AD4                                         ; GeoDrawBorders+C�o
.data:00474AD6 dw 221h
.data:00474AD8 dw 0FF43h
.data:00474ADA dw 238h
.data:00474ADC dw 0FF3Dh
.data:00474ADE dw 22Ch
.data:00474AE0 dw 0FF28h
.data:00474AE2 dw 233h
.data:00474AE4 dw 0FF1Fh
.data:00474AE6 dw 236h
...

TFDT-CE(CRC32:C2F6C035): 0x0008AE00..0x0008B00F.
use: rivers instead of country borders.
data: lon,lat,lon,lat.. streams, Flags: lon = -1(NewLine), lon = -2(EndOfSection).

Funding countries names coordinates

.data:00474DF8 GeoCountryNamesData dw 280h             ; DATA XREF: GeoDrawCountryNames+6�o
.data:00474DFA dw 0FF40h
.data:00474DFC dw 263h
.data:00474DFE dw 0B30h
.data:00474E00 dw 0FE53h
.data:00474E02 dw 25Ch
.data:00474E04 dw 0B2Ch
.data:00474E06 dw 0FEABh
.data:00474E08 dw 260h
.data:00474E0A dw 14h
.data:00474E0C dw 0FE8Ch
...

TFDT-CE(CRC32:C2F6C035): 0x0008B010..0x0008B06F. ((16*2)*3:lon,lat,Nid)

Craft type data

Craft type known fields: (14 x 2-byte dwords per record)

00000000 structCraftData struc ; (sizeof=0x1C)
00000000 nameIdx           reference to the ENGLISH.DAT entry
00000002 scoreDestroyed   ; base 10
00000004 weaponPods      always 2 for UFOs. is this used for UFOs? how?
00000006 maxSpeed        in knots   ; base 10
00000008 acceleration 
0000000A fuelCapacity    ; base 10
0000000C damageCapacity  ; base 10
0000000E ufoSize         5 - Very Small / 4 - Small (inc. XCom) / 3 - Medium / 2 - Large / 1 - Very Large -spike
00000010 ufoReload       UFO only. Firing interval (rand(x-(diff*2))+(x-(diff*2)). 
                            Values: 56=S/MSct 48=LSct/Abd 32=Harv 24=Suppl/Terr/BS. -spike
00000012 ufoEscapeTime   100~200% = time before UFO attempts escape (on Beginner) - Volutar. 
                          Values: SS=200 MS=250 LS=300 A=500 H=500 TS=2000 BS=4000 SS=3000 -spike
00000014 ufoPower        alien weapon distance in km*8 -kyrub/spike
00000016 ufoRange        alien weapon damage (0%-100%) -Morgan525/Tycho
00000018 TroopSpace      Troop capacity 
0000001A HWPSpace        HWP capacity  
0000001C structCraftData ends

While the 9th [dword] could be UFO weapon Accuracy or even rate of fire, it seems unlikely. All the values are a multiple of 8 just like distance, so it may be related to that. That's my guess. I'm sure someone like Seb would know more. --Zombie 23:56, 4 July 2009 (EDT)

Sorry I didn't sign those theory guesses, I will do so now. Actually, evidence is building up that the byte at 0x10 within structCraftData is an inverse co-factor - i.e. a divisor - of the net total damage output of UFO attacks. In other words, it could well be a firing interval value such as is seen for XCom craft weapons. I have done 3-4 sets of ten tests so far (XCom craft survival-time tests, deducing UFO damage output). 1 set was for Medium Scout vs Interceptor, 2 sets were for Terror Ship vs Avenger. (I also did multiple attacker sets but those are harder to compare directly to this scenario). So far all 3 test sets are a reasonably good fit for this formula:
UFO net damage output = 
(Weapon power x 75% (avg of randomisation) x 2/3 (accuracy) ) 
 x ( time (in game seconds) / 0x10 offset (firing interval) )
What I want to do next is take one or both of those test scenarios, hack the 0x10 offset up or down, and see if the observed damage output varies inversely. If so, I think that will be pretty strong evidence. Even in my data, there is definitely still also some variation going on that is not fully accounted for in the formula above. As you say it is interesting the 0x10 values are all multiples of 8, suggesting distances. I will keep testing and see what I come up with! Cheers, Spike 06:39, 5 July 2009 (EDT)

I'm enclined to agree with the rate of fire theory. A countdown is stored in CRAFT.DAT at offset 0x26 and when it hits 0, the UFO fires. It is reset for the next shot with this formula:

tmp = offset10-2*difficultyLevel
nextShot = RAND(0,tmp)+tmp

Edit: Although the attack type does not appear here, I suspect that while a missile is "traveling", the countdown is not changed. As a result, closer ranges means higher rates of fire. Seb76 07:36, 5 July 2009 (EDT)

Excellent timing Seb! I was just about to start my tests. I could've coped with the random element, since I'm only measuring averages over time, but the presence of a 2nd factor (difficultyLevel), I was not expecting. It would have completely thrown my numbers. Also I might've crashed the game since I'd set offset10 to 0x08 on difficulty level Superhuman (=5?), creating a negative rate of fire! For simplicity I might do my tests on Beginner from now on, and repeat the earlier tests on Beginner.
It's interesting that you don't see any reference to Attack Mode. So the changing rate of fire could indeed be a "Space Invaders Effect" as you say. Perhaps the reason this is not seen for cannon fire is that cannon fire is resolved instantly, whereas missiles are plotted as objects on the map? Is there any indication that missiles and cannon are handled differently by these routines?
My test scenarios are probably too simplistic at the moment. But, I am sure I am seeing different rates of fire for missiles at the same range, dependent on whether they are in Standard or Cautious attack mode. I will recheck this. Spike 08:07, 5 July 2009 (EDT)
Seb, I realise your formula above for variable firing intervals, from 100%-200% of the base value, explains the 2/3 factor I found which I thought might be UFO Accuracy. The average of a 100-200% range is 1.5, and the inverse of this is 2/3. So perhaps there is no accuracy factor in UFO weapon damage at all. Possibly you just have a base damage and a base firing interval, plus a 50%-100% variation on the base damage and a 100%-200% variation on the firing interval. This would certainly match the data I have so far.

[UFOs have a 60% accuracy with no variation depending upon difficulty level. Damage is 0-100%.--Tycho 00:07, 16 April 2012 (EDT)]

I have done a couple of tests of varying this offset 0x10 value and they show the right "sign": increasing this value decreases UFO damage output over time, and decreasing this value increases UFO damage output. The effect is strong, and approximately linear, i.e. halving the value roughly doubles the damage, etc (testing on Superhuman). To quantify it more exactly I need to go back and control for Difficulty Level which I did not expect to be a variable. I'm also going to control for the time taken for the UFO to close into firing range - by increasing the UFO weapon range in the tests to 70 or 75km.
One thing that is worrying me though is that the firing interval is random. Since I'm using the firing interval of a cannon as my "timer" to measure the duration of all other events, it means I'm measuring with a yardstick that randomly changes size. I have to hope that my sample sizes are large enough that the averages will dominate over the fluctuations.
More worrying is the idea that rate of fire varies with range (as opposed to with Attack Mode). That would be an elastic yardstick, worse than a random one. I thought I had disproved this but I need to go back and do it again, more carefully. I need to test the same weapon at the same range with different attack modes, again. I may well be guilty of building my hypothesis into my test scenario as an assumption! I will also double check the assumption that hacking the firing interval values for XCom weapons has no effect. I'm pretty sure that, even if the absolute firing interval changes with range, the relative ratios of firing interval when comparing different weapons, does not change. But I'll double check.
In the code, do you see any evidence of cannon-type weapons being treated differenly from missile weapons? For example, do cannon rounds not "travel"? Also, do you see the same rnd (0,tmp) + tmp function being applied to the firing interval of XCom air attacks? Regards, Spike 14:30, 5 July 2009 (EDT)

[Interestingly, cannon rounds are treated just like missiles: They have a speed delta that is added to the speed delta of the Xcraft. Since the range of a cannon is so small it is almost an instant hit. Laser Cannon and Plasma cannon fire hits are resolved instantly once the fire delay timer reaches zero.--Tycho 00:07, 16 April 2012 (EDT)]

Canon-type and missile weapons treated absolutely the same way. There are array of 26 launched projectiles for the left and 26 for the right craft weapons. Thus only 52 missiles can be in-the-fly mode. Cannon weapon uses this "burst mode" at maximum potential, others - not. Though, you can patch built-in xcom craft weapon characteristics with reload time set to minimum delay, and see how it go.--Volutar 06:24, 3 October 2011 (EDT)

Builtin craft field 0x12 (ufoUnknown) actually works as craft parameter of how much time before alien craft tries to escape from pursue. The formula of this time is

UfoCraft->EscapeTimer_Field_28 = craftbuiltin->ufoManeuverability_Field_12
    + RAND(0,craftbuiltin->ufoManeuverability_Field_12) - 30*difficulty_level;

--Volutar 02:45, 14 April 2011 (EDT)

Base components data

.data:00470640 baseElements baseComponentStruct <249h, 300, 1, 4, 0, 0, 5>; 0
.data:00470640                                         ; DATA XREF: BaseEditDrawSideBar_sub_432EF0+12D�r
.data:00470640                                         ; BuildFacilities+74�o ...
.data:00470640 baseComponentStruct <24Ah, 400, 16, 10, 1Eh, 0, 4>; 1
.data:00470640 baseComponentStruct <24Bh, 750, 26, 30, 0Ah, 0, 4>; 2
.data:00470640 baseComponentStruct <24Ch, 800, 32, 35, 32h, 0, 4>; 3
.data:00470640 baseComponentStruct <24Dh, 500, 12, 10, 0, 0, 5>; 4
.data:00470640 baseComponentStruct <24Eh, 800, 25, 15, 0, 0, 4>; 5
.data:00470640 baseComponentStruct <24Fh, 200, 16, 5, 0, 3201F4h, 5>; 6
.data:00470640 baseComponentStruct <250h, 150, 10, 5, 0FAh, 0, 4>; 7
.data:00470640 baseComponentStruct <251h, 400, 18, 15, 0Ah, 0, 4>; 8
.data:00470640 baseComponentStruct <252h, 400, 24, 10, 0, 3C0258h, 0Ah>; 9
.data:00470640 baseComponentStruct <253h, 600, 34, 12, 0, 460384h, 0Ah>; 10
.data:00470640 baseComponentStruct <254h, 800, 34, 14, 0, 5004B0h, 0Ah>; 11
.data:00470640 baseComponentStruct <255h, 1200, 38, 15, 0, 0, 9>; 12
.data:00470640 baseComponentStruct <256h, 1300, 33, 5, 0, 0, 9>; 13
.data:00470640 baseComponentStruct <257h, 750, 24, 16, 0Ah, 0, 8>; 14
.data:00470640 baseComponentStruct <258h, 1400, 26, 30, 0, 0, 9>; 15
.data:00470640 baseComponentStruct <259h, 200, 25, 25, 1, 0, 4>; 16

fields:

00000000 baseComponentStruct struc ; (sizeof=0x10)
00000000 stringId dw ?
00000002 cost dw ?                               ; base 10
00000004 constructionTime db ?                   ; base 10
00000005 maintenance db ?                        ; base 10
00000006 anonymous_4 dw ?
00000008 anonymous_5 dd ?
0000000C anonymous_8 dd ?
00000010 baseComponentStruct ends

Alien missions data

(I made another post for this one in missions.dat):
.data:00470E70 alienMissionData structAlienMission <5, 1, 0, 12Ch>      ; 0
.data:00470E70                                         ; DATA XREF: SpawnAlienShip+10D�r
.data:00470E70                                         ; UpdateAlienMissions+78�r ...
.data:00470E70 structAlienMission <6, 1, 2, 104h>      ; 1 ;
.data:00470E70 structAlienMission <7, 2, 4, 12Ch>      ; 2 ;
.data:00470E70 structAlienMission 5 dup(<0FFFFh, 0FFFFh, 0FFFFh, 0FFFFh>); 3
...

fields:

00000000 structAlienMission struc ; (sizeof=0x8)
00000000 ufoType dw ?
00000002 numUfoToSpawn dw ?
00000004 unknown dw ?
00000006 timeCounter dw ?
00000008 structAlienMission ends

Ground patches

(used to spawn locations on continents):
.data:00471278 randPlaces structArea <640h, 0FDF8h, 0A0h, 28h>    ; 0
.data:00471278                                         ; DATA XREF: GetRandomPositionOnContinent+2D�r
.data:00471278                                         ; GetRandomPositionOnContinent+46�r ...
.data:00471278 structArea <730h, 0FDF8h, 0F0h, 50h>    ; 1
.data:00471278 structArea <8C0h, 0FE70h, 50h, 50h>     ; 2
.data:00471278 structArea <730h, 0FE70h, 0A0h, 50h>    ; 3
.data:00471278 structArea <820h, 0FE70h, 0A0h, 50h>    ; 4
.data:00471278 structArea <730h, 0FEC0h, 0A0h, 50h>    ; 5
.data:00471278 structArea <7D0h, 0FEC0h, 0B0h, 60h>    ; 6
.data:00471278 structArea <870h, 0FEB0h, 0A0h, 88h>    ; 7
00000000 structArea struc ; (sizeof=0x8)
00000000 xstart dw ?
00000002 ystart dw ?
00000004 width dw ?
00000006 height dw ?
00000008 structArea ends

Some expansion on Seb's data above - thanks to kyrub for explaining this structure to me, it's been very nearly a year since so it's probably about time I documented it somewhere. ;)

This area of the executable, starting at 0x71278 for EU/CE or 0x7BA70 for TFTD/CE, defines the comings and goings of alien ships. It's divided up into 720 records of four two-byte signed integers each (5,760 bytes for the entire table).

The records are first divided up into groups of sixty, one for each of the first twelve regions in each game:

UFO:EU TFTD
0 North America North Atlantic
1 Arctic South Atlantic
2 Antarctica North Pacific
3 South America South Pacific
4 Europe Mediterranean
5 North Africa South China Sea
6 Southern Africa Indian Ocean
7 Central Asia Sea of Japan
8 South East Asia North Sea
9 Siberia Caribbean
10 Australasia Antarctic
11 Pacific Arctic
12 North Atlantic Eurasia
13 South Atlantic North America
14 Indian Ocean Africa

The last three regions (12 to 14) aren't covered by this table. Nor are they handled by ZONAL.DAT, which tracks where aliens will concentrate their attacks each month, nor in XBASES.DAT, which tracks within which regions they have discovered your bases. Suggesting that planting bases in those last three areas may somehow make you immune from attack. They're pictured here should anyone wish to test this out.

Anyway, the groups of sixty are further divided up into groups of ten, according to the type of alien activity intended to take place there:

Purpose
0 After spawning on the map in an area from 5, most UFOs will fly to an area in this set, then turn and head to their actual destination. After landing, the UFO will usually leave the map through an area in set 5, but some instead return here then go to another landing zone first. Base supply missions don't go here, they go straight to the base they intend to supply. Retaliation missions may or may not go here, they seem to randomly bounce between areas from sets 0-4 before leaving through set 5 (possible pattern of 1-2-3-4-0-5?).
1 Landing zones for most alien mission types. UFOs usually either land in one of these areas, or one from set 2.
2 Landing zones for most alien mission types. UFOs usually either land in one of these areas, or one from set 1.
3 Vast majority of areas defined here are cities (width/height of zero). Infiltration ships occasionally land here. Not all terror ships land on cities, some opt to land/fly around sets 1/2, but actual terror mission where you fight in a city only happen here.
4 Alien base building areas, and rarely, infiltration landing zones (these are mostly in remote areas).
5 This defines where UFOs may enter/exit the map. After spawning, most UFOs (except supply/retaliation ships) head to an area from set 0.

So once the UFO has picked a region and a mission type, it then randomly chooses one of the ten records available, and this is used to work out where it'll land. Each record defines a small rectangular area on the world map, and the UFO simply chooses a random destination somewhere within that space. The vast majority of terror mission targets have an area width/height of 0, meaning that the alien ship will always end up landing on the exact same point.

Offset Use
0-1 X co-ord of the top left corner. If this value is 0xFFFF, then the record is ignored (unused).
2-3 Y co-ord of the top left corner. A negative number if north of the equator.
4-5 Width of the rectangular area.
6-7 Height of the rectangular area.

The width of the world map is 2880 points. The height ranges from -720 to 720 (1440 points, half the width). Lots of records are unused. UFO:EU has great big areas plonked down (leading to a lot of diversity in terms of where UFOs might land), TFTD has tiny little ones (meaning USOs tend to land close to where all the other USOs landed).

-  Bomb Bloke (Talk/Contribs) 05:07, 10 April 2012 (EDT)

Zones sectors

(used to get the zone number for a world coordinate):
.data:00474F38 geo_globe_zones structGlobeZone <618h, 987h, 0FDD0h, 0FE47h, 0>; 0
.data:00474F38                                         ; DATA XREF: GetWorldZoneFromPos+10�o
.data:00474F38 structGlobeZone <730h, 987h, 0FE48h, 0FF0Fh, 0>; 1
.data:00474F38 structGlobeZone <780h, 95Fh, 0FF10h, 0FFAFh, 0>; 2
.data:00474F38 structGlobeZone <0, 0B3Fh, 0FD30h, 0FDCFh, 1>; 3
.data:00474F38 structGlobeZone <0, 0B3Fh, 1E0h, 2D0h, 2>; 4
.data:00474F38 structGlobeZone <870h, 9D7h, 0FFB0h, 0FFFFh, 3>; 5
.data:00474F38 structGlobeZone <898h, 0A4Fh, 0, 77h, 3>; 6
.data:00474F38 structGlobeZone <898h, 0A27h, 78h, 1DFh, 3>; 7
.data:00474F38 structGlobeZone <0A78h, 1DFh, 0FDD0h, 0FEE7h, 4>; 8
.data:00474F38 structGlobeZone <0A78h, 13Fh, 0FEE8h, 0FF87h, 5>; 9
.data:00474F38 structGlobeZone <0A78h, 1B7h, 0FF88h, 0FFFFh, 5>; 10
.data:00474F38 structGlobeZone <28h, 1B7h, 0, 13Fh, 6> ; 11
.data:00474F38 structGlobeZone <140h, 22Fh, 0FEE8h, 0FF87h, 7>; 12
.data:00474F38 structGlobeZone <1E0h, 2CFh, 0FE70h, 0FEE7h, 7>; 13
.data:00474F38 structGlobeZone <230h, 2CFh, 0FEE8h, 0FFD7h, 7>; 14
.data:00474F38 structGlobeZone <2D0h, 347h, 0FE70h, 4Fh, 8>; 15
.data:00474F38 structGlobeZone <348h, 4AFh, 0FE70h, 0FFD7h, 8>; 16
.data:00474F38 structGlobeZone <1E0h, 59Fh, 0FDD0h, 0FE6Fh, 9>; 17
.data:00474F38 structGlobeZone <348h, 59Fh, 0FFD8h, 18Fh, 0Ah>; 18
.data:00474F38 structGlobeZone <5A0h, 617h, 0FDD0h, 0FE47h, 0Bh>; 19
.data:00474F38 structGlobeZone <5A0h, 72Fh, 0FE48h, 0FF0Fh, 0Bh>; 20
.data:00474F38 structGlobeZone <5A0h, 77Fh, 0FF10h, 0FFAFh, 0Bh>; 21
.data:00474F38 structGlobeZone <5A0h, 86Fh, 0FFB0h, 0FFFFh, 0Bh>; 22
.data:00474F38 structGlobeZone <5A0h, 897h, 0, 1DFh, 0Bh>; 23
.data:00474F38 structGlobeZone <4B0h, 59Fh, 0FE70h, 0FFD7h, 0Bh>; 24
.data:00474F38 structGlobeZone <988h, 0A77h, 0FDD0h, 0FF0Fh, 0Ch>; 25
.data:00474F38 structGlobeZone <960h, 0A77h, 0FF10h, 0FFAFh, 0Ch>; 26
.data:00474F38 structGlobeZone <9D8h, 0A77h, 0FFB0h, 0FFFFh, 0Ch>; 27
.data:00474F38 structGlobeZone <0A50h, 27h, 0, 77h, 0Dh>; 28
.data:00474F38 structGlobeZone <0A28h, 27h, 78h, 1DFh, 0Dh>; 29
.data:00474F38 structGlobeZone <28h, 1B8h, 140h, 1DFh, 0Dh>; 30
.data:00474F38 structGlobeZone <1B8h, 22Fh, 0FF88h, 4Fh, 0Eh>; 31
.data:00474F38 structGlobeZone <230h, 2CFh, 0FFD8h, 4Fh, 0Eh>; 32
.data:00474F38 structGlobeZone <1B8h, 347h, 50h, 1DFh, 0Eh>; 33

Same for country zones:

.data:00475090 geo_glob_country_zones structGlobeZone <758h, 7F8h, 0FE78h, 0FF00h, 0>; 0
.data:00475090                                         ; DATA XREF: GetCountryFromPos+11�o
.data:00475090 structGlobeZone <7F8h, 8ACh, 0FE78h, 0FF18h, 0>; 1
.data:00475090 structGlobeZone <820h, 848h, 0FF18h, 0FF30h, 0>; 2
.data:00475090 structGlobeZone <8A8h, 8C0h, 0FF00h, 0FF38h, 0>; 3
.data:00475090 structGlobeZone <8ACh, 8F0h, 0FEA0h, 0FF00h, 0>; 4
.data:00475090 structGlobeZone <8F0h, 924h, 0FE94h, 0FEC0h, 0>; 5
.data:00475090 structGlobeZone <0F0h, 190h, 0FDD0h, 0FE98h, 1>; 6
.data:00475090 structGlobeZone <0C0h, 0F0h, 0FE20h, 0FEB0h, 1>; 7
.data:00475090 structGlobeZone <190h, 258h, 0FD98h, 0FEC0h, 1>; 8
.data:00475090 structGlobeZone <258h, 528h, 0FD80h, 0FE70h, 1>; 9
.data:00475090 structGlobeZone <528h, 550h, 0FDD0h, 0FE28h, 1>; 10
.data:00475090 structGlobeZone <0B00h, 10h, 0FE20h, 0FE70h, 2>; 11
.data:00475090 structGlobeZone <0B18h, 38h, 0FE70h, 0FEA8h, 3>; 12
.data:00475090 structGlobeZone <30h, 78h, 0FE48h, 0FE84h, 4>; 13
.data:00475090 structGlobeZone <38h, 78h, 0FE8Ch, 0FEA8h, 5>; 14
.data:00475090 structGlobeZone <58h, 90h, 0FEA8h, 0FED8h, 5>; 15
...

Dot color data for LOC.DAT entries

shawn on world map (can't think of a better name...):
.data:00475202 locationColor dw 0, 0Dh, 0Bh, 9, 1, 5, 7, 3           ; 0
.data:00475202                                         ; DATA XREF: geoDrawLocations+ED�r

Just after that are data describing the mask for drawing the location (I don't remember the format, but it shouldn't be something too complicated to decypher)

Flare pattern

(tactical mode):
 flarePattern db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16; 0
              db 16,16,16,16,16,16,16,16,16,15,15,15,14,14,14,14,14,14,14,15,15,15,16,16,16,16,16,16,16,16,16; 31
              db 16,16,16,16,16,16,16,15,15,14,14,14,13,13,13,13,13,13,13,14,14,14,15,15,16,16,16,16,16,16,16; 62
              db 16,16,16,16,16,16,15,15,14,14,13,13,12,12,12,12,12,12,12,13,13,14,14,15,15,16,16,16,16,16,16; 93
              db 16,16,16,16,16,15,15,14,13,13,12,12,12,11,11,11,11,11,12,12,12,13,13,14,15,15,16,16,16,16,16; 124
              db 16,16,16,16,15,15,14,13,12,12,11,11,11,10,10,10,10,10,11,11,11,12,12,13,14,15,15,16,16,16,16; 155
              db 16,16,16,15,15,14,13,12,12,11,10,10,10, 9, 9, 9, 9, 9,10,10,10,11,12,12,13,14,15,15,16,16,16; 186
              db 16,16,15,15,14,13,12,12,11,10,10, 9, 9, 8, 8, 8, 8, 8, 9, 9,10,10,11,12,12,13,14,15,15,16,16; 217
              db 16,16,15,14,13,12,12,11,10, 9, 9, 8, 8, 7, 7, 7, 7, 7, 8, 8, 9, 9,10,11,12,12,13,14,15,16,16; 248
              db 16,15,14,14,13,12,11,10, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 7, 7, 8, 9, 9,10,11,12,13,14,14,15,16; 279
              db 16,15,14,13,12,11,10,10, 9, 8, 7, 6, 6, 6, 5, 5, 5, 6, 6, 6, 7, 8, 9,10,10,11,12,13,14,15,16; 310
              db 16,15,14,13,12,11,10, 9, 8, 7, 6, 6, 5, 5, 4, 4, 4, 5, 5, 6, 6, 7, 8, 9,10,11,12,13,14,15,16; 341
              db 15,14,13,12,12,11,10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 4, 4, 5, 6, 7, 8, 9,10,11,12,12,13,14,15; 372
              db 15,14,13,12,11,10, 9, 8, 7, 6, 6, 5, 4, 3, 2, 2, 2, 3, 4, 5, 6, 6, 7, 8, 9,10,11,12,13,14,15; 403
              db 15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15; 434
              db 15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15; 465
              db 15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15; 496
              db 15,14,13,12,11,10, 9, 8, 7, 6, 6, 5, 4, 3, 2, 2, 2, 3, 4, 5, 6, 6, 7, 8, 9,10,11,12,13,14,15; 527
              db 15,14,13,12,12,11,10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 3, 4, 4, 5, 6, 7, 8, 9,10,11,12,12,13,14,15; 558
              db 16,15,14,13,12,11,10, 9, 8, 7, 6, 6, 5, 5, 4, 4, 4, 5, 5, 6, 6, 7, 8, 9,10,11,12,13,14,15,16; 589
              db 16,15,14,13,12,11,10,10, 9, 8, 7, 6, 6, 6, 5, 5, 5, 6, 6, 6, 7, 8, 9,10,10,11,12,13,14,15,16; 620
              db 16,15,14,14,13,12,11,10, 9, 9, 8, 7, 7, 6, 6, 6, 6, 6, 7, 7, 8, 9, 9,10,11,12,13,14,14,15,16; 651
              db 16,16,15,14,13,12,12,11,10, 9, 9, 8, 8, 7, 7, 7, 7, 7, 8, 8, 9, 9,10,11,12,12,13,14,15,16,16; 682
              db 16,16,15,15,14,13,12,12,11,10,10, 9, 9, 8, 8, 8, 8, 8, 9, 9,10,10,11,12,12,13,14,15,15,16,16; 713
              db 16,16,16,15,15,14,13,12,12,11,10,10,10, 9, 9, 9, 9, 9,10,10,10,11,12,12,13,14,15,15,16,16,16; 744
              db 16,16,16,16,15,15,14,13,12,12,11,11,11,10,10,10,10,10,11,11,11,12,12,13,14,15,15,16,16,16,16; 775
              db 16,16,16,16,16,15,15,14,13,13,12,12,12,11,11,11,11,11,12,12,12,13,13,14,15,15,16,16,16,16,16; 806
              db 16,16,16,16,16,16,15,15,14,14,13,13,12,12,12,12,12,12,12,13,13,14,14,15,15,16,16,16,16,16,16; 837
              db 16,16,16,16,16,16,16,15,15,14,14,14,13,13,13,13,13,13,13,14,14,14,15,15,16,16,16,16,16,16,16; 868
              db 16,16,16,16,16,16,16,16,16,15,15,15,14,14,14,14,14,14,14,15,15,15,16,16,16,16,16,16,16,16,16; 899
              db 16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16; 930

Sorry for the big post and the raw format... Seb76 13:59, 10 March 2008 (PDT)

Construction costs for access lifts:

.data:0046E69C basePrice dd 800000, 950000, 900000, 600000, 1000000, 650000, 550000, 500000, 750000; 0
.data:0046E69C dd 800000, 750000, 600000, 3 dup(500000); 9

Seb76 11:01, 16 March 2008 (PDT)

Craft weapon stats

I guess the craft weapon stats could be in here too? as far I can see these are at 353378 (plain 1.4), 18 bytes, 9x2 byte:
index/range/acc/dmg/??/time/no of ammo/??/ammo
--Emphyrio 15:25, 1 March 2009 (CST)


In the WinCE version (unpatched) the craft weapon stats start at offset 0x6fb18. Or search for this signature:

40 02 1e 00 46 00 46 00 01 00 0f 00 06 00 01 00 06 00 

Fields are:

Index - Range (km) - Hit% - Damage - ?X? - reload time - ammo cap - ?Y? - ammo type
Weapon    X  Y
Stingray  1  1
Avalanche 3  1
Cannon    8  100
FBL       5  1
Laser C   10 50
Plasma C  12 50 

I would speculate that value "Y" is the re-arming rate on the ground. I think this data differs slighly from what is stated at Rearming so it might be worth double checking that.

Value "X" could be a bitmask, an index to a sound effect, or just about anything. It's possible the lowest bit is a flag that is set for a missile weapon, unset for a cannon-type weapon.

Spike 19:43, 5 July 2009 (EDT)

The "reload time" value (as it is called in the in-game UFOPaedia) does not seem to be used by the executable. Instead, hard coded values are used. See Observed Rates of Fire. Spike 20:31, 13 July 2009 (EDT)

I checked and the rearming rates in the wiki article are correct, i.e. 100 rds per hour for all Cannon types. Maybe this "Y" data was intended as the rearming rate but is unused? The next step would be to hack the "Y" values and look for any effect. It would also be interesting to hack the low bit of the "X" value and see if that has any effect, such as controlling the missile weapon firing interval behaviour (RoF changes based on attack mode), or sound effect.

Here is X as a bitmask

Weapon    X  Bitmask
Stingray  1  00000001
Avalanche 3  00000011
FBL       5  00000101
Cannon    8  00001000
Laser C   10 00001010
Plasma C  12 00001100 

Spike 18:18, 16 February 2010 (EST)

Actually it looks like the low order 3 bits are just a sequence/ID number (ascending damage?). The next higher bit is launched (0) vs cannon (1).

Weapon    X  Bitmask  Seq Cannon?
Cannon    8  00001000 0   1
Stingray  1  00000001 1   0
Laser C   10 00001010 2   1
Avalanche 3  00000011 3   0
Plasma C  12 00001100 4   1
FBL       5  00000101 5   0

Spike 19:49, 14 March 2010 (EDT)

---

.data:0046FB18     a_GS_CraftWeapon_Builtin
.data:0046FB18                   strucCraftWeaponBuiltin <576, 30,  70,  70,  1, 15,   6,   1, 6>; stingray
.data:0046FB18                   strucCraftWeaponBuiltin <577, 60,  80, 100,  3, 20,   3,   1, 7>; avalanche
.data:0046FB18                   strucCraftWeaponBuiltin <578, 10,  25,  10,  8,  2, 200, 100, 8>; cannon
.data:0046FB18                   strucCraftWeaponBuiltin <579, 65, 100, 230,  5, 25,   2,   1, 9>; fusion ball
.data:0046FB18                   strucCraftWeaponBuiltin <580, 21,  35,  70, 10,  4,   0,  50, 0>; laser cannon
.data:0046FB18                   strucCraftWeaponBuiltin <581, 52,  50, 140, 12,  6,   0,  50, 0>; plasma beam
00000000 Weapon_NameIdx dw ?
00000002 Range         dw ?
00000004 CraftWepAccuracy dw ?; chances=random(100)< Accuracy * (1+3/(5-ufosize))/2 => Accuracy * (0.8|0.875|1|1.25|2)
00000006 CraftWepDamage dw ? ; damage=(WeaponDamage+random(WeaponDamage))/2 [50-100%]
00000008 reload_time_field_8 dw ? ;???? probably not used
0000000A UP_Reload_time__ dw ? ; ufopaedia fire rate value
0000000C MaxAmmoCount  dw ?
0000000E CraftWep_RearmingRate dw ?
00000010 Ammo_Ref      dw ? ;ammo blob ref, 0=ray

Fire delay for different attack modes of different craft weapon:

.data:00473FB8     a_Craft_Weapon_Reload_Time
.data:00473FB8                   dw 64, 48, 32             ; stingray
.data:00473FB8                   dw 96, 72, 48             ; avalanche
.data:00473FB8                   dw  4,  4,  4             ; cannon
.data:00473FB8                   dw 64, 48, 32             ; fusion ball
.data:00473FB8                   dw 24, 24, 24             ; laser cannon
.data:00473FB8                   dw 24, 24, 24             ; plasma beam

--Volutar 14:13, 12 October 2011 (EDT)

TFTD Sub weapon stats

In the Steam (DOS, XcomUtil patched) version of TFTD, GEOSCAPE.EXE offset 0x665e0 is the start of the AJAX Torpedo record, the first sub weapon. Signature:

4002 2000 4600 3c00 0100 1100 0600 0100 0600
Hacking the re-arm rate works, you see faster reloading when the sub is back at base, for Ajax at least. I didn't think this worked when I tried it before in XCOM:EU. Maybe I was mistaken, or maybe it depends on the version of XCOM:EU. Or maybe it works for launched weapons, but is overridden to 100 for cannon weapons, in both games. Need to test. Spike 14:58, 12 October 2010 (EDT)

Manufacturing stats?

Has someone worked out the manufacturing stats at offset 355596 355600 (vanilla 1.4)?? As far as I can see it looks like 35 records of 18 bytes

See the PRODUCT.DAT page. --Zombie 16:25, 24 February 2009 (CST)
ok, this is actually is a useful bit of information, I would have put it in the article.. --Emphyrio 07:06, 25 February 2009 (CST)
Good deal. I also added a note to the top of PRODUCT.DAT (and linked the Manufacturing_Profitability to PRODUCT.DAT - that should've been there, too). -MikeTheRed 11:17, 25 February 2009 (CST)


New Bundles

The "Complete Package" and such versions of X-Com from Steam, interestingly enough, include both versions of the game, at least .exe wise. The one that runs when you just launch from the Steam menu is the original European version, 1.2, so I wonder exactly why they included the other version. -Elliotw2 2009-01-15 18:01:37

Hiya Elliotw2! I wasn't watching this page's Talk page before, but I am now.
As for the various versions, I dusted off some 10 y.o. DOS floppies a few years ago. They still worked, and I ran with it (U.S. DOS v. 1.4). Although I've read a lot about the other versions on this wiki, I'll let the other vets here address what you just said (smile). I personally would have chosen the U.S. version... Vets, why would they have both versions in the bundle, but make the default be the European version?
Elliotw2, please leave a mini-review (or repeat what you just said) at GEOSCAPE.EXE#X-COM_Complete_Packages (see my new "mini-review" format request there). Sorry for the mess, newcomers - especially having this tucked away under GEOSCAPE, but it makes sense to us grognards. As always, we will change and grow as needed, and "us" easily includes "you". For now, we're just trying to make sure that newcomers can find what they need here, and that there's a place for info on the Complete Packages to be voiced.
-MikeTheRed 03:49, 19 January 2009 (CST)

Just bought the Complete Package on Steam. Can test later today. What should I look at first? Oh, and hi all, I'm new here :) --kpobococ 06:17, 25 March 2011 (EDT)

Hiya. :)
Steam contains DOS and CE executables - the CE one is primarily there for anyone who can use it, as it's a bit faster and stabler then the DOS release, however, DOSBox is the easiest option for most people with "modern" computers.
DOSBox is also configured to use filter (known in DOSBox config as scaler) to enhance low resolution mode. --kpobococ 07:58, 25 March 2011 (EDT)
The DOS install should be 1.4, but release notes for 1.2 do exist in the package as well. I suppose if you'd like to confirm that, you could try checking the executable filesizes to determine which DOS version is in there - you can find the patches here should you wish to compare some files. Filesizes and checksums for all the different EXEs of all the different releases would be great to have documented! -  Bomb Bloke (Talk/Contribs) 07:37, 25 March 2011 (EDT)
I'll get back to you with filesizes and probably checksums too, if you can tell my which utility to use for the checksums --kpobococ 07:58, 25 March 2011 (EDT)
Steam version's GEOSCAPE.EXE filesize is 382,957b (md5: 33ea0819e6888f0450f9a1e5e19dc98b; sha1: 832d78f3c9a9c50960f10473592ae2c48dc7b6a7). Also, I've checked all the versions from strategycore, here are their sizes and checksums: v1.2: 415,271b (md5: be98b94f3f477181e186a5191a8bf36a; sha1: 29dd0f48b86f6ff3f68caa3c22303295753c240f); v1.3: 419,367b (md5: 42b5be21e24dd5b2b8088cb1f4e70aee; sha1: 54cd69cd3b9222a723eb269a7d63b7965b74b3ea); v1.4: 382,957b (md5: 33ea0819e6888f0450f9a1e5e19dc98b; sha1: 832d78f3c9a9c50960f10473592ae2c48dc7b6a7). So, the Steam version is definitely version 1.4. --kpobococ 17:38, 25 March 2011 (EDT)

Difficulty patch information wrong?

It appears that the information for patching the difficulty is wrong on this page.

I have what I believe is the US version of XCOM 1.4, and I patched the file as per the data given for 1.4, and yet it still created a 60-byte IGLOB.DAT file. Further, DOSBOX complained of illegal memory accesses after the patch (which it did not do before).

33ea0819e6888f0450f9a1e5e19dc98b *GEOSCAPE.EXE (binary MD5SUM -- file is 382,957 bytes, created 1995-02-28 @ 10:24 PM)

There actually was a 60 byte (0x3c) at the location given, but I have a feeling it was something other than the size_t in question.


If you search for:
3C 00 00 00 57 2B C9 49
you will fined the iglob.dat length for all versions of UFO. --BladeFireLight 19:45, 16 February 2010 (EST)


Yeah, that was my fault, I just put the same value as was in 1.0. It's corrected now. Hatfarm 18:45, 5 June 2010 (EDT)


I tried that out, it seems to work perfectly. Thank you both! FYI; the above is the XCOM package available from GOG.com Direct2Drive. Renegrade 20:23, 17 July 2010 (EDT)

Is there a patched Geoscape.exe floating around anywhere, so I could fix the bug without using a hex editor? This bug is the reason I haven't played UFO for years. Magic9mushroom 06:10, 6 February 2012 (EST)

Wacky TFTD Zone

I shot a sub down near Easter Island in the South Pacific, assaulted it, and the XCOM Activity score was credited to Egyptian Cartel. I was nowhere near Egypt, all month long. Is that a weird Zone polygon, or is it just a bug? Spike 19:03, 7 October 2010 (EDT)

Alien equipment tables

Dos Geoscape.exe at 0x599A5 MS-Edit @100 columns: Line: 3671 col: 14

CE executable at 0x72D68 MS-Edit @100 columns: Line: 4704 col: 77

TFTD CE version starts at 0x7DAB8 TFTD Dos at 0x69E84 (Approx)

55 rows of 21 byte structures.

A short digest from Alien Weapon Loadouts

00: Mission type (starts from 05 = Small Scout; goes to 15 (x0F) for Mars 2)
01: Alien rank
02: Base number of aliens on Beginner / Experienced
03: Base number of aliens on Superhuman (Veteran / Genius is the average of these two)
04: A random number from 0 to this number will be added to the above number of aliens
05: chance for this unit to be a "scout" and get spawned on a civ/scout node.
06-10 (x06-x0A): Early game loadout
11-15 (x0B-x0F): Mid game loadout
16-20 (x10-x14): Late game loadout

The three sets are randomly selected for the aliens as they are individually generated. Set selection is likely weighted by other factors such as difficulty level. Time or score may also influence this. Aliens races without corresponding ranks will still get created at that rank and granted the corresponding equipment set, then get demoted later.

- NKF 03:47, 19 May 2012 (EDT)