Jump to content

Change the time an enemy class appears for the first time.


Leeira

Recommended Posts

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 months
XGStrategyAI.GetPossibleAliens
March and April aliens use bit code that can't be edited cleanly
41 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

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 4
Floater 5
Thinman 6
Muton 7
Cyberdisc 8 ; spawns with Drones
Sectoid Commander: 9
heavy Floater 10
Elite Muton 11
Etheral 12 ; spawns with Elite Mutons
Chrysalid 13
Zombie 14
Berserker 15 ; spawns with Mutons
Sectopod 16 ; spawns with Drones
Drone 17
Outsider 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 by kara42
Link to comment
Share on other sites

  • Recently Browsing   0 members

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