Index: ps/trunk/binaries/data/mods/public/art/variants/biped/approach_rice.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/variants/biped/approach_rice.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/variants/biped/approach_rice.xml (nonexistent) @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - Property changes on: ps/trunk/binaries/data/mods/public/art/variants/biped/approach_rice.xml ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/xml \ No newline at end of property Index: ps/trunk/binaries/data/mods/public/art/variants/capes/approach_rice.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/variants/capes/approach_rice.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/variants/capes/approach_rice.xml (nonexistent) @@ -1,8 +0,0 @@ - - - - - - - - Property changes on: ps/trunk/binaries/data/mods/public/art/variants/capes/approach_rice.xml ___________________________________________________________________ Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/xml \ No newline at end of property Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_a.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_a.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_a.xml (revision 27144) @@ -1,75 +1,74 @@ skeletal/new/m_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_b.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_b.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_b.xml (revision 27144) @@ -1,69 +1,68 @@ skeletal/new/m_tunic_short.dae - player_trans.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_e.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_e.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_archer_e.xml (revision 27144) @@ -1,71 +1,70 @@ skeletal/new/m_armor_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_a.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_a.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_a.xml (revision 27144) @@ -1,70 +1,69 @@ skeletal/new/m_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_b.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_b.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_b.xml (revision 27144) @@ -1,68 +1,67 @@ skeletal/new/m_armor_tunic_short.dae - player_trans.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_e.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_e.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_crossbowman_e.xml (revision 27144) @@ -1,71 +1,70 @@ skeletal/new/m_armor_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_a.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_a.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_a.xml (revision 27144) @@ -1,77 +1,76 @@ skeletal/new/m_pants_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_b.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_b.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_b.xml (revision 27144) @@ -1,74 +1,73 @@ skeletal/new/m_pants_tunic_long.dae - player_trans.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_e.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_e.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_halberdman_e.xml (revision 27144) @@ -1,77 +1,76 @@ skeletal/new/m_armor_pants_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_a.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_a.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_a.xml (revision 27144) @@ -1,73 +1,72 @@ skeletal/new/m_pants_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_b.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_b.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_b.xml (revision 27144) @@ -1,73 +1,72 @@ skeletal/new/m_tunic_long.dae - player_trans.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_e.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_e.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_spearman_e.xml (revision 27144) @@ -1,72 +1,71 @@ skeletal/new/m_armor_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_a.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_a.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_a.xml (revision 27144) @@ -1,71 +1,70 @@ skeletal/new/m_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_b.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_b.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_b.xml (revision 27144) @@ -1,68 +1,67 @@ skeletal/new/m_tunic_long.dae - player_trans.xml Index: ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_e.xml =================================================================== --- ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_e.xml (revision 27143) +++ ps/trunk/binaries/data/mods/public/art/actors/units/han/infantry_swordsman_e.xml (revision 27144) @@ -1,70 +1,69 @@ skeletal/new/m_armor_pants_tunic_long.dae - player_trans_spec.xml Index: ps/trunk/binaries/data/mods/public/simulation/ai/petra/researchManager.js =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/ai/petra/researchManager.js (revision 27143) +++ ps/trunk/binaries/data/mods/public/simulation/ai/petra/researchManager.js (revision 27144) @@ -1,242 +1,242 @@ /** * Manage the research */ PETRA.ResearchManager = function(Config) { this.Config = Config; }; /** * Check if we can go to the next phase */ PETRA.ResearchManager.prototype.checkPhase = function(gameState, queues) { if (queues.majorTech.hasQueuedUnits()) return; // Don't try to phase up if already trying to gather resources for a civil-centre or wonder if (queues.civilCentre.hasQueuedUnits() || queues.wonder.hasQueuedUnits()) return; let currentPhaseIndex = gameState.currentPhase(); let nextPhaseName = gameState.getPhaseName(currentPhaseIndex+1); if (!nextPhaseName) return; let petraRequirements = currentPhaseIndex == 1 && gameState.ai.HQ.getAccountedPopulation(gameState) >= this.Config.Economy.popPhase2 || currentPhaseIndex == 2 && gameState.ai.HQ.getAccountedWorkers(gameState) > this.Config.Economy.workPhase3 || currentPhaseIndex >= 3 && gameState.ai.HQ.getAccountedWorkers(gameState) > this.Config.Economy.workPhase4; if (petraRequirements && gameState.hasResearchers(nextPhaseName, true)) { gameState.ai.HQ.phasing = currentPhaseIndex + 1; // Reset the queue priority in case it was changed during a previous phase update gameState.ai.queueManager.changePriority("majorTech", gameState.ai.Config.priorities.majorTech); queues.majorTech.addPlan(new PETRA.ResearchPlan(gameState, nextPhaseName, true)); } }; PETRA.ResearchManager.prototype.researchPopulationBonus = function(gameState, queues) { if (queues.minorTech.hasQueuedUnits()) return; let techs = gameState.findAvailableTech(); for (let tech of techs) { if (!tech[1]._template.modifications) continue; // TODO may-be loop on all modifs and check if the effect if positive ? if (tech[1]._template.modifications[0].value !== "Population/Bonus") continue; queues.minorTech.addPlan(new PETRA.ResearchPlan(gameState, tech[0])); break; } }; PETRA.ResearchManager.prototype.researchTradeBonus = function(gameState, queues) { if (queues.minorTech.hasQueuedUnits()) return; let techs = gameState.findAvailableTech(); for (let tech of techs) { if (!tech[1]._template.modifications || !tech[1]._template.affects) continue; if (tech[1]._template.affects.indexOf("Trader") === -1) continue; // TODO may-be loop on all modifs and check if the effect if positive ? if (tech[1]._template.modifications[0].value !== "UnitMotion/WalkSpeed" && tech[1]._template.modifications[0].value !== "Trader/GainMultiplier") continue; queues.minorTech.addPlan(new PETRA.ResearchPlan(gameState, tech[0])); break; } }; /** Techs to be searched for as soon as they are available */ PETRA.ResearchManager.prototype.researchWantedTechs = function(gameState, techs) { let phase1 = gameState.currentPhase() === 1; let available = phase1 ? gameState.ai.queueManager.getAvailableResources(gameState) : null; const numWorkers = phase1 ? gameState.getOwnEntitiesByRole(PETRA.Worker.ROLE_WORKER, true).length : 0; for (let tech of techs) { if (tech[0].indexOf("unlock_champion") == 0) return { "name": tech[0], "increasePriority": true }; if (tech[0] == "traditional_army_sele" || tech[0] == "reformed_army_sele") return { "name": pickRandom(["traditional_army_sele", "reformed_army_sele"]), "increasePriority": true }; if (!tech[1]._template.modifications) continue; let template = tech[1]._template; if (phase1) { let cost = template.cost; let costMax = 0; for (let res in cost) costMax = Math.max(costMax, Math.max(cost[res]-available[res], 0)); if (10*numWorkers < costMax) continue; } for (let i in template.modifications) { if (gameState.ai.HQ.navalMap && template.modifications[i].value === "ResourceGatherer/Rates/food.fish") return { "name": tech[0], "increasePriority": this.CostSum(template.cost) < 400 }; else if (template.modifications[i].value === "ResourceGatherer/Rates/food.fruit") return { "name": tech[0], "increasePriority": this.CostSum(template.cost) < 400 }; - else if (template.modifications[i].value === "ResourceGatherer/Rates/food.grain" || template.modifications[i].value === "ResourceGatherer/Rates/food.rice") + else if (template.modifications[i].value === "ResourceGatherer/Rates/food.grain") return { "name": tech[0], "increasePriority": false }; else if (template.modifications[i].value === "ResourceGatherer/Rates/wood.tree") return { "name": tech[0], "increasePriority": this.CostSum(template.cost) < 400 }; else if (template.modifications[i].value.startsWith("ResourceGatherer/Capacities")) return { "name": tech[0], "increasePriority": false }; else if (template.modifications[i].value === "Attack/Ranged/MaxRange") return { "name": tech[0], "increasePriority": false }; } } return null; }; /** Techs to be searched for as soon as they are available, but only after phase 2 */ PETRA.ResearchManager.prototype.researchPreferredTechs = function(gameState, techs) { let phase2 = gameState.currentPhase() === 2; let available = phase2 ? gameState.ai.queueManager.getAvailableResources(gameState) : null; const numWorkers = phase2 ? gameState.getOwnEntitiesByRole(PETRA.Worker.ROLE_WORKER, true).length : 0; for (let tech of techs) { if (!tech[1]._template.modifications) continue; let template = tech[1]._template; if (phase2) { let cost = template.cost; let costMax = 0; for (let res in cost) costMax = Math.max(costMax, Math.max(cost[res]-available[res], 0)); if (10*numWorkers < costMax) continue; } for (let i in template.modifications) { if (template.modifications[i].value === "ResourceGatherer/Rates/stone.rock") return { "name": tech[0], "increasePriority": this.CostSum(template.cost) < 400 }; else if (template.modifications[i].value === "ResourceGatherer/Rates/metal.ore") return { "name": tech[0], "increasePriority": this.CostSum(template.cost) < 400 }; else if (template.modifications[i].value === "BuildingAI/DefaultArrowCount") return { "name": tech[0], "increasePriority": this.CostSum(template.cost) < 400 }; else if (template.modifications[i].value === "Health/RegenRate") return { "name": tech[0], "increasePriority": false }; else if (template.modifications[i].value === "Health/IdleRegenRate") return { "name": tech[0], "increasePriority": false }; } } return null; }; PETRA.ResearchManager.prototype.update = function(gameState, queues) { if (queues.minorTech.hasQueuedUnits() || queues.majorTech.hasQueuedUnits()) return; let techs = gameState.findAvailableTech(); let techName = this.researchWantedTechs(gameState, techs); if (techName) { if (techName.increasePriority) { gameState.ai.queueManager.changePriority("minorTech", 2*this.Config.priorities.minorTech); let plan = new PETRA.ResearchPlan(gameState, techName.name); plan.queueToReset = "minorTech"; queues.minorTech.addPlan(plan); } else queues.minorTech.addPlan(new PETRA.ResearchPlan(gameState, techName.name)); return; } if (gameState.currentPhase() < 2) return; techName = this.researchPreferredTechs(gameState, techs); if (techName) { if (techName.increasePriority) { gameState.ai.queueManager.changePriority("minorTech", 2*this.Config.priorities.minorTech); let plan = new PETRA.ResearchPlan(gameState, techName.name); plan.queueToReset = "minorTech"; queues.minorTech.addPlan(plan); } else queues.minorTech.addPlan(new PETRA.ResearchPlan(gameState, techName.name)); return; } if (gameState.currentPhase() < 3) return; // remove some techs not yet used by this AI // remove also sharedLos if we have no ally for (let i = 0; i < techs.length; ++i) { let template = techs[i][1]._template; if (template.affects && template.affects.length === 1 && (template.affects[0] === "Healer" || template.affects[0] === "Outpost" || template.affects[0] === "Wall")) { techs.splice(i--, 1); continue; } if (template.modifications && template.modifications.length === 1 && this.Config.unusedNoAllyTechs.includes(template.modifications[0].value) && !gameState.hasAllies()) { techs.splice(i--, 1); continue; } } if (!techs.length) return; // randomly pick one. No worries about pairs in that case. queues.minorTech.addPlan(new PETRA.ResearchPlan(gameState, pickRandom(techs)[0])); }; PETRA.ResearchManager.prototype.CostSum = function(cost) { let costSum = 0; for (let res in cost) costSum += cost[res]; return costSum; }; PETRA.ResearchManager.prototype.Serialize = function() { return {}; }; PETRA.ResearchManager.prototype.Deserialize = function(data) { }; Index: ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_chain_pump.json =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_chain_pump.json (revision 27143) +++ ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_chain_pump.json (revision 27144) @@ -1,24 +1,24 @@ { "genericName": "Chain Pump", "description": "Install a chain pump for improved irrigation.", "cost": { "wood": 400, "metal": 300 }, "supersedes": "gather_farming_water_weeding", "requirements": { "all": [ { "tech": "phase_city" }, { "civ": "han" } ] }, "requirementsTooltip": "Unlocked in City Phase.", "icon": "flood_control.png", "researchTime": 70, - "tooltip": "Workers +20% rice gather rate.", + "tooltip": "Workers +20% grain gather rate.", "modifications": [ - { "value": "ResourceGatherer/Rates/food.rice", "multiply": 1.2 } + { "value": "ResourceGatherer/Rates/food.grain", "multiply": 1.2 } ], "affects": ["Worker"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" } Index: ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_seed_drill.json =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_seed_drill.json (revision 27143) +++ ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_seed_drill.json (revision 27144) @@ -1,23 +1,23 @@ { "genericName": "Seed Drill", "description": "Equip your workers with seed drills.", "cost": { "wood": 200, "metal": 100 }, "requirements": { "all": [ { "tech": "phase_village" }, { "civ": "han" } ] }, "requirementsTooltip": "Unlocked in Village Phase.", "icon": "torsion_springs.png", "researchTime": 50, - "tooltip": "Workers +20% rice gather rate.", + "tooltip": "Workers +20% grain gather rate.", "modifications": [ - { "value": "ResourceGatherer/Rates/food.rice", "multiply": 1.2 } + { "value": "ResourceGatherer/Rates/food.grain", "multiply": 1.2 } ], "affects": ["Worker"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" } Index: ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_water_weeding.json =================================================================== --- ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_water_weeding.json (revision 27143) +++ ps/trunk/binaries/data/mods/public/simulation/data/technologies/gather_farming_water_weeding.json (revision 27144) @@ -1,24 +1,24 @@ { "genericName": "Water Weeding", "description": "Remove water weeds to preserve nutrients for the rice plants.", "cost": { "wood": 300, "metal": 200 }, "supersedes": "gather_farming_seed_drill", "requirements": { "all": [ { "tech": "phase_town" }, { "civ": "han" } ] }, "requirementsTooltip": "Unlocked in Town Phase.", "icon": "irrigation.png", "researchTime": 60, - "tooltip": "Workers +20% rice gather rate.", + "tooltip": "Workers +20% grain gather rate.", "modifications": [ { "value": "ResourceGatherer/Rates/food.grain", "multiply": 1.2 } ], "affects": ["Worker"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" }