Jump to content

Cybernetic Warfare Mod - ideas and planning


PepprmintButler

Recommended Posts

  • Replies 45
  • Created
  • Last Reply

Top Posters In This Topic

It won't be in Alpha though, it will come later on (because mechanics must come first, and also because I'm terrible at art/design so I'll probably need to get some help on the matter)

 

Yeah I figured that as well. Hopefully we could get a good tex modder to help out till then you're right about the gameplay > models thing hehe.

 

An update from me. I would love to script the first mission team to Power rangers - violet, pink, red, yellow and black armor tint But as we cannot script, I'm going to make them all pink!

 

Restricted customization... done

New soldiers with helmet and armor tint ... almost done, testing

Armor deco for new soldiers ... not working so far

 

Cool, at least that's one step up. Go modders!

Link to comment
Share on other sites

Okay, I'm done. Merry Christmas!

Wall of text inc! Maybe my longest one so far :smile:

http://i.imgur.com/8pShV.jpgStorm troopers squad flying to the first mission.

1. Customization - helmets only, nicknames and some options turned off

This works with all Hair Packages enabled and is tuned for Slingshot with Elite Soldier Pack. As it rely on indexes of prebuilt arrays, any missing DLC or hair package will screw it. And possibly new DLC as well. Good is it can be fine tuned to any version, just need to know new numbers. And in the end there can be more installation options provided.

I wish I could build my own array of hair with bIsHelmet=true or reverse bAllowHelmets when calling GetContentIds, but it's not easy atm, so I stick with indexes.

http://i.imgur.com/VLjtO.jpg

Restricting helmets for hair spinner in XComStrategyGame.upk, class XGCustomizeUI. I've used some dirty tricks to get the same size. Added + 0 as 2C 00 to keep it off NewIdx = NewIdx. Note numbers used are -2 of what we normally see on customization screen.

ORIGINAL

function AdvanceHair(int Dir)
{
local int CurIdx, NewIdx, NumHairs, NewHair;

NumHairs = m_kPawn.PossibleHairs.Length;
CurIdx = GetHairIndex();
NewIdx = CurIdx + Dir;
// End:0x84
if(NewIdx < -1)
{
NewIdx = NumHairs - 1;
}
// End:0xaa
if(NewIdx >= NumHairs)
{
NewIdx = -1;
}
NewHair = ((NewIdx > -1) ? m_kPawn.PossibleHairs[NewIdx] : -1);
m_kPawn.SetHair(NewHair);
m_kSoldier.m_kSoldier.kAppearance.iHaircut = NewHair;
m_kSoldier.m_kSoldier.kAppearance.iHairColor = m_kPawn.m_kAppearance.iHairColor;
UpdateView();
}
ALTERED part
NumHairs = m_kPawn.PossibleHairs.Length + 0; // space filler 2C 00
CurIdx = GetHairIndex();
NewIdx = CurIdx + Dir;
// End:0x7b
if(NewIdx < 17) // helmet 19
{
NewIdx = 25;
}
// End:0x97
if(NewIdx > 25) // helmet 27
{
NewIdx = 17;
}
NewIdx = NewIdx; // space filler
SF: 0F 00 16 25 00 00 36 19 01 BD 24 00 00 09 00 F1 FF FF FF 00 01 F1 FF FF FF 0F 00 18 25 00 00 1B 3E 0F 00 00 00 00 00 00 16 0F 00 17 25 00 00 92 00 18 25 00 00 00 19 25 00 00 16 07 84 00 96 00 17 25 00 00 1D FF FF FF FF 16 0F 00 17 25 00 00 93 00 16 25 00 00 26 16 07 AA 00 99 00 17 25 00 00 00 16 25 00 00 16 0F 00 17 25 00 00 1D FF FF FF FF 0F 00 15 25 00 00 45 97 00 17 25 00 00 1D FF FF FF FF 16 28 00 10 00 17 25 00 00 19 01 BD 24 00 00 09 00 F1 FF FF FF 00 01 F1 FF FF FF 05 00 1D FF FF FF FF 19 01 BD 24 00 00 13 00 00 00 00 00 00 1B C9 23 00 00 00 00 00 00 00 15 25 00 00 16
RW: 0F 00 16 25 00 00 92 36 19 01 BD 24 00 00 09 00 F1 FF FF FF 00 01 F1 FF FF FF 2C 00 16 0F 00 18 25 00 00 1B 3E 0F 00 00 00 00 00 00 16 0F 00 17 25 00 00 92 00 18 25 00 00 00 19 25 00 00 16 07 7B 00 96 00 17 25 00 00 2C 11 16 0F 00 17 25 00 00 2C 19 07 97 00 97 00 17 25 00 00 2C 19 16 0F 00 17 25 00 00 2C 11 0F 00 17 25 00 00 00 17 25 00 00 0F 00 15 25 00 00 45 97 00 17 25 00 00 1D FF FF FF FF 16 28 00 10 00 17 25 00 00 19 01 BD 24 00 00 09 00 F1 FF FF FF 00 01 F1 FF FF FF 05 00 1D FF FF FF FF 19 01 BD 24 00 00 13 00 00 00 00 00 00 1B C9 23 00 00 00 00 00 00 00 15 25 00 00 16

Turning options off and enabling nicknames for ranks below Sergeant in XComStrategyGame.upk, class XGCustomizeUI. It is pretty simple, kOption.iState = 0 means enabled, 1 disabled. Nickname was bugged (grey / disabled ), if I changed from rookie to sergeant and up. Noticed it before modding in retail game. To repair it, exit the customization and enter it again. And even the code looks ok, I've enabled nicknames for all ranks. If is the nickname left empty, it will be earned upon promotion to sarge.

ORIGINAL parts that got altered - swapping 25 with 26 and vice versa
function UpdateMainMenu()
{
...
kOption.strText = m_strNickNameButton;
kOption.iState = ((m_kSoldier.GetRank() >= 3) ? 0 : 1); // changed to 0:0
...
kOption.strText = m_strRaceSpinner;
kOption.strText = m_strHeadSpinner;
kOption.strText = m_strSkinColorSpinner;
kOption.strText = m_strHairColorSpinner;
kOption.iState = 0; // changed to 1
...
kOption.strText = m_strFacialHairSpinner;
kOption.iState = ((m_kPawn.m_kAppearance.iGender == 1) ? 0 : 1); // changed to 1:1
...
}
SF: 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 45 99 19 01 BE 24 00 00 0A 00 FB 44 00 00 00 1B 10 10 00 00 00 00 00 00 16 2C 03 16 01 00 25 01 00 26 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 50 25 00 00 0A 00 00 51 25 00 00 16 0F 35 A8 24 00 00 A9 24 00 00 00 01 01 C1 24 00 00 00 50 25 00 00 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E5 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 07 10 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E4 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 8D 10 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E2 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 43 0F 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E0 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 48 10 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 07 2E 04 7A 35 D9 F9 FF FF 68 FA FF FF 00 00 00 51 25 00 00 1F 30 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E1 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 3E 0F 00 00 00 00 00 00 16 2C 02 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 DF 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 3D 0F 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 DE 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 45 9A 35 B0 FB FF FF 7E FA FF FF 00 00 19 01 BD 24 00 00 09 00 C5 F9 FF FF 00 01 C5 F9 FF FF 26 16 01 00 25 01 00 26
RW: 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 45 99 19 01 BE 24 00 00 0A 00 FB 44 00 00 00 1B 10 10 00 00 00 00 00 00 16 2C 03 16 01 00 25 01 00 25 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 50 25 00 00 0A 00 00 51 25 00 00 16 0F 35 A8 24 00 00 A9 24 00 00 00 01 01 C1 24 00 00 00 50 25 00 00 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E5 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 26 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 07 10 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E4 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 8D 10 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E2 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 26 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 43 0F 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E0 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 26 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 48 10 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 07 2E 04 7A 35 D9 F9 FF FF 68 FA FF FF 00 00 00 51 25 00 00 1F 30 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 E1 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 25 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 3E 0F 00 00 00 00 00 00 16 2C 02 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 DF 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 26 0F 35 D9 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 70 1F 00 38 53 92 1B 3D 0F 00 00 00 00 00 00 16 26 16 16 55 35 C4 FF FF FF 69 FA FF FF 00 00 00 4F 25 00 00 0A 00 00 51 25 00 00 16 0F 35 D8 F9 FF FF 68 FA FF FF 00 01 00 51 25 00 00 01 DE 24 00 00 0F 35 54 FB FF FF 68 FA FF FF 00 01 00 51 25 00 00 45 9A 35 B0 FB FF FF 7E FA FF FF 00 00 19 01 BD 24 00 00 09 00 C5 F9 FF FF 00 01 C5 F9 FF FF 26 16 01 00 26 01 00 26

This one is obsolete and I haven't used it after disabling race spinner. But it always annoyed me, when I changed race and got helmet instead of hair, because of random hair selection. Can be tweaked in XComGame.upk, class XComHumanPawn by changing iHaircut line.

simulated function SetRace(XGTacticalGameCoreNativeBase.ECharacterRace Race)
{
m_kAppearance.iRace = Race;
FindPossibleCustomParts(Character);
m_kAppearance.iHead = PossibleHeads[Rand(PossibleHeads.Length)];
m_kAppearance.iHaircut = PossibleHairs[Rand(PossibleHairs.Length)]; // changed to m_kAppearance.iHead = PossibleHeads[Rand(PossibleHeads.Length)]
m_kAppearance.iSkinColor = -1;
SetAppearance(m_kAppearance);
}
SF: 0F 35 26 0E 00 00 27 0E 00 00 00 01 01 52 46 00 00 10 A7 36 01 42 46 00 00 16 01 42 46 00 00 0F 35 23 0E 00 00 27 0E 00 00 00 01 01 52 46 00 00 10 A7 36 01 41 46 00 00 16 01 41 46 00 00
RW: 0F 35 26 0E 00 00 27 0E 00 00 00 01 01 52 46 00 00 10 A7 36 01 42 46 00 00 16 01 42 46 00 00 0F 35 26 0E 00 00 27 0E 00 00 00 01 01 52 46 00 00 10 A7 36 01 42 46 00 00 16 01 42 46 00 00

2. Helmets for everybody! Especially for starting and hired soldiers. With new shiny armor tint!

This one is tricky. Helmets need to be added into an array and conditional loop clearing them off the array has to be disabled :smile: Lets start with adding helmets. Add true to all three GetContentIds calls. It's in XComGame.upk, class XGCharacterGenerator.

ORIGINAL part
noexport function TSoldier CreateTSoldier(optional XGTacticalGameCoreNativeBase.EGender eForceGender, optional int iCountry, optional int iRace)
{
XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetContentIdsForRace(6, byte(kSoldier.kAppearance.iRace), RaceHairs);
XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetContentIdsForGender(6, byte(kSoldier.kAppearance.iGender), GenderHairs);
XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetContentIdsForCharacter(6, 2, CharacterHairs);
ALTERED part - filling helmets to arrays. Last 4A to 27 means bAllowHelmets=true.
XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetContentIdsForRace(6, byte(kSoldier.kAppearance.iRace), RaceHairs, true);
SF: 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 48 00 00 00 00 00 00 1B B7 31 00 00 00 00 00 00 24 06 38 3D 35 24 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 00 59 A4 00 00 4A 4A 16
RW: 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 48 00 00 00 00 00 00 1B B7 31 00 00 00 00 00 00 24 06 38 3D 35 24 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 00 59 A4 00 00 4A 27 16
XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetContentIdsForGender(6, byte(kSoldier.kAppearance.iGender), GenderHairs, true);
SF: 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 48 00 00 00 00 00 00 1B B5 31 00 00 00 00 00 00 24 06 38 3D 35 25 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 00 5A A4 00 00 4A 4A 16
RW: 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 48 00 00 00 00 00 00 1B B5 31 00 00 00 00 00 00 24 06 38 3D 35 25 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 00 5A A4 00 00 4A 27 16
XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetContentIdsForCharacter(6, 2, CharacterHairs, true);
SF: 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 19 00 00 00 00 00 00 1B B4 31 00 00 00 00 00 00 24 06 24 02 00 57 A4 00 00 4A 4A 16
RW: 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 19 00 00 00 00 00 00 1B B4 31 00 00 00 00 00 00 24 06 24 02 00 57 A4 00 00 4A 27 16

Jumping over restricting loop - changed 07 to 06
noexport function TSoldier CreateTSoldier(optional XGTacticalGameCoreNativeBase.EGender eForceGender, optional int iCountry, optional int iRace)
{
Idx = Hairs.Length - 1;
J0x745:
// End:0x791 [While If] // changed 07 to 06
if(Idx >= 0)
{
// End:0x783
if(Hairs[Idx] >= 200)
{
Hairs.Remove(Idx, 1);
}
-- Idx;
// This is an implied JumpToken; Continue!
goto J0x745;
}
SF: 07 91 07 99 00 54 A4 00 00 25 16 07 83 07 99 10 00 54 A4 00 00 00 56 A4 00 00 2C C8 16 40 00 56 A4 00 00 00 54 A4 00 00 26 16 A4 00 54 A4 00 00 16 06 45 07
RW: 06 91 07 99 00 54 A4 00 00 25 16 07 83 07 99 10 00 54 A4 00 00 00 56 A4 00 00 2C C8 16 40 00 56 A4 00 00 00 54 A4 00 00 26 16 A4 00 54 A4 00 00 16 06 45 07

Now we have hair(s) array filled with helmets. Lets specify the one for new guys and armor tint on top of it. I am using iArmorTint instead of iSkinColor. iRace = 2 is used as space filler. Note helmet is -2 and armor tint is -1 of what we normally see on customization screen.

ORIGINAL part
noexport function TSoldier CreateTSoldier(optional XGTacticalGameCoreNativeBase.EGender eForceGender, optional int iCountry, optional int iRace)
{
kSoldier.kAppearance.iHaircut = Hairs[Rand(Hairs.Length)];
HairPalette = XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetColorPalette(0);
kSoldier.kAppearance.iHairColor = ChooseHairColor(kSoldier.kAppearance, HairPalette.BaseOptions);
kSoldier.kAppearance.iFacialHair = ((kSoldier.kAppearance.iGender == 1) ? ChooseFacialHair(kSoldier.kAppearance, kSoldier.iCountry, XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).FacialHairPresets.Length) : 0);
kSoldier.kAppearance.iSkinColor = Rand(5);
ALTERED part
// Set helmet to 2 + number you see on customization screen.
// Helmet is currently 23 (2 + 21).
kSoldier.kAppearance.iHaircut = Hairs[21];
HairPalette = XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).GetColorPalette(0);
kSoldier.kAppearance.iHairColor = ChooseHairColor(kSoldier.kAppearance, HairPalette.BaseOptions);
kSoldier.kAppearance.iFacialHair = ((kSoldier.kAppearance.iGender == 1) ? ChooseFacialHair(kSoldier.kAppearance, kSoldier.iCountry, XComContentManager(class'Engine'.static.GetEngine().GetContentManager()).FacialHairPresets.Length) : 0);
// Set armor tint to 1 + number you see on customization screen.
// Armor tint is currently 30 (1 + 29) to match starting weapons color scheme.
kSoldier.kAppearance.iArmorTint = 29;
iRace = 2; // space filler
// 17 0E 00 00 iArmorTint
// 18 0E 00 00 iArmorDeco
SF: 0F 35 23 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 10 A7 36 00 56 A4 00 00 16 00 56 A4 00 00 0F 00 55 A4 00 00 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 0C 00 3D 49 00 00 00 1B A3 31 00 00 00 00 00 00 24 00 16 0F 35 22 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 1B B0 10 00 00 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 19 00 55 A4 00 00 09 00 53 55 00 00 00 01 53 55 00 00 16 0F 35 21 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 45 9A 35 25 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 26 16 96 00 1B AE 10 00 00 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 35 34 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 36 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 09 00 99 45 00 00 00 01 99 45 00 00 16 01 00 25 0F 35 1E 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 A7 2C 05 16
RW: 0F 35 23 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 10 2C 15 00 56 A4 00 00 0F 00 55 A4 00 00 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 0C 00 3D 49 00 00 00 1B A3 31 00 00 00 00 00 00 24 00 16 0F 35 22 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 1B B0 10 00 00 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 19 00 55 A4 00 00 09 00 53 55 00 00 00 01 53 55 00 00 16 0F 35 21 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 45 9A 35 25 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 26 16 96 00 1B AE 10 00 00 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 35 34 0E 00 00 3B 0E 00 00 00 00 00 60 A4 00 00 36 19 2E 65 49 00 00 19 12 20 4F FE FF FF 0A 00 D7 F9 FF FF 00 1C F5 FB FF FF 16 0A 00 D9 F9 FF FF 00 1B BE 31 00 00 00 00 00 00 16 09 00 99 45 00 00 00 01 99 45 00 00 16 01 00 25 0F 35 17 0E 00 00 27 0E 00 00 00 00 35 30 0E 00 00 3B 0E 00 00 00 01 00 60 A4 00 00 2C 1D 0F 00 62 A4 00 00 2C 02

3. Getting cyborg bodies!

It's easy if done properly. But one mistake and soldiers won't spawn! In short, I am giving Ghost armor look to Kevlar! Lets repair spawns first in XComGame.upk, class XGCharacter_Soldier.

ORIGINAL parts
function class<XComUnitPawn> GetPawnClass()
{
switch(m_eType)
{
case 14:
m_kUnitPawnClassToSpawn = class'XComMaleLevelIIILight';
// End:0x1e4
break;
// End:0x64
case 15:
m_kUnitPawnClassToSpawn = class'XComMaleLevelIMedium'; // male - changed this to be the same as case 14
// End:0x1e4
break;
case 4:
m_kUnitPawnClassToSpawn = class'XComFemaleLevelIIILight';
// End:0x1e4
break;
// End:0x121
case 5:
m_kUnitPawnClassToSpawn = class'XComFemaleLevelIMedium'; // female - changed this to be the same as case 4
// End:0x1e4
break;
}
return m_kUnitPawnClassToSpawn;
}
// Male Kelvar C8 56 00 00 XComMaleLevelIMedium
// Male Ghost BC 56 00 00 XComMaleLevelIIILight
SF: 0A 64 00 24 0F 0F 01 8B A2 00 00 20 C8 56 00 00 06 E4 01
RW: 0A 64 00 24 0F 0F 01 8B A2 00 00 20 BC 56 00 00 06 E4 01
// Female Kelvar D4 4D 00 00 XComFemaleLevelIMedium
// Female Ghost C8 4D 00 00 XComFemaleLevelIIILight
SF: 0A 21 01 24 05 0F 01 8B A2 00 00 20 D4 4D 00 00 06 E4 01
RW: 0A 21 01 24 05 0F 01 8B A2 00 00 20 C8 4D 00 00 06 E4 01
Next change Kevlar to Ghost in DefaultContent.ini / UnitPackageInfo / ArmorDeco / ArmorKits for every weapon.

// change to UnitPackageInfo=(PawnType=ePawnType_Male_1_Kevlar,ArchetypeName="MaleGhost.ARC_MaleGhost")
UnitPackageInfo=(PawnType=ePawnType_Male_1_Kevlar,ArchetypeName="Soldier_MaleKevlar.ARC_MaleKevlar")
// change to UnitPackageInfo=(PawnType=ePawnType_Female_1_Kevlar,ArchetypeName="Soldier_FemaleGhost.ARC_FemaleGhost")
UnitPackageInfo=(PawnType=ePawnType_Female_1_Kevlar,ArchetypeName="Soldier_FemaleKevlar.ARC_FemaleKevlar")

// change to ArmorDeco=(Armor=eItem_ArmorKevlar,ArmorKit=eKit_Deco_Ghost0)
ArmorDeco=(Armor=eItem_ArmorKevlar,ArmorKit=eKit_Deco_Kevlar0)

// change to ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_AssaultRifle,ArmorKit=eKit_AssaultRifle_Ghost)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_AssaultRifle,ArmorKit=eKit_AssaultRifle_Kevlar)
// and the same for all weapons hurray, Kevlar at the end to Ghost
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_Shotgun,ArmorKit=eKit_Shotgun_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_LMG,ArmorKit=eKit_LMG_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_SniperRifle,ArmorKit=eKit_SniperRifle_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_LaserAssaultRifle,ArmorKit=eKit_LaserAssaultRifle_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_HeavyLaser,ArmorKit=eKit_HeavyLaser_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_LaserSniperRifle,ArmorKit=eKit_LaserSniperRifle_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_PlasmaLightRifle,ArmorKit=eKit_PlasmaLightRifle_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_PlasmaAssaultRifle,ArmorKit=eKit_PlasmaAssaultRifle_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_AlloyCannon,ArmorKit=eKit_AlloyCannon_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_HeavyPlasma,ArmorKit=eKit_HeavyPlasma_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_PlasmaSniperRifle,ArmorKit=eKit_PlasmaSniperRifle_Kevlar)
ArmorKits=(Armor=eItem_ArmorKevlar,Weapon=eItem_LaserAssaultGun,ArmorKit=eKit_LaserAssaultGun_Kevlar)
This can be done for other armors too, but it requires fixing it in function GetPawnClass(), otherwise soldier's won't spawn. So have the change on both places or don't use it, that is it :smile: GetPawnClass() + UnitPackageInfos have to match in terms of armor. Edited by Drakous79
Link to comment
Share on other sites

Awesome, awesome work. A merry Christmas indeed ! Thank you.

Will try and implement ASAP.

Replacing kelvar model with ghost is a good idea too. I was planning to reskin it, but yours is probably a better solution IMO (and the work has already been done too !)

 

On my own front :

I'm failing miserably at modding the Repair ability for the SHIV.

I can't get ShotOverload to work either.

:wallbash:

The good Drakous79 is doing significantly more for "my" mod these days than I am... :wacko:

Link to comment
Share on other sites

Cheers :)

 

PepprmintButler no worries, there's still work to be done :) I initially wanted to set armor deco of Kevlar to 3, but nothing I tried worked. So Kevlar Ghost is a workaround which turned to be very nice cyborg like look. Helmet and armor tint I've chosen are not hardcoded and if you feel, there's better color or helmet, just swap numbers in the code. Helmet is 2C 15 (21 ... 21+2=23 on customization screen) and armor tint is 2C 1D (29 ... 29+1=30 on customization screen).

 

Updated the post - added SF RW code for giving helmet and armor tint to new / hired soldiers.

 

twinj that would be nice, see the boss for an assignment :) I will focus on packing christmas presents now.

Edited by Drakous79
Link to comment
Share on other sites

You guys want help?

 

Thanks for the offer !

I see you're busy already with breaking new ground in script length fixing, which is utterly inportant. At least that's what I got out of your post, I could be wrong, most of it goes way over my head TBH.

If you still have some time to spare after that, I could really use some insight on how to implement the changes I want for the SHIV, namely :

- Give a Repair ability with limited charges to the SHIV (tried the drone's repair but failed to limit charges ; tried RepairSHIV but it cannot be activated without some sort of marker attached to the arc thrower apparently)

- Give ShotOverload (self-destruct) to SHIVs. Plain ini modding gives the ability and makes it useable, but it has no effect (just endturn, no sploding)...

Link to comment
Share on other sites

Made some pictures for promotion as an exercise :) All photoshopped screenshots.

 

Armor tint 5 to match laser weapons.

 

http://i.imgur.com/OakfT.jpg

 

http://i.imgur.com/2zAqz.jpg

 

http://i.imgur.com/AvdvI.jpg

 

http://i.imgur.com/vjH7z.jpg

Edited by Drakous79
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...