From a825cb90cf50167f31d3fe09228cdc9c8b5ddb5f Mon Sep 17 00:00:00 2001 From: Gandalph Date: Tue, 3 Feb 2026 14:07:01 +0100 Subject: [PATCH 1/4] Revamp Trait Description Generation System for Easier Maintenance --- src/functions.js | 116 ++++++-------------------------------------- src/races.js | 123 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 138 insertions(+), 101 deletions(-) diff --git a/src/functions.js b/src/functions.js index 502a3faa2..046ea94ca 100644 --- a/src/functions.js +++ b/src/functions.js @@ -3139,109 +3139,15 @@ export function getShrineBonus(type) { return shrine_bonus; } -const valAdjust = { - promiscuous: false, - revive: false, - fast_growth: false, - spores: false, - terrifying: false, - fibroblast: true, - hivemind: true, - imitation: true, - elusive: true, - chameleon: true, - blood_thirst: true, - selenophobia: true, - hooved: true, - anthropophagite: true, - unfathomable: false, - darkness: false, - living_tool: false, - living_materials: true, - blurry: true, - playful: true, - ghostly: true, - environmentalist: true, - catnip: true, - anise: true -}; - function getTraitVals(trait, rank, species){ + //Get values from the trait let vals = traits[trait].hasOwnProperty('vars') ? traits[trait].vars(rank) : []; - if (valAdjust.hasOwnProperty(trait)){ - if (trait === 'fibroblast'){ - vals = [vals[0] * 5]; - } - else if (trait === 'hivemind' && global.race['high_pop']){ - vals = [vals[0] * traits.high_pop.vars()[0]]; - } - else if (trait === 'imitation'){ - vals.push(races[global.race['srace'] || 'protoplasm'].name); - } - else if (trait === 'elusive'){ - vals = [Math.round(((1/30)/(1/(30+vals[0]))-1)*100)]; - } - else if (trait === 'chameleon'){ - vals = [vals[0], Math.round(((1/30)/(1/(30+vals[1]))-1)*100)]; - } - else if (trait === 'blood_thirst'){ - vals = [Math.ceil(Math.log2(vals[0]))]; - } - else if (trait === 'selenophobia'){ - vals = [14 - vals[0], vals[0]]; - } - else if (trait === 'hooved'){ - vals.unshift(hoovedRename(false, species)); - } - else if (trait === 'anthropophagite'){ - vals = [vals[0] * 10000]; - } - else if (trait === 'living_materials'){ - vals = [global.resource.Lumber.name, global.resource.Plywood.name, global.resource.Furs.name, loc('resource_Amber_name')]; - } - else if (trait === 'environmentalist'){ - let coal = -(actions.city.coal_power.powered(true)); - let oil = -(actions.city.oil_power.powered(true)); - vals = [coal + vals[0], oil + vals[0] - 1, oil + vals[0] + 1, coal, oil, vals[1]]; - } - else if (trait === 'blurry'){ - if (global.race['warlord']){ - vals = [+((100/(100-vals[0])-1)*100).toFixed(1)]; - } - } - else if (trait === 'playful'){ - if (global.race['warlord']){ - vals = [vals[0] * 100, global.resource.Furs.name]; - } - } - else if (trait === 'ghostly'){ - if (global.race['warlord']){ - vals = [vals[0], +((vals[1] - 1) * 100).toFixed(0), global.resource.Soul_Gem.name]; - } - } - else if (trait === 'catnip' || trait === 'anise'){ - vals = rank <= 2 ? [] : (rank === 3 ? [vals[0]] : [vals[0],vals[1]]); - } - else if (!valAdjust[trait]){ - vals = []; - } - } - else if (trait === 'elemental'){ - switch (traits.elemental.vars(rank)[0]){ - case 'electric': - vals = [loc(`element_electric`), traits.elemental.vars(rank)[1], traits.elemental.vars(rank)[5]]; - break; - case 'acid': - vals = [loc(`element_acid`), traits.elemental.vars(rank)[2], traits.elemental.vars(rank)[5]]; - break; - case 'fire': - vals = [loc(`element_fire`), traits.elemental.vars(rank)[3], traits.elemental.vars(rank)[5]]; - break; - case 'frost': - vals = [loc(`element_frost`), traits.elemental.vars(rank)[4], traits.elemental.vars(rank)[5], loc('city_biolab')]; - break; - } + + //Use the desc_function system to modify trait values for descriptions, if this trait has a description function + if (traits[trait].hasOwnProperty('desc_function')) { + vals = traits[trait].desc_function(vals, species); } + return vals; } @@ -3375,6 +3281,16 @@ const altTraitDesc = { playful: 'warlord', }; +export function convert_divisor (input) { + //The input value is used to multiply a divisor, use X/(1+X) to indicate a percentage change in descriptions. + return +(100 * input / (100 + input)).toFixed(2); +} + +export function ambush_divisor_to_percentage(input) { + //The input is a change to the base ambush divisor of 30. Convert to a percentage change in ambush frequency. + return +(100 * (1 - (30 / (input + 30)))).toFixed(2); +} + export function getTraitDesc(info, trait, opts){ let fanatic = opts['fanatic'] || false; let tpage = opts['tpage'] || false; // Trait page (on wiki) diff --git a/src/races.js b/src/races.js index 20098de8d..5b9749f4b 100644 --- a/src/races.js +++ b/src/races.js @@ -2,7 +2,7 @@ import { global, seededRandom, save, webWorker, power_generated, keyMultiplier, import { loc } from './locale.js'; import { defineIndustry } from './industry.js'; import { setJobName, jobScale, loadFoundry } from './jobs.js'; -import { vBind, clearElement, popover, removeFromQueue, removeFromRQueue, calc_mastery, gameLoop, getEaster, getHalloween, randomKey, modRes, messageQueue } from './functions.js'; +import { vBind, clearElement, popover, removeFromQueue, removeFromRQueue, calc_mastery, gameLoop, getEaster, getHalloween, randomKey, modRes, messageQueue, convert_divisor, ambush_divisor_to_percentage, hoovedRename } from './functions.js'; import { setResourceName, drawResourceTab, atomic_mass } from './resources.js'; import { buildGarrison, govEffect, govTitle, armyRating, govCivics } from './civics.js'; import { govActive, removeTask, defineGovernor } from './governor.js'; @@ -733,6 +733,10 @@ export const traits = { fast_growth: { // Greatly increases odds of population growth each cycle name: loc('trait_fast_growth_name'), desc: loc('trait_fast_growth'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'genus', origin: 'insectoid', taxonomy: 'utility', @@ -891,6 +895,10 @@ export const traits = { spores: { // Birthrate increased when it's windy name: loc('trait_spores_name'), desc: loc('trait_spores'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'genus', origin: 'fungi', taxonomy: 'utility', @@ -960,6 +968,10 @@ export const traits = { elusive: { // Spies are never caught name: loc('trait_elusive_name'), desc: loc('trait_elusive'), + desc_function: function (vals, species) { + vals[0] = ambush_divisor_to_percentage(vals[0]); + return vals; + }, type: 'genus', origin: 'fey', taxonomy: 'utility', @@ -1374,6 +1386,10 @@ export const traits = { darkness: { name: loc('trait_darkness_name'), desc: loc('trait_darkness'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'genus', origin: 'eldritch', taxonomy: 'utility', @@ -1401,6 +1417,10 @@ export const traits = { unfathomable: { name: loc('trait_unfathomable_name'), desc: loc('trait_unfathomable'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'genus', origin: 'eldritch', taxonomy: 'utility', @@ -1691,6 +1711,10 @@ export const traits = { playful: { // Hunters are Happy name: loc('trait_playful_name'), desc: loc('trait_playful'), + desc_function: function (vals, species) { + if (global.race['warlord']) vals = [vals[0] * 100, global.resource.Furs.name]; + return vals; + }, type: 'major', origin: 'vulpine', taxonomy: 'production', @@ -1777,6 +1801,10 @@ export const traits = { hooved: { // You require special footwear name: loc('trait_hooved_name'), desc: loc('trait_hooved'), + desc_function: function (vals, species) { + vals.unshift(hoovedRename(false, species)); + return vals; + }, type: 'major', origin: 'centaur', taxonomy: 'utility', @@ -2304,6 +2332,11 @@ export const traits = { chameleon: { // Barracks have less soldiers name: loc('trait_chameleon_name'), desc: loc('trait_chameleon'), + desc_function: function(vals, species) { + //vals[1] represents the addition to the ambush chance divisor, and needs conversion before display + vals[1] = ambush_divisor_to_percentage(vals[1]); + return vals; + }, type: 'major', origin: 'gecko', taxonomy: 'combat', @@ -2435,6 +2468,10 @@ export const traits = { selenophobia: { // Moon phase directly affects productivity, on average this is slightly negative name: loc('trait_selenophobia_name'), desc: loc('trait_selenophobia'), + desc_function: function (vals, species) { + vals = [14 - vals[0], vals[0]]; + return vals; + }, type: 'major', origin: 'arraak', taxonomy: 'production', @@ -2646,6 +2683,10 @@ export const traits = { catnip: { // Attract Cats name: loc('trait_catnip_name'), desc: loc('trait_catnip'), + desc_function: function(vals, species) { + vals = vals[0] > 1 ? vals[1] === 4 ? vals : [vals[0]] : []; + return vals; + }, type: 'major', origin: 'entish', taxonomy: 'production', @@ -2777,6 +2818,10 @@ export const traits = { anise: { // Attract Dogs name: loc('trait_anise_name'), desc: loc('trait_anise'), + desc_function: function(vals, species) { + vals = vals[0] > 1 ? vals[1] === 3 ? vals : [vals[0]] : []; + return vals; + }, type: 'major', origin: 'pinguicula', taxonomy: 'production', @@ -3094,6 +3139,10 @@ export const traits = { hivemind: { // Jobs with low citizen counts assigned to them have reduced output, but those with high numbers have increased output. name: loc('trait_hivemind_name'), desc: loc('trait_hivemind'), + desc_function: function (vals, species) { + if (global.race['high_pop']) vals[0] *= traits.high_pop.vars()[0]; + return vals; + }, type: 'major', origin: 'antid', taxonomy: 'production', @@ -3146,6 +3195,10 @@ export const traits = { blood_thirst: { // Combat causes a temporary increase in morale name: loc('trait_blood_thirst_name'), desc: loc('trait_blood_thirst'), + desc_function: function (vals, species) { + vals[0] = Math.ceil(Math.log2(vals[0])); + return vals; + }, type: 'major', origin: 'sharkin', taxonomy: 'combat', @@ -3278,6 +3331,12 @@ export const traits = { environmentalist: { // Use renewable energy instead of dirtly coal & oil power. name: loc('trait_environmentalist_name'), desc: loc('trait_environmentalist'), + desc_function: function (vals, species) { + let coal = -(actions.city.coal_power.powered(true)); + let oil = -(actions.city.oil_power.powered(true)); + vals = [coal + vals[0], oil + vals[0] - 1, oil + vals[0] + 1, coal, oil, vals[1]]; + return vals; + }, type: 'major', origin: 'dryad', taxonomy: 'utility', @@ -3357,6 +3416,10 @@ export const traits = { revive: { // Soldiers sometimes self res name: loc('trait_revive_name'), desc: loc('trait_revive'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'major', origin: 'phoenix', taxonomy: 'combat', @@ -3462,6 +3525,11 @@ export const traits = { blurry: { // Increased success chance of spies // Warlord improves Reapers name: loc('trait_blurry_name'), desc: loc('trait_blurry'), + desc_function: function(vals, species) { + //Requires different adjustments in warlord and in normal play + global.race['warlord']?vals[0] = +((100/(100-vals[0])-1)*100).toFixed(1):vals[0] = convert_divisor(vals[0]); + return vals; + }, type: 'major', origin: 'yeti', taxonomy: 'utility', @@ -3542,6 +3610,10 @@ export const traits = { ghostly: { // More souls from hunting and soul wells, increased soul gem drop chance name: loc('trait_ghostly_name'), desc: loc('trait_ghostly'), + desc_function: function (vals, species) { + if (global.race['warlord']) vals = [vals[0], +((vals[1] - 1) * 100).toFixed(0), global.resource.Soul_Gem.name]; + return vals; + }, type: 'major', origin: 'wendigo', taxonomy: 'utility', @@ -3710,6 +3782,10 @@ export const traits = { terrifying: { // No one will trade with you name: loc('trait_terrifying_name'), desc: loc('trait_terrifying'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'major', origin: 'balorg', taxonomy: 'resource', @@ -4028,6 +4104,10 @@ export const traits = { imitation: { // You are an imitation of another species name: loc('trait_imitation_name'), desc: loc('trait_imitation'), + desc_function: function(vals, species) { + vals.push(races[global.race['srace'] || 'protoplasm'].name); + return vals; + }, type: 'major', origin: 'synth', taxonomy: 'utility', @@ -4242,6 +4322,11 @@ export const traits = { anthropophagite: { name: loc('trait_anthropophagite_name'), desc: loc('trait_anthropophagite'), + desc_function: function (vals, species) { + //vals[0] stores the number of tens of thousands of food that are got when a pop dies + vals[0] = 10000 * vals[0]; + return vals; + }, type: 'major', origin: 'ghast', taxonomy: 'utility', @@ -4268,6 +4353,10 @@ export const traits = { living_tool: { name: loc('trait_living_tool_name'), desc: loc('trait_living_tool'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'major', origin: 'shoggoth', taxonomy: 'resource', @@ -4430,6 +4519,11 @@ export const traits = { living_materials: { name: loc('trait_living_materials_name'), desc: loc('trait_living_materials'), + desc_function: function (vals, species) { + //Get current names for affected resources + vals = [global.resource.Lumber.name, global.resource.Plywood.name, global.resource.Furs.name, loc('resource_Amber_name')]; + return vals; + }, type: 'major', origin: 'lichen', taxonomy: 'resource', @@ -4485,6 +4579,24 @@ export const traits = { elemental: { name: loc('trait_elemental_name'), desc: loc('trait_elemental'), + desc_function: function (vals, species) { + //Pick the right display values based on which element is currently active + switch (vals[0]){ + case 'electric': + vals = [loc(`element_electric`), vals[1], vals[5]]; + break; + case 'acid': + vals = [loc(`element_acid`), vals[2], vals[5]]; + break; + case 'fire': + vals = [loc(`element_fire`), vals[3], vals[5]]; + break; + case 'frost': + vals = [loc(`element_frost`), vals[4], vals[5], loc('city_biolab')]; + break; + } + return vals; + }, type: 'major', origin: 'wyvern', taxonomy: 'utility', @@ -4919,6 +5031,10 @@ export const traits = { promiscuous: { // Organics Growth Bonus, Synths Population Discount name: loc('trait_promiscuous_name'), desc: loc('trait_promiscuous'), + desc_function: function(vals, species) { + //Delete all values from the display + return []; + }, type: 'minor', vars(r){ return [1,0.02]; }, }, @@ -4960,6 +5076,11 @@ export const traits = { fibroblast: { // Healing Bonus name: loc('trait_fibroblast_name'), desc: loc('trait_fibroblast'), + desc_function: function(vals, species) { + //Multiply by 5 for display + vals[0] = vals[0] * 5; + return vals; + }, type: 'minor', vars(r){ return [2]; }, }, From dbaa372c51e8fbfbc69816b6710cbf5992f37ed7 Mon Sep 17 00:00:00 2001 From: Gandalph Date: Mon, 9 Feb 2026 10:35:53 +0100 Subject: [PATCH 2/4] Major wiki and trait description overhaul: Major updates: Refactoring work in functions.js and races.js to move trait extra descriptions into the definition for each trait, instead of having an array of exceptions call out when extra descriptions are needed. Should improve maintainability. Extra descriptions can also now access the values of the trait at its current selected rank, allowing the extra descriptions to dynamically change their values on the Trait page in the wiki just like the normal descriptions do. Added wiki articles: -Added a description of Ambush Odds to the wiki article for Hell Patrol Strategy. -Added a description and list of Basic Jobs and Mining Jobs to the Mechanics page. -Added a description and list of technologies affecting the Science Level and High Tech Level to the Mechanics page. -Added a description of Population Growth mechanics to the Mechanics page, including the effects of the Upper Bound and Lower Bound values. -Added missing event articles in the Major and Minor events pages related to the Rogue, Chicken, and Aggressive traits. Minor Updates: Updated wiki articles: -Added information about how much hazards are mitigated by "Partial Mitigation" equipment in the Hazards section of Spire mechanics. -Made it more clear that the Scout Mech reduces 1 percentage point of terrain penalty, and not 1% of the current penalty. -Added missing loot multipliers to the article on Combat Loot. -Corrected article on Ancient Pillars to reflect that the discount for the tower is not always 12, but depends on the difficulty at which the pillar was completed. Wiki UI: -Traits page on the wiki now has some style information added to prevent rank down button from jumping around while being clicked on. Trait Descriptions updated: -Aggressive: Added links to new Events articles about added events. Changed wording to accomodate added events. -Autoignition: Changed wording to reflect the percentage of the bonus that is lost. Previous wording was ambiguous between percent of bonus and percentage points of knowldge bonus lost. -Blood Thirst: Added extra description that details that the Heir of Genghis Khan achievement can still be earned. Also describes scaling of the bonus and sources of Blood Thirst stacks. -Blubber: Updated description to reflect the fact that normal oil production is disabled (this was previously not stated). Also added information about maximum corpse storage and old age deaths. -Blurry: Added information about how chances of success in espionage are affected. Also fixed math error in how surveyor death odds change (increase in divisor somewhat less effective than decrease in numerator when considering probabilities). -Calm: Added information about how Zen slots are filled. Added extra description with scaling calculation. -Cannibalize: Added descriptions of the buffs, information about how they interact with each other, and how refreshes add time to the current remaining time. Added extra description showing effects of each related technology on buff duration. -Chameleon: Reworked description to reflect new explanation of how Ambush Odds work, adding link. Added information about how conflict with Elusive resolves. Added extra description with information about interaction with Grenadier and Barracks capacity. -Chicken: Removed flavor text. Added information about specifically what changes in hell. Reworked description to reflect inclusion of information about Ambush Odds. Added links to new articles about Chicken and Chicken Feast events. -Cold Blooded: Updated incorrect job list. Added references to new Basic Jobs and Mining Jobs articles. -Curious: Reworked wording to add link to event article for Curious event. -Darkness: Added information about probabilities and scaling. -Deconstructor: Added clarification that Nanites are used to build new population. Added information about how nanites are constructed. Added information about some buildings also requiring Nanites to construct. -Elemental: Added extra description detailing how the Element is chosen, which planet types correspond to which elements, and what all four possible effects are. -Elusive: Reworked description to reflect new explanation of Ambush Odds. Clarified conflict with Chameleon. -Empowered: Added extra description to clarify interactions with Fanaticism, Deify Ancients, Mutation, Mimic, and Imitation. -Fast Growth: Now has an explanation of what specifically it does with links to the relevant wiki article. -Forager: Updated with link to Job Types article. -Free Spirit: Updated with link to Job Types article. -Ghostly: Updated incorrect mathematics in determining Soul Gem drop rate (a decrease in divisor is somewhat more effective than increasing numerator). -Grenadier: Added undocumented effect which causes soldiers to provide 75% more authority. Added undocumented effect that reduces military crew requirements for ships as well as soldier housing capacity. Added Extra desctiption that shows magnitudes of reductions, interaction with Nanoweave Hammocks, and interaction with Chameleon and Bunk Beds. -Hivemind: Jobs list was incorrect. Moved into extra descriptions. Extra descriptions now list all jobs, explain scaling calculations (including special soldier scaling calculations), diminishing returns calculations, and special interaction with Swift, Living Tool, Strong, and the Educator governor. -Humpback: Updated incorrect list of jobs. Included link to new Job Types article. -Imitation: Added extra description with information about interactions with Hybrid and Custom Hybrid, Requirement to take Synthetic genus to include during custom creation, Information about how to pick the target, interaction with Empowered, and interaction with Mutation system. -Linked: Added extra description with diminishing returns calculation. -Living Materials: Added information about magnitude and speed of cost reductions. Added extra description detailing when cost reductions start, how they are reset after each purchase, and interactions with resource replacement traits such as Flier, Sappy, Heat genus, and Evil. -Living Tool: Added undocumented 25% boost to basic job income. Added information about how this boost conflicts with the Swift trait. Added undocumented effect on crafting speed. Added link to new Technology Levels article. Added specific bonuses to different jobs. Added link to new Job Types article. -Logical: Reworked wording to reflect new explanation of Technology Levels. Added links to new Technology Levels article. Removed extra description. -Mimic: Added information about how and where to select the target genus. Added extra description detailing interactions with the Empowered trait and mutation system. -Mistrustful: Updated description to make clear that it adds extra percentage points of hate, not extra percent of hate gained. -Ocular Power: Added extra description about what the powers are and what they do. Included links to new wiki articles. -Pack Mentality: Updated description to reflect current names of housing buildings. -Parasite: Added undocumented combat bonus. -Powered: Updated incorrect jobs list and put in reference to new Job Types article. -Promiscuous: Added information about actual effect and link to new Population Growth article. Added undocumented cost reduction for Synthetic species construction. -Revive: Reworked description to add information about interaction with weather, combat success, and hell patrols. -Rogue: Reworked wording to add link to new article on event added by Rogue. Added undocumented second limit of 4% of knowledge cap. -Sky Lover: Added link to new Job Types article. -Sniper: Reworked description to increase clarity about how scaling works with subsequent upgrades. Added list of affected technologies to extra description. -Solitary: Current names of housing units are now used for increased clarity about which buildings are affected. -Spores: Added information about actual effects, and link to new wiki article on Population Growth. Added interaction with Parasite. -Strong: Added link to wiki article on Job Types. Added extra description detailing interaction with similar bonus from Living Tool and Strong. -Stubborn: Added links to new Technology Levels article, as well as exceptions for cost increase. -Swift: Added uncodumented bonus to Basic Jobs. Added interaction with Living Tool. Added extrta description detailing interaction with Strong. -Terrifying: Added information about how Titanium scaling happens and which loot pool it belongs to. Added undocumented effect of getting the bonus of Corrupt Politicians research for free. -Tough: Added link to new Job Types wiki article. -Tusked: Added link to new Job Types article. Added information about conflict with Living Tool. Added information about Moisture's effect on Combat Power bonus. Added information about how much combat bonus decreases in Hell. Added extra description detailing how moisture level is calculated including biome types and weather. -Unfathomable: Added undocumented information about number of surface dweller species available, capture difficulty, production bonus scaling, and interaction with Ancient Nightmare. -Unstable: Reworked wording and added extra description to detail undocumented scaling behavior. -Weak: Updated incorrect job list. Added link to new Job Types article. Consistency Updates: -All references to the phrase "Basic Jobs" everywhere are now links to the wiki article on Job Types. -All references to "Mining Jobs" in the trait descriptions and extra descriptions are now links to the wiki article on Job Types. -All references to "Population Growth Lower Bound" in trait descriptions are now links to the wiki article on Job Types. -All references to "Population Growth Upper Bound" in trait descriptions are now links to the wiki article on Job Types. -All references to "Science Level" in trait descriptions are now links to the wiki article on Technology Levels. -All references to "High Tech Level" in trait descriptions are now links to the wiki article on Technology Levels. -All references to "Ambush Odds" in trait descriptions are now links to the wiki article on Hell Patrol Strategy (which now includes an explanation of Ambush Odds). -The Aggressive, Chicken, Curious, and Rogue traits now all have links to the Events articles for their respective added events. --- src/functions.js | 148 +++++++------- src/jobs.js | 4 +- src/races.js | 442 ++++++++++++++++++++++++++++++++++++------ src/wiki/combat.js | 9 +- src/wiki/events.js | 56 +++++- src/wiki/hell.js | 17 +- src/wiki/mechanics.js | 52 ++++- src/wiki/p_res.js | 2 + strings/strings.json | 233 +++++++++++++++------- 9 files changed, 743 insertions(+), 220 deletions(-) diff --git a/src/functions.js b/src/functions.js index 046ea94ca..9646353fd 100644 --- a/src/functions.js +++ b/src/functions.js @@ -1,6 +1,6 @@ import { global, save, message_logs, message_filters, webWorker, keyMultiplier, intervals, resizeGame, atrack, p_on, quantum_level, tmp_vars } from './vars.js'; import { loc } from './locale.js'; -import { races, traits, genus_def, traitSkin, fathomCheck } from './races.js'; +import { races, traits, genus_def, traitSkin, fathomCheck} from './races.js'; import { actions, actionDesc } from './actions.js'; import { jobScale } from './jobs.js'; import { universe_affixes } from './space.js'; @@ -3142,15 +3142,50 @@ export function getShrineBonus(type) { function getTraitVals(trait, rank, species){ //Get values from the trait let vals = traits[trait].hasOwnProperty('vars') ? traits[trait].vars(rank) : []; + if (traits[trait] == traits.hooved) vals[1] = species; //Use the desc_function system to modify trait values for descriptions, if this trait has a description function if (traits[trait].hasOwnProperty('desc_function')) { - vals = traits[trait].desc_function(vals, species); + vals = traits[trait].desc_function(vals); } return vals; } +function getExtraData(trait, rank, species) { + //Get trait data in case it's needed to format the extra data + let vals = traits[trait].hasOwnProperty('vars') ? traits[trait].vars(rank) : []; + if (traits[trait] == traits.hooved) vals[1] = species; + return traits[trait].desc_extra(vals); +} + + +export function warningText(input) { + return `${loc(input)}` +} + +export function warningTextNoLoc(input) { + return `${input}` +} + +export function linkText(input, link) { + return `${loc(input)}` +} + +export function linkTextNoColor(input, link) { + return `${loc(input)}` +} + +export function rName(r){ + let res = global.hasOwnProperty('resource') && global.resource.hasOwnProperty(r) ? global.resource[r].name : loc(`resource_${r}_name`); + return `${res}`; +} + +export function convertDivisor (input) { + //The input value is a percentage used to multiply a divisor, use X/(1+X) to indicate a percentage change in descriptions. + return +(100 * input / (100 + input)).toFixed(2); +} + export function hoovedRename(style, species=global.race.species){ let type = species === global.race.species ? global.race.maintype || races[species].type : races[species].type; if (species === 'sludge'){ @@ -3212,68 +3247,6 @@ export function hoovedRename(style, species=global.race.species){ } } -const traitExtra = { - infiltrator: [ - loc(`wiki_trait_effect_infiltrator_ex1`), - loc(`wiki_trait_effect_infiltrator_ex2`,[ - [ - `${loc('tech_steel')}`, `${loc('tech_electricity')}`, `${loc('tech_electronics')}`, `${loc('tech_fission')}`, - `${loc('tech_rocketry')}`, `${loc('tech_artificial_intelligence')}`, `${loc('tech_quantum_computing')}`, - `${loc('tech_virtual_reality')}`, `${loc('tech_shields')}`, `${loc('tech_ai_core')}`, `${loc('tech_graphene_processing')}`, - `${loc('tech_nanoweave')}`, `${loc('tech_orichalcum_analysis')}`, `${loc('tech_infernium_fuel')}` - ].join(', ') - ]) - ], - heavy: [ - loc(`wiki_trait_effect_heavy_ex1`,[rName('Stone'),rName('Cement'),rName('Wrought_Iron')]) - ], - sniper: [ - loc(`wiki_trait_effect_sniper_ex1`), - ], - hooved: [ - function(opts){return loc(`wiki_trait_effect_hooved_ex1`,[hoovedRename(false, opts.species)])}, - loc(`wiki_trait_effect_hooved_ex2`,[ - `${global.resource.hasOwnProperty('Lumber') ? global.resource.Lumber.name : loc('resource_Lumber_name')}`, - `${global.resource.hasOwnProperty('Copper') ? global.resource.Copper.name : loc('resource_Copper_name')}`, - `${global.resource.hasOwnProperty('Iron') ? global.resource.Iron.name : loc('resource_Iron_name')}`, - `${global.resource.hasOwnProperty('Steel') ? global.resource.Steel.name : loc('resource_Steel_name')}`, - `${global.resource.hasOwnProperty('Adamantite') ? global.resource.Adamantite.name : loc('resource_Adamantite_name')}`, - `${global.resource.hasOwnProperty('Orichalcum') ? global.resource.Orichalcum.name : loc('resource_Orichalcum_name')}`, - 12,75,150,500,5000 - ]), - loc(`wiki_trait_effect_hooved_ex3`), - function(opts){return loc(`wiki_trait_effect_hooved_ex4`,[`${5}`,hoovedRename(false, opts.species)])}, - loc(`wiki_trait_effect_hooved_ex5`,[ - `${global.resource.hasOwnProperty('Lumber') ? global.resource.Lumber.name : loc('resource_Lumber_name')}`, - `${global.resource.hasOwnProperty('Copper') ? global.resource.Copper.name : loc('resource_Copper_name')}` - ]), - ], - instinct: [ - loc(`wiki_trait_effect_instinct_ex1`,[6.67,loc('galaxy_chthonian'),10]) - ], - logical: [ - loc(`wiki_trait_effect_logical_ex1`,[ - global.tech.hasOwnProperty('science') ? global.tech.science : 0, - global.tech.hasOwnProperty('high_tech') ? global.tech.high_tech : 0 - ]), - ], - high_pop: [ - loc(`wiki_trait_effect_high_pop_ex1`) - ], - flier: [ - loc(`wiki_trait_effect_flier_ex1`) - ], - unfathomable: [ - loc(`wiki_trait_effect_unfathomable_ex1`), - loc(`wiki_trait_effect_unfathomable_ex2`) - ] -}; - -function rName(r){ - let res = global.hasOwnProperty('resource') && global.resource.hasOwnProperty(r) ? global.resource[r].name : loc(`resource_${r}_name`); - return `${res}`; -} - const altTraitDesc = { befuddle: 'warlord', blurry: 'warlord', @@ -3281,15 +3254,6 @@ const altTraitDesc = { playful: 'warlord', }; -export function convert_divisor (input) { - //The input value is used to multiply a divisor, use X/(1+X) to indicate a percentage change in descriptions. - return +(100 * input / (100 + input)).toFixed(2); -} - -export function ambush_divisor_to_percentage(input) { - //The input is a change to the base ambush divisor of 30. Convert to a percentage change in ambush frequency. - return +(100 * (1 - (30 / (input + 30)))).toFixed(2); -} export function getTraitDesc(info, trait, opts){ let fanatic = opts['fanatic'] || false; @@ -3304,7 +3268,7 @@ export function getTraitDesc(info, trait, opts){ let traitDesc = traitSkin('desc', trait, species); if (tpage && ['genus','major'].includes(traits[trait].type)){ - rank = `«${loc(`wiki_trait_rank`)} {{ rank }}»`; + rank = `«${loc(`wiki_trait_rank`)} {{ rank }}»`; } if (tpage || rpage){ info.append(`

${traitName}

${rank}
`); @@ -3351,13 +3315,20 @@ export function getTraitDesc(info, trait, opts){ info.append(`
${trait_desc}
`); } } - if (traitExtra[trait] && (tpage || rpage)){ - traitExtra[trait].forEach(function(te){ - if (typeof te !== 'string'){ - te = te(opts); - } - info.append(`
${te}
`); - }); + if (traits[trait].hasOwnProperty('desc_extra') && (tpage || rpage)) { + if (tpage && ['genus','major'].includes(traits[trait].type)) { + info.append(`
`); + } + else { + let extraData = getExtraData(trait, trank, species); + + extraData.forEach(function(te){ + if (typeof te !== 'string'){ + te = te(opts); + } + info.append(`
${te}
`); + }); + } } if (tpage && ['genus','major'].includes(traits[trait].type)){ @@ -3380,6 +3351,19 @@ export function getTraitDesc(info, trait, opts){ let key = altTraitDesc[trait] && global.race.hasOwnProperty(altTraitDesc[trait]) ? altTraitDesc[trait] : 'effect'; return loc(`wiki_trait_${key}_${trait}`, getTraitVals(trait, rk, species)); }, + getTraitExtra(rk) { + let accumulator = ''; + let extraData = getExtraData(trait, rk, species); + + extraData.forEach(function(te){ + if (typeof te !== 'string'){ + te = te(opts); + } + accumulator += `
${te}
`; + }); + + return accumulator; + }, up(){ switch (data.rank){ case 0.1: @@ -3433,4 +3417,4 @@ export function getTraitDesc(info, trait, opts){ }, }); } -} +} \ No newline at end of file diff --git a/src/jobs.js b/src/jobs.js index 3094ea381..617e9be8a 100644 --- a/src/jobs.js +++ b/src/jobs.js @@ -711,7 +711,7 @@ export function loadServants(){ }); popover('servants', function(){ - return loc('civics_servants_desc'); + return loc('civics_servants_desc', [loc('wiki_mechanics_job_type_basic')]); }, { elm: `#servants .serveHeader` @@ -1026,7 +1026,7 @@ export function loadFoundry(servants){ if (servants){ popover('servantFoundry', function(){ - return loc('civics_skilled_servants_desc'); + return loc('civics_skilled_servants_desc', loc('wiki_mechanics_job_type_basic')); }, { elm: `#skilledServants .foundry`, diff --git a/src/races.js b/src/races.js index 5b9749f4b..0a7838716 100644 --- a/src/races.js +++ b/src/races.js @@ -2,13 +2,13 @@ import { global, seededRandom, save, webWorker, power_generated, keyMultiplier, import { loc } from './locale.js'; import { defineIndustry } from './industry.js'; import { setJobName, jobScale, loadFoundry } from './jobs.js'; -import { vBind, clearElement, popover, removeFromQueue, removeFromRQueue, calc_mastery, gameLoop, getEaster, getHalloween, randomKey, modRes, messageQueue, convert_divisor, ambush_divisor_to_percentage, hoovedRename } from './functions.js'; +import { vBind, clearElement, popover, removeFromQueue, removeFromRQueue, calc_mastery, gameLoop, getEaster, getHalloween, randomKey, modRes, messageQueue, linkText, linkTextNoColor, warningText, warningTextNoLoc, rName, convertDivisor, hoovedRename } from './functions.js'; import { setResourceName, drawResourceTab, atomic_mass } from './resources.js'; import { buildGarrison, govEffect, govTitle, armyRating, govCivics } from './civics.js'; import { govActive, removeTask, defineGovernor } from './governor.js'; import { unlockAchieve, unlockFeat, alevel } from './achieve.js'; import { highPopAdjust, teamster } from './prod.js'; -import { actions, checkTechQualifications, drawCity, drawTech, structName, initStruct } from './actions.js'; +import { actions, checkTechQualifications, drawCity, drawTech, structName, initStruct, housingLabel, wardenLabel } from './actions.js'; import { arpa } from './arpa.js'; import { renderEdenic } from './edenic.js'; import { events, eventList } from './events.js'; @@ -389,6 +389,9 @@ export const traits = { instinct: { // Avoids Danger name: loc('trait_instinct_name'), desc: loc('trait_instinct'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_instinct_ex1`,[6.67,warningText('galaxy_chthonian'),10])]; + }, type: 'genus', genus: 'herbivore', taxonomy: 'utility', @@ -416,6 +419,10 @@ export const traits = { forager: { // Will eat just about anything name: loc('trait_forager_name'), desc: loc('trait_forager'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'genus', origin: 'hybrid', taxonomy: 'resource', @@ -470,6 +477,11 @@ export const traits = { weak: { // Lumberjacks, miners, and quarry workers are 10% less effective name: loc('trait_weak_name'), desc: loc('trait_weak'), + desc_function: function(vals) { + vals[1] = loc('job_lumberjack'); + vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'genus', origin: 'small', taxonomy: 'resource', @@ -522,6 +534,13 @@ export const traits = { strong: { // Increased manual resource gain name: loc('trait_strong_name'), desc: loc('trait_strong'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_strong_ex1`, [warningText('trait_living_tool_name'), warningText('trait_swift_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types')])]; + }, type: 'genus', origin: 'giant', taxonomy: 'resource', @@ -549,6 +568,17 @@ export const traits = { cold_blooded: { // Weather affects productivity name: loc('trait_cold_blooded_name'), desc: loc('trait_cold_blooded'), + desc_function: function(vals) { + vals[2] = loc('job_quarry_worker'); + vals[3] = loc('job_crystal_miner'); + vals[4] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + vals[5] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[6] = loc('cold'); + vals[7] = loc('rain'); + vals[8] = loc('hot'); + vals[9] = loc('sunny'); + return vals; + }, type: 'genus', origin: 'reptilian', taxonomy: 'production', @@ -601,6 +631,9 @@ export const traits = { flier: { // Use Clay instead of Stone or Cement name: loc('trait_flier_name'), desc: loc('trait_flier'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_flier_ex1`)]; + }, type: 'genus', origin: 'avian', taxonomy: 'resource', @@ -654,6 +687,11 @@ export const traits = { sky_lover: { // Mining type jobs more stressful name: loc('trait_sky_lover_name'), desc: loc('trait_sky_lover'), + desc_function: function(vals) { + vals[1] = loc('job_quarry_worker'); + vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'genus', origin: 'avian', taxonomy: 'utility', @@ -706,6 +744,14 @@ export const traits = { high_pop: { // Population is higher, but less productive name: loc('trait_high_pop_name'), desc: loc('trait_high_pop'), + desc_function: function(vals) { + vals[3] = linkTextNoColor('wiki_mechanics_pop_growth_lower_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + vals[4] = linkTextNoColor('wiki_mechanics_pop_growth_upper_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + return vals; + }, + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_high_pop_ex1`)]; + }, type: 'genus', origin: 'insectoid', taxonomy: 'utility', @@ -733,9 +779,9 @@ export const traits = { fast_growth: { // Greatly increases odds of population growth each cycle name: loc('trait_fast_growth_name'), desc: loc('trait_fast_growth'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_mechanics_pop_growth_lower_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + return vals; }, type: 'genus', origin: 'insectoid', @@ -895,9 +941,10 @@ export const traits = { spores: { // Birthrate increased when it's windy name: loc('trait_spores_name'), desc: loc('trait_spores'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + vals[3] = loc('trait_parasite_name'); + vals[4] = linkTextNoColor('wiki_mechanics_pop_growth_lower_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + return vals; }, type: 'genus', origin: 'fungi', @@ -968,8 +1015,10 @@ export const traits = { elusive: { // Spies are never caught name: loc('trait_elusive_name'), desc: loc('trait_elusive'), - desc_function: function (vals, species) { - vals[0] = ambush_divisor_to_percentage(vals[0]); + desc_function: function (vals) { + vals[1] = loc('trait_chameleon_name'); + vals[2] = loc('trait_elusive_name'); + vals[3] = linkTextNoColor('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy'); return vals; }, type: 'genus', @@ -1305,6 +1354,12 @@ export const traits = { powered: { name: loc('trait_powered_name'), desc: loc('trait_powered'), + desc_function: function(vals) { + vals[2] = loc('job_lumberjack'); + vals[3] = loc('job_cement_worker'); + vals[4] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'genus', origin: 'synthetic', taxonomy: 'utility', @@ -1386,9 +1441,9 @@ export const traits = { darkness: { name: loc('trait_darkness_name'), desc: loc('trait_darkness'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + vals[0] = +(100 / (7 - vals[0])).toFixed(2); + return vals; }, type: 'genus', origin: 'eldritch', @@ -1417,9 +1472,16 @@ export const traits = { unfathomable: { name: loc('trait_unfathomable_name'), desc: loc('trait_unfathomable'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + vals[1] = +(80 / vals[1]).toFixed(0); + vals[2] = +(vals[2] / 5).toFixed(3); + vals[3] = loc('achieve_nightmare_name'); + return vals; + }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_unfathomable_ex1`), + loc(`wiki_trait_effect_unfathomable_ex2`)]; }, type: 'genus', origin: 'eldritch', @@ -1632,6 +1694,10 @@ export const traits = { curious: { // University cap boosted by citizen count, curious random events name: loc('trait_curious_name'), desc: loc('trait_curious'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('trait_curious_name', 'wiki.html#major-events-m_curious'); + return vals; + }, type: 'major', origin: 'cath', taxonomy: 'utility', @@ -1658,6 +1724,12 @@ export const traits = { pack_mentality: { // Cabins cost more, but cottages cost less. name: loc('trait_pack_mentality_name'), desc: loc('trait_pack_mentality'), + desc_function: function(vals) { + vals[2] = housingLabel('small'); + vals[3] = housingLabel('medium'); + vals[4] = housingLabel('large'); + return vals; + }, type: 'major', origin: 'wolven', taxonomy: 'utility', @@ -1711,7 +1783,7 @@ export const traits = { playful: { // Hunters are Happy name: loc('trait_playful_name'), desc: loc('trait_playful'), - desc_function: function (vals, species) { + desc_function: function (vals) { if (global.race['warlord']) vals = [vals[0] * 100, global.resource.Furs.name]; return vals; }, @@ -1741,6 +1813,10 @@ export const traits = { freespirit: { // Job Stress is higher for those who must work mundane jobs name: loc('trait_freespirit_name'), desc: loc('trait_freespirit'), + desc_function: function (vals) { + vals[1] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'major', origin: 'vulpine', taxonomy: 'production', @@ -1775,6 +1851,17 @@ export const traits = { sniper: { // Weapon upgrades are more impactful name: loc('trait_sniper_name'), desc: loc('trait_sniper'), + desc_function: function(vals) { + vals[1] = 5 * vals[0]; + return vals; + }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_sniper_ex1`, [warningText(global.race['blubber'] ? 'tech_harpoon' : 'tech_bows'), warningText(global.race.universe === 'magic' ? 'tech_magic_arrow' : 'tech_flintlock_rifle'), + warningText(global.race.universe === 'magic' ? 'tech_fire_mage' : 'tech_machine_gun'), warningText(global.race.universe === 'magic' ? 'tech_lightning_caster' : 'tech_rail_guns'), + warningText(global.race.universe === 'magic' ? 'tech_mana_rifles' : 'tech_laser_rifles'), warningText(global.race.universe === 'magic' ? 'tech_focused_rifles' : 'tech_plasma_rifles'), + warningText(global.race.universe === 'magic' ? 'tech_magic_missile' : 'tech_disruptor_rifles'), warningText(global.race.universe === 'magic' ? 'tech_magicword_kill' : 'tech_gauss_rifles'), warningText('tech_ethereal_weapons')])]; + }, type: 'major', origin: 'centaur', taxonomy: 'combat', @@ -1801,10 +1888,19 @@ export const traits = { hooved: { // You require special footwear name: loc('trait_hooved_name'), desc: loc('trait_hooved'), - desc_function: function (vals, species) { - vals.unshift(hoovedRename(false, species)); + desc_function: function(vals) { + vals.unshift(hoovedRename(false, vals[1])); + vals = [vals[0], vals[1]]; return vals; }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_hooved_ex1`,[hoovedRename(false, vals[1])]), + loc(`wiki_trait_effect_hooved_ex2`,[rName('Lumber'), rName('Copper'), rName('Iron'), rName('Steel'), rName('Adamantite'), rName('Orichalcum'), 12,75,150,500,5000]), + loc(`wiki_trait_effect_hooved_ex3`), + loc(`wiki_trait_effect_hooved_ex4`,[warningTextNoLoc(5),hoovedRename(false, vals[1])]), + loc(`wiki_trait_effect_hooved_ex5`,[rName('Lumber'), rName('Copper')])]; + }, type: 'major', origin: 'centaur', taxonomy: 'utility', @@ -1859,6 +1955,9 @@ export const traits = { heavy: { // Some costs increased name: loc('trait_heavy_name'), desc: loc('trait_heavy'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_heavy_ex1`,[rName('Stone'),rName('Cement'),rName('Wrought_Iron')])]; + }, type: 'major', origin: 'rhinotaur', taxonomy: 'utility', @@ -1912,6 +2011,9 @@ export const traits = { calm: { // Your are very calm, almost zen like name: loc('trait_calm_name'), desc: loc('trait_calm'), + desc_extra: function (vals) { + return [loc(`wiki_trait_effect_calm_ex1`)]; + }, type: 'major', origin: 'capybara', taxonomy: 'production', @@ -2122,6 +2224,10 @@ export const traits = { tough: { // Mining output increased by 25% name: loc('trait_tough_name'), desc: loc('trait_tough'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'major', origin: 'ogre', taxonomy: 'resource', @@ -2332,11 +2438,15 @@ export const traits = { chameleon: { // Barracks have less soldiers name: loc('trait_chameleon_name'), desc: loc('trait_chameleon'), - desc_function: function(vals, species) { - //vals[1] represents the addition to the ambush chance divisor, and needs conversion before display - vals[1] = ambush_divisor_to_percentage(vals[1]); + desc_function: function(vals) { + vals[2] = loc('trait_chameleon_name'); + vals[3] = loc('trait_elusive_name'); + vals[4] = linkTextNoColor('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy'); return vals; }, + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_grenadier_ex6`, [warningText('city_garrison'), warningText('trait_chameleon_name'), warningText('trait_grenadier_name'), warningText('tech_bunk_beds')])]; + }, type: 'major', origin: 'gecko', taxonomy: 'combat', @@ -2468,7 +2578,7 @@ export const traits = { selenophobia: { // Moon phase directly affects productivity, on average this is slightly negative name: loc('trait_selenophobia_name'), desc: loc('trait_selenophobia'), - desc_function: function (vals, species) { + desc_function: function(vals) { vals = [14 - vals[0], vals[0]]; return vals; }, @@ -2578,6 +2688,11 @@ export const traits = { solitary: { // Cabins are cheaper however cottages cost more name: loc('trait_solitary_name'), desc: loc('trait_solitary'), + desc_function: function(vals) { + vals[2] = housingLabel('small'); + vals[3] = housingLabel('medium'); + return vals; + }, type: 'major', origin: 'dracnid', taxonomy: 'utility', @@ -2683,7 +2798,7 @@ export const traits = { catnip: { // Attract Cats name: loc('trait_catnip_name'), desc: loc('trait_catnip'), - desc_function: function(vals, species) { + desc_function: function(vals) { vals = vals[0] > 1 ? vals[1] === 4 ? vals : [vals[0]] : []; return vals; }, @@ -2818,7 +2933,7 @@ export const traits = { anise: { // Attract Dogs name: loc('trait_anise_name'), desc: loc('trait_anise'), - desc_function: function(vals, species) { + desc_function: function(vals) { vals = vals[0] > 1 ? vals[1] === 3 ? vals : [vals[0]] : []; return vals; }, @@ -2955,6 +3070,16 @@ export const traits = { infiltrator: { // Cheap spies and sometimes steal tech from rivals name: loc('trait_infiltrator_name'), desc: loc('trait_infiltrator'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_infiltrator_ex1`), + loc(`wiki_trait_effect_infiltrator_ex2`, [[ + warningText('tech_steel'), warningText('tech_electricity'), warningText('tech_electronics'), warningText('tech_fission'), + warningText('tech_rocketry'), warningText('tech_artificial_intelligence'), warningText('tech_quantum_computing'), + warningText('tech_virtual_reality'), warningText('tech_shields'), warningText('tech_ai_core'), warningText('tech_graphene_processing'), + warningText('tech_nanoweave'), warningText('tech_orichalcum_analysis'), warningText('tech_infernium_fuel') + ].join(', ')]) + ]; + }, type: 'major', origin: 'moldling', taxonomy: 'utility', @@ -3008,6 +3133,14 @@ export const traits = { cannibalize: { // Eat your own for buffs name: loc('trait_cannibalize_name'), desc: loc('trait_cannibalize'), + desc_function: function(vals) { + vals[1] = loc('job_lumberjack'); + vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_cannibalize_ex1`, [warningText('tech_ceremonial_dagger'), warningText('tech_last_rites'), warningText('tech_ancient_infusion')])]; + }, type: 'major', origin: 'mantis', taxonomy: 'utility', @@ -3139,10 +3272,21 @@ export const traits = { hivemind: { // Jobs with low citizen counts assigned to them have reduced output, but those with high numbers have increased output. name: loc('trait_hivemind_name'), desc: loc('trait_hivemind'), - desc_function: function (vals, species) { + desc_function: function (vals) { if (global.race['high_pop']) vals[0] *= traits.high_pop.vars()[0]; return vals; }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_hivemind_ex1`, [warningText('civics_garrison_soldiers'), warningText('job_lumberjack'), warningText('job_hunter'), warningText('job_raider'), + linkText('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'), warningText('job_professor'), warningText('job_scientist')]), + loc(`wiki_trait_effect_hivemind_ex2`, [warningText('trait_high_pop_name'), warningTextNoLoc(100)]), + loc(`wiki_trait_effect_hivemind_ex3`, [warningText('civics_garrison_soldiers'), warningTextNoLoc(1), warningText('trait_hivemind_name'), warningText('tech_combat_droids'), warningTextNoLoc(1), warningText('tech_enhanced_droids'), warningTextNoLoc(2)]), + loc(`wiki_trait_effect_hivemind_ex4`), + loc(`wiki_trait_effect_hivemind_ex5`, [warningText('trait_high_pop_name'), warningTextNoLoc(1.5), warningTextNoLoc(2)]), + loc(`wiki_trait_effect_hivemind_ex6`, [warningText('trait_strong_name'), warningText('trait_living_tool_name'), warningText('trait_swift_name'), warningText('governor_educator'), warningText('trait_hivemind_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'), warningText('job_professor')]), + loc(`wiki_trait_effect_hivemind_ex7`)]; + }, type: 'major', origin: 'antid', taxonomy: 'production', @@ -3195,10 +3339,19 @@ export const traits = { blood_thirst: { // Combat causes a temporary increase in morale name: loc('trait_blood_thirst_name'), desc: loc('trait_blood_thirst'), - desc_function: function (vals, species) { + desc_function: function(vals) { vals[0] = Math.ceil(Math.log2(vals[0])); return vals; }, + desc_extra: function (vals) { + return [ + loc(`wiki_trait_effect_blood_thirst_ex1`, [warningText('achieve_warmonger_name')]), + loc(`wiki_trait_effect_blood_thirst_ex2`, [warningTextNoLoc(1)]), + loc(`wiki_trait_effect_blood_thirst_ex3`, [warningTextNoLoc(1), warningTextNoLoc(5)]), + loc(`wiki_trait_effect_blood_thirst_ex4`, [warningTextNoLoc(1), warningTextNoLoc(5)]), + loc(`wiki_trait_effect_blood_thirst_ex5`, [warningTextNoLoc(1000)]), + loc(`wiki_trait_effect_blood_thirst_ex6`, [warningTextNoLoc(1), warningTextNoLoc(10)])]; + }, type: 'major', origin: 'sharkin', taxonomy: 'combat', @@ -3331,7 +3484,7 @@ export const traits = { environmentalist: { // Use renewable energy instead of dirtly coal & oil power. name: loc('trait_environmentalist_name'), desc: loc('trait_environmentalist'), - desc_function: function (vals, species) { + desc_function: function(vals) { let coal = -(actions.city.coal_power.powered(true)); let oil = -(actions.city.oil_power.powered(true)); vals = [coal + vals[0], oil + vals[0] - 1, oil + vals[0] + 1, coal, oil, vals[1]]; @@ -3416,9 +3569,19 @@ export const traits = { revive: { // Soldiers sometimes self res name: loc('trait_revive_name'), desc: loc('trait_revive'), - desc_function: function(vals, species) { + desc_function: function(vals) { //Delete all values from the display - return []; + vals[0] = +(100 / vals[0]).toFixed(0); + vals[1] = +(100 / vals[1]).toFixed(0); + vals[2] = +(100 / vals[2]).toFixed(0); + vals[3] = +(100 / vals[3]).toFixed(0); + vals[4] = +(100 / vals[4]).toFixed(0); + vals[5] = +(100 / vals[5]).toFixed(0); + vals[6] = +(100 / vals[6]).toFixed(0); + vals[7] = loc('cold'); + vals[8] = loc('moderate'); + vals[9] = loc('hot'); + return vals; }, type: 'major', origin: 'phoenix', @@ -3499,6 +3662,11 @@ export const traits = { autoignition: { // Library knowledge bonus reduced name: loc('trait_autoignition_name'), desc: loc('trait_autoignition'), + desc_function: function(vals) { + //State as a percentage of the bonus, not as a number of percentage points. + vals[0] = vals[0] * 20; + return vals; + }, type: 'major', origin: 'salamander', taxonomy: 'utility', @@ -3525,9 +3693,20 @@ export const traits = { blurry: { // Increased success chance of spies // Warlord improves Reapers name: loc('trait_blurry_name'), desc: loc('trait_blurry'), - desc_function: function(vals, species) { + desc_function: function(vals) { //Requires different adjustments in warlord and in normal play - global.race['warlord']?vals[0] = +((100/(100-vals[0])-1)*100).toFixed(1):vals[0] = convert_divisor(vals[0]); + global.race['warlord']?vals[0] = +((100/(100-vals[0])-1)*100).toFixed(1):vals[0] = convertDivisor(vals[0]); + + //Influence: 1 in 4 base chance changes to 1 in 6 with blurry + vals[1] = loc('civics_spy_influence'); + vals[2] = +((100 * (1 - 4/6)).toFixed(0)); + //Sabotage: 1 in 3 base chance changes to 1 in 5 with blurry + vals[3] = loc('civics_spy_sabotage'); + vals[4] = +((100 * (1 - 3/5)).toFixed(0)); + //Incite: 1 in 2 base chance changes to 1 in 4 with blurry + vals[5] = loc('civics_spy_incite'); + vals[6] = +((100 * (1 - 2/4)).toFixed(0)); + return vals; }, type: 'major', @@ -3610,7 +3789,8 @@ export const traits = { ghostly: { // More souls from hunting and soul wells, increased soul gem drop chance name: loc('trait_ghostly_name'), desc: loc('trait_ghostly'), - desc_function: function (vals, species) { + desc_function: function(vals) { + vals[2] = -convertDivisor(-vals[2]); if (global.race['warlord']) vals = [vals[0], +((vals[1] - 1) * 100).toFixed(0), global.resource.Soul_Gem.name]; return vals; }, @@ -3693,6 +3873,10 @@ export const traits = { humpback: { // Starvation resistance and miner/lumberjack boost name: loc('trait_humpback_name'), desc: loc('trait_humpback'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, type: 'major', origin: 'kamel', taxonomy: 'resource', @@ -3782,9 +3966,9 @@ export const traits = { terrifying: { // No one will trade with you name: loc('trait_terrifying_name'), desc: loc('trait_terrifying'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + vals[2] = loc('tech_corruption'); + return vals; }, type: 'major', origin: 'balorg', @@ -4050,6 +4234,9 @@ export const traits = { magnificent: { // construct shrines to receive boons name: loc('trait_magnificent_name'), desc: loc('trait_magnificent'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_magnificent_ex1`, [warningText('moon1'), warningText('moon3'), warningText('moon7'), warningText('moon5')])]; + }, type: 'major', origin: 'unicorn', taxonomy: 'utility', @@ -4104,10 +4291,18 @@ export const traits = { imitation: { // You are an imitation of another species name: loc('trait_imitation_name'), desc: loc('trait_imitation'), - desc_function: function(vals, species) { + desc_function: function(vals) { vals.push(races[global.race['srace'] || 'protoplasm'].name); return vals; }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_imitation_ex1`), + loc(`wiki_trait_effect_imitation_ex2`, [warningText('genelab_genus_synthetic')]), + loc(`wiki_trait_effect_imitation_ex3`, [warningText('wiki_resets_ai')]), + loc(`wiki_trait_effect_imitation_ex4`, [warningText('trait_empowered_name')]), + loc(`wiki_trait_effect_imitation_ex5`, [warningText('tech_dist_arpa')])]; + }, type: 'major', origin: 'synth', taxonomy: 'utility', @@ -4162,6 +4357,11 @@ export const traits = { logical: { // Citizens add Knowledge name: loc('trait_logical_name'), desc: loc('trait_logical'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_mechanics_tech_levels_science', 'wiki.html#mechanics-gameplay-tech_levels'); + vals[3] = linkTextNoColor('wiki_mechanics_tech_levels_high_tech', 'wiki.html#mechanics-gameplay-tech_levels'); + return vals; + }, type: 'major', origin: 'synth', taxonomy: 'utility', @@ -4189,6 +4389,11 @@ export const traits = { shapeshifter: { name: loc('trait_shapeshifter_name'), desc: loc('trait_shapeshifter'), + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_shapeshifter_ex1`, [warningText('trait_empowered_name')]), + loc(`wiki_trait_effect_shapeshifter_ex2`, [warningText('tech_dist_arpa')])]; + }, type: 'major', origin: 'nano', taxonomy: 'utility', @@ -4216,6 +4421,13 @@ export const traits = { deconstructor: { name: loc('trait_deconstructor_name'), desc: loc('trait_deconstructor'), + desc_function: function(vals) { + vals[1] = loc('city_slave_housing',[global.resource.Slave.name]); + vals[2] = wardenLabel(); + vals[3] = global.race['artifical'] ? loc('space_red_signal_tower_title') : (global.race['soul_eater'] ? loc('space_red_asphodel_title') : loc('space_red_biodome_title')); + vals[4] = loc('tau_home_cloning'); + return vals; + }, type: 'major', origin: 'nano', taxonomy: 'utility', @@ -4242,6 +4454,9 @@ export const traits = { linked: { name: loc('trait_linked_name'), desc: loc('trait_linked'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_linked_ex1`)]; + }, type: 'major', origin: 'nano', taxonomy: 'utility', @@ -4295,6 +4510,16 @@ export const traits = { swift: { name: loc('trait_swift_name'), desc: loc('trait_swift'), + desc_function: function(vals) { + vals[2] = +(100 * (traits.strong.vars(0.25)[1] - 1)).toFixed(0); + vals[3] = loc('trait_living_tool_name'); + vals[4] = loc('trait_swift_name'); + vals[5] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_swift_ex1`, [warningText('trait_strong_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types')])]; + }, type: 'major', origin: 'ghast', taxonomy: 'combat', @@ -4322,7 +4547,7 @@ export const traits = { anthropophagite: { name: loc('trait_anthropophagite_name'), desc: loc('trait_anthropophagite'), - desc_function: function (vals, species) { + desc_function: function(vals) { //vals[0] stores the number of tens of thousands of food that are got when a pop dies vals[0] = 10000 * vals[0]; return vals; @@ -4353,9 +4578,26 @@ export const traits = { living_tool: { name: loc('trait_living_tool_name'), desc: loc('trait_living_tool'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + let traitEffect = vals[0]; + //Move crafting boost down into the first replacement slot + vals[0] = vals[1]; + //Get value from strong for bonus description + vals[1] = +(100 * (traits.strong.vars(0.25)[1] - 1)).toFixed(0); + //Farmer bonus at 20% + vals[2] = +(20 * traitEffect).toFixed(1); + //Lumberjack bonus at 25% + vals[3] = +(25 * traitEffect).toFixed(1); + //Forager bonus at 6% + vals[4] = +(6 * traitEffect).toFixed(1); + //Miner bonus at 12% + vals[5] = +(12 * traitEffect).toFixed(1); + vals[6] = loc('trait_living_tool_name'); + vals[7] = loc('trait_swift_name'); + vals[8] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + vals[9] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[10] = linkTextNoColor('wiki_mechanics_tech_levels_science', 'wiki.html#mechanics-gameplay-tech_levels'); + return vals; }, type: 'major', origin: 'shoggoth', @@ -4438,6 +4680,15 @@ export const traits = { stubborn: { name: loc('trait_stubborn_name'), desc: loc('trait_stubborn'), + desc_function: function(vals) { + //Some science marked researches are not increased in cost + vals[1] = loc('tech_spirit_box'); + vals[2] = loc('tech_spirit_researcher'); + vals[3] = loc('tech_dimensional_tap'); + vals[4] = linkTextNoColor('wiki_mechanics_tech_levels_science', 'wiki.html#mechanics-gameplay-tech_levels'); + vals[5] = linkTextNoColor('wiki_mechanics_tech_levels_high_tech', 'wiki.html#mechanics-gameplay-tech_levels'); + return vals; + }, type: 'major', origin: 'dwarf', taxonomy: 'utility', @@ -4465,6 +4716,10 @@ export const traits = { rogue: { name: loc('trait_rogue_name'), desc: loc('trait_rogue'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('trait_rogue_name', 'wiki.html#major-events-klepto'); + return vals; + }, type: 'major', origin: 'raccoon', taxonomy: 'resource', @@ -4519,11 +4774,18 @@ export const traits = { living_materials: { name: loc('trait_living_materials_name'), desc: loc('trait_living_materials'), - desc_function: function (vals, species) { - //Get current names for affected resources - vals = [global.resource.Lumber.name, global.resource.Plywood.name, global.resource.Furs.name, loc('resource_Amber_name')]; + desc_function: function(vals) { + vals = [+(100 - 100 * vals[0]).toFixed(1), global.resource.Lumber.name, global.resource.Plywood.name, global.resource.Furs.name, loc('resource_Amber_name')]; return vals; }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_living_materials_ex1`), + loc(`wiki_trait_effect_living_materials_ex2`), + loc(`wiki_trait_effect_living_materials_ex3`, [warningText('trait_flier_name'), warningText('trait_sappy_name'), warningText('resource_Amber_name')]), + loc(`wiki_trait_effect_living_materials_ex4`, [warningText('resource_Chrysotile_name'), warningText('resource_Amber_name')]), + loc(`wiki_trait_effect_living_materials_ex5`, [warningText('trait_evil_name')])]; + }, type: 'major', origin: 'lichen', taxonomy: 'resource', @@ -4552,6 +4814,9 @@ export const traits = { unstable: { name: loc('trait_unstable_name'), desc: loc('trait_unstable'), + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_unstable_ex1`, [warningText(vals[1])])]; + }, type: 'major', origin: 'lichen', taxonomy: 'utility', @@ -4579,7 +4844,7 @@ export const traits = { elemental: { name: loc('trait_elemental_name'), desc: loc('trait_elemental'), - desc_function: function (vals, species) { + desc_function: function(vals) { //Pick the right display values based on which element is currently active switch (vals[0]){ case 'electric': @@ -4597,6 +4862,15 @@ export const traits = { } return vals; }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_elemental_ex1`), + loc(`wiki_trait_effect_elemental_ex2`, [warningText('biome_savanna_name'), warningText('biome_forest_name'), warningText('biome_swamp_name'), loc('wiki_trait_effect_elemental_acid', [warningText('element_acid'), warningTextNoLoc(vals[2]), warningTextNoLoc(vals[5])])]), + loc(`wiki_trait_effect_elemental_ex3`, [warningText('biome_grassland_name'), warningText('biome_desert_name'), warningText('biome_eden_name'), loc('wiki_trait_effect_elemental_electric', [warningText('element_electric'), warningTextNoLoc(vals[1]), warningTextNoLoc(vals[5])])]), + loc(`wiki_trait_effect_elemental_ex4`, [warningText(1.28)]), + loc(`wiki_trait_effect_elemental_ex5`, [warningText('biome_oceanic_name'), warningText('biome_tundra_name'), warningText('biome_taiga_name'), loc('wiki_trait_effect_elemental_frost', [warningText('element_frost'), warningTextNoLoc(vals[4]), warningTextNoLoc(vals[5]), warningText('city_biolab')])]), + loc(`wiki_trait_effect_elemental_ex6`, [warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), loc('wiki_trait_effect_elemental_fire', [warningText('element_fire'), warningTextNoLoc(vals[3]), warningTextNoLoc(vals[5])])])] + }, type: 'major', origin: 'wyvern', taxonomy: 'utility', @@ -4649,6 +4923,14 @@ export const traits = { chicken: { name: loc('trait_chicken_name'), desc: loc('trait_chicken'), + desc_function: function(vals) { + //Hell ambush chance increases based on the value of the perk + vals[2] = Math.round(vals[0] / 5); + vals[3] = linkTextNoColor('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy'); + vals[4] = linkTextNoColor('wiki_events_chicken_feast', 'wiki.html#major-events-chicken_feast'); + vals[5] = linkTextNoColor('wiki_events_chicken', 'wiki.html#minor-events-chicken'); + return vals; + }, type: 'major', origin: 'wyvern', taxonomy: 'combat', @@ -4676,6 +4958,18 @@ export const traits = { tusk: { name: loc('trait_tusk_name'), desc: loc('trait_tusk'), + desc_function: function(vals) { + vals[3] = loc('trait_living_tool_name'); + vals[4] = loc('trait_tusk_name'); + vals[5] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + return vals; + }, + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_tusk_ex1`, [warningText('biome_oceanic_name'), warningText('biome_swamp_name'), warningText('biome_eden_name'), warningText('biome_forest_name'), + warningText('biome_grassland_name'), warningText('biome_savanna_name'), warningText('biome_tundra_name'), warningText('biome_taiga_name'), warningText('biome_desert_name'), + warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), warningText('rain'), warningText('thunderstorm')])]; + }, type: 'major', origin: 'narwhal', taxonomy: 'resource', @@ -4712,25 +5006,30 @@ export const traits = { // [Mining based on Attack, Attack Bonus] switch (r || traitRank('tusk') || 1){ case 0.1: - return [80,Math.round(moisture * 0.4)]; + return [80,Math.round(moisture * 0.4), 40]; case 0.25: - return [100,Math.round(moisture * 0.5)]; + return [100,Math.round(moisture * 0.5), 50]; case 0.5: - return [130,Math.round(moisture * 0.75)]; + return [130,Math.round(moisture * 0.75), 75]; case 1: - return [160,Math.round(moisture * 1)]; + return [160,Math.round(moisture * 1), 100]; case 2: - return [190,Math.round(moisture * 1.2)]; + return [190,Math.round(moisture * 1.2), 120]; case 3: - return [220,Math.round(moisture * 1.4)]; + return [220,Math.round(moisture * 1.4), 140]; case 4: - return [250,Math.round(moisture * 1.6)]; + return [250,Math.round(moisture * 1.6), 160]; } } }, blubber: { name: loc('trait_blubber_name'), desc: loc('trait_blubber'), + desc_function: function(vals) { + vals[1] = loc('tech_oil_refinery'); + vals[2] = loc('space_gas_moon_oil_extractor_title'); + return vals; + }, type: 'major', origin: 'narwhal', taxonomy: 'resource', @@ -4758,6 +5057,16 @@ export const traits = { ocular_power: { name: loc('trait_ocular_power_name'), desc: loc('trait_ocular_power'), + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_ocular_power_ex1`), + loc(`wiki_trait_effect_ocular_power_ex2`, [warningTextNoLoc(70)]), + loc(`wiki_trait_effect_ocular_power_ex3`, [warningTextNoLoc(50)]), + loc(`wiki_trait_effect_ocular_power_ex4`, [warningTextNoLoc(33.33), warningTextNoLoc(20), linkText('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy')]), + loc(`wiki_trait_effect_ocular_power_ex5`, [warningTextNoLoc(100), rName('Stone')]), + loc(`wiki_trait_effect_ocular_power_ex6`, [warningTextNoLoc(20), warningText('job_farmer'), warningText('job_lumberjack'), warningText('job_scavenger'), warningText('job_cement_worker'), linkText('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types')]), + loc(`wiki_trait_effect_ocular_power_ex7`, [warningTextNoLoc(60)])]; + }, type: 'major', origin: 'beholder', taxonomy: 'utility', @@ -4866,6 +5175,15 @@ export const traits = { grenadier: { name: loc('trait_grenadier_name'), desc: loc('trait_grenadier'), + desc_extra: function(vals) { + return [ + loc(`wiki_trait_effect_grenadier_ex1`, [warningText('tech_operating_base')]), + loc(`wiki_trait_effect_grenadier_ex2`, [warningText('outer_shipyard_class_destroyer')]), + loc(`wiki_trait_effect_grenadier_ex3`, [warningText('trait_high_pop_name')]), + loc(`wiki_trait_effect_grenadier_ex4`, [warningText('tech_hammocks')]), + loc(`wiki_trait_effect_grenadier_ex5`, [warningText('galaxy_scout_ship'), warningText('galaxy_minelayer'), warningText('trait_high_pop_name')]), + loc(`wiki_trait_effect_grenadier_ex6`, [warningText('city_garrison'), warningText('trait_chameleon_name'), warningText('trait_grenadier_name'), warningText('tech_bunk_beds')])]; + }, type: 'major', origin: 'bombardier', taxonomy: 'combat', @@ -4893,6 +5211,12 @@ export const traits = { aggressive: { name: loc('trait_aggressive_name'), desc: loc('trait_aggressive'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_events_brawl', 'wiki.html#major-events-brawl'); + vals[3] = linkTextNoColor('wiki_events_fight', 'wiki.html#minor-events-fight'); + vals[4] = loc('soldiers'); + return vals; + }, type: 'major', origin: 'bombardier', taxonomy: 'combat', @@ -4920,6 +5244,10 @@ export const traits = { empowered: { name: loc('trait_empowered_name'), desc: loc('trait_empowered'), + desc_extra: function (vals) { + return [ loc(`wiki_trait_effect_empowered_ex1`, [warningText('tech_fanaticism'), warningText('tech_deify'), warningText('arpa_mutate'), warningText('trait_shapeshifter_name'), + warningText('trait_imitation_name')]), loc(`wiki_trait_effect_empowered_ex2`)]; + }, type: 'major', origin: 'nephilim', taxonomy: 'utility', @@ -5031,9 +5359,11 @@ export const traits = { promiscuous: { // Organics Growth Bonus, Synths Population Discount name: loc('trait_promiscuous_name'), desc: loc('trait_promiscuous'), - desc_function: function(vals, species) { - //Delete all values from the display - return []; + desc_function: function(vals) { + vals[1] = 100 * vals[1]; + vals[2] = loc('genelab_genus_synthetic'); + vals[3] = linkText('wiki_mechanics_pop_growth_lower_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + return vals; }, type: 'minor', vars(r){ return [1,0.02]; }, @@ -5076,7 +5406,7 @@ export const traits = { fibroblast: { // Healing Bonus name: loc('trait_fibroblast_name'), desc: loc('trait_fibroblast'), - desc_function: function(vals, species) { + desc_function: function(vals) { //Multiply by 5 for display vals[0] = vals[0] * 5; return vals; diff --git a/src/wiki/combat.js b/src/wiki/combat.js index 3e2bd9176..f3d7c172b 100644 --- a/src/wiki/combat.js +++ b/src/wiki/combat.js @@ -35,17 +35,17 @@ export function combatPage(content){ 12: [5], 13: [loc('civics_garrison_tactic_raid'),4,loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], 14: [loc('trait_beast_of_burden_name'),loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], - 15: [10], + 15: [10, 4], 16: [loc('civics_garrison_tactic_pillage'),5,loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], 17: [loc('trait_beast_of_burden_name'),loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], - 18: [25], + 18: [25, 30], 19: [loc('civics_garrison_tactic_assault'),5,loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], 20: [loc('trait_beast_of_burden_name'),loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], - 21: [50], + 21: [50, 100], 22: [loc('civics_garrison_tactic_siege'),5,loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], 23: [loc('trait_beast_of_burden_name'),loc('wiki_combat_loot_money'),loc('wiki_combat_loot_basic'),loc('wiki_combat_loot_common'),loc('wiki_combat_loot_rare')], 24: [loc('civics_garrison_tactic_siege')], - 25: [999], + 25: [999, 400], 28: [`base loot * log(looters + 1)`], 29: [loc('civics_gov_eco_rate')], 30: [`floor(loot * economic rating / 100)`] @@ -67,6 +67,7 @@ export function combatPage(content){ 23: ['warning','caution','caution','caution','caution'], 28: ['advanced'], 30: ['advanced'], + 32: ['advanced'], } }); sideMenu('add',`combat-gameplay`,`loot`,loc('wiki_combat_loot')); diff --git a/src/wiki/events.js b/src/wiki/events.js index a543cdeed..60ed5c1c4 100644 --- a/src/wiki/events.js +++ b/src/wiki/events.js @@ -2,7 +2,7 @@ import { global } from './../vars.js'; import { races } from './../races.js'; import { govTitle } from './../civics.js'; import { housingLabel } from './../actions.js'; -import { clearElement, eventActive } from './../functions.js'; +import { clearElement, eventActive, rName } from './../functions.js'; import { loc } from './../locale.js'; import { swissKnife } from './../tech.js'; import { sideMenu, infoBoxBuilder, getSolarName } from './functions.js'; @@ -446,6 +446,41 @@ export function mainEventsPage(content){ }, section); sideMenu('add',`major-events`,`m_curious`,loc('wiki_events_m_curious')); } + + { //Kelptomaniac + let section = infoBoxBuilder(mainContent,{ name: 'klepto', template: 'events', label: loc('wiki_events_klepto'), paragraphs: 5, break: [2, 4], h_level: 2, + para_data: { + 3: [ + loc('resource_Money_name'),rName('Food'),rName('Lumber'),rName('Stone'),rName('Chrysotile'),rName('Crystal'),rName('Furs'),rName('Copper'),rName('Iron'), + rName('Cement'),rName('Coal'),rName('Uranium'),rName('Aluminium'),rName('Steel'),rName('Titanium'),rName('Alloy'),rName('Polymer'),rName('Iridium'), + rName('Neutronium'),rName('Adamantite'),rName('Infernite'),rName('Elerium'),rName('Nano_Tube'),rName('Graphene'),rName('Stanene'), + rName('Bolognium'),rName('Vitreloy'),rName('Orichalcum'),rName('Asphodel_Powder'),rName('Elysanite'),rName('Unobtainium'),rName('Quantium'), + rName('Plywood'),rName('Brick'),rName('Wrought_Iron'),rName('Sheet_Metal'),rName('Mythril'),rName('Aerogel'),rName('Nanoweave'),rName('Scarletite') + ], + 4: [4, 10] + } + }); + sideMenu('add',`major-events`,`klepto`,loc('wiki_events_klepto')); + } + + { //Feast + let section = infoBoxBuilder(mainContent,{ name: 'chicken_feast', template: 'events', label: loc('wiki_events_chicken_feast'), paragraphs: 2, break: [2], h_level: 2, + para_data: { + 2: [2, 10, loc('trait_high_pop_name')] + } + }); + sideMenu('add',`major-events`,`chicken_feast`,loc('wiki_events_chicken_feast')); + } + + { //Brawl + let section = infoBoxBuilder(mainContent,{ name: 'brawl', template: 'events', label: loc('wiki_events_brawl'), paragraphs: 2, break: [2], h_level: 2, + para_data: { + 1: [loc('soldiers')], + 2: [1, 20, loc('soldiers')] + } + }); + sideMenu('add',`major-events`,`brawl`,loc('wiki_events_brawl')); + } } export function minorEventsPage(content){ @@ -1211,6 +1246,25 @@ export function minorEventsPage(content){ sideMenu('add',`minor-events`,`pet`,loc('wiki_events_pet')); } + + { //Chicken + let section = infoBoxBuilder(mainContent,{ name: 'chicken', template: 'events', label: loc('wiki_events_chicken'), paragraphs: 2, break: [2], h_level: 2, + para_data: { + 2: [1] + } + }); + sideMenu('add',`major-events`,`chicken`,loc('wiki_events_chicken')); + } + + { //Fight + let section = infoBoxBuilder(mainContent,{ name: 'fight', template: 'events', label: loc('wiki_events_fight'), paragraphs: 2, break: [2], h_level: 2, + para_data: { + 1: [loc('soldiers')], + 2: [1, 8, loc('soldiers')] + } + }); + sideMenu('add',`major-events`,`fight`,loc('wiki_events_fight')); + } } export function progressEventsPage(content){ diff --git a/src/wiki/hell.js b/src/wiki/hell.js index b65dacf2d..7160c23d6 100644 --- a/src/wiki/hell.js +++ b/src/wiki/hell.js @@ -19,7 +19,12 @@ export function hellPage(content){ data_color: { 3: ['caution'] } }); sideMenu('add',`hell-gameplay`,'siege',loc('wiki_hell_siege')); - infoBoxBuilder(mainContent,{ name: 'strategy', template: 'hell', paragraphs: 3 }); + infoBoxBuilder(mainContent,{ name: 'strategy', template: 'hell', paragraphs: 5, break: [4], + para_data: { + 4: [loc('resource_Soul_Gem_name')], + 5: [[`1`], [`30`], [`10`], [`15`], [`25`], loc('wiki_hell_strategy_ambush_odds')] + } + }); sideMenu('add',`hell-gameplay`,'strategy',loc('wiki_hell_strategy')); let soul = infoBoxBuilder(mainContent,{ name: 'soul_gem', template: 'hell', paragraphs: 4, @@ -69,7 +74,7 @@ export function hellPage(content){ 2: ['1%',loc(`harmonic`)], 3: ['3%'], 4: [loc(`harmonic`),'2%','6%'], - 5: [loc(`wiki_hell_pillar_para5d1`),12], + 5: [loc(`wiki_hell_pillar_para5d1`),4,2], 6: [loc(`harmonic`),`${((harmonic[0] - 1) * 100).toFixed(0)}%`,`${((harmonic[1] - 1) * 100).toFixed(0)}%`], }, data_link: { @@ -174,7 +179,7 @@ export function hellPage(content){ 3: [(mechWeaponPower('small') * 100).toFixed(2)], 4: [mechSize('small'),s_cost.c,s_cost.s], 5: [loc(`portal_mech_equip_jumpjet`)], - 7: [`1%`], + 7: [`1`], 8: [loc(`portal_spire_status_fog`),loc(`portal_spire_status_dark`)], 9: [`100%`], 10: [`8%`], @@ -367,7 +372,7 @@ export function hellPage(content){ para_data: { 1: [`75%`], 2: [loc(`portal_mech_equip_ablative`)], - 3: [global.race['warlord'] ? `${loc(`portal_mech_equip_stoneskin`)}, ${loc(`portal_mech_equip_shields`)}, ${loc(`portal_mech_equip_manashield`)}` : loc(`portal_mech_equip_shields`)] + 3: [global.race['warlord'] ? `${loc(`portal_mech_equip_stoneskin`)}, ${loc(`portal_mech_equip_shields`)}, ${loc(`portal_mech_equip_manashield`)}` : loc(`portal_mech_equip_shields`), `25%`] } }); @@ -409,7 +414,7 @@ export function hellPage(content){ }, para_data: { 1: [`50%`,loc(`portal_mech_chassis_spider`),loc(`portal_mech_equip_grapple`)], - 2: [global.race['warlord'] ? `${loc(`portal_mech_equip_echo`)}, ${loc(`portal_mech_equip_flare`)}` : loc(`portal_mech_equip_flare`)] + 2: [global.race['warlord'] ? `${loc(`portal_mech_equip_echo`)}, ${loc(`portal_mech_equip_flare`)}` : loc(`portal_mech_equip_flare`), `25%`] } }); @@ -531,7 +536,7 @@ export function hellPage(content){ para_data: { 1: [`90%`], 2: global.race['warlord'] ? [`${loc(`portal_mech_equip_infrared`)}, ${loc(`portal_mech_equip_darkvision`)}`] : [loc(`portal_mech_equip_infrared`)], - 3: [loc(`portal_mech_equip_flare`)] + 3: [loc(`portal_mech_equip_flare`),`75%`] } }); diff --git a/src/wiki/mechanics.js b/src/wiki/mechanics.js index 7a4383b45..06315e8a9 100644 --- a/src/wiki/mechanics.js +++ b/src/wiki/mechanics.js @@ -52,13 +52,25 @@ export function mechanicsPage(content){ }); sideMenu('add',`mechanics-gameplay`,`spack`,loc('wiki_mechanics_spack')); } + + { // Job Types + infoBoxBuilder(mainContent,{ name: 'job_types', template: 'mechanics', label: loc('wiki_mechanics_job_types'), paragraphs: 4, break: [3,4], h_level: 2, + para_data: { + 2: [loc('wiki_mechanics_job_type_basic'), loc('wiki_mechanics_job_type_mining')], + 3: [loc('job_farmer'), loc('job_lumberjack'), loc('job_quarry_worker'), loc('job_hunter'), loc('job_forager'), loc('job_crystal_miner'), loc('job_scavenger'), loc('wiki_mechanics_job_type_basic')], + 4: [loc('job_quarry_worker'), loc('job_crystal_miner'), loc('job_miner'), loc('job_pit_miner'), loc('job_coal_miner'), loc('job_elysium_miner'), loc('wiki_mechanics_job_type_mining')] + } + }); + sideMenu('add',`mechanics-gameplay`,`job_types`,loc('wiki_mechanics_job_types')); + } { // Default Job infoBoxBuilder(mainContent,{ name: 'job', template: 'mechanics', label: loc('wiki_mechanics_job'), paragraphs: 9, break: [5], h_level: 2, para_data: { 1: [loc('wiki_mechanics_job')], 2: ['*'], - 3: [loc('wiki_mechanics_job')] + 3: [loc('wiki_mechanics_job'), loc('wiki_mechanics_job_type_basic')], + 4: [loc('wiki_mechanics_job_type_basic')] } }); sideMenu('add',`mechanics-gameplay`,`job`,loc('wiki_mechanics_job')); @@ -84,6 +96,23 @@ export function mechanicsPage(content){ sideMenu('add',`mechanics-gameplay`,`job_stress`,loc('wiki_mechanics_job_stress')); } + { //Population Growth + infoBoxBuilder(mainContent,{ name: 'pop_growth', template: 'mechanics', label: loc('wiki_mechanics_pop_growth'), paragraphs: 8, break: [2,3,5,6,8], h_level: 2, + para_data: { + 1: [loc('wiki_challenges_scenarios_fasting'), loc('trait_artifical_name'), loc('trait_spongy_name'), loc('trait_parasite_name'), loc('tech_vaccine_campaign'), loc('wiki_resets_matrix')], + 2: [loc('wiki_mechanics_pop_growth_lower_bound'), loc('wiki_mechanics_pop_growth_upper_bound')], + 3: [loc('wiki_mechanics_pop_growth_lower_bound'), 0, 1, loc('tech_aphrodisiac'), 2, loc('tech_fertility_clinic')], + 5: [loc('wiki_mechanics_pop_growth_valentines_day'), loc('trait_fast_growth_name'), loc('trait_spores_name'), loc('tech_fertility_clinic'), + loc('arpa_genepool_replication_title'), loc('trait_promiscuous_name'), loc('wiki_challenges_scenarios_fasting'), loc('city_banquet'), + loc('sign_libra'), loc('trait_high_pop_name'), loc('biome_taiga_name'), loc('planet_toxic'), loc('trait_parasite_name'), loc('evo_challenge_cataclysm'), loc('evo_challenge_orbit_decay') + ], + 6: [loc('wiki_mechanics_pop_growth_upper_bound'), `3 - 2 ^ 0.25`, `1.81`], + 8: [`0`, loc('wiki_mechanics_pop_growth_upper_bound'), loc('wiki_mechanics_pop_growth_lower_bound')] + } + }); + sideMenu('add',`mechanics-gameplay`,`pop_growth`,loc('wiki_mechanics_pop_growth')); + } + { // Multiplier Keys infoBoxBuilder(mainContent,{ name: 'multiplier', template: 'mechanics', label: loc('wiki_mechanics_multiplier'), paragraphs: 5, break: [4], h_level: 2, para_data: { @@ -321,6 +350,25 @@ export function mechanicsPage(content){ sideMenu('add',`mechanics-gameplay`,`occupying`,loc('wiki_mechanics_occupying')); } + { //Tech Levels + infoBoxBuilder(mainContent,{ name: 'tech_levels', template: 'mechanics', label: loc('wiki_mechanics_tech_levels'), paragraphs: 3, break: [2,3], h_level: 2, + para_data: { + 1: [loc('wiki_tech_tree_science'), loc('wiki_tech_tree_high_tech'), loc('wiki_mechanics_tech_levels_science'), loc('wiki_mechanics_tech_levels_high_tech')], + 2: [loc('tech_science'), loc('tech_library'), loc('tech_thesis'), loc('tech_research_grant'), + global.race.universe === 'magic' ? loc('tech_magic_tomes') : loc('tech_scientific_journal'), loc('tech_adjunct_professor'), loc('tech_tesla_coil'), + loc('tech_internet'), loc('tech_observatory'), loc('tech_world_collider'), global.race.universe === 'magic' ? loc('tech_sanctum') : loc('tech_laboratory'), + loc('tech_virtual_assistant'), loc('tech_dimensional_readings'), loc('tech_quantum_entanglement'), global.race.universe === 'magic' ? loc('tech_expedition_wiz') : loc('tech_expedition'), + loc('tech_subspace_sensors'), loc('tech_alien_database'), loc('tech_orichalcum_capacitor'), loc('tech_advanced_biotech'), loc('tech_codex_infinium'), + loc('tech_spirit_box'), loc('tech_spirit_researcher'), loc('tech_dimensional_tap'), loc('wiki_mechanics_tech_levels_science')], + 3: [global.race.universe === 'magic' ? loc('tech_sages') : loc('tech_mad_science'), loc('tech_electricity'), loc('tech_industrialization'), + loc('tech_electronics'), loc('tech_fission'), loc('tech_arpa'), loc('tech_rocketry'), loc('tech_robotics'), loc('tech_lasers'), loc('tech_artificial_intelligence'), + loc('tech_quantum_computing'), loc('tech_virtual_reality'), loc('tech_plasma'), loc('tech_shields'), loc('tech_ai_core'), loc('tech_metaphysics'), + loc('tech_orichalcum_analysis'), loc('tech_cybernetics'), loc('tech_divinity'), loc('wiki_mechanics_tech_levels_high_tech')], + } + }); + sideMenu('add',`mechanics-gameplay`,`tech_levels`,loc('wiki_mechanics_tech_levels')); + } + { // Religion infoBoxBuilder(mainContent,{ name: 'religion', template: 'mechanics', label: loc('wiki_mechanics_religion'), paragraphs: 20, break: [3,6,8,15,20], h_level: 2, para_data: { @@ -664,7 +712,7 @@ export function mechanicsPage(content){ 2: ['1%',loc(`harmonic`)], 3: ['3%'], 4: [loc(`harmonic`),'2%','6%'], - 5: [loc(`wiki_hell_pillar_para5d1`),12] + 5: [loc(`wiki_hell_pillar_para5d1`),4,2] }, data_link: { 5: ['wiki.html#hell-structures-west_tower'] diff --git a/src/wiki/p_res.js b/src/wiki/p_res.js index 510b64db1..cc210e75b 100644 --- a/src/wiki/p_res.js +++ b/src/wiki/p_res.js @@ -134,6 +134,8 @@ export function pResPage(content){ section = infoBoxBuilder(mainContent,{ name: 'servants', template: 'p_res', paragraphs: 5, h_level: 2, break: [3,4,5], para_data: { 1: [loc('wiki_resets_matrix'),loc('wiki_resets_retired'),loc('wiki_resets_eden')], + 2: [loc('wiki_mechanics_job_type_basic')], + 4: [loc('wiki_mechanics_job_type_basic')], 5: [loc('achieve_overlord_name')], }, data_link: { diff --git a/strings/strings.json b/strings/strings.json index f3efeaf39..09378c93e 100644 --- a/strings/strings.json +++ b/strings/strings.json @@ -5968,11 +5968,11 @@ "civics_mad_missiles_desc_easter": "Enable or Disable the launch button. Launching a Holy Rocket Propelled Grenade strike will trigger a retaliatory strike which will result in the end of all life as we know it.", "civics_mad_missiles_warning": "This will result in the destruction of all life on your planet. You will have to re-evolve from the beginning. You will gain %0 %1.", "civics_servants": "Servants", - "civics_servants_desc": "Completely devoted to you, these servants can work any basic job and do not require any upkeep.", + "civics_servants_desc": "Completely devoted to you, these servants can work any of the %0 and do not require any upkeep.", "civics_servants_msg1": "A ferret-like creature has joined you, ready to serve your empire.", "civics_servants_msg2": "%0 ferret-like creatures have joined you and are ready to serve your empire.", "civics_skilled_servants": "Skilled Servants", - "civics_skilled_servants_desc": "Completely devoted to you, these servants can work any basic job or non-special craftsman job, and do not require any upkeep.", + "civics_skilled_servants_desc": "Completely devoted to you, these servants can work any %0 or non-special craftsman job, and do not require any upkeep.", "governor_appoint": "Appoint", "governor_candidate": "Candidate", "governor_background": "Background", @@ -8556,7 +8556,7 @@ "wiki_basics_civilization_para4": "You will want to assign your first citizen to gather %0. Depending on your species, that will either be the %1 or %2 job.", "wiki_basics_civilization_para5": "The job with an %0 after it is the default job; new citizens will automatically be assigned to the default job.", "wiki_basics_civilization_para6": "You can change the default job by clicking on another job in the civics tab.", - "wiki_basics_civilization_para7": "You can only assign default job status to the basic job types (those with no cap on them).", + "wiki_basics_civilization_para7": "You can only assign default job status to the %0 (those with no cap on them).", "wiki_basics_civilization_para8": "The earliest challenge is getting enough %0 income to keep your people fed.", "wiki_basics_civilization_para9": "If you run out of %0, you will go into a %1 state which lowers production.", "wiki_basics_civilization_para10": "If the amount of %0 you are producing is significantly below your required consumption, then people will starve to death.", @@ -8593,29 +8593,30 @@ "wiki_trait_effect_beast": "+%0% hunting production, +%1% hunting when Windy. +%2% soldier training speed.", "wiki_trait_effect_cautious": "-%0% combat rating when Raining.", "wiki_trait_effect_small": "-%0 Planetary cost creep, -%1 Non-Homeworld cost creep.", - "wiki_trait_effect_weak": "-%0% production to Lumberjacks, Quarry Workers, and Miners.", + "wiki_trait_effect_weak": "-%0% production to %1 and %2.", "wiki_trait_effect_large": "+%0 Planetary cost creep.", - "wiki_trait_effect_strong": "%0X manual resource gains (Food, Lumber, Stone). Basic jobs are %1X more effective.", - "wiki_trait_effect_cold_blooded": "Farmers, Hunters, Lumberjacks, Reclaimers, Quarry Workers, Miners, and Coal Miners: -%0% production when Cold or Raining, +%1% production when Hot or Sunny.", + "wiki_trait_effect_strong": "%0X manual resource gains (Food, Lumber, Stone). %2 are %1X more effective.", + "wiki_trait_effect_strong_ex1": "This bonus multiplies the %2 bonus of %0 or %1 if one of them is active. If both are active, only one instance of the bonus is applied.", + "wiki_trait_effect_cold_blooded": "All %4 and all %5 suffer -%0% production in %6 or %7, but get +%1% production when %8 or %9. %2 and %3 are only affected once, despite being both %4 and %5.", "wiki_trait_effect_scales": "-%0 soldier deaths on success, -%1 death on failure. +%2 Hell Patrol Armor.", "wiki_trait_effect_flier": "Clay replaces Stone and Cement. Clay costs reduced by %0%. +%1 Trade Post trade route.", "wiki_trait_effect_flier_ex1": "Cement is converted to Clay at 1.75x original Cement cost, but is then discounted by the Clay discount.", "wiki_trait_effect_hollow_bones": "-%0% crafted material costs.", - "wiki_trait_effect_sky_lover": "Increased stress for mining jobs by %0%.", + "wiki_trait_effect_sky_lover": "%2, except for %1 have %0% increased job stress.", "wiki_trait_effect_rigid": "-%0% crafting material production.", - "wiki_trait_effect_high_pop": "Population numbers are %0x higher, but citizens contribute only %1% of their normal work value individually. Population growth is %2x faster.", + "wiki_trait_effect_high_pop": "Population numbers are %0x higher, but citizens contribute only %1% of their normal work value individually. Population growth %3 is increased by %2x and %4 is decreased by %0x.", "wiki_trait_effect_high_pop_ex1": "The High Population trait will not be gained from using Mimic to emulate Insectoid.", - "wiki_trait_effect_fast_growth": "Faster population growth. Growth speed scales with trait rank.", + "wiki_trait_effect_fast_growth": "Increases population growth %2 bonuses from techs by %0x and adds its own bonus of %1 afterward.", "wiki_trait_effect_high_metabolism": "+%0% food consumption.", "wiki_trait_effect_photosynth": "-%0% food consumption when Sunny, -%1% food consumption when Cloudy, -%2% food consumption when Rainy.", "wiki_trait_effect_sappy": "Amber replaces Stone. Citizens and Soldiers produces %0 Amber per second, eliminating the need for Quarry Workers.", "wiki_trait_effect_asymmetrical": "-%0% trade selling prices.", - "wiki_trait_effect_spores": "Increased population growth when Windy. Growth speed scales with trait rank.", + "wiki_trait_effect_spores": "Gain increased population growth when windy. If you have %3, increases population growth %4 by %2. If not, increase %4 by %0 and then multiply by %1.", "wiki_trait_effect_spongy": "No population growth when Raining.", "wiki_trait_effect_detritivore": "Agriculture is replaced with composting. Base composting rate is %0 food per second.", "wiki_trait_effect_submerged": "No morale penalty from weather.", "wiki_trait_effect_low_light": "-%0% Farm/Farmer Production.", - "wiki_trait_effect_elusive": "Spies are never caught. Hell patrols are %0% less likely to be ambushed; effect does not combine with Chameleon.", + "wiki_trait_effect_elusive": "Spies are never caught. Patrol %3 are improved by %0. If both %1 and %2 are active, only the larger %3 improvement takes effect.", "wiki_trait_effect_iron_allergy": "-%0% Iron mining production.", "wiki_trait_effect_smoldering": "+%0% morale in Summer, No morale bonus in Spring. +%1% global production bonus for each consecutive Hot day up to 100 stacks; +%2% above 100 stacks. Lumber is not available; additional resource Chrysotile is harvested by Quarry Workers. Most resource costs are reduced by 10%.", "wiki_trait_effect_cold_intolerance": "-%0% global production penalty for each consecutive Cold day.", @@ -8635,15 +8636,15 @@ "wiki_trait_effect_brute": "-%0% mercenaries cost and +%1% faster base soldier training.", "wiki_trait_effect_angry": "+%0% starvation penalty.", "wiki_trait_effect_lazy": "-%0% production when hot.", - "wiki_trait_effect_curious": "+%0% University knowledge per citizen. Random events caused by curiosity.", + "wiki_trait_effect_curious": "+%0% University knowledge per citizen. Adds a %1 major event that has various effects.", "wiki_trait_effect_carnivore": "Unemployed are replaced with Hunters. Agriculture tech is disabled. %0% of Food spoils each second, reduced by Smokehouses.", - "wiki_trait_effect_pack_mentality": "+%0 Basic Housing cost creep, -%1 Medium/Large Housing cost creep.", + "wiki_trait_effect_pack_mentality": "+%0 cost creep for %2, -%1 cost creep for %3 and %4.", "wiki_trait_effect_tracker": "+%0% hunting production.", "wiki_trait_effect_playful": "Hunters increase morale by %0% and cause no stress.", - "wiki_trait_effect_freespirit": "Non-Basic jobs are %0% more stressful.", + "wiki_trait_effect_freespirit": "Non-%1 are %0% more stressful.", "wiki_trait_effect_beast_of_burden": "Make an extra loot roll on successful attack.", - "wiki_trait_effect_sniper": "Weapon upgrades are %0% stronger.", - "wiki_trait_effect_sniper_ex1": "This upgrade effect is cumulative.", + "wiki_trait_effect_sniper": "Weapon upgrades get %0% stronger for every weapon tech researched. For instance, after 5 weapon tech upgrades, all weapon tech upgrades will be %1% stronger.", + "wiki_trait_effect_sniper_ex1": "The weapon upgrade technologies are: %0, %1, %2, %3, %4, %5, %6, %7, and %8", "wiki_trait_effect_hooved": "Expanding population requires %0. %0 costs scaled to %1%.", "wiki_trait_effect_hooved_ex1": "%0 materials change at various breakpoints for total acquired quantity.", "wiki_trait_effect_hooved_ex2": "%0 --%6-> %1 --%7-> %2 --%8-> %3 --%9-> %4 --%10-> %5", @@ -8654,9 +8655,10 @@ "wiki_trait_effect_heavy": "Fuel costs are %0% higher. Some material costs %1% higher.", "wiki_trait_effect_heavy_ex1": "%0, %1, and %2 costs are increased.", "wiki_trait_effect_gnawer": "%0 Lumber chewed per population.", - "wiki_trait_effect_calm": "Global bonus provided by zen state. %0 meditation spots per chamber.", + "wiki_trait_effect_calm": "Get a global bonus by accruing Zen. %0 max Zen slots per chamber. One Zen is generated per filled slot, with a citizen/soldier filling 2/1 slots.", + "wiki_trait_effect_calm_ex1": "Production bonus is (Zen * 100) / (Zen + 5000)%.", "wiki_trait_effect_herbivore": "Soldiers do not produce food from hunting.", - "wiki_trait_effect_forager": "Several basic jobs are combined into one. %0% efficiency.", + "wiki_trait_effect_forager": "Several %1 are combined into one. %0% efficiency.", "wiki_trait_effect_instinct": "%1% dying soldiers are instead wounded. Surveyors %0% less likely to be killed. Losses from Andromeda assault missions is reduced by half. Andromeda ships better avoid pirates, reducing threat.", "wiki_trait_effect_instinct_ex1": "Pirate threat reduced by %0% in %1 and by %2% in other regions.", "wiki_trait_effect_pack_rat": "+%0% Crate/Container Storage. +%1% General Storage.", @@ -8666,7 +8668,7 @@ "wiki_trait_effect_smart": "-%0% Knowledge costs", "wiki_trait_effect_puny": "Average combat roll reduced by 15%. -%0% Combat Rating.", "wiki_trait_effect_dumb": "+%0% Knowledge costs", - "wiki_trait_effect_tough": "+%0% mining production.", + "wiki_trait_effect_tough": "+%0% production for all %1.", "wiki_trait_effect_nearsighted": "-%0% Library Knowledge.", "wiki_trait_effect_intelligent": "+%0% production per Professor, +%1% production per Scientist.", "wiki_trait_effect_regenerative": "Base wounded soldiers healed each day increased to %0.", @@ -8674,7 +8676,7 @@ "wiki_trait_effect_slow": "Game speed reduced by %0%.", "wiki_trait_effect_armored": "-%0% Soldier deaths. +%1 Hell Patrol Armor.", "wiki_trait_effect_optimistic": "Stress reduced by %0 points. Minimum Morale increased by %1%.", - "wiki_trait_effect_chameleon": "Barracks house 1 less soldier. +%0% Combat Rating. Hell patrols are %1% less likely to be ambushed; effect does not combine with Elusive.", + "wiki_trait_effect_chameleon": "Barracks house 1 less soldier. +%0% Combat Rating. Patrol %4 are improved by %1. If both %2 and %3 are active, only the larger %4 improvement takes effect.", "wiki_trait_effect_slow_digestion": "Starvation threshold increased by %0.", "wiki_trait_effect_astrologer": "Astrological sign improved by %0%.", "wiki_trait_effect_hard_of_hearing": "-%0% University Knowledge.", @@ -8683,7 +8685,7 @@ "wiki_trait_effect_leathery": "Negative impact of bad weather on morale is reduced from 5 to %0.", "wiki_trait_effect_pessimistic": "Stress increased by %0 points.", "wiki_trait_effect_hoarder": "+%0% bank storage.", - "wiki_trait_effect_solitary": "-%0 Basic Housing cost creep, +%1 Medium Housing cost creep.", + "wiki_trait_effect_solitary": "-%0 cost creep for %2, +%1 cost creep for %3.", "wiki_trait_effect_kindling_kindred": "Lumber and Plywood resources removed, +%0% cost if building would normally cost Lumber or Plywood.", "wiki_trait_effect_iron_wood": "Boneweave resource removed, +%0% attack power.", "wiki_trait_effect_pyrophobia": "-%0% Smelter production.", @@ -8692,21 +8694,35 @@ "wiki_trait_effect_sticky": "Food requirements are lowered by %0% and combat rating is increased by %1%.", "wiki_trait_effect_fragrant": "Hunting produces %0% less.", "wiki_trait_effect_infectious": "Attacking has a chance to increase your population. Up to %0/%1/%2/%3/%4 enemies will be infected, depending on campaign type.", - "wiki_trait_effect_parasite": "Natural population growth only occurs when it's windy. Start with %0 Soldiers. %1% less loot recovered from attacks.", + "wiki_trait_effect_parasite": "Natural population growth only occurs when it's windy. Start with %0 Soldiers. Get %1% less loot when attacking. Up to 2 soldiers in each group have combat power boosted by 2, unaffected by other modifiers.", "wiki_trait_effect_toxic": "+%0% Factory Money/Alloy/Polymer production. +%1% Nano Tube/Stanene production. +%2% Cement production.", "wiki_trait_effect_nyctophilia": "-%0% Morale when Sunny. +%1% Morale when Cloudy.", "wiki_trait_effect_hibernator": "Food consumption is lowered by %0% during winter, but production is also lowered by %1%.", "wiki_trait_effect_infiltrator": "Spies are cheaper and you occasionally steal tech advancements. Stealing is possible after reaching a knowledge cap above %0% of the tech's base cost. One fewer Scout Ship is needed to determine the threat in an area.", "wiki_trait_effect_infiltrator_ex1": "Stolen techs are not random and are generally stolen earlier than can be normally acquired.", "wiki_trait_effect_infiltrator_ex2": "Stolen Tech List: %0.", - "wiki_trait_effect_cannibalize": "Gain Sacrificial Altar. Sacrifice population for %0% boons.", + "wiki_trait_effect_cannibalize": "Gain Sacrificial Altar. Sacrifice population for %0% bonuses. Bonuses boost %1, %2, Combat Power, Healing Rate, or Knowledge Income at random. Any number of the boosts may be active at once. If the same boost is chosen again before expiring, its duration is extended.", + "wiki_trait_effect_cannibalize_ex1": "Boost duration is randomized in a range which is dependent on tech levels. Each sacrifice extends boost duration by 300 to 600 seconds by default, 600 to 1500 seconds after %0, 1800 to 3600 seconds after %1, and 5400 to 16200 seconds after %2.", "wiki_trait_effect_frail": "Soldier deaths increased by %0 on won fights, and by %1 on lost fights.", "wiki_trait_effect_malnutrition": "-%0% starvation penalty.", "wiki_trait_effect_claws": "Combat rating and average combat roll increased by %0%.", "wiki_trait_effect_atrophy": "Starvation threshold decreased by %0.", - "wiki_trait_effect_hivemind": "Soldier, Lumberjack, Quarry Worker, Miner, Coal Miner, Professor, and Scientist effectiveness scales with the number of workers assigned to that job. Breaks even at %0 workers.", + "wiki_trait_effect_hivemind": "Effectiveness of many jobs scales with the number of workers assigned to that job. Breaks even at %0 workers.", + "wiki_trait_effect_hivemind_ex1": "The jobs affected are: %0, %1, %2, %3, %4, %5, and %6", + "wiki_trait_effect_hivemind_ex2": "For each worker below the breakpoint, the job suffers a 5% production penalty (scaled by the population factor if you have %0). For each worker above the breakpoint, effectiveness increases with diminishing returns to a maximum bonus of +%1%.", + "wiki_trait_effect_hivemind_ex3": "Each group of %0 runs its own %2 calculation independent of other groups of %0. %3 boost the sizes of groups that they are a part of by %4 before %5, and %6 after. %0 above the breakpoint apply a %1% boost each.", + "wiki_trait_effect_hivemind_ex4": "Each attacking force or hell patrol is considered a separate group. Defenders of the hell fortress, guards at the hell forge, guards posted at the Pit, troops in troop landers, and droid soldiers are also considered groups, with each category being one group.", + "wiki_trait_effect_hivemind_ex5": "Handling for other jobs is counted as a total of all workers assigned to the job. Species with %0 receive a %1% boost per worker above the breakpoint, and other species receive a %2% boost per worker above the breakpoint.", + "wiki_trait_effect_hivemind_ex6": "The improvements to %5 from the %0, %1, and %2 traits and the improvement to %6 from the %3 governor increase effective worker counts, which will boost bonuses from %4", + "wiki_trait_effect_hivemind_ex7": "The diminishing return calculation is: boost = 100% - (100% - boost per worker) ^ (workers over the breakpoint). In words, each additional worker over the breakpoint gets the current boost [boost per worker] closer to a bonus of 100%.", "wiki_trait_effect_tunneler": "-%0 Mine and Coal Mine cost creep.", "wiki_trait_effect_blood_thirst": "Frequent combat raises morale up to +%0%. Warmonger penalty is disabled.", + "wiki_trait_effect_blood_thirst_ex1": "The %0 achievement may still be earned.", + "wiki_trait_effect_blood_thirst_ex2": "Bonus is log base 2 of the current number of Blood Thirst stacks. Stacks are capped such that the maximum bonus is as in the trait description. Stacks decay at the rate of %0 per day. Stacks are earned from the following events:", + "wiki_trait_effect_blood_thirst_ex3": "%0 stack earned for every %1 enemies fought while you are attacking other cities.", + "wiki_trait_effect_blood_thirst_ex4": "%0 stack earned for every %1 enemies fought while your city is being Raided, Pillaged, or Seiged.", + "wiki_trait_effect_blood_thirst_ex5": "%0 stacks earned each time a Terrorist Attack happens.", + "wiki_trait_effect_blood_thirst_ex6": "Up to %0 stack earned for every %1 demons encountered by patrols in hell, at random.", "wiki_trait_effect_apex_predator": "+%0% Combat Rating. +%1% Hunting production. Armor is disabled.", "wiki_trait_effect_invertebrate": "-%0% combat loot gained.", "wiki_trait_effect_suction_grip": "+%0% Global production.", @@ -8714,21 +8730,21 @@ "wiki_trait_effect_environmentalist": "Hydroelectric Dams (+%0MW) and Wind Farms (+%1MW-%2MW depending on wind) replace Coal (+%3MW) and Oil (+%4MW) Powerplants. Windmill power production set to %5MW.", "wiki_trait_effect_unorganized": "+%0% blackout time between changing governments.", "wiki_trait_effect_musical": "Entertainers increase morale by an additional %0%.", - "wiki_trait_effect_revive": "Chance for soldiers to revive when killed. Hot temperatures increase chance of triggering effect, while cold temperatures lower it. Revive chance also scales with trait rank.", + "wiki_trait_effect_revive": "Each time soldiers die, a random number of the killed soldiers are revived. When victorious, at most %0%/%1%/%2% of soldiers will be revived when weather is %7/%8/%9. When defeated, at most %3%/%4%/%5% of soldiers will be revived when weather is %7/%8/%9. At most %6% of soldiers killed during Hell Patrols will revive.", "wiki_trait_effect_slow_regen": "Soldiers heal %0% slower.", "wiki_trait_effect_forge": "Smelters do not require fuel and get the Oil bonus all the time. +%0MW produced by Geothermal Plants.", "wiki_trait_effect_autoignition": "Library Knowledge production bonus reduced by %0%.", - "wiki_trait_effect_blurry": "Spy Missions are less likely to fail. Surveyors are %0% less likely to be killed.", + "wiki_trait_effect_blurry": "%1 missions are %2% less likely to fail, %3 missions are %4% less likely to fail, and %5 missions are %6% less likely to fail. Surveyors are %0% less likely to be killed.", "wiki_trait_effect_snowy": "Morale is lowered by %0 to %1 when it's not snowing.", "wiki_trait_effect_ravenous": "Food consumption increases with your Food stockpile. Eat %0% more food + 1/%1 of your stockpile per tick.", - "wiki_trait_effect_ghostly": "+%0% Food from Hunting. +%1 base Food per Soul Well. +%2% Soul Gem drop rate.", + "wiki_trait_effect_ghostly": "+%0% Food from Hunting. +%1 base Food per Soul Well. +%2% Soul Gem drop rate in combat.", "wiki_trait_effect_lawless": "Government lockout timer is reduced by %0%.", - "wiki_trait_effect_mistrustful": "Hostilities grow quicker with foreign governments. +%0% extra hate gained from attacking.", - "wiki_trait_effect_humpback": "Starvation threshold increased by %0. Lumberjacks, Quarry Workers, Miners, and Coal Miners produce %1% more.", + "wiki_trait_effect_mistrustful": "Hostilities grow quicker with foreign governments. +%0 extra percentage points of hate gained from attacking.", + "wiki_trait_effect_humpback": "Starvation threshold increased by %0. Lumberjacks and %2 produce %1% more.", "wiki_trait_effect_thalassophobia": "Wharves are unavailable.", "wiki_trait_effect_unfavored": "The gods have cursed you inverting astrological effects into negatives. Negative effects at %0% potency.", "wiki_trait_effect_fiery": "+%0% Combat Rating. +%1% Hunting production.", - "wiki_trait_effect_terrifying": "You cannot trade; however, titanium can be gained from combat. Amount of titanium gained scales with trait rank.", + "wiki_trait_effect_terrifying": "You cannot trade; however, titanium can be gained from combat. Titanium is added as a Rare lootable resource, and base Titanium gained is in the range of %0 to %1. Get the benefit of %2 without having to research it.", "wiki_trait_effect_slaver": "You can capture slaves in combat, who boost your productivity by %0% each.", "wiki_trait_effect_compact": "-%0 Planetary cost creep, -%1 Non-Homeworld cost creep.", "wiki_trait_effect_conniving": "%0% better buying prices, %1% better selling prices.", @@ -8739,48 +8755,85 @@ "wiki_trait_effect_unified": "Start with Unification. Unification gains +%0%.", "wiki_trait_effect_gloomy": "Gain a %0% global production bonus if not Sunny.", "wiki_trait_effect_rainbow": "Gain a %0% global production bonus if Sunny after Raining.", - "wiki_trait_effect_magnificent": "Moon Shrines are available; gain boons depending on Moon Phase. Waxing Crescent Moon = %4% Morale Bonus, Waxing Gibbous Moon = %3% Metal Bonus, Waning Gibbous Moon = +%0Knowledge & %1% University Knowledge Bonus, Waning Crescent Moon = %2% Tax Bonus. Cycles with moon phase if constructed during New Moon, Full Moon, or Quarter Moon.", + "wiki_trait_effect_magnificent": "Construct shrines whose effect depends on the moon phase at the time the shrine is constructed. Waxing Crescent: +%4% Morale, Waxing Gibbous: +%3% Metals, Waning Gibbous: +%0Knowledge & +%1% University Knowledge, Waning Crescent: +%2% Tax Income. Bonus cycles with current moon phase if constructed at other times.", + "wiki_trait_effect_magnificent_ex1": "Shrines without a fixed effect have no effect during %0, both adjacent effects during %1 or %2, and every available effect during %3.", "wiki_trait_effect_noble": "Taxes cannot be raised above %1% or lowered below %0%.", "wiki_trait_effect_artifical": "New population doesn't grow automatically; instead they must be manufactured. Citizens assigned to science jobs are %0% more effective.", - "wiki_trait_effect_powered": "Each citizen requires %0MW of power to remain functional; however, miner, lumberjack, and cement worker jobs are %1% more effective.", - "wiki_trait_effect_imitation": "Gain the main traits of a previous race you completed an AI Apocalypse with (%2). Positive traits are imitated at rank %0, while negative traits are imitated at rank %1.", + "wiki_trait_effect_powered": "Each citizen requires %0MW of power to remain functional. %2, %3, and %4 are %1% more effective.", + "wiki_trait_effect_imitation": "Gain the genus and species traits of a race you completed an AI Apocalypse with (%2). Positive traits are imitated at rank %0, while negative traits are imitated at rank %1.", + "wiki_trait_effect_imitation_ex1": "If a custom or custom hybrid is imitated, only the species fanaticism trait and the species trait with the lowest value will be imitated, otherwise all species traits are imitated.", + "wiki_trait_effect_imitation_ex2": "Requires the %0 genus to take during custom species creation.", + "wiki_trait_effect_imitation_ex3": "Species having this trait at the start of a run may choose their target from among any race that has completed an %0 reset. Others will get whatever target was last imitated.", + "wiki_trait_effect_imitation_ex4": "Imitated traits will be boosted by %0 if they meet the value requirements.", + "wiki_trait_effect_imitation_ex5": "Traits from the Imitated genus may not be mutated in the %0 tab.", "wiki_trait_effect_emotionless": "Entertainers are %0% less effective, but jobs are also %1% less stressful.", - "wiki_trait_effect_logical": "Wardenclyffe base Knowledge requirement lowered by %0. Adds %1 * a science factor to your Knowledge cap per citizen.", - "wiki_trait_effect_logical_ex1": "Science factor value is your tech level of Science (%0) + High Tech (%1)", + "wiki_trait_effect_logical": "Wardenclyffe base Knowledge requirement lowered by %0. Adds %1 for each %2 and each %3 to your Knowledge cap per citizen.", "wiki_trait_effect_linked": "Quantum level is increased by %0% per citizen. Linked effect degrades above %1%.", - "wiki_trait_effect_deconstructor": "Convert resources into Nanites at %0% efficiency.", - "wiki_trait_effect_shapeshifter": "Ability to assume genus properties from other genus. Positive traits are assumed at rank %0, while negative traits are assumed at rank %1.", + "wiki_trait_effect_linked_ex1": "If there is an effect of X% effect over the cap, the effect above the cap is divided by a factor of ((X / 100) + 200 - cap).", + "wiki_trait_effect_deconstructor": "Your species requires Nanites to construct additional members. A new building is added to your city that can convert resources into Nanites at %0% efficiency. Nanites are also needed to build %1, %2, %3, and %4", + "wiki_trait_effect_shapeshifter": "Select or change the genus you wish to copy traits from at any time in the Civics tab. Positive traits are assumed at rank %0, and negative traits are assumed at rank %1.", + "wiki_trait_effect_shapeshifter_ex1": "Acquired traits will be boosted by %0 if they meet the value requirements.", + "wiki_trait_effect_shapeshifter_ex2": "Traits from the selected genus may not be mutated in the %0 tab.", "wiki_trait_effect_psychic": "Energy Regen +%2. Psychic Effect Power +%3%. Mind Break +%0%. Thrall effectiveness +%1%.", - "wiki_trait_effect_unfathomable": "Your culture is nightmarish and incomprehensible to outsiders.", + "wiki_trait_effect_unfathomable": "%0 surface dwelling species available. Surface Dweller capture difficulty is %1%. Each thrall gives %2% bonus production per rank of %3.", "wiki_trait_effect_unfathomable_ex1": "You employ a special variant of hunters called raiders. Raiders raid the surface world to steal resources, people, and cattle. Captured surface dwellers can be converted into thralls who give bonuses dependent on the species of thrall.", "wiki_trait_effect_unfathomable_ex2": "Thrall bonuses are related to the thrall species and most often are a derivative of their fanatic trait and will stack with the real trait.", - "wiki_trait_effect_darkness": "Sunny days have a chance to be replaced with cloudy.", + "wiki_trait_effect_darkness": "When sunny weather would start, it is replaced with cloudy weather %0% of the time.", "wiki_trait_effect_tormented": "Morale above 100% is greatly reduced by %0%.", - "wiki_trait_effect_swift": "Combat rating is improved by %0% and you catch prospect thralls %1% easier.", + "wiki_trait_effect_swift": "Combat rating is improved by %0% and you catch prospect thralls %1% easier. Get %2% bonus output for all %5. If both %3 and %4 are active, only one of their bonuses to %5 will be added.", + "wiki_trait_effect_swift_ex1": "The bonus to %1 multiplies with the bonus from %0.", "wiki_trait_effect_dark_dweller": "Hunting efficiency reduced by %0% when sunny.", "wiki_trait_effect_anthropophagite": "Your citizens will kill and eat each other if food runs low. Gain %0 food per murder.", "wiki_trait_effect_bloated": "Your sheer mass requires you to use %0% extra basic resources when building things.", - "wiki_trait_effect_living_tool": "You do not need to develop basic tools like pickaxes; instead, you adapt your body to perform those functions. Gets better with scientific advancement.", + "wiki_trait_effect_living_tool": "All tool research removed. Get %1% bonus output for all %8. If both %6 and %7 are active, only one of their bonuses to %8 will be added. Crafting rate improved by %0%. The following bonuses are applied once for each %10 attained: +%2% to Farmers, +%3% to Lumberjacks, +%4% to Foragers, +%5% to %9.", "wiki_trait_effect_artisan": "Your mastery and love of crafting grants %0% improved crafting, %1% improved factory production, and %2% improved morale per crafter.", - "wiki_trait_effect_stubborn": "You stubbornly refuse to accept new things, increasing knowledge costs of significant scientific advancements by %0%.", - "wiki_trait_effect_rogue": "Randomly steal a resource, up to %0% of current cap.", + "wiki_trait_effect_stubborn": "You are slow to accept new things. Technologies that advance your %4 or %5 are %0% more expensive, except for %1, %2, and %3.", + "wiki_trait_effect_rogue": "A %1 major event is added to the event pool, in which a random availabe resource is stolen by your people and added to your stockpiles. Nab up to the smaller of 4% of your knowledge cap or %0% of the resource's storage cap.", "wiki_trait_effect_untrustworthy": "Buildings that store money cost %0% more due to needing increased security measures.", - "wiki_trait_effect_living_materials": "Self replicating living materials reduce construction costs over time for %0, %1, %2, & %3.", - "wiki_trait_effect_unstable": "%0% chance for up to %1% of citizens to expire every day.", - "wiki_trait_effect_elemental_electric": "You have an elemental affinity for %0. Each citizen generates %1 MW of power and your soldiers are %2% stronger.", + "wiki_trait_effect_living_materials": "%1, %2, %3, & %4 self-replicate, reducing costs of those materials in buildings by %0% every 25 days.", + "wiki_trait_effect_living_materials_ex1": "No cost reduction is applied for the first building of each type.", + "wiki_trait_effect_living_materials_ex2": "Building a building resets the cost reduction for that building to zero.", + "wiki_trait_effect_living_materials_ex3": "If both %0 and %1 are active, discounts for %2 are still in effect.", + "wiki_trait_effect_living_materials_ex4": "If %0 replaces %1, no discount is given for %0.", + "wiki_trait_effect_living_materials_ex5": "If %0 is active, discounts will still be given for replaced resources.", + "wiki_trait_effect_unstable": "%0% chance for up to %1% of citizens to die each day to start with, scaling down with increasing population. This trait does not interact with the event system.", + "wiki_trait_effect_unstable_ex1": "The scaling effect is that %0% of (citizens) ^ 0.9 die each time the deaths are triggered.", + "wiki_trait_effect_elemental_electric": "You have an elemental affinity for %0. Each citizen generates %1 MW of power to start with, scaling up with increasing population. Your soldiers are %2% stronger.", "wiki_trait_effect_elemental_acid": "You have an elemental affinity for %0. Each citizen improves industrial processes by %1% and your soldiers are %2% stronger.", "wiki_trait_effect_elemental_fire": "You have an elemental affinity for %0. Each citizen improves smelting processes by %1% and your soldiers are %2% stronger.", "wiki_trait_effect_elemental_frost": "You have an elemental affinity for %0. Each citizen improves your %3 by %1% and your soldiers are %2% stronger.", - "wiki_trait_effect_chicken": "You taste great, things want to eat you. Hell is %0% more brutal, and piracy effects are %1% worse. Unpleasant random events also occur.", - "wiki_trait_effect_tusk": "%0% of combat rating applied as mining bonus instead of using pickaxes. Gain %1% attack power depending on moisture level of environment. Combat bonus reduced in hell.", - "wiki_trait_effect_blubber": "Convert your own dead into Oil, %0 body per day per refinery.", - "wiki_trait_effect_ocular_power": "You can use up to %0 powers at a time. Ocular powers scaled to %1% power.", + "wiki_trait_effect_elemental_ex1": "The effect is dependent on the biome on your current planet:", + "wiki_trait_effect_elemental_ex2": "%0, %1, and %2 give this effect: %3", + "wiki_trait_effect_elemental_ex3": "%0, %1, and %2 give this effect: %3", + "wiki_trait_effect_elemental_ex4": "The scaling effect is (total power generated) ^ %0", + "wiki_trait_effect_elemental_ex5": "%0, %1, and %2 give this effect: %3", + "wiki_trait_effect_elemental_ex6": "%0, %1, and %2 give this effect: %3", + "wiki_trait_effect_chicken": "%0% more demons arrive to assault the Fortress in Hell. Patrol %3 are worsened by %2. Piracy and Syndicate rating are %1% higher. A %4 major event and a %5 minor event are added to the pool, both of which cause citizens to die.", + "wiki_trait_effect_tusk": "%5 get a bonus of %0% of combat rating instead of using pickaxes. If both %3 and %4 are active, only the larger %5 bonus will be applied. Gain a combat bonus equal to %2% of current moisture level, currently %1% bonus combat power. Wetter planet biomes and rainy weather will give a larger bonus. Combat bonus reduced by half in Hell.", + "wiki_trait_effect_tusk_ex1": "Moisture level is determined by planet biome type. %0 and %1 have a moisture level of 30. %2, %3, %4, and %5 have a moisture level of 20. %6 and %7 have a moisture level of 10. %8, %9, %10, and %11 have a moisture level of zero. %12 or %13 weather gives a bonus of 10 moisture while it persists.", + "wiki_trait_effect_blubber": "Convert corpses into Oil instead of extracting it as normal. Each %1/%2 consumes %0 corpse per day and stores a maximum of 50 corpses. Corpses are gained any time your people die. Get up to 2% of your current population at random in corpses each day due to old age deaths. This effect does not reduce population.", + "wiki_trait_effect_ocular_power": "You can use up to %0 powers at a time. Ocular powers operate at %1% strength.", + "wiki_trait_effect_ocular_power_ex1": "There are six Ocular Powers:", + "wiki_trait_effect_ocular_power_ex2": "Charm raises trade income by %0% of Ocular Power strength.", + "wiki_trait_effect_ocular_power_ex3": "Disintegration improves combat by %0% of Ocular Power strength.", + "wiki_trait_effect_ocular_power_ex4": "Fear improves patrol %2 by 1 for every %0% of Ocular Power strength. Also lowers Pirate and Syncicate activity by %1% of Ocular Power strength.", + "wiki_trait_effect_ocular_power_ex5": "Pertification converts killed enemies into %1. Every enemy provides %0% of Ocular Power strength in %1 over 2.5 seconds.", + "wiki_trait_effect_ocular_power_ex6": "Telekinesis increases the effectiveness of the following workers by %0% of Ocular Power strength: %1, %2, %3, %4 and %5", + "wiki_trait_effect_ocular_power_ex7": "Wound increases the hunting effectiveness of idle soldiers by %0% of Ocular Power strength", "wiki_trait_effect_floating": "Wind lowers global production by %0%.", "wiki_trait_effect_wish": "You can grant wishes with a cooldown period of up to %0 days.", "wiki_trait_effect_devious": "All trades are %0% worse, in buy/sell price and import volume.", - "wiki_trait_effect_grenadier": "You gain fewer soldiers but they are %0% stronger.", - "wiki_trait_effect_aggressive": "Random events occur that can kill up to %1/%0 citizens.", + "wiki_trait_effect_grenadier": "Soldiers are %0% stronger, and provide 75% more Authority in Evil universe. Soldier housing and military crew requirements for ships are both reduced.", + "wiki_trait_effect_grenadier_ex1": "Soldier housing is reduced by 25% in the %0 and 40% in all other buildings.", + "wiki_trait_effect_grenadier_ex2": "Military crew requirements are reduced by 25% for the %0, and 40% for all other ships.", + "wiki_trait_effect_grenadier_ex3": "Soldier reductions are rounded to the nearest soldier, and applied before effects from techs or %0.", + "wiki_trait_effect_grenadier_ex4": "%0 provides 1 less soldier for each building.", + "wiki_trait_effect_grenadier_ex5": "%0 and %1 receive a 50% crew discount if combined with %2.", + "wiki_trait_effect_grenadier_ex6": "The %0 houses a minimum of 1 soldier, so even if both %1 and %2 are active, the barracks will still house 1 soldier. However, %3 has no effect in this case.", + "wiki_trait_effect_aggressive": "A %2 major event is added that can kill up to %0 %4. A %3 minor event is added that can kill up to %1 %4.", "wiki_trait_effect_empowered": "Other traits with value between %0 and %1 you own are ranked up.", + "wiki_trait_effect_empowered_ex1": "Traits received after the start of a run through %0, %1, %2, %3, or %4 are also ranked up if they meet the value requirements.", + "wiki_trait_effect_empowered_ex2": "Considers only the base value of a trait before cost creep or changes in value due to ranking up or down is applied.", "wiki_trait_effect_blasphemous": "Temple production effect is %0% weaker.", "wiki_trait_effect_blasphemous_evil": "Propaganda Center production effect is %0% weaker.", "wiki_trait_effect_catnip0.1": "Do you even clean the litterbox?", @@ -8803,7 +8856,7 @@ "wiki_trait_effect_emfield": "Natural EM fields generated by your species disrupt electricity.", "wiki_trait_effect_tactical": "+%0% Combat Rating.", "wiki_trait_effect_analytical": "+%0% Professor and Scientist Knowledge production.", - "wiki_trait_effect_promiscuous": "Increases population growth rate.", + "wiki_trait_effect_promiscuous": "Increases population growth %3 by %0 per level. Members of the %2 genus get a %1% discount on constructing new members per level.", "wiki_trait_effect_resilient": "+%0% Coal Miner production.", "wiki_trait_effect_cunning": "+%0% Hunting production.", "wiki_trait_effect_hardy": "+%0% Cement Worker production.", @@ -9653,11 +9706,18 @@ "wiki_mechanics_multiplier_para3": "The keys can be rebound on the settings tab.", "wiki_mechanics_multiplier_para4": "%0 work on just about anything that can be clicked except for manual resource gathering.", "wiki_mechanics_multiplier_para5": "If you think clicking something is repetitive, then you are doing it wrong; use the %0!", + "wiki_mechanics_job_types": "Job Types", + "wiki_mechanics_job_type_basic": "Basic Jobs", + "wiki_mechanics_job_type_mining": "Mining Jobs", + "wiki_mechanics_job_types_para1": "Many of the jobs in Evolve are oraganized into types that make it easier to understand which jobs are included or excluded from an effect.", + "wiki_mechanics_job_types_para2": "The two most common types are the %0 and the %1.", + "wiki_mechanics_job_types_para3": "The %7 are: %0, %1, %2, %3, %4, %5, and %6", + "wiki_mechanics_job_types_para4": "The %6 are: %0, %1, %2, %3, %4, and %5", "wiki_mechanics_job": "Default Job", "wiki_mechanics_job_para1": "The %0 is the job that new population automatically fill by default.", "wiki_mechanics_job_para2": "It is denoted by the job with an %0 next to it.", - "wiki_mechanics_job_para3": "You can change the %0 by clicking on another basic job.", - "wiki_mechanics_job_para4": "Only the basic jobs can be set as the default job.", + "wiki_mechanics_job_para3": "You can change the %0 by clicking on another of the %1.", + "wiki_mechanics_job_para4": "Only the %0 can be set as the default job.", "wiki_mechanics_job_para5": "The default job acts as a staging ground for your population.", "wiki_mechanics_job_para6": "If a citizen dies, one is reassigned automatically from the default job to cover the loss.", "wiki_mechanics_job_para7": "If you lose more population than can be covered by those in the default job, then other jobs will start to suffer losses.", @@ -9671,6 +9731,18 @@ "wiki_mechanics_job_stress_para5": "Differently from regular job types, the job stress generated by soldiers is linked to the current max number of soldiers rather than the number of soldiers alive.", "wiki_mechanics_job_stress_para6": "The %0 and %1 traits apply a flat bonus/malus to the %2 value reflected in the %3 tooltip, not individually impacting the job stress of any actual job.", "wiki_mechanics_job_stress_para7": "Some governments and %0 foreign powers apply overall multipliers to the total job stress generated by your people.", + "wiki_mechanics_pop_growth": "Population Growth", + "wiki_mechanics_pop_growth_lower_bound": "Lower Bound", + "wiki_mechanics_pop_growth_upper_bound": "Upper Bound", + "wiki_mechanics_pop_growth_valentines_day": "Valentine's Day", + "wiki_mechanics_pop_growth_para1": "Population growth is disabled entirely in these situations: Your people are starving (but not in the %0 challenge), you are at or exceeding your housing capacity, due to the %1, %2, and %3 traits, and after completing the %4 on the way to the %5 reset.", + "wiki_mechanics_pop_growth_para2": "Population growth is checked 4 times each second. It depends on two values: a %0 and an %1.", + "wiki_mechanics_pop_growth_para3": "The %0 starts at %1 by default, %2 after %3, and %4 after %5. It is then increased and decreased by a variety of effects throughout the game.", + "wiki_mechanics_pop_growth_para4": "The ordering of these effects can become important, since some multiply the current value as they are applied, and others add to the current value.", + "wiki_mechanics_pop_growth_para5": "The ordering of effects is: The holiday bonus for playing on %0, %1, %2, The effect of hospital count from %3, %4, %5, The effect applied during the %6 challenge, %7, %8, %9, %10, and the %11 planet modifier. The special effect of %12 in %13 or %14 applies after all these and sets the value, so it overrides all other effects.", + "wiki_mechanics_pop_growth_para6": "The %0 starts at your current population count * %1, or approximately your current population count * %2 and is changed by a few effects.", + "wiki_mechanics_pop_growth_para7": "The ordering of these effects is not important, since they are all multiplications.", + "wiki_mechanics_pop_growth_para8": "After modifications have been done, a random number between %0 and the %1 is chosen. If this random number is less than the %2, a new member of your species is born!", "wiki_mechanics_cost_creep": "Cost Creep", "wiki_mechanics_cost_creep_para1": "Cost creep is the number that the resource cost of a building is multiplied by for each constructed amount of that building, creating an exponential cost scaling.", "wiki_mechanics_cost_creep_para2": "If, for example, the %0 cost of a building starts at %1 and has a cost creep of %2, then after getting one of those buildings the next one will cost %3 %0, the one after that will cost %4 %0, and so on.", @@ -9784,6 +9856,12 @@ "wiki_mechanics_occupying_para18": "Unifying with all foreign powers Sieged grants the %0 achievement.", "wiki_mechanics_occupying_para19": "Unifying with all foreign powers Annexed grants the %0 achievement.", "wiki_mechanics_occupying_para20": "Unifying with all foreign powers Purchased grants the %0 achievement.", + "wiki_mechanics_tech_levels": "Technology Levels", + "wiki_mechanics_tech_levels_science": "Science Level", + "wiki_mechanics_tech_levels_high_tech": "High Tech Level", + "wiki_mechanics_tech_levels_para1": "Some effects in Evolve interact with technology levels of various kinds. The two most prominent of these levels are the %2 and the %3. Typically, technologies in the %0 and %1 categories are adding to those respective levels. However, there are some exceptions so the specific technologies are listed below.", + "wiki_mechanics_tech_levels_para2": "The following technologies advance the %23: %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, Completing construction of the %9, %10, %11, %12, %13, %14, %15, %16, %17, %18, %19, %20, %21, and %22", + "wiki_mechanics_tech_levels_para3": "The following technologies advance the %19: %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, and %18", "wiki_mechanics_religion": "Religion", "wiki_mechanics_religion_para1": "%0 is a new mechanic that is unlocked after your first reset.", "wiki_mechanics_religion_para2": "Your new race will always consider your last race to be their gods; there is no religion on your first run as you do not yet have any gods.", @@ -10111,7 +10189,7 @@ "wiki_government_democracy_para3": "This has no effect on other sources of entertainment, only on the %0 job.", "wiki_government_democracy_para4": "The bonus is raised to %0 when you research %1; it is further raised to %2 when you research %3.", "wiki_government_democracy_para5": "Democracy also lowers worker production by %0.", - "wiki_government_democracy_para6": "This penalty is applied to all the basic job types: %0, %1, %2, %3, %4, %5, %6, %7, %8, and %9.", + "wiki_government_democracy_para6": "This penalty is applied to all these jobs: %0, %1, %2, %3, %4, %5, %6, %7, %8, and %9.", "wiki_government_oligarchy_para2": "Tax revenue is %0 lower, but taxes can be set %1 higher, high tax morale penalty is lower, and people are less likely to riot.", "wiki_government_oligarchy_para3": "The tax penalty is lowered to %0 when you research %1; it is eliminated entirely when you research %2.", "wiki_government_oligarchy_para4": "Tax riots will not occur unless taxes are raised above %0.", @@ -10239,17 +10317,17 @@ "wiki_combat_loot_para12": "The maximum number of looters for an Ambush is %0.", "wiki_combat_loot_para13": "A %0 makes %1 loot rolls: the 1st roll is for %2, the 2nd roll is for %3 resources, the 3rd roll is for %4 resources, and the 4th roll can be for %2, %3, %4, or %5 resources.", "wiki_combat_loot_para14": "With the %0 trait, an extra roll is made for %1, %2, %3, or %4 resources.", - "wiki_combat_loot_para15": "The maximum number of looters for a Raid is %0.", + "wiki_combat_loot_para15": "The maximum number of looters for a Raid is %0. All loot obtained from Raids is multiplied by %1.", "wiki_combat_loot_para16": "A %0 makes %1 loot rolls: the 1st roll is for %2, the 2nd roll is for %3 resources, the 3nd roll is for %3 resources, the 4th roll can be for %2, %3, %4, or %5 resources, and the 5th roll is for either %4 or %5 resources.", "wiki_combat_loot_para17": "With the %0 trait, an extra roll is made for %1, %2, %3, or %4 resources.", - "wiki_combat_loot_para18": "The maximum number of looters for a Pillage is %0.", + "wiki_combat_loot_para18": "The maximum number of looters for a Pillage is %0. All loot obtained from Pillaging is multiplied by %1.", "wiki_combat_loot_para19": "An %0 makes %1 loot rolls: the 1st roll is for %2, the 2nd roll is for %3 resources, the 3rd roll is for %4 resources, the 4th roll is for %5 resources, and the 5th roll can be for %2, %3, %4, or %5 resources.", "wiki_combat_loot_para20": "With the %0 trait, an extra roll is made for %1, %2, %3, or %4 resources.", - "wiki_combat_loot_para21": "The maximum number of looters for an Assault is %0.", + "wiki_combat_loot_para21": "The maximum number of looters for an Assault is %0. All loot obtained from an Assault is multiplied by %1.", "wiki_combat_loot_para22": "A %0 makes %1 loot rolls: the 1st roll is for %2, the 2nd roll is for %3 resources, the 3rd roll is for %4 resources, the 4th roll is for %5 resources, and the 5th roll can be for %2, %3, %4, or %5 resources.", "wiki_combat_loot_para23": "With the %0 trait, an extra roll is made for %1, %2, %3, or %4 resources.", "wiki_combat_loot_para24": "A %0 can also result in occupying the enemy city.", - "wiki_combat_loot_para25": "The maximum number of looters for a Siege is %0.", + "wiki_combat_loot_para25": "The maximum number of looters for a Siege is %0. All loot obtained from a Seige is multuplied by %1.", "wiki_combat_loot_para26": "After the raw loot types and values are selected, the resulting amount of each resource is modified.", "wiki_combat_loot_para27": "First, the loot is boosted by the number of living soldiers in your battalion who are designated as looters, using the following formula:", "wiki_combat_loot_para28": "%0", @@ -10840,9 +10918,9 @@ "wiki_p_res_ai_core_para2": "They passively boost your Quantum Level.", "wiki_p_res_servants": "Servants", "wiki_p_res_servants_para1": "Servants are gained by completing a %0, %1, or %2 reset.", - "wiki_p_res_servants_para2": "They can work any basic job and join shortly after starting a new game.", + "wiki_p_res_servants_para2": "They can work any of the %0 and join shortly after starting a new game.", "wiki_p_res_servants_para3": "Servants have no upkeep and do not affect morale.", - "wiki_p_res_servants_para4": "If no basic jobs are available, they will be able to work as Scavengers.", + "wiki_p_res_servants_para4": "If no %0 are available, they will be able to work as Scavengers.", "wiki_p_res_servants_para5": "You can also gain some Servants from the %0 perk.", "wiki_p_res_skilled_servants": "Skilled Servants", "wiki_p_res_skilled_servants_para1": "Skilled Servants are gained by completing a %0 and %1 reset.", @@ -10911,9 +10989,12 @@ "wiki_hell_siege_para4": "Defenses repel the demon assault; the higher your defense rating is the less wall damage you will take.", "wiki_hell_siege_para5": "With enough defense and proper threat reduction management, your fortress will be totally secure.", "wiki_hell_strategy": "Patrol Strategy", + "wiki_hell_strategy_ambush_odds": "Amush Odds", "wiki_hell_strategy_para1": "It's generally a good idea to start with a small number of large patrols and then transition to a larger number of smaller patrols as you get the threat down.", "wiki_hell_strategy_para2": "Make sure you can replace your soldiers quick enough that you don't lose patrols due to running out of soldiers, as this can lead to a death spiral if you are not able to replace lost soldiers fast enough.", "wiki_hell_strategy_para3": "When you are able to handle it, you should run as many patrols as you safely can, but do not overextend your forces.", + "wiki_hell_strategy_para4": "Patrols will occasionally be ambushed, resulting in poorer combat outcomes and lower chances of demons dropping a %0.", + "wiki_hell_strategy_para5": "%5 start at %0 in %1 and are modified by increasing and decreasing the divisor. For instance, an improvement of %2 and a worsening of %3 together will change the odds from %0 in %1 to %0 in (%1 + %2 - %3), or %0 in %4.", "wiki_hell_soul_gem": "Soul Gems", "wiki_hell_soul_gem_para1": "%0 are a rare resource found in the %1, primarily by patrols.", "wiki_hell_soul_gem_para2": "Each patrol has a chance to find a Soul Gem when it has an enemy encounter; naturally, this means the more patrols you run the more Soul Gems you will find.", @@ -10940,7 +11021,7 @@ "wiki_hell_pillar_para2": "This provides a stacking permanent bonus that gives you +%0 production bonus for each pillared species, called %1.", "wiki_hell_pillar_para3": "An additional +%0 bonus is gained if you have ever pillared your current species.", "wiki_hell_pillar_para4": "%0 also provides a storage bonus of %1 for each pillared species and %2 if the current species is pillared.", - "wiki_hell_pillar_para5": "Additionally, each activated pillar discounts the number of %0 segments you need to build to open the ancient gate by %1.", + "wiki_hell_pillar_para5": "Additionally, each activated pillar discounts the number of %0 segments you need to build to open the ancient gate by %1 plus %2 for each challenge gene active when the pillar is done.", "wiki_hell_pillar_para5d1": "Tower", "wiki_hell_pillar_para6": "Your current %0 bonus is: %1 Production, %2 Storage.", "wiki_hell_spire": "The Hell Spire", @@ -10959,7 +11040,7 @@ "wiki_hell_scout_para4": "The Scout mech uses %0 mech bay space. It costs %1 supply and %2 soul gem to construct.", "wiki_hell_scout_para5": "Scout class mechs can use the special %0 equipment item.", "wiki_hell_scout_para6": "The scouting bonus provided by scout mechs helps reduce terrain penalties on all non-scout mechs.", - "wiki_hell_scout_para7": "Each scout mech counters %0 of the terrain penalty.", + "wiki_hell_scout_para7": "Each scout mech counters %0 percentage point of the terrain penalty.", "wiki_hell_scout_para8": "The scouting bonus is halved if the %0 or %1 hazards are in play.", "wiki_hell_scout_para9": "Scouting has no effect if the terrain multiplier is above %0 for a mech and can not be raised above %0 from scouting.", "wiki_hell_scout_para10": "Scout mechs are %0 less effective in the concrete terrain environment.", @@ -11056,7 +11137,7 @@ "wiki_hell_hazard_effect_w": "Demon effectiveness reduced by %0.", "wiki_hell_hazard_counter": "Countered by %0.", "wiki_hell_hazard_counter_w": "Countered by %0, %1, %2, or %3.", - "wiki_hell_hazard_partial": "Partly Countered by %0", + "wiki_hell_hazard_partial": "Partly Countered by %0. Hazard Reduced to %1.", "wiki_hell_hazard_chassis": "Mech effectiveness reduced by %0 if using %1 mech.", "wiki_hell_hazard_chassis_w": "Demon effectiveness reduced by %0 if using %1, %2, %3, or %4 demon.", "wiki_hell_hazard_not_chassis": "Mech effectiveness reduced by %0 if not using %1 mech.", @@ -11079,8 +11160,8 @@ "wiki_hell_eq_battery_para1": "The %0 is available to the %1.", "wiki_hell_eq_battery_para2": "It gives a flat %0 damage increase to the mech.", "wiki_hell_eq_target_para1": "The %0 is available to the %1.", - "wiki_hell_eq_target_para2": "It negates up to %0 of the penalty taken by ineffective weapons on a target.", - "wiki_hell_eq_target_para3": "It has no effect if the target is completely immune to a weapon type or is already taking full damage from it.", + "wiki_hell_eq_target_para2": "It negates %0 of the penalty taken by ineffective weapons on a target.", + "wiki_hell_eq_target_para3": "It has no effect if the target is completely immune to a weapon type.", "wiki_hell_eq_scavenger_para1": "The %0 is available to minion class demons.", "wiki_hell_eq_scavenger_para2": "It allows the demon to gather small amounts of supplies from the spire.", "wiki_hell_eq_scouter_para1": "The %0 is available to minion class demons.", @@ -11367,6 +11448,24 @@ "wiki_events_m_curious_para5": "An ancient puzzle may distract your people, reducing global production by %0 for %1 to %2 game seconds.", "wiki_events_m_curious_para6": "A cache of catnip may stimulate your people if they are %0, boosting global production by %1 for %2 to %3 game seconds.", "wiki_events_m_curious_condition_para1": "Requires the %0 trait and at least 40 citizens.", + "wiki_events_klepto": "Rogue", + "wiki_events_klepto_para1": "Your people have an inclination to steal things, which can work to their advantage.", + "wiki_events_klepto_para2": "The resource stolen is chosen at random from any available resource in the following list:", + "wiki_events_klepto_para3": "%0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, %18, %19, %20, %21, %22, %23, %24, %25, %26, %27, %28, %29, %30, %31, %32, %33, %34, %35, %36, %37, %38, %39", + "wiki_events_klepto_para4": "The maximum amount of resources stolen will be the smaller of %1% of your maximum storage for the chosen resource or %0% of your maximum knowledge.", + "wiki_events_klepto_para5": "A random number is rolled between zero and the maximum amount. The stolen resources are then added to your stockpiles!", + "wiki_events_chicken_feast": "Chicken Feast", + "wiki_events_chicken_feast_para1": "Your peoples' delicious flesh is a major problem for them.", + "wiki_events_chicken_feast_para2": "%0 to %1 of your citizens are eaten at a feast, at random. Maximum scales up with %2", + "wiki_events_brawl": "Brawl", + "wiki_events_brawl_para1": "Their rowdy nature leads your peoples' %0 prone to starting deadly brawls.", + "wiki_events_brawl_para2": "%0 to %1 %2 are killed in a brawl, at random.", + "wiki_events_chicken": "Chicken", + "wiki_events_chicken_para1": "Your peoples' delicious flesh is a major problem for them.", + "wiki_events_chicken_para2": "%0 of your citizens is killed and eaten.", + "wiki_events_fight": "Fight", + "wiki_events_fight_para1": "Your people are prone to fights, escpecially among %0. Sometimes those fights turn deadly.", + "wiki_events_fight_para2": "%0 to %1 %2 are killed in a fight, at random.", "wiki_events_minor_intro": "Minor Events", "wiki_events_minor_intro_para1": "Minor events work using a similar system to the one that Major events use.", "wiki_events_curious": "Curious", From 8f22c744d90703f6d14722f867afc033ba99220c Mon Sep 17 00:00:00 2001 From: Gandalph Date: Wed, 11 Feb 2026 17:16:50 +0100 Subject: [PATCH 3/4] Relatively minor compared to last update. This update includes: Bugs: -The description for the Guard Post in the Pit did not display the correct value for the amount of Security provided if the species has Hivemind. This has been fixed, and now displays the average value of all the guard posts currently, or the value of the first Guard Post if none are currently active. Wiki articles: -Rewrote articles on Soul Gems to add more details about how drop rates are calculated, as well as the many previously undocumented sources of Soul Gem drops. -Rewrote article on CRISPR Mutation to show more information about how costs are calculated, as well as which traits will or will not be available to add to a species using this mechanic. -Made a new article in Gameplay->Mechanics about what happens if a trait is gained from multiple sources. Traits: -Living Tool: Added an extra description detailing multiplicative interaction with Strong. -Terrifying: Added a link to the Combat Loot article. -Tusked: Text detailing values in the extra description is now highlighted. -Unstable: Fixed wording to show that UP TO 10% of citizens may die, instead of exactly 10%. -Tough: Added exception for the Quarry Worker in the description. Assume this was intentional. -Hivemind: Added extra description text about this trait having no effect in Lone Survivor. Misc: -All trait extra descriptions mentioning CRISPR Mutation now link to the CRISPR Mutation article. -Added the amount of cost scaling reduction to the description of the Purification Blood Stone Shop upgrade. I think this is it for a while. I have more things on my docket, but I'll have to get farther in the game before I can evaluate where the wiki needs changes for them. --- src/portal.js | 5 +++- src/races.js | 28 ++++++++++-------- src/wiki/hell.js | 31 ++++++++++++++++++-- src/wiki/mechanics.js | 28 ++++++++++++++++-- strings/strings.json | 66 ++++++++++++++++++++++++++++++++++--------- 5 files changed, 126 insertions(+), 32 deletions(-) diff --git a/src/portal.js b/src/portal.js index cb0efe89d..0b0028e60 100644 --- a/src/portal.js +++ b/src/portal.js @@ -1906,12 +1906,15 @@ const fortressModules = { powered(){ return powerCostMod(5); }, support(){ return 1; }, effect(){ + //Make sure to handle interaction with Hivemind correctly + let guard_posts_on = Math.max(global.portal?.guard_post?.on, 1); + let rating = Math.round(armyRating(jobScale(guard_posts_on), 'hellArmy', 0) / guard_posts_on); let holy = global.race['holy'] ? 1 + (traits.holy.vars()[1] / 100) : 1; let unicornFathom = fathomCheck('unicorn'); if (unicornFathom > 0){ holy *= 1 + (traits.holy.vars(1)[1] / 100 * unicornFathom); } - let rating = Math.round(holy * armyRating(jobScale(1),'hellArmy',0)); + rating *= holy; return `
${loc('portal_guard_post_effect1',[rating])}
${loc('portal_guard_post_effect2',[jobScale(1),$(this)[0].powered()])}
`; }, action(args){ diff --git a/src/races.js b/src/races.js index 0a7838716..8863c48d1 100644 --- a/src/races.js +++ b/src/races.js @@ -390,7 +390,7 @@ export const traits = { name: loc('trait_instinct_name'), desc: loc('trait_instinct'), desc_extra: function(vals) { - return [loc(`wiki_trait_effect_instinct_ex1`,[6.67,warningText('galaxy_chthonian'),10])]; + return [loc(`wiki_trait_effect_instinct_ex1`,[warningTextNoLoc(6.67),warningText('galaxy_chthonian'),warningTextNoLoc(10)])]; }, type: 'genus', genus: 'herbivore', @@ -1896,7 +1896,7 @@ export const traits = { desc_extra: function(vals) { return [ loc(`wiki_trait_effect_hooved_ex1`,[hoovedRename(false, vals[1])]), - loc(`wiki_trait_effect_hooved_ex2`,[rName('Lumber'), rName('Copper'), rName('Iron'), rName('Steel'), rName('Adamantite'), rName('Orichalcum'), 12,75,150,500,5000]), + loc(`wiki_trait_effect_hooved_ex2`,[rName('Lumber'), rName('Copper'), rName('Iron'), rName('Steel'), rName('Adamantite'), rName('Orichalcum'), warningTextNoLoc(12),warningTextNoLoc(75),warningTextNoLoc(150),warningTextNoLoc(500),warningTextNoLoc(5000)]), loc(`wiki_trait_effect_hooved_ex3`), loc(`wiki_trait_effect_hooved_ex4`,[warningTextNoLoc(5),hoovedRename(false, vals[1])]), loc(`wiki_trait_effect_hooved_ex5`,[rName('Lumber'), rName('Copper')])]; @@ -2226,6 +2226,7 @@ export const traits = { desc: loc('trait_tough'), desc_function: function(vals) { vals[1] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[2] = loc('job_quarry_worker'); return vals; }, type: 'major', @@ -3285,7 +3286,8 @@ export const traits = { loc(`wiki_trait_effect_hivemind_ex4`), loc(`wiki_trait_effect_hivemind_ex5`, [warningText('trait_high_pop_name'), warningTextNoLoc(1.5), warningTextNoLoc(2)]), loc(`wiki_trait_effect_hivemind_ex6`, [warningText('trait_strong_name'), warningText('trait_living_tool_name'), warningText('trait_swift_name'), warningText('governor_educator'), warningText('trait_hivemind_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'), warningText('job_professor')]), - loc(`wiki_trait_effect_hivemind_ex7`)]; + loc(`wiki_trait_effect_hivemind_ex7`, [warningText('evo_challenge_lone_survivor')]), + loc(`wiki_trait_effect_hivemind_ex8`)]; }, type: 'major', origin: 'antid', @@ -3968,6 +3970,7 @@ export const traits = { desc: loc('trait_terrifying'), desc_function: function(vals) { vals[2] = loc('tech_corruption'); + vals[3] = linkTextNoColor('wiki_combat_loot', ['wiki.html#combat-gameplay-loot']); return vals; }, type: 'major', @@ -4301,7 +4304,7 @@ export const traits = { loc(`wiki_trait_effect_imitation_ex2`, [warningText('genelab_genus_synthetic')]), loc(`wiki_trait_effect_imitation_ex3`, [warningText('wiki_resets_ai')]), loc(`wiki_trait_effect_imitation_ex4`, [warningText('trait_empowered_name')]), - loc(`wiki_trait_effect_imitation_ex5`, [warningText('tech_dist_arpa')])]; + loc(`wiki_trait_effect_imitation_ex5`, [linkText('wiki_mechanics_crispr_mutation', 'wiki.html#mechanics-gameplay-crispr_mutation')])]; }, type: 'major', origin: 'synth', @@ -4392,7 +4395,7 @@ export const traits = { desc_extra: function(vals) { return [ loc(`wiki_trait_effect_shapeshifter_ex1`, [warningText('trait_empowered_name')]), - loc(`wiki_trait_effect_shapeshifter_ex2`, [warningText('tech_dist_arpa')])]; + loc(`wiki_trait_effect_shapeshifter_ex2`, [linkText('wiki_mechanics_crispr_mutation', 'wiki.html#mechanics-gameplay-crispr_mutation')])]; }, type: 'major', origin: 'nano', @@ -4599,6 +4602,9 @@ export const traits = { vals[10] = linkTextNoColor('wiki_mechanics_tech_levels_science', 'wiki.html#mechanics-gameplay-tech_levels'); return vals; }, + desc_extra: function(vals) { + return [loc(`wiki_trait_effect_living_tool_ex1`, [warningText('trait_strong_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types')])]; + }, type: 'major', origin: 'shoggoth', taxonomy: 'resource', @@ -4815,7 +4821,7 @@ export const traits = { name: loc('trait_unstable_name'), desc: loc('trait_unstable'), desc_extra: function(vals) { - return [loc(`wiki_trait_effect_unstable_ex1`, [warningText(vals[1])])]; + return [loc(`wiki_trait_effect_unstable_ex1`, [warningTextNoLoc(vals[1])])]; }, type: 'major', origin: 'lichen', @@ -4867,7 +4873,7 @@ export const traits = { loc(`wiki_trait_effect_elemental_ex1`), loc(`wiki_trait_effect_elemental_ex2`, [warningText('biome_savanna_name'), warningText('biome_forest_name'), warningText('biome_swamp_name'), loc('wiki_trait_effect_elemental_acid', [warningText('element_acid'), warningTextNoLoc(vals[2]), warningTextNoLoc(vals[5])])]), loc(`wiki_trait_effect_elemental_ex3`, [warningText('biome_grassland_name'), warningText('biome_desert_name'), warningText('biome_eden_name'), loc('wiki_trait_effect_elemental_electric', [warningText('element_electric'), warningTextNoLoc(vals[1]), warningTextNoLoc(vals[5])])]), - loc(`wiki_trait_effect_elemental_ex4`, [warningText(1.28)]), + loc(`wiki_trait_effect_elemental_ex4`, [warningTextNoLoc(1.28)]), loc(`wiki_trait_effect_elemental_ex5`, [warningText('biome_oceanic_name'), warningText('biome_tundra_name'), warningText('biome_taiga_name'), loc('wiki_trait_effect_elemental_frost', [warningText('element_frost'), warningTextNoLoc(vals[4]), warningTextNoLoc(vals[5]), warningText('city_biolab')])]), loc(`wiki_trait_effect_elemental_ex6`, [warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), loc('wiki_trait_effect_elemental_fire', [warningText('element_fire'), warningTextNoLoc(vals[3]), warningTextNoLoc(vals[5])])])] }, @@ -4966,9 +4972,9 @@ export const traits = { }, desc_extra: function(vals) { return [ - loc(`wiki_trait_effect_tusk_ex1`, [warningText('biome_oceanic_name'), warningText('biome_swamp_name'), warningText('biome_eden_name'), warningText('biome_forest_name'), - warningText('biome_grassland_name'), warningText('biome_savanna_name'), warningText('biome_tundra_name'), warningText('biome_taiga_name'), warningText('biome_desert_name'), - warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), warningText('rain'), warningText('thunderstorm')])]; + loc(`wiki_trait_effect_tusk_ex1`, [warningText('biome_oceanic_name'), warningText('biome_swamp_name'), warningTextNoLoc(30), warningText('biome_eden_name'), warningText('biome_forest_name'), + warningText('biome_grassland_name'), warningText('biome_savanna_name'), warningTextNoLoc(20), warningText('biome_tundra_name'), warningText('biome_taiga_name'), warningTextNoLoc(10), warningText('biome_desert_name'), + warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), warningTextNoLoc(0), warningText('rain'), warningText('thunderstorm'), warningTextNoLoc(10)])]; }, type: 'major', origin: 'narwhal', @@ -5245,7 +5251,7 @@ export const traits = { name: loc('trait_empowered_name'), desc: loc('trait_empowered'), desc_extra: function (vals) { - return [ loc(`wiki_trait_effect_empowered_ex1`, [warningText('tech_fanaticism'), warningText('tech_deify'), warningText('arpa_mutate'), warningText('trait_shapeshifter_name'), + return [ loc(`wiki_trait_effect_empowered_ex1`, [warningText('tech_fanaticism'), warningText('tech_deify'), linkText('wiki_mechanics_crispr_mutation', 'wiki.html#mechanics-gameplay-crispr_mutation'), warningText('trait_shapeshifter_name'), warningText('trait_imitation_name')]), loc(`wiki_trait_effect_empowered_ex2`)]; }, type: 'major', diff --git a/src/wiki/hell.js b/src/wiki/hell.js index 7160c23d6..2cdd62e02 100644 --- a/src/wiki/hell.js +++ b/src/wiki/hell.js @@ -27,10 +27,35 @@ export function hellPage(content){ }); sideMenu('add',`hell-gameplay`,'strategy',loc('wiki_hell_strategy')); - let soul = infoBoxBuilder(mainContent,{ name: 'soul_gem', template: 'hell', paragraphs: 4, + let soul = infoBoxBuilder(mainContent,{ name: 'soul_gem', template: 'hell', break: [2, 4, 5, 10, 15, 19, 24], paragraphs: 27, para_data: { - 1: [loc('wiki_hell_soul_gem'),loc('tab_portal')], - 3: [loc('tech_demon_attractor')] + 1: [loc('wiki_hell_soul_gem'),loc('tab_portal'), loc('portal_soul_forge_title')], + 2: [loc('resource_Soul_Gem_name')], + 3: [loc('wiki_hell_soul_gem')], + 4: [loc('resource_Soul_Gem_name'), '35', '1', '3', loc('tech_demon_attractor'), '5'], + 5: [loc('resource_Soul_Gem_name'), '1', '10000'], + 6: [loc('achieve_technophobe_name'), '10'], + 7: [loc('trait_ghostly_name')], + 8: [loc('tech_demon_attractor'), '5.2'], + 9: ['12'], + 10: [loc('wiki_hell_soul_gem')], + 11: ['10000'], + 12: [loc('tech_demon_attractor'), '22'], + 13: [loc('trait_chicken_name')], + 14: [loc('tech_dist_evil'), '10'], + 15: [loc('wiki_hell_soul_gem'), loc('portal_war_drone_title')], + 16: [loc('portal_war_drone_title'), '25-75', '50-125', loc('tech_advanced_predators')], + 17: ['50', '100'], + 18: [loc('portal_war_drone_title'), loc('resource_Soul_Gem_name')], + 19: [loc('portal_gun_emplacement_title'), loc('portal_soul_forge_title'), loc('wiki_hell_soul_gem')], + 20: [loc('portal_gun_emplacement_title')], + 21: ['1', '7500'], + 22: [loc('achieve_technophobe_name'), '10'], + 23: [loc('tech_demon_attractor'), '6'], + 24: [loc('tech_gate_turret'), loc('wiki_hell_soul_gem')], + 25: [loc('tech_gate_turret')], + 26: ['1', '3000'], + 27: [loc('achieve_technophobe_name'), '10'], } }); let soul_extra = $(`
`); diff --git a/src/wiki/mechanics.js b/src/wiki/mechanics.js index 06315e8a9..43bc91a0c 100644 --- a/src/wiki/mechanics.js +++ b/src/wiki/mechanics.js @@ -490,22 +490,44 @@ export function mechanicsPage(content){ } { // CRISPR Mutation - let crispr_mutation = infoBoxBuilder(mainContent,{ name: 'crispr_mutation', template: 'mechanics', label: loc('wiki_mechanics_crispr_mutation'), paragraphs: 5, break: [3], h_level: 2, + let crispr_mutation = infoBoxBuilder(mainContent,{ name: 'crispr_mutation', template: 'mechanics', label: loc('wiki_mechanics_crispr_mutation'), paragraphs: 13, break: [3, 4, 5, 6, 7, 8, 9, 10], h_level: 2, para_data: { 1: [loc('tab_arpa_crispr'),loc('arpa_genepool_mutation_title'),loc('resource_Plasmid_plural_name')], 3: [loc('tech_arpa'),loc('tab_arpa_genetics'),], 4: ['5x',loc('wiki_mechanics_crispr_mutation_para4_note1')], - 5: [loc('wiki_mechanics_custom'),loc('race_sludge'),'10x'] + 5: [loc('wiki_mechanics_custom'),loc('race_sludge'),'10x', loc('wiki_mechanics_custom_hybrid'), loc('race_ultra_sludge')], + 6: ['1', '2x', '0.5', '3x', '0.25', '4x', '0.1'], + 7: ['10'], + 8: ['10'], + 9: ['10'], + 11: [loc('wiki_mechanics_crispr_mutation')], + 12: [loc('wiki_mechanics_crispr_mutation')], + 13: [loc('trait_shapeshifter_name'), loc('trait_imitation_name'), loc('wiki_mechanics_crispr_mutation')] }, data_link: { 1: [false,'wiki.html#crispr-prestige-mutation','wiki.html#resources-prestige-plasmids'], 4: [false,'wiki.html#traits-species'], - 5: ['wiki.html#custom-species','wiki.html#races-species-sludge'] + 5: ['wiki.html#custom-species','wiki.html#races-species-sludge', false, false, 'wiki.html#races-species-sludge'], + 13: ['#traits-species-major_shapeshifter', '#traits-species-major_imitation', false] } }); sideMenu('add',`mechanics-gameplay`,`crispr_mutation`,loc('wiki_mechanics_crispr_mutation')); } + { // Traits from Multiple Sources + let trait_sources = infoBoxBuilder(mainContent,{ name: 'trait_sources', template: 'mechanics', label: loc('wiki_mechanics_trait_sources'), paragraphs: 3, h_level: 2, + para_data: { + 2: [loc('tech_fanaticism'), loc('tech_deify'), loc('trait_imitation_name'), '4'], + 3: ['5', loc('evo_challenge_warlord')] + }, + data_link: { + 2: ['wiki.html#civilized-tech-alt_fanaticism', 'wiki.html#early_space-tech-deify_alt', '#traits-species-major_imitation', false], + 3: [false, 'wiki.html#challenges-gameplay-scenarios_warlord'] + } + }); + sideMenu('add',`mechanics-gameplay`,`trait_sources`,loc('wiki_mechanics_trait_sources')); + } + { // Planets let planets = infoBoxBuilder(mainContent,{ name: 'planet', template: 'planet', label: loc('wiki_menu_planets'), paragraphs: 4, h_level: 2, para_data: { diff --git a/strings/strings.json b/strings/strings.json index 09378c93e..f291a8b78 100644 --- a/strings/strings.json +++ b/strings/strings.json @@ -4300,7 +4300,7 @@ "arpa_genepool_rank": "Rank %0", "arpa_crispr_desc": "Permanently alter your DNA. These upgrades carry over across resets.", "arpa_blood_purify_title": "Purify", - "arpa_blood_purify_desc": "Each Spire level completed slightly purifies the miasma around the island, making Purifier, Harbor, Port, and Base Camp creep cheaper.", + "arpa_blood_purify_desc": "Each Spire level completed slightly purifies the miasma around the island, making Purifier, Harbor, Port, and Base Camp creep 0.0004 cheaper.", "arpa_blood_chum_title": "Chum the Waters", "arpa_blood_chum_desc": "Increases the effectiveness of Bireme Warships by +5%.", "arpa_blood_lust_title": "Blood Lust", @@ -8668,7 +8668,7 @@ "wiki_trait_effect_smart": "-%0% Knowledge costs", "wiki_trait_effect_puny": "Average combat roll reduced by 15%. -%0% Combat Rating.", "wiki_trait_effect_dumb": "+%0% Knowledge costs", - "wiki_trait_effect_tough": "+%0% production for all %1.", + "wiki_trait_effect_tough": "+%0% production for all %1, except the %2.", "wiki_trait_effect_nearsighted": "-%0% Library Knowledge.", "wiki_trait_effect_intelligent": "+%0% production per Professor, +%1% production per Scientist.", "wiki_trait_effect_regenerative": "Base wounded soldiers healed each day increased to %0.", @@ -8714,7 +8714,8 @@ "wiki_trait_effect_hivemind_ex4": "Each attacking force or hell patrol is considered a separate group. Defenders of the hell fortress, guards at the hell forge, guards posted at the Pit, troops in troop landers, and droid soldiers are also considered groups, with each category being one group.", "wiki_trait_effect_hivemind_ex5": "Handling for other jobs is counted as a total of all workers assigned to the job. Species with %0 receive a %1% boost per worker above the breakpoint, and other species receive a %2% boost per worker above the breakpoint.", "wiki_trait_effect_hivemind_ex6": "The improvements to %5 from the %0, %1, and %2 traits and the improvement to %6 from the %3 governor increase effective worker counts, which will boost bonuses from %4", - "wiki_trait_effect_hivemind_ex7": "The diminishing return calculation is: boost = 100% - (100% - boost per worker) ^ (workers over the breakpoint). In words, each additional worker over the breakpoint gets the current boost [boost per worker] closer to a bonus of 100%.", + "wiki_trait_effect_hivemind_ex7": "No effect during the %0 scenario.", + "wiki_trait_effect_hivemind_ex8": "The diminishing return calculation is: boost = 100% - (100% - boost per worker) ^ (workers over the breakpoint). In words, each additional worker over the breakpoint gets the current boost [boost per worker] closer to a bonus of 100%.", "wiki_trait_effect_tunneler": "-%0 Mine and Coal Mine cost creep.", "wiki_trait_effect_blood_thirst": "Frequent combat raises morale up to +%0%. Warmonger penalty is disabled.", "wiki_trait_effect_blood_thirst_ex1": "The %0 achievement may still be earned.", @@ -8744,7 +8745,7 @@ "wiki_trait_effect_thalassophobia": "Wharves are unavailable.", "wiki_trait_effect_unfavored": "The gods have cursed you inverting astrological effects into negatives. Negative effects at %0% potency.", "wiki_trait_effect_fiery": "+%0% Combat Rating. +%1% Hunting production.", - "wiki_trait_effect_terrifying": "You cannot trade; however, titanium can be gained from combat. Titanium is added as a Rare lootable resource, and base Titanium gained is in the range of %0 to %1. Get the benefit of %2 without having to research it.", + "wiki_trait_effect_terrifying": "You cannot trade; however, titanium can be gained from %3. Titanium is added as a Rare lootable resource, and base Titanium gained is in the range of %0 to %1. Get the benefit of %2 without having to research it.", "wiki_trait_effect_slaver": "You can capture slaves in combat, who boost your productivity by %0% each.", "wiki_trait_effect_compact": "-%0 Planetary cost creep, -%1 Non-Homeworld cost creep.", "wiki_trait_effect_conniving": "%0% better buying prices, %1% better selling prices.", @@ -8765,7 +8766,7 @@ "wiki_trait_effect_imitation_ex2": "Requires the %0 genus to take during custom species creation.", "wiki_trait_effect_imitation_ex3": "Species having this trait at the start of a run may choose their target from among any race that has completed an %0 reset. Others will get whatever target was last imitated.", "wiki_trait_effect_imitation_ex4": "Imitated traits will be boosted by %0 if they meet the value requirements.", - "wiki_trait_effect_imitation_ex5": "Traits from the Imitated genus may not be mutated in the %0 tab.", + "wiki_trait_effect_imitation_ex5": "Traits from the copied genus may not be acquired through %0.", "wiki_trait_effect_emotionless": "Entertainers are %0% less effective, but jobs are also %1% less stressful.", "wiki_trait_effect_logical": "Wardenclyffe base Knowledge requirement lowered by %0. Adds %1 for each %2 and each %3 to your Knowledge cap per citizen.", "wiki_trait_effect_linked": "Quantum level is increased by %0% per citizen. Linked effect degrades above %1%.", @@ -8773,7 +8774,7 @@ "wiki_trait_effect_deconstructor": "Your species requires Nanites to construct additional members. A new building is added to your city that can convert resources into Nanites at %0% efficiency. Nanites are also needed to build %1, %2, %3, and %4", "wiki_trait_effect_shapeshifter": "Select or change the genus you wish to copy traits from at any time in the Civics tab. Positive traits are assumed at rank %0, and negative traits are assumed at rank %1.", "wiki_trait_effect_shapeshifter_ex1": "Acquired traits will be boosted by %0 if they meet the value requirements.", - "wiki_trait_effect_shapeshifter_ex2": "Traits from the selected genus may not be mutated in the %0 tab.", + "wiki_trait_effect_shapeshifter_ex2": "Traits from the copied genus may not be acquired through %0.", "wiki_trait_effect_psychic": "Energy Regen +%2. Psychic Effect Power +%3%. Mind Break +%0%. Thrall effectiveness +%1%.", "wiki_trait_effect_unfathomable": "%0 surface dwelling species available. Surface Dweller capture difficulty is %1%. Each thrall gives %2% bonus production per rank of %3.", "wiki_trait_effect_unfathomable_ex1": "You employ a special variant of hunters called raiders. Raiders raid the surface world to steal resources, people, and cattle. Captured surface dwellers can be converted into thralls who give bonuses dependent on the species of thrall.", @@ -8786,6 +8787,7 @@ "wiki_trait_effect_anthropophagite": "Your citizens will kill and eat each other if food runs low. Gain %0 food per murder.", "wiki_trait_effect_bloated": "Your sheer mass requires you to use %0% extra basic resources when building things.", "wiki_trait_effect_living_tool": "All tool research removed. Get %1% bonus output for all %8. If both %6 and %7 are active, only one of their bonuses to %8 will be added. Crafting rate improved by %0%. The following bonuses are applied once for each %10 attained: +%2% to Farmers, +%3% to Lumberjacks, +%4% to Foragers, +%5% to %9.", + "wiki_trait_effect_living_tool_ex1": "The bonus to %1 multiplies with the bonus from %0.", "wiki_trait_effect_artisan": "Your mastery and love of crafting grants %0% improved crafting, %1% improved factory production, and %2% improved morale per crafter.", "wiki_trait_effect_stubborn": "You are slow to accept new things. Technologies that advance your %4 or %5 are %0% more expensive, except for %1, %2, and %3.", "wiki_trait_effect_rogue": "A %1 major event is added to the event pool, in which a random availabe resource is stolen by your people and added to your stockpiles. Nab up to the smaller of 4% of your knowledge cap or %0% of the resource's storage cap.", @@ -8797,7 +8799,7 @@ "wiki_trait_effect_living_materials_ex4": "If %0 replaces %1, no discount is given for %0.", "wiki_trait_effect_living_materials_ex5": "If %0 is active, discounts will still be given for replaced resources.", "wiki_trait_effect_unstable": "%0% chance for up to %1% of citizens to die each day to start with, scaling down with increasing population. This trait does not interact with the event system.", - "wiki_trait_effect_unstable_ex1": "The scaling effect is that %0% of (citizens) ^ 0.9 die each time the deaths are triggered.", + "wiki_trait_effect_unstable_ex1": "The scaling effect is that up to %0% of (citizens) ^ 0.9 may die each time the deaths are triggered.", "wiki_trait_effect_elemental_electric": "You have an elemental affinity for %0. Each citizen generates %1 MW of power to start with, scaling up with increasing population. Your soldiers are %2% stronger.", "wiki_trait_effect_elemental_acid": "You have an elemental affinity for %0. Each citizen improves industrial processes by %1% and your soldiers are %2% stronger.", "wiki_trait_effect_elemental_fire": "You have an elemental affinity for %0. Each citizen improves smelting processes by %1% and your soldiers are %2% stronger.", @@ -8810,7 +8812,7 @@ "wiki_trait_effect_elemental_ex6": "%0, %1, and %2 give this effect: %3", "wiki_trait_effect_chicken": "%0% more demons arrive to assault the Fortress in Hell. Patrol %3 are worsened by %2. Piracy and Syndicate rating are %1% higher. A %4 major event and a %5 minor event are added to the pool, both of which cause citizens to die.", "wiki_trait_effect_tusk": "%5 get a bonus of %0% of combat rating instead of using pickaxes. If both %3 and %4 are active, only the larger %5 bonus will be applied. Gain a combat bonus equal to %2% of current moisture level, currently %1% bonus combat power. Wetter planet biomes and rainy weather will give a larger bonus. Combat bonus reduced by half in Hell.", - "wiki_trait_effect_tusk_ex1": "Moisture level is determined by planet biome type. %0 and %1 have a moisture level of 30. %2, %3, %4, and %5 have a moisture level of 20. %6 and %7 have a moisture level of 10. %8, %9, %10, and %11 have a moisture level of zero. %12 or %13 weather gives a bonus of 10 moisture while it persists.", + "wiki_trait_effect_tusk_ex1": "Moisture level is determined by planet biome type. %0 and %1 have a moisture level of %2. %3, %4, %5, and %6 have a moisture level of %7. %8 and %9 have a moisture level of %10. %11, %12, %13, and %14 have a moisture level of %15. %16 or %17 weather gives a bonus of %18 moisture while it persists.", "wiki_trait_effect_blubber": "Convert corpses into Oil instead of extracting it as normal. Each %1/%2 consumes %0 corpse per day and stores a maximum of 50 corpses. Corpses are gained any time your people die. Get up to 2% of your current population at random in corpses each day due to old age deaths. This effect does not reduce population.", "wiki_trait_effect_ocular_power": "You can use up to %0 powers at a time. Ocular powers operate at %1% strength.", "wiki_trait_effect_ocular_power_ex1": "There are six Ocular Powers:", @@ -9924,9 +9926,21 @@ "wiki_mechanics_crispr_mutation_para1": "The %0 %1 tree unlocks the ability to spend %2 to remove traits from your species and add major traits from species native to the genus your species belongs to.", "wiki_mechanics_crispr_mutation_para2": "Any mutations performed last only for that run and do not affect the base traits of the species played as.", "wiki_mechanics_crispr_mutation_para3": "This ability is available in the %0 -> %1 tab below the section for minor traits after sequencing the genome.", - "wiki_mechanics_crispr_mutation_para4": "The cost to add/remove any trait is %0 the trait's value, which can be seen on the %1, with negatively valued traits costing positive amounts to mutate.", + "wiki_mechanics_crispr_mutation_para4": "The cost to add/remove any trait starts at %0 the trait's value, which can be seen on the %1. Traits with a negative value cost positive amounts to mutate.", "wiki_mechanics_crispr_mutation_para4_note1": "traits page", - "wiki_mechanics_crispr_mutation_para5": "When playing as a %0 or %1, adding/removing traits costs %2 more than normal.", + "wiki_mechanics_crispr_mutation_para5": "When playing as a %0, %3, %1 or %4, adding/removing traits costs %2 more than normal.", + "wiki_mechanics_crispr_mutation_para6": "When removing a negative traits at ranks lower than %0, the cost is increased: by %1 for rank %2, by %3 for rank %4, and by %5 for rank %6.", + "wiki_mechanics_crispr_mutation_para7": "Each modification costs %0 more for every trait which has been added or removed this run.", + "wiki_mechanics_crispr_mutation_para8": "If a positive trait is being added, an additional %0 is added for each positive trait previously added this run.", + "wiki_mechanics_crispr_mutation_para9": "If a negative trait is being removed, an additional %0 is added for each negative trait previously removed this run.", + "wiki_mechanics_crispr_mutation_para10": "The traits that come on any stock species in the genera that your species has at the beginning of a run can be available for mutation. This includes traits from both genera for hybrid species.", + "wiki_mechanics_crispr_mutation_para11": "Traits specific to stock hybrid species will not be available through %0.", + "wiki_mechanics_crispr_mutation_para12": "Traits your species already has may not be added through %0.", + "wiki_mechanics_crispr_mutation_para13": "Genera aded later through %0 or %1 will not make new traits available for %2.", + "wiki_mechanics_trait_sources": "Traits from Multiple Sources", + "wiki_mechanics_trait_sources_para1": "It is possible that your species could receive the same trait from more than one source.", + "wiki_mechanics_trait_sources_para2": "If a second copy of a trait is added through %0, %1 or %2, the trait will increase in rank to a maximum of %3.", + "wiki_mechanics_trait_sources_para3": "If a rank-up is not possible (for instance, if the rank cannot go any higher, or if the %1 scenario is active), then %0 ranks of a random minor trait will be given instead.", "wiki_mechanics_quantum": "Quantum Level", "wiki_mechanics_quantum_para1": "Your %0 is a number that is derived from your max Knowledge.", "wiki_mechanics_quantum_para2": "It is unlocked after researching the tech %0.", @@ -9997,6 +10011,7 @@ "wiki_mechanics_custom_para17": "All genera also have an opposed genus; traits that belong to a race from an opposed genus are increased in cost.", "wiki_mechanics_custom_oppose": "%0 opposes %1.", "wiki_mechanics_custom_oppose3": "%0, %1, and %2 all oppose each other.", + "wiki_mechanics_custom_hybrid": "Custom Hybrid Species", "wiki_mechanics_pillar": "Ancient Pillars", "wiki_mechanics_pillar_para1": "After getting %0, you can spend a %1 and some %2 to infuse a pillar for your current species.", "wiki_mechanics_pillar_para2": "The %0 cost starts at %1 and increases by %2 for each pillared species.", @@ -10996,10 +11011,33 @@ "wiki_hell_strategy_para4": "Patrols will occasionally be ambushed, resulting in poorer combat outcomes and lower chances of demons dropping a %0.", "wiki_hell_strategy_para5": "%5 start at %0 in %1 and are modified by increasing and decreasing the divisor. For instance, an improvement of %2 and a worsening of %3 together will change the odds from %0 in %1 to %0 in (%1 + %2 - %3), or %0 in %4.", "wiki_hell_soul_gem": "Soul Gems", - "wiki_hell_soul_gem_para1": "%0 are a rare resource found in the %1, primarily by patrols.", - "wiki_hell_soul_gem_para2": "Each patrol has a chance to find a Soul Gem when it has an enemy encounter; naturally, this means the more patrols you run the more Soul Gems you will find.", - "wiki_hell_soul_gem_para3": "You can construct the %0 to increase the odds of a patrol finding a Soul Gem, but this also raises the general threat level.", - "wiki_hell_soul_gem_para4": "Build Attractors cautiously, or you might summon more demons than you can handle.", + "wiki_hell_soul_gem_para1": "%0 are a rare resource found in the %1. They can be manufactured at the %2, and found on the corpses of demons by these methods:", + "wiki_hell_soul_gem_para2": "Each patrol will may encounter and kill a number of demons each day. For every few demons killed, that patrol has a chance to find a %0.", + "wiki_hell_soul_gem_para3": "Since each patrol has a chance to encounter demons, running as many patrols as is feasible with your current combat strength will help find more %0.", + "wiki_hell_soul_gem_para4": "The number of demons that must be killed by a patrol to earn a chance at a %0 starts at %1 and is reduced by %2 for every %3 active %4, to a minimum of %5.", + "wiki_hell_soul_gem_para5": "The chance to find a %0 on each roll starts at %1 in %2, and is modified by a variety of effects:", + "wiki_hell_soul_gem_para6": "Having the %0 perk will reduce the divisor by %1%.", + "wiki_hell_soul_gem_para7": "Having the %0 trait will reduce the divisor by an amount dependent on trait rank.", + "wiki_hell_soul_gem_para8": "Each active %0 will reduce the divisor by a compunded %1%.", + "wiki_hell_soul_gem_para9": "The divisor is capped at a minimum of %0.", + "wiki_hell_soul_gem_para10": "Patrols can only kill demons that are around your fortress, so attracting more demons can help you get more %0 by increasing the number of chances you can get at a drop.", + "wiki_hell_soul_gem_para11": "Demons will only spawn when there are less than %0 demons at your fortress, and more demons spawn the lower the current threat level is.", + "wiki_hell_soul_gem_para12": "Each active %0 will increase demon arrivals by %1%, additively.", + "wiki_hell_soul_gem_para13": "The %0 trait will incrase demon arrivals by an amount dependent on the trait rank.", + "wiki_hell_soul_gem_para14": "Being in %0 will increase demon arrivals by %1%.", + "wiki_hell_soul_gem_para15": "Surveyors can also find %0 on the corpses of demons killed by the %1.", + "wiki_hell_soul_gem_para16": "Each %0 kills %1 demons per day before or %2 demons per day after %3.", + "wiki_hell_soul_gem_para17": "Surveyors split up all the available corpses between them and each searches %0-%1% of the corpses, with soul gem drops allocated as for patrols killing the demons.", + "wiki_hell_soul_gem_para18": "Note that because Surveyors do not search all the corpses, using the %0 is not recommneded if your goal is to maximize %1 drop rates.", + "wiki_hell_soul_gem_para19": "The soldier manning a %0 at the %1 may find %2 on the demons he kills each day.", + "wiki_hell_soul_gem_para20": "Each %0 makes one roll a day against odds specific to the %0.", + "wiki_hell_soul_gem_para21": "The chance starts at %0 in %1, and is modified by these effects:", + "wiki_hell_soul_gem_para22": "Having the %0 perk will reduce the divisor by %1%.", + "wiki_hell_soul_gem_para23": "Each active %0 will reduce the divisor by a compunded %1%.", + "wiki_hell_soul_gem_para24": "The soldiers at a %0 may also find %1 on killed demons.", + "wiki_hell_soul_gem_para25": "Each %0 makes one roll a day against odds specific to the %0.", + "wiki_hell_soul_gem_para26": "The chance starts at %0 in %1, and is modified by these effects:", + "wiki_hell_soul_gem_para27": "Having the %0 perk will reduce the divisor by %1%.", "wiki_hell_sim": "This %0, written by %1, can be a very useful tool to calculate your Soul Gem drop rate as well as to test your defenses.", "wiki_hell_sim2": "Hell Simulator", "wiki_hell_infernite": "Infernite", From 97e0eb2365dd66f334fc2dfead64a6014a2e2e6a Mon Sep 17 00:00:00 2001 From: Gandalph Date: Thu, 12 Feb 2026 19:14:59 +0100 Subject: [PATCH 4/4] Many Small Updates to Wiki and Descriptions Trait Descriptions: -Angry: Linked to new Starvation article. Disambiguated % and percentage points. -Anthropophagite: Added undocumented effect that there is a 1 in 400 chance for a pop to be killed and eaten even if food is not low. -Apex Predator: Linked to new Combat Rating article. -Armored: Linked to Hell Patrol Strategy article. -Atrophy: Linked to Starvation article. -Beast of Burden: Linked to the War Loot article. -Bloated: Listed specific resources in Extra Description, since Basic Resources isn't defined elsewhere. -Cannibalize: Deleted first sentence of Extra Description, as it wasn't needed. Linked to new Combat Rating article. Linked to new Soldier Healing article. -Cautious: Linked to new Combat Rating article. -Chameleon: Linked to new Combat Rating article. -Claws: Linked to new Combat Rating article with both Combat Rating and Combat Roll tags. -Content: Linked to Job Stress Article with note about affecting different jobs differently. -Curious: Disambiguate Knowledge Capacity. -Dumb: Call out Incompatibility with Smart. -Elemental: Wasn't clear from Electric scaling explanation that power scaling was for power generated by Elemental only and did not include all power generation. Linked to Combat Rating article. -Emotionless: Linked to Job Stress article. -Environmentalist: Computations do not use toFixed() in all places, which occasionally led to strange looking output in the description with way too many decimal places. Added toFixed() to all calculations to prevent this. -Fibroblast: Linked to Soldier Healing article. -Fiery: Linked to Combat Rating article. -Forager: Clarified that Forager does not REPLACE other jobs, but COMPLEMENTS them. Put production ratios in the trait description. -Free Spirit: Linked to Job Stress Article. -Ghostly: Called out specific spots where Ghostly helps find more Soul Gems, to go along with updated Soul Gem article. Linked to updated Soul Gem article. -Gnawer: Added information about what happens if Lumber is replaced. -Grenadier: Linked to new Combat Rating article. -Hard of Hearing: Disambiguated Knowledge Capacity. -Heavy: Listed resources in trait description instead of in an Extra Description. -High Population: Made keywords in Extra Description yellow. Added undocumented effect on soldier healing rate. Linked to new Soldier Healing article. -Hivemind: Added a note about how the breakpoint scales with High Pop, except for soldiers. -Holy: Link to new Combat Rating article. -Humpback: Link to new Starvation article. -Instincts: Surveyor death rate modification is changing a divisor. Added math fix to display correct output value for increased chance. -Invertebrate: Linked to War Loot article. -Magnificent: Disambiguate Knowledge Capacity. -Malnutrition: Linked to new Starvation article. Disambiguate between % and percentage points. -Musical: Disambiguate between % and percentage points. -Nearsighted: Disambiguate Knowledge Capacity. -Ocular Power: Values in the Extra Description now change dynamically with trait rank. Linked to new Combat Rating article. -Otimistic: Clarified that Job Stress decreases by a few points, equivalent to a morale boost of the same amount. Linked to Job Stress article. -Parasite: Linked to new Combat Rating article. -Pathetic: Linked to new Combat Rating article. -Pessimistic: Clarified that Job Stress increases by a few points, equivalent to a morale drop of the same amount. Linked to the Job Stress article. -Playful: Linked to Job Stress article. -Puny: Linked to new Combat Rating article twice, with both the Combat Rating and Combat Roll tags. -Rage: Linked to new Combat Rating article. -Regenerative: Linked to new Soldier Healing article. -Scales: Linked to Hell Patrol Strategy article. -Sky Lover: Linked to Job Stress article. -Slaver: Specified that slaves can also be bought. -Slow Digestion: Linked to new Starvation article. -Slow Regen: Linked to new Soldier Healing article. -Smart: Call out incompatibility with Dumb. -Sticky: Linked to new Combat Rating article. -Strong: Clarified that Basic Jobs are 2x AS effective, not 2x MORE effective. -Sudious: Disambiguate Knowledge capacity. -Swift: Link to new Combat Rating article. -Tactical: Link to new Combat Rating article. -Terrifying: Tied all instances of the word "Titanium" to the translation to ensure consistency. -Tusked: Linked to the Combat Rating article. -Unified: Disambiguate that the bonus is in percentage points, and that it affects the production bonus only. Wiki: -Added new article for Starvation -Added new article for Soldier Healing -Added new article for Combat Rating (also includes info on Combat Rolls). -Added information about Hell Armor to Hell Patrol Strategy article -Added information about how Soul Gem Drops are found in the Soul Gem article. -Added the Medical Level to the list of Technology Levels. -Added the Armor Level to the list of Technology Levels. Consistency in Trait Descriptions: -Standardized all references to Combat Rating and linked them to the new article. -Standardized all references to Soldier Healing and linked them to the new article. -Standardized all references to Starvation and linked them to the new article. -Standardized all references to Soul Gems and linked them to the Soul Gem article. -Standardized all references to Hell Patrol Armor and linked them to the Hell Patrol Strategy article. -Standardized all references to Job Stress and linked them to the Job Stress article. -Disambiguated between Knowledge production and Knowledge cap where appropriate. Misc: -Updated description for Technophobe, since it modifies a divisor and therefore had the wrong value for drop chance improvement. -Added small helper function rNameNoColor into functions.js to allow getting the current name of a resource without disturbing any current color assignment. --- src/achieve.js | 4 +- src/functions.js | 6 ++ src/races.js | 220 ++++++++++++++++++++++++++++++++++++------ src/wiki/combat.js | 31 ++++++ src/wiki/hell.js | 13 ++- src/wiki/mechanics.js | 30 +++--- strings/strings.json | 214 ++++++++++++++++++++++++---------------- 7 files changed, 389 insertions(+), 129 deletions(-) diff --git a/src/achieve.js b/src/achieve.js index 72c45c34a..a2cde5cbd 100644 --- a/src/achieve.js +++ b/src/achieve.js @@ -1,5 +1,5 @@ import { global, set_alevel, set_ulevel } from './vars.js'; -import { clearElement, popover, flib, calc_mastery, masteryType, calcPillar, svgIcons, svgViewBox, format_emblem, getBaseIcon, sLevel, vBind, calcQueueMax, calcRQueueMax, messageQueue, eventActive, easterEgg, getHalloween, trickOrTreat, harmonyEffect } from './functions.js'; +import { clearElement, popover, flib, calc_mastery, masteryType, calcPillar, svgIcons, svgViewBox, format_emblem, getBaseIcon, sLevel, vBind, calcQueueMax, calcRQueueMax, messageQueue, eventActive, easterEgg, getHalloween, trickOrTreat, harmonyEffect, convertDivisor } from './functions.js'; import { races, genus_def } from './races.js'; import { actions } from './actions.js'; import { universe_affixes, universe_types, piracy } from './space.js'; @@ -1530,7 +1530,7 @@ export const perkList = { }, { desc(){ - return loc("achieve_perks_technophobe4",[10]); + return loc("achieve_perks_technophobe4",[-convertDivisor(-10)]); }, active(){ return global.stats.achieve['technophobe'] && global.stats.achieve.technophobe.l >= 5 ? true : false; diff --git a/src/functions.js b/src/functions.js index 9646353fd..960335290 100644 --- a/src/functions.js +++ b/src/functions.js @@ -3181,6 +3181,12 @@ export function rName(r){ return `${res}`; } +export function rNameNoColor(r){ + let res = global.hasOwnProperty('resource') && global.resource.hasOwnProperty(r) ? global.resource[r].name : loc(`resource_${r}_name`); + return `${res}`; +} + + export function convertDivisor (input) { //The input value is a percentage used to multiply a divisor, use X/(1+X) to indicate a percentage change in descriptions. return +(100 * input / (100 + input)).toFixed(2); diff --git a/src/races.js b/src/races.js index 8863c48d1..f0261ecf3 100644 --- a/src/races.js +++ b/src/races.js @@ -2,7 +2,7 @@ import { global, seededRandom, save, webWorker, power_generated, keyMultiplier, import { loc } from './locale.js'; import { defineIndustry } from './industry.js'; import { setJobName, jobScale, loadFoundry } from './jobs.js'; -import { vBind, clearElement, popover, removeFromQueue, removeFromRQueue, calc_mastery, gameLoop, getEaster, getHalloween, randomKey, modRes, messageQueue, linkText, linkTextNoColor, warningText, warningTextNoLoc, rName, convertDivisor, hoovedRename } from './functions.js'; +import { vBind, clearElement, popover, removeFromQueue, removeFromRQueue, calc_mastery, gameLoop, getEaster, getHalloween, randomKey, modRes, messageQueue, linkText, linkTextNoColor, warningText, warningTextNoLoc, rName, convertDivisor, hoovedRename, rNameNoColor } from './functions.js'; import { setResourceName, drawResourceTab, atomic_mass } from './resources.js'; import { buildGarrison, govEffect, govTitle, armyRating, govCivics } from './civics.js'; import { govActive, removeTask, defineGovernor } from './governor.js'; @@ -355,6 +355,10 @@ export const traits = { cautious: { // Rain reduces combat rating name: loc('trait_cautious_name'), desc: loc('trait_cautious'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'genus', origin: 'carnivore', taxonomy: 'combat', @@ -389,6 +393,10 @@ export const traits = { instinct: { // Avoids Danger name: loc('trait_instinct_name'), desc: loc('trait_instinct'), + desc_function: function(vals) { + vals[0] = -convertDivisor(-vals[0]); + return vals; + }, desc_extra: function(vals) { return [loc(`wiki_trait_effect_instinct_ex1`,[warningTextNoLoc(6.67),warningText('galaxy_chthonian'),warningTextNoLoc(10)])]; }, @@ -420,7 +428,21 @@ export const traits = { name: loc('trait_forager_name'), desc: loc('trait_forager'), desc_function: function(vals) { - vals[1] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + vals[1] = loc('trait_forager_name'); + vals[2] = '14'; + vals[3] = rNameNoColor('Food'); + vals[4] = '10'; + vals[5] = rNameNoColor('Lumber'); + vals[6] = '8.8'; + vals[7] = rNameNoColor('Stone'); + vals[8] = rNameNoColor('Chrysotile'); + vals[9] = rNameNoColor('Aluminium'); + vals[10] = '2'; + vals[11] = rNameNoColor('Furs'); + vals[12] = '1.4'; + vals[13] = rNameNoColor('Iron'); + vals[14] = '1'; + vals[15] = rNameNoColor('Copper'); return vals; }, type: 'genus', @@ -604,6 +626,10 @@ export const traits = { scales: { // Minor decrease of soldiers killed in combat name: loc('trait_scales_name'), desc: loc('trait_scales'), + desc_function: function(vals) { + vals[3] = linkTextNoColor('wiki_hell_strategy_patrol_armor', 'wiki.html#hell-gameplay-strategy'); + return vals; + }, type: 'genus', origin: 'reptilian', taxonomy: 'combat', @@ -690,6 +716,7 @@ export const traits = { desc_function: function(vals) { vals[1] = loc('job_quarry_worker'); vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[3] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); return vals; }, type: 'genus', @@ -747,10 +774,11 @@ export const traits = { desc_function: function(vals) { vals[3] = linkTextNoColor('wiki_mechanics_pop_growth_lower_bound', 'wiki.html#mechanics-gameplay-pop_growth'); vals[4] = linkTextNoColor('wiki_mechanics_pop_growth_upper_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + vals[5] = linkTextNoColor('wiki_combat_healing_potential', 'wiki.html#combat-gameplay-healing'); return vals; }, desc_extra: function(vals) { - return [loc(`wiki_trait_effect_high_pop_ex1`)]; + return [loc(`wiki_trait_effect_high_pop_ex1`, [warningText('trait_shapeshifter_name'), warningText('trait_imitation_name'), warningText('genelab_genus_insectoid')])]; }, type: 'genus', origin: 'insectoid', @@ -1300,6 +1328,10 @@ export const traits = { holy: { // Combat Bonus in Hell name: loc('trait_holy_name'), desc: loc('trait_holy'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'genus', origin: 'angelic', taxonomy: 'combat', @@ -1642,6 +1674,10 @@ export const traits = { angry: { // When hungry you get hangry, low food penalty is more severe name: loc('trait_angry_name'), desc: loc('trait_angry'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_starvation_penalty', 'wiki.html#mechanics-gameplay-starvation'); + return vals; + }, type: 'major', origin: 'orc', taxonomy: 'production', @@ -1784,6 +1820,7 @@ export const traits = { name: loc('trait_playful_name'), desc: loc('trait_playful'), desc_function: function (vals) { + vals[1] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); if (global.race['warlord']) vals = [vals[0] * 100, global.resource.Furs.name]; return vals; }, @@ -1815,6 +1852,7 @@ export const traits = { desc: loc('trait_freespirit'), desc_function: function (vals) { vals[1] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + vals[2] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); return vals; }, type: 'major', @@ -1843,6 +1881,10 @@ export const traits = { beast_of_burden: { // Gains more loot during raids name: loc('trait_beast_of_burden_name'), desc: loc('trait_beast_of_burden'), + desc_function: function(vals) { + vals[0] = linkTextNoColor('wiki_combat_loot', 'wiki.html#combat-gameplay-loot'); + return vals; + }, type: 'major', origin: 'centaur', taxonomy: 'combat', @@ -1928,6 +1970,10 @@ export const traits = { rage: { // Wounded soldiers rage with extra power name: loc('trait_rage_name'), desc: loc('trait_rage'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'rhinotaur', taxonomy: 'combat', @@ -1955,8 +2001,11 @@ export const traits = { heavy: { // Some costs increased name: loc('trait_heavy_name'), desc: loc('trait_heavy'), - desc_extra: function(vals) { - return [loc(`wiki_trait_effect_heavy_ex1`,[rName('Stone'),rName('Cement'),rName('Wrought_Iron')])]; + desc_function: function(vals) { + vals[2] = rNameNoColor('Stone') + vals[3] = rNameNoColor('Cement') + vals[4] = rNameNoColor('Wrought_Iron') + return vals; }, type: 'major', origin: 'rhinotaur', @@ -1985,6 +2034,11 @@ export const traits = { gnawer: { // Population destroys lumber by chewing on it name: loc('trait_gnawer_name'), desc: loc('trait_gnawer'), + desc_function: function(vals) { + vals[1] = rNameNoColor('Lumber'); + vals[2] = rNameNoColor('Stone'); + return vals; + }, type: 'major', origin: 'capybara', taxonomy: 'resource', @@ -2146,6 +2200,9 @@ export const traits = { smart: { // Knowledge costs reduced by 10% name: loc('trait_smart_name'), desc: loc('trait_smart'), + desc_extra: function(vals) { + return [loc('wiki_trait_effect_smart_ex1', [warningText('trait_dumb_name'), warningTextNoLoc('5')])]; + }, type: 'major', origin: 'gnome', taxonomy: 'utility', @@ -2172,6 +2229,11 @@ export const traits = { puny: { // Lowers minium bound for army score roll name: loc('trait_puny_name'), desc: loc('trait_puny'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + vals[2] = linkTextNoColor('wiki_combat_roll', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'gnome', taxonomy: 'combat', @@ -2198,6 +2260,9 @@ export const traits = { dumb: { // Knowledge costs increased by 5% name: loc('trait_dumb_name'), desc: loc('trait_dumb'), + desc_extra: function(vals) { + return [loc('wiki_trait_effect_dumb_ex1', [warningText('trait_smart_name'), warningTextNoLoc('5')])]; + }, type: 'major', origin: 'ogre', taxonomy: 'utility', @@ -2308,6 +2373,10 @@ export const traits = { regenerative: { // Wounded soldiers heal 4x as fast name: loc('trait_regenerative_name'), desc: loc('trait_regenerative'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_healing_base', 'wiki.html#combat-gameplay-healing'); + return vals; + }, type: 'major', origin: 'troll', taxonomy: 'combat', @@ -2386,6 +2455,10 @@ export const traits = { armored: { // Less soldiers die in combat name: loc('trait_armored_name'), desc: loc('trait_armored'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_hell_strategy_patrol_armor', 'wiki.html#hell-gameplay-strategy'); + return vals; + }, type: 'major', origin: 'tortoisan', taxonomy: 'combat', @@ -2413,6 +2486,10 @@ export const traits = { optimistic: { // Minor reduction to stress name: loc('trait_optimistic_name'), desc: loc('trait_optimistic'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); + return vals; + }, type: 'major', origin: 'gecko', taxonomy: 'production', @@ -2443,6 +2520,7 @@ export const traits = { vals[2] = loc('trait_chameleon_name'); vals[3] = loc('trait_elusive_name'); vals[4] = linkTextNoColor('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy'); + vals[5] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); return vals; }, desc_extra: function(vals) { @@ -2475,6 +2553,10 @@ export const traits = { slow_digestion: { // Your race is more resilient to starvation name: loc('trait_slow_digestion_name'), desc: loc('trait_slow_digestion'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_starvation_threshold', 'wiki.html#mechanics-gameplay-starvation'); + return vals; + }, type: 'major', origin: 'slitheryn', taxonomy: 'production', @@ -2637,6 +2719,10 @@ export const traits = { pessimistic: { // Minor increase to stress name: loc('trait_pessimistic_name'), desc: loc('trait_pessimistic'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); + return vals; + }, type: 'major', origin: 'pterodacti', taxonomy: 'production', @@ -2747,6 +2833,10 @@ export const traits = { iron_wood: { // Removes Plywood as a resource, adds attack bonus name: loc('trait_iron_wood_name'), desc: loc('trait_iron_wood'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'entish', taxonomy: 'resource', @@ -2907,6 +2997,10 @@ export const traits = { sticky: { // Food req lowered, Increase Combat Rating name: loc('trait_sticky_name'), desc: loc('trait_sticky'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'pinguicula', taxonomy: 'combat', @@ -2991,6 +3085,10 @@ export const traits = { parasite: { // You can only reproduce by infecting victims, spores sometimes find a victim when it's windy name: loc('trait_parasite_name'), desc: loc('trait_parasite'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'sporgar', taxonomy: 'combat', @@ -3137,6 +3235,8 @@ export const traits = { desc_function: function(vals) { vals[1] = loc('job_lumberjack'); vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[3] = linkTextNoColor('wiki_combat_healing_potential', 'wiki.html#combat-gameplay-healing'); + vals[4] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); return vals; }, desc_extra: function(vals) { @@ -3195,6 +3295,10 @@ export const traits = { malnutrition: { // The rationing penalty is weaker name: loc('trait_malnutrition_name'), desc: loc('trait_malnutrition'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_starvation_penalty', 'wiki.html#mechanics-gameplay-starvation'); + return vals; + }, type: 'major', origin: 'mantis', taxonomy: 'production', @@ -3221,6 +3325,11 @@ export const traits = { claws: { // Raises maximum bound for army score roll name: loc('trait_claws_name'), desc: loc('trait_claws'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + vals[2] = linkTextNoColor('wiki_combat_roll', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'scorpid', taxonomy: 'combat', @@ -3247,6 +3356,10 @@ export const traits = { atrophy: { // More prone to starvation name: loc('trait_atrophy_name'), desc: loc('trait_atrophy'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_mechanics_starvation_threshold', 'wiki.html#mechanics-gameplay-starvation'); + return vals; + }, type: 'major', origin: 'scorpid', taxonomy: 'production', @@ -3273,21 +3386,18 @@ export const traits = { hivemind: { // Jobs with low citizen counts assigned to them have reduced output, but those with high numbers have increased output. name: loc('trait_hivemind_name'), desc: loc('trait_hivemind'), - desc_function: function (vals) { - if (global.race['high_pop']) vals[0] *= traits.high_pop.vars()[0]; - return vals; - }, desc_extra: function(vals) { return [ loc(`wiki_trait_effect_hivemind_ex1`, [warningText('civics_garrison_soldiers'), warningText('job_lumberjack'), warningText('job_hunter'), warningText('job_raider'), linkText('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'), warningText('job_professor'), warningText('job_scientist')]), - loc(`wiki_trait_effect_hivemind_ex2`, [warningText('trait_high_pop_name'), warningTextNoLoc(100)]), - loc(`wiki_trait_effect_hivemind_ex3`, [warningText('civics_garrison_soldiers'), warningTextNoLoc(1), warningText('trait_hivemind_name'), warningText('tech_combat_droids'), warningTextNoLoc(1), warningText('tech_enhanced_droids'), warningTextNoLoc(2)]), - loc(`wiki_trait_effect_hivemind_ex4`), - loc(`wiki_trait_effect_hivemind_ex5`, [warningText('trait_high_pop_name'), warningTextNoLoc(1.5), warningTextNoLoc(2)]), - loc(`wiki_trait_effect_hivemind_ex6`, [warningText('trait_strong_name'), warningText('trait_living_tool_name'), warningText('trait_swift_name'), warningText('governor_educator'), warningText('trait_hivemind_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'), warningText('job_professor')]), - loc(`wiki_trait_effect_hivemind_ex7`, [warningText('evo_challenge_lone_survivor')]), - loc(`wiki_trait_effect_hivemind_ex8`)]; + loc(`wiki_trait_effect_hivemind_ex2`, [warningText('trait_high_pop_name'), warningText('civics_garrison_soldiers')]), + loc(`wiki_trait_effect_hivemind_ex3`, [warningText('trait_high_pop_name'), warningTextNoLoc(100)]), + loc(`wiki_trait_effect_hivemind_ex4`, [warningText('civics_garrison_soldiers'), warningTextNoLoc(1), warningText('trait_hivemind_name'), warningText('tech_combat_droids'), warningTextNoLoc(1), warningText('tech_enhanced_droids'), warningTextNoLoc(2)]), + loc(`wiki_trait_effect_hivemind_ex5`), + loc(`wiki_trait_effect_hivemind_ex6`, [warningText('trait_high_pop_name'), warningTextNoLoc(1.5), warningTextNoLoc(2)]), + loc(`wiki_trait_effect_hivemind_ex7`, [warningText('trait_strong_name'), warningText('trait_living_tool_name'), warningText('trait_swift_name'), warningText('governor_educator'), warningText('trait_hivemind_name'), linkText('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'), warningText('job_professor')]), + loc(`wiki_trait_effect_hivemind_ex8`, [warningText('evo_challenge_lone_survivor')]), + loc(`wiki_trait_effect_hivemind_ex9`)]; }, type: 'major', origin: 'antid', @@ -3381,6 +3491,10 @@ export const traits = { apex_predator: { // Hunting and Combat ratings are significantly higher, but you can't use armor name: loc('trait_apex_predator_name'), desc: loc('trait_apex_predator'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'sharkin', taxonomy: 'combat', @@ -3408,6 +3522,10 @@ export const traits = { invertebrate: { // You have no bones name: loc('trait_invertebrate_name'), desc: loc('trait_invertebrate'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_loot', 'wiki.html#combat-gameplay-loot'); + return vals; + }, type: 'major', origin: 'octigoran', taxonomy: 'combat', @@ -3489,7 +3607,7 @@ export const traits = { desc_function: function(vals) { let coal = -(actions.city.coal_power.powered(true)); let oil = -(actions.city.oil_power.powered(true)); - vals = [coal + vals[0], oil + vals[0] - 1, oil + vals[0] + 1, coal, oil, vals[1]]; + vals = [+(coal + vals[0]).toFixed(2), +(oil + vals[0] - 1).toFixed(2), +(oil + vals[0] + 1).toFixed(2), +(coal).toFixed(2), +(oil).toFixed(), +(vals[1]).toFixed(2)]; return vals; }, type: 'major', @@ -3612,6 +3730,10 @@ export const traits = { slow_regen: { // Your soldiers wounds heal slower. name: loc('trait_slow_regen_name'), desc: loc('trait_slow_regen'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_healing_difficulty', 'wiki.html#combat-gameplay-healing'); + return vals; + }, type: 'major', origin: 'phoenix', taxonomy: 'combat', @@ -3793,6 +3915,7 @@ export const traits = { desc: loc('trait_ghostly'), desc_function: function(vals) { vals[2] = -convertDivisor(-vals[2]); + vals[3] = linkTextNoColor('wiki_hell_soul_gem', 'wiki.html#hell-gameplay-soul_gem'); if (global.race['warlord']) vals = [vals[0], +((vals[1] - 1) * 100).toFixed(0), global.resource.Soul_Gem.name]; return vals; }, @@ -3877,6 +4000,7 @@ export const traits = { desc: loc('trait_humpback'), desc_function: function(vals) { vals[2] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[3] = linkTextNoColor('wiki_mechanics_starvation_threshold', 'wiki.html#mechanics-gameplay-starvation'); return vals; }, type: 'major', @@ -3941,6 +4065,10 @@ export const traits = { fiery: { // Major war bonus name: loc('trait_fiery_name'), desc: loc('trait_fiery'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'balorg', taxonomy: 'combat', @@ -3970,7 +4098,8 @@ export const traits = { desc: loc('trait_terrifying'), desc_function: function(vals) { vals[2] = loc('tech_corruption'); - vals[3] = linkTextNoColor('wiki_combat_loot', ['wiki.html#combat-gameplay-loot']); + vals[3] = linkTextNoColor('wiki_combat_loot', 'wiki.html#combat-gameplay-loot'); + vals[4] = rNameNoColor('Titanium'); return vals; }, type: 'major', @@ -4080,6 +4209,10 @@ export const traits = { pathetic: { // You suck at combat name: loc('trait_pathetic_name'), desc: loc('trait_pathetic'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'major', origin: 'imp', taxonomy: 'combat', @@ -4333,6 +4466,10 @@ export const traits = { emotionless: { // You have no emotions, cold logic dictates your decisions name: loc('trait_emotionless_name'), desc: loc('trait_emotionless'), + desc_function: function(vals) { + vals[2] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); + return vals; + }, type: 'major', origin: 'synth', taxonomy: 'production', @@ -4518,6 +4655,7 @@ export const traits = { vals[3] = loc('trait_living_tool_name'); vals[4] = loc('trait_swift_name'); vals[5] = linkTextNoColor('wiki_mechanics_job_type_basic', 'wiki.html#mechanics-gameplay-job_types'); + vals[6] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); return vals; }, desc_extra: function(vals) { @@ -4632,6 +4770,10 @@ export const traits = { bloated: { name: loc('trait_bloated_name'), desc: loc('trait_bloated'), + desc_extra: function(vals) { + return [loc('wiki_trait_effect_bloated_ex1', [rName('Food'),rName('Lumber'),rName('Stone'),rName('Furs'),rName('Copper'),rName('Iron'), + rName('Aluminium'),rName('Cement'),rName('Coal'),rName('Steel'),rName('Titanium'),rName('Alloy'),rName('Polymer'),rName('Iridium')])]; + }, type: 'major', origin: 'shoggoth', taxonomy: 'utility', @@ -4854,16 +4996,16 @@ export const traits = { //Pick the right display values based on which element is currently active switch (vals[0]){ case 'electric': - vals = [loc(`element_electric`), vals[1], vals[5]]; + vals = [loc(`element_electric`), vals[1], vals[5], linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; break; case 'acid': - vals = [loc(`element_acid`), vals[2], vals[5]]; + vals = [loc(`element_acid`), vals[2], vals[5], linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; break; case 'fire': - vals = [loc(`element_fire`), vals[3], vals[5]]; + vals = [loc(`element_fire`), vals[3], vals[5], linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; break; case 'frost': - vals = [loc(`element_frost`), vals[4], vals[5], loc('city_biolab')]; + vals = [loc(`element_frost`), vals[4], vals[5], loc('city_biolab'), linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; break; } return vals; @@ -4871,11 +5013,11 @@ export const traits = { desc_extra: function(vals) { return [ loc(`wiki_trait_effect_elemental_ex1`), - loc(`wiki_trait_effect_elemental_ex2`, [warningText('biome_savanna_name'), warningText('biome_forest_name'), warningText('biome_swamp_name'), loc('wiki_trait_effect_elemental_acid', [warningText('element_acid'), warningTextNoLoc(vals[2]), warningTextNoLoc(vals[5])])]), - loc(`wiki_trait_effect_elemental_ex3`, [warningText('biome_grassland_name'), warningText('biome_desert_name'), warningText('biome_eden_name'), loc('wiki_trait_effect_elemental_electric', [warningText('element_electric'), warningTextNoLoc(vals[1]), warningTextNoLoc(vals[5])])]), + loc(`wiki_trait_effect_elemental_ex2`, [warningText('biome_savanna_name'), warningText('biome_forest_name'), warningText('biome_swamp_name'), loc('wiki_trait_effect_elemental_acid', [warningText('element_acid'), warningTextNoLoc(vals[2]), warningTextNoLoc(vals[5]), linkText('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')])]), + loc(`wiki_trait_effect_elemental_ex3`, [warningText('biome_grassland_name'), warningText('biome_desert_name'), warningText('biome_eden_name'), loc('wiki_trait_effect_elemental_electric', [warningText('element_electric'), warningTextNoLoc(vals[1]), warningTextNoLoc(vals[5]), linkText('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')])]), loc(`wiki_trait_effect_elemental_ex4`, [warningTextNoLoc(1.28)]), - loc(`wiki_trait_effect_elemental_ex5`, [warningText('biome_oceanic_name'), warningText('biome_tundra_name'), warningText('biome_taiga_name'), loc('wiki_trait_effect_elemental_frost', [warningText('element_frost'), warningTextNoLoc(vals[4]), warningTextNoLoc(vals[5]), warningText('city_biolab')])]), - loc(`wiki_trait_effect_elemental_ex6`, [warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), loc('wiki_trait_effect_elemental_fire', [warningText('element_fire'), warningTextNoLoc(vals[3]), warningTextNoLoc(vals[5])])])] + loc(`wiki_trait_effect_elemental_ex5`, [warningText('biome_oceanic_name'), warningText('biome_tundra_name'), warningText('biome_taiga_name'), loc('wiki_trait_effect_elemental_frost', [warningText('element_frost'), warningTextNoLoc(vals[4]), warningTextNoLoc(vals[5]), warningText('city_biolab'), linkText('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')])]), + loc(`wiki_trait_effect_elemental_ex6`, [warningText('biome_volcanic_name'), warningText('biome_ashland_name'), warningText('biome_hellscape_name'), loc('wiki_trait_effect_elemental_fire', [warningText('element_fire'), warningTextNoLoc(vals[3]), warningTextNoLoc(vals[5]), linkText('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')])])] }, type: 'major', origin: 'wyvern', @@ -4968,6 +5110,7 @@ export const traits = { vals[3] = loc('trait_living_tool_name'); vals[4] = loc('trait_tusk_name'); vals[5] = linkTextNoColor('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types'); + vals[6] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); return vals; }, desc_extra: function(vals) { @@ -5066,12 +5209,12 @@ export const traits = { desc_extra: function(vals) { return [ loc(`wiki_trait_effect_ocular_power_ex1`), - loc(`wiki_trait_effect_ocular_power_ex2`, [warningTextNoLoc(70)]), - loc(`wiki_trait_effect_ocular_power_ex3`, [warningTextNoLoc(50)]), - loc(`wiki_trait_effect_ocular_power_ex4`, [warningTextNoLoc(33.33), warningTextNoLoc(20), linkText('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy')]), - loc(`wiki_trait_effect_ocular_power_ex5`, [warningTextNoLoc(100), rName('Stone')]), - loc(`wiki_trait_effect_ocular_power_ex6`, [warningTextNoLoc(20), warningText('job_farmer'), warningText('job_lumberjack'), warningText('job_scavenger'), warningText('job_cement_worker'), linkText('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types')]), - loc(`wiki_trait_effect_ocular_power_ex7`, [warningTextNoLoc(60)])]; + loc(`wiki_trait_effect_ocular_power_ex2`, [warningTextNoLoc(+(0.70 * vals[1]).toFixed(1))]), + loc(`wiki_trait_effect_ocular_power_ex3`, [warningTextNoLoc(+(0.50 * vals[1]).toFixed(1)), linkText('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]), + loc(`wiki_trait_effect_ocular_power_ex4`, [warningTextNoLoc(Math.round(vals[1] / 33.3)), warningTextNoLoc(+(0.20 * vals[1]).toFixed(1)), linkText('wiki_hell_strategy_ambush_odds', 'wiki.html#hell-gameplay-strategy')]), + loc(`wiki_trait_effect_ocular_power_ex5`, [warningTextNoLoc(+(1.00 * vals[1]).toFixed(1)), rName('Stone')]), + loc(`wiki_trait_effect_ocular_power_ex6`, [warningTextNoLoc(+(0.20 * vals[1]).toFixed(1)), warningText('job_farmer'), warningText('job_lumberjack'), warningText('job_scavenger'), warningText('job_cement_worker'), linkText('wiki_mechanics_job_type_mining', 'wiki.html#mechanics-gameplay-job_types')]), + loc(`wiki_trait_effect_ocular_power_ex7`, [warningTextNoLoc(+(0.60 * vals[1]).toFixed(1))])]; }, type: 'major', origin: 'beholder', @@ -5181,6 +5324,10 @@ export const traits = { grenadier: { name: loc('trait_grenadier_name'), desc: loc('trait_grenadier'), + desc_function: function(vals) { + vals[1] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, desc_extra: function(vals) { return [ loc(`wiki_trait_effect_grenadier_ex1`, [warningText('tech_operating_base')]), @@ -5353,6 +5500,10 @@ export const traits = { tactical: { // War Bonus name: loc('trait_tactical_name'), desc: loc('trait_tactical'), + desc_function: function(vals) { + vals[1] = linkText('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, type: 'minor', vars(r){ return [5]; }, }, @@ -5407,6 +5558,10 @@ export const traits = { content: { // Morale Bonus name: loc('trait_content_name'), desc: loc('trait_content'), + desc_function: function(vals) { + vals[0] = linkText('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); + return vals; + }, type: 'minor', }, fibroblast: { // Healing Bonus @@ -5415,6 +5570,7 @@ export const traits = { desc_function: function(vals) { //Multiply by 5 for display vals[0] = vals[0] * 5; + vals[1] = linkText('wiki_combat_healing_potential', 'wiki.html#combat-gameplay-healing'); return vals; }, type: 'minor', diff --git a/src/wiki/combat.js b/src/wiki/combat.js index f3d7c172b..0dde59f52 100644 --- a/src/wiki/combat.js +++ b/src/wiki/combat.js @@ -7,6 +7,19 @@ export function combatPage(content){ infoBoxBuilder(mainContent,{ name: 'basics', template: 'combat', label: loc('wiki_combat_basics'), paragraphs: 4, h_level: 2}); sideMenu('add',`combat-gameplay`,`basics`,loc('wiki_combat_basics')); + infoBoxBuilder(mainContent,{ name: 'rating', template: 'combat', label: loc('wiki_combat_rating'), paragraphs: 7, break: [5], h_level: 2, + para_data: { + 1: [loc('wiki_combat_rating')], + 2: [loc('wiki_combat_rating')], + 3: [loc('wiki_combat_rating'), '1'], + 4: [loc('wiki_combat_rating')], + 5: [loc('wiki_combat_rating'), loc('wiki_combat_roll')], + 6: [loc('wiki_combat_roll')], + 7: [loc('wiki_combat_roll'), '5', '15'] + } + }); + sideMenu('add',`combat-gameplay`,`rating`,loc('wiki_combat_rating')); + infoBoxBuilder(mainContent,{ name: 'campaign', template: 'combat', label: loc('wiki_combat_campaign'), paragraphs: 14, break: [5,11], h_level: 2, para_data: { 1: [5, loc('civics_garrison_tactic_ambush'), loc('civics_garrison_tactic_raid'), loc('civics_garrison_tactic_pillage'), loc('civics_garrison_tactic_assault'), loc('civics_garrison_tactic_siege')], @@ -20,6 +33,24 @@ export function combatPage(content){ }); sideMenu('add',`combat-gameplay`,`campaign`,loc('wiki_combat_campaign')); + infoBoxBuilder(mainContent,{ name: 'healing', template: 'combat', label: loc('wiki_combat_healing'), paragraphs: 9, break: [2, 3, 4, 7, 8, 9], h_level: 2, + para_data: { + 1: [loc('civics_garrison_soldiers')], + 2: [loc('wiki_combat_healing_base'), loc('wiki_combat_healing_potential'), loc('wiki_combat_healing_difficulty')], + 3: [loc('wiki_combat_healing_base'), '1'], + 4: [loc('wiki_combat_healing_potential')], + 5: [loc('wiki_combat_healing_potential'), loc('tech_operating_base'), loc('wiki_challenges_scenarios_truepath'), loc('city_boot_camp'), loc('genelab_genus_synthetic'), loc('city_hospital')], + 6: [loc('wiki_combat_healing_potential')], + 7: [loc('rejuvenated'), loc('sign_cancer'), loc('wiki_mechanics_tech_levels_medical'), loc('trait_fibroblast_name'), loc('trait_cannibalize_name'), loc('trait_high_pop_name'), loc('governor_soldier'), loc('wiki_tech_tree_banquet'), loc('race_troll')], + 8: [loc('wiki_combat_healing_difficulty'), '20'], + 9: [loc('wiki_combat_healing_potential'), loc('wiki_combat_healing_difficulty'), loc('wiki_combat_healing_base')] + }, + data_link: { + 7: [false, false, 'wiki.html#mechanics-gameplay-tech_levels', false, false, false, false, false, false] + } + }); + sideMenu('add',`combat-gameplay`,`healing`,loc('wiki_combat_healing')); + infoBoxBuilder(mainContent,{ name: 'loot', template: 'combat', label: loc('wiki_combat_loot'), paragraphs: 30, break: [3,5,10,13,16,19,22,26,27,28,29,30], h_level: 2, para_data: { 2: [3, loc('civics_garrison_campaign'), loc('civics_gov_eco_rate'), loc('civics_garrison_battalion')], diff --git a/src/wiki/hell.js b/src/wiki/hell.js index 2cdd62e02..50012bb22 100644 --- a/src/wiki/hell.js +++ b/src/wiki/hell.js @@ -19,10 +19,19 @@ export function hellPage(content){ data_color: { 3: ['caution'] } }); sideMenu('add',`hell-gameplay`,'siege',loc('wiki_hell_siege')); - infoBoxBuilder(mainContent,{ name: 'strategy', template: 'hell', paragraphs: 5, break: [4], + infoBoxBuilder(mainContent,{ name: 'strategy', template: 'hell', paragraphs: 12, break: [4, 6, 12], para_data: { 4: [loc('resource_Soul_Gem_name')], - 5: [[`1`], [`30`], [`10`], [`15`], [`25`], loc('wiki_hell_strategy_ambush_odds')] + 5: [[`1`], [`30`], [`10`], [`15`], [`25`], loc('wiki_hell_strategy_ambush_odds')], + 6: [loc('wiki_combat_rating')], + 7: [loc('wiki_hell_strategy_patrol_armor')], + 8: [loc('wiki_hell_strategy_patrol_armor')], + 11: [loc('trait_instinct_name')], + 12: [loc('wiki_hell_strategy_patrol_armor'), loc('wiki_mechanics_tech_levels_armor'), loc('trait_armored_name'), loc('trait_scales_name')] + }, + data_link: { + 6: ['wiki.html#combat-gameplay-rating'], + 12: [false, 'wiki.html#mechanics-gameplay-tech_levels', false, false] } }); sideMenu('add',`hell-gameplay`,'strategy',loc('wiki_hell_strategy')); diff --git a/src/wiki/mechanics.js b/src/wiki/mechanics.js index 43bc91a0c..7edaebc68 100644 --- a/src/wiki/mechanics.js +++ b/src/wiki/mechanics.js @@ -96,6 +96,21 @@ export function mechanicsPage(content){ sideMenu('add',`mechanics-gameplay`,`job_stress`,loc('wiki_mechanics_job_stress')); } + { // Starvation + infoBoxBuilder(mainContent,{ name: 'starvation', template: 'mechanics', label: loc('wiki_mechanics_starvation'), paragraphs: 7, break: [3,6], h_level: 2, + para_data: { + 2: [loc('wiki_mechanics_starvation'), loc('wiki_mechanics_starvation_threshold'), loc('wiki_mechanics_starvation_penalty')], + 3: [loc('wiki_mechanics_starvation_threshold'), '1.25', loc('wiki_mechanics_starvation')], + 4: ['1', loc('wiki_mechanics_starvation_threshold'), loc('wiki_mechanics_starvation')], + 5: ['1', '10', '0.25'], + 6: [loc('wiki_mechanics_starvation_penalty'), '50'], + 7: [loc('wiki_mechanics_starvation_penalty')], + 8: [loc('wiki_mechanics_starvation_penalty')] + } + }); + sideMenu('add',`mechanics-gameplay`,`starvation`,loc('wiki_mechanics_starvation')); + } + { //Population Growth infoBoxBuilder(mainContent,{ name: 'pop_growth', template: 'mechanics', label: loc('wiki_mechanics_pop_growth'), paragraphs: 8, break: [2,3,5,6,8], h_level: 2, para_data: { @@ -351,9 +366,8 @@ export function mechanicsPage(content){ } { //Tech Levels - infoBoxBuilder(mainContent,{ name: 'tech_levels', template: 'mechanics', label: loc('wiki_mechanics_tech_levels'), paragraphs: 3, break: [2,3], h_level: 2, + infoBoxBuilder(mainContent,{ name: 'tech_levels', template: 'mechanics', label: loc('wiki_mechanics_tech_levels'), paragraphs: 5, break: [2,3,4,5], h_level: 2, para_data: { - 1: [loc('wiki_tech_tree_science'), loc('wiki_tech_tree_high_tech'), loc('wiki_mechanics_tech_levels_science'), loc('wiki_mechanics_tech_levels_high_tech')], 2: [loc('tech_science'), loc('tech_library'), loc('tech_thesis'), loc('tech_research_grant'), global.race.universe === 'magic' ? loc('tech_magic_tomes') : loc('tech_scientific_journal'), loc('tech_adjunct_professor'), loc('tech_tesla_coil'), loc('tech_internet'), loc('tech_observatory'), loc('tech_world_collider'), global.race.universe === 'magic' ? loc('tech_sanctum') : loc('tech_laboratory'), @@ -364,6 +378,8 @@ export function mechanicsPage(content){ loc('tech_electronics'), loc('tech_fission'), loc('tech_arpa'), loc('tech_rocketry'), loc('tech_robotics'), loc('tech_lasers'), loc('tech_artificial_intelligence'), loc('tech_quantum_computing'), loc('tech_virtual_reality'), loc('tech_plasma'), loc('tech_shields'), loc('tech_ai_core'), loc('tech_metaphysics'), loc('tech_orichalcum_analysis'), loc('tech_cybernetics'), loc('tech_divinity'), loc('wiki_mechanics_tech_levels_high_tech')], + 4: [loc('tech_hospital'), global.race['artifical'] ? loc('tech_repair_subroutines') : loc('tech_bac_tanks'), loc('tech_medkit'), loc('wiki_mechanics_tech_levels_medical')], + 5: [loc('tech_armor'), loc('tech_plate_armor'), loc('tech_kevlar'), loc('tech_nanoweave_vest'), loc('wiki_mechanics_tech_levels_armor')] } }); sideMenu('add',`mechanics-gameplay`,`tech_levels`,loc('wiki_mechanics_tech_levels')); @@ -553,16 +569,6 @@ export function mechanicsPage(content){ },planets); sideMenu('add',`mechanics-gameplay`,`planet`,loc('wiki_menu_planets')); } - - { // Soul Gem - infoBoxBuilder(mainContent,{ name: 'soul_gem', template: 'hell', label: loc('wiki_hell_soul_gem'), paragraphs: 4, h_level: 2, - para_data: { - 1: [loc('wiki_hell_soul_gem'),loc('tab_portal')], - 3: [loc('tech_demon_attractor')] - } - }); - sideMenu('add',`mechanics-gameplay`,`soul_gem`,loc('wiki_hell_soul_gem')); - } { // Quantum Level let quantum = infoBoxBuilder(mainContent,{ name: 'quantum', template: 'mechanics', label: loc('wiki_mechanics_quantum'), paragraphs: 4, h_level: 2, diff --git a/strings/strings.json b/strings/strings.json index f291a8b78..7661c514f 100644 --- a/strings/strings.json +++ b/strings/strings.json @@ -7728,7 +7728,7 @@ "eden_fire_support_base_counterattack": "Enemy counter attack damaged your %0.", "eden_elerium_containment": "%0 Containment", "eden_pillbox_title": "Pillbox", - "eden_pillbox_effect": "Enemy Counterattack -%0%", + "eden_pillbox_effect": "Enemy Counterattack -%0% Total", "eden_restaurant_title": "Restaurant of Eternity", "eden_restaurant_effect": "+%0% %1 Morale", "eden_restaurant_bd": "Restaurant", @@ -8591,21 +8591,21 @@ "wiki_trait_effect_wasteful": "Crafting costs increased by %0%.", "wiki_trait_effect_xenophobic": "-1 Trade Route per Trade Post.", "wiki_trait_effect_beast": "+%0% hunting production, +%1% hunting when Windy. +%2% soldier training speed.", - "wiki_trait_effect_cautious": "-%0% combat rating when Raining.", + "wiki_trait_effect_cautious": "-%0% %1 when Raining.", "wiki_trait_effect_small": "-%0 Planetary cost creep, -%1 Non-Homeworld cost creep.", "wiki_trait_effect_weak": "-%0% production to %1 and %2.", "wiki_trait_effect_large": "+%0 Planetary cost creep.", - "wiki_trait_effect_strong": "%0X manual resource gains (Food, Lumber, Stone). %2 are %1X more effective.", + "wiki_trait_effect_strong": "%0X manual resource gains (Food, Lumber, Stone). %2 are %1X as effective.", "wiki_trait_effect_strong_ex1": "This bonus multiplies the %2 bonus of %0 or %1 if one of them is active. If both are active, only one instance of the bonus is applied.", "wiki_trait_effect_cold_blooded": "All %4 and all %5 suffer -%0% production in %6 or %7, but get +%1% production when %8 or %9. %2 and %3 are only affected once, despite being both %4 and %5.", - "wiki_trait_effect_scales": "-%0 soldier deaths on success, -%1 death on failure. +%2 Hell Patrol Armor.", + "wiki_trait_effect_scales": "-%0 soldier deaths on success, -%1 death on failure. +%2 %3.", "wiki_trait_effect_flier": "Clay replaces Stone and Cement. Clay costs reduced by %0%. +%1 Trade Post trade route.", "wiki_trait_effect_flier_ex1": "Cement is converted to Clay at 1.75x original Cement cost, but is then discounted by the Clay discount.", "wiki_trait_effect_hollow_bones": "-%0% crafted material costs.", - "wiki_trait_effect_sky_lover": "%2, except for %1 have %0% increased job stress.", + "wiki_trait_effect_sky_lover": "%2, except for %1 have %0% increased %3.", "wiki_trait_effect_rigid": "-%0% crafting material production.", - "wiki_trait_effect_high_pop": "Population numbers are %0x higher, but citizens contribute only %1% of their normal work value individually. Population growth %3 is increased by %2x and %4 is decreased by %0x.", - "wiki_trait_effect_high_pop_ex1": "The High Population trait will not be gained from using Mimic to emulate Insectoid.", + "wiki_trait_effect_high_pop": "Population numbers are %0x higher, but citizens contribute only %1% of their normal work value individually. %5 and population growth %3 increased by %2x and %4 is decreased by %0x.", + "wiki_trait_effect_high_pop_ex1": "This trait will not be gained from using %0 or %1 to emulate %2.", "wiki_trait_effect_fast_growth": "Increases population growth %2 bonuses from techs by %0x and adds its own bonus of %1 afterward.", "wiki_trait_effect_high_metabolism": "+%0% food consumption.", "wiki_trait_effect_photosynth": "-%0% food consumption when Sunny, -%1% food consumption when Cloudy, -%2% food consumption when Rainy.", @@ -8627,22 +8627,22 @@ "wiki_trait_effect_immoral": "Warmonger is a bonus instead of a penalty. Warmonger bonus adjusted by %0%.", "wiki_trait_effect_evil": "Lumber, Furs, and Plywood are replaced with Bones, Flesh, and Boneweave. Smelters can operate on Flesh instead of Lumber.", "wiki_trait_effect_blissful": "Production penalty from low morale is reduced to %0% of normal. No Tax Riots are possible.", - "wiki_trait_effect_pompous": "-%0% Professor knowledge production.", - "wiki_trait_effect_holy": "Soldiers have +%0% rating in the hell dimension. Demon Suppression is %1% easier.", + "wiki_trait_effect_pompous": "-%0% Professor Knowledge production.", + "wiki_trait_effect_holy": "Soldiers have +%0% %2 in the hell dimension. Demon Suppression is %1% easier.", "wiki_trait_effect_creative": "-%0 ARPA cost creep; -%1% ARPA costs.", "wiki_trait_effect_diverse": "+%0% soldier training time.", - "wiki_trait_effect_studious": "+%0 Professor Knowledge production. +%1% Library Knowledge.", + "wiki_trait_effect_studious": "+%0 Professor Knowledge production. +%1% Library Knowledge capacity.", "wiki_trait_effect_arrogant": "+%0% trade buying prices.", "wiki_trait_effect_brute": "-%0% mercenaries cost and +%1% faster base soldier training.", - "wiki_trait_effect_angry": "+%0% starvation penalty.", + "wiki_trait_effect_angry": "%1 increased by %0 percentage points.", "wiki_trait_effect_lazy": "-%0% production when hot.", - "wiki_trait_effect_curious": "+%0% University knowledge per citizen. Adds a %1 major event that has various effects.", + "wiki_trait_effect_curious": "+%0% University Knowledge capacity per citizen. Adds a %1 major event that has various effects.", "wiki_trait_effect_carnivore": "Unemployed are replaced with Hunters. Agriculture tech is disabled. %0% of Food spoils each second, reduced by Smokehouses.", "wiki_trait_effect_pack_mentality": "+%0 cost creep for %2, -%1 cost creep for %3 and %4.", "wiki_trait_effect_tracker": "+%0% hunting production.", - "wiki_trait_effect_playful": "Hunters increase morale by %0% and cause no stress.", - "wiki_trait_effect_freespirit": "Non-%1 are %0% more stressful.", - "wiki_trait_effect_beast_of_burden": "Make an extra loot roll on successful attack.", + "wiki_trait_effect_playful": "Hunters increase morale by %0% and cause no %1.", + "wiki_trait_effect_freespirit": "Non-%1 cause %0% more %2.", + "wiki_trait_effect_beast_of_burden": "Make an extra %0 roll on successful attack.", "wiki_trait_effect_sniper": "Weapon upgrades get %0% stronger for every weapon tech researched. For instance, after 5 weapon tech upgrades, all weapon tech upgrades will be %1% stronger.", "wiki_trait_effect_sniper_ex1": "The weapon upgrade technologies are: %0, %1, %2, %3, %4, %5, %6, %7, and %8", "wiki_trait_effect_hooved": "Expanding population requires %0. %0 costs scaled to %1%.", @@ -8651,14 +8651,13 @@ "wiki_trait_effect_hooved_ex3": "If the next resource is not unlocked by the time you reach the breakpoint, it will keep charging the current resource but at a greatly inflated price.", "wiki_trait_effect_hooved_ex4": "Note that you start with %0 %1, which count against the total.", "wiki_trait_effect_hooved_ex5": "If %0 is not available as a resource, then %1 will be charged from the beginning.", - "wiki_trait_effect_rage": "Wounded soldiers fight %1% harder instead of taking a penalty. Your army fights %0% harder for every wounded soldier.", - "wiki_trait_effect_heavy": "Fuel costs are %0% higher. Some material costs %1% higher.", - "wiki_trait_effect_heavy_ex1": "%0, %1, and %2 costs are increased.", - "wiki_trait_effect_gnawer": "%0 Lumber chewed per population.", + "wiki_trait_effect_rage": "Wounded soldiers get +%1% %2 instead of taking a penalty. Your army gets +%0% %2 for every wounded soldier.", + "wiki_trait_effect_heavy": "Fuel costs are %0% higher. %2, %3, and %4 costs %1% higher.", + "wiki_trait_effect_gnawer": "%0 %1 chewed per population. If %1 has been eliminated, %2 or its current equivalent will be chewed instead.", "wiki_trait_effect_calm": "Get a global bonus by accruing Zen. %0 max Zen slots per chamber. One Zen is generated per filled slot, with a citizen/soldier filling 2/1 slots.", "wiki_trait_effect_calm_ex1": "Production bonus is (Zen * 100) / (Zen + 5000)%.", "wiki_trait_effect_herbivore": "Soldiers do not produce food from hunting.", - "wiki_trait_effect_forager": "Several %1 are combined into one. %0% efficiency.", + "wiki_trait_effect_forager": "Adds a new %1 job with its own new set of tools that gathers various resources. %0% efficiency. Resources are gathered in these ratios: %2 %3 to %4 %5 to %6 %7/%8/%9 to %10 %11 to %12 %13 to %14 %15.", "wiki_trait_effect_instinct": "%1% dying soldiers are instead wounded. Surveyors %0% less likely to be killed. Losses from Andromeda assault missions is reduced by half. Andromeda ships better avoid pirates, reducing threat.", "wiki_trait_effect_instinct_ex1": "Pirate threat reduced by %0% in %1 and by %2% in other regions.", "wiki_trait_effect_pack_rat": "+%0% Crate/Container Storage. +%1% General Storage.", @@ -8666,56 +8665,59 @@ "wiki_trait_effect_greedy": "-%0% tax income", "wiki_trait_effect_merchant": "+%0% trade selling prices. +%1% trade volume.", "wiki_trait_effect_smart": "-%0% Knowledge costs", - "wiki_trait_effect_puny": "Average combat roll reduced by 15%. -%0% Combat Rating.", + "wiki_trait_effect_smart_ex1": "Not compatible with %0. Adding one while the other is already active will fail and give %1 minor trait ranks instead.", + "wiki_trait_effect_puny": "-%0% %1. Minimum %2 reduced by 2.", "wiki_trait_effect_dumb": "+%0% Knowledge costs", + "wiki_trait_effect_dumb_ex1": "Not compatible with %0. Adding one while the other is already active will fail and give %1 minor trait ranks instead.", "wiki_trait_effect_tough": "+%0% production for all %1, except the %2.", - "wiki_trait_effect_nearsighted": "-%0% Library Knowledge.", + "wiki_trait_effect_nearsighted": "-%0% Library Knowledge capacity.", "wiki_trait_effect_intelligent": "+%0% production per Professor, +%1% production per Scientist.", - "wiki_trait_effect_regenerative": "Base wounded soldiers healed each day increased to %0.", + "wiki_trait_effect_regenerative": "%1 increased to %0.", "wiki_trait_effect_gluttony": "+%0% Food consumption.", "wiki_trait_effect_slow": "Game speed reduced by %0%.", - "wiki_trait_effect_armored": "-%0% Soldier deaths. +%1 Hell Patrol Armor.", - "wiki_trait_effect_optimistic": "Stress reduced by %0 points. Minimum Morale increased by %1%.", - "wiki_trait_effect_chameleon": "Barracks house 1 less soldier. +%0% Combat Rating. Patrol %4 are improved by %1. If both %2 and %3 are active, only the larger %4 improvement takes effect.", - "wiki_trait_effect_slow_digestion": "Starvation threshold increased by %0.", + "wiki_trait_effect_armored": "-%0% Soldier deaths. +%1 %2.", + "wiki_trait_effect_optimistic": "Total %2 reduced by %0 points. Minimum Morale increased by %1%.", + "wiki_trait_effect_chameleon": "Barracks house 1 less soldier. +%0% %5. Patrol %4 are improved by %1. If both %2 and %3 are active, only the larger %4 improvement takes effect.", + "wiki_trait_effect_slow_digestion": "%1 increased by %0.", "wiki_trait_effect_astrologer": "Astrological sign improved by %0%.", - "wiki_trait_effect_hard_of_hearing": "-%0% University Knowledge.", + "wiki_trait_effect_hard_of_hearing": "-%0% University Knowledge capacity.", "wiki_trait_effect_resourceful": "-%0% Crafting Costs.", "wiki_trait_effect_selenophobia": "Moon phase impacts productivity. Ranges from -%0% during full moon to +%1% during new moon.", "wiki_trait_effect_leathery": "Negative impact of bad weather on morale is reduced from 5 to %0.", - "wiki_trait_effect_pessimistic": "Stress increased by %0 points.", + "wiki_trait_effect_pessimistic": "Total %1 increased by %0 points.", "wiki_trait_effect_hoarder": "+%0% bank storage.", "wiki_trait_effect_solitary": "-%0 cost creep for %2, +%1 cost creep for %3.", "wiki_trait_effect_kindling_kindred": "Lumber and Plywood resources removed, +%0% cost if building would normally cost Lumber or Plywood.", - "wiki_trait_effect_iron_wood": "Boneweave resource removed, +%0% attack power.", + "wiki_trait_effect_iron_wood": "Boneweave resource removed, +%0% %1.", "wiki_trait_effect_pyrophobia": "-%0% Smelter production.", "wiki_trait_effect_hyper": "Game speed increased by %0%.", "wiki_trait_effect_skittish": "Thunderstorms lower morale by %0%.", - "wiki_trait_effect_sticky": "Food requirements are lowered by %0% and combat rating is increased by %1%.", + "wiki_trait_effect_sticky": "Food requirements are lowered by %0% and %2 is increased by %1%.", "wiki_trait_effect_fragrant": "Hunting produces %0% less.", "wiki_trait_effect_infectious": "Attacking has a chance to increase your population. Up to %0/%1/%2/%3/%4 enemies will be infected, depending on campaign type.", - "wiki_trait_effect_parasite": "Natural population growth only occurs when it's windy. Start with %0 Soldiers. Get %1% less loot when attacking. Up to 2 soldiers in each group have combat power boosted by 2, unaffected by other modifiers.", + "wiki_trait_effect_parasite": "Natural population growth only occurs when it's windy. Start with %0 Soldiers. Get %1% less loot when attacking. Up to 2 soldiers in each group have %2 boosted by 2, unaffected by other modifiers.", "wiki_trait_effect_toxic": "+%0% Factory Money/Alloy/Polymer production. +%1% Nano Tube/Stanene production. +%2% Cement production.", "wiki_trait_effect_nyctophilia": "-%0% Morale when Sunny. +%1% Morale when Cloudy.", "wiki_trait_effect_hibernator": "Food consumption is lowered by %0% during winter, but production is also lowered by %1%.", "wiki_trait_effect_infiltrator": "Spies are cheaper and you occasionally steal tech advancements. Stealing is possible after reaching a knowledge cap above %0% of the tech's base cost. One fewer Scout Ship is needed to determine the threat in an area.", "wiki_trait_effect_infiltrator_ex1": "Stolen techs are not random and are generally stolen earlier than can be normally acquired.", "wiki_trait_effect_infiltrator_ex2": "Stolen Tech List: %0.", - "wiki_trait_effect_cannibalize": "Gain Sacrificial Altar. Sacrifice population for %0% bonuses. Bonuses boost %1, %2, Combat Power, Healing Rate, or Knowledge Income at random. Any number of the boosts may be active at once. If the same boost is chosen again before expiring, its duration is extended.", - "wiki_trait_effect_cannibalize_ex1": "Boost duration is randomized in a range which is dependent on tech levels. Each sacrifice extends boost duration by 300 to 600 seconds by default, 600 to 1500 seconds after %0, 1800 to 3600 seconds after %1, and 5400 to 16200 seconds after %2.", + "wiki_trait_effect_cannibalize": "Gain Sacrificial Altar. Sacrifice population for %0% bonuses. Bonuses boost %1, %2, %4, %3, or Knowledge production at random. Any number of the boosts may be active at once. If the same boost is chosen again before expiring, its duration is extended.", + "wiki_trait_effect_cannibalize_ex1": "Each sacrifice extends boost duration by 300 to 600 seconds by default, 600 to 1500 seconds after %0, 1800 to 3600 seconds after %1, and 5400 to 16200 seconds after %2.", "wiki_trait_effect_frail": "Soldier deaths increased by %0 on won fights, and by %1 on lost fights.", - "wiki_trait_effect_malnutrition": "-%0% starvation penalty.", - "wiki_trait_effect_claws": "Combat rating and average combat roll increased by %0%.", - "wiki_trait_effect_atrophy": "Starvation threshold decreased by %0.", + "wiki_trait_effect_malnutrition": "%1 decreases by %0 percentage points.", + "wiki_trait_effect_claws": "%1 increased by %0%. Maximum %2 increased by 4.", + "wiki_trait_effect_atrophy": "%1 decreased by %0.", "wiki_trait_effect_hivemind": "Effectiveness of many jobs scales with the number of workers assigned to that job. Breaks even at %0 workers.", "wiki_trait_effect_hivemind_ex1": "The jobs affected are: %0, %1, %2, %3, %4, %5, and %6", - "wiki_trait_effect_hivemind_ex2": "For each worker below the breakpoint, the job suffers a 5% production penalty (scaled by the population factor if you have %0). For each worker above the breakpoint, effectiveness increases with diminishing returns to a maximum bonus of +%1%.", - "wiki_trait_effect_hivemind_ex3": "Each group of %0 runs its own %2 calculation independent of other groups of %0. %3 boost the sizes of groups that they are a part of by %4 before %5, and %6 after. %0 above the breakpoint apply a %1% boost each.", - "wiki_trait_effect_hivemind_ex4": "Each attacking force or hell patrol is considered a separate group. Defenders of the hell fortress, guards at the hell forge, guards posted at the Pit, troops in troop landers, and droid soldiers are also considered groups, with each category being one group.", - "wiki_trait_effect_hivemind_ex5": "Handling for other jobs is counted as a total of all workers assigned to the job. Species with %0 receive a %1% boost per worker above the breakpoint, and other species receive a %2% boost per worker above the breakpoint.", - "wiki_trait_effect_hivemind_ex6": "The improvements to %5 from the %0, %1, and %2 traits and the improvement to %6 from the %3 governor increase effective worker counts, which will boost bonuses from %4", - "wiki_trait_effect_hivemind_ex7": "No effect during the %0 scenario.", - "wiki_trait_effect_hivemind_ex8": "The diminishing return calculation is: boost = 100% - (100% - boost per worker) ^ (workers over the breakpoint). In words, each additional worker over the breakpoint gets the current boost [boost per worker] closer to a bonus of 100%.", + "wiki_trait_effect_hivemind_ex2": "The breakpoint scales up with the population factor for species that have %0, except for the breakpoint for %1, which does not scale with %0.", + "wiki_trait_effect_hivemind_ex3": "For each worker below the breakpoint, the job suffers a 5% production penalty (scaled by the population factor if you have %0). For each worker above the breakpoint, effectiveness increases with diminishing returns to a maximum bonus of +%1%.", + "wiki_trait_effect_hivemind_ex4": "Each group of %0 runs its own %2 calculation independent of other groups of %0. %3 boost the sizes of groups that they are a part of by %4 before %5, and %6 after. %0 above the breakpoint apply a %1% boost each.", + "wiki_trait_effect_hivemind_ex5": "Each attacking force or hell patrol is considered a separate group. Defenders of the hell fortress, guards at the hell forge, guards posted at the Pit, troops in troop landers, and droid soldiers are also considered groups, with each category being one group.", + "wiki_trait_effect_hivemind_ex6": "Handling for other jobs is counted as a total of all workers assigned to the job. Species with %0 receive a %1% boost per worker above the breakpoint, and other species receive a %2% boost per worker above the breakpoint.", + "wiki_trait_effect_hivemind_ex7": "The improvements to %5 from the %0, %1, and %2 traits and the improvement to %6 from the %3 governor increase effective worker counts, which will boost bonuses from %4", + "wiki_trait_effect_hivemind_ex8": "No effect during the %0 scenario.", + "wiki_trait_effect_hivemind_ex9": "The diminishing return calculation is: boost = 100% - (100% - boost per worker) ^ (workers over the breakpoint). In words, each additional worker over the breakpoint gets the current boost [boost per worker] closer to a bonus of 100%.", "wiki_trait_effect_tunneler": "-%0 Mine and Coal Mine cost creep.", "wiki_trait_effect_blood_thirst": "Frequent combat raises morale up to +%0%. Warmonger penalty is disabled.", "wiki_trait_effect_blood_thirst_ex1": "The %0 achievement may still be earned.", @@ -8724,39 +8726,39 @@ "wiki_trait_effect_blood_thirst_ex4": "%0 stack earned for every %1 enemies fought while your city is being Raided, Pillaged, or Seiged.", "wiki_trait_effect_blood_thirst_ex5": "%0 stacks earned each time a Terrorist Attack happens.", "wiki_trait_effect_blood_thirst_ex6": "Up to %0 stack earned for every %1 demons encountered by patrols in hell, at random.", - "wiki_trait_effect_apex_predator": "+%0% Combat Rating. +%1% Hunting production. Armor is disabled.", - "wiki_trait_effect_invertebrate": "-%0% combat loot gained.", + "wiki_trait_effect_apex_predator": "+%0% %2. +%1% Hunting production. Armor is disabled.", + "wiki_trait_effect_invertebrate": "-%0% %1 gained.", "wiki_trait_effect_suction_grip": "+%0% Global production.", "wiki_trait_effect_befuddle": "Espionage times are reduced by %0%.", "wiki_trait_effect_environmentalist": "Hydroelectric Dams (+%0MW) and Wind Farms (+%1MW-%2MW depending on wind) replace Coal (+%3MW) and Oil (+%4MW) Powerplants. Windmill power production set to %5MW.", "wiki_trait_effect_unorganized": "+%0% blackout time between changing governments.", - "wiki_trait_effect_musical": "Entertainers increase morale by an additional %0%.", + "wiki_trait_effect_musical": "Entertainers increase morale by an additional %0 point(s).", "wiki_trait_effect_revive": "Each time soldiers die, a random number of the killed soldiers are revived. When victorious, at most %0%/%1%/%2% of soldiers will be revived when weather is %7/%8/%9. When defeated, at most %3%/%4%/%5% of soldiers will be revived when weather is %7/%8/%9. At most %6% of soldiers killed during Hell Patrols will revive.", - "wiki_trait_effect_slow_regen": "Soldiers heal %0% slower.", + "wiki_trait_effect_slow_regen": "%1 increased by %0%.", "wiki_trait_effect_forge": "Smelters do not require fuel and get the Oil bonus all the time. +%0MW produced by Geothermal Plants.", "wiki_trait_effect_autoignition": "Library Knowledge production bonus reduced by %0%.", "wiki_trait_effect_blurry": "%1 missions are %2% less likely to fail, %3 missions are %4% less likely to fail, and %5 missions are %6% less likely to fail. Surveyors are %0% less likely to be killed.", "wiki_trait_effect_snowy": "Morale is lowered by %0 to %1 when it's not snowing.", "wiki_trait_effect_ravenous": "Food consumption increases with your Food stockpile. Eat %0% more food + 1/%1 of your stockpile per tick.", - "wiki_trait_effect_ghostly": "+%0% Food from Hunting. +%1 base Food per Soul Well. +%2% Soul Gem drop rate in combat.", + "wiki_trait_effect_ghostly": "+%0% Food from Hunting. +%1 base Food per Soul Well. +%2% %3 found by patrols and surveyors.", "wiki_trait_effect_lawless": "Government lockout timer is reduced by %0%.", "wiki_trait_effect_mistrustful": "Hostilities grow quicker with foreign governments. +%0 extra percentage points of hate gained from attacking.", - "wiki_trait_effect_humpback": "Starvation threshold increased by %0. Lumberjacks and %2 produce %1% more.", + "wiki_trait_effect_humpback": "%3 increased by %0. Lumberjacks and %2 produce %1% more.", "wiki_trait_effect_thalassophobia": "Wharves are unavailable.", "wiki_trait_effect_unfavored": "The gods have cursed you inverting astrological effects into negatives. Negative effects at %0% potency.", - "wiki_trait_effect_fiery": "+%0% Combat Rating. +%1% Hunting production.", - "wiki_trait_effect_terrifying": "You cannot trade; however, titanium can be gained from %3. Titanium is added as a Rare lootable resource, and base Titanium gained is in the range of %0 to %1. Get the benefit of %2 without having to research it.", - "wiki_trait_effect_slaver": "You can capture slaves in combat, who boost your productivity by %0% each.", + "wiki_trait_effect_fiery": "+%0% %2. +%1% Hunting production.", + "wiki_trait_effect_terrifying": "You cannot trade; however, %4 can be gained from %3. %4 is added as a Rare lootable resource, and base %4 gained is in the range of %0 to %1. Get the benefit of %2 without having to research it.", + "wiki_trait_effect_slaver": "You can capture slaves in combat or buy them on the open market. Slaves boost your productivity by %0% each.", "wiki_trait_effect_compact": "-%0 Planetary cost creep, -%1 Non-Homeworld cost creep.", "wiki_trait_effect_conniving": "%0% better buying prices, %1% better selling prices.", - "wiki_trait_effect_pathetic": "-%0% Combat Rating.", + "wiki_trait_effect_pathetic": "-%0% %1.", "wiki_trait_effect_spiritual": "Temples are %0% more effective.", "wiki_trait_effect_manipulator": "Propaganda Centers are %0% more effective.", "wiki_trait_effect_truthful": "Bankers are %0% less effective.", - "wiki_trait_effect_unified": "Start with Unification. Unification gains +%0%.", + "wiki_trait_effect_unified": "Start with Unification. Production bonus from Unification increased by %0 percentage points.", "wiki_trait_effect_gloomy": "Gain a %0% global production bonus if not Sunny.", "wiki_trait_effect_rainbow": "Gain a %0% global production bonus if Sunny after Raining.", - "wiki_trait_effect_magnificent": "Construct shrines whose effect depends on the moon phase at the time the shrine is constructed. Waxing Crescent: +%4% Morale, Waxing Gibbous: +%3% Metals, Waning Gibbous: +%0Knowledge & +%1% University Knowledge, Waning Crescent: +%2% Tax Income. Bonus cycles with current moon phase if constructed at other times.", + "wiki_trait_effect_magnificent": "Construct shrines whose effect depends on the moon phase at the time the shrine is constructed. Waxing Crescent: +%4% Morale, Waxing Gibbous: +%3% Metals, Waning Gibbous: +%0 Knowledge cap & +%1% University Knowledge cap, Waning Crescent: +%2% Tax Income. Bonus cycles with current moon phase if constructed at other times.", "wiki_trait_effect_magnificent_ex1": "Shrines without a fixed effect have no effect during %0, both adjacent effects during %1 or %2, and every available effect during %3.", "wiki_trait_effect_noble": "Taxes cannot be raised above %1% or lowered below %0%.", "wiki_trait_effect_artifical": "New population doesn't grow automatically; instead they must be manufactured. Citizens assigned to science jobs are %0% more effective.", @@ -8767,7 +8769,7 @@ "wiki_trait_effect_imitation_ex3": "Species having this trait at the start of a run may choose their target from among any race that has completed an %0 reset. Others will get whatever target was last imitated.", "wiki_trait_effect_imitation_ex4": "Imitated traits will be boosted by %0 if they meet the value requirements.", "wiki_trait_effect_imitation_ex5": "Traits from the copied genus may not be acquired through %0.", - "wiki_trait_effect_emotionless": "Entertainers are %0% less effective, but jobs are also %1% less stressful.", + "wiki_trait_effect_emotionless": "Entertainers are %0% less effective, but %2 is %1% lower.", "wiki_trait_effect_logical": "Wardenclyffe base Knowledge requirement lowered by %0. Adds %1 for each %2 and each %3 to your Knowledge cap per citizen.", "wiki_trait_effect_linked": "Quantum level is increased by %0% per citizen. Linked effect degrades above %1%.", "wiki_trait_effect_linked_ex1": "If there is an effect of X% effect over the cap, the effect above the cap is divided by a factor of ((X / 100) + 200 - cap).", @@ -8775,22 +8777,27 @@ "wiki_trait_effect_shapeshifter": "Select or change the genus you wish to copy traits from at any time in the Civics tab. Positive traits are assumed at rank %0, and negative traits are assumed at rank %1.", "wiki_trait_effect_shapeshifter_ex1": "Acquired traits will be boosted by %0 if they meet the value requirements.", "wiki_trait_effect_shapeshifter_ex2": "Traits from the copied genus may not be acquired through %0.", - "wiki_trait_effect_psychic": "Energy Regen +%2. Psychic Effect Power +%3%. Mind Break +%0%. Thrall effectiveness +%1%.", + "wiki_trait_effect_psychic": "Energy Regen +%2. Psychic Effects operate at %3 power. Thralls are +%0% easier to imprison after capture. Thrall effectiveness +%1%.", + "wiki_trait_effect_psychic_ex1": "Energy Regen +%2. Psychic Effects operate at %3 power. Thralls are +%0% easier to imprison after capture. Thrall effectiveness +%1%.", + "wiki_trait_effect_psychic_ex2": "Energy Regen +%2. Psychic Effects operate at %3 power. Thralls are +%0% easier to imprison after capture. Thrall effectiveness +%1%.", + "wiki_trait_effect_psychic_ex3": "Energy Regen +%2. Psychic Effects operate at %3 power. Thralls are +%0% easier to imprison after capture. Thrall effectiveness +%1%.", + "wiki_trait_effect_psychic_ex4": "Energy Regen +%2. Psychic Effects operate at %3 power. Thralls are +%0% easier to imprison after capture. Thrall effectiveness +%1%.", "wiki_trait_effect_unfathomable": "%0 surface dwelling species available. Surface Dweller capture difficulty is %1%. Each thrall gives %2% bonus production per rank of %3.", "wiki_trait_effect_unfathomable_ex1": "You employ a special variant of hunters called raiders. Raiders raid the surface world to steal resources, people, and cattle. Captured surface dwellers can be converted into thralls who give bonuses dependent on the species of thrall.", "wiki_trait_effect_unfathomable_ex2": "Thrall bonuses are related to the thrall species and most often are a derivative of their fanatic trait and will stack with the real trait.", "wiki_trait_effect_darkness": "When sunny weather would start, it is replaced with cloudy weather %0% of the time.", "wiki_trait_effect_tormented": "Morale above 100% is greatly reduced by %0%.", - "wiki_trait_effect_swift": "Combat rating is improved by %0% and you catch prospect thralls %1% easier. Get %2% bonus output for all %5. If both %3 and %4 are active, only one of their bonuses to %5 will be added.", + "wiki_trait_effect_swift": "%6 increased by %0% and you catch prospect thralls %1% easier. Get %2% bonus output for all %5. If both %3 and %4 are active, only one of their bonuses to %5 will be added.", "wiki_trait_effect_swift_ex1": "The bonus to %1 multiplies with the bonus from %0.", "wiki_trait_effect_dark_dweller": "Hunting efficiency reduced by %0% when sunny.", - "wiki_trait_effect_anthropophagite": "Your citizens will kill and eat each other if food runs low. Gain %0 food per murder.", - "wiki_trait_effect_bloated": "Your sheer mass requires you to use %0% extra basic resources when building things.", + "wiki_trait_effect_anthropophagite": "Your citizens have a 1 in 400 chance every 0.25 second that a citizen will be killed and eaten. This chance rises to 100% if food runs low. Gain %0 food per murder.", + "wiki_trait_effect_bloated": "Your sheer mass requires you to use %0% extra Basic Resources when building things.", + "wiki_trait_effect_bloated_ex1": "The Basic Resources are: %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, and %13.", "wiki_trait_effect_living_tool": "All tool research removed. Get %1% bonus output for all %8. If both %6 and %7 are active, only one of their bonuses to %8 will be added. Crafting rate improved by %0%. The following bonuses are applied once for each %10 attained: +%2% to Farmers, +%3% to Lumberjacks, +%4% to Foragers, +%5% to %9.", "wiki_trait_effect_living_tool_ex1": "The bonus to %1 multiplies with the bonus from %0.", "wiki_trait_effect_artisan": "Your mastery and love of crafting grants %0% improved crafting, %1% improved factory production, and %2% improved morale per crafter.", "wiki_trait_effect_stubborn": "You are slow to accept new things. Technologies that advance your %4 or %5 are %0% more expensive, except for %1, %2, and %3.", - "wiki_trait_effect_rogue": "A %1 major event is added to the event pool, in which a random availabe resource is stolen by your people and added to your stockpiles. Nab up to the smaller of 4% of your knowledge cap or %0% of the resource's storage cap.", + "wiki_trait_effect_rogue": "A %1 major event is added to the event pool, in which a random availabe resource is stolen by your people and added to your stockpiles. Nab up to the smaller of 4% of your Knowledge cap or %0% of the resource's storage cap.", "wiki_trait_effect_untrustworthy": "Buildings that store money cost %0% more due to needing increased security measures.", "wiki_trait_effect_living_materials": "%1, %2, %3, & %4 self-replicate, reducing costs of those materials in buildings by %0% every 25 days.", "wiki_trait_effect_living_materials_ex1": "No cost reduction is applied for the first building of each type.", @@ -8800,32 +8807,32 @@ "wiki_trait_effect_living_materials_ex5": "If %0 is active, discounts will still be given for replaced resources.", "wiki_trait_effect_unstable": "%0% chance for up to %1% of citizens to die each day to start with, scaling down with increasing population. This trait does not interact with the event system.", "wiki_trait_effect_unstable_ex1": "The scaling effect is that up to %0% of (citizens) ^ 0.9 may die each time the deaths are triggered.", - "wiki_trait_effect_elemental_electric": "You have an elemental affinity for %0. Each citizen generates %1 MW of power to start with, scaling up with increasing population. Your soldiers are %2% stronger.", - "wiki_trait_effect_elemental_acid": "You have an elemental affinity for %0. Each citizen improves industrial processes by %1% and your soldiers are %2% stronger.", - "wiki_trait_effect_elemental_fire": "You have an elemental affinity for %0. Each citizen improves smelting processes by %1% and your soldiers are %2% stronger.", - "wiki_trait_effect_elemental_frost": "You have an elemental affinity for %0. Each citizen improves your %3 by %1% and your soldiers are %2% stronger.", + "wiki_trait_effect_elemental_electric": "You have an elemental affinity for %0. Each citizen generates %1 MW of power to start with, scaling up with increasing population. +%2% %3.", + "wiki_trait_effect_elemental_acid": "You have an elemental affinity for %0. Each citizen improves industrial processes by %1%. +%2% %3.", + "wiki_trait_effect_elemental_fire": "You have an elemental affinity for %0. Each citizen improves smelting processes by %1%. +%2% %3.", + "wiki_trait_effect_elemental_frost": "You have an elemental affinity for %0. Each citizen improves your %3 by %1%. %2% %4.", "wiki_trait_effect_elemental_ex1": "The effect is dependent on the biome on your current planet:", "wiki_trait_effect_elemental_ex2": "%0, %1, and %2 give this effect: %3", "wiki_trait_effect_elemental_ex3": "%0, %1, and %2 give this effect: %3", - "wiki_trait_effect_elemental_ex4": "The scaling effect is (total power generated) ^ %0", + "wiki_trait_effect_elemental_ex4": "The scaling effect is (power generated from this trait) ^ %0", "wiki_trait_effect_elemental_ex5": "%0, %1, and %2 give this effect: %3", "wiki_trait_effect_elemental_ex6": "%0, %1, and %2 give this effect: %3", "wiki_trait_effect_chicken": "%0% more demons arrive to assault the Fortress in Hell. Patrol %3 are worsened by %2. Piracy and Syndicate rating are %1% higher. A %4 major event and a %5 minor event are added to the pool, both of which cause citizens to die.", - "wiki_trait_effect_tusk": "%5 get a bonus of %0% of combat rating instead of using pickaxes. If both %3 and %4 are active, only the larger %5 bonus will be applied. Gain a combat bonus equal to %2% of current moisture level, currently %1% bonus combat power. Wetter planet biomes and rainy weather will give a larger bonus. Combat bonus reduced by half in Hell.", + "wiki_trait_effect_tusk": "%5 get a bonus of %0% of %6 instead of using pickaxes. If both %3 and %4 are active, only the larger %5 bonus will be applied. Gain bonus %6 equal to %2% of current moisture level, currently %1% bonus combat power. Wetter planet biomes and rainy weather will give a larger bonus. %6 bonus reduced by half in Hell.", "wiki_trait_effect_tusk_ex1": "Moisture level is determined by planet biome type. %0 and %1 have a moisture level of %2. %3, %4, %5, and %6 have a moisture level of %7. %8 and %9 have a moisture level of %10. %11, %12, %13, and %14 have a moisture level of %15. %16 or %17 weather gives a bonus of %18 moisture while it persists.", "wiki_trait_effect_blubber": "Convert corpses into Oil instead of extracting it as normal. Each %1/%2 consumes %0 corpse per day and stores a maximum of 50 corpses. Corpses are gained any time your people die. Get up to 2% of your current population at random in corpses each day due to old age deaths. This effect does not reduce population.", - "wiki_trait_effect_ocular_power": "You can use up to %0 powers at a time. Ocular powers operate at %1% strength.", + "wiki_trait_effect_ocular_power": "You can use up to %0 powers at a time. Ocular powers operate at %1 strength.", "wiki_trait_effect_ocular_power_ex1": "There are six Ocular Powers:", - "wiki_trait_effect_ocular_power_ex2": "Charm raises trade income by %0% of Ocular Power strength.", - "wiki_trait_effect_ocular_power_ex3": "Disintegration improves combat by %0% of Ocular Power strength.", - "wiki_trait_effect_ocular_power_ex4": "Fear improves patrol %2 by 1 for every %0% of Ocular Power strength. Also lowers Pirate and Syncicate activity by %1% of Ocular Power strength.", - "wiki_trait_effect_ocular_power_ex5": "Pertification converts killed enemies into %1. Every enemy provides %0% of Ocular Power strength in %1 over 2.5 seconds.", - "wiki_trait_effect_ocular_power_ex6": "Telekinesis increases the effectiveness of the following workers by %0% of Ocular Power strength: %1, %2, %3, %4 and %5", - "wiki_trait_effect_ocular_power_ex7": "Wound increases the hunting effectiveness of idle soldiers by %0% of Ocular Power strength", + "wiki_trait_effect_ocular_power_ex2": "Charm raises trade income by %0%.", + "wiki_trait_effect_ocular_power_ex3": "Disintegration improves %1 by %0%.", + "wiki_trait_effect_ocular_power_ex4": "Fear improves patrol %2 by %0. Also lowers Pirate and Syncicate activity by %1%.", + "wiki_trait_effect_ocular_power_ex5": "Pertification converts killed enemies into %1. Every enemy provides %0% in %1 over 2.5 seconds.", + "wiki_trait_effect_ocular_power_ex6": "Telekinesis increases the effectiveness of the following workers by %0%: %1, %2, %3, %4 and %5.", + "wiki_trait_effect_ocular_power_ex7": "Wound increases the hunting effectiveness of idle soldiers by %0%.", "wiki_trait_effect_floating": "Wind lowers global production by %0%.", "wiki_trait_effect_wish": "You can grant wishes with a cooldown period of up to %0 days.", "wiki_trait_effect_devious": "All trades are %0% worse, in buy/sell price and import volume.", - "wiki_trait_effect_grenadier": "Soldiers are %0% stronger, and provide 75% more Authority in Evil universe. Soldier housing and military crew requirements for ships are both reduced.", + "wiki_trait_effect_grenadier": "Soldiers have +%0% %1, and provide 75% more Authority in Evil universe. Soldier housing and military crew requirements for ships are both reduced.", "wiki_trait_effect_grenadier_ex1": "Soldier housing is reduced by 25% in the %0 and 40% in all other buildings.", "wiki_trait_effect_grenadier_ex2": "Military crew requirements are reduced by 25% for the %0, and 40% for all other ships.", "wiki_trait_effect_grenadier_ex3": "Soldier reductions are rounded to the nearest soldier, and applied before effects from techs or %0.", @@ -8856,7 +8863,7 @@ "wiki_trait_effect_soul_eater": "Souls replace normal Food.", "wiki_trait_effect_untapped": "You have untapped potential.", "wiki_trait_effect_emfield": "Natural EM fields generated by your species disrupt electricity.", - "wiki_trait_effect_tactical": "+%0% Combat Rating.", + "wiki_trait_effect_tactical": "+%0% %1.", "wiki_trait_effect_analytical": "+%0% Professor and Scientist Knowledge production.", "wiki_trait_effect_promiscuous": "Increases population growth %3 by %0 per level. Members of the %2 genus get a %1% discount on constructing new members per level.", "wiki_trait_effect_resilient": "+%0% Coal Miner production.", @@ -8864,8 +8871,8 @@ "wiki_trait_effect_hardy": "+%0% Cement Worker production.", "wiki_trait_effect_ambidextrous": "+%0% to crafting Tools Multiplier. +%1% Crafter production.", "wiki_trait_effect_industrious": "+%0% Miner production.", - "wiki_trait_effect_content": "Reduces Job Stress.", - "wiki_trait_effect_fibroblast": "+%0% faster healing of wounded Soldiers.", + "wiki_trait_effect_content": "Reduces %0. Reduction varies by job.", + "wiki_trait_effect_fibroblast": "%1 increased by %0%.", "wiki_trait_effect_metallurgist": "+%0% Alloy production", "wiki_trait_effect_gambler": "+%0% Casino Money production and storage.", "wiki_trait_effect_persuasive": "+%0% Trade Route import volume.", @@ -9733,6 +9740,17 @@ "wiki_mechanics_job_stress_para5": "Differently from regular job types, the job stress generated by soldiers is linked to the current max number of soldiers rather than the number of soldiers alive.", "wiki_mechanics_job_stress_para6": "The %0 and %1 traits apply a flat bonus/malus to the %2 value reflected in the %3 tooltip, not individually impacting the job stress of any actual job.", "wiki_mechanics_job_stress_para7": "Some governments and %0 foreign powers apply overall multipliers to the total job stress generated by your people.", + "wiki_mechanics_starvation": "Starvation", + "wiki_mechanics_starvation_threshold": "Starvation Threshold", + "wiki_mechanics_starvation_penalty": "Starvation Penalty", + "wiki_mechanics_starvation_para1": "If your people cannot produce enough food to feed themselves adequately, they will start starving.", + "wiki_mechanics_starvation_para2": "%0 interacts with two values: The %1 and the %2.", + "wiki_mechanics_starvation_para3": "The %0 starts at %1 and is modified by a variety of effects. It controls when people start dying from %2", + "wiki_mechanics_starvation_para4": "If you can produce at least %0/%1 as much food as your people would need to be fully fed, they will not die from %2.", + "wiki_mechanics_starvation_para5": "If you cannot manage to produce that much food, there is a %0 in %1 chance every %2 second that one of your people will starve to death.", + "wiki_mechanics_starvation_para6": "The %0 starts at %1% and is modified by a variety of effects. It controls how much of your production you will lose when people are starving.", + "wiki_mechanics_starvation_para7": "Modifiers to the %0 do not multiply it, they add or subtract percentage points from the value.", + "wiki_mechanics_starvation_para8": "After any modifications are complete, the %0 is applied as a global production penalty.", "wiki_mechanics_pop_growth": "Population Growth", "wiki_mechanics_pop_growth_lower_bound": "Lower Bound", "wiki_mechanics_pop_growth_upper_bound": "Upper Bound", @@ -9861,9 +9879,13 @@ "wiki_mechanics_tech_levels": "Technology Levels", "wiki_mechanics_tech_levels_science": "Science Level", "wiki_mechanics_tech_levels_high_tech": "High Tech Level", - "wiki_mechanics_tech_levels_para1": "Some effects in Evolve interact with technology levels of various kinds. The two most prominent of these levels are the %2 and the %3. Typically, technologies in the %0 and %1 categories are adding to those respective levels. However, there are some exceptions so the specific technologies are listed below.", + "wiki_mechanics_tech_levels_medical": "Medical Level", + "wiki_mechanics_tech_levels_armor": "Armor Level", + "wiki_mechanics_tech_levels_para1": "Some effects in Evolve interact with technology levels of various kinds. Typically, technologies in categories matching the tech level type are adding to those respective levels. However, there are some exceptions so the specific technologies are listed below for relevant tech levels.", "wiki_mechanics_tech_levels_para2": "The following technologies advance the %23: %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, Completing construction of the %9, %10, %11, %12, %13, %14, %15, %16, %17, %18, %19, %20, %21, and %22", "wiki_mechanics_tech_levels_para3": "The following technologies advance the %19: %0, %1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12, %13, %14, %15, %16, %17, and %18", + "wiki_mechanics_tech_levels_para4": "The following technologies advance the %3: %0, %1, and %2", + "wiki_mechanics_tech_levels_para5": "The following technologies advance the %4: %0, %1, %2, and %3", "wiki_mechanics_religion": "Religion", "wiki_mechanics_religion_para1": "%0 is a new mechanic that is unlocked after your first reset.", "wiki_mechanics_religion_para2": "Your new race will always consider your last race to be their gods; there is no religion on your first run as you do not yet have any gods.", @@ -9940,7 +9962,7 @@ "wiki_mechanics_trait_sources": "Traits from Multiple Sources", "wiki_mechanics_trait_sources_para1": "It is possible that your species could receive the same trait from more than one source.", "wiki_mechanics_trait_sources_para2": "If a second copy of a trait is added through %0, %1 or %2, the trait will increase in rank to a maximum of %3.", - "wiki_mechanics_trait_sources_para3": "If a rank-up is not possible (for instance, if the rank cannot go any higher, or if the %1 scenario is active), then %0 ranks of a random minor trait will be given instead.", + "wiki_mechanics_trait_sources_para3": "If a rank-up is not possible (for instance, if the rank cannot go any higher, if a conflicting trait is already active, or if the %1 scenario is active), then %0 ranks of a random minor trait will be given instead.", "wiki_mechanics_quantum": "Quantum Level", "wiki_mechanics_quantum_para1": "Your %0 is a number that is derived from your max Knowledge.", "wiki_mechanics_quantum_para2": "It is unlocked after researching the tech %0.", @@ -10302,6 +10324,15 @@ "wiki_combat_basics_para2": "To initiate an attack, go to the civics tab and manage your army. There is also a special military tab that shows all military information.", "wiki_combat_basics_para3": "Assign soldiers to your battalion to use them in an attack campaign.", "wiki_combat_basics_para4": "Pick a type of campaign to wage, and then pick a target and press Attack to steal resources from that rival city.", + "wiki_combat_rating": "Combat Rating", + "wiki_combat_roll": "Combat Roll", + "wiki_combat_rating_para1": "Many effects in Evolve interact with a value called %0. This is meant to represent the general fighting strength of your soldiers.", + "wiki_combat_rating_para2": "%0 is influenced by many effects including weapons research, traits, and planet traits.", + "wiki_combat_rating_para3": "%0 starts at a base of %1 and a breakdown of current effects on it can be found in the Civics->Military tab.", + "wiki_combat_rating_para4": "%0 also affects the productivity of Hunting or Raiding.", + "wiki_combat_rating_para5": "When getting into a fight, the preparation represented by %0 is not the only factor. Luck also plays a roll, represented by the %1.", + "wiki_combat_rating_para6": "Many fewer effects modify the %0, but watch out for them! They are important in determining whether your armies will win or lose fights.", + "wiki_combat_rating_para7": "When going on a campaign, a %0 between %1 and %2 is made, and multiplies your combat rating.", "wiki_combat_campaign": "Campaigns, Risk vs Reward", "wiki_combat_campaign_para1": "There are %0 different types of war campaigns: %1, %2, %3, %4, and %5.", "wiki_combat_campaign_para2": "When you attack a rival there is a chance of success or failure, depending on the campaign type and the military strength of your chosen target.", @@ -10317,6 +10348,19 @@ "wiki_combat_campaign_para12": "The advantage/disadvantage rating is how far above or below the %0/%0 win/loss rate you are.", "wiki_combat_campaign_para13": "Typically you want to aim for around %0 advantage; no advantage no matter how big will guarantee you a %1 win rate, but a nice advantage will cause you to win an overwhelming amount of the time.", "wiki_combat_campaign_para14": "If your combat advantage is above %0, then you should consider lowering your battalion size to reduce casualties.", + "wiki_combat_healing": "Soldier Healing", + "wiki_combat_healing_base": "Base Healing", + "wiki_combat_healing_potential": "Healing Potential", + "wiki_combat_healing_difficulty": "Healing Difficulty", + "wiki_combat_healing_para1": "%0 will occasionally be injured in combat instead of dying outright. When this happens, the wounded soldiers will return and start recovering.", + "wiki_combat_healing_para2": "Recovery relies on three values: %0, %1 and %2", + "wiki_combat_healing_para3": "The %0 value is the easiest to understand. This many soldiers will heal per day, without regard to anything else that may be happening with other parts of the healing handling. %0 starts at %1.", + "wiki_combat_healing_para4": "The %0 value represents how powerful your citizens' regenerative abilities are. Higher values result in faster healing, and most effects that interact with healing modify this value.", + "wiki_combat_healing_para5": "%0 starts at the count of one of your buildings, depending on how and whom you are playing at the moment: %1 if you are playing on the %2, %3 if you are playing as a member of the %4 genus, and %5 otherwise.", + "wiki_combat_healing_para6": "%0 is modified by many effects, and the ordering can be important, since some effects add to the current value, and others multiply the current value.", + "wiki_combat_healing_para7": "The ordering of the effects is: The bonus for %0 planets, the %1 astrological sign, multiplication by the %2, %3, %4, %5, the %6 governor, the %7, and the bonus from %8 thralls.", + "wiki_combat_healing_para8": "The %0 value represents how difficult it is for your people to heal. It starts at %1 and is modified only by multiplying, so the ordering of the effects is not significant.", + "wiki_combat_healing_para9": "Once both the %0 and the %1 are determined, %0 / %1 rounded down soldiers are healed, in addition to any %2.", "wiki_combat_loot": "War Loot", "wiki_combat_loot_para1": "When you successfully attack a city, you win the spoils of war.", "wiki_combat_loot_para2": "How much loot you get depends on %0 factors: the type of %1, the %2 of the target, and how many %3 soldiers survived the attack.", @@ -11005,11 +11049,19 @@ "wiki_hell_siege_para5": "With enough defense and proper threat reduction management, your fortress will be totally secure.", "wiki_hell_strategy": "Patrol Strategy", "wiki_hell_strategy_ambush_odds": "Amush Odds", + "wiki_hell_strategy_patrol_armor": "Hell Patrol Armor", "wiki_hell_strategy_para1": "It's generally a good idea to start with a small number of large patrols and then transition to a larger number of smaller patrols as you get the threat down.", "wiki_hell_strategy_para2": "Make sure you can replace your soldiers quick enough that you don't lose patrols due to running out of soldiers, as this can lead to a death spiral if you are not able to replace lost soldiers fast enough.", "wiki_hell_strategy_para3": "When you are able to handle it, you should run as many patrols as you safely can, but do not overextend your forces.", "wiki_hell_strategy_para4": "Patrols will occasionally be ambushed, resulting in poorer combat outcomes and lower chances of demons dropping a %0.", "wiki_hell_strategy_para5": "%5 start at %0 in %1 and are modified by increasing and decreasing the divisor. For instance, an improvement of %2 and a worsening of %3 together will change the odds from %0 in %1 to %0 in (%1 + %2 - %3), or %0 in %4.", + "wiki_hell_strategy_para6": "Patrols may suffer losses when encountering more demons than their own %0, or when being ambushed. The game follows this procedure to determine how many losses happen:", + "wiki_hell_strategy_para7": "The number of possible casualties is set to log base 2 (the number of demons encountered / (patrol size * %0)), rounded to the nearest soldier.", + "wiki_hell_strategy_para8": "A random number up to your %0 is subtraced from the possible causalties.", + "wiki_hell_strategy_para9": "A random number up to the number of possible casualties is chosen as the number of casualties. There is a minimum of 1 in the case of an ambush.", + "wiki_hell_strategy_para10": "A random number up to the number of casualties is chosen as the number of deaths. Any casualties that are not killed are wounded instead.", + "wiki_hell_strategy_para11": "If you have the %0 trait, a proportion of killed soldiers controlled by the trait rank will be wounded instead.", + "wiki_hell_strategy_para12": "%0 comes from a few sources in the game, including one for each %1, and the %2 and %3 traits.", "wiki_hell_soul_gem": "Soul Gems", "wiki_hell_soul_gem_para1": "%0 are a rare resource found in the %1. They can be manufactured at the %2, and found on the corpses of demons by these methods:", "wiki_hell_soul_gem_para2": "Each patrol will may encounter and kill a number of demons each day. For every few demons killed, that patrol has a chance to find a %0.",