1. We have added the ability to collapse/expand forum categories and widgets on forum home.
    Dismiss Notice
  2. All Civ avatars are brought back and available for selection in the Avatar Gallery! There are 945 avatars total.
    Dismiss Notice
  3. To make the site more secure, we have installed SSL certificates and enabled HTTPS for both the main site and forums.
    Dismiss Notice
  4. Civ6 is released! Order now! (Amazon US | Amazon UK | Amazon CA | Amazon DE | Amazon FR)
    Dismiss Notice
  5. Dismiss Notice
  6. Forum account upgrades are available for ad-free browsing.
    Dismiss Notice

Alien Strains

Discussion in 'CivBE - Released Mods' started by Lord Shadow, Nov 1, 2014.

  1. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires


    Status: Released
    Version 3 (Beta) Hotfix B


    Steam Workshop | Direct Link (old v1)


    Alien Strains is a modification for Sid Meier's Civilization: Beyond Earth which enhances the alien natives by adding up to three alternative strains to each base species, essentially more than tripling the variety of the new world's fauna. The variants are meant to be roughly equivalent (for the most part) in power to their parent, but each sports unique advantages and disadvantages which encourage the player to think tactically when it comes to engaging them in the most sensible circumstances. For instance, the Raptor Myrmidon is a ferocious defender but falters on the offensive, whereas the Locust Drone is faster, can pillage improvements and regain health from it but is weaker when it comes to withstanding combat.

    Here's the stats for all the strains, enclosed in spoiler tags in case you'd want to encounter and figure out these new aliens like the first human explorers would! The Civilopedia articles hint at the differences between the variants in-game, in any case. But nevertheless, even though the strains are intended to be more or less in balance with the base species, the mod will probably make the game somewhat harder as the alternatives require some thought to face properly.

    Spoiler :
    WOLF BEETLE (Move 2, Strength 8)
    • Wolf Mantis
      +20% Strength (10)
      -33% vs. Ranged
    • Wolf Chameleon
      +80% Attack and Defense while in Miasma (11)
      -20% Strength (6)
    • Wolf Spider (new!)
      +12% per adjacent alien
      -12% without adjacent aliens (7)
    RAPTOR BUG (Move 3, Strength 14)
    • Raptor Alpha
      +40% Strength without adjacent aliens
      -15% Strength (12)
    • Raptor Myrmidon
      +25% when Defending
      -25% when Attacking
    • Raptor Charger (new!)
      +50% when Attacking
      +Heavy charge
      -30% Strength (10)
    DRONE (Move 3, Hover, Strength 10)
    • Hunter Drone
      +1 Vision
      +Ignores zones of control
      +50% when Attacking
      -20% Strength (8)
    • Locust Drone
      +1 Move (4)
      +Pillages Improvements
      +Heals when pillaging
      -20% Strength (8)
    • Carrion Drone (new!)
      +25% vs. Wounded
      -25% vs. Ranged
    MANTICORE (Move 1, Strength 4, Ranged Strength 10)
    • Basilisk
      +33% Ranged Strength (13)
      +30% chance to scatter on ranged attack
      -50% Strength (2)
    • Chimera
      +1 Move (2)
      +No terrain cost
      =Explodes on death (20 HP damage)
      -20% Ranged Strength (8)
    • Salamander (new!)
      +1 Range (3)
      -25% Strength (3)
    SIEGE WORM (Move 1, Strength 48)
    • Ravager Worm
      +1 Move (2)
      +No terrain cost
      -20% Strength (38)
    • Maker Worm
      +25% Strength (60)
      +Heals 15 HP to adjacent aliens
      -30% vs. Air
    SEA DRAGON (Move 4, Strength 14)
    • Sea Serpent
      +2 Move (6)
      -Deep water only
    • Sea Lurker
      +2 Extra attacks
      -25% when Defending
    • Sea Horror (new!)
      +25% vs. Sea
      -25% vs. Land
      -25% vs. Air
    KRAKEN (Move 2, Strength 52)
    • Thanatos
      +Heals 25 HP with kills
      -25% vs. Ranged
    • Leviathan
      +33% Strength (70)
      +Heals 15 HP to adjacent aliens
      -30% vs. Air
      -1 Vision

    Kudos to Nutty for providing critical coding support and Vicevirtuoso for his Modular Script Loading utility!

    Compatible languages: English, Spanish

    Coming soon:
    • Third alternative strains for the colossal aliens.
    • Something nasty.
    NOTE: As of Version 2, due to having phased out promotions entirely, there should be no more UI glitches. Have fun!
    .
     

    Attached Files:

  2. albie_123

    albie_123 Modding In Secret

    Joined:
    Mar 12, 2010
    Messages:
    1,380
    Location:
    Sydney, NSW
    The new promotions glitch is one which requires Firaxis patching, so unfortunately there is no way around it (for now).

    Regardless, this mod is fantastic and something which I was hoping to do myself at some point, but you've done a much better job! The only issue I can see with it is the significance of colour changes. It's more intuitive if the new strains which are a similar colour (eg. the blue ones) share common bonuses.

    Would you consider implementing Nutty's Tyranid models?

    EDIT: While I'm at it, since you've probably tested: Do perks have the same UI issues as promotions?
     
  3. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    Thank you kindly!

    As for the colours, I've tried to make the species fairly unique, without repeating quirks if at all possible. Colour-coding them would imply making them similar to each other more often than not. But in general, at least, the redder strains tend to be more aggressive and/or offense oriented. The bluer ones, for the most part, are more defensive.

    Regarding the Tyranids, I don't know. They're a bit too iconic if you have some familiarity with Warhammer 40K.

    And the problem with perks is that, while they present a nice number of new functions, they lack some promotion ones (i.e. Rough/OpenAttack/Defense), and at the very least would require me to rethink a few strains. If only they'd merge the functions of perks and promotions so that both systems can use the same features... I've poked Will and Dave about it on Twitter: with any luck they'll read my message and feel compelled to work on it.
     
  4. Aeraesoria

    Aeraesoria Chieftain

    Joined:
    Oct 24, 2014
    Messages:
    27
    Sheesh can't get it out of my head... sure the Siege Worm and the Kraken are great units, one each for being land and sea, but what the game is lacking is a equally intimidating air unit which would be hard to taken down like it's land and sea counterparts. What gets my mind arolling is a incectoid looking Dragon unit.

    besides that little quip I like what this mod will offer once it's complete and released.
     
  5. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    A huge, hovering (like a Drone) beast would be interesting, maybe. Adding entirely new alien species is not within this mod's scope at the moment, but in the future, and provided a suitable 3D model is found, perhaps something could be worked out. God knows I've had ideas to repurpose the Rocktopus to serve the aliens in various capacities.
     
  6. Bobert13

    Bobert13 Chieftain

    Joined:
    Feb 25, 2013
    Messages:
    340
    I had a very similar concept in mind for Alien diversification. However, my thought process was to start at the root and have three (or more, but three was the initial goal) different possible alien genotypes. Effectively creating three different sets of species; the bug-like race that's currently in the game, an energy based set of aliens, and a plant-animal hybrid set of aliens.

    The energy based aliens would nest on Firaxite, have no corporeal bodies, get promotions increasing their movement speed and defending them from ranged attacks, and replace the Kracken and Worm with an amphibious Leviathan unit capable of spawning underlings. The plantimal set would gather around FloatStone and get massive healing bonuses from miasma and some powerful ranged support units thrown into the mix.

    Some options on the game setup screen allowing you to go random single race, any chosen single race or possibly even a mix of all three (preferably spawned in a way to avoid too much mixing) were considered. Additionally, I hadn't fully fleshed out ideas on every unit type nor how they could synergize with one another. Biomass spawning might need some work without nests concentrating on and spawning it. Plus, this would obviously require quite a bit of new unit artwork.

    Just thought I'd throw some ideas out there since this mod is at least heading in a similar direction. Either way, it's nice to see someone is working to break the predictability of the current implementation of alien species. Keep up the good work. :salute:
     
  7. albie_123

    albie_123 Modding In Secret

    Joined:
    Mar 12, 2010
    Messages:
    1,380
    Location:
    Sydney, NSW
    But they don't affect the UI the same way promotions do? Weird.
     
  8. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    I haven't tinkered with perks much, so I don't know if there would be any unwelcome side effects. But the fact is they lack some promotion functions I'm using for the strains. I could test if promotion functions work when added to a perk when the table doesn't explicitly contemplate them: it's a bit of a long shot, but who knows. Even if it worked, though, I'd also have to figure out how to have the game give free perks to specific units from the beginning.

    Thanks for the support! :)
     
  9. A Space Ostrich

    A Space Ostrich Chieftain

    Joined:
    Sep 9, 2014
    Messages:
    28
    Love the idea. You've got my support. Might even be able to model some things if you figured out how to add them.
     
  10. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    Thanks! I'll keep you in mind for the future. ;)
     
  11. NotSoLoneWolf

    NotSoLoneWolf Chieftain

    Joined:
    Oct 28, 2014
    Messages:
    47
    Location:
    Canada
    Holy crap that ravager worm will be hell trying to snipe with Rangers/Gunners since it can close the distance instantly! really looking forward to this mod! :)
     
  12. Aeraesoria

    Aeraesoria Chieftain

    Joined:
    Oct 24, 2014
    Messages:
    27
    Siege and Air units are your best friend :lol: :mischief:
     
  13. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    Version 1 (Alpha) released! :D
     
  14. ls612

    ls612 Deity Moderator

    Joined:
    Mar 10, 2008
    Messages:
    8,043
    Location:
    America
    Moderator Action: Moved to the Released Mods section now that there's a release available.
     
  15. Aeraesoria

    Aeraesoria Chieftain

    Joined:
    Oct 24, 2014
    Messages:
    27
    Small suggestion, make an alteration to the Worm quest to include the other two worm types ;)

    Edit: further play seems to indicate that because of the addition of two worms the Kill Worm quest seems to be broken now. Haven't had it pop up when the normal siege worm showed up.
     
  16. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    Admittedly I didn't test it, but I thought I had adapted the Kill Siege Worm quest to include the alternative strains.

    Code:
    -------------------------------------------------------
    -- Quest: Kill Siege Worm - Alien Strains version
    -------------------------------------------------------
    local QuestScript = hmake CvQuestScript{};
    
    ----------------------------------------------------
    -- Constants
    ---------------------------------------------------- 
    [b]local WORM_UNIT_TYPE =
    {
    	{ GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_BASE"].ID },
    	{ GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_RAVAGER"].ID },
    	{ GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_MAKER"].ID },
    };[/b]
    local ENERGY_REWARD = 40;
    local SCIENCE_REWARD = 80;
    
    ----------------------------------------------------
    -- Game Event Listeners
    ---------------------------------------------------- 
    function QuestScript.OnPlayerDiscoveredUnitType(playerType, unitType)
    	if (not HasPlayerDoneQuestType(playerType, QuestScript.Info.ID) and unitType == WORM_UNIT_TYPE) then
    		StartQuest(playerType, QuestScript.Type);
    	end
    end
    GameEvents.PlayerDiscoveredUnitType.Add(QuestScript.OnPlayerDiscoveredUnitType);
    
    function QuestScript.OnUnitSetXY(playerID, unitID, plotX, plotY, unitType)
    	
    	if(unitType == WORM_UNIT_TYPE) then
    
    		for playerType = 0, GameDefines.MAX_MAJOR_CIVS - 1, 1 do
    			local candidatePlayer = Players[playerType];
    			if (not HasPlayerDoneQuestType(playerType, QuestScript.Info.ID) and 
    				candidatePlayer:IsAlive()) then
    
    				local team = candidatePlayer:GetTeam();
    				local plot = Map.GetPlot(plotX, plotY);
    				if (plot ~= nil) then
    					if(plot:IsVisible(team)) then
    						StartQuest(playerType, QuestScript.Type);
    					end
    				end
    			end
    		end
    	end
    end
    GameEvents.UnitSetXY.Add(QuestScript.OnUnitSetXY);
    
    
    ----------------------------------------------------
    -- Callbacks
    ----------------------------------------------------
    
    local function AddRewards(quest : table, isLoad : boolean)
    
    	local rewards = {};
    
    	if (isLoad) then
    		if (quest.PersistentData.Rewards ~= nil and quest.PersistentData.Rewards.Yield2Name ~= nil) then
    			rewards.Yield2Name = quest.PersistentData.Rewards.Yield2Name;
    		end
    	end
    
    	if (rewards.Yield2Name == nil) then
    		rewards.Yield2Name = QuestRewards.ChooseReward("Culture", "Energy", "CultureEnergy" );
    	end
    
    	QuestRewards.AddReward( rewards, "Yield1", "Science" );
    	QuestRewards.AddReward( rewards, "Yield2", rewards.Yield2Name );
    
    	MergeTable(rewards, quest.PersistentData.Rewards);
    	quest.PersistentData.Rewards = rewards;
    	rewards = {}
    end
    
    function QuestScript.OnStart(quest)
    
    	-- find quest reward categories
    	AddRewards(quest, false);
    
    	quest:SetPrologue("TXT_KEY_QUEST_KILL_SEIGE_WORM_PROLOGUE");
    	local objective = AddObjective(quest, "QUEST_OBJECTIVE_KILL_UNIT_TYPE", WORM_UNIT_TYPE, 1);
    	objective:SetEpilogue("TXT_KEY_QUEST_KILL_SEIGE_WORM_EPILOGUE");
    end
    
    function QuestScript.OnLoad(quest)
    	AddRewards(quest, true);
    end
    
    function QuestScript.OnObjectiveComplete(quest, objective)
    	local player = Players[quest:GetOwner()];
    
    	-- Give rewards
    	local dividedReward = QuestRewards.DefaultQuestReward / 2;
    
    	local player = Players[quest:GetOwner()];
    	local rewards = quest.PersistentData.Rewards;
    				
    	rewards.Yield1:GiveReward(player, dividedReward);
    	rewards.Yield2:GiveReward(player, dividedReward);
    
    	-- Set reward strings
    	local yield1RewardStrings = rewards.Yield1:GetRewardStrings(player, dividedReward);
    	local yield2RewardStrings = rewards.Yield2:GetRewardStrings(player, dividedReward);
    
    	quest:SetReward(unpack(yield1RewardStrings), unpack(yield2RewardStrings));
    
    	-- Succeed
    	quest:Succeed();
    end
    
    return QuestScript;
    Should it be the following instead?
    Code:
    local WORM_UNIT_TYPE = { "UNIT_ALIEN_SIEGE_WORM_BASE", "UNIT_ALIEN_SIEGE_WORM_RAVAGER", "UNIT_ALIEN_SIEGE_WORM_MAKER" };
    or...
    Code:
    local WORM_UNIT_TYPE = { GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_BASE", "UNIT_ALIEN_SIEGE_WORM_RAVAGER", "UNIT_ALIEN_SIEGE_WORM_MAKER"].ID };
    and how about...
    Code:
    local WORM_UNIT_TYPE = GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_BASE"].ID or GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_RAVAGER"].ID or GameInfo.Units["UNIT_ALIEN_SIEGE_WORM_MAKER"].ID;
    My Lua knowledge is quite rudimentary.
     
  17. Bobert13

    Bobert13 Chieftain

    Joined:
    Feb 25, 2013
    Messages:
    340
    None of the above.

    You're going to need some "or's" in that "if unitType ==" statement. I personally would get rid of the WORM_UNIT_TYPE variable all together like so:
    Code:
    [COLOR="Blue"]if[/COLOR] (unitType == GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_BASE"].ID [COLOR="Blue"]or[/COLOR] unitType == GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_RAVAGER"].ID [COLOR="Blue"]or[/COLOR] unitType == GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_MAKER"].ID) [COLOR="Blue"]then[/COLOR]
    
    Also note, I've used the GameInfoTypes table as it's actually faster to access it (at least in Lua 5.1 and LuaJIT; can't imagine it would be any different in the new Havok Script) then to go into a subtable of GameInfo (ex.: GameInfo.Units). GameInfoTypes is a master table that should have all available objects of each branch of GameInfo.blah (Units, Buildings, Terrain, Features, etc.).

    You could still setup a table for WORM_UNIT_TYPE (like you've done, only get rid of the brackets around each entry) and then access that during your if statement. That would look like this:
    Code:
    local WORM_UNIT_TYPE =
    {
    	GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_BASE"].ID,
    	GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_RAVAGER"].ID,
    	GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_MAKER"].ID,
    }
    
    ...
    
    [COLOR="Blue"]if[/COLOR] (unitType == WORM_UNIT_TYPE[1] [COLOR="Blue"]or[/COLOR] unitType == WORM_UNIT_TYPE[2] [COLOR="Blue"]or[/COLOR] unitType == WORM_UNIT_TYPE[3]) [COLOR="Blue"]then[/COLOR]
    The numbers in brackets there are "indexes". These default to numbers, starting at one and counting up, when you create a new table in Lua and don't specify what each index should be.

    Edit: A third option... There's seriously no need to do this for a table with only three entries, but it doesn't hurt for me to show this anyways...

    Spoiler :
    Code:
    local WORM_UNIT_TYPE =
    {
    	GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_BASE"].ID,
    	GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_RAVAGER"].ID,
    	GameInfoTypes["UNIT_ALIEN_SIEGE_WORM_MAKER"].ID,
    }
    
    ...
    
    local isWorm = false
    
    for n = 1, #WORM_UNIT_TYPE, 1 do
    	if unitType == WORM_UNIT_TYPE[n] then
    		isWorm = true
    		break
    	end
    end
    
    if isWorm then
    #var returns the length of an object (in this case, it returns how many entries are in the table).
    The "for" statement will iterate on "n" until n == #WORM_UNIT_TYPE, incrementing by 1 each iteration.
    Note that I went on to access specific indexes in the table using "n" as the index.
     
  18. Migrant

    Migrant Chieftain

    Joined:
    Jan 13, 2010
    Messages:
    13
    The Civopedia text mentions "Sky whales" in the entry about the rocktopus. Alien 'whales' that swallow floatstones in order to float around. Might be a cooler idea than dragons...
     
  19. Calantyr

    Calantyr Chieftain

    Joined:
    Nov 10, 2005
    Messages:
    17
    Also swarms, aka Locusts of Chiron.
     
  20. Lord Shadow

    Lord Shadow General

    Joined:
    Oct 14, 2005
    Messages:
    1,817
    Location:
    Buenos Aires
    Bobert13, check your PMs, please.

    The Locust Drone is similar.
     

Share This Page

Ebates: Get Paid to Shop