FlyingHigh10000000 Posted December 9, 2012 Share Posted December 9, 2012 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 More sharing options...
Drakous79 Posted December 9, 2012 Share Posted December 9, 2012 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 More sharing options...
FlyingHigh10000000 Posted December 9, 2012 Share Posted December 9, 2012 That's really helpful, thanks. Doesn't seem quite as daunting now. :) Link to comment Share on other sites More sharing options...
BlackAlpha Posted December 10, 2012 Author Share Posted December 10, 2012 (edited) ======================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 January 9, 2013 by BlackAlpha Link to comment Share on other sites More sharing options...
BlackAlpha Posted January 4, 2013 Author Share Posted January 4, 2013 (edited) 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 February 2, 2013 by BlackAlpha Link to comment Share on other sites More sharing options...
osito2dancer Posted January 4, 2013 Share Posted January 4, 2013 (edited) 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 sargentThis 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 January 4, 2013 by osito2dancer Link to comment Share on other sites More sharing options...
BlackAlpha Posted January 5, 2013 Author Share Posted January 5, 2013 (edited) ======================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 February 2, 2013 by BlackAlpha Link to comment Share on other sites More sharing options...
johnnylump Posted January 6, 2013 Share Posted January 6, 2013 (edited) 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 January 6, 2013 by johnnylump Link to comment Share on other sites More sharing options...
BlackAlpha Posted January 7, 2013 Author Share Posted January 7, 2013 (edited) 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 January 7, 2013 by BlackAlpha Link to comment Share on other sites More sharing options...
johnnylump Posted January 10, 2013 Share Posted January 10, 2013 (edited) 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 January 10, 2013 by johnnylump Link to comment Share on other sites More sharing options...
Recommended Posts