What's your ideal Scripting Situation?

sukritact

Artist and Modder
Joined
Sep 21, 2010
Messages
2,976
Location
Bangkok
For funsies and interest: what's everyone's ideal situation of the scripting side for Civ VI? What language does everyone hope Firaxis will be using (Lua? Python? JavaScript? Gobbledygook?) what specific methods and function do you hope will be implemented (eg. something akin to LuaEvents, an easy and stable way to save persisting data, etc)?

I'm hoping they don't switch back to Python. Having been using it recent, I'm very annoyed of the effects of accidentally mixing up my spaces and tabs in the leading whitespace...

And I really hope they add something like a LuaEvents that can trigger functions across networks, would be very useful for multiplayer compatibility.
 
I have a little experience with Javascript so that would probably be best for me. Probably only marginally though - I doubt it's entirely the language that's my problem.
 
The only coding I know is what I've learned in modding V, so I hope they stick to that :)

I think you've hit the main hopes I have, especially an easy and stable way to persist data across saves.

Sent from my Nexus 5 using Tapatalk
 
I'm hoping they retain lua but expand the API considerably. But if the new system actually makes doing lua-style programming more powerful and just as easy to do as is lua then I don't actually care if they retain lua or adopt the use of Gobbledegook.

Being able to persist modding data more seamlessly without the conflicts that some people have between SaveUtils type persisting and TableSaverLoader persisting would be nice, as well. If there were no persisiting conflicts between mods (or possibility thereof) I would persist with TableSaverLoader far more than I do. As it is I use TableSaverLoader exclusively, but only after I explore all possible options to accomplish what I want without any sort of data persisting -- cue dummy policies and dummy buildings.

What I really want is a UI-creation tool. Even though I've studied William's Civ5 tutorials on creating UI, I just keep bashing my head on that brick wall.

I'm hoping to maybe make the transition to dll-level modding (assuming there is such a thing in Civ6). I decided last fall when it became likely there would be a civ6 to not pursue the thought of tackling dll. From the code-snippets William and others trade back and forth in dll discussions, the actual code itself doesn't look all that different from a couple of other languages I've dealt with in the past -- though the compiling and extraction from a compiled state and suchlike still leaves me a little headsmacked.

-------------------------------------------------------------------------------------------

More than anything else, though, I want the lua-or-Gobbledegook methods to work and not be orphaned, and I want columns in XML/SQL to actually work, and to work consistently across tables and primary-game-element schemas. No more of this "Yield_Culture" works one way in <Traits_SpecialistYieldChanges> and in another way entirely (or not at all) in <Building_SpecialistYieldChanges>.
 
The only coding I know is what I've learned in modding V, so I hope they stick to that :)

Same here.

Although a part of me thinks that it would be a good learning experience if they changed the scripting language. :D

Not quite on topic, but I also hope they keep and expand the PlayerPerk-System from Beyond Earth. As many flaws as that game has, that system is brilliant to allow Newbie-Modders to create tons and tons of effects and effect-combinations that are not limited to one specific sub-system (Policies/Civ Traits/Buildings/Religious Traits/etc.) but are instead universally usable.
 
Same here.

Although a part of me thinks that it would be a good learning experience if they changed the scripting language. :D
Agreed. It'd be cool to be forced to learn a new and hopefully practical language, yet at the same time I adore the fact that Lua's data structures are so flexible, no dealing with dicts and arrays and the like, just a simple table that can use practically anything as an index key.

Not quite on topic, but I also hope they keep and expand the PlayerPerk-System from Beyond Earth. As many flaws as that game has, that system is brilliant to allow Newbie-Modders to create tons and tons of effects and effect-combinations that are not limited to one specific sub-system (Policies/Civ Traits/Buildings/Religious Traits/etc.) but are instead universally usable.
I'm not familiar with this, what is it exactly?
 
I was just beginning to understand lua a little so hopefully they'll use this in Civ 6 otherwise I might be relying on other modders to help me get up to speed with something new.
 
I'm not familiar with this, what is it exactly?
It's hard to describe. I'll just give an example:

Spoiler :
Code:
<PlayerPerks>
    <Row>
      <Type>PLAYERPERK_BETTER_DEAL</Type>
      <Help>TXT_KEY_PLAYERPERK_BETTER_DEAL_HELP</Help>
      <RouteMaintenanceMod>-100</RouteMaintenanceMod>
    </Row>
</PlayerPerks>

<PlayerPerks_BuildingYieldEffects>
    <Row>
      <PlayerPerkType>PLAYERPERK_BETTER_DEAL</PlayerPerkType>
      <BuildingClassType>BUILDINGCLASS_GENETATOR</BuildingClassType>
      <YieldType>YIELD_ENERGY</YieldType>
      <FlatYield>2</FlatYield>
    </Row>
</PlayerPerks_BuildingYieldEffects>

<PlayerPerks_GeneralBuildingEffects>
    <Row>
      <PlayerPerkType>PLAYERPERK_BETTER_DEAL</PlayerPerkType>
      <BuildingClassType>BUILDINGCLASS_RELIC</BuildingClassType>
      <MaintenanceChange>-1</MaintenanceChange>
    </Row>
</PlayerPerks_GeneralBuildingEffects>

<PlayerPerks_ResourceYieldEffects>
    <Row>
      <PlayerPerkType>PLAYERPERK_BETTER_DEAL</PlayerPerkType>
      <ResourceType>RESOURCE_PETROLEUM</ResourceType>
      <YieldType>YIELD_ENERGY</YieldType>
      <FlatYield>3</FlatYield>
    </Row>
</PlayerPerks_ResourceYieldEffects>

So this PlayerPerk would reduce the Maintenance of Roads by 100%, Generators would yield +2 Energy, Relics would cost 1 less Maintenance and every Tile with Petroleum would yield +3 Energy. Lots of functionality is available:

Spoiler :
Code:
	<Table name="PlayerPerks">
		<!-- Basic info -->
		<Column name="ID" type="integer" primarykey="true" autoincrement="true"/>
		<Column name="Type" type="text" notnull="true" unique="true"/>
		<Column name="Description" type="text" reference="Language_en_US(Tag)"/>
		<Column name="Help" type="text" reference="Language_en_US(Tag)"/>
		<Column name="IconIndex" type="integer" default="-1"/>
		<Column name="IconAtlas" type="text" default="NULL" reference="IconTextureAtlases(Atlas)"/>
		<!--Global Effect Attributes-->
		<Column name="CovertAgentRankRateChange" type="integer" reference="" notes="Discount to the number of operations a covert agent needs to level up" default="0"/>
		<Column name="MiasmaDamageMod" type="integer" reference="" notes="Percent modifier to miasma damage for all units" default="0"/>
		<Column name="MiasmaBaseHeal" type="integer" reference="" notes="Base heal change for all units in miasma (negates any miasma damage effects)" default="0"/>
		<Column name="MiasmaPlotYieldImmunity" type="boolean" reference="" notes="Negates the negative effects of Miasma on plot yields" default="false"/>
		<Column name="UnitFlatHealChange" type="integer" reference="" notes="Flat heal change for all units in any circumstance" default="0"/>
		<Column name="UnitFlatVisibilityChange" type="integer" reference="" notes="Flat visibility range change for all units in any circumstance" default="0"/>
		<Column name="UnitPercentHealChange" type="integer" reference="" notes="Percent heal change for all units in any circumstance" default="0"/>
		<Column name="NavalMovementChange" type="integer" reference="" notes="Flat change to movement range of all naval units" default="0"/>
		<Column name="ExpeditionSpeedMod" type="integer" reference="" notes="Flat change to the completion speed of Explorer Expedition actions" default="0"/>
		<Column name="WorkerSpeedMod" type="integer" reference="" notes="Flat change to the work speed of all Worker units" default="0"/>
		<Column name="AquaticCityMoveCostMod" type="integer" default="0"/>
		<Column name="AquaticCityStrengthMod" type="integer" default="0"/>
		<Column name="RelationshipDiploCapitalCostMod" type="integer" default="0"/>
		<Column name="DiploCapitalPurchaseCostMod" type="integer" default="0" notes="Percent modifier for purchasing things in the production menu with capital."/>
		<Column name="AgreementDiploPurchaseCapitalCostMod" type="integer" default="0" notes="Percent modifier to the flat cost of purchasing a foreign policy in a diplomatic agreement"/>
		<Column name="AgreementDiploPerTurnCapitalCostMod" type="integer" default="0" notes="Percent modifier to the per-turn cost of a foreign policy in an agreement"/>
		<Column name="OrbitalCoverageChange" type="integer" reference="" notes="Flat change to the orbital coverage for all cities" default="0"/>
		<Column name="OrbitalDurationModifier" type="integer" default="0"/>
		<Column name="OrbitalStrikeRangeChange" type="integer" notes="Flat change to the anti-orbital strike range for all cities" default="0"/>
		<Column name="OutpostOrbitalCoverageChange" type="integer" reference="" notes="Flat change to the orbital coverage for all outposts" default="0"/>
		<Column name="OrbitalCoverageCombatMod" type="integer" reference="" notes="Percent change to unit combat strength when fighting inside friendly orbital coverage" default="0"/>
		<Column name="OrbitalProductionModPerLaunchedUnit" type="integer" reference="" notes="Rolling cumulative production cost mod for each orbital unit launched" default="0"/>
		<Column name="OrbitalResourceCostChange" type="integer" default="0" notes="Flat change to resource quantities required to build orbital units"/>
		<Column name="StationOrbitalCoverageChange" type="integer" reference="" notes="Flat change to the orbital coverage for all actively-trading stations" default="0"/>
		<Column name="GrowthCarryover" type="integer" reference="" notes="Food carryover after city growth for all cities" default="0"/>
		<Column name="AlienOpinionRecoveryMod" type="integer" reference="" notes="Percent change to aliens' opinion recovering towards neutral every turn" default="0"/>
		<Column name="AlienOpinionFriendlyInfluence" type="float" reference="" notes="Points applied each turn to the Aliens' positive opinion of the player" default="0"/>
		<Column name="AlienCombatMod" type="integer" reference="" notes="Percent change to unit combat strength when fighting aliens" default="0"/>
		<Column name="ExplorerExpeditionCharges" type="integer" reference="" notes="Flat change to the number of Expedition Charges player's Explorer units have (affects existing units)" default="0"/>
		<Column name="RouteMaintenanceMod" type="integer" reference="" notes="Percent change to energy maintenance for routes (road and magrail)" default="0"/>
		<Column name="TradeUnitsImmuneToAliens" type="boolean" reference="" notes="Makes Trade Units non-targetable by Alien units" default="false"/>
		<Column name="TradeUnitsImmuneToMiasma" type="boolean" reference="" notes="Makes Trade Units able to path Trade Routes through Miasma" default="false"/>
		<Column name="ExplorerUnitsImmuneToAliens" type="boolean" reference="" notes="Makes Explorer Units non-targetable by Alien units" default="false"/>
		<Column name="FreeBuilding" type="text" reference="Buildings(Type)" default="NULL"/>
		<Column name="FreeSpies" type="integer" reference="" notes="Player receives one-time additional covert agent slots when the perk is applied" default="0"/>
		<Column name="FreeVirtue" type="boolean" reference="" notes="Player receives a one-time Free Virtue when the perk is applied" default="false"/>
		<Column name="FreeTech" type="boolean" reference="" notes="Player receives a one-time Free Tech when the perk is applied" default="false"/>
		<Column name="FreePopulation" type="integer" reference="" notes="Player receives a one-time population increase in each city when the perk is applied" default="0"/>
		<Column name="FreeEnergy" type="integer" reference="" notes="Player receives a one-time grant of Energy when the perk is applied" default="0"/>
		<Column name="FreeCulture" type="integer" reference="" notes="Player receives a one-time grant of Culture when the perk is applied" default="0"/>
		<Column name="FreeScience" type="integer" reference="" notes="Player receives a one-time grant of Science when the perk is applied" default="0"/>
		<Column name="FreeTechPerXPolicies" type="integer" default="0"/>
		<Column name="FreePolicyPerXPolicies" type="integer" default="0"/>
		<Column name="SpecialistExtraYield" type="integer" default="0"/>
		<Column name="CapitalGrowthMod" type="integer" default="0"/>
		<Column name="CapitalBuildingMaintenanceMod" type="integer" default="0"/>
		<Column name="CapitalDefenseMod" type="integer" default="0"/>
		<Column name="CapitalOrbitalProductionMod" type="integer" default="0"/>
		<Column name="CapitalFlatHealth" type="integer" default="0"/>
		<Column name="CapitalPlotCultureCostModifier" type="integer" default="0"/>
		<Column name="PlotCultureCostModifier" type="integer" default="0"/>
		<Column name="PlotEnergyCostModifier" type="integer" default="0"/>
		<Column name="VirtueCostModifier" type="integer" default="0"/>
		<Column name="BranchTechCostModifier" type="integer" default="0"/>
		<Column name="GlobalTechCostModifier" type="integer" default="0"/>
		<Column name="LeafTechCostModifier" type="integer" default="0"/>
		<Column name="TechWithUnitsCostModifier" type="integer" default="0"/>
		<Column name="CityGrowthModifier" type="integer" default="0"/>
		<Column name="CityStartingPopulationChange" type="integer" default="0"/>
		<Column name="CityStartingFreeUnitClass" type="text" reference="UnitClasses(Type)" default="NULL" notes="Newly founded cities receive a free unit of this class"/>
		<Column name="CityExtraWorkingPlots" type="integer" default="0"/>
		<Column name="CityStrengthPerPop" type="integer" default="0"/>
		<Column name="CityEnergyPurchaseCostMod" type="integer" notes="Percent change to the Energy cost of rush-build purchases in all Cities" default="0"/>
		<Column name="OutpostGrowthModifier" type="integer" default="0"/>
		<Column name="OutpostStrengthChange" type="integer" default="0"/>
		<Column name="CityHPRecoveryRateMod" type="integer" default="0"/>
		<Column name="WarScorePointsMod" type="integer" default="0"/>
		<Column name="ExtraCityProcessYield" type="integer" default="0" notes="Flat change to the yield return rate from City Production Processes"/>
		<Column name="CityProcessYieldMod" type="integer" default="0" notes="Percent change to the overall yield return rate from City Production Processes"/>
		<Column name="OutpostHPRecoveryRateMod" type="integer" default="0"/>
		<Column name="PlotVisibilityRangeModifier" type="integer" default="0"/>
		<Column name="InvaderAttritionChange" type="integer" notes="Flat change to damage dealt to hostile units inside the Player's borders each turn" default="0"/>
		<Column name="CovertOpsIntriguePrereqChange" type="integer" default="0" notes="Change the Intrigue level required to attempt a given covert op"/>
		<Column name="CovertOpsIntrigueModifier" type="integer" default="0"/>
		<Column name="CovertOpsTimeModifier" type="integer" default="0"/>
		<Column name="CovertOpsAgentMoveSpeedModifier" type="integer" default="0"/>
		<Column name="CovertOpsAgentRecruitLevelChange" type="integer" default="0"/>
		<Column name="CovertOpsAgentRiskModifier" type="integer" default="0"/>
		<Column name="CovertOpsAgentSightRangeChange" type="integer" default="0"/>
		<Column name="HealthyEmpireGrowthModifier" type="integer" default="0"/>
		<Column name="WonderProductionMod" type="integer" default="0"/>
		<Column name="MilitaryUnitsProductionMod" type="integer" default="0"/>
		<Column name="NavalUnitsProductionMod" type="integer" default="0"/>
		<Column name="UnitHealWhenFortifiedMod" type="integer" default="0"/>
		<Column name="UnitXPGainModifier" type="integer" default="0"/>
		<Column name="UnitStrengthFriendlyTerritoryModifier" type="integer" default="0"/>
		<Column name="UnitStrengthNeutralTerritoryModifier" type="integer" default="0"/>
		<Column name="UnitStrengthEnemyTerritoryModifier" type="integer" default="0"/>
		<Column name="UnitExtraExperienceLevelsAllowed" type="integer" default="0"/>
		<Column name="UnitsNoWoundedDamageMod" type="boolean" default="false"/>
		<Column name="UnitAffinityRequirementDiscount" type="integer" default="0"/>
		<Column name="BuildingAffinityRequirementDiscount" type="integer" default="0"/>
		<Column name="VirtueTierSynergyRequirementDiscount" type="integer" default="0"/>
		<Column name="CultureBuildingCostMod" type="integer" default="0" notes="Percent change to production cost to build city buildings that yield Culture"/>
		<Column name="GlobalEnergyIncomePercentScienceYield" type="integer" notes="Science yield gained each turn based on a percentage of global Energy income" default="0"/>
		<Column name="GlobalEnergyIncomePercentCultureYield" type="integer" notes="Culture yield gained each turn based on a percentage of global Energy income" default="0"/>
		<Column name="GlobalMeleeDamageMod" type="integer" default="0"/>
		<Column name="GlobalRangedDamageMod" type="integer" default="0"/>
		<Column name="GlobalCityStrikeDamageMod" type="integer" default="0"/>
		<Column name="GlobalCityStrikeRangeChange" type="integer" default="0"/>
		<Column name="GlobalAirDamageMod" type="integer" default="0"/>
		<Column name="GlobalPopulationUnhealthMod" type="integer" default="0"/>
		<Column name="GlobalCityCountUnhealthMod" type="integer" default="0"/>
		<Column name="GlobalEnergyYieldPerOwnedPlot" type="float" notes="Energy yield gained each turn from the number of plots in the player's territory" default="0"/>
		<Column name="GlobalEnergyYieldFromReserves" type="float" notes="Energy yield gained each turn based on the player's Energy reserve (stockpile)" default="0"/>
		<Column name="GlobalTradeRoutePopThresholdMod" type="integer" default="0"/>
		<Column name="GlobalUnitMaintenanceMod" type="integer" default="0"/>
		<Column name="GlobalRouteMoveSpeedMod" type="integer" default="0"/>
		<Column name="ConqueredCityUnhealthMod" type="integer" default="0"/>
		<Column name="AffinityXPGainModifier" type="integer" default="0"/>
		<Column name="TradeRouteStrategicResourceChange" type="integer" notes="Flat change to the quantity of strategic resources exchanged via int'l trade routes" default="0"/>
		<Column name="TradeRoutePlunderYieldMod" type="integer" notes="Percent change to the yield gained from plundering a Trade Route" default="0"/>
		<Column name="InternationalTradeRouteYieldMod" type="integer" notes="Percent change to the value of all yields received from International city routes" default="0"/>
		<Column name="InternalTradeRouteYieldMod" type="integer" notes="Percent change to the value of all yields received from Internal city routes" default="0"/>
		<Column name="StationTradeRouteYieldMod" type="integer" notes="Percent change to the value of all yields received from Station routes" default="0"/>
		<Column name="PositiveHealthLevelsStrengthModifier" type="integer" notes="Increases the effect strength of positive Health by this percentage" default="0"/>
		<Column name="NegativeHealthLevelsStrengthModifier" type="integer" notes="Decreases the effect strength of negative Health by this percentage" default="0"/>
		<Column name="AllowRecycleOrbitalUnits" type="boolean" default="false"/>
		<Column name="AllowFreePillageAction" type="boolean" default="false"/>
		<Column name="AllowOutpostRangeStrike" type="boolean" default="false"/>
		<Column name="AllowUnitsFullHealInCities" type="boolean" default="false" notes="Special ability: Damaged units heal to full in one turn if fortified in a city"/>
		<Column name="AllowSpecialstsFreeFood" type="boolean" default="false" notes="Specialist city citizens require no food to maintain"/>
		<Column name="AllowBombardThroughObstacles" type="boolean" default="false"/>
		<Column name="FirstCityWonderFree" type="boolean" default="false" notes="First Wonder built in any city costs no Production"/>
		<Column name="WonderDiploCapitalChange" type="integer" default="0"/>
		<Column name="AgreementsDiploCapitalChange" type="integer" default="0"/>
		<Column name="CovertOpsCounterIntelligenceBonus" type="integer" default="0"/>
		<Column name="CovertOpsSciencePerAgentRank" type="integer" default="0" notes="Free science per rank level of the agent after a successful covert operation"/>
		<Column name="ArtifactAcquisitionRateModifier" type="integer" default="0"/>
		<Column name="DiplomacyRespectModifier" type="integer" default="0"/>
		<Column name="AllowFullCityColonists" type="boolean" default="false" notes="Special ability: Colonists units cost X% more production but found cities immediately"/>
		<Column name="FullCityColonistCostMod" type="integer" default="0" notes="Cost mod associated with AllowFullCityColonists"/>
		<Column name="UnitFreePromotion" type="text" reference="UnitPromotions(Type)" default="NULL" notes="All current and future Units receive this Unit Promotion"/>
		<Column name="FlatHealth" type="integer" default="0"/>
		<Column name="HealthPerMilitaryUnit" type="float" default="0"/>
		<Column name="NonsentientAlienVisionRangeChange" type="int" default="0" notes="Changes the visibility range from nonsentient alien units (ie. hydracoral), which is -1 (no vision) by default. A value of 1 will change the overall range to 0, granting vision on the unit's occupied tile. A value of 2 will change the overall range to 1, granting vision of adjacent tiles as well, etc."/>
		<Column name="AllowCitizensWorkingNonsentientAlienTiles" type="boolean" default="false" notes="Allows the player's cities to work tiles occupied by nonsentient alien units (ie. hydracoral)."/>
	</Table>
	<!-- Building Class Effects - Yields -->
	<Table name="PlayerPerks_BuildingYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="BuildingClassType" type="text" reference="BuildingClasses(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
		<Column name="FlatYieldPerPop" type="float" default="0"/>
		<Column name="PercentYieldPerPop" type="float" default="0"/>
	</Table>
	<!-- Building Class Effects - General -->
	<Table name="PlayerPerks_GeneralBuildingEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="BuildingClassType" type="text" reference="BuildingClasses(Type)" notnull="true"/>
		<Column name="FlatHealth" type="integer" default="0"/>
		<Column name="PercentHealth" type="integer" default="0"/>
		<Column name="PercentHealthPerPop" type="integer" default="0"/>
		<Column name="PercentUnhealth" type="integer" default="0"/>
		<Column name="GrowthCarryover" type="integer" default="0"/>
		<Column name="MaintenanceChange" type="integer" default="0"/>
		<Column name="AquaticCityMoveCostMod" type="integer" default="0"/>
		<Column name="CityHitPoints" type="integer" default="0"/>
		<Column name="CityHitPointsPercent" type="integer" default="0"/>
		<Column name="CityStrength" type="integer" default="0"/>
		<Column name="CityStrengthPercent" type="integer" default="0"/>
		<Column name="CityStrengthModVsAliens" type="integer" default="0"/>
		<Column name="CityStrikeDamageMod" type="integer" default="0"/>
		<Column name="CityRangedDefenseMod" type="integer" notes="Reduces ranged damage taken by the city by this percent" default="0"/>
		<Column name="CityIntrigueCapChange" type="integer" default="0"/>
		<Column name="CityEnemyAttritionRange" type="integer" notes="Enemy units within this range to the city will suffer standard attrition damage" default="0"/>
		<Column name="CityCovertOpsImmune" type="boolean" default="false"/>
		<Column name="CityAlienUnitConstruction" type="boolean" notes="Allows the city to construct Alien units" default="false"/>
		<Column name="CityBuildingsMaintenanceMod" type="integer" notes="Percent change to the city's total maintenance cost for all its buildings" default="0"/>
		<Column name="CityImprovementsMaintenanceMod" type="integer" notes="Percent change to the city's total maintenance cost for all its improvements" default="0"/>
		<Column name="NumTradeRoutes" type="integer" default="0"/>
		<Column name="AlienRepelChange" type="integer" default="0"/>
		<Column name="OrbitalCoverageChange" type="integer" default="0"/>
		<Column name="OrbitalStrikeRangeChange" type="integer" default="0"/>
		<Column name="LaunchedOrbitalUnitOverlapChange" type="integer" notes="Change to the amount of coverage overlap allowed to orbital units launched from this city" default="0"/>
		<Column name="ShallowWaterProduction" type="integer" notes="Flat change to Production Yield from Shallow (Coast) plots worked by this city" default="0"/>
		<Column name="ShallowWaterScience" type="integer" notes="Flat change to Science Yield from Shallow (Coast) plots worked by this city" default="0"/>
		<Column name="ProductionModOrbitalUnits" type="integer" default="0"/>
		<Column name="ProductionModMilitaryUnits" type="integer" default="0"/>
		<Column name="ProductionModNavalUnits" type="integer" default="0"/>
		<Column name="VirtueCostModPerPopulation" type="float" notes="Percent change to global Culture cost for Virtues based on the city's population" default="0"/>
	</Table>
	<!-- Terrain Resource Effects - Yields -->
	<Table name="PlayerPerks_ResourceYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="ResourceType" type="text" reference="Resources(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
		<Column name="FlatHealth" type="integer" default="0"/>
	</Table>
	<!-- Terrain Effects - Yields -->
	<Table name="PlayerPerks_TerrainYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="TerrainType" type="text" reference="Terrains(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
	</Table>
	<!-- Terrain Improvement Effects - Yields -->
	<Table name="PlayerPerks_ImprovementYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="ImprovementType" type="text" reference="Improvements(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
		<Column name="FlatHealth" type="integer" default="0"/>
	</Table>
	<!-- City Effects - Yields -->
	<Table name="PlayerPerks_CityYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="CapitalOnly" type="boolean" default="false" notes="Indicates the effect will only apply to the Capital city (overrides Common flag)"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_GarrisonedCityYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
		<Column name="FlatHealth" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_OrbitedCityYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
		<Column name="FlatHealth" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_OrbitalUnitYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" default="0"/>
	</Table>
	<!-- City Effects - General -->
	<Table name="PlayerPerks_CityEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="CapitalOnly" type="boolean" default="false"/>
		<Column name="IntrigueGainModifier" type="integer" default="0"/>
		<Column name="DefensePerUsedTradeRoute" type="integer" default="0"/>
		<Column name="FreeTradeRouteSlots" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_CombatYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="YieldPerUnitKilled" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_TradeRouteEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="BuildingClassType" type="text" reference="BuildingClasses(Type)"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYield" type="integer" notnull="true" default="0"/>
		<Column name="PercentYield" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_ResourceQuantities">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="ResourceType" type="text" reference="Resources(Type)" notnull="true"/>
		<Column name="Quantity" type="integer" notnull="true" default="0"/>
		<Column name="QuantityPerResourceTile" type="integer" notnull="true" default="0"/>
	</Table>
	<Table name="PlayerPerks_AffinityLevelEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="AffinityType" type="text" reference="Affinity_Types(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="Yield" type="integer" notnull="true" default="0"/>
		<Column name="BuildingClassType" type="text" reference="BuildingClasses(Type)"/>
	</Table>
	<Table name="PlayerPerks_ResourceOrbitalCoverageRadius">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="ResourceType" type="text" reference="Resources(Type)" notnull="true"/>
		<Column name="RadiusChange" type="integer" notnull="true" default="0"/>
	</Table>
	<Table name="PlayerPerks_NationalSecurityProjectEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="CityHitPointsPercent" type="integer" default="0"/>
		<Column name="CityStrengthPercent" type="integer" default="0"/>
		<Column name="WonderProductionPercent" type="integer" default="0"/>
		<Column name="OperationSuccessPercent" type="integer" default="0"/>
		<Column name="AgentSurvivalPercent" type="integer" default="0"/>
		<Column name="HealthPercent" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_DiplomacyYieldEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="YieldType" type="text" reference="Yields(Type)" notnull="true"/>
		<Column name="FlatYieldPerAgreement" type="integer" default="0"/>
	</Table>
	<Table name="PlayerPerks_DiplomacyEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="FlatHealthPerAgreement" type="integer" default="0"/>
		<Column name="VirtueCostModPerAgreement" type="float" default="0"/>
	</Table>
	<Table name="PlayerPerks_UnitClassFreePromotions">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="UnitClassType" type="text" reference="UnitClasses(Type)" notnull="true"/>
		<Column name="PromotionType" type="text" reference="UnitPromotions(Type)"/>
	</Table>
	<Table name="PlayerPerks_UnitClassEffects">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="UnitClassType" type="text" reference="UnitClasses(Type)" notnull="true"/>
		<Column name="FreeToBuild" type="boolean" default="false"/>
		<Column name="CombatStrengthChange" type="integer" default="0"/>
	</Table>
	<!-- Unlocked Unit Missions -->
	<Table name="PlayerPerks_UnlockedMissions">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)" notnull="true"/>
		<Column name="MissionType" type="text" reference="Missions(Type)" notnull="true"/>
	</Table>
	<Table name="PlayerPerks_Flavors">
		<Column name="PlayerPerkType" type="text" reference="PlayerPerks(Type)"/>
		<Column name="FlavorType" type="text" reference="Flavors(Type)"/>
		<Column name="Flavor" type="integer" notnull="true"/>
	</Table>

And this Perk can now be tagged onto almost any "thing" in Beyond Earth. Buildings, Wonders, Civilization-Traits, Quest-Decisions, Loadout-Options, as a rewards from Technologies, Diplomatic Traits/Agreements etc. etc. etc. (Aside from Policies for some reaons, but Modders have created the framework required to add that) So you could have a Civilization that grants these bonuses, or you could have a building that grants these bonuses, or they could be the rewards of a Quest, etc.

I've gone back from Modding Beyond Earth to playing around with Civ 5 lately and I have to say... I'm really missing that system. :D
 
So Player Perks are similar to Policies or Traits except that the system is far more robust (as a general way to relate the system to us Fivers) ?

Are multiple Players able to pick the same Perk, or are they once-only per-game similar to Beliefs in Religions ?
 
PlayerPerks work in the same way that you'd for example use a dummy-building or a dummy-trait in Civ5. Just that you don't have to actually create any dummy-buildings or traits that you then have to add to the player with lua functionality.

If you want a wonder to have that effect you just add it to the Wonder in the <Building>-Table and the player who finishes the wonder will automatically get it. Or you add it to a normal building, then whenever a player finishes the first copy of that building he gets the bonuses attacked to the playerperk. Or you add it to a civilization and that Civilization will automatically have these bonuses.

Or you add it to all three of those and whenever a player meets one of the requirements he will get the bonuses. They're not mutually exclusive for one player.
 
I'd imagine, as with most modding systems, it'll be based on a scripting language of some description. They're mostly interchangeable anyhow given their high-level nature(s) in general. Shouldn't be too hard for folks to adapt even if it does change from LUA (bearing in mind LUA isn't always implemented to the standard, and .LUA files don't always necessarily actually contain what is coded as LUA).

The real kicker for me, not having a huge amount of experience in pure LUA, will be the variable scope for the scripting language chosen. Switching between Java / C# and JavaScript; there's a huge amount of difference between the two that makes designing cohesive systems in JavaScript a lot more of a pain (too many global / static references).
 
Something similiar to XML. just enter numbers and text.
I'm a simple person.
 
Something similiar to XML. just enter numbers and text

XML isn't a scripting language though; it's a markup language for modifying the game's database; we'll need a separate scripting language for more powerful modding capabilities (while maintaining modularity).

Personally I hope they'll still support SQL on the database side. So much more flexibility.
 
I don't know any programming languages, so I would imagine that no matter which one they go with, trying to build the mods I have in mind will be equally headache-inducing. I'll have to learn it from the ground up in any case. So, I don't have a preference, except that I hope that whatever they use is simple enough to learn that I won't have to go spend years in school laying the groundwork just to understand what's happening. . . .
 
I've never done LUA coding, so if they do XML and Python, I'd be in wonderland!

Though, learning LUA doesn't sound HORRIBLE...
 
I've never done LUA coding, so if they do XML and Python, I'd be in wonderland!

Though, learning LUA doesn't sound HORRIBLE...

Having used both I prefer Lua. Lua isn't at all strict about whitespace (accidentally mixing up my tabs and spaces were a annoying issue for me :p); its tables are a lot more flexible than Python's lists or dicts being essentially a combination of both and syntaxwise, they're not much different. I can assure you a transition to Lua will be almost painless: I didn't have much issue moving over to Python, I just prefer how freeform Lua feels in comparison.
 
Having used both I prefer Lua. Lua isn't at all strict about whitespace (accidentally mixing up my tabs and spaces were a annoying issue for me :p); its tables are a lot more flexible than Python's lists or dicts being essentially a combination of both and syntaxwise, they're not much different. I can assure you a transition to Lua will be almost painless: I didn't have much issue moving over to Python, I just prefer how freeform Lua feels in comparison.

Didn't know that, thanks!
 
Back
Top Bottom