Change
This:
function ChooseSquadForNewMission(XGMission kMission, XGShip_Dropship kSkyranger, optional bool bNewGame)
{
local XGStrategySoldier kSoldier, kAdded;
bNewGame = false;
// End:0xAA
if(kMission.m_iMissionType == 8)
{
// End:0xA9
foreach m_arrSoldiers(kSoldier,)
{
// End:0xA8
if(kSoldier.m_kSoldier.iPsiRank == 4)
{
kAdded = kSoldier;
LoadSoldier(kSoldier, kSkyranger);
}
}
}
// End:0x11E
foreach m_aLastMissionSoldiers(kSoldier,)
{
// End:0xDC
if(kSoldier == kAdded)
{
continue;
}
LoadSoldier(kSoldier, kSkyranger);
// End:0x11D
if(kSkyranger.IsFull())
{
return;
}
}
// End:0x193
foreach m_arrSoldiers(kSoldier,)
{
// End:0x151
if(kSoldier == kAdded)
{
continue;
}
LoadSoldier(kSoldier, kSkyranger);
// End:0x192
if(kSkyranger.IsFull())
{
return;
}
}
//return;
}
To this:
function ChooseSquadForNewMission(XGMission kMission, XGShip_Dropship kSkyranger, optional bool bNewGame)
{
local XGStrategySoldier kSoldier, kAdded;
bNewGame = false;
// End:0xAA
if(kMission.m_iMissionType == 8)
{
// End:0xA9
foreach m_arrSoldiers(kSoldier,)
{
// End:0xA8
if(kSoldier.m_kSoldier.iPsiRank == 4)
{
kAdded = kSoldier;
LoadSoldier(kSoldier, kSkyranger);
}
}
}
// End:0x148
foreach m_arrSoldiers(kSoldier,)
{
// End:0xDC
if(kSoldier == kAdded)
{
continue;
}
// End:0x122
if(InStr(kSoldier.GetLastName(), "*") >= 0)
{
LoadSoldier(kSoldier, kSkyranger);
}
// End:0x147
if(kSkyranger.IsFull())
{
return;
}
}
//return;
}
And now player has full control of which soldiers are loaded into the SkyRanger by putting a * anywhere in the Last Name of Soldiers or Shivs.
Hex-code for this change: (XComStrategyGame.upk, Decimal offset: 2847433, unused 0B tokens for future updates: 51)
F5 27 00 00 AB 1F 00 00 00 00 00 00 F0 27 00 00 00 00 00 00 00 00 00 00 F5 27 00 00 00 00 00 00 A4 01 00 00 4B 2E 00 00 4C 01 00 00 1F 01 00 00 49 02 00 28 15 07 AA 00 9A 19 00 F5 27 00 00 09 00 35 37 00 00 00 01 35 37 00 00 2C 08 16 58 01 B1 27 00 00 00 F2 27 00 00 00 4A A9 00 07 A8 00 9A 35 75 FB FF FF 74 FA FF FF 00 00 19 00 F2 27 00 00 09 00 EC 44 00 00 00 01 EC 44 00 00 2C 04 16 0F 00 F1 27 00 00 00 F2 27 00 00 1B E0 16 00 00 00 00 00 00 00 F2 27 00 00 00 F4 27 00 00 16 31 30 58 01 B1 27 00 00 00 F2 27 00 00 00 4A 48 01 07 DC 00 72 00 F2 27 00 00 00 F1 27 00 00 16 31 06 48 01 07 22 01 99 7E 19 00 F2 27 00 00 0A 00 F1 44 00 00 00 1B 7C 0F 00 00 00 00 00 00 16 1F 2A 00 16 25 16 1B E0 16 00 00 00 00 00 00 00 F2 27 00 00 00 F4 27 00 00 16 07 47 01 19 00 F4 27 00 00 0A 00 E4 3D 00 00 00 1B 66 14 00 00 00 00 00 00 16 30 04 0B 31 30 04 0B 53 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 00 00 00 02 40 02 00 93 05 00 00 00 00 00 00
Next step is to modify the OrderedHigher-function to put soldiers with a * anywhere in the Last Name on top whenever the list of soldeirs is sorted (usually when wounded soldiers return to duty, after tactical missions, when new soldiers arrive and after PSI-training).
That way it should be easy for player to overview which soldiers are up for next mission, by simply looking at the top of the list in the barracks and make changes if so desired. To verify that selection really is the intended one the player can also remove a soldier from slot 0-4 during loadout and re-add him to see who is marked as on mission in the add soldier dialog that looks like barracks but really isn't).
Edit: The final step after that is to make it possible for player to change name of Shivs... If customize-button can't be unlocked in a reasonable way I will probably attempt to re-purpose the Dismante-tank button to put/remove * in Shivs name.
Edited by Bertilsson, 31 July 2013 - 09:23 pm.