Jump to content

R&D Multiple Alien Bases / Retaking Lost Countries


Amineri

Recommended Posts

Thought I'd give a quick update on the progress of the mod.

 

I've got the Alien Base creation working when a country is lost. Base is created at a random city location within the country. When the country is lost any satelllite over the country is lost (as in vanilla).

 

Alien bases start out hidden from view (mission is unavailable). I've got the reveal mechanism working, which requires a satellite in station above the country as well as the outsider shard research project completed. Both orders are handled : if there is already a satellite above an occupied country when the outsider shard research is complete, it will be revealed. If the research is complete, as soon as the launched satellite reaches orbit (NOT when launched), the base is revealed.

 

Currently the base cannot be "unrevealed". Hiding a base without actually destroying the mission looks to be problematic, so I'm leaning toward not ever hiding the base mission after it is revealed.

 

The base mission requires the skeleton key have been manufactured in order to accept. I'm considering adding having an active satellite as an additional requirement to accept the mission (so the aliens can stop attacks on their bases by shooting down the satellite overhead).

 

I've got the code that causes the country to rejoin XCOM when a base mission is completed working as well. The storm entity over the country is removed, the panic of the country is reduced to 4 bars (so still kind of panicky), the country begins paying, and the continent bonus is updated to reflect the country being added (can grant continent bonus or extra scientists / engineers).

 

I've got the alien base detection cinematic set up to trigger the first time (and only the first time) that an alien base is revealed (in vanilla it always triggers after the outsider shard is complete). It actually makes a lot more sense (to me anyhow) with the satellite mechanic added. Currently I've been testing by substituting the xenobiology research as the trigger instead of outsider shard research, and the cinematic is causing the game to crash after executing -- hopefully that will clear up once the right research is the trigger.

 

The other issue I'm having is my inability to get a proper alert (which would halt the fast time advancement) when the base is revealed. I've got alert code in there, but it just isn't working. The button for attacking the base(s) pops up, but the geoscape continues to advance as normal in "fast time".

 

At this point all of the major pieces are in and working, so I'll be able to start doing integrated testing soon.

 

Remaining issues are :

  • Alien Base detection cinematic causing crash at end of playback
  • Alien base detection not causing alert that halts geoscape fast forward
  • No pop-up message for winning a base mission and causing the country to join xcom
  • Have to add additional subobjective to indicate that a satellite must be orbited over an occupied country

So far the mod consists of 15 distinct hex changes. I estimate probably 5 or so more will be needed before it's "done"

 

Sorry no pretty pictures today ... nothing especially screenshot worthy.

Link to comment
Share on other sites

  • Replies 43
  • Created
  • Last Reply

Top Posters In This Topic

Made some progress with the rework of the plot to better integrate / support the new alien base missions.

 

SPOILERS AHEAD!!! BEWARE!

 

Up until the outsider shard research, the plot is unchanged.

 

Upon completion of the outsider shard research project, the alien base detection cinematic will no longer play. Instead of the "Assault Alien Base" objective, a new objective has been added :

 

http://wiki.tesnexus.com/images/8/83/Recon_Objective.jpg

 

The new objective is to launch a satellite over an occupied country to aid in searching for an alien base. The graphic is the same as the stealth satellites foundry project.

 

The situation room objective display is updated as well:

 

http://wiki.tesnexus.com/images/3/3b/SitRoom_ReconObjective.jpg

 

The narrative could use a little work, but it's basically there.

 

The satellite UI now allows for launching satellites over occupied countries :

 

http://wiki.tesnexus.com/images/c/c4/Launch_Sat.jpg

 

The UI still indicates that the player will be getting cash and scientists / engineers, which isn't true (I just haven't fixed the Satellite launch UI yet).

 

 

Launching the satellite does not complete the objective, however. The trigger occurs when the satellite actually reaches orbit (unlike country funding which starts immediately upon launch). Bases can't be detected by satellites that aren't there yet! :)

 

Upon the satellite reaching orbit, the alien base detection cinematic is played and the next plot advance window pops up as well as the base detected alert :

 

http://wiki.tesnexus.com/images/1/16/BaseAssaultObjective.jpg

 

The new objective is in the foreground, with the alien base alert in the background. The base location is now a country instead of a continent, and will always be at a randomly selected city within the country.

 

At this point the plot continues normally. Assaulting the first base will result in retrieving the base shard, etc.

 

However, upon defeating the base there is no world-wide panic drop -- instead, the occupied country rejoins the XCOM project, with 4 bars of panic.

 

------------------------

 

It is guaranteed to always have at least one country that has left XCOM, as the re-added ethereal ship infiltration missions cannot be stopped until the player has the hyperwave radar and is able to detect them.

 

The same mechanic will work for additional occupied countries:

1) Launch satellite over occupied country

2) Base is detected when satellite reaches orbit

3) Successfully assaulting the base results in country re-joining XCOM

 

----------------------

 

I've unit-tested the code that causes the country to rejoin XCOM, but still have to test it in place after a base assault. However, this looks like it is nearly completed, excepting some polishing of various UI interface issues.

 

Link to comment
Share on other sites

Just curious, but how can the player proactively reduce panic in the newly liberated country, since there is already a satellite in place and the base was eliminated? Simply wait for a random mission to that country while it remains with a high chance of withdrawing again each month due to the 4 bars of panic? Is there an increased chance of alien missions to recapture such countries?

 

-Dubious-

Link to comment
Share on other sites

In vanilla (and currently

 

Just curious, but how can the player proactively reduce panic in the newly liberated country, since there is already a satellite in place and the base was eliminated? Simply wait for a random mission to that country while it remains with a high chance of withdrawing again each month due to the 4 bars of panic? Is there an increased chance of alien missions to recapture such countries?

 

-Dubious-

 

In vanilla (and currently in Long War), there is only a chance for a country to leave once it has 5 bars of panic. This can be re-configured pretty easily in the DGC.ini, though. My thinking with 4 bars of panic is that the country is still "on the edge".

 

Pretty much like in vanilla there are no guaranteed ways to pro-actively reduce panic -- all you can do is sit back and wait for a mission to pop up that will allow you to reduce panic. Leaving the country at 4 makes it a prime candidate for a terror mission, and any lost mission in the country (and many lost missions on the same continent) will add another point of panic, leading to a chance to be lost again.

 

Terror missions have a 75% chance (in Long War... not sure what vanilla is) of targeting a country with the highest bars of panic. Abductions and UFOs are a bit more randomized.

 

Very definitely some changes to how panic is lost / gained, as well as conditions for when a country leaves XCOM will have to be re-examined when adding this feature.

Edited by Amineri
Link to comment
Share on other sites

And here's the new happy result of winning the base mission :

 

http://wiki.tesnexus.com/images/3/35/Country_Rejoined_XCOM.jpg

 

More than just the UI change, the country does actually rejoin XCOM, funding is restored, etc. Clearly I need to use a different function thought, as there appears to be a missing 'the' in the sentence ...

Link to comment
Share on other sites

Finally finished up with the changes enough to release some hex code.

 

I stupidly created my test campaign at Easy difficulty, so only had 1 occupied country and so wasn't able to test some aspects of second and subsequent alien base missions, so there may still be a few bugs relating to that aspect lurking about.

 

Some aspects of the full mod were depending on some Long War changes and one of my previous mods, the "All Countries Contribute" modlet. The first impacts the ability to create the infiltration missions I was using to guarantee at least one occupied country. The second impacted some UI tweaks in the satellite launch UI in the situation room.

 

I'm not releasing those hex changes here in order to keep compatibility with the vanilla game. Note that some form of ensuring that at least one country is lost is required, or the plot cannot advance to the alien base mission.

 

Here is the set of hex changes that are vanilla-compatible, which includes all functionality (excepting the lost country thing):

 

 

 

Hex Changes for Multi-base + retaking countries

XGMissionControlUI.UpdateAlert -- display country name instead of continent

original hex: (next line at 0x473A)
07 ED 45 9A 19 1B 23 27 00 00 00 00 00 00 16 0C 00 7D 40 00 00 00 1B CC 0F 00 00 00 00 00 00 2C C0 16 25 16 0F 35 D8 F9 FF FF 66 FA FF FF 00 01 00 CB 38 00 00 01 C3 37 00 00 0F 35 54 FB FF FF 66 FA FF FF 00 01 00 CB 38 00 00 2C 03 55 35 64 0D 00 00 67 0D 00 00 00 00 00 CD 38 00 00 0A 00 00 CB 38 00 00 16 0F 35 DE F9 FF FF 6C FA FF FF 00 01 00 CC 38 00 00 01 FA 37 00 00 0F 35 DD F9 FF FF 6C FA FF FF 00 01 00 CC 38 00 00 19 19 00 C8 38 00 00 0A 00 4B 37 00 00 00 1B C5 0E 00 00 00 00 00 00 16 0A 00 9E 23 00 00 00 1B A3 0F 00 00 00 00 00 00 16 0F 35 57 FB FF FF 6C FA FF FF 00 01 00 CC 38 00 00 2C 05 55 35 63 0D 00 00 67 0D 00 00 00 00 00 CD 38 00 00 0A 00 00 CC 38 00 00 16 0F 35 DA F9 FF FF 6A FA FF FF 00 01 00 C9 38 00 00 01 C2 37 00 00 07 1C 47 9A 19 1B 23 27 00 00 00 00 00 00 16 0C 00 7D 40 00 00 00 1B CC 0F 00 00 00 00 00 00 2C C0 16 25 16 0F 35 56 FB FF FF 6A FA FF FF 00 01 00 C9 38 00 00 26 06 3A 47 0F 35 56 FB FF FF 6A FA FF FF 00 01 00 C9 38 00 00 25 

new hex: (0x473A)
0F 35 56 FB FF FF 6A FA FF FF 00 01 00 C9 38 00 00 25 07 29 46 9A 19 1B 23 27 00 00 00 00 00 00 16 0C 00 7D 40 00 00 00 1B CC 0F 00 00 00 00 00 00 2C C0 16 25 16 0F 35 D8 F9 FF FF 66 FA FF FF 00 01 00 CB 38 00 00 01 C3 37 00 00 0F 35 54 FB FF FF 66 FA FF FF 00 01 00 CB 38 00 00 2C 03 55 35 64 0D 00 00 67 0D 00 00 00 00 00 CD 38 00 00 0A 00 00 CB 38 00 00 16 0F 35 56 FB FF FF 6A FA FF FF 00 01 00 C9 38 00 00 26 0F 35 DE F9 FF FF 6C FA FF FF 00 01 00 CC 38 00 00 01 FA 37 00 00 0F 35 DD F9 FF FF 6C FA FF FF 00 01 00 CC 38 00 00 19 1B 45 06 00 00 00 00 00 00 19 00 C8 38 00 00 0A 00 49 37 00 00 00 1B CE 0E 00 00 00 00 00 00 16 16 0B 00 58 24 00 00 00 1B A3 0F 00 00 00 00 00 00 4A 16 0F 35 57 FB FF FF 6C FA FF FF 00 01 00 CC 38 00 00 2C 05 55 35 63 0D 00 00 67 0D 00 00 00 00 00 CD 38 00 00 0A 00 00 CC 38 00 00 16 0F 35 DA F9 FF FF 6A FA FF FF 00 01 00 C9 38 00 00 01 C2 37 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 00 89 43 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 


------------------------

XGStrategyAI.CreateAlienBase

original hex:
header:
05 43 00 00 AB 1F 00 00 00 00 00 00 04 43 00 00 00 00 00 00 00 00 00 00 05 43 00 00 00 00 00 00 3D 04 00 00 EF 7B 00 00 23 04 00 00 DB 02 00 00 

body:
0F 00 05 43 00 00 1C A3 FD FF FF 20 75 37 00 00 4A 4A 4A 4A 4A 4A 4A 16 0F 19 00 05 43 00 00 09 00 31 37 00 00 00 01 31 37 00 00 1C A3 FD FF FF 20 7A FE FF FF 4A 4A 4A 4A 4A 4A 4A 16 05 6C FC FF FF 00 A7 2C 05 16 0A C5 00 25 0F 19 00 05 43 00 00 09 00 36 37 00 00 00 01 36 37 00 00 25 0F 19 00 05 43 00 00 09 00 39 37 00 00 00 01 39 37 00 00 1C B9 FD FF FF 1E BE 9F 9A 3E 1E 5E BA C9 3E 16 06 36 02 0A 20 01 26 0F 19 00 05 43 00 00 09 00 36 37 00 00 00 01 36 37 00 00 2C 04 0F 19 00 05 43 00 00 09 00 39 37 00 00 00 01 39 37 00 00 1C B9 FD FF FF 1E BE 9F 1A 3F 1E 10 58 F9 3E 16 06 36 02 0A 7C 01 2C 02 0F 19 00 05 43 00 00 09 00 36 37 00 00 00 01 36 37 00 00 2C 02 0F 19 00 05 43 00 00 09 00 39 37 00 00 00 01 39 37 00 00 1C B9 FD FF FF 1E 2F DD E4 3E 1E 29 5C 0F 3E 16 06 36 02 0A D8 01 2C 03 0F 19 00 05 43 00 00 09 00 36 37 00 00 00 01 36 37 00 00 2C 03 0F 19 00 05 43 00 00 09 00 39 37 00 00 00 01 39 37 00 00 1C B9 FD FF FF 1E 58 39 54 3F 1E 96 43 0B 3E 16 06 36 02 0A 33 02 2C 04 0F 19 00 05 43 00 00 09 00 36 37 00 00 00 01 36 37 00 00 26 0F 19 00 05 43 00 00 09 00 39 37 00 00 00 01 39 37 00 00 1C B9 FD FF FF 1E 2B 87 96 3E 1E C5 20 F0 3E 16 06 36 02 0A FF FF 0F 19 19 00 05 43 00 00 09 00 31 37 00 00 00 01 31 37 00 00 09 00 C1 F9 FF FF 00 01 C1 F9 FF FF 1B C4 07 00 00 00 00 00 00 16 0F 10 2C AC 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 32 0F 10 2C B3 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 03 0F 10 2C AB 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 38 44 AB 10 19 1B 4C 0E 00 00 00 00 00 00 16 0A 00 43 41 00 00 00 1B F6 0E 00 00 00 00 00 00 16 12 20 6D FE FF FF 09 00 CA FF FF FF 00 02 CA FF FF FF 38 3F 10 2C B3 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 16 0F 10 2C B2 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 04 0F 10 2C B0 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 0F 0F 10 2C AF 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 0A 0F 10 2C AE 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 26 0F 10 2C B4 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 26 19 1B 69 0E 00 00 00 00 00 00 16 14 00 AC 2F 00 00 00 1B A9 00 00 00 00 00 00 00 00 05 43 00 00 4A 16 04 0B 53 

new hex: (virtual 0x413)
header:
05 43 00 00 AB 1F 00 00 00 00 00 00 04 43 00 00 00 00 00 00 00 00 00 00 05 43 00 00 00 00 00 00 3D 04 00 00 EF 7B 00 00 13 04 00 00 DB 02 00 00 

body:
0F 00 88 43 00 00 1B 45 06 00 00 00 00 00 00 01 10 42 00 00 16 07 2E 00 72 00 88 43 00 00 2A 16 04 0B 07 54 00 81 19 00 88 43 00 00 0A 00 47 24 00 00 00 1B 40 14 00 00 00 00 00 00 16 16 04 0B 07 7A 00 81 19 00 88 43 00 00 0A 00 41 24 00 00 00 1B B6 16 00 00 00 00 00 00 16 16 04 0B 0F 00 05 43 00 00 1C A3 FD FF FF 20 75 37 00 00 4A 4A 4A 4A 4A 4A 4A 16 0F 19 00 05 43 00 00 09 00 31 37 00 00 00 01 31 37 00 00 1C A3 FD FF FF 20 7A FE FF FF 4A 4A 4A 4A 4A 4A 4A 16 0F 19 00 05 43 00 00 09 00 37 37 00 00 00 01 37 37 00 00 19 00 88 43 00 00 0A 00 5E 24 00 00 00 1B 58 0F 00 00 00 00 00 00 16 0F 19 00 05 43 00 00 09 00 39 37 00 00 00 01 39 37 00 00 19 1B AB 05 00 00 00 00 00 00 19 00 88 43 00 00 0A 00 62 24 00 00 00 1B 09 10 00 00 00 00 00 00 16 16 09 00 61 23 00 00 00 01 61 23 00 00 0F 19 00 05 43 00 00 09 00 25 37 00 00 00 01 25 37 00 00 70 19 00 05 43 00 00 09 00 25 37 00 00 00 01 25 37 00 00 19 00 88 43 00 00 0B 00 58 24 00 00 00 1B A3 0F 00 00 00 00 00 00 4A 16 16 0F 19 19 00 05 43 00 00 09 00 31 37 00 00 00 01 31 37 00 00 09 00 C1 F9 FF FF 00 01 C1 F9 FF FF 1B C4 07 00 00 00 00 00 00 16 0F 10 2C AC 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 32 0F 10 2C B3 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 03 0F 10 2C AB 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 38 44 AB 10 19 1B 4C 0E 00 00 00 00 00 00 16 0A 00 43 41 00 00 00 1B F6 0E 00 00 00 00 00 00 16 12 20 6D FE FF FF 09 00 CA FF FF FF 00 02 CA FF FF FF 38 3F 2C 03 16 0F 10 2C B2 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 04 0F 10 2C B0 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 0F 0F 10 2C AF 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 0A 0F 10 2C AE 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 01 0F 10 2C B4 19 00 05 43 00 00 09 00 32 37 00 00 00 01 32 37 00 00 2C 01 0F 19 00 05 43 00 00 09 00 30 37 00 00 00 01 30 37 00 00 2C 00 0B 0B 0B 0F 35 5B 1E 00 00 64 1E 00 00 00 00 19 00 88 43 00 00 09 00 34 24 00 00 00 01 34 24 00 00 19 1B 69 0E 00 00 00 00 00 00 16 14 00 AC 2F 00 00 00 1B A9 00 00 00 00 00 00 00 00 05 43 00 00 4A 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 


-------------------------


XGStrategyAI.InitNewGame(); // remove vanilla call to create base at start of new game

original:
1B 5B 06 00 00 00 00 00 00 16 0F 01 0C 42 00 00 2C 02 

new:
0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0F 01 0C 42 00 00 2C 02 


---------------------------

XGHeadquarters.ActivateSatellite // add conditions to create alien bases when satellite arrives, via call to XGFacility_SituationRoom.OnCodeCracked

original hex:
header:
EB 32 00 00 AB 1F 00 00 00 00 00 00 E8 32 00 00 00 00 00 00 00 00 00 00 EB 32 00 00 00 00 00 00 98 01 00 00 42 2E 00 00 14 02 00 00 7C 01 00 00 

body:
07 BD 01 2D 00 EA 32 00 00 0F 00 E9 32 00 00 2E 71 FE FF FF 19 19 2E 94 FE FF FF 12 20 FD FE FF FF 0A 00 3A FB FF FF 00 1C 91 FD FF FF 16 09 00 09 FB FF FF 00 01 09 FB FF FF 13 00 A4 FA FF FF 00 1B B6 0D 00 00 00 00 00 00 1F 58 47 50 61 72 61 6D 00 16 0F 19 00 E9 32 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 35 C7 02 00 00 C8 02 00 00 01 00 1B 09 15 00 00 00 00 00 00 35 97 02 00 00 98 02 00 00 00 00 10 00 EB 32 00 00 01 BB 32 00 00 4A 16 0F 19 00 E9 32 00 00 09 00 EE F9 FF FF 00 01 EE F9 FF FF 19 1B 45 06 00 00 00 00 00 00 35 94 02 00 00 98 02 00 00 00 00 10 00 EB 32 00 00 01 BB 32 00 00 16 0B 00 58 24 00 00 00 1B A3 0F 00 00 00 00 00 00 4A 16 19 1B 12 22 00 00 00 00 00 00 16 35 00 5E FE FF FF 00 1B 8F 26 00 00 00 00 00 00 12 20 8C FE FF FF 14 00 09 FA FF FF 00 1B 39 0D 00 00 00 00 00 00 01 99 32 00 00 4A 16 24 08 16 19 1B 12 22 00 00 00 00 00 00 16 17 00 00 00 00 00 00 1B B2 1F 00 00 00 00 00 00 24 21 00 EB 32 00 00 4A 4A 16 19 19 1B 9C 2C 00 00 00 00 00 00 16 09 00 EB 46 00 00 00 01 EB 46 00 00 1F 00 00 00 00 00 00 1B F2 20 00 00 00 00 00 00 10 00 EB 32 00 00 01 BB 32 00 00 4A 4A 16 1B 04 2C 00 00 00 00 00 00 16 04 0B 53 


new hex: (virtual 0x200)
header:
EB 32 00 00 AB 1F 00 00 00 00 00 00 E8 32 00 00 00 00 00 00 00 00 00 00 EB 32 00 00 00 00 00 00 98 01 00 00 42 2E 00 00 00 02 00 00 7C 01 00 00 

body:
07 90 01 2D 00 EA 32 00 00 0F 00 E9 32 00 00 2E 71 FE FF FF 19 19 2E 94 FE FF FF 12 20 FD FE FF FF 0A 00 3A FB FF FF 00 1C 91 FD FF FF 16 09 00 09 FB FF FF 00 01 09 FB FF FF 13 00 A4 FA FF FF 00 1B B6 0D 00 00 00 00 00 00 1F 58 47 50 61 72 61 6D 00 16 0F 19 00 E9 32 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 35 C7 02 00 00 C8 02 00 00 01 00 1B 09 15 00 00 00 00 00 00 35 97 02 00 00 98 02 00 00 00 00 10 00 EB 32 00 00 01 BB 32 00 00 4A 16 0F 19 00 E9 32 00 00 09 00 EE F9 FF FF 00 01 EE F9 FF FF 19 1B 45 06 00 00 00 00 00 00 35 94 02 00 00 98 02 00 00 00 00 10 00 EB 32 00 00 01 BB 32 00 00 16 0B 00 58 24 00 00 00 1B A3 0F 00 00 00 00 00 00 4A 16 19 1B 12 22 00 00 00 00 00 00 16 35 00 5E FE FF FF 00 1B 8F 26 00 00 00 00 00 00 12 20 8C FE FF FF 14 00 09 FA FF FF 00 1B 39 0D 00 00 00 00 00 00 01 99 32 00 00 4A 16 24 08 16 07 D5 01 19 1B 8B 16 00 00 00 00 00 00 16 0C 00 77 2C 00 00 00 1B BF 14 00 00 00 00 00 00 2C 03 16 19 1B C5 24 00 00 00 00 00 00 16 0A 00 00 00 00 00 00 1B 25 20 00 00 00 00 00 00 16 1B 04 2C 00 00 00 00 00 00 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 


-------------------------------


XGFacility_Labs.OnResearchComplete  // disable alien base reveal narrative after outsider shard research complete

change:
19 1B 12 22 00 00 00 00 00 00 16 29 00 66 FF FF FF 00 1B 27 2B 00 00 00 00 00 00 20 29 48 00 00 2A 43 DC 22 00 00 00 00 00 00 00 00 00 00 4A 4A 4A 4A 16 

to:
01 E7 2B 00 00 0B 0B 01 E7 2B 00 00 0B 01 E7 2B 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 


-------------------------------

XGCountry.SetSatelliteCoverage  // prevent satellite coverage over occupied countries from granting bonuses

original hex:
header:
78 24 00 00 AB 1F 00 00 00 00 00 00 77 24 00 00 00 00 00 00 00 00 00 00 78 24 00 00 00 00 00 00 5D 01 00 00 8F 25 00 00 F8 00 00 00 B0 00 00 00 

body:
07 1B 00 F2 2D 01 32 24 00 00 2D 00 78 24 00 00 16 04 0B 14 2D 01 32 24 00 00 2D 00 78 24 00 00 19 1B 23 06 00 00 00 00 00 00 35 5D 1E 00 00 64 1E 00 00 00 00 01 34 24 00 00 16 30 00 00 00 00 00 00 1B F1 23 00 00 00 00 00 00 35 63 1E 00 00 64 1E 00 00 00 00 01 34 24 00 00 2D 00 78 24 00 00 16 07 D5 00 2D 00 78 24 00 00 1B B3 00 00 00 00 00 00 00 12 20 6D FE FF FF 09 00 D5 FB FF FF 00 02 D5 FB FF FF 4A 16 1B 64 03 00 00 00 00 00 00 16 06 F5 00 1B 64 03 00 00 00 00 00 00 16 40 01 2D 24 00 00 25 36 01 2D 24 00 00 16 04 0B 53 

new hex: (virtual 0xE4)
header:
78 24 00 00 AB 1F 00 00 00 00 00 00 77 24 00 00 00 00 00 00 00 00 00 00 78 24 00 00 00 00 00 00 5D 01 00 00 8F 25 00 00 E4 00 00 00 B0 00 00 00 

body:
07 1B 00 F2 2D 01 32 24 00 00 2D 00 78 24 00 00 16 04 0B 14 2D 01 32 24 00 00 2D 00 78 24 00 00 07 40 00 2D 01 33 24 00 00 06 B6 00 19 1B 23 06 00 00 00 00 00 00 38 3A 1B C5 0E 00 00 00 00 00 00 16 16 30 00 00 00 00 00 00 1B F1 23 00 00 00 00 00 00 1B 58 0F 00 00 00 00 00 00 16 2D 00 78 24 00 00 16 07 B6 00 2D 00 78 24 00 00 1B B3 00 00 00 00 00 00 00 12 20 6D FE FF FF 09 00 D5 FB FF FF 00 02 D5 FB FF FF 4A 16 40 01 2D 24 00 00 25 36 01 2D 24 00 00 16 1B 64 03 00 00 00 00 00 00 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 


--------------------------------


XGSatelliteSitRoomUI.UpdateCountryHelp // allow launching of satellites over occupied countries

original hex:
header:
83 3B 00 00 AB 1F 00 00 00 00 00 00 82 3B 00 00 00 00 00 00 00 00 00 00 83 3B 00 00 00 00 00 00 76 01 00 00 99 28 00 00 2C 04 00 00 AC 02 00 00 

body:
07 99 00 9A 01 5A 3B 00 00 1D FF FF FF FF 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 1F 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 06 16 04 07 51 01 19 1B 45 06 00 00 00 00 00 00 01 5A 3B 00 00 16 0A 00 76 24 00 00 00 1B 24 11 00 00 00 00 00 00 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 49 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 26 06 16 04 07 0A 02 19 1B 45 06 00 00 00 00 00 00 01 5A 3B 00 00 16 0A 00 41 24 00 00 00 1B B6 16 00 00 00 00 00 00 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 32 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 06 16 04 07 A6 02 81 1B 28 11 00 00 00 00 00 00 16 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 33 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 06 16 04 07 5B 03 9A 19 1B 23 27 00 00 00 00 00 00 16 0C 00 7D 40 00 00 00 1B CC 0F 00 00 00 00 00 00 2C 6C 16 25 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 4A 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 06 16 04 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 27 0F 35 5A FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 26 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 48 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 02 0F 01 61 3B 00 00 00 83 3B 00 00 04 0B 53 


new hex: (virtual 0x420)
header:
83 3B 00 00 AB 1F 00 00 00 00 00 00 82 3B 00 00 00 00 00 00 00 00 00 00 83 3B 00 00 00 00 00 00 76 01 00 00 99 28 00 00 20 04 00 00 AC 02 00 00 

body:
0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 1F 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 07 99 00 9A 01 5A 3B 00 00 1D FF FF FF FF 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 06 F4 03 07 30 01 19 1B 45 06 00 00 00 00 00 00 01 5A 3B 00 00 16 0A 00 41 24 00 00 00 1B B6 16 00 00 00 00 00 00 16 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 32 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 07 E8 01 19 1B 45 06 00 00 00 00 00 00 01 5A 3B 00 00 16 0A 00 76 24 00 00 00 1B 24 11 00 00 00 00 00 00 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 49 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 26 06 F4 03 07 84 02 81 1B 28 11 00 00 00 00 00 00 16 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 33 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 06 F4 03 07 39 03 9A 19 1B 23 27 00 00 00 00 00 00 16 0C 00 7D 40 00 00 00 1B CC 0F 00 00 00 00 00 00 2C 6C 16 25 16 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 28 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 4A 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 03 06 F4 03 14 2D 35 F4 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 27 0F 35 5A FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 26 0F 35 E1 F9 FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 01 48 3B 00 00 0F 35 59 FB FF FF 6F FA FF FF 00 00 35 F3 3A 00 00 F5 3A 00 00 00 01 00 83 3B 00 00 2C 02 0F 01 61 3B 00 00 00 83 3B 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 


--------------------------------


XGFacility_SituationRoom.OnCodeCracked // alter to require satellite coverage before creating each alien base, add narrative moment on first base

original hex:
header:
AE 2E 00 00 AB 1F 00 00 00 00 00 00 AD 2E 00 00 00 00 00 00 00 00 00 00 AE 2E 00 00 00 00 00 00 8C 03 00 00 C0 66 00 00 59 01 00 00 FD 00 00 00 

body:
0F 01 2B 2E 00 00 26 14 2D 01 2D 2E 00 00 27 0F 00 AE 2E 00 00 25 07 3E 01 96 00 AE 2E 00 00 36 19 1B 69 0E 00 00 00 00 00 00 16 09 00 94 2F 00 00 00 01 94 2F 00 00 16 07 30 01 9A 19 10 00 AE 2E 00 00 19 1B 69 0E 00 00 00 00 00 00 16 09 00 94 2F 00 00 00 01 94 2F 00 00 09 00 35 37 00 00 00 01 35 37 00 00 2C 06 16 0F 19 10 00 AE 2E 00 00 19 1B 69 0E 00 00 00 00 00 00 16 09 00 94 2F 00 00 00 01 94 2F 00 00 09 00 30 37 00 00 00 01 30 37 00 00 25 19 10 00 AE 2E 00 00 19 1B 69 0E 00 00 00 00 00 00 16 09 00 94 2F 00 00 00 01 94 2F 00 00 26 00 00 00 00 00 00 1B C6 23 00 00 00 00 00 00 1C A3 FD FF FF 20 DB 38 00 00 4A 4A 4A 4A 4A 4A 4A 16 24 13 16 A5 00 AE 2E 00 00 16 06 22 00 1B 72 00 00 00 00 00 00 00 24 13 16 1B 4C 22 00 00 00 00 00 00 24 02 16 04 0B 53 

new hex: (virtual 0x139)
header:
AE 2E 00 00 AB 1F 00 00 00 00 00 00 AD 2E 00 00 00 00 00 00 00 00 00 00 AE 2E 00 00 00 00 00 00 8C 03 00 00 C0 66 00 00 39 01 00 00 FD 00 00 00 

body:
58 19 1B 9C 2C 00 00 00 00 00 00 16 ED 00 EF 46 00 00 00 01 EF 46 00 00 00 DD 42 00 00 00 4A 03 01 07 02 01 19 00 DD 42 00 00 0A 00 33 24 00 00 00 2D 01 33 24 00 00 07 02 01 19 00 DD 42 00 00 0A 00 76 24 00 00 00 1B 24 11 00 00 00 00 00 00 16 19 1B E1 00 00 00 00 00 00 00 16 17 00 00 00 00 00 00 1B C7 00 00 00 00 00 00 00 38 3D 19 00 DD 42 00 00 0A 00 5E 24 00 00 00 1B 58 0F 00 00 00 00 00 00 16 00 AB 44 00 00 16 07 02 01 81 2D 01 2D 2E 00 00 16 14 2D 01 2D 2E 00 00 27 1B 34 14 00 00 00 00 00 00 16 19 1B 12 22 00 00 00 00 00 00 16 0C 00 00 00 00 00 00 1B 2B 2B 00 00 00 00 00 00 24 04 16 31 30 1B 72 00 00 00 00 00 00 00 24 13 16 1B 4C 22 00 00 00 00 00 00 24 02 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 


----------------------------

XGStrategyAI.AddToAssets  // helper function to create alien base in country

original hex:
header:
A4 44 00 00 AB 1F 00 00 00 00 00 00 A1 44 00 00 00 00 00 00 00 00 00 00 A4 44 00 00 00 00 00 00 01 0E 00 00 24 AD 01 00 A1 00 00 00 81 00 00 00 

body:
07 41 00 81 1B 18 14 00 00 00 00 00 00 00 A4 44 00 00 48 A3 44 00 00 16 16 55 48 A3 44 00 00 14 00 1B 8A 0E 00 00 00 00 00 00 00 A4 44 00 00 16 16 07 9E 00 84 9A 38 3A 00 A4 44 00 00 38 3A 24 08 16 18 12 00 9A 38 3A 00 A4 44 00 00 38 3A 24 10 16 16 07 9E 00 81 1B 18 14 00 00 00 00 00 00 24 11 48 A3 44 00 00 16 16 55 48 A3 44 00 00 0D 00 1B 8A 0E 00 00 00 00 00 00 24 11 16 16 04 0B 53 

new hex: (virtual 0x89)
header:
A4 44 00 00 AB 1F 00 00 00 00 00 00 A1 44 00 00 00 00 00 00 00 00 00 00 A4 44 00 00 00 00 00 00 01 0E 00 00 24 AD 01 00 89 00 00 00 81 00 00 00 

body:
0F 01 10 42 00 00 38 3A 00 A4 44 00 00 1B 5B 06 00 00 00 00 00 00 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 0B 53 

---------------------------------


XGFacility_SituationRoom.IsCodeActive // helper function for OnCodeCracked to play cinematic

original hex:
header:
A1 2E 00 00 AB 1F 00 00 00 00 00 00 A0 2E 00 00 00 00 00 00 00 00 00 00 A1 2E 00 00 00 00 00 00 60 03 00 00 84 62 00 00 57 00 00 00 4B 00 00 00 

body:
04 82 19 1B 8B 16 00 00 00 00 00 00 16 0C 00 77 2C 00 00 00 1B BF 14 00 00 00 00 00 00 2C 03 16 18 25 00 81 19 1B 8B 16 00 00 00 00 00 00 16 0C 00 6B 2C 00 00 00 1B E0 14 00 00 00 00 00 00 24 07 16 16 16 04 3A A1 2E 00 00 53 

new hex: (virtual 0x53)
header:
A1 2E 00 00 AB 1F 00 00 00 00 00 00 A0 2E 00 00 00 00 00 00 00 00 00 00 A1 2E 00 00 00 00 00 00 60 03 00 00 84 62 00 00 53 00 00 00 4B 00 00 00 

body:
19 1B 12 22 00 00 00 00 00 00 16 29 00 66 FF FF FF 00 1B 27 2B 00 00 00 00 00 00 20 29 48 00 00 2A 4A 4A 4A 4A 4A 16 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 04 28 53 



---------------------------------

XGSituationRoomUI.UpdateView   // remove call to IsCodeActive

change:
UpdateCode()
1B 9F 2B 00 00 00 00 00 00 16 

to:
2C 01 0B 0B 1D 45 33 00 00 0B 


---------------------------------


XGStrategyAI.CostTest/JoinXCom  // function that makes a country designated via AI().m_iAlienMonth rejoin XCom

original hex:
header:
BD 44 00 00 AB 1F 00 00 00 00 00 00 BC 44 00 00 00 00 00 00 00 00 00 00 BD 44 00 00 00 00 00 00 CD 0E 00 00 7F BC 01 00 DA 01 00 00 7A 01 00 00 

body:
0F 00 BD 44 00 00 1B C4 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B DE 07 00 00 00 00 00 00 27 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B C5 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B D8 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B C4 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B DE 07 00 00 00 00 00 00 27 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B C5 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B D8 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B C4 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B DE 07 00 00 00 00 00 00 27 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B C5 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 0F 00 BD 44 00 00 1B D8 07 00 00 00 00 00 00 16 1B 3E 06 00 00 00 00 00 00 00 BD 44 00 00 16 04 0B 53 


new hex:(virtual 0x1EA)
header:
BD 44 00 00 AB 1F 00 00 00 00 00 00 BC 44 00 00 00 00 00 00 00 00 00 00 BD 44 00 00 00 00 00 00 CD 0E 00 00 7F BC 01 00 EA 01 00 00 7A 01 00 00 

body: 
01 10 42 00 00 0B 0B 0B 0B 0F 00 88 43 00 00 1B 45 06 00 00 00 00 00 00 01 10 42 00 00 16 14 19 00 88 43 00 00 0A 00 33 24 00 00 00 2D 01 33 24 00 00 28 A2 19 1B 9C 2C 00 00 00 00 00 00 16 09 00 E9 46 00 00 00 01 E9 46 00 00 2C 01 16 1B C7 26 00 00 00 00 00 00 24 14 1D FF FF FF FF 16 0F 19 00 88 43 00 00 09 00 2E 24 00 00 00 01 2E 24 00 00 2C 03 07 0D 01 19 00 88 43 00 00 0A 00 76 24 00 00 00 1B 24 11 00 00 00 00 00 00 16 19 1B 23 06 00 00 00 00 00 00 38 3A 19 00 88 43 00 00 0A 00 60 24 00 00 00 1B C5 0E 00 00 00 00 00 00 16 16 30 00 00 00 00 00 00 1B F1 23 00 00 00 00 00 00 01 10 42 00 00 27 16 19 00 88 43 00 00 09 00 64 03 00 00 00 1B 64 03 00 00 00 00 00 00 16 07 9F 01 77 19 00 88 43 00 00 0A 00 23 00 00 00 00 1B 04 0F 00 00 00 00 00 00 16 2A 16 19 00 88 43 00 00 0B 00 00 00 00 00 00 1B 42 11 00 00 00 00 00 00 27 16 19 19 00 88 43 00 00 0A 00 23 00 00 00 00 1B 04 0F 00 00 00 00 00 00 16 03 00 B7 FF FF FF 00 61 17 16 19 1B 69 0E 00 00 00 00 00 00 16 55 00 00 00 00 00 00 1B F3 00 00 00 00 00 00 00 19 1B 69 0E 00 00 00 00 00 00 16 35 00 10 30 00 00 00 1B AB 1E 00 00 00 00 00 00 24 18 2C 01 4A 4A 4A 16 16 0B 04 0B 53 


----------------------------------


rename function :

original:
CostTest
09 00 00 00 43 6F 73 74 54 65 73 74

new:
JoinXCom
09 00 00 00 4A 6F 69 6E 58 43 6F 6D


----------------------------------

XGStrategyAI.ApplyMissionPanic // calls JoinXCom when Alien Base mission is successfully completed

original hex: (next line 0xB1D)
0A 1D 0B 2C 06 0F 35 58 03 00 00 5C 03 00 00 00 01 19 1B 5C 11 00 00 00 00 00 00 16 09 00 A3 32 00 00 00 01 A3 32 00 00 12 20 6D FE FF FF 09 00 E7 FB FF FF 00 02 E7 FB FF FF 19 1B 9C 2C 00 00 00 00 00 00 16 3C 00 00 00 00 00 00 1B B3 00 00 00 00 00 00 00 35 58 03 00 00 5C 03 00 00 00 00 19 1B 5C 11 00 00 00 00 00 00 16 09 00 A3 32 00 00 00 01 A3 32 00 00 16 06 20 0B 

new hex:
0A 1D 0B 2C 06 07 0D 0B 2D 00 7D 43 00 00 0F 01 10 42 00 00 19 00 7A 43 00 00 0A 00 5E 24 00 00 00 1B 58 0F 00 00 00 00 00 00 16 1B 3F 06 00 00 00 00 00 00 16 01 10 42 00 00 01 10 42 00 00 01 10 42 00 00 01 10 42 00 00 01 10 42 00 00 01 10 42 00 00 01 10 42 00 00 01 10 42 00 00 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 06 20 0B 

----------------------------------


XGObjectiveManager.BuildSubObjective // add subobjective 7, to launch a satellite over an occupied country

original hex: (next line 0x4AD)
0A AD 04 24 07 07 AA 04 9A 19 1B 23 27 00 00 00 00 00 00 16 0C 00 7D 40 00 00 00 1B CC 0F 00 00 00 00 00 00 2C BF 16 26 16 0F 35 D5 08 00 00 D9 08 00 00 00 01 00 F4 38 00 00 24 02 06 FC 0D 

new hex:
0A AD 04 24 07 07 AA 04 19 1B C5 24 00 00 00 00 00 00 16 0A 00 A3 2E 00 00 00 1B 35 14 00 00 00 00 00 00 16 0F 35 D5 08 00 00 D9 08 00 00 00 01 00 F4 38 00 00 24 02 0B 0B 0B 0B 0B 06 FC 0D 



------------------------------------

XGResearchUI.UpdateView // display objective 3 instead of 4 after completing the outsider shard research project

change:
PRES().UIObjectiveDisplay(4)
19 1B 12 22 00 00 00 00 00 00 16 0C 00 00 00 00 00 00 1B 2B 2B 00 00 00 00 00 00 24 04 16 

to:
PRES().UIObjectiveDisplay(3)
19 1B 12 22 00 00 00 00 00 00 16 0C 00 00 00 00 00 00 1B 2B 2B 00 00 00 00 00 00 24 03 16 


------------------------------------


XComHQPresentationLayer.GetObjectiveImagePath  // change image for objective three UI popup

original hex:
header:
5C 20 00 00 AB 1F 00 00 00 00 00 00 59 20 00 00 00 00 00 00 00 00 00 00 5C 20 00 00 00 00 00 00 00 08 00 00 56 08 01 00 78 01 00 00 48 01 00 00 

body:
0F 00 5A 20 00 00 1F 69 6D 67 3A 2F 2F 2F 55 49 4C 69 62 72 61 72 79 5F 53 74 72 61 74 65 67 79 49 6D 61 67 65 73 2E 53 63 69 65 6E 63 65 49 63 6F 6E 73 2E 00 05 5C 20 00 00 00 00 5C 20 00 00 0A 73 00 26 04 70 00 5A 20 00 00 1F 49 43 5F 49 6E 74 65 72 72 6F 67 61 74 65 53 65 63 74 6F 69 64 00 16 0A 9C 00 2C 02 04 70 00 5A 20 00 00 1F 49 43 5F 49 6E 74 65 72 72 6F 67 61 74 65 4F 75 74 73 69 64 65 72 00 16 0A BF 00 2C 03 04 70 00 5A 20 00 00 1F 49 43 5F 4F 75 74 73 69 64 65 72 53 68 61 72 64 00 16 0A DE 00 2C 04 04 70 00 5A 20 00 00 1F 49 43 5F 41 6C 69 65 6E 42 61 73 65 00 16 0A 0A 01 2C 05 04 70 00 5A 20 00 00 1F 49 43 5F 48 79 70 65 72 77 61 76 65 43 6F 6D 6D 75 6E 69 63 61 74 69 6F 6E 00 16 0A 2B 01 2C 06 04 70 00 5A 20 00 00 1F 49 43 5F 55 46 4F 54 72 61 63 6B 69 6E 67 00 16 0A 48 01 2C 07 04 70 00 5A 20 00 00 1F 49 43 5F 50 73 69 4C 69 6E 6B 00 16 0A 67 01 2C 08 04 70 00 5A 20 00 00 1F 49 43 5F 55 46 4F 46 6C 69 67 68 74 00 16 0A FF FF 04 1F 00 04 3A 5B 20 00 00 53 

new hex: (virtual 0x174)
header:
5C 20 00 00 AB 1F 00 00 00 00 00 00 59 20 00 00 00 00 00 00 00 00 00 00 5C 20 00 00 00 00 00 00 00 08 00 00 56 08 01 00 74 01 00 00 48 01 00 00 

body:
0F 00 5A 20 00 00 1F 69 6D 67 3A 2F 2F 2F 55 49 4C 69 62 72 61 72 79 5F 53 74 72 61 74 65 67 79 49 6D 61 67 65 73 2E 53 63 69 65 6E 63 65 49 63 6F 6E 73 2E 00 05 5C 20 00 00 00 00 5C 20 00 00 0A 73 00 26 04 70 00 5A 20 00 00 1F 49 43 5F 49 6E 74 65 72 72 6F 67 61 74 65 53 65 63 74 6F 69 64 00 16 0A 9C 00 2C 02 04 70 00 5A 20 00 00 1F 49 43 5F 49 6E 74 65 72 72 6F 67 61 74 65 4F 75 74 73 69 64 65 72 00 16 0A C2 00 2C 03 04 70 00 5A 20 00 00 1F 49 43 5F 53 74 65 61 6C 74 68 53 61 74 65 6C 6C 69 74 65 00 16 0A E1 00 2C 04 04 70 00 5A 20 00 00 1F 49 43 5F 41 6C 69 65 6E 42 61 73 65 00 16 0A 0D 01 2C 05 04 70 00 5A 20 00 00 1F 49 43 5F 48 79 70 65 72 77 61 76 65 43 6F 6D 6D 75 6E 69 63 61 74 69 6F 6E 00 16 0A 2E 01 2C 06 04 70 00 5A 20 00 00 1F 49 43 5F 55 46 4F 54 72 61 63 6B 69 6E 67 00 16 0A 4B 01 2C 07 04 70 00 5A 20 00 00 1F 49 43 5F 50 73 69 4C 69 6E 6B 00 16 0A 6A 01 2C 08 04 70 00 5A 20 00 00 1F 49 43 5F 55 46 4F 46 6C 69 67 68 74 00 16 0A FF FF 04 1F 00 0B 0B 0B 53 	


-----------------------------------


XGDebriefUI.UpdateCouncilDebrief // on returning from mission, display country in debrief instead of continent (which is blank)

original hex:
07 CA 06 9A 38 3A 35 5B 03 00 00 5C 03 00 00 00 00 19 00 59 26 00 00 09 00 A3 32 00 00 00 01 A3 32 00 00 38 3A 24 06 16 0F 00 65 26 00 00 1B 23 06 00 00 00 00 00 00 35 53 03 00 00 5C 03 00 00 00 00 19 00 59 26 00 00 09 00 A3 32 00 00 00 01 A3 32 00 00 16 0F 19 00 60 26 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 19 00 65 26 00 00 0A 00 9E 23 00 00 00 1B A3 0F 00 00 00 00 00 00 16 07 8C 06 2D 35 52 03 00 00 5C 03 00 00 00 00 19 00 59 26 00 00 09 00 A3 32 00 00 00 01 A3 32 00 00 0F 00 61 26 00 00 12 20 8C FE FF FF 1C 00 08 FA FF FF 00 1B 3A 0D 00 00 00 00 00 00 01 12 26 00 00 00 60 26 00 00 16 06 C7 06 0F 00 61 26 00 00 12 20 8C FE FF FF 1C 00 08 FA FF FF 00 1B 3A 0D 00 00 00 00 00 00 01 11 26 00 00 00 60 26 00 00 16 06 1C 09 


new hex:
07 CA 06 9A 38 3A 35 5B 03 00 00 5C 03 00 00 00 00 19 00 59 26 00 00 09 00 A3 32 00 00 00 01 A3 32 00 00 38 3A 24 06 16 0F 19 00 60 26 00 00 09 00 EF F9 FF FF 00 01 EF F9 FF FF 19 1B 45 06 00 00 00 00 00 00 35 54 03 00 00 5C 03 00 00 00 00 19 00 59 26 00 00 09 00 A3 32 00 00 00 01 A3 32 00 00 16 0B 00 5B 24 00 00 00 1B A6 0F 00 00 00 00 00 00 27 16 07 7A 06 2D 35 52 03 00 00 5C 03 00 00 00 00 19 00 59 26 00 00 09 00 A3 32 00 00 00 01 A3 32 00 00 0F 00 61 26 00 00 12 20 8C FE FF FF 1C 00 08 FA FF FF 00 1B 3A 0D 00 00 00 00 00 00 01 12 26 00 00 00 60 26 00 00 16 06 C7 06 0F 00 61 26 00 00 12 20 8C FE FF FF 1C 00 08 FA FF FF 00 1B 3A 0D 00 00 00 00 00 00 01 11 26 00 00 00 60 26 00 00 16 00 60 26 00 00 00 60 26 00 00 06 1C 09 

------------------------------------

XComStrategyGame.int  // New Localization Entry for subobjective 7

placed after SubObjectiveNames[eSubObj_ResearchShard]="Research the Outsider Shard"

SubObjectiveNames[eSubObj_ObtainShards] ="Launch a satellite over an occupied country"

placed after SubObjectiveInDepth[eSubObj_ResearchShard]

SubObjectiveInDepth[eSubObj_ObtainShards]="To find one of the alien bases, we'll need eyes in the sky. We should launch a satellite over an alien-occupied country so that we can do a detailed search."


Change and use objective 3

change:
GameObjectiveNames[eObj_ObtainShards]="Obtain More Outsider shards."

to:
GameObjectiveNames[eObj_ObtainShards]="Recon an Occupied Country"


Update Alien Base debrief localization text:
change:
m_strAlienBaseFeedback="XCOM successfully infiltrated and eliminated the alien base in <XGParam:StrValue0/>!"

to:
m_strAlienBaseFeedback="XCOM successfully infiltrated and eliminated the alien base in <XGParam:StrValue0/>, which has now rejoined the XCOM Project."


Localization Change:
change:
m_strTitle="Alien Base Assault"

to:
m_strTitle="Assault Base: " 

 

 

Link to comment
Share on other sites

Here is the function changelist for the hex changes :

Alien Base missions and re-taking countries

Function rework checklist :

1) Rewrite XGStrategyAI.CreateAlienBase 			: inits base detection, adds country and continent, sets location, saves mission ID to country
2) Create new XGStrategy.JoinXCom      				: sets country back up as XCOM member
3) Alter XGStrategyAI.ApplyMissionPanic   			: completing alien base mission triggers XGStrategyAI.JoinXCom
4) Rework XGSatelliteSitRoomUI.UpdateCountryHelp 	: allow occupied countries to have satellites launched over them, coloring changes
5) XGCountry.SetSatelliteCoverage					: prevents collection of resources from sats launched over occupied countries
6) XGHeadquarters.ActivateSatellite					: creation of alien base (via OnCodeCracked) when satellite reaches orbit
7) XGStrategyAI.InitNewGame							: remove creation of alien base from this function
8) XGSituationRoomUI.OnCodeCracked 					: alter to create bases in countries with satellite coverage
8.1) XGFacility_SituationRoom.IsCodeActive			: helper for OnCodeCracked to play alien base reveal cinematic
8.5) XGStrategyAI.AddToAssets						: helper to create alien base mission when country satellite orbited or tech completed
10) XGObjectiveManager.BuildSubObjective			: create condition for new subobjective 7 to be completed
11) XGResearchUI.UpdateView							: display objective 3 (recon country) after finishing outsider shard research
13) XGFacility_Labs.OnResearchComplete				: disable alien base reveal narrative after completing outsider shard research project

Requirements:
1) Alien bases created in occupied countries  (1, 6, 7, 8)
2) When country is occupied existing satellite is destroyed (unchanged from vanilla)
3) Alien base created when Base Shard research complete and satellite coverage over occupied country (6, 7, 8 )
4) Alien base mission can be accepted after completion of Skeleton Key item and with current satellite coverage // defer for now
5) Launching satellite over occupied country creates base (4, 5, 6)
6) Completing alien base mission causes associated country to rejoin XCom with 4 panic (2, 3)
7) Objectives shows requirement to orbit satellite over occupied country (10, 11)
8) Countries lost during initial months from infiltration missions (12)  // NOT INCLUDED


Display-only changes :
*** 1) XGMissionControlUI.UpdateAlert 					: displays country instead of continent in alien base alert
*** 6) XComHQPresentationLayer.GetObjectiveImagePath	: change image for objective 3 UI popup
*** 7) XGDebriefUI.UpdateCouncilDebrief					: Display country in debrief after completing alien base mission

For completeness, here are the two functions that were changed to add infiltration objectives, but which weren't included since they are built on top of Long War changes:

12) XGStrategyAI.AIAddNewObjectives	 				: Add infiltration missions for initial lost countries
12.5) XGStrategyAI.RevealBase/#AddInfTgt 			: Reworked into helper to create infiltration missions

And here are the satellite UI changes which are built on the "All Countries contribute modlet" :

2) XGSatelliteSitRoomUI.UpdateContinent				: disable sci/eng highlighting for occupied countries
3) XGSatelliteSitRoom.UpdateConfirmUI				: display correct launch rewards on satellite launch confirmation
4) XGSatelliteSitRoom.UpdateCountry					: display correct total funding for countries in satellite launch UI
5) XGCountry.CalcFunding							: Allow return of funding with satellite, plus fix bugs with SW options

If you have any interest in these functions, please let me know.

Link to comment
Share on other sites

Amineri, you magnificent modder! This is excellent news! I eagerly await this to happen.

 

Assuming one could ramp up the difficulty in general and extend the game longer this could essentially be the prime late-game mechanic, winning back all the lost ground from earlier failures.

 

I'm so glad the modding community continues its work despite an apparent lack of enthusiasm. What we lack in numbers we make up for in skill! Hurrah!

Link to comment
Share on other sites

Just found some glitches when trying to create / attempt additional alien base missions.

 

A side effect of completing the first alien base mission (that I missed) was destroying the skeleton key (for some reason).

 

I'm debating the options of:

  1. Allowing manufacturing of more skeleton keys, which would add an additional requirement of capturing an outsider for each regained country / alien base mission
  2. Keeping the skeleton key from being destroyed

Option 2 is easier for the player and easier to code, but option 1 is intriguing me. I'm just not sure if it's crossing the line into "too much"

Edited by Amineri
Link to comment
Share on other sites

If you go with number 1, any modder would have to ensure that outsiders can be encountered somewhat regularly after the first base mission. I believe they are eliminated from the game in vanilla.

 

(In Long War, they show up as escorts to sectoid commanders half the time)

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...