Leeira Posted June 14, 2013 Share Posted June 14, 2013 Hello, I'm wondering if there is a way to change the date when enemy classes (like Mutons, Elite-Mutons, Cyberdisks and so on) first appear? Link to comment Share on other sites More sharing options...
kara42 Posted June 14, 2013 Share Posted June 14, 2013 You can change the months where new alien appears relatively easily (from http://forums.nexusmods.com/index.php?/topic/880418-long-war-upk-changes/ ) Slow alien progression by monthsXGStrategyAI.GetPossibleAliensMarch and April aliens use bit code that can't be edited cleanly41 44 00 00 2c 02: May Aliens (Mutons)41 44 00 00 2c 03: June Aliens (Cyberdisc, tougher Mutons)41 44 00 00 2c 04: July Aliens (Muton Berserkers)41 44 00 00 2c 05: August Aliens (Heavy Floaters)41 44 00 00 2c 06: September aliens (Muton Elite?)Else statement handles rest (Sectopod?) You can change the last number in each line, both increase or decrease works. e.g. changing the 02 in the first line to a 03 would make Mutons appear in June not May. Link to comment Share on other sites More sharing options...
kara42 Posted June 15, 2013 Share Posted June 15, 2013 (edited) If you want to change more then that like the composition of alien forces at a given time in general, you need to dig into the xgstrategygame.upk and get youself familiar with hex valie editing before that: http://wiki.tesnexus.com/index.php/Hex_editing_UPK_files#Introduction Here is the list of alien ID numbers i made for myself: Sectoid 4Floater 5Thinman 6Muton 7Cyberdisc 8 ; spawns with DronesSectoid Commander: 9heavy Floater 10Elite Muton 11Etheral 12 ; spawns with Elite MutonsChrysalid 13Zombie 14Berserker 15 ; spawns with MutonsSectopod 16 ; spawns with DronesDrone 17Outsider 18 and here is the decompiled codes for alien composition by month: XGStrategyAI.GetPossible.Aliens: function TPossibleAlienSquad GetPossibleAliens(){ local int iMonth; local TPossibleAlienSquad kSquad; iMonth = GetMonth(); AddPossible(GetCommanderType(), 100, kSquad.arrPossibleCommanders); // End:0xDA if(iMonth <= 0) { AddPossible(4, 100, kSquad.arrPossibleSoldiers); AddPossible(13, 100, kSquad.arrPossibleSecondaries); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { // End:0x1C4 if(iMonth <= 1) { AddPossible(6, 50, kSquad.arrPossibleSoldiers); AddPossible(4, 100, kSquad.arrPossibleSoldiers); AddPossible(5, 100, kSquad.arrPossibleSoldiers, 3); AddPossible(13, 100, kSquad.arrPossibleSecondaries); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { // End:0x305 if(iMonth <= 1) { AddPossible(4, 25, kSquad.arrPossibleSoldiers); AddPossible(6, 50, kSquad.arrPossibleSoldiers); AddPossible(7, 50, kSquad.arrPossibleSoldiers, 2); AddPossible(5, 100, kSquad.arrPossibleSoldiers); AddPossible(5, 50, kSquad.arrPossibleSecondaries); AddPossible(13, 100, kSquad.arrPossibleSecondaries); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { // End:0x49B if(iMonth <= 2) { AddPossible(4, 25, kSquad.arrPossibleSoldiers); AddPossible(5, 50, kSquad.arrPossibleSoldiers); AddPossible(6, 25, kSquad.arrPossibleSoldiers); AddPossible(8, 50, kSquad.arrPossibleSoldiers, 1); AddPossible(7, 100, kSquad.arrPossibleSoldiers); AddPossible(5, 25, kSquad.arrPossibleSecondaries); AddPossible(8, 50, kSquad.arrPossibleSecondaries); AddPossible(13, 100, kSquad.arrPossibleSecondaries); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { // End:0x687 if(iMonth <= 3) { AddPossible(4, 10, kSquad.arrPossibleSoldiers); AddPossible(5, 10, kSquad.arrPossibleSoldiers); AddPossible(6, 10, kSquad.arrPossibleSoldiers); AddPossible(8, 25, kSquad.arrPossibleSoldiers); AddPossible(7, 75, kSquad.arrPossibleSoldiers); AddPossible(15, 100, kSquad.arrPossibleSoldiers, 1); AddPossible(5, 10, kSquad.arrPossibleSecondaries); AddPossible(8, 25, kSquad.arrPossibleSecondaries); AddPossible(13, 35, kSquad.arrPossibleSecondaries); AddPossible(15, 100, kSquad.arrPossibleSecondaries); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { // End:0x8CA if(iMonth <= 4) { AddPossible(4, 10, kSquad.arrPossibleSoldiers); AddPossible(5, 10, kSquad.arrPossibleSoldiers); AddPossible(6, 10, kSquad.arrPossibleSoldiers); AddPossible(7, 25, kSquad.arrPossibleSoldiers); AddPossible(8, 25, kSquad.arrPossibleSoldiers); AddPossible(15, 100, kSquad.arrPossibleSoldiers); AddPossible(10, 100, kSquad.arrPossibleSoldiers, 2); AddPossible(5, 10, kSquad.arrPossibleSecondaries); AddPossible(8, 25, kSquad.arrPossibleSecondaries); AddPossible(13, 35, kSquad.arrPossibleSecondaries); AddPossible(15, 100, kSquad.arrPossibleSecondaries); AddPossible(10, 100, kSquad.arrPossibleSecondaries); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { // End:0xB63 if(iMonth <= 5) { AddPossible(4, 10, kSquad.arrPossibleSoldiers); AddPossible(5, 10, kSquad.arrPossibleSoldiers); AddPossible(6, 10, kSquad.arrPossibleSoldiers); AddPossible(7, 25, kSquad.arrPossibleSoldiers); AddPossible(8, 25, kSquad.arrPossibleSoldiers); AddPossible(15, 50, kSquad.arrPossibleSoldiers); AddPossible(10, 50, kSquad.arrPossibleSoldiers); AddPossible(11, 100, kSquad.arrPossibleSoldiers, 2); AddPossible(5, 10, kSquad.arrPossibleSecondaries); AddPossible(8, 25, kSquad.arrPossibleSecondaries); AddPossible(15, 25, kSquad.arrPossibleSecondaries); AddPossible(10, 25, kSquad.arrPossibleSecondaries); AddPossible(13, 35, kSquad.arrPossibleSecondaries); AddPossible(16, 100, kSquad.arrPossibleSecondaries, 1); AddPossible(17, 100, kSquad.arrPossibleRoaming); } // End:0xDEA else { AddPossible(4, 10, kSquad.arrPossibleSoldiers); AddPossible(5, 10, kSquad.arrPossibleSoldiers); AddPossible(6, 10, kSquad.arrPossibleSoldiers); AddPossible(7, 25, kSquad.arrPossibleSoldiers); AddPossible(8, 25, kSquad.arrPossibleSoldiers); AddPossible(15, 50, kSquad.arrPossibleSoldiers); AddPossible(10, 50, kSquad.arrPossibleSoldiers); AddPossible(11, 100, kSquad.arrPossibleSoldiers, 3); AddPossible(5, 10, kSquad.arrPossibleSecondaries); AddPossible(8, 25, kSquad.arrPossibleSecondaries); AddPossible(15, 25, kSquad.arrPossibleSecondaries); AddPossible(10, 25, kSquad.arrPossibleSecondaries); AddPossible(13, 35, kSquad.arrPossibleSecondaries); AddPossible(16, 100, kSquad.arrPossibleSecondaries, 2); AddPossible(17, 100, kSquad.arrPossibleRoaming); } } } } } } } NormalizeValues(kSquad.arrPossibleCommanders); NormalizeValues(kSquad.arrPossibleSoldiers); NormalizeValues(kSquad.arrPossibleSecondaries); NormalizeValues(kSquad.arrPossibleRoaming); return kSquad; //return ReturnValue; } The first number in each Addpossible line is the alien ID and the second is the relative probability weighting, e.g. within a section an alien with 50 probability is half as likely to appear as one with 100 (i think). Also note that the month is different for marathon sw option: formula: iMonth = (iMonth + 1) / 2 (I think) in practise this should mean that an even month is always half its value (e.g. 6 + 1 = 7 divided by 2 is 3.5 but it gets truncated to 3) while an uneven month is half its value rounded up (e.g. (7 + 1 = :cool: / 2 = 4) Edited June 15, 2013 by kara42 Link to comment Share on other sites More sharing options...
Recommended Posts