Jump to content

Interesting UPK Stuff I've Found


BlackAlpha

Recommended Posts

Mostly how you guys are finding the exact code to change, amidst the thousands of numbers that seem to translate into a mess of other code. It seems like it'd be nearly impossible to not only figure out what the code the game uses means, but to also find what hex needs to be changed, and where exactly it is, seems downright impossible.
Link to comment
Share on other sites

Essential tool is UE Explorer 1.2 from EliotVU, that reads decompressed UPK and translates classes from byte code to interpretation of UnrealScript language.

 

Next you need a way to search for anything you're interested in. Since version 1.2, searches can be performed in UE Explorer. Or you can use UE Explorer to export all classes, and search in UnCodeX.

 

When you find where is the information stored, you can check it with UE Explorer's function View Buffer, which helps you to find exact bytes to change. There are specific rules, how the byte code works (like operators first, then values). Daemonjax made very helpful overview of what most bytes stand for. I would say you'll learn the rest while working with the code.

 

In the end, you need to do the change. I am using View Buffer to find exact offset and then load part of the class unpacked with UPK Packer (or Gildor's Unreal Package Extractor can be used) into hex editor and locate a chunk of code, that is unique for current UPK. Do the change and check the result in EU Explorer. This should be possible with Export/Import Binary File in EU Explorer's View Buffer as well. And that's it.

 

Skipping conditional is not hard. Every IF is defined by 07 and two bytes offset and every ELSE is defined by 06 and two bytes offset. Changing 07 to 06 skips IF to the next defined 07 or 06 (correct me if I'm wrong please). If is 06 at the end of the jump, ELSE is removed.

 

// 07-ends ABCD
if(some conditon)
{
command 1
}
// 06-ends EFGH
else
{
command 2
}

goto ABCD // JumpToken created from 07-ends ABCD by changing 07 to 06 in the byte code
// (some conditon) - not executed now
// command 1 - not executed now
// goto EFGH - JumpToken created from 06-ends EFGH, not executed now
ABCD
command 2

Link to comment
Share on other sites

======================

XComStrategyGame.upk:

======================

 

 

==== XGStrategyAI ====

>>>> function DetermineBestAbductionTargets

Changed:

if(kCountry.HasSatelliteCoverage())
{
}
// End:0xef
else
{
// End:0xd9
if(IsTerrorTarget(eTargetCountry))
{
}
// End:0xef
else
{
	arrPossibleCountries.AddItem(eTargetCountry);
}
}


To:

if(kCountry.LeftXCom())
{
}
// End:0xef
else
{
// This is an implied JumpToken;
goto J0xc0;
kCountry.HasSatelliteCoverage();
// This is an implied JumpToken;
goto J0xef;
J0xc0:
// End:0xd9
if(IsTerrorTarget(eTargetCountry))
{
}
// End:0xef
else
{
	arrPossibleCountries.AddItem(eTargetCountry);
}
}


This will make it so abductions will happen in countries with a satellite. A UFO will try to land there and if it succeeds, an abduction mission might become available.

Props to Drakous79.

HEX Hint:
Change:
07 9B 00 19 00 88 43 00 00 0A 00 41 24 00 00 00 1B B6 16 00 00 00 00 00 00 16 06 EF 00 07
To:
07 9B 00 19 00 88 43 00 00 0A 00 41 24 00 00 00 1B B6 16 00 00 00 00 00 00 16 06 EF 00 06

 

 

 

 

 

==== XGCountry ====

>>>> function XGStrategyActor.EEntityGraphic GetStormEntity()

Changed:

return 21;

return 22;

return 23;

To:

return 22;

return 23;

return 23;


This reduces large storms to medium storms and it reduces medium storms to small storms.

Props to Drakous79.

HEX Hint:
Change:
4D 00 2C 07 04 24 15 06 6F 00 0A 52 00 2C 15 0A 57 00 2C 14 0A 5C 00 2C 12 0A 61 00 2C 16 0A 6C 00 2C 19 04 24 16 06 6F 00 0A FF FF 04 24 17
To:
4D 00 2C 07 04 24 16 06 6F 00 0A 52 00 2C 15 0A 57 00 2C 14 0A 5C 00 2C 12 0A 61 00 2C 16 0A 6C 00 2C 19 04 24 17 06 6F 00 0A FF FF 04 24 17

 

 

 

 

 

======================

XcomGame.upk:

======================

 

 

==== XGAction_HunkerDown ====

>>>> simulated state Executing

Changed:

Sleep(1.75);

To:

Sleep(0.00);


This eliminates the delay after the Hunker Down ability is activated. The player doesn't need to wait any longer.

Props to Bokauk.

HEX Hint:
Change:
04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 B1 00 00 00 2D 00 00 00 29 00 00 00 61 00 1E 00 00 E0 3F
To:
04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 B1 00 00 00 2D 00 00 00 29 00 00 00 61 00 1E 00 00 00 00

 

 

 

 

 

==== XGAction_Overwatch ====

>>>> simulated state Executing

Changed:

Sleep(1.75);

To:

Sleep(0.00);


This eliminates the delay after the Overwatch ability is activated. The player doesn't need to wait any longer.

Props to Bokauk.

HEX Hint:
Change:
04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 B0 00 00 00 2D 00 00 00 29 00 00 00 61 00 1E 00 00 E0 3F
To:
04 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 B0 00 00 00 2D 00 00 00 29 00 00 00 61 00 1E 00 00 00 00

Edited by BlackAlpha
Link to comment
Share on other sites

  • 4 weeks later...

From now on all changes to Warspace UPK files can be found inside the UPK modding tools archive. See the first post for the link. I will post stuff here as well to add more explanations on how things work.

 

 

 

======================

XComStrategyGame.upk:

======================

 

 

==== XGFacility_Engineering ====

>>>> noexport function TProjectCost GetItemProjectCost(XComGame.XGGameData.EItemType eItem, int iQuantity, optional bool Brush)

Changed:

kCost.arrItems.AddItem(144);
kCost.arrItemQuantities.AddItem(ItemAmount(3));

kCost.arrItems.AddItem(146);
kCost.arrItemQuantities.AddItem(ItemAmount(3));

kCost.arrItems.AddItem(152);
kCost.arrItemQuantities.AddItem(ItemAmount(2));


To:

kCost.arrItems.AddItem(144);
kCost.arrItemQuantities.AddItem(ItemAmount(1));

kCost.arrItems.AddItem(146);
kCost.arrItemQuantities.AddItem(ItemAmount(1));

kCost.arrItems.AddItem(152);
kCost.arrItemQuantities.AddItem(ItemAmount(1));


This makes it so only 1 corpse is needed to create an aircraft powerup.

HEX Hint:
Change:
03 16 16 06 84 05 07 C1 02 9A 38 3A 00 28 2A 00 00 38 3A 24 85 16 55 35 05 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 03 00 2C 92 16 55 35 04 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 0D 00 1B 10 15 00 00 00 00 00 00 2C 03 16 16 06 84 05 07 26 03 9A 38 3A 00 28 2A 00 00 38 3A 24 86 16 55 35 05 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 03 00 2C 98 16 55 35 04 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 0D 00 1B 10 15 00 00 00 00 00 00 2C 02
To:
01 16 16 06 84 05 07 C1 02 9A 38 3A 00 28 2A 00 00 38 3A 24 85 16 55 35 05 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 03 00 2C 92 16 55 35 04 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 0D 00 1B 10 15 00 00 00 00 00 00 2C 01 16 16 06 84 05 07 26 03 9A 38 3A 00 28 2A 00 00 38 3A 24 86 16 55 35 05 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 03 00 2C 98 16 55 35 04 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 0D 00 1B 10 15 00 00 00 00 00 00 2C 01

 

 

 

 

 

==== XGFacility_Engineering ====

>>>> noexport function TProjectCost GetItemProjectCost(XComGame.XGGameData.EItemType eItem, int iQuantity, optional bool Brush)

Changed:

kCost.arrItems.AddItem(154);
kCost.arrItemQuantities.AddItem(ItemAmount(4));


To:

kCost.arrItems.AddItem(154);
kCost.arrItemQuantities.AddItem(ItemAmount(8));


This makes it so Chitin Plating costs 8 Chryssalid corpses.

HEX Hint:
Change:
2A 00 00 03 00 2C 9A 16 55 35 04 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 0D 00 1B 10 15 00 00 00 00 00 00 2C 04
To:
2A 00 00 03 00 2C 9A 16 55 35 04 03 00 00 09 03 00 00 00 00 00 23 2A 00 00 0D 00 1B 10 15 00 00 00 00 00 00 2C 08

 

 

 

 

 

==== XGFundingCouncil ====

>>>> function DetermineMonthlyGrade(out TCouncilMeeting kMeeting)

Changed:

kMeeting.kSummary.iUFOsEscaped += kMeeting.arrContinentSummaries[iContinent].iUFOsDetected - kMeeting.arrContinentSummaries[iContinent].iUFOsShotdown;


To:

kMeeting.kSummary.iUFOsEscaped == kMeeting.arrContinentSummaries[iContinent].iUFOsDetected - kMeeting.arrContinentSummaries[iContinent].iUFOsShotdown;


This makes it so escaped UFOs don't bring down the monthly council grade.

HEX Hint:
Change:
00 00 00 35 F8 02 00 00 FE 02 00 00 00 01 48 8B 01 00 00 35 F0 02 00 00 F3 02 00 00 00 00 10 00 8A 01 00 00 35 FC 02 00 00 FE 02 00 00 00 00 48 8B 01 00 00 16 A1
To:
00 00 00 35 F8 02 00 00 FE 02 00 00 00 01 48 8B 01 00 00 35 F0 02 00 00 F3 02 00 00 00 00 10 00 8A 01 00 00 35 FC 02 00 00 FE 02 00 00 00 00 48 8B 01 00 00 16 9A

 

 

 

 

 

==== XGItemTree ====

>>>> function int GetItemQuestPrice

Changed:

fPerHourValue = 0.07;


To:

fPerHourValue = 0.02;

This will decrease the reward amount for "item request" type missions.
One of the changes in Warspace has caused the money reward amount to sky rocket. The above change should bring it down quite a bit.

HEX Hint:
Change:
77 03 00 00 93 BE 00 00 37 01 00 00 C7 00 00 00 0F 00 E7 35 00 00 25 0F 00 E6 35 00 00 1E B8 1E 85 3D
To:
77 03 00 00 93 BE 00 00 37 01 00 00 C7 00 00 00 0F 00 E7 35 00 00 25 0F 00 E6 35 00 00 1E 0A D7 A3 3C

 

 

 

 

 

==== XGItemTree ====

>>>> function UpdateShips()


Changed:

case 0:
UpdateShip(1, 1500, 10, 2500, 5, 0);
UpdateShip(3, 3500, 20, 6500, 25, 34);
UpdateShip(4, 1500, 20, 800, 0, 7);
UpdateShip(5, 1800, 22, 1600, 0, 7);
UpdateShip(6, 2000, 17, 1800, 5, 3);
UpdateShip(7, 2500, 25, 2000, 16, 4);
UpdateShip(8, 3000, 40, 2400, 52, 20);
UpdateShip(9, 3500, 60, 2500, 64, 25);
// End:0x3d7
break;
// End:0x209
case 1:
UpdateShip(1, 1500, 10, 2500, 5, 0);
UpdateShip(3, 3500, 20, 6500, 25, 34);
UpdateShip(4, 1500, 20, 800, 0, 7);
UpdateShip(5, 1800, 22, 1600, 0, 7);
UpdateShip(6, 2000, 17, 1800, 5, 3);
UpdateShip(7, 2500, 25, 2000, 16, 4);
UpdateShip(8, 3000, 40, 2400, 52, 20);
UpdateShip(9, 3500, 60, 2500, 64, 25);
// End:0x3d7
break;
// End:0x2ee
case 2:
UpdateShip(1, 1500, 10, 2500, 5, 0);
UpdateShip(3, 3500, 15, 6500, 25, 16);
UpdateShip(4, 1500, 20, 800, 0, 7);
UpdateShip(5, 1800, 22, 1600, 0, 7);
UpdateShip(6, 2000, 17, 2200, 10, 3);
UpdateShip(7, 2500, 25, 2400, 30, 4);
UpdateShip(8, 3000, 40, 2900, 42, 20);
UpdateShip(9, 3500, 60, 2500, 45, 25);
// End:0x3d7
break;
// End:0x3d4
case 3:
UpdateShip(1, 1500, 10, 2500, 5, 0);
UpdateShip(3, 3500, 15, 6500, 25, 16);
UpdateShip(4, 1500, 20, 800, 0, 7);
UpdateShip(5, 1800, 22, 1600, 2, 7);
UpdateShip(6, 2000, 17, 2200, 13, 3);
UpdateShip(7, 2500, 25, 2400, 36, 4);
UpdateShip(8, 3000, 40, 2900, 52, 20);
UpdateShip(9, 3500, 65, 2500, 52, 25);
// End:0x3d7


To:

In all 4 blocks...
UpdateShip(1, 1500, 10, 1500, 0, 0);
UpdateShip(3, 3500, 13, 3000, 0, 16);
UpdateShip(4, 1500, 35, 1500, 0, 7);
UpdateShip(5, 1800, 40, 2100, 0, 7);
UpdateShip(6, 2000, 20, 7300, 0, 3);
UpdateShip(7, 2500, 15, 10000, 0, 4);
UpdateShip(8, 1600, 10, 15000, 0, 20);
UpdateShip(9, 3500, 30, 5100, 0, 25);


Here's what the numbers mean:

- ID of aircraft.

- Aircraft movement speed on the strategic map. Higher is faster.

- Aircraft "movement speed" during tactical battles. It dictates how much time the player gets to shoot down the aircraft. The higher the number on the alien aircraft, the less time the player gets to shoot down the UFO. The higher the number on the player's aircraft, the more time the player gets to shoot down the UFO. So if the player switches from a regular Interceptor to a Firestorm, the player gets more time to shoot down a UFO because the Firestorm has a higher number.

- HP of the aircraft. For example, if the aircraft has no armor, when the attacker does 100 damage and the target has 200 HP, then it takes two hits to shoot down the target.

- Armor of aircraft. I never tested how it applies, but I assume it will decrease the damage taken, in some way. I simply removed all armor related stats because I don't see the point of it. I think it makes things unnecessarily complicated.

- Armor piercing bonus the aircraft applies.

HEX Hint:
Change:
24 01 1D DC 05 00 00 2C 0A 1D C4 09 00 00 2C 05 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 14 1D 64 19 00 00 2C 19 2C 22 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 14 1D 20 03 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 16 1D 40 06 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 11 1D 08 07 00 00 2C 05 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 19 1D D0 07 00 00 2C 10 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D B8 0B 00 00 2C 28 1D 60 09 00 00 2C 34 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 3C 1D C4 09 00 00 2C 40 2C 19 16 06 D7 03 0A 09 02 26 1B 0A 2C 00 00 00 00 00 00 24 01 1D DC 05 00 00 2C 0A 1D C4 09 00 00 2C 05 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 14 1D 64 19 00 00 2C 19 2C 22 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 14 1D 20 03 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 16 1D 40 06 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 11 1D 08 07 00 00 2C 05 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 19 1D D0 07 00 00 2C 10 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D B8 0B 00 00 2C 28 1D 60 09 00 00 2C 34 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 3C 1D C4 09 00 00 2C 40 2C 19 16 06 D7 03 0A EE 02 2C 02 1B 0A 2C 00 00 00 00 00 00 24 01 1D DC 05 00 00 2C 0A 1D C4 09 00 00 2C 05 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 0F 1D 64 19 00 00 2C 19 2C 10 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 14 1D 20 03 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 16 1D 40 06 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 11 1D 98 08 00 00 2C 0A 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 19 1D 60 09 00 00 2C 1E 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D B8 0B 00 00 2C 28 1D 54 0B 00 00 2C 2A 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 3C 1D C4 09 00 00 2C 2D 2C 19 16 06 D7 03 0A D4 03 2C 03 1B 0A 2C 00 00 00 00 00 00 24 01 1D DC 05 00 00 2C 0A 1D C4 09 00 00 2C 05 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 0F 1D 64 19 00 00 2C 19 2C 10 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 14 1D 20 03 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 16 1D 40 06 00 00 2C 02 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 11 1D 98 08 00 00 2C 0D 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 19 1D 60 09 00 00 2C 24 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D B8 0B 00 00 2C 28 1D 54 0B 00 00 2C 34 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 41 1D C4 09 00 00 2C 34 2C 19
To:
24 01 1D DC 05 00 00 2C 0A 1D DC 05 00 00 2C 00 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 0D 1D B8 0B 00 00 2C 00 2C 10 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 23 1D DC 05 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 28 1D 34 08 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 14 1D 84 1C 00 00 2C 00 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 0F 1D 10 27 00 00 2C 00 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D 40 06 00 00 2C 0A 1D 98 3A 00 00 2C 00 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 1E 1D EC 13 00 00 2C 00 2C 19 16 06 D7 03 0A 09 02 26 1B 0A 2C 00 00 00 00 00 00 24 01 1D DC 05 00 00 2C 0A 1D DC 05 00 00 2C 00 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 0D 1D B8 0B 00 00 2C 00 2C 10 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 23 1D DC 05 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 28 1D 34 08 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 14 1D 84 1C 00 00 2C 00 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 0F 1D 10 27 00 00 2C 00 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D 40 06 00 00 2C 0A 1D 98 3A 00 00 2C 00 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 1E 1D EC 13 00 00 2C 00 2C 19 16 06 D7 03 0A EE 02 2C 02 1B 0A 2C 00 00 00 00 00 00 24 01 1D DC 05 00 00 2C 0A 1D DC 05 00 00 2C 00 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 0D 1D B8 0B 00 00 2C 00 2C 10 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 23 1D DC 05 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 28 1D 34 08 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 14 1D 84 1C 00 00 2C 00 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 0F 1D 10 27 00 00 2C 00 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D 40 06 00 00 2C 0A 1D 98 3A 00 00 2C 00 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 1E 1D EC 13 00 00 2C 00 2C 19 16 06 D7 03 0A D4 03 2C 03 1B 0A 2C 00 00 00 00 00 00 24 01 1D DC 05 00 00 2C 0A 1D DC 05 00 00 2C 00 25 16 1B 0A 2C 00 00 00 00 00 00 24 03 1D AC 0D 00 00 2C 0D 1D B8 0B 00 00 2C 00 2C 10 16 1B 0A 2C 00 00 00 00 00 00 24 04 1D DC 05 00 00 2C 23 1D DC 05 00 00 25 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 05 1D 08 07 00 00 2C 28 1D 34 08 00 00 2C 00 2C 07 16 1B 0A 2C 00 00 00 00 00 00 24 06 1D D0 07 00 00 2C 14 1D 84 1C 00 00 2C 00 2C 03 16 1B 0A 2C 00 00 00 00 00 00 24 07 1D C4 09 00 00 2C 0F 1D 10 27 00 00 2C 00 2C 04 16 1B 0A 2C 00 00 00 00 00 00 24 08 1D 40 06 00 00 2C 0A 1D 98 3A 00 00 2C 00 2C 14 16 1B 0A 2C 00 00 00 00 00 00 24 09 1D AC 0D 00 00 2C 1E 1D EC 13 00 00 2C 00 2C 19

 

 

 

 

 

=======================================================
=== Info about aircraft
=======================================================

XCOM and alien ship types

ID      Ship Type       Size            Operator        Default Weaponry

1       Interceptor     Small           XCOM            Avalanche Missiles
3       Firestorm       Small           XCOM            Avalanche Missiles
2       Skyranger       Small           XCOM            None
4       Small Scout     Small           Aliens          UFO Plasma Cannon I
5       Large Scout     Medium          Aliens          UFO Plasma Cannon I
6       Abductor        Large           Aliens          UFO Plasma Cannon II
7       Supply Barge    Large           Aliens          UFO Plasma Cannon II
8       Battleship      Very Large      Aliens          UFO Fusion Lance
9       Overseer        Medium          Aliens          UFO Plasma Cannon II and I

 

 

 

 

 

==== XGItemTree ====

>>>> function BuildShipWeapons()

Changed:

case 0:
BuildShipWeapon(1, -1, 85, 1.00, 350, 11, 95);
BuildShipWeapon(3, 3, 100, 2.00, 400, 0, 70);
BuildShipWeapon(4, -1, 85, 0.75, 400, 25, 85);
BuildShipWeapon(5, 10, 100, 1.25, 800, 48, 85);
BuildShipWeapon(6, -1, 85, 1.25, 1200, 44, 100);
BuildShipWeapon(7, 10, 100, 1.50, 1400, 44, 90);
BuildShipWeapon(8, -1, 101, 1.25, 300, 0, 75);
BuildShipWeapon(9, -1, 101, 1.25, 400, 20, 75);
BuildShipWeapon(10, -1, 101, 1.25, 1200, 50, 75);
// End:0x4d0
break;
// End:0x281
case 1:
BuildShipWeapon(1, -1, 85, 1.00, 350, 11, 95);
BuildShipWeapon(3, 3, 100, 2.00, 400, 0, 70);
BuildShipWeapon(4, -1, 85, 0.75, 400, 25, 85);
BuildShipWeapon(5, 10, 100, 1.25, 800, 48, 85);
BuildShipWeapon(6, -1, 85, 1.25, 1200, 44, 100);
BuildShipWeapon(7, 10, 100, 1.50, 1400, 44, 90);
BuildShipWeapon(8, -1, 101, 1.25, 300, 0, 75);
BuildShipWeapon(9, -1, 101, 1.25, 400, 20, 75);
BuildShipWeapon(10, -1, 101, 1.25, 1200, 50, 75);
// End:0x4d0
break;
// End:0x3a7
case 2:
BuildShipWeapon(1, -1, 85, 1.00, 350, 6, 95);
BuildShipWeapon(3, 3, 100, 2.00, 400, 0, 70);
BuildShipWeapon(4, -1, 85, 0.75, 400, 25, 85);
BuildShipWeapon(5, 10, 100, 1.25, 700, 33, 85);
BuildShipWeapon(6, -1, 85, 1.25, 1200, 44, 100);
BuildShipWeapon(7, 10, 100, 1.50, 1400, 44, 90);
BuildShipWeapon(8, -1, 101, 1.25, 300, 0, 75);
BuildShipWeapon(9, -1, 101, 1.25, 400, 20, 75);
BuildShipWeapon(10, -1, 101, 1.25, 1250, 50, 75);
// End:0x4d0
break;
// End:0x4cd
case 3:
BuildShipWeapon(1, -1, 85, 1.00, 350, 6, 95);
BuildShipWeapon(3, 3, 100, 2.00, 400, 0, 70);
BuildShipWeapon(4, -1, 85, 0.75, 400, 28, 85);
BuildShipWeapon(5, 10, 100, 1.25, 700, 33, 85);
BuildShipWeapon(6, -1, 85, 1.25, 1200, 44, 100);
BuildShipWeapon(7, 10, 100, 1.50, 1400, 44, 90);
BuildShipWeapon(8, -1, 101, 1.25, 300, 0, 75);
BuildShipWeapon(9, -1, 101, 1.25, 500, 20, 75);
BuildShipWeapon(10, -1, 101, 1.25, 1625, 50, 75);
// End:0x4d0


To:

In all 4 blocks...
BuildShipWeapon(1, -1, 85, 0.50, 117, 0, 85);
BuildShipWeapon(3, 3, 100, 2.00, 300, 0, 70);
BuildShipWeapon(4, -1, 85, 0.12, 45, 0, 95);
BuildShipWeapon(5, 10, 100, 2.00, 650, 0, 85);
BuildShipWeapon(6, -1, 85, 1.00, 1000, 0, 95);
BuildShipWeapon(7, 10, 100, 2.90, 4000, 0, 90);
BuildShipWeapon(8, -1, 101, 1.50, 200, 0, 85);
BuildShipWeapon(9, -1, 101, 1.75, 300, 0, 75);
BuildShipWeapon(10, -1, 101, 2.30, 700, 0, 50);


Overhauled aircraft weapons stats.

The numbers mean the following:

- ID of aircraft weapon.

- Ammo. I don't know what it does.

- Range. How far the weapon can fire during combat.

- Rate of fire. Delay in seconds before the weapon will fire.

- Damage amount. Example: if the weapon does 100 damage and the target has 200 HP and no armor, then two hits will take down the target.

- Armor penetration. I never tested how it applies, but I assume it will increase the damage done to targets who have armor, in some way. I simply removed all armor related stats because I don't see the point of it. I think it makes things unnecessarily complicated.

- Chance to hit in percentage. 

HEX Hint:
Change:
24 01 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D 5E 01 00 00 2C 0B 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 90 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 00 00 40 3F 1D 90 01 00 00 2C 19 2C 55 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 A0 3F 1D 20 03 00 00 2C 30 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 A0 3F 1D B0 04 00 00 2C 2C 2C 64 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 00 00 C0 3F 1D 78 05 00 00 2C 2C 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 2C 01 00 00 25 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 90 01 00 00 2C 14 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D B0 04 00 00 2C 32 2C 4B 16 06 D0 04 0A 81 02 26 1B 92 04 00 00 00 00 00 00 24 01 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D 5E 01 00 00 2C 0B 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 90 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 00 00 40 3F 1D 90 01 00 00 2C 19 2C 55 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 A0 3F 1D 20 03 00 00 2C 30 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 A0 3F 1D B0 04 00 00 2C 2C 2C 64 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 00 00 C0 3F 1D 78 05 00 00 2C 2C 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 2C 01 00 00 25 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 90 01 00 00 2C 14 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D B0 04 00 00 2C 32 2C 4B 16 06 D0 04 0A A7 03 2C 02 1B 92 04 00 00 00 00 00 00 24 01 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D 5E 01 00 00 2C 06 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 90 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 00 00 40 3F 1D 90 01 00 00 2C 19 2C 55 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 A0 3F 1D BC 02 00 00 2C 21 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 A0 3F 1D B0 04 00 00 2C 2C 2C 64 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 00 00 C0 3F 1D 78 05 00 00 2C 2C 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 2C 01 00 00 25 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 90 01 00 00 2C 14 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D E2 04 00 00 2C 32 2C 4B 16 06 D0 04 0A CD 04 2C 03 1B 92 04 00 00 00 00 00 00 24 01 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D 5E 01 00 00 2C 06 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 90 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 00 00 40 3F 1D 90 01 00 00 2C 1C 2C 55 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 A0 3F 1D BC 02 00 00 2C 21 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 A0 3F 1D B0 04 00 00 2C 2C 2C 64 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 00 00 C0 3F 1D 78 05 00 00 2C 2C 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 2C 01 00 00 25 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D F4 01 00 00 2C 14 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 00 00 A0 3F 1D 59 06 00 00 2C 32 2C 4B
To:
24 01 1D FF FF FF FF 2C 55 1E 00 00 00 3F 1D 75 00 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 2C 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 8f c2 f5 3D 1D 2D 00 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 00 40 1D 8A 02 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D E8 03 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 9A 99 39 40 1D A0 0F 00 00 2C 00 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 C0 3F 1D C8 00 00 00 25 2C 55 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 E0 3F 1D 2C 01 00 00 2C 00 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 33 33 13 40 1D BC 02 00 00 2C 00 2C 32 16 06 D0 04 0A 81 02 26 1B 92 04 00 00 00 00 00 00 24 01 1D FF FF FF FF 2C 55 1E 00 00 00 3F 1D 75 00 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 2C 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 8f c2 f5 3D 1D 2D 00 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 00 40 1D 8A 02 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D E8 03 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 9A 99 39 40 1D A0 0F 00 00 2C 00 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 C0 3F 1D C8 00 00 00 25 2C 55 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 E0 3F 1D 2C 01 00 00 2C 00 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 33 33 13 40 1D BC 02 00 00 2C 00 2C 32 16 06 D0 04 0A A7 03 2C 02 1B 92 04 00 00 00 00 00 00 24 01 1D FF FF FF FF 2C 55 1E 00 00 00 3F 1D 75 00 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 2C 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 8f c2 f5 3D 1D 2D 00 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 00 40 1D 8A 02 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D E8 03 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 9A 99 39 40 1D A0 0F 00 00 2C 00 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 C0 3F 1D C8 00 00 00 25 2C 55 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 E0 3F 1D 2C 01 00 00 2C 00 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 33 33 13 40 1D BC 02 00 00 2C 00 2C 32 16 06 D0 04 0A CD 04 2C 03 1B 92 04 00 00 00 00 00 00 24 01 1D FF FF FF FF 2C 55 1E 00 00 00 3F 1D 75 00 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 03 2C 03 2C 64 1E 00 00 00 40 1D 2C 01 00 00 25 2C 46 16 1B 92 04 00 00 00 00 00 00 24 04 1D FF FF FF FF 2C 55 1E 8f c2 f5 3D 1D 2D 00 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 05 2C 0A 2C 64 1E 00 00 00 40 1D 8A 02 00 00 2C 00 2C 55 16 1B 92 04 00 00 00 00 00 00 24 06 1D FF FF FF FF 2C 55 1E 00 00 80 3F 1D E8 03 00 00 2C 00 2C 5F 16 1B 92 04 00 00 00 00 00 00 24 07 2C 0A 2C 64 1E 9A 99 39 40 1D A0 0F 00 00 2C 00 2C 5A 16 1B 92 04 00 00 00 00 00 00 24 08 1D FF FF FF FF 2C 65 1E 00 00 C0 3F 1D C8 00 00 00 25 2C 55 16 1B 92 04 00 00 00 00 00 00 24 09 1D FF FF FF FF 2C 65 1E 00 00 E0 3F 1D 2C 01 00 00 2C 00 2C 4B 16 1B 92 04 00 00 00 00 00 00 24 0A 1D FF FF FF FF 2C 65 1E 33 33 13 40 1D BC 02 00 00 2C 00 2C 32

 

 

 

 

 

=======================================================
=== Info about aircraft weapons
=======================================================

ID		Weapon Type			Operator

1		Phoenix Cannon			XCOM
3		Avalanche Missile		XCOM
4		Laser Cannon			XCOM
5		Plasma Cannon			XCOM
6		EMP Cannon			XCOM
7		Fusion Lance			XCOM
8		UFO Plasma Cannon I		Aliens
9		UFO Plasma Cannon II		Aliens
10		UFO Fusion Lance		Aliens

 

 

 

 

 

==== XGFacility_Barracks ====

>>>> function DetermineTimeOut

Changed:

kSoldier.m_iTurnsOut += 24 * iBaseTimeOut + Rand(iRandTimeOut);


To:

kSoldier.m_iTurnsOut += 48 * iBaseTimeOut + Rand(iRandTimeOut);


This makes it so gravely wounded soldiers (who end a mission with less than half of their own HP) will get a higher recovery time penalty.
In this case, their recovery time penalty is roughly 3 times longer compared to soldiers with normal injuries.

HEX Hint:
Change:
00 25 16 2C 02 16 16 A1 19 00 4D 28 00 00 09 00 E8 44 00 00 00 01 E8 44 00 00 90 2C 18
To:
00 25 16 2C 02 16 16 A1 19 00 4D 28 00 00 09 00 E8 44 00 00 00 01 E8 44 00 00 90 2C 30

Edited by BlackAlpha
Link to comment
Share on other sites

This makes it so dead bodies stay for a much longer time. I've no idea what the numbers actually mean. First I thought it was seconds, but bodies in vanilla disappear like after 30 seconds, so I don't know. Setting it really high does the trick, though!

 

Props to Bokauk for figuring this out.

You were right, the value is the number of seconds until the game will attempt to clear the corpse. However, if the corpse is currently near/in view of the camera, it will not be cleared. That's why you never see a corpse disappear when it's in view. When you scroll the camera away then go back, the corpse is magically gone :)

 

So 7200 would mean the corpse would disappear only after it has been off of the screen for two hours :)

 

For those that want to mod this without delving into the hex, I've created an easy to configure mod with this feature :)

XCOM: ToolBoks

 

 

what i want to do is to change the +1 to a higher value, so your soldier could level up, based on kills wihtout the 1 rank per mission limition ( a rockie could become a sargent in one mission)

 

From glancing at that code, it looks like the +1 you refer to just means, "how much XP is required for MyCurrentRank + 1 (next rank)", not by how many ranks you can be promoted in one mission.

 

If there is such limitation (and I suspect there is), then I like your idea though :)

 

Daemonjax wrote a tutorial on an example mod which might help you get started :)

 

thanksfor the link

 

and there is a limitation I did a mission with one soldier 12 kills (sectoids) and he only got a squddie rank while a sniper with the same amouts of kills but with more missions is a sargent

This opens up another question: How does the game manage Exp overflow? Lets say that soldier (12kills squaddie) kills another alien at the next mission, does his exp start floored to 0, or limited to "nextrank-1"? Like a "ReadyToNext=1" variable acting as a flag or controller to oversee that? Think of it as "if that variable it's 0, he does not level up", and the flag resets at mission start. Would've been smart to do that.

 

I would think that there is a controller (to limit 1 level up per mission) and an overflow manager (so you dont need to kill the X aliens needed to level up from rank to rank+1 at one mission, and losing all progress between missions).

 

Perhaps that squaddie could have an overflow that helps him "rocket up" between ranks (as long as he is in a mission and gets 1 kill, the overflow buffer feeds the exp counter, so he levels up oncer per mission until depleting the overflow). Could help explain how did a no-kill soldier level'd up at one point in my C/I run.

Edited by osito2dancer
Link to comment
Share on other sites

======================

XComStrategyGame.upk:

======================

 

 

==== XGMissionControlUI ====

>>>> function UpdateView()

Changed:

if(GEOSCAPE().m_bUFOIgnored)
{
Narrative(xcomnarrativemoment'MCUFOIgnored');
GEOSCAPE().m_bUFOIgnored = false;
}


To:

if(GEOSCAPE().m_bUFOIgnored)
{
Narrative(xcomnarrativemoment'RoboHQ_ContactLost');
GEOSCAPE().m_bUFOIgnored = false;
}


This makes it so Bradford won't complain when you ignore UFOs. Instead, you hear the robot lady say "contact lost".

HEX Hint:
Change:
00 00 2D 01 9C 2F 00 00 1B 73 1F 00 00 00 00 00 00 20 AF
To:
00 00 2D 01 9C 2F 00 00 1B 73 1F 00 00 00 00 00 00 20 C6

 

 

 

 

 

==== XGStrategyAI ====

>>>> function AddHuntTarget

Changed:

if(Game().GetDifficulty() <= 1)
{
iMonthCutoff = 3;
}

if(Game().GetDifficulty() == 2)
{
iMonthCutoff = 2;
}

if(GetMonth() >= iMonthCutoff)
{
eHunter = 8;
}
// End:0xc1
else
{
eHunter = 5;
}


To:

if(Game().GetDifficulty() <= 1)
{
iMonthCutoff = 1;
}

if(Game().GetDifficulty() >= 2)
{
iMonthCutoff = 1;
}

if(GetMonth() >= iMonthCutoff)
{
eHunter = 5;
}
// End:0xc1
else
{
eHunter = 4;
}



This makes it so for all difficulty levels, the first month, small scouts will take on the role of satellite hunters. After the first month, large scouts will take on the role of satellite hunters.

HEX Hint:
Change:
03 06 8E 00 07 83 00 9A 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 2C 02 16 0F 00 5A 42 00 00 2C 02 06 8E 00 0F 00 5A 42 00 00 26 07 B5 00 99 1B 9D 0F 00 00 00 00 00 00 16 00 5A 42 00 00 16 0F 00 5B 42 00 00 24 08 06 C1 00 0F 00 5B 42 00 00 24 05
To:
01 06 8E 00 07 83 00 99 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 2C 02 16 0F 00 5A 42 00 00 2C 01 06 8E 00 0F 00 5A 42 00 00 26 07 B5 00 99 1B 9D 0F 00 00 00 00 00 00 16 00 5A 42 00 00 16 0F 00 5B 42 00 00 24 05 06 C1 00 0F 00 5B 42 00 00 24 04

Edited by BlackAlpha
Link to comment
Share on other sites

What sort of difficulty do the large scouts present with that stat line?

 

UpdateShip(5, 1800, 40, 3600, 0, 7);

 

I'm using

 

UpdateShip(5, 3200, 35, 1600, 2, 7);

 

and they're still a little too easy, but they do leave interceptors beat up for a while ...

 

I'd like to make the large scouts less vulnerable to Phoenix Cannon (a possible kill, but not a sure thing), and really only sure kills at Laser Cannon or above.

 

FWIW, I'm using the following for small scouts and it works pretty well:

 

UpdateShip(4, 3500, 40, 800, 0, 7);

 

So far, this gives an interceptor 3 shots with the Avalanche before it escapes, and it has to hit with two of them to shoot it down. Second interceptor launched is unable to catch it, so you only get one chance. Phoenix Cannon seems to be nearly automatic kill.

Edited by johnnylump
Link to comment
Share on other sites

What sort of difficulty do the large scouts present with that stat line?

 

UpdateShip(5, 1800, 40, 3600, 0, 7);

 

I'm using

 

UpdateShip(5, 3200, 35, 1600, 2, 7);

 

and they're still a little too easy, but they do leave interceptors beat up for a while ...

 

I'd like to make the large scouts less vulnerable to Phoenix Cannon (a possible kill, but not a sure thing), and really only sure kills at Laser Cannon or above.

 

FWIW, I'm using the following for small scouts and it works pretty well:

 

UpdateShip(4, 3500, 40, 800, 0, 7);

 

So far, this gives an interceptor 3 shots with the Avalanche before it escapes, and it has to hit with two of them to shoot it down. Second interceptor launched is unable to catch it, so you only get one chance. Phoenix Cannon seems to be nearly automatic kill.

 

Note that I also changed the aircraft weapons.

 

I made it so Large Scouts and Abductors can only be shot down with multiple Interceptors wielding Fusion/Plasma/EMP.

Edited by BlackAlpha
Link to comment
Share on other sites

BTW, it looks like armor and armor penetration are handled in XCOMStrategyGame.XGInterceptionEngagement, function GetDamage Mitigation.

 

function float GetDamageMitigation(TShipWeapon SHIPWEAPON, CombatExchange comExchange)

{

local float firingShipArmorPen, firingWeaponArmorPen, targetShipArmor, armorMitigation, Defense, Offense,

finalMitigation;

 

armorMitigation = 0.05;

targetShipArmor = float(GetShip(comExchange.iTargetShip).m_kTShip.iArmor);

firingShipArmorPen = float(GetShip(comExchange.iSourceShip).m_kTShip.iAP);

firingWeaponArmorPen = float(SHIPWEAPON.iAP);

Offense = firingWeaponArmorPen + firingShipArmorPen;

Defense = targetShipArmor;

finalMitigation = FClamp(armorMitigation * Defense - Offense, 0.00, 0.95);

return finalMitigation;

}

 

So the formula is 0.05 * (target armor rating - weapon armor piercing rating - ship armor piercing rating), limited to the range of 0 to .95. Then the damage from a weapon hit is reduced by that percentage. This solves what the mystery AP column on ships is -- it's an offensive capability that is additive with the weapon's armor penetration capabilities.

Edited by johnnylump
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...