Advertisement
Guest User

XCom 2 faction (Not) Hero Classes

a guest
Sep 29th, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. function GenerateMTFPersonnelReward(XComGameState_Reward RewardState, XComGameState NewGameState, optional float RewardScalar = 1.0, optional StateObjectReference RegionRef)
  3. {  
  4.     local XComGameState_HeadquartersResistance ResistanceHQ;
  5.     local XComGameStateHistory History;
  6.     local XComGameState_Unit NewUnitState;
  7.     local XComGameState_WorldRegion RegionState;
  8.     local int idx, NewRank, StartingRank;
  9.     local name nmCountry;
  10.     local name nmCharacter;
  11.     local name nmlegs;
  12.     local name iGender;
  13.     local name iWeaponTint;
  14.     local bool UseAlternate;
  15.     local bool PairOne;
  16.     local bool PairTwo;
  17.     History = `XCOMHISTORY;
  18.  
  19.     //nmCharacter = 'Soldier'; //not needed
  20.    
  21.     nmCountry = '';
  22.     RegionState = XComGameState_WorldRegion(`XCOMHISTORY.GetGameStateForObjectID(RegionRef.ObjectID));
  23.  
  24.    
  25.  
  26.     if(RegionState != none)
  27.     {
  28.         nmCountry = RegionState.GetMyTemplate().GetRandomCountryInRegion();
  29.     }
  30.  
  31.     NewUnitState = CreateMTFPersonnelUnit(NewGameState, RewardState.GetMyTemplate().rewardObjectTemplateName, nmCountry, (RewardState.GetMyTemplateName() == 'Reward_MTF'));
  32.     NewUnitState.RandomizeStats();                                                                                                  
  33.    
  34.     UseAlternate = `SYNC_RAND(100) > 50; //Stolen from reality, because he is good at this shit
  35.     PairOne = `SYNC_RAND(100) > 50; //Definig my own randomizers, to make the MTF looks more random, as using the same operator more than once in the same line does not seem to work.
  36.     PairTwo = `SYNC_RAND(100) > 50;
  37.     //NewUnitState.kAppearance.iGender = (UseAlternate) ? eGender_Female : eGender_Male; //Already defined in NewUnitState, so not needed here
  38.    
  39.     if(NewUnitState.kAppearance.iGender == eGender_Male) //Here we check if newly generated unit is a male
  40.     {
  41.     NewUnitState.kAppearance.nmarms = 'gign_arms2'; //Arms with XCom badge on them
  42.     }
  43.  
  44.     else //If they're not male, we use Female body parts
  45.     {
  46.     NewUnitState.kAppearance.nmarms = 'gign_arms2_f';
  47.     }
  48.  
  49.     if(NewUnitState.kAppearance.iGender == eGender_Male) //we check if newly generated unit is a male
  50.     {
  51.     //NewUnitState.kAppearance.nmlegs = (UseAlternate) ? 'gign_Legs3' : 'gign_Legs2'); //Less random set of body parts, not using my own randomizers
  52.     NewUnitState.kAppearance.nmlegs = (UseAlternate) ? ((PairOne) ? 'gign_Legs3' : 'gign_Legs3') : ((PairTwo) ? 'gign_Legs' : 'gign_Legs2'); //legs
  53.     }
  54.  
  55.     else //If they're not male, we use Female body parts
  56.     {
  57.     //NewUnitState.kAppearance.nmlegs = (UseAlternate) ? 'gign_Legs3_F' : 'gign_Legs2_F'); //Less random set of body parts, not using my own randomizers
  58.     NewUnitState.kAppearance.nmlegs = (UseAlternate) ? ((PairOne) ? 'gign_Legs3_F' : 'gign_Legs3_F') : ((PairTwo) ? 'gign_Legs_F' : 'gign_Legs2_F'); //Arms
  59.     }
  60.  
  61.     if(NewUnitState.kAppearance.iGender == eGender_Male) //we check if newly generated unit is a male
  62.     {
  63.     //NewUnitState.kAppearance.nmtorso = (UseAlternate) ? 'gign_Torso3' : 'gign_Torso4'; //Less random set of body parts, not using my own randomizers
  64.     NewUnitState.kAppearance.nmtorso = (UseAlternate) ? ((PairOne) ? 'gign_Torso3' : 'gign_Torso4') : ((PairTwo) ? 'gign_Torso' : 'gign_Torso2'); //Torsos
  65.     }
  66.  
  67.     else //If they're not male, we use Female body parts
  68.     {
  69.     //NewUnitState.kAppearance.nmtorso = (UseAlternate) ? 'gign_Torso3_F' : 'gign_Torso4_F'; //Less random set of body parts, not using my own randomizers
  70.     NewUnitState.kAppearance.nmtorso = (UseAlternate) ? ((PairOne) ? 'gign_Torso3_F' : 'gign_Torso4_F') : ((PairTwo) ? 'gign_Torso_F' : 'gign_Torso2_F');
  71.     }
  72.  
  73.     if (NewUnitState.kAppearance.iGender == eGender_Male) //we check if newly generated unit is a male
  74.     {
  75.         NewUnitState.kAppearance.nmHelmet =  (UseAlternate) ? 'gign_helm3' : 'gign_helm'; //Helmets
  76.     }
  77.  
  78.     else //If they're not male, we use Female body parts
  79.     {
  80.         NewUnitState.kAppearance.nmHelmet = (UseAlternate) ? 'ALL_WotC_MGSV_PMC_Heavy_Helmet_Opaque_F' : 'ALL_WotC_MGSV_PMC_Heavy_Helmet_Translucent_F';
  81.     }
  82.  
  83.    
  84.     if (NewUnitState.kAppearance.iGender == eGender_Male) //we check if newly generated unit is a male
  85.     {
  86.         NewUnitState.kAppearance.nmVoice = (UseAlternate) ? 'TVP_GHOST2' : 'TVP_GHOST3';
  87.     }
  88.     else //If they're not male, we use Female body parts
  89.     {
  90.         NewUnitState.kAppearance.nmVoice = (UseAlternate) ? 'TVP_GHOST4' : 'TVP_GHOST4'; //I don't have any more female voices for the operative. Randomizer not needed, but I'll keep it in here
  91.     }
  92.  
  93.     NewUnitState.KAppearance.nmPatterns = 'Pat_Nothing';
  94.     NewUnitState.kAppearance.iArmorTint = (UseAlternate) ? ((PairOne) ? 94 : 95) : ((PairTwo) ? 91 : 56);
  95.     NewUnitState.kAppearance.iArmorTintSecondary = 70;
  96.     NewUnitState.kAppearance.iWeaponTint = 94; //no gun metal grey bullshit, JUST BLACK https://www.youtube.com/watch?v=pAgnJDJN4VA
  97.     NewGameState.AddStateObject(NewUnitState);
  98.  
  99.  
  100.     if(!NewGameState.GetContext().IsStartState())
  101.         {
  102.             ResistanceHQ = XComGameState_HeadquartersResistance(NewGameState.CreateStateObject(class'XComGameState_HeadquartersResistance', ResistanceHQ.ObjectID));
  103.             NewGameState.AddStateObject(ResistanceHQ);
  104.         }
  105.  
  106.  
  107.         ResistanceHQ = XComGameState_HeadquartersResistance(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersResistance'));
  108.         NewUnitState.ApplyInventoryLoadout(NewGameState);
  109.         StartingRank = NewUnitState.GetRank(); //this is so in case we get an unit that already starts off with a class
  110.         NewRank = GetPersonnelRewardRank(true, (RewardState.GetMyTemplateName() == 'Reward_MTF'));
  111.         NewUnitState.SetXPForRank(NewRank);
  112.         NewUnitState.StartingRank = NewRank;
  113.         NewUnitState.RankUpSoldier(NewGameState, 'MTFChief'); //||NO MATTER WHATEVER THE FUCK HAPPENS, THIS FUCKING GUY'S CLASS HAS TO BE THE CHIEF||
  114.         for(idx = StartingRank; idx < NewRank; idx++)
  115.         {
  116.             // Rank up to squaddie if this is an unit that starts off as a rookie
  117.             if(idx == 0)
  118.             {  
  119.                 NewUnitState.RankUpSoldier(NewGameState, 'MTFChief'); //||NO MATTER WHATEVER THE FUCK HAPPENS, THIS FUCKING GUY'S CLASS HAS TO BE THE CHIEF||
  120.                 NewUnitState.ApplySquaddieLoadout(NewGameState);
  121.                 NewUnitState.bNeedsNewClassPopup = true;
  122.             }
  123.             else
  124.             {
  125.                 NewUnitState.RankUpSoldier(NewGameState, 'MTFChief'); //||NO MATTER WHATEVER THE FUCK HAPPENS, THIS FUCKING GUY'S CLASS HAS TO BE THE CHIEF||
  126.             }
  127.         }
  128.         //class'XGCharacterGenerator_MTFSoldier'.static.TSoldier_CreateTSoldier(KSoldier);
  129.  
  130.         RewardState.RewardObjectReference = NewUnitState.GetReference();
  131. }
  132.  
  133. static function XComGameState_Unit CreateMTFPersonnelUnit(XComGameState NewGameState, name nmCharacter, name nmCountry, optional bool bIsRookie) //That's my bootleg version of CreatePersonnelUnit function, that is set to give the soldier class of mtf chief no matter what
  134. {
  135.     local XComGameStateHistory History;
  136.     local XComGameState_Unit NewUnitState;
  137.     local XComGameState_HeadquartersXCom XComHQ;
  138.     local XComGameState_HeadquartersResistance ResistanceHQ;
  139.     local int idx, NewRank, StartingIdx;
  140.  
  141.     History = `XCOMHISTORY;
  142.  
  143.     //Use the character pool's creation method to retrieve a unit
  144.     NewUnitState = `CHARACTERPOOLMGR.CreateCharacter(NewGameState, `XPROFILESETTINGS.Data.m_eCharPoolUsage, nmCharacter, nmCountry);
  145.     NewUnitState.RandomizeStats();
  146.  
  147.     if (NewUnitState.IsSoldier())
  148.     {
  149.         XComHQ = XComGameState_HeadquartersXCom(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersXCom'));
  150.         ResistanceHQ = XComGameState_HeadquartersResistance(History.GetSingleGameStateObjectForClass(class'XComGameState_HeadquartersResistance'));
  151.  
  152.         if (!NewGameState.GetContext().IsStartState())
  153.         {
  154.             ResistanceHQ = XComGameState_HeadquartersResistance(NewGameState.ModifyStateObject(class'XComGameState_HeadquartersResistance', ResistanceHQ.ObjectID));
  155.         }
  156.  
  157.         NewUnitState.ApplyInventoryLoadout(NewGameState);
  158.         NewRank = GetPersonnelRewardRank(true, bIsRookie);
  159.         NewUnitState.SetXPForRank(NewRank);
  160.         NewUnitState.StartingRank = NewRank;
  161.         StartingIdx = 0;
  162.  
  163.         if(NewUnitState.GetMyTemplate().DefaultSoldierClass != '' && NewUnitState.GetMyTemplate().DefaultSoldierClass != class'X2SoldierClassTemplateManager'.default.DefaultSoldierClass)
  164.         {
  165.             // Some character classes start at squaddie on creation
  166.             StartingIdx = 1;
  167.         }
  168.  
  169.         for (idx = StartingIdx; idx < NewRank; idx++)
  170.         {
  171.             // Rank up to squaddie
  172.             if (idx == 0)
  173.             {
  174.                 NewUnitState.RankUpSoldier(NewGameState, 'MTFChief');
  175.                 NewUnitState.ApplySquaddieLoadout(NewGameState);
  176.                 NewUnitState.bNeedsNewClassPopup = false;
  177.             }
  178.             else
  179.             {
  180.                 NewUnitState.RankUpSoldier(NewGameState, 'MTFChief');
  181.             }
  182.         }
  183.  
  184.         // Set an appropriate fame score for the unit
  185.         NewUnitState.StartingFame = XComHQ.AverageSoldierFame;
  186.         NewUnitState.bIsFamous = true;
  187.         `XEVENTMGR.TriggerEvent('RewardUnitGenerated', NewUnitState, NewUnitState); //issue #185 - fires off event with unit after they've been promoted to their reward rank
  188.     }
  189.     else
  190.     {
  191.         NewUnitState.SetSkillLevel(GetPersonnelRewardRank(false));
  192.     }
  193.  
  194.     return NewUnitState;
  195. }```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement