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 502a3faa2..960335290 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'; @@ -3139,112 +3139,59 @@ 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; - } + 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); } + 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 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); +} + 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'){ @@ -3306,68 +3253,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', @@ -3375,6 +3260,7 @@ const altTraitDesc = { playful: 'warlord', }; + export function getTraitDesc(info, trait, opts){ let fanatic = opts['fanatic'] || false; let tpage = opts['tpage'] || false; // Trait page (on wiki) @@ -3388,7 +3274,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}
`); @@ -3435,13 +3321,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)){ @@ -3464,6 +3357,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: @@ -3517,4 +3423,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/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 20098de8d..f0261ecf3 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 } 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'; 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'; @@ -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,13 @@ 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)])]; + }, type: 'genus', genus: 'herbivore', taxonomy: 'utility', @@ -416,6 +427,24 @@ export const traits = { forager: { // Will eat just about anything name: loc('trait_forager_name'), desc: loc('trait_forager'), + desc_function: function(vals) { + 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', origin: 'hybrid', taxonomy: 'resource', @@ -470,6 +499,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 +556,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 +590,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', @@ -574,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', @@ -601,6 +657,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 +713,12 @@ 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'); + vals[3] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); + return vals; + }, type: 'genus', origin: 'avian', taxonomy: 'utility', @@ -706,6 +771,15 @@ 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'); + 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`, [warningText('trait_shapeshifter_name'), warningText('trait_imitation_name'), warningText('genelab_genus_insectoid')])]; + }, type: 'genus', origin: 'insectoid', taxonomy: 'utility', @@ -733,6 +807,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) { + vals[2] = linkTextNoColor('wiki_mechanics_pop_growth_lower_bound', 'wiki.html#mechanics-gameplay-pop_growth'); + return vals; + }, type: 'genus', origin: 'insectoid', taxonomy: 'utility', @@ -891,6 +969,11 @@ export const traits = { spores: { // Birthrate increased when it's windy name: loc('trait_spores_name'), desc: loc('trait_spores'), + 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', taxonomy: 'utility', @@ -960,6 +1043,12 @@ export const traits = { elusive: { // Spies are never caught name: loc('trait_elusive_name'), desc: loc('trait_elusive'), + 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', origin: 'fey', taxonomy: 'utility', @@ -1239,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', @@ -1293,6 +1386,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', @@ -1374,6 +1473,10 @@ export const traits = { darkness: { name: loc('trait_darkness_name'), desc: loc('trait_darkness'), + desc_function: function(vals) { + vals[0] = +(100 / (7 - vals[0])).toFixed(2); + return vals; + }, type: 'genus', origin: 'eldritch', taxonomy: 'utility', @@ -1401,6 +1504,17 @@ export const traits = { unfathomable: { name: loc('trait_unfathomable_name'), desc: loc('trait_unfathomable'), + 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', taxonomy: 'utility', @@ -1560,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', @@ -1612,6 +1730,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', @@ -1638,6 +1760,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', @@ -1691,6 +1819,11 @@ export const traits = { playful: { // Hunters are Happy 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; + }, type: 'major', origin: 'vulpine', taxonomy: 'production', @@ -1717,6 +1850,11 @@ 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'); + vals[2] = linkTextNoColor('wiki_mechanics_job_stress', 'wiki.html#mechanics-gameplay-job_stress'); + return vals; + }, type: 'major', origin: 'vulpine', taxonomy: 'production', @@ -1743,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', @@ -1751,6 +1893,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', @@ -1777,6 +1930,19 @@ export const traits = { hooved: { // You require special footwear name: loc('trait_hooved_name'), desc: loc('trait_hooved'), + 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'), 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')])]; + }, type: 'major', origin: 'centaur', taxonomy: 'utility', @@ -1804,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', @@ -1831,6 +2001,12 @@ export const traits = { heavy: { // Some costs increased name: loc('trait_heavy_name'), desc: loc('trait_heavy'), + desc_function: function(vals) { + vals[2] = rNameNoColor('Stone') + vals[3] = rNameNoColor('Cement') + vals[4] = rNameNoColor('Wrought_Iron') + return vals; + }, type: 'major', origin: 'rhinotaur', taxonomy: 'utility', @@ -1858,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', @@ -1884,6 +2065,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', @@ -2016,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', @@ -2042,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', @@ -2068,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', @@ -2094,6 +2289,11 @@ 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'); + vals[2] = loc('job_quarry_worker'); + return vals; + }, type: 'major', origin: 'ogre', taxonomy: 'resource', @@ -2173,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', @@ -2251,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', @@ -2278,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', @@ -2304,6 +2516,16 @@ export const traits = { chameleon: { // Barracks have less soldiers name: loc('trait_chameleon_name'), desc: loc('trait_chameleon'), + 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'); + vals[5] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + 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', @@ -2331,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', @@ -2435,6 +2661,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) { + vals = [14 - vals[0], vals[0]]; + return vals; + }, type: 'major', origin: 'arraak', taxonomy: 'production', @@ -2489,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', @@ -2541,6 +2775,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', @@ -2594,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', @@ -2646,6 +2889,10 @@ export const traits = { catnip: { // Attract Cats name: loc('trait_catnip_name'), desc: loc('trait_catnip'), + desc_function: function(vals) { + vals = vals[0] > 1 ? vals[1] === 4 ? vals : [vals[0]] : []; + return vals; + }, type: 'major', origin: 'entish', taxonomy: 'production', @@ -2750,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', @@ -2777,6 +3028,10 @@ export const traits = { anise: { // Attract Dogs name: loc('trait_anise_name'), desc: loc('trait_anise'), + desc_function: function(vals) { + vals = vals[0] > 1 ? vals[1] === 3 ? vals : [vals[0]] : []; + return vals; + }, type: 'major', origin: 'pinguicula', taxonomy: 'production', @@ -2830,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', @@ -2910,6 +3169,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', @@ -2963,6 +3232,16 @@ 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'); + 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) { + 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', @@ -3016,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', @@ -3042,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', @@ -3068,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', @@ -3094,6 +3386,19 @@ 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_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'), 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', taxonomy: 'production', @@ -3146,6 +3451,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) { + 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', @@ -3173,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', @@ -3200,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', @@ -3278,6 +3604,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) { + let coal = -(actions.city.coal_power.powered(true)); + let oil = -(actions.city.oil_power.powered(true)); + 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', origin: 'dryad', taxonomy: 'utility', @@ -3357,6 +3689,20 @@ export const traits = { revive: { // Soldiers sometimes self res name: loc('trait_revive_name'), desc: loc('trait_revive'), + desc_function: function(vals) { + //Delete all values from the display + 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', taxonomy: 'combat', @@ -3384,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', @@ -3436,6 +3786,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', @@ -3462,6 +3817,22 @@ 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) { + //Requires different adjustments in warlord and in normal play + 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', origin: 'yeti', taxonomy: 'utility', @@ -3542,6 +3913,12 @@ 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) { + 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; + }, type: 'major', origin: 'wendigo', taxonomy: 'utility', @@ -3621,6 +3998,11 @@ 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'); + vals[3] = linkTextNoColor('wiki_mechanics_starvation_threshold', 'wiki.html#mechanics-gameplay-starvation'); + return vals; + }, type: 'major', origin: 'kamel', taxonomy: 'resource', @@ -3683,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', @@ -3710,6 +4096,12 @@ export const traits = { terrifying: { // No one will trade with you name: loc('trait_terrifying_name'), 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[4] = rNameNoColor('Titanium'); + return vals; + }, type: 'major', origin: 'balorg', taxonomy: 'resource', @@ -3817,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', @@ -3974,6 +4370,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', @@ -4028,6 +4427,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) { + 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`, [linkText('wiki_mechanics_crispr_mutation', 'wiki.html#mechanics-gameplay-crispr_mutation')])]; + }, type: 'major', origin: 'synth', taxonomy: 'utility', @@ -4055,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', @@ -4082,6 +4497,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', @@ -4109,6 +4529,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`, [linkText('wiki_mechanics_crispr_mutation', 'wiki.html#mechanics-gameplay-crispr_mutation')])]; + }, type: 'major', origin: 'nano', taxonomy: 'utility', @@ -4136,6 +4561,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', @@ -4162,6 +4594,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', @@ -4215,6 +4650,17 @@ 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'); + vals[6] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + 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', @@ -4242,6 +4688,11 @@ export const traits = { anthropophagite: { name: loc('trait_anthropophagite_name'), desc: loc('trait_anthropophagite'), + 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; + }, type: 'major', origin: 'ghast', taxonomy: 'utility', @@ -4268,6 +4719,30 @@ export const traits = { living_tool: { name: loc('trait_living_tool_name'), desc: loc('trait_living_tool'), + 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; + }, + 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', @@ -4295,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', @@ -4349,6 +4828,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', @@ -4376,6 +4864,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', @@ -4430,6 +4922,18 @@ export const traits = { living_materials: { name: loc('trait_living_materials_name'), desc: loc('trait_living_materials'), + 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', @@ -4458,6 +4962,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`, [warningTextNoLoc(vals[1])])]; + }, type: 'major', origin: 'lichen', taxonomy: 'utility', @@ -4485,6 +4992,33 @@ export const traits = { elemental: { name: loc('trait_elemental_name'), desc: loc('trait_elemental'), + desc_function: function(vals) { + //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], linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; + break; + case 'acid': + 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], linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; + break; + case 'frost': + vals = [loc(`element_frost`), vals[4], vals[5], loc('city_biolab'), linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating')]; + break; + } + 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]), 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'), 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', taxonomy: 'utility', @@ -4537,6 +5071,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', @@ -4564,6 +5106,19 @@ 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'); + vals[6] = linkTextNoColor('wiki_combat_rating', 'wiki.html#combat-gameplay-rating'); + return vals; + }, + desc_extra: function(vals) { + return [ + 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', taxonomy: 'resource', @@ -4600,25 +5155,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', @@ -4646,6 +5206,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(+(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', taxonomy: 'utility', @@ -4754,6 +5324,19 @@ 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')]), + 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', @@ -4781,6 +5364,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', @@ -4808,6 +5397,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'), 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', origin: 'nephilim', taxonomy: 'utility', @@ -4907,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]; }, }, @@ -4919,6 +5516,12 @@ export const traits = { promiscuous: { // Organics Growth Bonus, Synths Population Discount name: loc('trait_promiscuous_name'), desc: loc('trait_promiscuous'), + 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]; }, }, @@ -4955,11 +5558,21 @@ 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 name: loc('trait_fibroblast_name'), desc: loc('trait_fibroblast'), + 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', vars(r){ return [2]; }, }, diff --git a/src/wiki/combat.js b/src/wiki/combat.js index 3e2bd9176..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')], @@ -35,17 +66,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 +98,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..50012bb22 100644 --- a/src/wiki/hell.js +++ b/src/wiki/hell.js @@ -19,13 +19,52 @@ 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: 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')], + 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')); - 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 = $(`
`); @@ -69,7 +108,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 +213,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 +406,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 +448,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 +570,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..7edaebc68 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,38 @@ 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: { + 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 +365,26 @@ 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: 5, break: [2,3,4,5], h_level: 2, + para_data: { + 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')], + 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')); + } + { // 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: { @@ -442,22 +506,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: { @@ -483,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, @@ -664,7 +740,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..7661c514f 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", @@ -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", @@ -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", @@ -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.", @@ -8591,31 +8591,32 @@ "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 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_scales": "-%0 soldier deaths on success, -%1 death on failure. +%2 Hell Patrol Armor.", + "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 %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": "Increased stress for mining jobs by %0%.", + "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 is %2x faster.", - "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_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.", "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.", @@ -8626,37 +8627,37 @@ "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. Random events caused by curiosity.", + "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 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_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_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%.", "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", "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_calm": "Global bonus provided by zen state. %0 meditation spots per chamber.", + "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 basic jobs 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.", @@ -8664,123 +8665,184 @@ "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_tough": "+%0% mining production.", - "wiki_trait_effect_nearsighted": "-%0% Library Knowledge.", + "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 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. Hell patrols are %1% less likely to be ambushed; effect does not combine with Elusive.", - "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 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_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. %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 %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% boons.", + "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_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_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": "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_apex_predator": "+%0% Combat Rating. +%1% Hunting production. Armor is disabled.", - "wiki_trait_effect_invertebrate": "-%0% combat loot gained.", + "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% %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_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_slow_regen": "Soldiers heal %0% slower.", + "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": "%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": "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% %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 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": "%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 combat. Amount of titanium gained scales with trait rank.", - "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": "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: +%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.", - "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_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_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 copied genus may not be acquired through %0.", + "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_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_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_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 copied genus may not be acquired through %0.", + "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": "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": "%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_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_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 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_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_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 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. +%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 (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 %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_ex1": "There are six Ocular Powers:", + "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": "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 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.", + "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?", @@ -8801,16 +8863,16 @@ "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 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.", "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.", @@ -9653,11 +9715,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 +9740,29 @@ "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", + "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 +9876,16 @@ "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_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.", @@ -9846,9 +9948,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, 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.", @@ -9919,6 +10033,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.", @@ -10111,7 +10226,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.", @@ -10209,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.", @@ -10224,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.", @@ -10239,17 +10376,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 +10977,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,14 +11048,48 @@ "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_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, 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", @@ -10940,7 +11111,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 +11130,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 +11227,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 +11250,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 +11538,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",