diff --git a/AI/Nullkiller/AIGateway.cpp b/AI/Nullkiller/AIGateway.cpp index 05ed10689..ea7113458 100644 --- a/AI/Nullkiller/AIGateway.cpp +++ b/AI/Nullkiller/AIGateway.cpp @@ -781,7 +781,7 @@ void AIGateway::showGarrisonDialog(const CArmedInstance * up, const CGHeroInstan //you can't request action from action-response thread executeActionAsync("showGarrisonDialog", [this, up, down, removableUnits, queryID]() { - if(removableUnits && up->tempOwner == down->tempOwner && nullkiller->settings->isGarrisonTroopsUsageAllowed() && !cb->getStartInfo()->isRestorationOfErathiaCampaign()) + if(removableUnits && up->tempOwner == down->tempOwner && nullkiller->settings->isGarrisonTroopsUsageAllowed() && !cb->getStartInfo()->restrictedGarrisonsForAI()) { pickBestCreatures(down, up); } diff --git a/AI/VCAI/VCAI.cpp b/AI/VCAI/VCAI.cpp index cf88e7b04..41a4026ea 100644 --- a/AI/VCAI/VCAI.cpp +++ b/AI/VCAI/VCAI.cpp @@ -453,19 +453,6 @@ void VCAI::objectRemoved(const CGObjectInstance * obj, const PlayerColor & initi //clear resource manager goal cache ah->removeOutdatedObjectives(checkRemovalValidity); - //TODO: Find better way to handle hero boat removal - if(auto hero = dynamic_cast(obj)) - { - if(hero->inBoat()) - { - vstd::erase_if_present(visitableObjs, hero->getBoat()); - vstd::erase_if_present(alreadyVisited, hero->getBoat()); - - for(auto h : cb->getHeroesInfo()) - unreserveObject(h, hero->getBoat()); - } - } - //TODO //there are other places where CGObjectinstance ptrs are stored... // @@ -762,7 +749,7 @@ void VCAI::showGarrisonDialog(const CArmedInstance * up, const CGHeroInstance * //you can't request action from action-response thread executeActionAsync("showGarrisonDialog", [this, down, up, removableUnits, queryID]() { - if(removableUnits && !cb->getStartInfo()->isRestorationOfErathiaCampaign()) + if(removableUnits && !cb->getStartInfo()->restrictedGarrisonsForAI()) pickBestCreatures(down, up); answerQuery(queryID, 0); diff --git a/Mods/vcmi/Content/Sprites/stackWindow/commander-bg.png b/Mods/vcmi/Content/Sprites/stackWindow/commander-bg.png index e274a979d..e6deb4f25 100644 Binary files a/Mods/vcmi/Content/Sprites/stackWindow/commander-bg.png and b/Mods/vcmi/Content/Sprites/stackWindow/commander-bg.png differ diff --git a/Mods/vcmi/Content/config/chinese.json b/Mods/vcmi/Content/config/chinese.json index c4a2870bd..986236258 100644 --- a/Mods/vcmi/Content/config/chinese.json +++ b/Mods/vcmi/Content/config/chinese.json @@ -28,6 +28,11 @@ "vcmi.adventureMap.movementPointsHeroInfo" : "(移动点数: %REMAINING / %POINTS)", "vcmi.adventureMap.replayOpponentTurnNotImplemented" : "抱歉,重放对手行动功能目前暂未实现!", + "vcmi.adventureMap.dwelling2" : "{%s}\n\n你想招募%s还是%s?", + "vcmi.adventureMap.dwelling3" : "{%s}\n\n你想招募%s、%s还是%s?", + + "vcmi.artifact.charges" : "充能", + "vcmi.bonusSource.artifact" : "宝物", "vcmi.bonusSource.creature" : "技能", "vcmi.bonusSource.spell" : "法术", @@ -340,6 +345,8 @@ "vcmi.adventureOptions.mapScrollSpeed6.help": "将地图卷动速度设置为即刻。", "vcmi.adventureOptions.hideBackground.hover" : "隐藏背景", "vcmi.adventureOptions.hideBackground.help" : "{隐藏背景}\n\n隐藏冒险地图背景,以显示贴图代替。", + "vcmi.adventureOptions.minimapShowHeroes.hover" : "在小地图上显示英雄", + "vcmi.adventureOptions.minimapShowHeroes.help" : "{在小地图上显示英雄}\n\n在小地图上显示额外的英雄可视图标,使之在大地图上更容易被找到。", "vcmi.battleOptions.queueSizeLabel.hover": "回合顺序指示器", "vcmi.battleOptions.queueSizeNoneButton.hover": "关闭", @@ -399,6 +406,9 @@ "vcmi.battleWindow.endWithAutocombat" : "您确定想以自动战斗立即结束吗?", "vcmi.battleResultsWindow.applyResultsLabel" : "接受战斗结果", + "vcmi.battleResultsWindow.spellDurationRemaining.0" : "剩余持续时间: %d回合", + "vcmi.battleResultsWindow.spellDurationRemaining.1" : "剩余持续时间: %d回合", + "vcmi.battleResultsWindow.spellDurationRemaining.2" : "剩余持续时间: %d回合", "vcmi.tutorialWindow.title" : "触摸屏介绍", "vcmi.tutorialWindow.decription.RightClick" : "长按要右键单击的元素。 触摸其他区域以关闭。", @@ -509,7 +519,7 @@ "vcmi.optionsTab.simturns.blocked1" : "同时进行: 1 周, 屏蔽联系", "vcmi.optionsTab.simturns.blocked2" : "同时进行: 2 周, 屏蔽联系", "vcmi.optionsTab.simturns.blocked4" : "同时进行: 1 月, 屏蔽联系", - + // Translation note: translate strings below using form that is correct for "0 days", "1 day" and "2 days" in your language // Using this information, VCMI will automatically select correct plural form for every possible amount "vcmi.optionsTab.simturns.days.0" : " %d 天", @@ -619,6 +629,9 @@ "mapObject.core.hillFort.object.description" : "升级生物,1-4级生物升级比城镇中更便宜。", + "creatures.core.azureDragon.bonus.fearful": "{恐惧}\n使得敌方一只部队恐惧", + "creatures.core.azureDragon.bonus.fearless": "{无惧}\n免疫恐惧特质", + "core.bonus.ADDITIONAL_ATTACK.description": "{双击}\n生物可以攻击两次", "core.bonus.ADDITIONAL_RETALIATION.description": "{额外反击}\n每回合额外获得${val}次反击机会", "core.bonus.ATTACKS_ALL_ADJACENT.description": "{环击}\n攻击所有相邻敌人", @@ -638,21 +651,26 @@ "core.bonus.ENCHANTER.description": "{施法者}\n每回合群体施放${subtype.spell}", "core.bonus.ENEMY_ATTACK_REDUCTION.description": "{忽略攻击 (${val}%)}\n被攻击时,进攻方${val}%的攻击力将被无视。", "core.bonus.ENEMY_DEFENCE_REDUCTION.description": "{忽略防御 (${val}%)}\n发动攻击时,防御方${val}%的防御力将被无视。", - "core.bonus.FEAR.description": "{恐惧}\n使得敌方一只部队恐惧", - "core.bonus.FEARLESS.description": "{无惧}\n免疫恐惧特质", "core.bonus.FEROCITY.description": "{凶猛追击}\n杀死任意生物后额外攻击${val}次", "core.bonus.FIRE_SHIELD.description": "{烈火神盾 (${val}%)}\n反弹部分受到的近战伤害", + "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{抢先反击}\n该生物的反击将会在被近战攻击前进行", + "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeRanged" : "{抢先反击}\n该生物的反击将会在被远程攻击前进行", "core.bonus.FIRST_STRIKE.description": "{抢先反击}\n该生物的反击将会在被攻击前进行", + "core.bonus.FLYING.description.bonusSubtype.movementTeleporting" : "{航送}\n该生物可以传送到任一一格,无视战场障碍。", "core.bonus.FLYING.description": "{飞行能力}\n以飞行的方式移动(无视障碍)", "core.bonus.FREE_SHOOTING.description": "{近身射击}\n能在近战范围内进行射击", "core.bonus.GARGOYLE.description": "{石像鬼属性}\n不能被复活或治疗", - "core.bonus.GENERAL_DAMAGE_REDUCTION.description": "{减少伤害 (${val}%)}\n减少从远程和近战中遭受的物理伤害", + "core.bonus.GENERAL_DAMAGE_REDUCTION.description.bonusSubtype.damageTypeMelee" : "{减少伤害(${val}%)}\n减少遭受的近战物理伤害${val}%", + "core.bonus.GENERAL_DAMAGE_REDUCTION.description.bonusSubtype.damageTypeRanged" : "{减少伤害(${val}%)}\n减少遭受的远程物理伤害${val}%", + "core.bonus.GENERAL_DAMAGE_REDUCTION.description": "{减少伤害(${val}%)}\n减少遭受的远程和近战物理伤害${val}%", "core.bonus.HATE.description": "{憎恨${subtype.creature}}\n对${subtype.creature}造成额外${val}%伤害", "core.bonus.HEALER.description": "{治疗者}\n可以治疗友军单位", "core.bonus.HP_REGENERATION.description": "{再生}\n每回合恢复${val}点生命值", "core.bonus.INVINCIBLE.description": "{无敌}\n不受任何效果影响", "core.bonus.JOUSTING.description": "{勇士冲锋}\n每移动一格 +${val}%伤害", - "core.bonus.KING.description": "{王牌}\n受${val}级或更高级屠戮成性影响", + "core.bonus.KING.description.2" : "{中级王牌}\n受中级屠戮成性法术影响的单位会对其造成额外伤害", + "core.bonus.KING.description.3" : "{高级王牌}\n受高级屠戮成性法术影响的单位会对其造成额外伤害", + "core.bonus.KING.description": "{王牌}\n受屠戮成性法术影响的单位会对其造成额外伤害", "core.bonus.LEVEL_SPELL_IMMUNITY.description": "{免疫1-${val}级魔法}\n免疫1-${val}级的魔法", "core.bonus.LIFE_DRAIN.description": "{吸取生命 (${val}%)}\n吸取${val}%伤害回复自身", "core.bonus.LIMITED_SHOOTING_RANGE.description": "{射程限制}\n无法瞄准${val}格以外的单位", @@ -694,7 +712,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water": "{水系免疫}\n此单位免疫所有水系魔法", "core.bonus.SPELL_SCHOOL_IMMUNITY.description": "{魔法免疫}\n此单位免疫所有魔法", "core.bonus.SUMMON_GUARDIANS.description": "{召唤守卫}\n战斗开始时召唤${subtype.creature}(${val}%)", - "core.bonus.SYNERGY_TARGET.description": "{协同攻击}\n生物受到协助攻击的影响", "core.bonus.THREE_HEADED_ATTACK.description": "{半环攻击}\n攻击三格邻接单位", "core.bonus.TRANSMUTATION.description": "{变形术}\n${val}%机会将被攻击单位变成其他生物", "core.bonus.TWO_HEX_ATTACK_BREATH.description": "{吐息}\n吐息攻击(2格范围)", @@ -722,5 +739,16 @@ "spell.core.strongholdMoat.name" : "栅栏", "spell.core.strongholdMoatTrigger.name" : "栅栏", "spell.core.summonDemons.name" : "召唤恶鬼", - "spell.core.towerMoat.name" : "埋设地雷" + "spell.core.towerMoat.name" : "埋设地雷", + + "spell.core.stoneGaze.description.none" : "{石化凝视}\n\n目标单位被石化,三回合内无法行动。当其被攻击时受到50%的伤害并解除石化效果。", + "spell.core.poison.description.none" : "{中毒}\n\n目标生物中毒时,它最大生命值每回合减少10%,持续三回合。三回合后中毒解除,但减少的最大生命值不会恢复。", + "spell.core.bind.description.none" : "{缠绕}\n\n目标单位被束缚在原地,无法移动,效果持续到束缚它的部队离开或死亡。", + "spell.core.disease.description.none" : "{染病}\n\n目标有生命的部队染上疾病,其攻击力和防御力减少两点,持续三回合。", + "spell.core.paralyze.description.none" : "{麻痹}\n\n目标单位被麻痹,在接下来的战斗中跳过它的当前回合和接下来的两个回合,受到攻击后解除。被麻痹的生物将会受到全额攻击伤害,但其反击只会造成四分之一的伤害。", + "spell.core.age.description.none" : "{老化}\n\n老化减少目标部队50%的最大生命值,持续三回合。", + "spell.core.deathCloud.description.none" : "{死亡之云}\n\n死亡之云除了对远程攻击的格子中的目标造成正常伤害之外,还会对相邻6个格子范围内的所有有生命的生物造成伤害。", + "spell.core.thunderbolt.description.none" : "{闪电攻击}\n\n此部队攻击时,有20%的几率在敌人反击前进行一次闪电打击。如触发,闪电打击将造成等同于10倍雷鸟攻击者数量的伤害。", + "spell.core.dispelHelpful.description.none" : "{驱散有益法术}\n\n移除目标单位上所有的有益法术效果", + "spell.core.acidBreath.description.none" : "{酸液攻击}\n\n龙息减少目标部队3点防御力,且有20%的几率造成额外伤害,每个攻击生物会造成25点额外伤害。" } diff --git a/Mods/vcmi/Content/config/czech.json b/Mods/vcmi/Content/config/czech.json index ee8175433..235c4f25c 100644 --- a/Mods/vcmi/Content/config/czech.json +++ b/Mods/vcmi/Content/config/czech.json @@ -345,6 +345,8 @@ "vcmi.adventureOptions.mapScrollSpeed6.help" : "Nastavit posouvání mapy na okamžité", "vcmi.adventureOptions.hideBackground.hover" : "Skrýt pozadí", "vcmi.adventureOptions.hideBackground.help" : "{Skrýt pozadí}\n\nSkryje mapu dobrodružství na pozadí a místo ní zobrazí texturu.", + "vcmi.adventureOptions.minimapShowHeroes.hover" : "Zobrazit hrdiny na minimapě", + "vcmi.adventureOptions.minimapShowHeroes.help" : "{Zobrazit hrdiny na minimapě}\n\nZobrazí dodatečnou ikonu pro všechny hrdiny viditelné na minimapě, aby byli lépe rozpoznatelní na velkých mapách", "vcmi.battleOptions.queueSizeLabel.hover" : "Zobrazit frontu pořadí tahů", "vcmi.battleOptions.queueSizeNoneButton.hover" : "VYPNUTO", @@ -632,6 +634,9 @@ "creatures.core.devil.bonus.decreaseLuck" : "{Snižuje štěstí nepřátel}\nĎáblové a arciďáblové snižují štěstí nepřátel o 1 bod", "creatures.core.boneDragon.bonus.decreaseMorale" : "{Snižuje morálku nepřátel}\nKostění a přizrační draci snižují morálku nepřátel o 1 bod", "creatures.core.marksman.bonus.extraAttack" : "{Střílí dvakrát}\nTato jednotka může vystřelit dvakrát za kolo", + "creatures.core.azureDragon.bonus.fearful" : "{Strach}\nVyvolává strach u nepřátelské jednotky", + "creatures.core.azureDragon.bonus.fearless" : "{Nebojácnost}\nImunní vůči schopnosti Strach", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Dvojitý útok}\nÚtočí dvakrát", // TODO: alternative descriptions for melee/ranged effect range "core.bonus.ADDITIONAL_RETALIATION.description" : "{Další odvetné útoky}\nMůže odvetně zaútočit ${val} krát navíc", @@ -652,8 +657,6 @@ "core.bonus.ENCHANTER.description" : "{Zaklínač}\nMůže každé kolo sesílat masové kouzlo ${subtype.spell}", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ignorování útoku (${val}%)}\nPři útoku je ignorováno ${val}% útočníkovy síly", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignorování obrany (${val}%)}\nPří útoku nebude bráno v potaz ${val}% bodů obrany obránce", - "core.bonus.FEAR.description" : "{Strach}\nVyvolává strach u nepřátelské jednotky", - "core.bonus.FEARLESS.description" : "{Nebojácnost}\nImunní vůči schopnosti Strach", "core.bonus.FEROCITY.description" : "{Zuřivost}\nÚtočí ${val} krát navíc, pokud někoho zabije", "core.bonus.FIRE_SHIELD.description" : "{Ohnivý štít (${val}%)}\nOdrazí část zranění při útoku z blízka", "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{První úder}\nJednotka zasazuje protiúder dříve, než je zasažena v boji na blízko", @@ -715,7 +718,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Imunita vůči kouzlům}\nJednotka je imunní vůči všem kouzlům.", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Vodní imunita}\nJednotka je imunní vůči všem kouzlům magie vody.", "core.bonus.SUMMON_GUARDIANS.description" : "{Přivolání ochránců}\nNa začátku bitvy přivolá ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Synergizovatelný}\nTato jednotka je náchylná k synergickým efektům", "core.bonus.THREE_HEADED_ATTACK.description" : "{Tříhlavý útok}\nÚtočí na tři sousední jednotky", "core.bonus.TRANSMUTATION.description" : "{Transmutace}\n${val}% šance na přeměnu napadené jednotky na jiný typ", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Dech}\nÚtok dechem (dosah 2 polí)", diff --git a/Mods/vcmi/Content/config/english.json b/Mods/vcmi/Content/config/english.json index 9480af6de..50f9e7fb8 100644 --- a/Mods/vcmi/Content/config/english.json +++ b/Mods/vcmi/Content/config/english.json @@ -634,6 +634,8 @@ "creatures.core.devil.bonus.decreaseLuck" : "{Reduces enemy luck}\nDevils and Archdevils reduce enemy luck by one", "creatures.core.boneDragon.bonus.decreaseMorale" : "{Reduces enemy morale}\nBone Dragons and Ghost Dragons lower the morale of enemy units by one", "creatures.core.marksman.bonus.extraAttack" : "{Shoots twice}\nThis unit can shoot twice", + "creatures.core.azureDragon.bonus.fearful" : "{Fear}\nEnemy units have a 10% chance of freezing in fear", + "creatures.core.azureDragon.bonus.fearless" : "{Fearless}\nImmune to Fear ability", "core.bonus.ADDITIONAL_ATTACK.description" : "{Additional attacks}\nUnit can attack an additional {$val} times", // TODO: alternative descriptions for melee/ranged effect range "core.bonus.ADDITIONAL_RETALIATION.description" : "{Additional retaliations}\nUnit can retaliate ${val} extra times", @@ -654,8 +656,6 @@ "core.bonus.ENCHANTER.description" : "{Enchanter}\nCan cast ${subtype.spell} every turn", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ignore Attack (${val}%) }\nWhen being attacked, ${val}% of the attacker's attack is ignored", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignore Defense (${val}%) }\nWhen attacking, ${val}% of the defender's defense is ignored", - "core.bonus.FEAR.description" : "{Fear}\nEnemy units have a 10% chance of freezing in fear", - "core.bonus.FEARLESS.description" : "{Fearless}\nImmune to Fear ability", "core.bonus.FEROCITY.description" : "{Ferocity}\nAttacks ${val} additional times if killed anybody", "core.bonus.FIRE_SHIELD.description" : "{Fire Shield (${val}%) }\nThe unit reflects ${val} of the melee damage received", "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{First Strike}\nThe unit retaliates before being attacked in melee", @@ -699,6 +699,7 @@ "core.bonus.REVENGE.description" : "{Revenge}\nDeals extra damage based on attacker's lost health in battle", "core.bonus.SHOOTER.description" : "{Shoots}\nThis unit can use its ammo to perform ranged attacks", "core.bonus.SHOOTS_ALL_ADJACENT.description" : "{Shoot all around}\nThis unit’s ranged attacks strike all targets in a small area", + "core.bonus.SKELETON_TRANSFORMER_TARGET.description" : "{Skeleton Transformation}\nThe Skeleton Transformer will turn this unit into a ${subtype.creature}", "core.bonus.SOUL_STEAL.description" : "{Soul Steal}\nGains ${val} new creatures for each enemy killed", "core.bonus.SPELL_AFTER_ATTACK.description" : "{Cast After Attack}\nHas a ${val}% chance to cast ${subtype.spell} after it attacks", "core.bonus.SPELL_BEFORE_ATTACK.description" : "{Cast Before Attack}\nHas a ${val}% chance to cast ${subtype.spell} before it attacks", @@ -717,7 +718,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.fire" : "{Immune to Fire Magic}\nImmune to all spells from the school of Fire Magic", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Immune to Water Magic}\nImmune to all spells from the school of Water Magic", "core.bonus.SUMMON_GUARDIANS.description" : "{Summon guardians}\nAt the start of battle summons ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Synergizable}\nThis creature is vulnerable to synergy effect", "core.bonus.THREE_HEADED_ATTACK.description" : "{Three-headed attack}\nAttacks three adjacent units", "core.bonus.TRANSMUTATION.description" : "{Transmutation}\n${val}% chance to transform attacked unit to a different type", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Breath Attack}\nAttacks by this unit will also hit any unit positioned immediately behind the target", diff --git a/Mods/vcmi/Content/config/french.json b/Mods/vcmi/Content/config/french.json index 7e5a67c18..ebbc63a9f 100644 --- a/Mods/vcmi/Content/config/french.json +++ b/Mods/vcmi/Content/config/french.json @@ -180,6 +180,9 @@ "vcmi.stackExperience.rank.8" : "Élite", "vcmi.stackExperience.rank.9" : "Maître", "vcmi.stackExperience.rank.10" : "As", + + "creatures.core.azureDragon.bonus.fearful" : "{Peur}\nProvoque la peur sur une pile ennemie", + "creatures.core.azureDragon.bonus.fearless" : "{Intrépide}\nImmunité à la peur", "core.bonus.ADDITIONAL_ATTACK.description": "{Double frappe}\nAttaque deux fois", "core.bonus.ADDITIONAL_RETALIATION.description": "{Représailles supplémentaires}\nPeut riposter ${val} fois de plus", @@ -198,8 +201,6 @@ "core.bonus.ENCHANTED.description": "{Enchanté}\nAffecté par ${subtype.spell} permanent", "core.bonus.ENCHANTER.description": "{Enchanteur}\nPeut lancer en masse ${subtype.spell} à chaque tour", "core.bonus.ENEMY_DEFENCE_REDUCTION.description": "{Ignorer la défense (${val}%)}\nLors de l'attaque, ${val}% de la défense du défenseur est ignorée", - "core.bonus.FEAR.description": "{Peur}\nProvoque la peur sur une pile ennemie", - "core.bonus.FEARLESS.description": "{Intrépide}\nImmunité à la peur", "core.bonus.FIRE_SHIELD.description": "{Bouclier de feu (${val}%)}\nReflète une partie des dégâts de mêlée", "core.bonus.FIRST_STRIKE.description": "{Premier coup}\nCette créature riposte avant d'être attaquée", "core.bonus.FLYING.description": "{Vol}\nVole en se déplaçant (ignore les obstacles)", @@ -240,7 +241,6 @@ "core.bonus.SPELL_LIKE_ATTACK.description": "{Attaque semblable à un sort}\nAttaque avec ${subtype.spell}", "core.bonus.SPELL_RESISTANCE_AURA.description": "{Aura de résistance}\nLes piles à proximité obtiennent ${val}% de résistance magique", "core.bonus.SUMMON_GUARDIANS.description": "{Invoquer des gardiens}\nAu début de la bataille, invoque ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description": "{Synergique}\nCette créature est vulnérable à l'effet de synergie", "core.bonus.THREE_HEADED_ATTACK.description": "{Attaque à trois têtes}\nAttaque trois unités adjacentes", "core.bonus.TRANSMUTATION.description": "{Transmutation}\n${val}% de chances de transformer l'unité attaquée en un type différent", "core.bonus.TWO_HEX_ATTACK_BREATH.description": "{Souffle}\nAttaque de souffle (portée de 2 hexagones)", diff --git a/Mods/vcmi/Content/config/german.json b/Mods/vcmi/Content/config/german.json index a5858f42d..a2f8bade1 100644 --- a/Mods/vcmi/Content/config/german.json +++ b/Mods/vcmi/Content/config/german.json @@ -619,6 +619,9 @@ "mapObject.core.hillFort.object.description" : "Aufwertungen von Kreaturen. Die Stufen 1 - 4 sind billiger als in der zugehörigen Stadt.", + "creatures.core.azureDragon.bonus.fearful" : "{Furcht}\nVerursacht Furcht bei einem gegnerischen Stapel", + "creatures.core.azureDragon.bonus.fearless" : "{Furchtlos}\nimmun gegen die Fähigkeit Furcht", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Doppelschlag}\nGreift zweimal an", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Zusätzliche Vergeltungsmaßnahmen}\nKann ${val} zusätzliche Male vergelten", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Rundum angreifen}\nGreift alle benachbarten Gegner an", @@ -638,8 +641,6 @@ "core.bonus.ENCHANTER.description" : "{Verzauberer}\nKann jede Runde eine Masse von ${subtype.spell} zaubern", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Angriff ignorieren (${val}%)}\nBei Angriff, wird ${val}% des Angreifers ignoriert.", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignoriere Verteidigung (${val}%)}\nIgnoriert einen Teil der Verteidigung für den Angriff", - "core.bonus.FEARLESS.description" : "{Furchtlos}\nimmun gegen die Fähigkeit Furcht", - "core.bonus.FEAR.description" : "{Furcht}\nVerursacht Furcht bei einem gegnerischen Stapel", "core.bonus.FEROCITY.description" : "{Wildheit}\nGreift ${val} zusätzliche Male an, wenn jemand getötet wird", "core.bonus.FIRE_SHIELD.description" : "{Feuerschild (${val}%)}\nReflektiert einen Teil des Nahkampfschadens", "core.bonus.FIRST_STRIKE.description" : "{Erstschlag}\nDiese Kreatur greift zuerst an, anstatt zu vergelten", @@ -694,7 +695,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Wasser-Immunität}\nImmunität gegen Zauber der Wasser-Schule", "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Zauber-Immunität}\nImmunität gegen alle Zauber-Schulen", "core.bonus.SUMMON_GUARDIANS.description" : "{Wächter beschwören}\nBeschwört bei Kampfbeginn ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Synergierbar}\nDiese Kreatur ist anfällig für Synergieeffekte", "core.bonus.THREE_HEADED_ATTACK.description" : "{Dreiköpfiger Angriff}\nGreift drei benachbarte Einheiten an", "core.bonus.TRANSMUTATION.description" : "{Transmutation}\n${val}% Chance, angegriffene Einheit in einen anderen Typ zu verwandeln", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Atem}\nAtem-Angriff (2-Hex-Bereich)", diff --git a/Mods/vcmi/Content/config/hungarian.json b/Mods/vcmi/Content/config/hungarian.json index 00eb5775b..5e4d53e8e 100644 --- a/Mods/vcmi/Content/config/hungarian.json +++ b/Mods/vcmi/Content/config/hungarian.json @@ -606,6 +606,9 @@ "mapObject.core.hillFort.object.description" : "Lények fejlesztése. Az 1-4. szint olcsóbb, mint az adott városban.", + "creatures.core.azureDragon.bonus.fearful" : "{Félelem}\nFélelmet kelt az ellenséges egységekben", + "creatures.core.azureDragon.bonus.fearless" : "{Félelem nélküli}\nImmunis a félelem képességre", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Dupla csapás}\nKétszer támad", "core.bonus.ADDITIONAL_RETALIATION.description" : "{További visszatámadások}\nMég ${val} alkalommal visszatámadhat", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Mindenirányú támadás}\nMinden szomszédos ellenséget támad", @@ -625,8 +628,6 @@ "core.bonus.ENCHANTER.description" : "{Varázsló}\nTömeges ${subtype.spell} varázslatot használ minden körben", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Támadás figyelmen kívül hagyása (${val}%)}\nTámadáskor az ellenség támadásának ${val}%-át figyelmen kívül hagyja", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Védelem figyelmen kívül hagyása (${val}%)}\nTámadáskor az ellenség védekezésének ${val}%-át figyelmen kívül hagyja", - "core.bonus.FEARLESS.description" : "{Félelem nélküli}\nImmunis a félelem képességre", - "core.bonus.FEAR.description" : "{Félelem}\nFélelmet kelt az ellenséges egységekben", "core.bonus.FEROCITY.description" : "{Vadság}\n${val} további alkalommal támad, ha bárkit megölt", "core.bonus.FIRE_SHIELD.description" : "{Tűzpajzs (${val}%)}\nVisszaver egy részét a közelharci sebzésnek", "core.bonus.FIRST_STRIKE.description" : "{Első csapás}\nEz a lény még a támadás előtt visszatámad", @@ -681,7 +682,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Varázslatimmunitás}\nEz az egység immunis minden varázslattal szemben", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Víz immunitás}\nEz az egység immunis minden víz mágia iskolájához tartozó varázslattal szemben", "core.bonus.SUMMON_GUARDIANS.description" : "{Őrök idézése}\nA csata kezdetén idézi a(z) ${subtype.creature} lényeket (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Szinkronizálható}\nEz a lény érzékeny a szinergiahatásokra", "core.bonus.THREE_HEADED_ATTACK.description" : "{Háromfejű támadás}\nHárom szomszédos egységet támad", "core.bonus.TRANSMUTATION.description" : "{Átalakítás}\n${val}% eséllyel az ellenfelet más egységtípussá alakítja", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Lélegzet}\nLélegzési támadás (2 hatszögnyi távolság)", diff --git a/Mods/vcmi/Content/config/italian.json b/Mods/vcmi/Content/config/italian.json index 359bf965c..120c5f135 100644 --- a/Mods/vcmi/Content/config/italian.json +++ b/Mods/vcmi/Content/config/italian.json @@ -607,6 +607,9 @@ "mapObject.core.hillFort.object.description" : "Aggiorna le creature. I livelli 1 - 4 sono meno costosi rispetto alla città associata.", + "creatures.core.azureDragon.bonus.fearful" : "{Paura}\nProvoca paura su una pila nemica", + "creatures.core.azureDragon.bonus.fearless" : "{Impavido}\nImmune all'abilità Paura", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Doppio colpo}\nAttacca due volte", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Ritorsioni aggiuntive}\nPuò contrattaccare ${val} volte in più", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Attacco a 360°}\nAttacca tutti i nemici adiacenti", @@ -626,8 +629,6 @@ "core.bonus.ENCHANTER.description" : "{Incantatore}\nPuò lanciare l'incantesimo ${subtype.spell} ogni turno", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ignora attacco (${val}%)}\nQuando viene attaccata, ignora il ${val}% dell'attacco dell'avversario", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignora difesa (${val}%)}\nQuando attacca, ignora il ${val}% della difesa dell'avversario", - "core.bonus.FEARLESS.description" : "{Impavido}\nImmune all'abilità Paura", - "core.bonus.FEAR.description" : "{Paura}\nProvoca paura su una pila nemica", "core.bonus.FEROCITY.description" : "{Ferocia}\nAttacca ${val} volte aggiuntive se uccide qualcuno", "core.bonus.FIRE_SHIELD.description" : "{Scudo di fuoco (${val}%)}\nRiflette una parte dei danni da mischia", "core.bonus.FIRST_STRIKE.description" : "{Primo colpo}\nQuesta creatura contrattacca prima di essere attaccata", @@ -682,7 +683,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Immunità agli incantesimi}\nQuesta unità è immune a tutti gli incantesimi", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Immunità all'acqua}\nQuesta unità è immune a tutti gli incantesimi della scuola dell'Acqua", "core.bonus.SUMMON_GUARDIANS.description" : "{Evoca guardiani}\nAll'inizio della battaglia evoca ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Sinergizzabile}\nQuesta creatura è vulnerabile all'effetto sinergico", "core.bonus.THREE_HEADED_ATTACK.description" : "{Attacco a tre teste}\nAttacca tre unità adiacenti", "core.bonus.TRANSMUTATION.description" : "{Trasmutazione}\n${val}% di possibilità di trasformare l'unità attaccata in un altro tipo", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Soffio}\nAttacco a soffio (raggio di 2 esagoni)", diff --git a/Mods/vcmi/Content/config/polish.json b/Mods/vcmi/Content/config/polish.json index 441cbcbce..1e7c7f5df 100644 --- a/Mods/vcmi/Content/config/polish.json +++ b/Mods/vcmi/Content/config/polish.json @@ -629,6 +629,9 @@ "mapObject.core.hillFort.object.description" : "Ulepsza jednostki. Koszt ulepszenia dla poziomów 1 - 4 jest bardziej korzystny niż w mieście.", + "creatures.core.azureDragon.bonus.fearful" : "{Strach}\nWzbudza strach na wrogim stworzeniu", + "creatures.core.azureDragon.bonus.fearless" : "{Nieustraszony}\nOdporny na strach", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Podwójne Uderzenie}\nAtakuje dwa razy", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Dodatkowy odwet}\n${val} dodatkowy kontratak", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Obrotowy atak}\nAtakuje wszystkich sąsiadujących wrogów", @@ -648,8 +651,6 @@ "core.bonus.ENCHANTER.description" : "{Czarodziej}\nRzuca czar ${subtype.spell}", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ignoruje Atak (${val}%)}\nPrzy zostaniu zaatakowanym ignoruje ${val}% ataku wroga", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Osłabienie Obrony (${val}%)}\nOsłabia obronę wroga podczas ataku", - "core.bonus.FEARLESS.description" : "{Nieustraszony}\nOdporny na strach", - "core.bonus.FEAR.description" : "{Strach}\nWzbudza strach na wrogim stworzeniu", "core.bonus.FEROCITY.description" : "{Dzikość}\nDodatkowe ${val} ataków jeżeli zabito kogokolwiek", "core.bonus.FIRE_SHIELD.description" : "{Ognista tarcza (${val}%)}\nOdbija część obrażeń z walki wręcz", "core.bonus.FIRST_STRIKE.description" : "{Pierwsze Uderzenie}\nTo stworzenie atakuje pierwsze w ramach kontrataku", @@ -695,7 +696,6 @@ "core.bonus.SPELL_LIKE_ATTACK.description" : "{Atak czaropodobny}\nAtakuje z użyciem ${subtype.spell}", "core.bonus.SPELL_RESISTANCE_AURA.description" : "{O ${val}% słabszy}\nefekt czarów dla pobl. stwor.", "core.bonus.SUMMON_GUARDIANS.description" : "{Wzywa na początku walki}\n${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Synergiczny}\nTo stworzenie jest podatne na efekt synergii", "core.bonus.THREE_HEADED_ATTACK.description" : "{Atak trzema głowami}\nAtakuje trzy sąsiadujące jednostki", "core.bonus.TRANSMUTATION.description" : "{Transmutacja}\n${val}% szans aby przetransformować atakowaną jednostkę na inny typ", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Zionięcie}\nAtak zionący (zasięg 2 heksów)", diff --git a/Mods/vcmi/Content/config/portuguese.json b/Mods/vcmi/Content/config/portuguese.json index 8b053b219..8f5f72386 100644 --- a/Mods/vcmi/Content/config/portuguese.json +++ b/Mods/vcmi/Content/config/portuguese.json @@ -632,6 +632,8 @@ "creatures.core.devil.bonus.decreaseLuck" : "{Reduz a sorte do inimigo}\nDiabos e Arquidiabos reduzem a sorte do inimigo em um", "creatures.core.boneDragon.bonus.decreaseMorale" : "{Reduz a moral do inimigo}\nDragões Esqueletos e Dragões Fantasmas diminuem a moral das unidades inimigas em um", "creatures.core.marksman.bonus.extraAttack" : "{Atira duas vezes}\nEsta unidade pode atirar duas vezes", + "creatures.core.azureDragon.bonus.fearful" : "{Medo}\nCausa Medo em uma pilha inimiga", + "creatures.core.azureDragon.bonus.fearless" : "{Destemido}\nImune à habilidade de Medo", "core.bonus.ADDITIONAL_ATTACK.description" : "{Ataque Duplo}\nAtaca duas vezes", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Contra-ataques Adicionais}\nPode contra-atacar ${val} vezes extras", @@ -652,8 +654,6 @@ "core.bonus.ENCHANTER.description" : "{Encantador}\nPode lançar ${subtype.spell} em massa a cada turno", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ignorar Ataque (${val}%)}\nAo ser atacado, ${val}% do ataque do agressor é ignorado", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ignorar Defesa (${val}%)}\nAo atacar, ${val}% da defesa do defensor é ignorada", - "core.bonus.FEAR.description" : "{Medo}\nCausa Medo em uma pilha inimiga", - "core.bonus.FEARLESS.description" : "{Destemido}\nImune à habilidade de Medo", "core.bonus.FEROCITY.description" : "{Ferocidade}\nAtaca ${val} vezes adicionais se matar alguém", "core.bonus.FIRE_SHIELD.description" : "{Escudo de Fogo (${val}%)}\nReflete parte do dano corpo a corpo", "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{Primeiro Ataque}\nA unidade contra-atacará antes de ser atacada em combate corpo a corpo", @@ -715,7 +715,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Imunidade a Feitiços}\nEsta unidade é imune a todos os feitiços", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Imunidade a Água}\nEsta unidade é imune a todos os feitiços da escola de Água", "core.bonus.SUMMON_GUARDIANS.description" : "{Invocar Guardas}\nNo início da batalha, invoca ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Alvo Sinergético}\nEsta criatura é vulnerável ao efeito de sinergia", "core.bonus.THREE_HEADED_ATTACK.description" : "{Ataque das Três Cabeças}\nAtaca três unidades adjacentes", "core.bonus.TRANSMUTATION.description" : "{Transmutação}\n${val}% de chance de transformar a unidade atacada em um tipo diferente", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Sopro}\nAtaque de Sopro (alcança 2 hexágonos)", diff --git a/Mods/vcmi/Content/config/russian.json b/Mods/vcmi/Content/config/russian.json index 46b3f3f2c..25973af2e 100644 --- a/Mods/vcmi/Content/config/russian.json +++ b/Mods/vcmi/Content/config/russian.json @@ -623,8 +623,12 @@ "core.seerhut.quest.reachDate.visit.3" : "Закрыто до %s.", "core.seerhut.quest.reachDate.visit.4" : "Закрыто до %s.", "core.seerhut.quest.reachDate.visit.5" : "Закрыто до %s.", + "mapObject.core.hillFort.object.description" : "Улучшить существ. Уровни 1-4 стоят дешевле, чем в соответствующем городе.", + "creatures.core.azureDragon.bonus.fearful" : "{Страх}\nЗаставляет вражеских существ цепенеть от страха", + "creatures.core.azureDragon.bonus.fearless" : "{Бесстрашный}\nИммунитет к страху", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Двойной удар}\nБьет дважды", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Дополнительные ответные атаки}\nОтвечает на атаку дополнительно ${val} раз", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Атака вокруг}\nАтакует все окружающие отряды", @@ -644,8 +648,6 @@ "core.bonus.ENCHANTER.description" : "{Заклинатель (массовое)}\nМожет применять массовое ${subtype.spell} каждый ход", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Игнорирует атаку (${val}%)}\nПри атаке ${val}%, атаки атакующего игнорируются", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Игнорирует броню (${val}%)}\nИгнорирует часть Защиты при атаке", - "core.bonus.FEARLESS.description" : "{Бесстрашный}\nИммунитет к страху", - "core.bonus.FEAR.description" : "{Страх}\nЗаставляет вражеских существ цепенеть от страха", "core.bonus.FEROCITY.description" : "{Свирепость}\nАтакует дополнительно ${val} раз, если кого-то убивает", "core.bonus.FIRE_SHIELD.description" : "{Огненный щит (${val}%)}\nНаносит огнем часть полученного урона", "core.bonus.FIRST_STRIKE.description" : "{Первый удар}\nСущество бьет первым даже при ответной атаке", @@ -700,7 +702,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.fire" : "{Иммунитет к Огню}\nОтряд невосприимчив ко всем заклинаниям школы Огня", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Иммунитет к Воде}\nОтряд невосприимчив ко всем заклинаниям школы Воды", "core.bonus.SUMMON_GUARDIANS.description" : "{Призыв стражей}\nВ начале битвы призывает ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Синергия}\nСущество уязвимо к эффектам синергии", "core.bonus.THREE_HEADED_ATTACK.description" : "{Трехсторонняя атака}\nАтака трех отрядов с передней стороны", "core.bonus.TRANSMUTATION.description" : "{Трансмутатор}\nШанс ${val}% превратить атакующий отряд в отряд другого типа", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Дыхание}\nАтака дыханием (радиус в 2 гекса)", diff --git a/Mods/vcmi/Content/config/spanish.json b/Mods/vcmi/Content/config/spanish.json index d6f09ce1b..7749be28b 100644 --- a/Mods/vcmi/Content/config/spanish.json +++ b/Mods/vcmi/Content/config/spanish.json @@ -337,6 +337,9 @@ "vcmi.stackExperience.rank.9" : "Maestro", "vcmi.stackExperience.rank.10" : "As", + "creatures.core.azureDragon.bonus.fearful" : "{Miedo}\nCausa miedo a un grupo enemigo", + "creatures.core.azureDragon.bonus.fearless" : "{Inmune al miedo}\nInmune a la habilidad de miedo", + "core.bonus.ADDITIONAL_ATTACK.description": "{Doble Ataque}\nAtaca dos veces", "core.bonus.ADDITIONAL_RETALIATION.description": "{Contrataques adicionales}\nPuede contratacar ${val} veces adicionales", "core.bonus.ATTACKS_ALL_ADJACENT.description": "{Ataque en todas las direcciones}\nAtaca a todos los enemigos adyacentes", @@ -355,8 +358,6 @@ "core.bonus.ENCHANTER.description": "{Encantador}\nPuede lanzar ${subtype.spell} masivo cada turno", "core.bonus.ENEMY_ATTACK_REDUCTION.description": "{Ignorar ataque (${val}%)}\nAl ser atacado, ${val}% del daño del atacante es ignorado", "core.bonus.ENEMY_DEFENCE_REDUCTION.description": "{Ignorar Defensa (${val}%)}\nIgnora una parte de la defensa al atacar", - "core.bonus.FEAR.description": "{Miedo}\nCausa miedo a un grupo enemigo", - "core.bonus.FEARLESS.description": "{Inmune al miedo}\nInmune a la habilidad de miedo", "core.bonus.FEROCITY.description": "{Ferocidad}\nAtaca ${val} veces adicionales en caso de eliminar a alguien", "core.bonus.FIRE_SHIELD.description": "{Escudo de Fuego (${val}%)}\nRefleja una parte del daño cuerpo a cuerpo", "core.bonus.FIRST_STRIKE.description": "{Primer Ataque}\nEsta criatura ataca primero en lugar de contratacar", @@ -399,7 +400,6 @@ "core.bonus.SPELL_LIKE_ATTACK.description": "{Ataque similar a hechizo}\nAtaca con ${subtype.spell}", "core.bonus.SPELL_RESISTANCE_AURA.description": "{Aura de resistencia}\nLas unidades cercanas obtienen una resistencia mágica del ${val}%", "core.bonus.SUMMON_GUARDIANS.description": "{Invocar guardianes}\nAl comienzo de la batalla invoca ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description": "{Sinergia}\nEsta criatura es vulnerable al efecto de sinergia", "core.bonus.THREE_HEADED_ATTACK.description": "{Ataque de tres cabezas}\nAtaca a tres unidades adyacentes", "core.bonus.TRANSMUTATION.description": "{Transmutación}\n${val}% de probabilidad de transformar la unidad atacada en otro tipo", "core.bonus.TWO_HEX_ATTACK_BREATH.description": "{Aliento}\nAtaque de aliento (rango de 2 hexágonos)", diff --git a/Mods/vcmi/Content/config/swedish.json b/Mods/vcmi/Content/config/swedish.json index 20a00a1c8..e80338936 100644 --- a/Mods/vcmi/Content/config/swedish.json +++ b/Mods/vcmi/Content/config/swedish.json @@ -345,6 +345,8 @@ "vcmi.adventureOptions.mapScrollSpeed6.help" : "Ställ in kartans rullningshastighet till 'Omedelbar'.", "vcmi.adventureOptions.hideBackground.hover" : "Dölj bakgrund", "vcmi.adventureOptions.hideBackground.help" : "{Dölj bakgrund}\n\nDöljer äventyrskartan i bakgrunden och visar en textur istället.", + "vcmi.adventureOptions.minimapShowHeroes.hover" : "Visa hjältar på minikartan", + "vcmi.adventureOptions.minimapShowHeroes.help" : "{Visa hjältar på minikartan}\n\nVisa en extra ikon för alla hjältar på minikartan för att göra dem lättare att urskilja på stora kartor.", "vcmi.battleOptions.queueSizeLabel.hover" : "Visa turordningskö", "vcmi.battleOptions.queueSizeNoneButton.hover" : "AV", @@ -632,6 +634,8 @@ "creatures.core.devil.bonus.decreaseLuck" : "{Minskar fiendens lycka}\nDjävular och ärkedjävular minskar fiendens lycka med en poäng.", "creatures.core.boneDragon.bonus.decreaseMorale" : "{Minskar fiendens moral}\nBen- och spökdrakar minskar fiendens moral med en poäng.", "creatures.core.marksman.bonus.extraAttack" : "{Skjuter två gånger}\nDenna enhet kan skjuta två gånger per runda.", + "creatures.core.azureDragon.bonus.fearful" : "{Rädsla}\nOrsakar rädsla på ett fiendeförband", + "creatures.core.azureDragon.bonus.fearless" : "{Orädd}\nImmun mot rädsla.", "core.bonus.ADDITIONAL_ATTACK.description" : "{Dubbelslag}\nAttackerar två gånger.", // Att göra: separata beskrivningar för närstrid/fjärrstrid "core.bonus.ADDITIONAL_RETALIATION.description" : "{Ytterligare motattacker}\nKan slå tillbaka ${val} extra gång(er).", @@ -652,8 +656,6 @@ "core.bonus.ENCHANTER.description" : "{Förtrollare}\nKastar mass-${subtype.spell} varje turomgång.", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Avfärda attack (${val}%)}\nIgnorerar ${val}% av angriparens attack.", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Förbigå försvar (${val}%)}\nAttacker ignorerar ${val}% av fiendens försvar.", - "core.bonus.FEAR.description" : "{Rädsla}\nOrsakar rädsla på ett fiendeförband.", - "core.bonus.FEARLESS.description" : "{Orädd}\nImmun mot rädsla.", "core.bonus.FEROCITY.description" : "{Vildsint}\n+${val} extra attack(er) om någon dödas.", "core.bonus.FIRE_SHIELD.description" : "{Eldsköld (${val}%)}\nReflekterar en del av närstridsskadorna.", "core.bonus.FIRST_STRIKE.description.bonusSubtype.damageTypeMelee" : "{Första slaget}\nRetalierar innan den träffas i närstrid.", @@ -715,7 +717,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Immun mot all magi}\nEnheten är helt immun mot all magi.", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Immun mot vattenmagi}\nEnheten är helt immun mot all vattenmagi.", "core.bonus.SUMMON_GUARDIANS.description" : "{Åkalla väktare}\nVid strid åkallas: ${subtype.creature} ${val}%.", - "core.bonus.SYNERGY_TARGET.description" : "{Synergibar}\nDenna varelse är sårbar för synergieffekt.", "core.bonus.THREE_HEADED_ATTACK.description" : "{Trehövdad attack}\nAttackerar upp till tre enheter framför sig.", "core.bonus.TRANSMUTATION.description" : "{Transmutation}\n${val}% chans att förvandla angripen enhet.", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Dödlig andedräkt}\nAndningsattack (2 rutors räckvidd).", diff --git a/Mods/vcmi/Content/config/ukrainian.json b/Mods/vcmi/Content/config/ukrainian.json index 8daefac5f..9f0503761 100644 --- a/Mods/vcmi/Content/config/ukrainian.json +++ b/Mods/vcmi/Content/config/ukrainian.json @@ -624,6 +624,8 @@ "creatures.core.devil.bonus.decreaseLuck" : "{Зменшує ворожу удачу}\nДияволи та Архідияволи зменшують удачу ворога на одиницю", "creatures.core.boneDragon.bonus.decreaseMorale" : "{Знижує ворожий бойовий дух}\nКістяні і Примарні дракони знижують бойовий дух ворожих загонів на одиницю", "creatures.core.marksman.bonus.extraAttack" : "{Стріляє двічі}\nЦей загін може стріляти двічі", + "creatures.core.azureDragon.bonus.fearful" : "{Страх}\nВорожі загони мають 10% шанс завмерти від страху", + "creatures.core.azureDragon.bonus.fearless" : "{Безстрашний}\nІмунітет до страху", "core.bonus.ADDITIONAL_ATTACK.description" : "{Додаткові удари}\nАтакує двічі", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Додаткові відплати}\nЗагін може нанести ${val} додаткових ударів у відповідь", @@ -644,8 +646,6 @@ "core.bonus.ENCHANTER.description" : "{Чарівник}\nМоже застосовувати закляття ${subtype.spell} кожного ходу", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Ігнорує ${val}% атаки}\nПри нападі ігнорується ${val}% атаки нападника", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Ігнорує ${val}% захисту}\nПри атаці ігнорується ${val}% захисту суперника", - "core.bonus.FEAR.description" : "{Страх}\nВорожі загони мають 10% шанс завмерти від страху", - "core.bonus.FEARLESS.description" : "{Безстрашний}\nІмунітет до страху", "core.bonus.FEROCITY.description" : "{Лютість}\nЯкщо цей загін вбиває когось, то атакує ${val} разів додатково", "core.bonus.FIRE_SHIELD.description" : "{Вогняний щит (${val}%) }\nЗагін повертає ${val} отриманої шкоди від ближнього бою назад атакуючому", "core.bonus.FIRST_STRIKE.description" : "{Перший удар}\nЗагін завдає удару у відповідь до того, як його атакують", @@ -689,6 +689,7 @@ "core.bonus.REVENGE.description" : "{Помста}\nЗавдає додаткової шкоди залежно від втраченого здоров'я в бою", "core.bonus.SHOOTER.description" : "{Стрілок}\nЦей загін використовує боєприпаси для ведення дальніх атак", "core.bonus.SHOOTS_ALL_ADJACENT.description" : "{Стріляйте по площі}\nДальні атаки цієї істоти вражають всі цілі на невеликій площі", + "core.bonus.SKELETON_TRANSFORMER_TARGET.description" : "{Перетворення у скелет}\nМашина скелетів перетворить цей загін на загін ${subtype.creature}", "core.bonus.SOUL_STEAL.description" : "{Викрадення душ}\nОтримує ${val} нових істот за кожного вбитого ворога", "core.bonus.SPELL_AFTER_ATTACK.description" : "{Закляття після атаки}\nЗастосовує ${subtype.spell} з вірогідністю ${val}% після атаки", "core.bonus.SPELL_BEFORE_ATTACK.description" : "{Закляття перед атакою}\nЗастосовує ${subtype.spell} з вірогідністю ${val}% перед атакою", @@ -707,7 +708,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.fire" : "{Імунітет до Вогню}\nНа цей загін не діють жодні закляття школи Вогню", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Імунітет до Води}\nНа цей загін не діють жодні закляття школи Води", "core.bonus.SUMMON_GUARDIANS.description" : "{Закликає охоронців}\nНа початку бою викликає ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Синергізм}\nЦя істота вразлива до ефекту синергії", "core.bonus.THREE_HEADED_ATTACK.description" : "{Триголова атака}\nАтакує до трьох сусідніх загонів", "core.bonus.TRANSMUTATION.description" : "{Трансмутація}\n${val}% шанс перетворити атакованого юніта в інший тип", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Атака подихом}\nАтаки цього загону також вражатимуть загін, розташований позаду цілі", diff --git a/Mods/vcmi/Content/config/vietnamese.json b/Mods/vcmi/Content/config/vietnamese.json index bc745d735..641cb7481 100644 --- a/Mods/vcmi/Content/config/vietnamese.json +++ b/Mods/vcmi/Content/config/vietnamese.json @@ -605,6 +605,9 @@ "mapObject.core.hillFort.object.description" : "Nâng cấp quân cấp 1 - 4 với chi phí thấp hơn ở trong thành.", + "creatures.core.azureDragon.bonus.fearful" : "{Sợ hãi}\nGây sợ hãi cho một đạo quân địch", + "creatures.core.azureDragon.bonus.fearless" : "{Không sợ}\nKháng lại kỹ năng gây sợ hãi", + "core.bonus.ADDITIONAL_ATTACK.description" : "{Đánh 2 lần}\nTấn công hai lần", "core.bonus.ADDITIONAL_RETALIATION.description" : "{Phản đòn thêm}\nCó thể phàn đòn thêm ${val} lần", "core.bonus.ATTACKS_ALL_ADJACENT.description" : "{Đánh xung quanh}\nTấn công tất cả kẻ địch xung quanh", @@ -624,8 +627,6 @@ "core.bonus.ENCHANTER.description" : "{Niệm phép}\nCó thể dùng phép mass ${subtype.spell} mỗi lượt", "core.bonus.ENEMY_ATTACK_REDUCTION.description" : "{Giảm tấn công (${val}%)}\nKhi bị tấn công, giảm ${val}% tấn công của kẻ địch", "core.bonus.ENEMY_DEFENCE_REDUCTION.description" : "{Giảm phòng thủ (${val}%)}\nKhi tấn công, giảm ${val}% phòng thủ của kẻ địch", - "core.bonus.FEARLESS.description" : "{Không sợ}\nKháng lại kỹ năng gây sợ hãi", - "core.bonus.FEAR.description" : "{Sợ hãi}\nGây sợ hãi cho một đạo quân địch", "core.bonus.FEROCITY.description" : "{Hung ác}\nTấn công thêm ${val} lần nữa nếu giết chết kẻ địch", "core.bonus.FIRE_SHIELD.description" : "{Khiên lửa (${val}%)}\nPhản lại một phần sát thương khi cận chiến", "core.bonus.FIRST_STRIKE.description" : "{Đòn đánh phủ đầu}\nĐạo quân này phản đòn trước khi bị tấn công", @@ -680,7 +681,6 @@ "core.bonus.SPELL_SCHOOL_IMMUNITY.description" : "{Kháng phép}\nĐơn vị này kháng tất cả phép thuật", "core.bonus.SPELL_SCHOOL_IMMUNITY.description.spellSchool.water" : "{Kháng phép nước}\nĐơn vị này kháng tất cả phép nước", "core.bonus.SUMMON_GUARDIANS.description" : "{Gọi bảo vệ}\nKhi bắt đầu trận sẽ triệu hồi ${subtype.creature} (${val}%)", - "core.bonus.SYNERGY_TARGET.description" : "{Hợp lực}\nQuân này dễ bị ảnh hưởng bởi nhiều hiệu ứng", "core.bonus.THREE_HEADED_ATTACK.description" : "{Ba đầu}\nTấn công cả quân liền kề mục tiêu", "core.bonus.TRANSMUTATION.description" : "{Biến đổi}\nCó ${val}% cơ hội biến đổi quân mục tiêu thành dạng khác", "core.bonus.TWO_HEX_ATTACK_BREATH.description" : "{Đánh hai ô}\nTấn công bằng hơi thở (xuyên 2 ô)", diff --git a/client/CPlayerInterface.cpp b/client/CPlayerInterface.cpp index a99cfcb94..49a14a5cd 100644 --- a/client/CPlayerInterface.cpp +++ b/client/CPlayerInterface.cpp @@ -892,7 +892,7 @@ void CPlayerInterface::battleTriggerEffect(const BattleID & battleID, const Batt battleInt->effectsController->battleTriggerEffect(bte); - if(bte.effect == vstd::to_underlying(BonusType::MANA_DRAIN)) + if(bte.effect == BonusType::MANA_DRAIN) { const CGHeroInstance * manaDrainedHero = GAME->interface()->cb->getHero(ObjectInstanceID(bte.additionalInfo)); battleInt->windowObject->heroManaPointsChanged(manaDrainedHero); diff --git a/client/NetPacksClient.cpp b/client/NetPacksClient.cpp index 1795d5a76..f1c625d48 100644 --- a/client/NetPacksClient.cpp +++ b/client/NetPacksClient.cpp @@ -40,6 +40,7 @@ #include "../lib/CSoundBase.h" #include "../lib/StartInfo.h" #include "../lib/CConfigHandler.h" +#include "../lib/mapObjects/MiscObjects.h" #include "../lib/mapObjects/CGMarket.h" #include "../lib/mapObjects/CGTownInstance.h" #include "../lib/gameState/CGameState.h" @@ -478,8 +479,11 @@ void ApplyClientNetPackVisitor::visitRemoveBonus(RemoveBonus & pack) void ApplyFirstClientNetPackVisitor::visitRemoveObject(RemoveObject & pack) { const CGObjectInstance *o = cl.gameInfo().getObj(pack.objectID); + const auto * h = dynamic_cast(o); GAME->map().onObjectFadeOut(o, pack.initiator); + if (h && h->inBoat()) + GAME->map().onObjectFadeOut(h->getBoat(), pack.initiator); //notify interfaces about removal for(auto i=cl.playerint.begin(); i!=cl.playerint.end(); i++) @@ -487,7 +491,11 @@ void ApplyFirstClientNetPackVisitor::visitRemoveObject(RemoveObject & pack) //below line contains little cheat for AI so it will be aware of deletion of enemy heroes that moved or got re-covered by FoW //TODO: loose requirements as next AI related crashes appear, for example another pack.player collects object that got re-covered by FoW, unsure if AI code workarounds this if(gs.isVisibleFor(o, i->first) || (!cl.gameInfo().getPlayerState(i->first)->human && o->ID == Obj::HERO && o->tempOwner != i->first)) + { i->second->objectRemoved(o, pack.initiator); + if (h && h->inBoat()) + i->second->objectRemoved(h->getBoat(), pack.initiator); + } } GAME->map().waitForOngoingAnimations(); @@ -509,6 +517,7 @@ void ApplyFirstClientNetPackVisitor::visitTryMoveHero(TryMoveHero & pack) { case TryMoveHero::EMBARK: GAME->map().onBeforeHeroEmbark(h, pack.start, pack.end); + GAME->map().waitForOngoingAnimations(); // required - hero must play fade-out animation on his pre-embark position break; case TryMoveHero::TELEPORTATION: GAME->map().onBeforeHeroTeleported(h, pack.start, pack.end); diff --git a/client/adventureMap/CMinimap.cpp b/client/adventureMap/CMinimap.cpp index fb621a342..df1e38de4 100644 --- a/client/adventureMap/CMinimap.cpp +++ b/client/adventureMap/CMinimap.cpp @@ -49,6 +49,9 @@ ColorRGBA CMinimapInstance::getTileColor(const int3 & pos) const if(player == PlayerColor::NEUTRAL) return graphics->neutralColor; + if (settings["adventure"]["minimapShowHeroes"].Bool() && obj->ID == MapObjectID::HERO) + continue; + if (player.isValidPlayer()) return graphics->playerColors[player.getNum()]; } @@ -134,8 +137,8 @@ Point CMinimap::tileToPixels(const int3 &tile) const double stepX = static_cast(pos.w) / mapSizes.x; double stepY = static_cast(pos.h) / mapSizes.y; - int x = static_cast(stepX * tile.x); - int y = static_cast(stepY * tile.y); + int x = static_cast(stepX * (tile.x + 0.5)); + int y = static_cast(stepY * (tile.y + 0.5)); return Point(x,y); } diff --git a/client/battle/BattleEffectsController.cpp b/client/battle/BattleEffectsController.cpp index 50f6024cf..dc748946b 100644 --- a/client/battle/BattleEffectsController.cpp +++ b/client/battle/BattleEffectsController.cpp @@ -66,7 +66,7 @@ void BattleEffectsController::battleTriggerEffect(const BattleTriggerEffect & bt return; } //don't show animation when no HP is regenerated - switch(static_cast(bte.effect)) + switch(bte.effect) { case BonusType::HP_REGENERATION: displayEffect(EBattleEffect::REGENERATION, AudioPath::builtin("REGENER"), stack->getPosition(), 0.5); @@ -77,7 +77,7 @@ void BattleEffectsController::battleTriggerEffect(const BattleTriggerEffect & bt case BonusType::POISON: displayEffect(EBattleEffect::POISON, AudioPath::builtin("POISON"), stack->getPosition()); break; - case BonusType::FEAR: + case BonusType::FEARFUL: displayEffect(EBattleEffect::FEAR, AudioPath::builtin("FEAR"), stack->getPosition(), 0.5); break; case BonusType::MORALE: diff --git a/client/battle/BattleStacksController.cpp b/client/battle/BattleStacksController.cpp index 555d267cc..1536bfe79 100644 --- a/client/battle/BattleStacksController.cpp +++ b/client/battle/BattleStacksController.cpp @@ -442,7 +442,9 @@ void BattleStacksController::stacksAreAttacked(std::vector at // FIXME: this check is better, however not usable since stacksAreAttacked is called after net pack is applied - petrification is already removed // if (needsReverse && !attackedInfo.defender->isFrozen()) - if (needsReverse && stackAnimation[attackedInfo.defender->unitId()]->getType() != ECreatureAnimType::FROZEN) + if (needsReverse && + stackAnimation[attackedInfo.defender->unitId()]->getType() != ECreatureAnimType::FROZEN && + !attackedInfo.defender->hasBonusOfType(BonusType::VULNERABLE_FROM_BACK)) { owner.addToAnimationStage(EAnimationEvents::MOVEMENT, [this, attackedInfo]() { diff --git a/client/lobby/CBonusSelection.cpp b/client/lobby/CBonusSelection.cpp index 893eea0fe..ba9f5b900 100644 --- a/client/lobby/CBonusSelection.cpp +++ b/client/lobby/CBonusSelection.cpp @@ -46,18 +46,20 @@ #include "../../lib/GameLibrary.h" #include "../../lib/StartInfo.h" #include "../../lib/campaign/CampaignState.h" +#include "../../lib/entities/artifact/CArtifact.h" #include "../../lib/entities/building/CBuilding.h" -#include "../../lib/entities/building/CBuildingHandler.h" #include "../../lib/entities/faction/CFaction.h" #include "../../lib/entities/faction/CTown.h" #include "../../lib/entities/faction/CTownHandler.h" #include "../../lib/entities/hero/CHeroHandler.h" +#include "../../lib/spells/CSpellHandler.h" #include "../../lib/filesystem/Filesystem.h" #include "../../lib/mapObjects/CGHeroInstance.h" #include "../../lib/mapping/CMapHeader.h" #include "../../lib/mapping/CMapInfo.h" #include "../../lib/mapping/CMapService.h" #include "../../lib/texts/CGeneralTextHandler.h" +#include "mapping/MapFormatSettings.h" std::shared_ptr CBonusSelection::getCampaign() { @@ -173,149 +175,196 @@ void CBonusSelection::createBonusesIcons() for(int i = 0; i < bonDescs.size(); i++) { - int bonusType = static_cast(bonDescs[i].type); - std::string picName = bonusPics[bonusType]; - size_t picNumber = bonDescs[i].info2; + const CampaignBonus & bonus = bonDescs[i]; + CampaignBonusType bonusType = bonus.getType(); + std::string picName = bonusPics[static_cast(bonusType)]; + size_t picNumber = -1; MetaString desc; - switch(bonDescs[i].type) + switch(bonusType) { - case CampaignBonusType::SPELL: - desc.appendLocalString(EMetaText::GENERAL_TXT, 715); - desc.replaceName(SpellID(bonDescs[i].info2)); - break; - case CampaignBonusType::MONSTER: - picNumber = bonDescs[i].info2 + 2; - desc.appendLocalString(EMetaText::GENERAL_TXT, 717); - desc.replaceNumber(bonDescs[i].info3); - desc.replaceNamePlural(bonDescs[i].info2); - break; - case CampaignBonusType::BUILDING: - { - FactionID faction; - for(auto & elem : GAME->server().si->playerInfos) + case CampaignBonusType::SPELL: { - if(elem.second.isControlledByHuman()) - { - faction = elem.second.castle; - break; - } + const auto & bonusValue = bonus.getValue(); + const auto * spell = bonusValue.spell.toSpell(); + if (!spell->getIconScenarioBonus().empty()) + picName = spell->getIconScenarioBonus(); + else + picNumber = bonusValue.spell.getNum(); + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); + desc.replaceName(bonusValue.spell); + break; } - assert(faction.hasValue()); - - BuildingID buildID; - if(getCampaign()->formatVCMI()) - buildID = BuildingID(bonDescs[i].info1); - else - buildID = CBuildingHandler::campToERMU(bonDescs[i].info1, faction, std::set()); - picName = graphics->ERMUtoPicture[faction.getNum()][buildID.getNum()]; - picNumber = -1; - - if(vstd::contains((*LIBRARY->townh)[faction]->town->buildings, buildID)) - desc.appendTextID((*LIBRARY->townh)[faction]->town->buildings.find(buildID)->second->getNameTextID()); - break; - } - case CampaignBonusType::ARTIFACT: - desc.appendLocalString(EMetaText::GENERAL_TXT, 715); - desc.replaceName(ArtifactID(bonDescs[i].info2)); - break; - case CampaignBonusType::SPELL_SCROLL: - desc.appendLocalString(EMetaText::GENERAL_TXT, 716); - desc.replaceName(SpellID(bonDescs[i].info2)); - break; - case CampaignBonusType::PRIMARY_SKILL: - { - int leadingSkill = -1; - std::vector> toPrint; //primary skills to be listed - const ui8 * ptr = reinterpret_cast(&bonDescs[i].info2); - for(int g = 0; g < GameConstants::PRIMARY_SKILLS; ++g) + case CampaignBonusType::MONSTER: { - if(leadingSkill == -1 || ptr[g] > ptr[leadingSkill]) - { - leadingSkill = g; - } - if(ptr[g] != 0) - { - toPrint.push_back(std::make_pair(g, ptr[g])); - } + const auto & bonusValue = bonus.getValue(); + picNumber = bonusValue.creature.getNum() + 2; + desc.appendLocalString(EMetaText::GENERAL_TXT, 717); + desc.replaceNumber(bonusValue.amount); + desc.replaceNamePlural(bonusValue.creature); + break; } - picNumber = leadingSkill; - desc.appendLocalString(EMetaText::GENERAL_TXT, 715); - - std::string substitute; //text to be printed instead of %s - for(int v = 0; v < toPrint.size(); ++v) + case CampaignBonusType::BUILDING: { - substitute += std::to_string(toPrint[v].second); - substitute += " " + LIBRARY->generaltexth->primarySkillNames[toPrint[v].first]; - if(v != toPrint.size() - 1) + const auto & bonusValue = bonus.getValue(); + FactionID faction; + for(auto & elem : GAME->server().si->playerInfos) { - substitute += ", "; + if(elem.second.isControlledByHuman()) + { + faction = elem.second.castle; + break; + } } - } + assert(faction.hasValue()); - desc.replaceRawString(substitute); - break; - } - case CampaignBonusType::SECONDARY_SKILL: - desc.appendLocalString(EMetaText::GENERAL_TXT, 718); - desc.replaceTextID(TextIdentifier("core", "skilllev", bonDescs[i].info3 - 1).get()); - desc.replaceName(SecondarySkill(bonDescs[i].info2)); - picNumber = bonDescs[i].info2 * 3 + bonDescs[i].info3 - 1; - - break; - case CampaignBonusType::RESOURCE: - { - desc.appendLocalString(EMetaText::GENERAL_TXT, 717); - - switch(bonDescs[i].info1) - { - case EGameResID::COMMON: //wood + ore + BuildingID buildID = bonusValue.buildingDecoded; + if (bonusValue.buildingH3M.hasValue()) { - desc.replaceLocalString(EMetaText::GENERAL_TXT, 721); - picNumber = 7; - break; + auto mapping = LIBRARY->mapFormat->getMapping(getCampaign()->getFormat()); + buildID = mapping.remapBuilding(faction, bonusValue.buildingH3M); } - case EGameResID::RARE : //mercury + sulfur + crystal + gems - { - desc.replaceLocalString(EMetaText::GENERAL_TXT, 722); - picNumber = 8; - break; - } - default: - { - desc.replaceName(GameResID(bonDescs[i].info1)); - picNumber = bonDescs[i].info1; - } - } - desc.replaceNumber(bonDescs[i].info2); - break; - } - case CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO: - { - auto superhero = getCampaign()->strongestHero(static_cast(bonDescs[i].info2), PlayerColor(bonDescs[i].info1)); - if(!superhero) - logGlobal->warn("No superhero! How could it be transferred?"); - picNumber = superhero ? superhero->getIconIndex() : 0; - desc.appendLocalString(EMetaText::GENERAL_TXT, 719); - desc.replaceRawString(getCampaign()->scenario(static_cast(bonDescs[i].info2)).scenarioName.toString()); - break; - } + for (const auto & townStructure : faction.toFaction()->town->clientInfo.structures) + if (townStructure->building && townStructure->building->bid == buildID) + picName = townStructure->campaignBonus.getOriginalName(); - case CampaignBonusType::HERO: - if(bonDescs[i].info2 == HeroTypeID::CAMP_RANDOM.getNum()) - { - desc.appendLocalString(EMetaText::GENERAL_TXT, 720); // Start with random hero picNumber = -1; - picName = "CBONN1A3.BMP"; + + if(vstd::contains(faction.toFaction()->town->buildings, buildID)) + desc.appendTextID(faction.toFaction()->town->buildings.find(buildID)->second->getNameTextID()); + break; } - else + case CampaignBonusType::ARTIFACT: { - desc.appendLocalString(EMetaText::GENERAL_TXT, 715); // Start with %s - desc.replaceTextID(LIBRARY->heroh->objects[bonDescs[i].info2]->getNameTextID()); + const auto & bonusValue = bonus.getValue(); + const auto * artifact = bonusValue.artifact.toArtifact(); + if (!artifact->scenarioBonus.empty()) + picName = artifact->scenarioBonus; + else + picNumber = bonusValue.artifact.getNum(); + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); + desc.replaceName(bonusValue.artifact); + break; + } + case CampaignBonusType::SPELL_SCROLL: + { + const auto & bonusValue = bonus.getValue(); + const auto * spell = bonusValue.spell.toSpell(); + if (!spell->getIconScenarioBonus().empty()) + picName = spell->getIconScenarioBonus(); + else + picNumber = bonusValue.spell.getNum(); + + desc.appendLocalString(EMetaText::GENERAL_TXT, 716); + desc.replaceName(bonusValue.spell); + break; + } + case CampaignBonusType::PRIMARY_SKILL: + { + const auto & bonusValue = bonus.getValue(); + int leadingSkill = -1; + std::vector> toPrint; //primary skills to be listed + for(int g = 0; g < bonusValue.amounts.size(); ++g) + { + if(leadingSkill == -1 || bonusValue.amounts[g] > bonusValue.amounts[leadingSkill]) + { + leadingSkill = g; + } + if(bonusValue.amounts[g] != 0) + { + toPrint.push_back(std::make_pair(g, bonusValue.amounts[g])); + } + } + picNumber = leadingSkill; + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); + + std::string substitute; //text to be printed instead of %s + for(int v = 0; v < toPrint.size(); ++v) + { + substitute += std::to_string(toPrint[v].second); + substitute += " " + LIBRARY->generaltexth->primarySkillNames[toPrint[v].first]; + if(v != toPrint.size() - 1) + { + substitute += ", "; + } + } + + desc.replaceRawString(substitute); + break; + } + case CampaignBonusType::SECONDARY_SKILL: + { + const auto & bonusValue = bonus.getValue(); + const auto * skill = bonusValue.skill.toSkill(); + desc.appendLocalString(EMetaText::GENERAL_TXT, 718); + desc.replaceTextID(TextIdentifier("core", "skilllev", bonusValue.mastery - 1).get()); + desc.replaceName(bonusValue.skill); + if (!skill->at(bonusValue.mastery).scenarioBonus.empty()) + picName = skill->at(bonusValue.mastery).scenarioBonus.empty(); + else + picNumber = bonusValue.skill.getNum() * 3 + bonusValue.mastery - 1; + break; + } + case CampaignBonusType::RESOURCE: + { + const auto & bonusValue = bonus.getValue(); + desc.appendLocalString(EMetaText::GENERAL_TXT, 717); + + switch(bonusValue.resource) + { + case EGameResID::COMMON: //wood + ore + { + desc.replaceLocalString(EMetaText::GENERAL_TXT, 721); + picNumber = 7; + break; + } + case EGameResID::RARE: //mercury + sulfur + crystal + gems + { + desc.replaceLocalString(EMetaText::GENERAL_TXT, 722); + picNumber = 8; + break; + } + default: + { + desc.replaceName(bonusValue.resource); + picNumber = bonusValue.resource.getNum(); + } + } + + desc.replaceNumber(bonusValue.amount); + break; + } + case CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO: + { + const auto & bonusValue = bonus.getValue(); + auto superhero = getCampaign()->strongestHero(bonusValue.scenario, bonusValue.startingPlayer); + if(!superhero) + logGlobal->warn("No superhero! How could it be transferred?"); + picNumber = superhero ? superhero->getIconIndex() : 0; + desc.appendLocalString(EMetaText::GENERAL_TXT, 719); + desc.replaceRawString(getCampaign()->scenario(bonusValue.scenario).scenarioName.toString()); + break; + } + + case CampaignBonusType::HERO: + { + const auto & bonusValue = bonus.getValue(); + if(bonusValue.hero == HeroTypeID::CAMP_RANDOM.getNum()) + { + desc.appendLocalString(EMetaText::GENERAL_TXT, 720); // Start with random hero + picNumber = -1; + picName = "CBONN1A3.BMP"; + } + else + { + desc.appendLocalString(EMetaText::GENERAL_TXT, 715); // Start with %s + desc.replaceTextID(bonusValue.hero.toHeroType()->getNameTextID()); + picNumber = bonusValue.hero.getNum(); + } + break; } - break; } std::shared_ptr bonusButton = std::make_shared(Point(475 + i * 68, 455), AnimationPath::builtin("campaignBonusSelection"), CButton::tooltip(desc.toString(), desc.toString()), nullptr, EShortcut::NONE, false, [this](){ diff --git a/client/render/Graphics.cpp b/client/render/Graphics.cpp index 1771b2f70..4681ec67a 100644 --- a/client/render/Graphics.cpp +++ b/client/render/Graphics.cpp @@ -118,7 +118,6 @@ Graphics::Graphics() { loadPaletteAndColors(); initializeBattleGraphics(); - loadErmuToPicture(); //(!) do not load any CAnimation here } @@ -153,21 +152,3 @@ void Graphics::setPlayerFlagColor(SDL_Palette * targetPalette, PlayerColor playe SDL_SetPaletteColors(targetPalette, &color, 5, 1); } } - -void Graphics::loadErmuToPicture() -{ - //loading ERMU to picture - const JsonNode config(JsonPath::builtin("config/ERMU_to_picture.json")); - int etp_idx = 0; - for(const JsonNode &etp : config["ERMU_to_picture"].Vector()) { - int idx = 0; - for(const JsonNode &n : etp.Vector()) { - ERMUtoPicture[idx][etp_idx] = n.String(); - idx ++; - } - assert (idx == std::size(ERMUtoPicture)); - - etp_idx ++; - } - assert (etp_idx == 44); -} diff --git a/client/render/Graphics.h b/client/render/Graphics.h index 017f8e1b4..9ce7d8f5a 100644 --- a/client/render/Graphics.h +++ b/client/render/Graphics.h @@ -20,7 +20,6 @@ class Graphics { void initializeBattleGraphics(); void loadPaletteAndColors(); - void loadErmuToPicture(); public: using PlayerPalette = std::array; @@ -32,8 +31,6 @@ public: PlayerPalette neutralColorPalette; ColorRGBA neutralColor; - //towns - std::map ERMUtoPicture[GameConstants::F_NUMBER]; //maps building ID to it's picture's name for each town type //for battles std::map< int, std::vector < std::string > > battleACToDef; //maps AC format to vector of appropriate def names diff --git a/client/widgets/CArtifactsOfHeroBase.cpp b/client/widgets/CArtifactsOfHeroBase.cpp index 6d2728cab..bb49fb6d1 100644 --- a/client/widgets/CArtifactsOfHeroBase.cpp +++ b/client/widgets/CArtifactsOfHeroBase.cpp @@ -269,12 +269,13 @@ void CArtifactsOfHeroBase::setSlotData(ArtPlacePtr artPlace, const ArtifactPosit artPlace->slot = slot; if(auto slotInfo = curHero->getSlot(slot)) { + const auto curArt = slotInfo->getArt(); + artPlace->lockSlot(slotInfo->locked); - artPlace->setArtifact(slotInfo->getArt()->getTypeId(), slotInfo->getArt()->getScrollSpellID()); + artPlace->setArtifact(curArt->getTypeId(), curArt->getScrollSpellID()); if(slotInfo->locked) return; - const auto curArt = slotInfo->getArt(); // If the artifact has charges, add charges information if(curArt->getType()->isCharged()) artPlace->addChargedArtInfo(curArt->getCharges()); diff --git a/client/widgets/MiscWidgets.cpp b/client/widgets/MiscWidgets.cpp index 143bcdefa..342b65046 100644 --- a/client/widgets/MiscWidgets.cpp +++ b/client/widgets/MiscWidgets.cpp @@ -585,9 +585,7 @@ void MoraleLuckBox::set(const AFactionMember * node) text = LIBRARY->generaltexth->arraytxt[textId[morale]]; boost::algorithm::replace_first(text,"%s",LIBRARY->generaltexth->arraytxt[neutralDescr[morale]-mrlt]); - if (morale && node && (node->getBonusBearer()->hasBonusOfType(BonusType::UNDEAD) - || node->getBonusBearer()->hasBonusOfType(BonusType::NON_LIVING) - || node->getBonusBearer()->hasBonusOfType(BonusType::MECHANICAL))) + if (morale && node && node->unaffectedByMorale()) { text += LIBRARY->generaltexth->arraytxt[113]; //unaffected by morale component.value = 0; diff --git a/client/widgets/TextControls.cpp b/client/widgets/TextControls.cpp index 76d7c526d..2cb8a4442 100644 --- a/client/widgets/TextControls.cpp +++ b/client/widgets/TextControls.cpp @@ -344,6 +344,7 @@ Rect CMultiLineLabel::getTextLocation() case ETextAlignment::TOPLEFT: return Rect(pos.topLeft(), textSizeComputed); case ETextAlignment::TOPCENTER: return Rect(pos.topLeft(), textSizeComputed); case ETextAlignment::CENTER: return Rect(pos.topLeft() + textOffset / 2, textSizeComputed); + case ETextAlignment::CENTERLEFT: return Rect(pos.topLeft() + Point(0, textOffset.y / 2), textSizeComputed); case ETextAlignment::CENTERRIGHT: return Rect(pos.topLeft() + Point(textOffset.x, textOffset.y / 2), textSizeComputed); case ETextAlignment::BOTTOMRIGHT: return Rect(pos.topLeft() + textOffset, textSizeComputed); } diff --git a/client/windows/CCreatureWindow.cpp b/client/windows/CCreatureWindow.cpp index 17b9f8574..ebc0e7f3e 100644 --- a/client/windows/CCreatureWindow.cpp +++ b/client/windows/CCreatureWindow.cpp @@ -485,7 +485,7 @@ CStackWindow::CommanderMainSection::CommanderMainSection(CStackWindow * owner, i auto getArtifactPos = [](int index) { - return Point(269 + 47 * (index % 3), 22 + 47 * (index / 3)); + return Point(269 + 52 * (index % 3), 22 + 52 * (index / 3)); }; for(auto equippedArtifact : parent->info->commander->artifactsWorn) diff --git a/client/windows/CKingdomInterface.cpp b/client/windows/CKingdomInterface.cpp index 5e3cee763..39cb60f93 100644 --- a/client/windows/CKingdomInterface.cpp +++ b/client/windows/CKingdomInterface.cpp @@ -832,6 +832,9 @@ CTownItem::CTownItem(const CGTownInstance * Town) { ENGINE->windows().createAndPushWindow(town); }); + + labelCreatureGrowth = std::make_shared(Rect(4, 76, 50, 35), EFonts::FONT_SMALL, ETextAlignment::CENTERLEFT, Colors::YELLOW, LIBRARY->generaltexth->translate("core.genrltxt.265")); + labelCreatureAvailable = std::make_shared(Rect(349, 76, 57, 35), EFonts::FONT_SMALL, ETextAlignment::CENTERLEFT, Colors::YELLOW, LIBRARY->generaltexth->translate("core.genrltxt.266")); } void CTownItem::updateGarrisons() diff --git a/client/windows/CKingdomInterface.h b/client/windows/CKingdomInterface.h index 50fbd1038..fc519197c 100644 --- a/client/windows/CKingdomInterface.h +++ b/client/windows/CKingdomInterface.h @@ -31,6 +31,7 @@ class CListBox; class CTabbedInt; class CGStatusBar; class CGarrisonInt; +class CMultiLineLabel; class CKingdHeroList; class CKingdTownList; @@ -272,6 +273,9 @@ class CTownItem : public CIntObject, public IGarrisonHolder std::vector> available; std::vector> growth; + std::shared_ptr labelCreatureAvailable; + std::shared_ptr labelCreatureGrowth; + std::shared_ptr openTown; std::shared_ptr fastTownHall; diff --git a/client/windows/CMapOverview.cpp b/client/windows/CMapOverview.cpp index 8163aa7da..04f4c5762 100644 --- a/client/windows/CMapOverview.cpp +++ b/client/windows/CMapOverview.cpp @@ -34,7 +34,7 @@ #include "../../lib/mapping/MapFormat.h" #include "../../lib/TerrainHandler.h" #include "../../lib/filesystem/Filesystem.h" - +#include "../../lib/callback/EditorCallback.h" #include "../../lib/StartInfo.h" #include "../../lib/mapObjects/CGHeroInstance.h" #include "../../lib/rmg/CMapGenOptions.h" @@ -105,7 +105,8 @@ std::vector> CMapOverviewWidget::createMinimaps(con std::unique_ptr map; try { - map = mapService.loadMap(resource, nullptr); + auto cb = std::make_unique(map.get()); + map = mapService.loadMap(resource, cb.get()); } catch (const std::exception & e) { diff --git a/client/windows/CSpellWindow.cpp b/client/windows/CSpellWindow.cpp index a41c6ddbd..1515a3fb6 100644 --- a/client/windows/CSpellWindow.cpp +++ b/client/windows/CSpellWindow.cpp @@ -33,7 +33,6 @@ #include "../widgets/VideoWidget.h" #include "../adventureMap/AdventureMapInterface.h" - #include "../../lib/CConfigHandler.h" #include "../../lib/GameConstants.h" #include "../../lib/GameLibrary.h" @@ -42,11 +41,21 @@ #include "../../lib/spells/CSpellHandler.h" #include "../../lib/spells/ISpellMechanics.h" #include "../../lib/spells/Problem.h" +#include "../../lib/spells/SpellSchoolHandler.h" #include "../../lib/texts/CGeneralTextHandler.h" #include "../../lib/texts/TextOperations.h" - #include "../../lib/mapObjects/CGHeroInstance.h" +// Ordering of spell school tabs in SpelTab.def +static const std::array schoolTabOrder = +{ + SpellSchool::AIR, + SpellSchool::FIRE, + SpellSchool::WATER, + SpellSchool::EARTH, + SpellSchool::ANY +}; + CSpellWindow::InteractiveArea::InteractiveArea(const Rect & myRect, std::function funcL, int helpTextId, CSpellWindow * _owner) { addUsedEvents(LCLICK | SHOW_POPUP | HOVER); @@ -85,12 +94,11 @@ public: if(A->getLevel() > B->getLevel()) return false; - - for(auto schoolId = 0; schoolId < GameConstants::DEFAULT_SCHOOLS; schoolId++) + for (const auto schoolId : LIBRARY->spellSchoolHandler->getAllObjects()) { - if(A->school.at(SpellSchool(schoolId)) && !B->school.at(SpellSchool(schoolId))) + if(A->schools.count(schoolId) && !B->schools.count(schoolId)) return true; - if(!A->school.at(SpellSchool(schoolId)) && B->school.at(SpellSchool(schoolId))) + if(!A->schools.count(schoolId) && B->schools.count(schoolId)) return false; } @@ -423,7 +431,7 @@ void CSpellWindow::computeSpellsPerArea() for(const CSpell * spell : mySpells) { if(spell->isCombat() ^ !battleSpellsOnly - && ((selectedTab == 4) || spell->school.at(SpellSchool(selectedTab))) + && ((selectedTab == 4) || spell->schools.count(schoolTabOrder.at(selectedTab))) ) { spellsCurSite.push_back(spell); @@ -726,7 +734,7 @@ void CSpellWindow::SpellArea::setSpell(const CSpell * spell) mySpell = spell; if(mySpell) { - SpellSchool whichSchool; //0 - air magic, 1 - fire magic, 2 - water magic, 3 - earth magic, + SpellSchool whichSchool; schoolLevel = owner->myHero->getSpellSchoolLevel(mySpell, &whichSchool); auto spellCost = owner->myInt->cb->getSpellCost(mySpell, owner->myHero); @@ -736,21 +744,14 @@ void CSpellWindow::SpellArea::setSpell(const CSpell * spell) { OBJECT_CONSTRUCTION; - static const std::array schoolBorders = { - AnimationPath::builtin("SplevA.def"), - AnimationPath::builtin("SplevF.def"), - AnimationPath::builtin("SplevW.def"), - AnimationPath::builtin("SplevE.def") - }; - schoolBorder.reset(); if (owner->selectedTab >= 4) { if (whichSchool.hasValue()) - schoolBorder = std::make_shared(schoolBorders.at(whichSchool.getNum()), schoolLevel); + schoolBorder = std::make_shared(LIBRARY->spellSchoolHandler->getById(whichSchool)->getSpellBordersPath(), schoolLevel); } else - schoolBorder = std::make_shared(schoolBorders.at(owner->selectedTab), schoolLevel); + schoolBorder = std::make_shared(LIBRARY->spellSchoolHandler->getById(schoolTabOrder.at(owner->selectedTab))->getSpellBordersPath(), schoolLevel); } ColorRGBA firstLineColor, secondLineColor; diff --git a/config/ERMU_to_picture.json b/config/ERMU_to_picture.json deleted file mode 100644 index 1e915085f..000000000 --- a/config/ERMU_to_picture.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "ERMU_to_picture": [ - [ "BoCsMag1.pcx", "BoRMag1.pcx", "BoTGld1.pcx", "BoIMag1.pcx", "BoNmage1.pcx", "BoDmage1.pcx", "BoSmage1.pcx", "BoFmage1.pcx", "BoEgld1.pcx" ], - [ "BoCsMag2.pcx", "BoRMag2.pcx", "BoTGld2.pcx", "BoIMag2.pcx", "BoNmage2.pcx", "BoDmage2.pcx", "BoSmage2.pcx", "BoFmage2.pcx", "BoEgld2.pcx" ], - [ "BoCsMag3.pcx", "BoRMag3.pcx", "BoTGld3.pcx", "BoIMag3.pcx", "BoNmage3.pcx", "BoDmage3.pcx", "BoSmage3.pcx", "BoFmage3.pcx", "BoEgld3.pcx" ], - [ "BoCsMag4.pcx", "BoRMag4.pcx", "BoTGld4.pcx", "BoIMag4.pcx", "BoNmage4.pcx", "BoDmage4.pcx", "BoSmage4.pcx", "BoFmage4.pcx", "BoEgld4.pcx" ], - [ "BoCsMag5.pcx", "BoRMag5.pcx", "BoTGld5.pcx", "BoIMag5.pcx", "BoNmage5.pcx", "BoDmage5.pcx", "BoSmage5.pcx", "BoFmage5.pcx", "BoEgld5.pcx" ], - [ "BoCsTav1.pcx", "BoRTav.pcx", "BoTTav.pcx", "BoITav.pcx", "BoNtav.pcx", "BoDtav.pcx", "BoStav1.pcx", "BoFtav.pcx", "BoEtav.pcx" ], - [ "BoCsDock.pcx", "", "", "", "", "", "", "BoFship.pcx", "BoEship.pcx" ], - [ "BoCsCas1.pcx", "BoRCas1.pcx", "BoTCas1.pcx", "BoICas1.pcx", "BoNcast1.pcx", "BoDcas1.pcx", "BoScas1.pcx", "BoFcast1.pcx", "BoEcast1.pcx" ], - [ "BoCsCas2.pcx", "BoRCas2.pcx", "BoTCas2.pcx", "BoICas2.pcx", "BoNcast2.pcx", "BoDcas2.pcx", "BoScas2.pcx", "BoFcast2.pcx", "BoEcast2.pcx" ], - [ "BoCsCas3.pcx", "BoRCas3.pcx", "BoTCas3.pcx", "BoICas3.pcx", "BoNcast3.pcx", "BoDcas3.pcx", "BoScas3.pcx", "BoFcast3.pcx", "BoEcast3.pcx" ], - [ "BoCsHal1.pcx", "BoRHal1.pcx", "BoTHal1.pcx", "BoIHal1.pcx", "BoNhall1.pcx", "BoDhall1.pcx", "BoShall1.pcx", "BoFhall1.pcx", "BoEhall1.pcx" ], - [ "BoCsHal2.pcx", "BoRHal2.pcx", "BoTHal2.pcx", "BoIHal2.pcx", "BoNhall2.pcx", "BoDhall2.pcx", "BoShall2.pcx", "BoFhall2.pcx", "BoEhall2.pcx" ], - [ "BoCsHal3.pcx", "BoRHal3.pcx", "BoTHal3.pcx", "BoIHal3.pcx", "BoNhall3.pcx", "BoDhall3.pcx", "BoShall3.pcx", "BoFhall3.pcx", "BoEhall3.pcx" ], - [ "BoCsHal4.pcx", "BoRHal4.pcx", "BoTHal4.pcx", "BoIHal4.pcx", "BoNhall4.pcx", "BoDhall4.pcx", "BoShall4.pcx", "BoFhall4.pcx", "BoEhall4.pcx" ], - [ "BoCsMrk1.pcx", "BoRMrk1.pcx", "BoTMark.pcx", "BoIMrk1.pcx", "BoNmark1.pcx", "BoDmark1.pcx", "BoSmrk1.pcx", "BoFmark1.pcx", "BoEmark1.pcx" ], - [ "BoCsMrk2.pcx", "BoRMrk2.pcx", "BoTMarkS.pcx", "BoIMrk2.pcx", "BoNmark2.pcx", "BoDmark2.pcx", "BoSmrk2.pcx", "BoFmark2.pcx", "BoEmarkS.pcx" ], - [ "BoCsBlak.pcx", "BoRAid.pcx", "BoTBlack.pcx", "BoIBlak.pcx", "BoNsmith.pcx", "BoDsmith.pcx", "BoSblak1.pcx", "BoFapoth.pcx", "BoEblack.pcx" ], - [ "BoCsLite.pcx", "BoRGar1.pcx", "BoTMarkA.pcx", "", "BoNshrod.pcx", "BoDmarkA.pcx", "BoSescap.pcx", "BoFcage.pcx", "BoEmarkA.pcx" ], - [ "BoCsGr1H.pcx", "BoRDwf1h.pcx", "BoTGa1H.pcx", "BoIImpH.pcx", "BoNskelH.pcx", "BoDtrogH.pcx", "BoSgob1h.pcx", "BoFgno1h.pcx", "BoDhrd1.pcx" ], - [ "BoCsGr2H.pcx", "BoRDwf2h.pcx", "BoTGa2h.pcx", "BoIImp2H.pcx", "", "", "BoSgob2h.pcx", "BoFgno2h.pcx", "BoDhrd2.pcx" ], - [ "", "", "", "", "", "", "", "", "" ], - [ "BoCsCv2S.pcx", "BoRGar2.pcx", "BoTCasW.pcx", "BoICasB.pcx", "BoNnecro.pcx", "BoDvort.pcx", "BoSmrk1c.pcx", "BoFcastD.pcx", "BoEuniv.pcx" ], - [ "BoCsTav2.pcx", "BoRDwf1t.pcx", "BoTGldL.pcx", "BoICasG.pcx", "BoNskelT.pcx", "BoDport.pcx", "BoSblak2.pcx", "BoFcastA.pcx", "" ], - [ "", "", "BoTGldW.pcx", "BoIMagO.pcx", "", "BoDacad.pcx", "BoSvahal.pcx", "", "" ], - [ "", "BoRTre1h.pcx", "", "BoIHndH.pcx", "", "", "", "", "" ], - [ "", "BoRTre2h.pcx", "", "BoIHnd2H.pcx", "", "", "", "", "" ], - [ "BoCsHoly.pcx", "BoRHoly.pcx", "BoTHoly.pcx", "BoIHoly.pcx", "BoNholyG.pcx", "BoDholy.pcx", "BoSholy.pcx", "BoFgrail.pcx", "BoEgrail.pcx" ], - [ "", "", "", "", "", "", "", "", "" ], - [ "", "", "", "", "", "", "", "", "" ], - [ "", "", "", "", "", "", "", "", "" ], - [ "BoCsPik1.pcx", "BoRCen1.pcx", "BoTGrem1.pcx", "BoIImp1.pcx", "BoNskel1.pcx", "BoDtrog1.pcx", "BoSgob1.pcx", "BoFgnol1.pcx", "BoEdn_0.pcx" ], - [ "BoCsCrs1.pcx", "BoRDwf1.pcx", "BoTGar1.pcx", "BoIGog1.pcx", "BoNzomb1.pcx", "BoDharp1.pcx", "BoSwolf1.pcx", "BoFlizr1.pcx", "BoEdn_1.pcx" ], - [ "BoCsGr1.pcx", "BoRElf1.pcx", "BoTGolm1.pcx", "BoIHnd1.pcx", "BoNwigh1.pcx", "BoDbeh1.pcx", "BoSorc1.pcx", "BoFfly1.pcx", "BoEdn_2.pcx" ], - [ "BoCsSwd1.pcx", "BoRPeg1.pcx", "BoTMag1.pcx", "BoIDmn1.pcx", "BoNvamp1.pcx", "BoDmedu1.pcx", "BoSogre1.pcx", "BoFbas1.pcx", "BoEdn_3.pcx" ], - [ "BoCsMon1.pcx", "BoRTre1.pcx", "BoTGen1.pcx", "BoIPit1.pcx", "BoNlich1.pcx", "BoDmino1.pcx", "BoSroc1.pcx", "BoFgorg1.pcx", "BoEdn_4.pcx" ], - [ "BoCsCv1.pcx", "BoRUni1.pcx", "BoTNaga1.pcx", "BoIEfr1.pcx", "BoNbkni1.pcx", "BoDmant1.pcx", "BoScyc1.pcx", "BoFwyvr1.pcx", "BoEdn_5.pcx" ], - [ "BoCsAng1.pcx", "BoRDra1.pcx", "BoTTit1.pcx", "BoIDvl1.pcx", "BoNbone1.pcx", "BoDdrag1.pcx", "BoSbeh1.pcx", "BoFhydr1.pcx", "BoEdn_6.pcx" ], - [ "BoCsPik2.pcx", "BoRCen2.pcx", "BoTGrem2.pcx", "BoIImp2.pcx", "BoNskel2.pcx", "BoDtrog2.pcx", "BoSgob2.pcx", "BoFgnol2.pcx", "BoEup_0.pcx" ], - [ "BoCsCrs2.pcx", "BoRDwf2.pcx", "BoTGar2.pcx", "BoIGog2.pcx", "BoNzomb2.pcx", "BoDharp2.pcx", "BoSwolf2.pcx", "BoFlizr2.pcx", "BoEup_1.pcx" ], - [ "BoCsGr2.pcx", "BoRElf2.pcx", "BoTGolm2.pcx", "BoIHnd2.pcx", "BoNwigh2.pcx", "BoDbeh2.pcx", "BoSorc2.pcx", "BoFfly2.pcx", "BoEup_2.pcx" ], - [ "BoCsSwd2.pcx", "BoRPeg2.pcx", "BoTMag2.pcx", "BoIDmn2.pcx", "BoNvamp2.pcx", "BoDmedu2.pcx", "BoSogre2.pcx", "BoFbas2.pcx", "BoEup_3.pcx" ], - [ "BoCsMon2.pcx", "BoRTre2.pcx", "BoTGen2.pcx", "BoIPit2.pcx", "BoNlich2.pcx", "BoDmino2.pcx", "BoSroc2.pcx", "BoFgorg2.pcx", "BoEup_4.pcx" ], - [ "BoCsCv2.pcx", "BoRUni2.pcx", "BoTNaga2.pcx", "BoIEfr2.pcx", "BoNbkni2.pcx", "BoDmant2.pcx", "BoScyc2.pcx", "BoFwyvr2.pcx", "BoEup_5.pcx" ], - [ "BoCsAng2.pcx", "BoRDra2.pcx", "BoTTit2.pcx", "BoIDvl2.pcx", "BoNbone2.pcx", "BoDdrag2.pcx", "BoSbeh2.pcx", "BoFhydr2.pcx", "BoEup_6.pcx" ] - ] -} diff --git a/config/bonuses.json b/config/bonuses.json index 646f4089b..dedaa0796 100644 --- a/config/bonuses.json +++ b/config/bonuses.json @@ -85,6 +85,10 @@ "ENEMY_DEFENCE_REDUCTION": { }, + + "FEARFUL": + { + }, "FIRE_SHIELD": { @@ -98,14 +102,6 @@ } }, - "FEAR": - { - }, - - "FEARLESS": - { - }, - "FEROCITY": { }, @@ -120,9 +116,18 @@ "FREE_SHOOTING": { }, + + "FULL_MAP_DARKNESS": + { + }, + + "FULL_MAP_SCOUTING": + { + }, "GARGOYLE": { + "creatureNature" : true, }, "GENERAL_DAMAGE_REDUCTION": @@ -178,6 +183,11 @@ "LIMITED_SHOOTING_RANGE": { }, + + "LIVING": + { + "creatureNature" : true + }, "MANA_CHANNELING": { @@ -194,6 +204,11 @@ "MAGIC_RESISTANCE": { }, + + "MECHANICAL": + { + "creatureNature" : true + }, "MIND_IMMUNITY": { @@ -231,10 +246,7 @@ "NON_LIVING": { - }, - - "MECHANICAL": - { + "creatureNature" : true }, "OPENING_BATTLE_SPELL": @@ -269,6 +281,15 @@ "REVENGE": { }, + + "SIEGE_WEAPON": + { + "creatureNature" : true + }, + + "SKELETON_TRANSFORMER_TARGET": + { + }, "SHOOTER": { @@ -346,8 +367,13 @@ { }, + "TRANSMUTATION_IMMUNITY": + { + }, + "UNDEAD": { + "creatureNature" : true, }, "UNLIMITED_RETALIATIONS": @@ -359,6 +385,10 @@ "hidden": true }, + "VULNERABLE_FROM_BACK": + { + }, + "WIDE_BREATH": { }, diff --git a/config/campaignMedia.json b/config/campaignMedia.json deleted file mode 100644 index c0a78ce61..000000000 --- a/config/campaignMedia.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "videos": [ - //Restoration of Erathia - //Long live the Queen - "GOOD1A.SMK", //Good1_a - "GOOD1B.SMK", //Good1_b - "GOOD1C.SMK", //Good1_c - //Dungeons and devils - "EVIL1A.SMK", //Evil1_a - "EVIL1B.SMK", //Evil1_b - "EVIL1C.SMK", //Evil1_c - //Spoils of War - "NEUTRALA.SMK", //Neutral1_a - "NEUTRALB.SMK", //Neutral1_b - "NEUTRALC.SMK", //Neutral1_c - //Liberation - "GOOD2A.SMK", //Good2_a - "GOOD2B.SMK", //Good2_b - "GOOD2C.SMK", //Good2_c - "GOOD2D.SMK", //Good2_d - //Long Live the King - "EVIL2A.SMK", //Evil2_a - "EVIL2AP1.SMK", //Evil2ap1 - "EVIL2B.SMK", //Evil2_b - "EVIL2C.SMK", //Evil2_c - "EVIL2D.SMK", //Evil2_d - //Song for the Father - "GOOD3A.SMK", //Good3_a - "GOOD3B.SMK", //Good3_b - "GOOD3C.SMK", //Good3_c - //Seeds Of Discontent - "SECRETA.SMK", //Secret_a - "SECRETB.SMK", //Secret_b - "SECRETC.SMK", //Secret_c - //Armageddon's Blade - //Armageddon's Blade - "H3ABab1.smk", //ArmageddonsBlade_a - "H3ABab2.smk", //ArmageddonsBlade_b - "H3ABab3.smk", //ArmageddonsBlade_c - "H3ABab4.smk", //ArmageddonsBlade_d - "H3ABab5.smk", //ArmageddonsBlade_e - "H3ABab6.smk", //ArmageddonsBlade_f - "H3ABab7.smk", //ArmageddonsBlade_g - "H3ABab8.smk", //ArmageddonsBlade_h - "H3ABab9.smk", //ArmageddonsBlade_end - //Dragon's Blood - "H3ABdb1.smk", //DragonsBlood_a - "H3ABdb2.smk", //DragonsBlood_b - "H3ABdb3.smk", //DragonsBlood_c - "H3ABdb4.smk", //DragonsBlood_d - "H3ABdb5.smk", //DragonsBlood_end - //Dragon Slayer - "H3ABds1.smk", //DragonSlayer_a - "H3ABds2.smk", //DragonSlayer_b - "H3ABds3.smk", //DragonSlayer_c - "H3ABds4.smk", //DragonSlayer_d - "H3ABds5.smk", //DragonSlayer_end - //Festival of Life - "H3ABfl1.smk", //FestivalOfLife_a - "H3ABfl2.smk", //FestivalOfLife_b - "H3ABfl3.smk", //FestivalOfLife_c - "H3ABfl4.smk", //FestivalOfLife_d - "H3ABfl5.smk", //FestivalOfLife_end - //Foolhardy Waywardness - "H3ABfw1.smk", //FoolhardyWaywardness_a - "H3ABfw2.smk", //FoolhardyWaywardness_b - "H3ABfw3.smk", //FoolhardyWaywardness_c - "H3ABfw4.smk", //FoolhardyWaywardness_d - "H3ABfw5.smk", //FoolhardyWaywardness_end - //Playing with Fire - "H3ABpf1.smk", //PlayingWithFire_a - "H3ABpf2.smk", //PlayingWithFire_b - "H3ABpf3.smk", //PlayingWithFire_c - "H3ABpf4.smk", //PlayingWithFire_end - //Shadow of Death Campaigns - //Birth of a Barbarian - "H3x2_BBa.smk", //BirthOfABarbarian_a - "H3x2_BBb.smk", //BirthOfABarbarian_b - "H3x2_BBc.smk", //BirthOfABarbarian_c - "H3x2_BBd.smk", //BirthOfABarbarian_d - "H3x2_BBe.smk", //BirthOfABarbarian_e - "H3x2_BBf.smk", //BirthOfABarbarian_end - //Elixir of Life - "H3x2_Ela.smk", //ElixirOfLife_a - "H3x2_Elb.smk", //ElixirOfLife_b - "H3x2_Elc.smk", //ElixirOfLife_c - "H3x2_Eld.smk", //ElixirOfLife_d - "H3x2_Ele.smk", //ElixirOfLife_end - //Hack and Slash - "H3x2_HSa.smk", //HackAndSlash_a - "EVIL2C.SMK", //HackAndSlash_b - "H3x2_HSc.smk", //HackAndSlash_c - "H3x2_HSd.smk", //HackAndSlash_d - "H3x2_HSe.smk", //HackAndSlash_end - //New Beginning - "H3x2_NBa.smk", //NewBeginning_a - "H3x2_NBb.smk", //NewBeginning_b - "H3x2_Nbc.smk", //NewBeginning_c - "H3x2_Nbd.smk", //NewBeginning_d - "H3x2_Nbe.smk", //NewBeginning_end - //Rise of the Necromancer - "H3x2_RNa.smk", //RiseOfTheNecromancer_a - "H3x2_RNb.smk", //RiseOfTheNecromancer_b - "H3x2_RNc.smk", //RiseOfTheNecromancer_c - "H3x2_RNd.smk", //RiseOfTheNecromancer_d - "H3x2_RNe1.smk", //RiseOfTheNecromancer_end - //Spectre of Power - "H3x2_SPa.smk", //SpectreOfPower_a - "H3x2_SPb.smk", //SpectreOfPower_b - "H3x2_SPc.smk", //SpectreOfPower_c - "H3x2_SPd.smk", //SpectreOfPower_d - "H3x2_SPe.smk", //SpectreOfPower_end - //Unholy Alliance - "H3x2_UAa.smk", //UnholyAlliance_a - "H3x2_UAb.smk", //UnholyAlliance_b - "H3x2_UAc.smk", //UnholyAlliance_c - "H3x2_UAd.smk", //UnholyAlliance_d - "H3x2_UAe.smk", //UnholyAlliance_e - "H3x2_UAf.smk", //UnholyAlliance_f - "H3x2_UAg.smk", //UnholyAlliance_g - "H3x2_UAh.smk", //UnholyAlliance_h - "H3x2_UAi.smk", //UnholyAlliance_i - "H3x2_UAj.smk", //UnholyAlliance_j - "H3x2_UAk.smk", //UnholyAlliance_k - "H3x2_UAl.smk", //UnholyAlliance_l - "H3x2_UAm.smk", //UnholyAlliance_end //H3x2_UAm.bik? - ], - - "music" : [ - // Use CmpMusic.txt from H3 instead - ], - - "voice" : [ - //Restoration of Erathia - "G1A", //Long live the Queen 1 - "G1B", //Long live the Queen 2 - "G1C", //Long live the Queen 3 - "E1A.wav", //Dungeons and Devils 1 - "E1B.wav", //Dungeons and Devils 2 - "E1C.wav", //Dungeons and Devils 3 - "N1A", //Spoils of War 1 - "N1B", //Spoils of War 2 - "N1C_D", //Spoils of War 3 - "G2A", //Liberation 1 - "G2B", //Liberation 2 - "G2C", //Liberation 3 - "G2D", //Liberation 4 - "E2A.wav", //Long live the King 1 - "E2AE.wav", //Long live the King 1end - "E2B.wav", //Long live the King 2 - "E2C.wav", //Long live the King 3 - "E2D.wav", //Long live the King 4 - "G3A", //Song for the Father 1 - "G3B", //Song for the Father 2 - "G3C", //Song for the Father 3 - "S1A", //Seeds of discontent 1 - "S1B", //Seeds of discontent 2 - "S1C", //Seeds of discontent 3 - //Armageddon's Blade - "ABvoAB1.wav", //Armageddon's Blade 1 - "ABvoAB2.wav", //Armageddon's Blade 2 - "ABvoAB3.wav", //Armageddon's blade 3 - "ABvoAB4.wav", //Armageddon's blade 4 - "ABvoAB5.wav", //Armageddon's blade 5 - "ABvoAB6.wav", //Armageddon's blade 6 - "ABvoAB7.wav", //Armageddon's blade 7 - "ABvoAB8.wav", //Armageddon's blade 8 - "ABvoAB9.wav", //Armageddon's blade 8end - "ABvoDB1.wav", //Dragon's Blood 1 - "ABvoDB2.wav", //Dragon's Blood 2 - "ABvoDB3.wav", //Dragon's Blood 3 - "ABvoDB4.wav", //Dragon's Blood 4 - "ABvoDB5.wav", //Dragon's Blood 4end - "ABvoDS1.wav", //Dragon Slayer 1 - "ABvoDS2.wav", //Dragon Slayer 2 - "ABvoDS3.wav", //Dragon Slayer 3 - "ABvoDS4.wav", //Dragon Slayer 4 - "ABvoDS5.wav", //Dragon Slayer 4end - "ABvoFL1.wav", //Festival of Life 1 - "ABvoFL2.wav", //Festival of Life 2 - "ABvoFL3.wav", //Festival of Life 3 - "ABvoFL4.wav", //Festival of Life 4 - "ABvoFL5.wav", //Festival of Life 4end - "ABvoFW1.wav", //Foolhardy Waywardness 1 - "ABvoFW2.wav", //Foolhardy Waywardness 2 - "ABvoFW3.wav", //Foolhardy Waywardness 3 - "ABvoFW4.wav", //Foolhardy Waywardness 4 - "ABvoFW5.wav", //Foolhardy Waywardness 4end - "ABvoPF1.wav", //Playing with Fire 1 - "ABvoPF2.wav", //Playing with Fire 2 - "ABvoPF3.wav", //Playing with Fire 3 - "ABvoPF4.wav", //Playing with Fire 3end - //Shadow of Death Campaigns - "H3x2BBa", //Birth of a Barbarian 1 - "H3x2BBb", //Birth of a Barbarian 2 - "H3x2BBc", //Birth of a Barbarian 3 - "H3x2BBd", //Birth of a Barbarian 4 - "H3x2BBe", //Birth of a Barbarian 5 - "H3x2BBf", //Birth of a Barbarian 5end - "H3x2ELa", //Elixir of life 1 - "H3x2ELb", //Elixir of life 2 - "H3x2ELc", //Elixir of life 3 - "H3x2ELd", //Elixir of life 4 - "H3x2ELe", //Elixir of life 4end - "H3x2HSa", //Hack and Slash 1 - "H3x2HSb", //Hack and Slash 2 - "H3x2HSc", //Hack and Slash 3 - "H3x2HSd", //Hack and Slash 4 - "H3x2HSe", //Hack and Slash 4end - "H3x2NBa", //New Beginning 1 - "H3x2NBb", //New Beginning 2 - "H3x2NBc", //New Beginning 3 - "H3x2NBd", //New Beginning 4 - "H3x2NBe", //New Beginning 4end - "H3x2RNa", //Rise of the Necromancer 1 - "H3x2RNb", //Rise of the Necromancer 2 - "H3x2RNc", //Rise of the Necromancer 3 - "H3x2RNd", //Rise of the Necromancer 4 - "H3x2RNe", //Rise of the Necromancer 4end - "H3x2SPa", //Spectre of Power 1 - "H3x2Spb", //Spectre of Power 2 - "H3x2Spc", //Spectre of Power 3 - "H3x2Spd", //Spectre of Power 4 - "H3x2Spe", //Spectre of Power 4end - "H3x2UAa", //Unholy alliance 1 - "H3x2UAb", //Unholy alliance 2 - "H3x2UAc", //Unholy alliance 3 - "H3x2UAd", //Unholy alliance 4 - "H3x2UAe", //Unholy alliance 5 - "H3x2UAf", //Unholy alliance 6 - "H3x2UAg", //Unholy alliance 7 - "H3x2UAh", //Unholy alliance 8 - "H3x2UAi", //Unholy alliance 9 - "H3x2UAj", //Unholy alliance 10 - "H3x2UAk", //Unholy alliance 11 - "H3x2UAl", //Unholy alliance 12 - "H3x2UAm" //Unholy alliance 12end - ] -} diff --git a/config/campaignOverrides.json b/config/campaignOverrides.json index 45b11877c..e00c6507b 100644 --- a/config/campaignOverrides.json +++ b/config/campaignOverrides.json @@ -1,11 +1,196 @@ { - "DATA/GOOD3" : { // RoE - "Song for the Father" - "outroVideo": "Endgame" + /// RoE CAMPAIGNS + + "DATA/GOOD1" : { //Long live the Queen + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "G1A" }, + { "voiceProlog": "G1B" }, + { "voiceProlog": "G1C" } + ] }, - "DATA/AB" : { // AB Intro + "DATA/EVIL1" : { // Dungeons and Devils + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "E1A" }, + { "voiceProlog": "E1B" }, + { "voiceProlog": "E1C" } + ] + }, + "DATA/GOOD2" : { // Liberation + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "G2A" }, + { "voiceProlog": "G2B" }, + { "voiceProlog": "G2C" }, + { "voiceProlog": "G2D" } + ] + }, + "DATA/NEUTRAL1" : { // Spoils of War + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "N1A" }, + { "voiceProlog": "N1B" }, + { "voiceProlog": "N1C_D" } + ] + }, + "DATA/EVIL2" : { // Long live the King + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "E2A", "voiceEpilog": "E2AE" }, + { "voiceProlog": "E2B" }, + { "voiceProlog": "E2C" }, + { "voiceProlog": "E2D" } + ] + }, + + "DATA/GOOD3" : { // Song for the Father + "outroVideo": "Endgame", + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "G3A" }, + { "voiceProlog": "G3B" }, + { "voiceProlog": "G3C" } + ] + }, + "DATA/SECRET1" : { // Seeds of discontent + "restrictedGarrisonsForAI" : true, + "scenarios": [ + { "voiceProlog": "S1A" }, + { "voiceProlog": "S1B" }, + { "voiceProlog": "S1C" } + ] + }, + + /// AB CAMPAIGNS + + "DATA/AB" : { // Armageddon's Blade "introVideo": "H3X1intr", - "videoRim": "IntroRm2" + "videoRim": "IntroRm2", + "scenarios": [ + { "voiceProlog": "ABvoAB1" }, + { "voiceProlog": "ABvoAB2" }, + { "voiceProlog": "ABvoAB3" }, + { "voiceProlog": "ABvoAB4" }, + { "voiceProlog": "ABvoAB5" }, + { "voiceProlog": "ABvoAB6" }, + { "voiceProlog": "ABvoAB7" }, + { "voiceProlog": "ABvoAB8", "voiceEpilog": "ABvoAB9" } + ] }, + "DATA/BLOOD" : { // Dragon's Blood + "scenarios": [ + { "voiceProlog": "ABvoDB1" }, + { "voiceProlog": "ABvoDB2" }, + { "voiceProlog": "ABvoDB3" }, + { "voiceProlog": "ABvoDB4", "voiceEpilog": "ABvoDB5" } + ] + }, + "DATA/SLAYER" : { // Dragon Slayer + "scenarios": [ + { "voiceProlog": "ABvoDS1" }, + { "voiceProlog": "ABvoDS2" }, + { "voiceProlog": "ABvoDS3" }, + { "voiceProlog": "ABvoDS4", "voiceEpilog": "ABvoDS5" } + ] + }, + "DATA/FESTIVAL" : { // Festival of Life + "scenarios": [ + { "voiceProlog": "ABvoFL1" }, + { "voiceProlog": "ABvoFL2" }, + { "voiceProlog": "ABvoFL3" }, + { "voiceProlog": "ABvoFL4", "voiceEpilog": "ABvoFL5" } + ] + }, + "DATA/FIRE" : { // Playing with Fire + "scenarios": [ + { "voiceProlog": "ABvoPF1" }, + { "voiceProlog": "ABvoPF2" }, + { "voiceProlog": "ABvoPF3", "voiceEpilog": "ABvoPF4" } + ] + }, + "DATA/FOOL" : { // Foolhardy Waywardness + "scenarios": [ + { "voiceProlog": "ABvoFW1" }, + { "voiceProlog": "ABvoFW2" }, + { "voiceProlog": "ABvoFW3" }, + { "voiceProlog": "ABvoFW4", "voiceEpilog": "ABvoFW5" } + ] + }, + + /// SoD CAMPAIGNS + + "DATA/GELU" : { // Elixir of life + "scenarios": [ + { "voiceProlog": "H3x2ELa" }, + { "voiceProlog": "H3x2ELb" }, + { "voiceProlog": "H3x2ELc" }, + { "voiceProlog": "H3x2ELd", "voiceEpilog": "H3x2ELe" } + ] + }, + "DATA/CRAG" : { // Hack and Slash + "scenarios": [ + { "voiceProlog": "H3x2HSa" }, + { "voiceProlog": "H3x2HSb" }, + { "voiceProlog": "H3x2HSc" }, + { "voiceProlog": "H3x2HSd", "voiceEpilog": "H3x2HSe" } + ] + }, + "DATA/SANDRO" : { // Rise of the Necromancer + "scenarios": [ + { "voiceProlog": "H3x2RNa" }, + { "voiceProlog": "H3x2RNb" }, + { "voiceProlog": "H3x2RNc" }, + { "voiceProlog": "H3x2RNd", "voiceEpilog": "H3x2RNe" } + ] + }, + "DATA/GEM" : { // New Beginning + "heroGemSorceress" : "gem", // Gem (Sorceress class) + "scenarios": [ + { "voiceProlog": "H3x2NBa" }, + { "voiceProlog": "H3x2NBb" }, + { "voiceProlog": "H3x2NBc" }, + { "voiceProlog": "H3x2NBd", "voiceEpilog": "H3x2NBe" } + ] + }, + "DATA/YOG" : { // Birth of a Barbarian + "heroYogWizard" : "solmyr", // Yog (based on Solmyr) + "scenarios": [ + { "voiceProlog": "H3x2BBa" }, + { "voiceProlog": "H3x2BBb" }, + { "voiceProlog": "H3x2BBc" }, + { "voiceProlog": "H3x2BBd" }, + { "voiceProlog": "H3x2BBe", "voiceEpilog": "H3x2BBf" } + ] + }, + "DATA/FINAL" : { // Unholy Alliance + "heroGemSorceress" : "gem", // Gem (Sorceress class) + "scenarios": [ + { "voiceProlog": "H3x2UAa" }, + { "voiceProlog": "H3x2UAb" }, + { "voiceProlog": "H3x2UAc" }, + { "voiceProlog": "H3x2UAd" }, + { "voiceProlog": "H3x2UAe" }, + { "voiceProlog": "H3x2UAf" }, + { "voiceProlog": "H3x2UAg" }, + { "voiceProlog": "H3x2UAh" }, + { "voiceProlog": "H3x2UAi" }, + { "voiceProlog": "H3x2UAj" }, + { "voiceProlog": "H3x2UAk" }, + { "voiceProlog": "H3x2UAl", "voiceEpilog": "H3x2UAm" } + ] + }, + "DATA/SECRET" : { // Spectre of Power + "scenarios": [ + { "voiceProlog": "H3x2SPa" }, + { "voiceProlog": "H3x2Spb" }, + { "voiceProlog": "H3x2Spc" }, + { "voiceProlog": "H3x2Spd", "voiceEpilog": "H3x2Spe" } + ] + }, + + /// CHRONICLES CAMPAIGNS + "MAPS/CHRONICLES/HC1_MAIN" : { // Heroes Chronicles 1 "regions": { diff --git a/config/campaignRegions.json b/config/campaignRegions.json new file mode 100644 index 000000000..84969d163 --- /dev/null +++ b/config/campaignRegions.json @@ -0,0 +1,238 @@ +{ + // RoE + + "good1" : { + "prefix": "G1", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 57, "y": 314 }, + { "infix": "B", "x": 137, "y": 309 }, + { "infix": "C", "x": 44, "y": 163 } + ] + }, + + "good2" : { + "prefix": "G2", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 56, "y": 90 }, + { "infix": "B", "x": 316, "y": 49 }, + { "infix": "C", "x": 54, "y": 378 }, + { "infix": "D", "x": 151, "y": 126 } + ] + }, + + "good3" : { + "prefix": "G3", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 289, "y": 376 }, + { "infix": "B", "x": 60, "y": 147 }, + { "infix": "C", "x": 131, "y": 202 } + ] + }, + + "evil1" : { + "prefix": "E1", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 270, "y": 332 }, + { "infix": "B", "x": 138, "y": 113 }, + { "infix": "C", "x": 26, "y": 70 }, + { "infix": "P1", "x": 256, "y": 127 }, + { "infix": "P2", "x": 57, "y": 314 }, + { "infix": "P3", "x": 137, "y": 310 }, + { "infix": "P4", "x": 44, "y": 163 } + ] + }, + + "evil2" : { + "prefix": "E2", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 131, "y": 202 }, + { "infix": "B", "x": 60, "y": 145 }, + { "infix": "C", "x": 92, "y": 261 }, + { "infix": "D", "x": 218, "y": 307 } + ] + }, + + "neutral1" : { + "prefix": "N1", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 42, "y": 94 }, + { "infix": "B", "x": 309, "y": 290 }, + { "infix": "CD", "x": 188, "y": 202 } + ] + }, + + "secret1" : { + "prefix": "S1", + "colorSuffixLength": 1, + "desc": [ + { "infix": "A", "x": 263, "y": 199 }, + { "infix": "B", "x": 182, "y": 210 }, + { "infix": "C", "x": 82, "y": 152 } + ] + }, + + // AB + + "dragonSlayer" : { + "prefix": "BR", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 18, "y": 233 }, + { "infix": "B", "x": 125, "y": 381 }, + { "infix": "C", "x": 224, "y": 357 }, + { "infix": "D", "x": 192, "y": 320 } + ] + }, + + "foolhardyWaywardness" : { + "prefix": "IS", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 294, "y": 399 }, + { "infix": "B", "x": 183, "y": 293 }, + { "infix": "C", "x": 40, "y": 92 }, + { "infix": "D", "x": 294, "y": 398 } + ] + }, + + "festivalOfLife" : { + "prefix": "KR", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 148, "y": 323 }, + { "infix": "B", "x": 192, "y": 235 }, + { "infix": "C", "x": 136, "y": 158 }, + { "infix": "D", "x": 87, "y": 107 } + ] + }, + + "dragonsBlood" : { + "prefix": "NI", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 118, "y": 111 }, + { "infix": "B", "x": 223, "y": 145 }, + { "infix": "C", "x": 320, "y": 213 }, + { "infix": "D", "x": 233, "y": 250 } + ] + }, + + "playingWithFire" : { + "prefix": "TA", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 228, "y": 233 }, + { "infix": "B", "x": 147, "y": 194 }, + { "infix": "C", "x": 112, "y": 97 } + ] + }, + + "armageddonsBlade" : { + "prefix": "AR", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 135, "y": 238 }, + { "infix": "B", "x": 135, "y": 121 }, + { "infix": "C", "x": 206, "y": 155 }, + { "infix": "D", "x": 105, "y": 397 }, + { "infix": "E", "x": 109, "y": 275 }, + { "infix": "F", "x": 158, "y": 188 }, + { "infix": "G", "x": 200, "y": 261 }, + { "infix": "H", "x": 232, "y": 197 } + ] + }, + + // SoD + + "hackAndSlash" : { + "prefix": "HS", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 141, "y": 326 }, + { "infix": "B", "x": 238, "y": 275 }, + { "infix": "C", "x": 22, "y": 161 }, + { "infix": "D", "x": 5, "y": 9 } + ] + }, + + "birthOfBarbarian" : { + "prefix": "BB", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 167, "y": 342 }, + { "infix": "B", "x": 217, "y": 263 }, + { "infix": "C", "x": 0, "y": 71 }, + { "infix": "D", "x": 291, "y": 79 }, + { "infix": "E", "x": 316, "y": 199 } + ] + }, + + "newBeginning" : { + "prefix": "NB", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 6, "y": 292 }, + { "infix": "B", "x": 161, "y": 334 }, + { "infix": "C", "x": 63, "y": 195 }, + { "infix": "D", "x": 56, "y": 46 } + ] + }, + + "elixirOfLife" : { + "prefix": "EL", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 11, "y": 73 }, + { "infix": "B", "x": 0, "y": 241 }, + { "infix": "C", "x": 254, "y": 34 }, + { "infix": "D", "x": 91, "y": 144 } + ] + }, + + "riseOfTheNecromancer" : { + "prefix": "RN", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 84, "y": 319 }, + { "infix": "B", "x": 194, "y": 275 }, + { "infix": "C", "x": 67, "y": 185 }, + { "infix": "D", "x": 77, "y": 30 } + ] + }, + + "unholyAlliance" : { + "prefix": "UA", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 157, "y": 409 }, + { "infix": "B", "x": 62, "y": 346 }, + { "infix": "C", "x": 8, "y": 8 }, + { "infix": "D", "x": 206, "y": 1 }, + { "infix": "E", "x": 132, "y": 357 }, + { "infix": "F", "x": 184, "y": 83 }, + { "infix": "G", "x": 159, "y": 263 }, + { "infix": "H", "x": 108, "y": 173 }, + { "infix": "I", "x": 55, "y": 127 }, + { "infix": "J", "x": 9, "y": 252 }, + { "infix": "K", "x": 210, "y": 176 }, + { "infix": "L", "x": 260, "y": 210 } + ] + }, + + "spectreOfPower" : { + "prefix": "SP", + "colorSuffixLength": 2, + "desc": [ + { "infix": "A", "x": 7, "y": 295 }, + { "infix": "B", "x": 44, "y": 141 }, + { "infix": "C", "x": 141, "y": 21 }, + { "infix": "D", "x": 243, "y": 156 } + ] + } +} diff --git a/config/campaign_regions.json b/config/campaign_regions.json deleted file mode 100644 index bcba4875b..000000000 --- a/config/campaign_regions.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "campaign_regions": [ - { - "prefix": "G1", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 57, "y": 314 }, - { "infix": "B", "x": 137, "y": 309 }, - { "infix": "C", "x": 44, "y": 163 } - ] - }, - - { - "prefix": "G2", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 56, "y": 90 }, - { "infix": "B", "x": 316, "y": 49 }, - { "infix": "C", "x": 54, "y": 378 }, - { "infix": "D", "x": 151, "y": 126 } - ] - }, - - { - "prefix": "G3", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 289, "y": 376 }, - { "infix": "B", "x": 60, "y": 147 }, - { "infix": "C", "x": 131, "y": 202 } - ] - }, - - { - "prefix": "E1", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 270, "y": 332 }, - { "infix": "B", "x": 138, "y": 113 }, - { "infix": "C", "x": 26, "y": 70 }, - { "infix": "P1", "x": 256, "y": 127 }, - { "infix": "P2", "x": 57, "y": 314 }, - { "infix": "P3", "x": 137, "y": 310 }, - { "infix": "P4", "x": 44, "y": 163 } - ] - }, - - { - "prefix": "E2", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 131, "y": 202 }, - { "infix": "B", "x": 60, "y": 145 }, - { "infix": "C", "x": 92, "y": 261 }, - { "infix": "D", "x": 218, "y": 307 } - ] - }, - - { - "prefix": "N1", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 42, "y": 94 }, - { "infix": "B", "x": 309, "y": 290 }, - { "infix": "CD", "x": 188, "y": 202 } - ] - }, - - { - "prefix": "S1", - "colorSuffixLength": 1, - "desc": [ - { "infix": "A", "x": 263, "y": 199 }, - { "infix": "B", "x": 182, "y": 210 }, - { "infix": "C", "x": 82, "y": 152 } - ] - }, - - { - "prefix": "BR", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 18, "y": 233 }, - { "infix": "B", "x": 125, "y": 381 }, - { "infix": "C", "x": 224, "y": 357 }, - { "infix": "D", "x": 192, "y": 320 } - ] - }, - - { - "prefix": "IS", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 294, "y": 399 }, - { "infix": "B", "x": 183, "y": 293 }, - { "infix": "C", "x": 40, "y": 92 }, - { "infix": "D", "x": 294, "y": 398 } - ] - }, - - { - "prefix": "KR", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 148, "y": 323 }, - { "infix": "B", "x": 192, "y": 235 }, - { "infix": "C", "x": 136, "y": 158 }, - { "infix": "D", "x": 87, "y": 107 } - ] - }, - - { - "prefix": "NI", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 118, "y": 111 }, - { "infix": "B", "x": 223, "y": 145 }, - { "infix": "C", "x": 320, "y": 213 }, - { "infix": "D", "x": 233, "y": 250 } - ] - }, - - { - "prefix": "TA", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 228, "y": 233 }, - { "infix": "B", "x": 147, "y": 194 }, - { "infix": "C", "x": 112, "y": 97 } - ] - }, - - { - "prefix": "AR", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 135, "y": 238 }, - { "infix": "B", "x": 135, "y": 121 }, - { "infix": "C", "x": 206, "y": 155 }, - { "infix": "D", "x": 105, "y": 397 }, - { "infix": "E", "x": 109, "y": 275 }, - { "infix": "F", "x": 158, "y": 188 }, - { "infix": "G", "x": 200, "y": 261 }, - { "infix": "H", "x": 232, "y": 197 } - ] - }, - - { - "prefix": "HS", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 141, "y": 326 }, - { "infix": "B", "x": 238, "y": 275 }, - { "infix": "C", "x": 22, "y": 161 }, - { "infix": "D", "x": 5, "y": 9 } - ] - }, - - { - "prefix": "BB", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 167, "y": 342 }, - { "infix": "B", "x": 217, "y": 263 }, - { "infix": "C", "x": 0, "y": 71 }, - { "infix": "D", "x": 291, "y": 79 }, - { "infix": "E", "x": 316, "y": 199 } - ] - }, - - { - "prefix": "NB", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 6, "y": 292 }, - { "infix": "B", "x": 161, "y": 334 }, - { "infix": "C", "x": 63, "y": 195 }, - { "infix": "D", "x": 56, "y": 46 } - ] - }, - - { - "prefix": "EL", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 11, "y": 73 }, - { "infix": "B", "x": 0, "y": 241 }, - { "infix": "C", "x": 254, "y": 34 }, - { "infix": "D", "x": 91, "y": 144 } - ] - }, - - { - "prefix": "RN", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 84, "y": 319 }, - { "infix": "B", "x": 194, "y": 275 }, - { "infix": "C", "x": 67, "y": 185 }, - { "infix": "D", "x": 77, "y": 30 } - ] - }, - - { - "prefix": "UA", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 157, "y": 409 }, - { "infix": "B", "x": 62, "y": 346 }, - { "infix": "C", "x": 8, "y": 8 }, - { "infix": "D", "x": 206, "y": 1 }, - { "infix": "E", "x": 132, "y": 357 }, - { "infix": "F", "x": 184, "y": 83 }, - { "infix": "G", "x": 159, "y": 263 }, - { "infix": "H", "x": 108, "y": 173 }, - { "infix": "I", "x": 55, "y": 127 }, - { "infix": "J", "x": 9, "y": 252 }, - { "infix": "K", "x": 210, "y": 176 }, - { "infix": "L", "x": 260, "y": 210 } - ] - }, - - { - "prefix": "SP", - "colorSuffixLength": 2, - "desc": [ - { "infix": "A", "x": 7, "y": 295 }, - { "infix": "B", "x": 44, "y": 141 }, - { "infix": "C", "x": 141, "y": 21 }, - { "infix": "D", "x": 243, "y": 156 } - ] - } - ] -} diff --git a/config/creatures/dungeon.json b/config/creatures/dungeon.json index f49aaebfa..2cdafee4c 100644 --- a/config/creatures/dungeon.json +++ b/config/creatures/dungeon.json @@ -429,6 +429,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" @@ -474,6 +479,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" diff --git a/config/creatures/fortress.json b/config/creatures/fortress.json index f834f993a..5b025cba5 100644 --- a/config/creatures/fortress.json +++ b/config/creatures/fortress.json @@ -349,6 +349,11 @@ { "type" : "ATTACKS_ALL_ADJACENT" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "noRetaliation" : { "type" : "BLOCKS_RETALIATION" @@ -385,6 +390,11 @@ { "type" : "ATTACKS_ALL_ADJACENT" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "noRetaliation" : { "type" : "BLOCKS_RETALIATION" diff --git a/config/creatures/neutral.json b/config/creatures/neutral.json index 0e25c5231..1297dc519 100644 --- a/config/creatures/neutral.json +++ b/config/creatures/neutral.json @@ -75,6 +75,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" @@ -83,13 +88,28 @@ { "type" : "TWO_HEX_ATTACK_BREATH" }, - "fear" : + "fearful" : { - "type" : "FEAR" + "type" : "FEARFUL", + "val" : 10, + "propagator": "BATTLE_WIDE", + "propagationUpdater" : "BONUS_OWNER_UPDATER", + "description" : "PLACEHOLDER", + "limiters" : [ + "OPPOSITE_SIDE", + { + "type" : "HAS_ANOTHER_BONUS_LIMITER", + "parameters" : [ "LIVING" ] + } + ] }, "fearless" : { - "type" : "FEARLESS" + "type" : "FEARFUL", + "valueType" : "INDEPENDENT_MAX", + "description" : "PLACEHOLDER", + "val" : 0 + }, "spellImmunity" : { @@ -128,6 +148,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "crystals" : { "type" : "SPECIAL_CRYSTAL_GENERATION" @@ -169,6 +194,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" @@ -277,6 +307,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" diff --git a/config/creatures/rampart.json b/config/creatures/rampart.json index 63b4595a1..1cd0de0b9 100644 --- a/config/creatures/rampart.json +++ b/config/creatures/rampart.json @@ -366,6 +366,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" @@ -411,6 +416,11 @@ { "type" : "DRAGON_NATURE" }, + "dragonSkeleton" : + { + "type" : "SKELETON_TRANSFORMER_TARGET", + "subtype" : "boneDragon" + }, "canFly" : { "type" : "FLYING" diff --git a/config/creatures/special.json b/config/creatures/special.json index 6d3b53caf..9548cf2c8 100644 --- a/config/creatures/special.json +++ b/config/creatures/special.json @@ -77,7 +77,7 @@ { "special" : true, "index": 146, - "level": 0, + "level": 5, "faction": "neutral", "doubleWide" : true, "shots" : 24, diff --git a/config/factions/castle.json b/config/factions/castle.json index c5726036f..150f0d84d 100644 --- a/config/factions/castle.json +++ b/config/factions/castle.json @@ -80,43 +80,43 @@ "structures" : { "extraAnimation": { "animation" : "TBCSEXT2.def", "x" : 46, "y" : 119 }, - "mageGuild1": { "animation" : "TBCSMAGE.def", "x" : 707, "y" : 166, "z" : 1, "border" : "TOCSMAG1.bmp", "area" : "TZCSMAG1.bmp" }, - "mageGuild2": { "animation" : "TBCSMAG2.def", "x" : 706, "y" : 135, "z" : 1, "border" : "TOCSMAG2.bmp", "area" : "TZCSMAG2.bmp" }, - "mageGuild3": { "animation" : "TBCSMAG3.def", "x" : 704, "y" : 107, "z" : 1, "border" : "TOCSM301.bmp", "area" : "TZCSM301.bmp" }, - "mageGuild4": { "animation" : "TBCSMAG4.def", "x" : 704, "y" : 76, "z" : 1, "border" : "TOCSM401.bmp", "area" : "TZCSM401.bmp" }, - "tavern": { "animation" : "TBCSTVRN.def", "x" : 0, "y" : 230, "z" : 2, "border" : "TOCSTAV1.bmp", "area" : "TZCSTAV1.bmp" }, - "shipyard": { "animation" : "TBCSDOCK.def", "x" : 478, "y" : 134, "z" : -3, "border" : "TOCSDKMS.bmp", "area" : "TZCSDKMS.bmp" }, - "fort": { "animation" : "TBCSCSTL.def", "x" : 595, "y" : 66, "z" : -5, "border" : "TOCSCAS1.bmp", "area" : "TZCSCAS1.bmp" }, - "citadel": { "animation" : "TBCSCAS2.def", "x" : 478, "y" : 66, "z" : -5, "border" : "TOCSCAS2.bmp", "area" : "TZCSCAS2.bmp" }, - "castle": { "animation" : "TBCSCAS3.def", "x" : 478, "y" : 37, "z" : -5, "border" : "TOCSCAS3.bmp", "area" : "TZCSCAS3.bmp" }, - "villageHall": { "animation" : "TBCSHALL.def", "x" : 0, "y" : 209, "z" : 1, "border" : "TOCSH101.bmp", "area" : "TZCSH101.bmp" }, - "townHall": { "animation" : "TBCSHAL2.def", "x" : 0, "y" : 176, "z" : 1, "border" : "TOCSH201.bmp", "area" : "TZCSH201.bmp" }, - "cityHall": { "animation" : "TBCSHAL3.def", "x" : 0, "y" : 164, "z" : 1, "border" : "TOCSH301.bmp", "area" : "TZCSH301.bmp" }, - "capitol": { "animation" : "TBCSHAL4.def", "x" : 0, "y" : 154, "z" : 1, "border" : "TOCSH401.bmp", "area" : "TZCSH401.bmp" }, - "marketplace": { "animation" : "TBCSMARK.def", "x" : 413, "y" : 264, "z" : 0, "border" : "TOCSMRK1.bmp", "area" : "TZCSMRK1.bmp" }, - "resourceSilo": { "animation" : "TBCSSILO.def", "x" : 488, "y" : 228, "z" : 1, "border" : "TOCSMRK2.bmp", "area" : "TZCSMRK2.bmp" }, - "blacksmith": { "animation" : "TBCSBLAK.def", "x" : 213, "y" : 251, "z" : 0, "border" : "TOCSBLAK.bmp", "area" : "TZCSBLAK.bmp" }, - "special1": { "animation" : "TBCSSPEC.def", "x" : 533, "y" : 71, "z" : -4, "border" : "TOCSLT01.bmp", "area" : "TZCSLT01.bmp" }, - "horde1": { "animation" : "TBCSHRD1.def", "x" : 76, "y" : 53, "z" : -1, "border" : "TOCSGR1H.bmp", "area" : "TZCSGR1H.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBCSHRD2.def", "x" : 76, "y" : 35, "z" : -1, "border" : "TOCSGR2H.bmp", "area" : "TZCSGR2H.bmp", "hidden" : true, "builds" : "horde1" }, + "mageGuild1": { "animation" : "TBCSMAGE.def", "x" : 707, "y" : 166, "z" : 1, "campaignBonus" : "BoCsMag1.pcx", "border" : "TOCSMAG1.bmp", "area" : "TZCSMAG1.bmp" }, + "mageGuild2": { "animation" : "TBCSMAG2.def", "x" : 706, "y" : 135, "z" : 1, "campaignBonus" : "BoCsMag2.pcx", "border" : "TOCSMAG2.bmp", "area" : "TZCSMAG2.bmp" }, + "mageGuild3": { "animation" : "TBCSMAG3.def", "x" : 704, "y" : 107, "z" : 1, "campaignBonus" : "BoCsMag3.pcx", "border" : "TOCSM301.bmp", "area" : "TZCSM301.bmp" }, + "mageGuild4": { "animation" : "TBCSMAG4.def", "x" : 704, "y" : 76, "z" : 1, "campaignBonus" : "BoCsMag4.pcx", "border" : "TOCSM401.bmp", "area" : "TZCSM401.bmp" }, + "tavern": { "animation" : "TBCSTVRN.def", "x" : 0, "y" : 230, "z" : 2, "campaignBonus" : "BoCsTav1.pcx", "border" : "TOCSTAV1.bmp", "area" : "TZCSTAV1.bmp" }, + "shipyard": { "animation" : "TBCSDOCK.def", "x" : 478, "y" : 134, "z" : -3, "campaignBonus" : "BoCsDock.pcx", "border" : "TOCSDKMS.bmp", "area" : "TZCSDKMS.bmp" }, + "fort": { "animation" : "TBCSCSTL.def", "x" : 595, "y" : 66, "z" : -5, "campaignBonus" : "BoCsCas1.pcx", "border" : "TOCSCAS1.bmp", "area" : "TZCSCAS1.bmp" }, + "citadel": { "animation" : "TBCSCAS2.def", "x" : 478, "y" : 66, "z" : -5, "campaignBonus" : "BoCsCas2.pcx", "border" : "TOCSCAS2.bmp", "area" : "TZCSCAS2.bmp" }, + "castle": { "animation" : "TBCSCAS3.def", "x" : 478, "y" : 37, "z" : -5, "campaignBonus" : "BoCsCas3.pcx", "border" : "TOCSCAS3.bmp", "area" : "TZCSCAS3.bmp" }, + "villageHall": { "animation" : "TBCSHALL.def", "x" : 0, "y" : 209, "z" : 1, "campaignBonus" : "BoCsHal1.pcx", "border" : "TOCSH101.bmp", "area" : "TZCSH101.bmp" }, + "townHall": { "animation" : "TBCSHAL2.def", "x" : 0, "y" : 176, "z" : 1, "campaignBonus" : "BoCsHal2.pcx", "border" : "TOCSH201.bmp", "area" : "TZCSH201.bmp" }, + "cityHall": { "animation" : "TBCSHAL3.def", "x" : 0, "y" : 164, "z" : 1, "campaignBonus" : "BoCsHal3.pcx", "border" : "TOCSH301.bmp", "area" : "TZCSH301.bmp" }, + "capitol": { "animation" : "TBCSHAL4.def", "x" : 0, "y" : 154, "z" : 1, "campaignBonus" : "BoCsHal4.pcx", "border" : "TOCSH401.bmp", "area" : "TZCSH401.bmp" }, + "marketplace": { "animation" : "TBCSMARK.def", "x" : 413, "y" : 264, "z" : 0, "campaignBonus" : "BoCsMrk1.pcx", "border" : "TOCSMRK1.bmp", "area" : "TZCSMRK1.bmp" }, + "resourceSilo": { "animation" : "TBCSSILO.def", "x" : 488, "y" : 228, "z" : 1, "campaignBonus" : "BoCsMrk2.pcx", "border" : "TOCSMRK2.bmp", "area" : "TZCSMRK2.bmp" }, + "blacksmith": { "animation" : "TBCSBLAK.def", "x" : 213, "y" : 251, "z" : 0, "campaignBonus" : "BoCsBlak.pcx", "border" : "TOCSBLAK.bmp", "area" : "TZCSBLAK.bmp" }, + "special1": { "animation" : "TBCSSPEC.def", "x" : 533, "y" : 71, "z" : -4, "campaignBonus" : "BoCsLite.pcx", "border" : "TOCSLT01.bmp", "area" : "TZCSLT01.bmp" }, + "horde1": { "animation" : "TBCSHRD1.def", "x" : 76, "y" : 53, "z" : -1, "campaignBonus" : "BoCsGr1H.pcx", "border" : "TOCSGR1H.bmp", "area" : "TZCSGR1H.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBCSHRD2.def", "x" : 76, "y" : 35, "z" : -1, "campaignBonus" : "BoCsGr2H.pcx", "border" : "TOCSGR2H.bmp", "area" : "TZCSGR2H.bmp", "hidden" : true, "builds" : "horde1" }, "ship": { "animation" : "TBCSBOAT.def", "x" : 478, "y" : 134, "z" : -3, "border" : "TOCSDKMN.bmp", "area" : "TZCSDKMN.bmp", "hidden" : true }, - "special2": { "animation" : "TBCSEXT0.def", "x" : 384, "y" : 193, "z" : -2, "border" : "TOCSCAVM.bmp", "area" : "TZCSCAVM.bmp" }, - "special3": { "animation" : "TBCSEXT1.def", "x" : 0, "y" : 198, "z" : 2, "border" : "TOCSTAV2.bmp", "area" : "TZCSTAV2.bmp" }, - "grail": { "animation" : "TBCSHOLY.def", "x" : 456, "y" : 109, "z" : -6, "border" : "TOCSHOLY.bmp", "area" : "TZCSHOLY.bmp" }, - "dwellingLvl1": { "animation" : "TBCSDW_0.def", "x" : 304, "y" : 92, "z" : -1, "border" : "TOCSPIK1.bmp", "area" : "TZCSPIK1.bmp" }, - "dwellingLvl2": { "animation" : "TBCSDW_1.def", "x" : 360, "y" : 130, "z" : 0, "border" : "TOCSCRS1.bmp", "area" : "TZCSCRS1.bmp" }, - "dwellingLvl3": { "animation" : "TBCSDW_2.def", "x" : 76, "y" : 57, "z" : -1, "border" : "TOCSGR1N.bmp", "area" : "TZCSGR1N.bmp" }, - "dwellingLvl4": { "animation" : "TBCSDW_3.def", "x" : 176, "y" : 101, "z" : 0, "border" : "TOCSSWD1.bmp", "area" : "TZCSSWD1.bmp" }, - "dwellingLvl5": { "animation" : "TBCSDW_4.def", "x" : 563, "y" : 211, "z" : 1, "border" : "TOCSMON1.bmp", "area" : "TZCSMON1.bmp" }, - "dwellingLvl6": { "animation" : "TBCSDW_5.def", "x" : 174, "y" : 190, "z" : -1, "border" : "TOCSC101.bmp", "area" : "TZCSCAV1.bmp" }, - "dwellingLvl7": { "animation" : "TBCSDW_6.def", "x" : 303, "y" : 0, "z" : -2, "border" : "TOCSANG1.bmp", "area" : "TZCSANG1.bmp" }, - "dwellingUpLvl1": { "animation" : "TBCSUP_0.def", "x" : 304, "y" : 65, "z" : -1, "border" : "TOCSPIK2.bmp", "area" : "TZCSPIK2.bmp" }, - "dwellingUpLvl2": { "animation" : "TBCSUP_1.def", "x" : 360, "y" : 115, "z" : 0, "border" : "TOCSCRS2.bmp", "area" : "TZCSCRS2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBCSUP_2.def", "x" : 76, "y" : 35, "z" : -1, "border" : "TOCSGR2N.bmp", "area" : "TZCSGR2N.bmp" }, - "dwellingUpLvl4": { "animation" : "TBCSUP_3.def", "x" : 176, "y" : 85, "z" : 0, "border" : "TOCSSWD2.bmp", "area" : "TZCSSWD2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBCSUP_4.def", "x" : 563, "y" : 173, "z" : 1, "border" : "TOCSMON2.bmp", "area" : "TZCSMON2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBCSUP_5.def", "x" : 160, "y" : 190, "z" : -1, "border" : "TOCSCAV2.bmp", "area" : "TZCSCAV2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBCSUP_6.def", "x" : 303, "y" : 0, "z" : -2, "border" : "TOCSANG2.bmp", "area" : "TZCSANG2.bmp" } + "special2": { "animation" : "TBCSEXT0.def", "x" : 384, "y" : 193, "z" : -2, "campaignBonus" : "BoCsCv2S.pcx", "border" : "TOCSCAVM.bmp", "area" : "TZCSCAVM.bmp" }, + "special3": { "animation" : "TBCSEXT1.def", "x" : 0, "y" : 198, "z" : 2, "campaignBonus" : "BoCsTav2.pcx", "border" : "TOCSTAV2.bmp", "area" : "TZCSTAV2.bmp" }, + "grail": { "animation" : "TBCSHOLY.def", "x" : 456, "y" : 109, "z" : -6, "campaignBonus" : "BoCsHoly.pcx", "border" : "TOCSHOLY.bmp", "area" : "TZCSHOLY.bmp" }, + "dwellingLvl1": { "animation" : "TBCSDW_0.def", "x" : 304, "y" : 92, "z" : -1, "campaignBonus" : "BoCsPik1.pcx", "border" : "TOCSPIK1.bmp", "area" : "TZCSPIK1.bmp" }, + "dwellingLvl2": { "animation" : "TBCSDW_1.def", "x" : 360, "y" : 130, "z" : 0, "campaignBonus" : "BoCsCrs1.pcx", "border" : "TOCSCRS1.bmp", "area" : "TZCSCRS1.bmp" }, + "dwellingLvl3": { "animation" : "TBCSDW_2.def", "x" : 76, "y" : 57, "z" : -1, "campaignBonus" : "BoCsGr1.pcx", "border" : "TOCSGR1N.bmp", "area" : "TZCSGR1N.bmp" }, + "dwellingLvl4": { "animation" : "TBCSDW_3.def", "x" : 176, "y" : 101, "z" : 0, "campaignBonus" : "BoCsSwd1.pcx", "border" : "TOCSSWD1.bmp", "area" : "TZCSSWD1.bmp" }, + "dwellingLvl5": { "animation" : "TBCSDW_4.def", "x" : 563, "y" : 211, "z" : 1, "campaignBonus" : "BoCsMon1.pcx", "border" : "TOCSMON1.bmp", "area" : "TZCSMON1.bmp" }, + "dwellingLvl6": { "animation" : "TBCSDW_5.def", "x" : 174, "y" : 190, "z" : -1, "campaignBonus" : "BoCsCv1.pcx", "border" : "TOCSC101.bmp", "area" : "TZCSCAV1.bmp" }, + "dwellingLvl7": { "animation" : "TBCSDW_6.def", "x" : 303, "y" : 0, "z" : -2, "campaignBonus" : "BoCsAng1.pcx", "border" : "TOCSANG1.bmp", "area" : "TZCSANG1.bmp" }, + "dwellingUpLvl1": { "animation" : "TBCSUP_0.def", "x" : 304, "y" : 65, "z" : -1, "campaignBonus" : "BoCsPik2.pcx", "border" : "TOCSPIK2.bmp", "area" : "TZCSPIK2.bmp" }, + "dwellingUpLvl2": { "animation" : "TBCSUP_1.def", "x" : 360, "y" : 115, "z" : 0, "campaignBonus" : "BoCsCrs2.pcx", "border" : "TOCSCRS2.bmp", "area" : "TZCSCRS2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBCSUP_2.def", "x" : 76, "y" : 35, "z" : -1, "campaignBonus" : "BoCsGr2.pcx", "border" : "TOCSGR2N.bmp", "area" : "TZCSGR2N.bmp" }, + "dwellingUpLvl4": { "animation" : "TBCSUP_3.def", "x" : 176, "y" : 85, "z" : 0, "campaignBonus" : "BoCsSwd2.pcx", "border" : "TOCSSWD2.bmp", "area" : "TZCSSWD2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBCSUP_4.def", "x" : 563, "y" : 173, "z" : 1, "campaignBonus" : "BoCsMon2.pcx", "border" : "TOCSMON2.bmp", "area" : "TZCSMON2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBCSUP_5.def", "x" : 160, "y" : 190, "z" : -1, "campaignBonus" : "BoCsCv2.pcx", "border" : "TOCSCAV2.bmp", "area" : "TZCSCAV2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBCSUP_6.def", "x" : 303, "y" : 0, "z" : -2, "campaignBonus" : "BoCsAng2.pcx", "border" : "TOCSANG2.bmp", "area" : "TZCSANG2.bmp" } }, "musicTheme" : [ "music/CstleTown" ], diff --git a/config/factions/conflux.json b/config/factions/conflux.json index 6de579017..5a85b4e71 100644 --- a/config/factions/conflux.json +++ b/config/factions/conflux.json @@ -81,46 +81,46 @@ { "extraAnimation2":{ "animation" : "TBELEXT5.def", "x" : 682, "y" : 183, "z" : 2 }, "extraAnimation": { "animation" : "TBELEXT1.def", "x" : 23, "y" : 218, "z" : 3 }, - "mageGuild1": { "animation" : "TBELMAGE.def", "x" : 206, "y" : 58, "z" : 7, "border" : "TOELMAGE.bmp", "area" : "TZELMAGE.bmp" }, - "mageGuild2": { "animation" : "TBELMAG2.def", "x" : 206, "y" : 58, "z" : 7, "border" : "TOELMAG2.bmp", "area" : "TZELMAG2.bmp" }, - "mageGuild3": { "animation" : "TBELMAG3.def", "x" : 206, "y" : 58, "z" : 7, "border" : "TOELMAG3.bmp", "area" : "TZELMAG3.bmp" }, - "mageGuild4": { "animation" : "TBELMAG4.def", "x" : 206, "y" : 58, "z" : 7, "border" : "TOELMAG4.bmp", "area" : "TZELMAG4.bmp" }, - "mageGuild5": { "animation" : "TBELMAG5.def", "x" : 206, "y" : 58, "z" : 7, "border" : "TOELMAG5.bmp", "area" : "TZELMAG5.bmp" }, - "tavern": { "animation" : "TBELTVRN.def", "x" : 553, "y" : 203, "z" : 7, "border" : "TOELTVRN.bmp", "area" : "TZELTVRN.bmp" }, - "shipyard": { "animation" : "TBELDOCK.def", "x" : 239, "y" : 215, "z" : 5, "border" : "TOELDOCK.bmp", "area" : "TZELDOCK.bmp" }, - "fort": { "animation" : "TBELCSTL.def", "x" : 349, "y" : 101, "z" : 1, "border" : "TOELCSTL.bmp", "area" : "TZELCSTL.bmp" }, - "citadel": { "animation" : "TBELCAS2.def", "x" : 349, "y" : 101, "z" : 1, "border" : "TOELCAS2.bmp", "area" : "TZELCAS2.bmp" }, - "castle": { "animation" : "TBELCAS3.def", "x" : 349, "y" : 101, "z" : 1, "border" : "TOELCAS3.bmp", "area" : "TZELCAS3.bmp" }, - "villageHall": { "animation" : "TBELHALL.def", "x" : -1, "y" : 164, "z" : 8, "border" : "TOELHALL.bmp", "area" : "TZELHALL.bmp" }, - "townHall": { "animation" : "TBELHAL2.def", "x" : 0, "y" : 165, "z" : 8, "border" : "TOELHAL2.bmp", "area" : "TZELHAL2.bmp" }, - "cityHall": { "animation" : "TBELHAL3.def", "x" : 0, "y" : 165, "z" : 8, "border" : "TOELHAL3.bmp", "area" : "TZELHAL3.bmp" }, - "capitol": { "animation" : "TBELHAL4.def", "x" : 0, "y" : 164, "z" : 8, "border" : "TOELHAL4.bmp", "area" : "TZELHAL4.bmp" }, - "marketplace": { "animation" : "TBELMARK.def", "x" : 347, "y" : 216, "z" : 8, "border" : "TOELMARK.bmp", "area" : "TZELMARK.bmp" }, - "resourceSilo": { "animation" : "TBELSILO.def", "x" : 372, "y" : 171, "z" : 7, "border" : "TOELSILO.bmp", "area" : "TZELSILO.bmp" }, - "blacksmith": { "animation" : "TBELBLAK.def", "x" : 449, "y" : 151, "z" : 5, "border" : "TOELBLAK.bmp", "area" : "TZELBLAK.bmp" }, - "special1": { "animation" : "TBELSPEC.def", "x" : 284, "y" : 246, "z" : 9, "border" : "TOELSPEC.bmp", "area" : "TZELSPEC.bmp" }, - "horde1": { "animation" : "TBELHRD1.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELHRD1.bmp", "area" : "TZELHRD1.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBELHRD2.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELHRD2.bmp", "area" : "TZELHRD2.bmp", "hidden" : true, "builds" : "horde1" }, + "mageGuild1": { "animation" : "TBELMAGE.def", "x" : 206, "y" : 58, "z" : 7, "campaignBonus" : "BoEgld1.pcx", "border" : "TOELMAGE.bmp", "area" : "TZELMAGE.bmp" }, + "mageGuild2": { "animation" : "TBELMAG2.def", "x" : 206, "y" : 58, "z" : 7, "campaignBonus" : "BoEgld2.pcx", "border" : "TOELMAG2.bmp", "area" : "TZELMAG2.bmp" }, + "mageGuild3": { "animation" : "TBELMAG3.def", "x" : 206, "y" : 58, "z" : 7, "campaignBonus" : "BoEgld3.pcx", "border" : "TOELMAG3.bmp", "area" : "TZELMAG3.bmp" }, + "mageGuild4": { "animation" : "TBELMAG4.def", "x" : 206, "y" : 58, "z" : 7, "campaignBonus" : "BoEgld4.pcx", "border" : "TOELMAG4.bmp", "area" : "TZELMAG4.bmp" }, + "mageGuild5": { "animation" : "TBELMAG5.def", "x" : 206, "y" : 58, "z" : 7, "campaignBonus" : "BoEgld5.pcx", "border" : "TOELMAG5.bmp", "area" : "TZELMAG5.bmp" }, + "tavern": { "animation" : "TBELTVRN.def", "x" : 553, "y" : 203, "z" : 7, "campaignBonus" : "BoEtav.pcx", "border" : "TOELTVRN.bmp", "area" : "TZELTVRN.bmp" }, + "shipyard": { "animation" : "TBELDOCK.def", "x" : 239, "y" : 215, "z" : 5, "campaignBonus" : "BoEship.pcx", "border" : "TOELDOCK.bmp", "area" : "TZELDOCK.bmp" }, + "fort": { "animation" : "TBELCSTL.def", "x" : 349, "y" : 101, "z" : 1, "campaignBonus" : "BoEcast1.pcx", "border" : "TOELCSTL.bmp", "area" : "TZELCSTL.bmp" }, + "citadel": { "animation" : "TBELCAS2.def", "x" : 349, "y" : 101, "z" : 1, "campaignBonus" : "BoEcast2.pcx", "border" : "TOELCAS2.bmp", "area" : "TZELCAS2.bmp" }, + "castle": { "animation" : "TBELCAS3.def", "x" : 349, "y" : 101, "z" : 1, "campaignBonus" : "BoEcast3.pcx", "border" : "TOELCAS3.bmp", "area" : "TZELCAS3.bmp" }, + "villageHall": { "animation" : "TBELHALL.def", "x" : -1, "y" : 164, "z" : 8, "campaignBonus" : "BoEhall1.pcx", "border" : "TOELHALL.bmp", "area" : "TZELHALL.bmp" }, + "townHall": { "animation" : "TBELHAL2.def", "x" : 0, "y" : 165, "z" : 8, "campaignBonus" : "BoEhall2.pcx", "border" : "TOELHAL2.bmp", "area" : "TZELHAL2.bmp" }, + "cityHall": { "animation" : "TBELHAL3.def", "x" : 0, "y" : 165, "z" : 8, "campaignBonus" : "BoEhall3.pcx", "border" : "TOELHAL3.bmp", "area" : "TZELHAL3.bmp" }, + "capitol": { "animation" : "TBELHAL4.def", "x" : 0, "y" : 164, "z" : 8, "campaignBonus" : "BoEhall4.pcx", "border" : "TOELHAL4.bmp", "area" : "TZELHAL4.bmp" }, + "marketplace": { "animation" : "TBELMARK.def", "x" : 347, "y" : 216, "z" : 8, "campaignBonus" : "BoEMark.pcx", "border" : "TOELMARK.bmp", "area" : "TZELMARK.bmp" }, + "resourceSilo": { "animation" : "TBELSILO.def", "x" : 372, "y" : 171, "z" : 7, "campaignBonus" : "BoEMarkS.pcx", "border" : "TOELSILO.bmp", "area" : "TZELSILO.bmp" }, + "blacksmith": { "animation" : "TBELBLAK.def", "x" : 449, "y" : 151, "z" : 5, "campaignBonus" : "BoEblack.pcx", "border" : "TOELBLAK.bmp", "area" : "TZELBLAK.bmp" }, + "special1": { "animation" : "TBELSPEC.def", "x" : 284, "y" : 246, "z" : 9, "campaignBonus" : "BoEMarkA.pcx", "border" : "TOELSPEC.bmp", "area" : "TZELSPEC.bmp" }, + "horde1": { "animation" : "TBELHRD1.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEHrd1.pcx", "border" : "TOELHRD1.bmp", "area" : "TZELHRD1.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBELHRD2.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEHrd2.pcx", "border" : "TOELHRD2.bmp", "area" : "TZELHRD2.bmp", "hidden" : true, "builds" : "horde1" }, "ship": { "animation" : "TBELBOAT.def", "x" : 239, "y" : 215, "z" : 5, "border" : "TOELBOAT.bmp", "area" : "TZELBOAT.bmp", "hidden" : true }, - "special2": { "animation" : "TBELEXT6.def", "x" : 104, "y" : 170, "z" : 6, "border" : "TOELEXT6.bmp", "area" : "TZELEXT6.bmp" }, - "grail": { "animation" : "TBELHOLY.def", "x" : 307, "y" : 2, "z" : 0, "border" : "TOELHOLY.bmp", "area" : "TZELHOLY.bmp" }, + "special2": { "animation" : "TBELEXT6.def", "x" : 104, "y" : 170, "z" : 6, "campaignBonus" : "BoEuniv.pcx", "border" : "TOELEXT6.bmp", "area" : "TZELEXT6.bmp" }, + "grail": { "animation" : "TBELHOLY.def", "x" : 307, "y" : 2, "z" : 0, "campaignBonus" : "BoEgrail.pcx", "border" : "TOELHOLY.bmp", "area" : "TZELHOLY.bmp" }, "extraTownHall": { "animation" : "TBELEXT2.def", "x" : 232, "y" : 205, "z" : 4 }, "extraCityHall": { "animation" : "TBELEXT3.def", "x" : 516, "y" : 223, "z" : 6 }, "extraCapitol": { "animation" : "TBELEXT4.def", "x" : 0, "y" : 252, "z" : 9 }, - "dwellingLvl1": { "animation" : "TBELDW_0.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELDW_0.bmp", "area" : "TZELDW_0.bmp" }, - "dwellingLvl2": { "animation" : "TBELDW_1.def", "x" : 630, "y" : 50, "z" : 0, "border" : "TOELDW_1.bmp", "area" : "TZELDW_1.bmp" }, - "dwellingLvl3": { "animation" : "TBELDW_2.def", "x" : 709, "y" : 210, "z" : 5, "border" : "TOELDW_2.bmp", "area" : "TZELDW_2.bmp" }, - "dwellingLvl4": { "animation" : "TBELDW_3.def", "x" : 108, "y" : 131, "z" : 1, "border" : "TOELDW_3.bmp", "area" : "TZELDW_3.bmp" }, - "dwellingLvl5": { "animation" : "TBELDW_4.def", "x" : 264, "y" : 168, "z" : 0, "border" : "TOELDW_4.bmp", "area" : "TZELDW_4.bmp" }, - "dwellingLvl6": { "animation" : "TBELDW_5.def", "x" : 394, "y" : 283, "z" : 9, "border" : "TOELDW_5.bmp", "area" : "TZELDW_5.bmp" }, - "dwellingLvl7": { "animation" : "TBELDW_6.def", "x" : 34, "y" : 16, "z" : 0, "border" : "TOELDW_6.bmp", "area" : "TZELDW_6.bmp" }, - "dwellingUpLvl1": { "animation" : "TBELUP_0.def", "x" : 689, "y" : 250, "z" : 9, "border" : "TOELUP_0.bmp", "area" : "TZELUP_0.bmp" }, - "dwellingUpLvl2": { "animation" : "TBELUP_1.def", "x" : 630, "y" : 50, "z" : 0, "border" : "TOELUP_1.bmp", "area" : "TZELUP_1.bmp" }, - "dwellingUpLvl3": { "animation" : "TBELUP_2.def", "x" : 709, "y" : 210, "z" : 5, "border" : "TOELUP_2.bmp", "area" : "TZELUP_2.bmp" }, - "dwellingUpLvl4": { "animation" : "TBELUP_3.def", "x" : 108, "y" : 131, "z" : 1, "border" : "TOELUP_3.bmp", "area" : "TZELUP_3.bmp" }, - "dwellingUpLvl5": { "animation" : "TBELUP_4.def", "x" : 264, "y" : 168, "z" : 0, "border" : "TOELUP_4.bmp", "area" : "TZELUP_4.bmp" }, - "dwellingUpLvl6": { "animation" : "TBELUP_5.def", "x" : 394, "y" : 283, "z" : 9, "border" : "TOELUP_5.bmp", "area" : "TZELUP_5.bmp" }, - "dwellingUpLvl7": { "animation" : "TBELUP_6.def", "x" : 34, "y" : 0, "z" : 0, "border" : "TOELUP_6.bmp", "area" : "TZELUP_6.bmp" } + "dwellingLvl1": { "animation" : "TBELDW_0.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEdn_0.pcx", "border" : "TOELDW_0.bmp", "area" : "TZELDW_0.bmp" }, + "dwellingLvl2": { "animation" : "TBELDW_1.def", "x" : 630, "y" : 50, "z" : 0, "campaignBonus" : "BoEdn_1.pcx", "border" : "TOELDW_1.bmp", "area" : "TZELDW_1.bmp" }, + "dwellingLvl3": { "animation" : "TBELDW_2.def", "x" : 709, "y" : 210, "z" : 5, "campaignBonus" : "BoEdn_2.pcx", "border" : "TOELDW_2.bmp", "area" : "TZELDW_2.bmp" }, + "dwellingLvl4": { "animation" : "TBELDW_3.def", "x" : 108, "y" : 131, "z" : 1, "campaignBonus" : "BoEdn_3.pcx", "border" : "TOELDW_3.bmp", "area" : "TZELDW_3.bmp" }, + "dwellingLvl5": { "animation" : "TBELDW_4.def", "x" : 264, "y" : 168, "z" : 0, "campaignBonus" : "BoEdn_4.pcx", "border" : "TOELDW_4.bmp", "area" : "TZELDW_4.bmp" }, + "dwellingLvl6": { "animation" : "TBELDW_5.def", "x" : 394, "y" : 283, "z" : 9, "campaignBonus" : "BoEdn_5.pcx", "border" : "TOELDW_5.bmp", "area" : "TZELDW_5.bmp" }, + "dwellingLvl7": { "animation" : "TBELDW_6.def", "x" : 34, "y" : 16, "z" : 0, "campaignBonus" : "BoEdn_6.pcx", "border" : "TOELDW_6.bmp", "area" : "TZELDW_6.bmp" }, + "dwellingUpLvl1": { "animation" : "TBELUP_0.def", "x" : 689, "y" : 250, "z" : 9, "campaignBonus" : "BoEup_0.pcx", "border" : "TOELUP_0.bmp", "area" : "TZELUP_0.bmp" }, + "dwellingUpLvl2": { "animation" : "TBELUP_1.def", "x" : 630, "y" : 50, "z" : 0, "campaignBonus" : "BoEup_1.pcx", "border" : "TOELUP_1.bmp", "area" : "TZELUP_1.bmp" }, + "dwellingUpLvl3": { "animation" : "TBELUP_2.def", "x" : 709, "y" : 210, "z" : 5, "campaignBonus" : "BoEup_2.pcx", "border" : "TOELUP_2.bmp", "area" : "TZELUP_2.bmp" }, + "dwellingUpLvl4": { "animation" : "TBELUP_3.def", "x" : 108, "y" : 131, "z" : 1, "campaignBonus" : "BoEup_3.pcx", "border" : "TOELUP_3.bmp", "area" : "TZELUP_3.bmp" }, + "dwellingUpLvl5": { "animation" : "TBELUP_4.def", "x" : 264, "y" : 168, "z" : 0, "campaignBonus" : "BoEup_4.pcx", "border" : "TOELUP_4.bmp", "area" : "TZELUP_4.bmp" }, + "dwellingUpLvl6": { "animation" : "TBELUP_5.def", "x" : 394, "y" : 283, "z" : 9, "campaignBonus" : "BoEup_5.pcx", "border" : "TOELUP_5.bmp", "area" : "TZELUP_5.bmp" }, + "dwellingUpLvl7": { "animation" : "TBELUP_6.def", "x" : 34, "y" : 0, "z" : 0, "campaignBonus" : "BoEup_6.pcx", "border" : "TOELUP_6.bmp", "area" : "TZELUP_6.bmp" } }, "musicTheme" : [ "music/ElemTown" ], @@ -178,7 +178,16 @@ "horde1": { "id" : 18, "upgrades" : "dwellingLvl1" }, "horde1Upgr": { "id" : 19, "upgrades" : "dwellingUpLvl1", "requires" : [ "horde1" ], "mode" : "auto" }, "ship": { "id" : 20, "upgrades" : "shipyard" }, - "special2": { "requires" : [ "mageGuild1" ], "marketModes" : ["resource-skill"] }, + "special2": { + "requires" : [ "mageGuild1" ], + "marketModes" : ["resource-skill"], + "marketOffer" : [ + "fireMagic", + "airMagic", + "waterMagic", + "earthMagic" + ] + }, "grail": { "id" : 26, "mode" : "grail", "produce": { "gold": 5000 }}, "extraTownHall": { "id" : 27, "requires" : [ "townHall" ], "mode" : "auto" }, "extraCityHall": { "id" : 28, "requires" : [ "cityHall" ], "mode" : "auto" }, diff --git a/config/factions/dungeon.json b/config/factions/dungeon.json index f4bf5670a..0f8de4794 100644 --- a/config/factions/dungeon.json +++ b/config/factions/dungeon.json @@ -80,43 +80,43 @@ }, "structures" : { - "mageGuild1": { "animation" : "TBDNMAGE.def", "x" : 164, "y" : 119, "z" : -1, "border" : "TODMAG1.bmp", "area" : "TZDMAG1.bmp" }, - "mageGuild2": { "animation" : "TBDNMAG2.def", "x" : 164, "y" : 97, "z" : -1, "border" : "TODMAG2.bmp", "area" : "TZDMAG2.bmp" }, - "mageGuild3": { "animation" : "TBDNMAG3.def", "x" : 164, "y" : 77, "z" : -1, "border" : "TODMAG3.bmp", "area" : "TZDMAG3.bmp" }, - "mageGuild4": { "animation" : "TBDNMAG4.def", "x" : 164, "y" : 61, "z" : -1, "border" : "TODMAG4.bmp", "area" : "TZDMAG4.bmp" }, - "mageGuild5": { "animation" : "TBDNMAG5.def", "x" : 164, "y" : 15, "z" : -1, "border" : "TODMAG5.bmp", "area" : "TZDMAG5.bmp" }, - "tavern": { "animation" : "TBDNTVRN.def", "x" : 211, "y" : 297, "border" : "TODTAV.bmp", "area" : "TZDTAV.bmp" }, - "fort": { "animation" : "TBDNCSTL.def", "x" : 363, "y" : 87, "z" : 2, "border" : "TODCAS1.bmp", "area" : "TZDCAS1.bmp" }, - "citadel": { "animation" : "TBDNCAS2.def", "x" : 363, "y" : 87, "z" : 2, "border" : "TODCAS2.bmp", "area" : "TZDCAS2.bmp" }, - "castle": { "animation" : "TBDNCAS3.def", "x" : 363, "y" : 87, "z" : 2, "border" : "TODCAS3.bmp", "area" : "TZDCAS3.bmp" }, - "villageHall": { "animation" : "TBDNHALL.def", "x" : 0, "y" : 234, "border" : "TODHALL1.bmp", "area" : "TZDHALL1.bmp" }, - "townHall": { "animation" : "TBDNHAL2.def", "x" : 0, "y" : 223, "border" : "TODHALL2.bmp", "area" : "TZDHALL2.bmp" }, - "cityHall": { "animation" : "TBDNHAL3.def", "x" : 0, "y" : 223, "border" : "TODHALL3.bmp", "area" : "TZDHALL3.bmp" }, - "capitol": { "animation" : "TBDNHAL4.def", "x" : 0, "y" : 203, "border" : "TODHALL4.bmp", "area" : "TZDHALL4.bmp" }, - "marketplace": { "animation" : "TBDNMARK.def", "x" : 590, "y" : 318, "z" : -2, "border" : "TODMARK.bmp", "area" : "TZDMARK.bmp" }, - "resourceSilo": { "animation" : "TBDNSILO.def", "x" : 624, "y" : 335, "z" : 1, "border" : "TODSILO.bmp", "area" : "TZDSILO.bmp" }, - "blacksmith": { "animation" : "TBDNBLAK.def", "x" : 544, "y" : 248, "z" : -3, "border" : "TODSMITH.bmp", "area" : "TZDSMITH.bmp" }, - "special1": { "animation" : "TBDNSPEC.def", "x" : 746, "y" : 294, "z" : 1, "border" : "TODART.bmp", "area" : "TZDART.bmp" }, - "horde1": { "animation" : "TBDNHRD1.def", "x" : 0, "y" : 326, "z" : 2, "border" : "TODTR1HA.bmp", "area" : "TZDTR1HA.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBDNHRD2.def", "x" : 0, "y" : 300, "z" : 2, "border" : "TODTR2HA.bmp", "area" : "TZDTR2HA.bmp", "hidden" : true, "builds" : "horde1" }, - "special2": { "animation" : "TBDNEXT0.def", "x" : 131, "y" : 26 , "border" : "TODVOR1A.bmp", "area" : "TZDVOR1A.bmp" }, - "special3": { "animation" : "TBDNEXT1.def", "x" : 687, "y" : 177, "border" : "TODPORTA.bmp", "area" : "TZDPORTA.bmp" }, - "special4": { "animation" : "TBDNEXT2.def", "x" : 313, "y" : 298, "border" : "TODACAD.bmp", "area" : "TZDACAD.bmp" }, - "grail": { "animation" : "TBDNHOLY.def", "x" : 562, "y" : 24, "z" : 1, "border" : "TODHOLY.bmp", "area" : "TZDHOLY.bmp" }, - "dwellingLvl1": { "animation" : "TBDNDW_0.def", "x" : 0, "y" : 326, "z" : 2, "border" : "TODTRG1A.bmp", "area" : "TZDTRG1A.bmp" }, - "dwellingLvl2": { "animation" : "TBDNDW_1.def", "x" : 0, "y" : 26, "border" : "TODHAR1.bmp", "area" : "TZDHAR1.bmp" }, - "dwellingLvl3": { "animation" : "TBDNDW_2.def", "x" : 118, "y" : 308, "z" : 1, "border" : "TODBEH1A.bmp", "area" : "TZDBEH1A.bmp" }, - "dwellingLvl4": { "animation" : "TBDNDW_3.def", "x" : 300, "y" : 29, "z" : -1, "border" : "TODMED1.bmp", "area" : "TZDMED1.bmp" }, - "dwellingLvl5": { "animation" : "TBDNDW_4.def", "x" : 551, "y" : 186, "z" : 1, "border" : "TODMIN1.bmp", "area" : "TZDMIN1.bmp" }, - "dwellingLvl6": { "animation" : "TBDNDW_5.def", "x" : 270, "y" : 253, "z" : -1, "border" : "TODMAN1.bmp", "area" : "TZDMAN1.bmp" }, - "dwellingLvl7": { "animation" : "TBDNDW_6.def", "x" : 550, "y" : 0, "z" : -1, "border" : "TODDRA1A.bmp", "area" : "TZDDRA1A.bmp" }, - "dwellingUpLvl1": { "animation" : "TBDNUP_0.def", "x" : 0, "y" : 300, "z" : 2, "border" : "TODTRG2A.bmp", "area" : "TZDTRG2A.bmp" }, - "dwellingUpLvl2": { "animation" : "TBDNUP_1.def", "x" : 0, "y" : 26, "border" : "TODHAR2.bmp", "area" : "TZDHAR2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBDNUP_2.def", "x" : 118, "y" : 256, "z" : 1, "border" : "TODBEH2A.bmp", "area" : "TZDBEH2A.bmp" }, - "dwellingUpLvl4": { "animation" : "TBDNUP_3.def", "x" : 300, "y" : 29, "z" : -1, "border" : "TODMED2.bmp", "area" : "TZDMED2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBDNUP_4.def", "x" : 519, "y" : 172, "z" : 1, "border" : "TODMIN2.bmp", "area" : "TZDMIN2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBDNUP_5.def", "x" : 270, "y" : 253, "z" : -1, "border" : "TODMAN2.bmp", "area" : "TZDMAN2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBDNUP_6.def", "x" : 550, "y" : 0, "z" : -1, "border" : "TODDRA2A.bmp", "area" : "TZDDRA2A.bmp" } + "mageGuild1": { "animation" : "TBDNMAGE.def", "x" : 164, "y" : 119, "z" : -1, "campaignBonus" : "BoDmage1.pcx", "border" : "TODMAG1.bmp", "area" : "TZDMAG1.bmp" }, + "mageGuild2": { "animation" : "TBDNMAG2.def", "x" : 164, "y" : 97, "z" : -1, "campaignBonus" : "BoDmage2.pcx", "border" : "TODMAG2.bmp", "area" : "TZDMAG2.bmp" }, + "mageGuild3": { "animation" : "TBDNMAG3.def", "x" : 164, "y" : 77, "z" : -1, "campaignBonus" : "BoDmage3.pcx", "border" : "TODMAG3.bmp", "area" : "TZDMAG3.bmp" }, + "mageGuild4": { "animation" : "TBDNMAG4.def", "x" : 164, "y" : 61, "z" : -1, "campaignBonus" : "BoDmage4.pcx", "border" : "TODMAG4.bmp", "area" : "TZDMAG4.bmp" }, + "mageGuild5": { "animation" : "TBDNMAG5.def", "x" : 164, "y" : 15, "z" : -1, "campaignBonus" : "BoDmage5.pcx", "border" : "TODMAG5.bmp", "area" : "TZDMAG5.bmp" }, + "tavern": { "animation" : "TBDNTVRN.def", "x" : 211, "y" : 297, "campaignBonus" : "BoDtav.pcx", "border" : "TODTAV.bmp", "area" : "TZDTAV.bmp" }, + "fort": { "animation" : "TBDNCSTL.def", "x" : 363, "y" : 87, "z" : 2, "campaignBonus" : "BoDcas1.pcx", "border" : "TODCAS1.bmp", "area" : "TZDCAS1.bmp" }, + "citadel": { "animation" : "TBDNCAS2.def", "x" : 363, "y" : 87, "z" : 2, "campaignBonus" : "BoDcas2.pcx", "border" : "TODCAS2.bmp", "area" : "TZDCAS2.bmp" }, + "castle": { "animation" : "TBDNCAS3.def", "x" : 363, "y" : 87, "z" : 2, "campaignBonus" : "BoDcas3.pcx", "border" : "TODCAS3.bmp", "area" : "TZDCAS3.bmp" }, + "villageHall": { "animation" : "TBDNHALL.def", "x" : 0, "y" : 234, "campaignBonus" : "BoDhall1.pcx", "border" : "TODHALL1.bmp", "area" : "TZDHALL1.bmp" }, + "townHall": { "animation" : "TBDNHAL2.def", "x" : 0, "y" : 223, "campaignBonus" : "BoDhall2.pcx", "border" : "TODHALL2.bmp", "area" : "TZDHALL2.bmp" }, + "cityHall": { "animation" : "TBDNHAL3.def", "x" : 0, "y" : 223, "campaignBonus" : "BoDhall3.pcx", "border" : "TODHALL3.bmp", "area" : "TZDHALL3.bmp" }, + "capitol": { "animation" : "TBDNHAL4.def", "x" : 0, "y" : 203, "campaignBonus" : "BoDhall4.pcx", "border" : "TODHALL4.bmp", "area" : "TZDHALL4.bmp" }, + "marketplace": { "animation" : "TBDNMARK.def", "x" : 590, "y" : 318, "z" : -2, "campaignBonus" : "BoDmark1.pcx", "border" : "TODMARK.bmp", "area" : "TZDMARK.bmp" }, + "resourceSilo": { "animation" : "TBDNSILO.def", "x" : 624, "y" : 335, "z" : 1, "campaignBonus" : "BoDmark2.pcx", "border" : "TODSILO.bmp", "area" : "TZDSILO.bmp" }, + "blacksmith": { "animation" : "TBDNBLAK.def", "x" : 544, "y" : 248, "z" : -3, "campaignBonus" : "BoDsmith.pcx", "border" : "TODSMITH.bmp", "area" : "TZDSMITH.bmp" }, + "special1": { "animation" : "TBDNSPEC.def", "x" : 746, "y" : 294, "z" : 1, "campaignBonus" : "BoDmarkA.pcx", "border" : "TODART.bmp", "area" : "TZDART.bmp" }, + "horde1": { "animation" : "TBDNHRD1.def", "x" : 0, "y" : 326, "z" : 2, "campaignBonus" : "BoDtrogH.pcx", "border" : "TODTR1HA.bmp", "area" : "TZDTR1HA.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBDNHRD2.def", "x" : 0, "y" : 300, "z" : 2, "campaignBonus" : "BoDtrogH.pcx", "border" : "TODTR2HA.bmp", "area" : "TZDTR2HA.bmp", "hidden" : true, "builds" : "horde1" }, + "special2": { "animation" : "TBDNEXT0.def", "x" : 131, "y" : 26 , "campaignBonus" : "BoDvort.pcx", "border" : "TODVOR1A.bmp", "area" : "TZDVOR1A.bmp" }, + "special3": { "animation" : "TBDNEXT1.def", "x" : 687, "y" : 177, "campaignBonus" : "BoDport.pcx", "border" : "TODPORTA.bmp", "area" : "TZDPORTA.bmp" }, + "special4": { "animation" : "TBDNEXT2.def", "x" : 313, "y" : 298, "campaignBonus" : "BoDacad.pcx", "border" : "TODACAD.bmp", "area" : "TZDACAD.bmp" }, + "grail": { "animation" : "TBDNHOLY.def", "x" : 562, "y" : 24, "z" : 1, "campaignBonus" : "BoDholy.pcx", "border" : "TODHOLY.bmp", "area" : "TZDHOLY.bmp" }, + "dwellingLvl1": { "animation" : "TBDNDW_0.def", "x" : 0, "y" : 326, "z" : 2, "campaignBonus" : "BoDtrog1.pcx", "border" : "TODTRG1A.bmp", "area" : "TZDTRG1A.bmp" }, + "dwellingLvl2": { "animation" : "TBDNDW_1.def", "x" : 0, "y" : 26, "campaignBonus" : "BoDharp1.pcx", "border" : "TODHAR1.bmp", "area" : "TZDHAR1.bmp" }, + "dwellingLvl3": { "animation" : "TBDNDW_2.def", "x" : 118, "y" : 308, "z" : 1, "campaignBonus" : "BoDbeh1.pcx", "border" : "TODBEH1A.bmp", "area" : "TZDBEH1A.bmp" }, + "dwellingLvl4": { "animation" : "TBDNDW_3.def", "x" : 300, "y" : 29, "z" : -1, "campaignBonus" : "BoDmedu1.pcx", "border" : "TODMED1.bmp", "area" : "TZDMED1.bmp" }, + "dwellingLvl5": { "animation" : "TBDNDW_4.def", "x" : 551, "y" : 186, "z" : 1, "campaignBonus" : "BoDmino1.pcx", "border" : "TODMIN1.bmp", "area" : "TZDMIN1.bmp" }, + "dwellingLvl6": { "animation" : "TBDNDW_5.def", "x" : 270, "y" : 253, "z" : -1, "campaignBonus" : "BoDmant1.pcx", "border" : "TODMAN1.bmp", "area" : "TZDMAN1.bmp" }, + "dwellingLvl7": { "animation" : "TBDNDW_6.def", "x" : 550, "y" : 0, "z" : -1, "campaignBonus" : "BoDdrag1.pcx", "border" : "TODDRA1A.bmp", "area" : "TZDDRA1A.bmp" }, + "dwellingUpLvl1": { "animation" : "TBDNUP_0.def", "x" : 0, "y" : 300, "z" : 2, "campaignBonus" : "BoDtrog2.pcx", "border" : "TODTRG2A.bmp", "area" : "TZDTRG2A.bmp" }, + "dwellingUpLvl2": { "animation" : "TBDNUP_1.def", "x" : 0, "y" : 26, "campaignBonus" : "BoDharp2.pcx", "border" : "TODHAR2.bmp", "area" : "TZDHAR2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBDNUP_2.def", "x" : 118, "y" : 256, "z" : 1, "campaignBonus" : "BoDbeh2.pcx", "border" : "TODBEH2A.bmp", "area" : "TZDBEH2A.bmp" }, + "dwellingUpLvl4": { "animation" : "TBDNUP_3.def", "x" : 300, "y" : 29, "z" : -1, "campaignBonus" : "BoDmedu2.pcx", "border" : "TODMED2.bmp", "area" : "TZDMED2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBDNUP_4.def", "x" : 519, "y" : 172, "z" : 1, "campaignBonus" : "BoDmino2.pcx", "border" : "TODMIN2.bmp", "area" : "TZDMIN2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBDNUP_5.def", "x" : 270, "y" : 253, "z" : -1, "campaignBonus" : "BoDmant2.pcx", "border" : "TODMAN2.bmp", "area" : "TZDMAN2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBDNUP_6.def", "x" : 550, "y" : 0, "z" : -1, "campaignBonus" : "BoDdrag2.pcx", "border" : "TODDRA2A.bmp", "area" : "TZDDRA2A.bmp" } }, "musicTheme" : [ "music/Dungeon" ], diff --git a/config/factions/fortress.json b/config/factions/fortress.json index 545fe44a9..d401c39a8 100644 --- a/config/factions/fortress.json +++ b/config/factions/fortress.json @@ -80,43 +80,43 @@ "structures" : { "extraAnimation": { "animation" : "TBFREXT2.def", "x" : 372, "y" : 227, "z" : -1 }, - "mageGuild1": { "animation" : "TBFRMAGE.def", "x" : 0, "y" : 200, "z" : -1, "border" : "TOFMAG1A.bmp", "area" : "TZFMAG1A.bmp" }, - "mageGuild2": { "animation" : "TBFRMAG2.def", "x" : 0, "y" : 177, "z" : -1, "border" : "TOFMAG2A.bmp", "area" : "TZFMAG2A.bmp" }, - "mageGuild3": { "animation" : "TBFRMAG3.def", "x" : 0, "y" : 135, "z" : -1, "border" : "TOFMAG3A.bmp", "area" : "TZFMAG3A.bmp" }, - "tavern": { "animation" : "TBFRTVRN.def", "x" : 634, "y" : 219, "z" : 3, "border" : "TOFTAVA.bmp", "area" : "TZFTAVA.bmp" }, - "shipyard": { "animation" : "TBFRDOCK.def", "x" : 197, "y" : 294, "z" : 1, "border" : "TOFDCK2.bmp", "area" : "TZFDCK2.bmp" }, - "fort": { "animation" : "TBFRCSTL.def", "x" : 368, "y" : 118, "z" : -2, "border" : "TOFCAS1.bmp", "area" : "TZFCAS1.bmp" }, - "citadel": { "animation" : "TBFRCAS2.def", "x" : 368, "y" : 98, "z" : -2, "border" : "TOFCAS2.bmp", "area" : "TZFCAS2.bmp" }, - "castle": { "animation" : "TBFRCAS3.def", "x" : 368, "y" : 55, "z" : -2, "border" : "TOFCAS3.bmp", "area" : "TZFCAS3.bmp" }, - "villageHall": { "animation" : "TBFRHALL.def", "x" : 166, "y" : 128, "z" : 3, "border" : "TOFHAL1.bmp", "area" : "TZFHAL1.bmp" }, - "townHall": { "animation" : "TBFRHAL2.def", "x" : 166, "y" : 97, "z" : 3, "border" : "TOFHAL2.bmp", "area" : "TZFHAL2.bmp" }, - "cityHall": { "animation" : "TBFRHAL3.def", "x" : 166, "y" : 51, "z" : 3, "border" : "TOFHAL3.bmp", "area" : "TZFHAL3.bmp" }, - "capitol": { "animation" : "TBFRHAL4.def", "x" : 166, "y" : 2, "z" : 3, "border" : "TOFHAL4.bmp", "area" : "TZFHAL4.bmp" }, - "marketplace": { "animation" : "TBFRMARK.def", "x" : 382, "y" : 219, "z" : 4, "border" : "TOFMRKAA.bmp", "area" : "TZFMRKAA.bmp" }, - "resourceSilo": { "animation" : "TBFRSILO.def", "x" : 448, "y" : 210, "z" : 2, "border" : "TOFMRK2A.bmp", "area" : "TZFMRK2A.bmp" }, - "blacksmith": { "animation" : "TBFRBLAK.def", "x" : 360, "y" : 160, "z" : 1, "border" : "TOFAIDA.bmp", "area" : "TZFAIDA.bmp" }, - "special1": { "animation" : "TBFRSPEC.def", "x" : 703, "y" : 36, "border" : "TOFCAGE.bmp", "area" : "TZFCAGE.bmp" }, - "horde1": { "animation" : "TBFRHRD1.def", "x" : 641, "y" : 121, "z" : 1, "border" : "TOFGNL1H.bmp", "area" : "TZFGNL1H.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBFRHRD2.def", "x" : 641, "y" : 68, "z" : 1, "border" : "TOFGNL2H.bmp", "area" : "TZFGNL2H.bmp", "hidden" : true, "builds" : "horde1" }, + "mageGuild1": { "animation" : "TBFRMAGE.def", "x" : 0, "y" : 200, "z" : -1, "campaignBonus" : "BoFmage1.pcx", "border" : "TOFMAG1A.bmp", "area" : "TZFMAG1A.bmp" }, + "mageGuild2": { "animation" : "TBFRMAG2.def", "x" : 0, "y" : 177, "z" : -1, "campaignBonus" : "BoFmage2.pcx", "border" : "TOFMAG2A.bmp", "area" : "TZFMAG2A.bmp" }, + "mageGuild3": { "animation" : "TBFRMAG3.def", "x" : 0, "y" : 135, "z" : -1, "campaignBonus" : "BoFmage3.pcx", "border" : "TOFMAG3A.bmp", "area" : "TZFMAG3A.bmp" }, + "tavern": { "animation" : "TBFRTVRN.def", "x" : 634, "y" : 219, "z" : 3, "campaignBonus" : "BoFtav.pcx", "border" : "TOFTAVA.bmp", "area" : "TZFTAVA.bmp" }, + "shipyard": { "animation" : "TBFRDOCK.def", "x" : 197, "y" : 294, "z" : 1, "campaignBonus" : "BoFship.pcx", "border" : "TOFDCK2.bmp", "area" : "TZFDCK2.bmp" }, + "fort": { "animation" : "TBFRCSTL.def", "x" : 368, "y" : 118, "z" : -2, "campaignBonus" : "BoFcast1.pcx", "border" : "TOFCAS1.bmp", "area" : "TZFCAS1.bmp" }, + "citadel": { "animation" : "TBFRCAS2.def", "x" : 368, "y" : 98, "z" : -2, "campaignBonus" : "BoFcast2.pcx", "border" : "TOFCAS2.bmp", "area" : "TZFCAS2.bmp" }, + "castle": { "animation" : "TBFRCAS3.def", "x" : 368, "y" : 55, "z" : -2, "campaignBonus" : "BoFcast3.pcx", "border" : "TOFCAS3.bmp", "area" : "TZFCAS3.bmp" }, + "villageHall": { "animation" : "TBFRHALL.def", "x" : 166, "y" : 128, "z" : 3, "campaignBonus" : "BoFhall1.pcx", "border" : "TOFHAL1.bmp", "area" : "TZFHAL1.bmp" }, + "townHall": { "animation" : "TBFRHAL2.def", "x" : 166, "y" : 97, "z" : 3, "campaignBonus" : "BoFhall2.pcx", "border" : "TOFHAL2.bmp", "area" : "TZFHAL2.bmp" }, + "cityHall": { "animation" : "TBFRHAL3.def", "x" : 166, "y" : 51, "z" : 3, "campaignBonus" : "BoFhall3.pcx", "border" : "TOFHAL3.bmp", "area" : "TZFHAL3.bmp" }, + "capitol": { "animation" : "TBFRHAL4.def", "x" : 166, "y" : 2, "z" : 3, "campaignBonus" : "BoFhall4.pcx", "border" : "TOFHAL4.bmp", "area" : "TZFHAL4.bmp" }, + "marketplace": { "animation" : "TBFRMARK.def", "x" : 382, "y" : 219, "z" : 4, "campaignBonus" : "BoFmark1.pcx", "border" : "TOFMRKAA.bmp", "area" : "TZFMRKAA.bmp" }, + "resourceSilo": { "animation" : "TBFRSILO.def", "x" : 448, "y" : 210, "z" : 2, "campaignBonus" : "BoFmark2.pcx", "border" : "TOFMRK2A.bmp", "area" : "TZFMRK2A.bmp" }, + "blacksmith": { "animation" : "TBFRBLAK.def", "x" : 360, "y" : 160, "z" : 1, "campaignBonus" : "BoFapoth.pcx", "border" : "TOFAIDA.bmp", "area" : "TZFAIDA.bmp" }, + "special1": { "animation" : "TBFRSPEC.def", "x" : 703, "y" : 36, "campaignBonus" : "BoFcage.pcx", "border" : "TOFCAGE.bmp", "area" : "TZFCAGE.bmp" }, + "horde1": { "animation" : "TBFRHRD1.def", "x" : 641, "y" : 121, "z" : 1, "campaignBonus" : "BoFgno1h.pcx", "border" : "TOFGNL1H.bmp", "area" : "TZFGNL1H.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBFRHRD2.def", "x" : 641, "y" : 68, "z" : 1, "campaignBonus" : "BoFgno2h.pcx", "border" : "TOFGNL2H.bmp", "area" : "TZFGNL2H.bmp", "hidden" : true, "builds" : "horde1" }, "ship": { "animation" : "TBFRBOAT.def", "x" : 197, "y" : 294, "z" : 1, "border" : "TOFDCK1.bmp", "area" : "TZFDCK1.bmp", "hidden" : true }, - "special2": { "animation" : "TBFREXT0.def", "x" : 341, "y" : 174, "z" : 0, "border" : "TOFCASD.bmp", "area" : "TZFCASD.bmp" }, - "special3": { "animation" : "TBFREXT1.def", "x" : 349, "y" : 79, "z" : -3, "border" : "TOFCASA.bmp", "area" : "TZFCASA.bmp" }, - "grail": { "animation" : "TBFRHOLY.def", "x" : 468, "y" : 260, "z" : 5, "border" : "TOFHLYAA.bmp", "area" : "TZFHLYAA.bmp" }, + "special2": { "animation" : "TBFREXT0.def", "x" : 341, "y" : 174, "z" : 0, "campaignBonus" : "BoFcastD.pcx", "border" : "TOFCASD.bmp", "area" : "TZFCASD.bmp" }, + "special3": { "animation" : "TBFREXT1.def", "x" : 349, "y" : 79, "z" : -3, "campaignBonus" : "BoFcastA.pcx", "border" : "TOFCASA.bmp", "area" : "TZFCASA.bmp" }, + "grail": { "animation" : "TBFRHOLY.def", "x" : 468, "y" : 260, "z" : 5, "campaignBonus" : "BoFgrail.pcx", "border" : "TOFHLYAA.bmp", "area" : "TZFHLYAA.bmp" }, "extraCapitol": { "animation" : "TBFRWTRW.def", "x" : 320, "y" : 141, "z" : 2 }, - "dwellingLvl1": { "animation" : "TBFRDW_0.def", "x" : 641, "y" : 168, "z" : 1, "border" : "TOFGNL1.bmp", "area" : "TZFGNL1.bmp" }, - "dwellingLvl2": { "animation" : "TBFRDW_1.def", "x" : 141, "y" : 178, "border" : "TOFLIZ1.bmp", "area" : "TZFLIZ1.bmp" }, - "dwellingLvl3": { "animation" : "TBFRDW_3.def", "x" : 192, "y" : 85, "border" : "TOFFLY1A.bmp", "area" : "TZFFLY1A.bmp" }, - "dwellingLvl4": { "animation" : "TBFRDW_4.def", "x" : 0, "y" : 292, "z" : 1, "border" : "TOFBAS1.bmp", "area" : "TZFBAS1.bmp" }, - "dwellingLvl5": { "animation" : "TBFRDW_2.def", "x" : 15, "y" : 127, "z" : -2, "border" : "TOFGOR1.bmp", "area" : "TZFGOR1.bmp" }, - "dwellingLvl6": { "animation" : "TBFRDW_5.def", "x" : 0, "y" : 4, "border" : "TOFWYV1.bmp", "area" : "TZFWYV1.bmp" }, - "dwellingLvl7": { "animation" : "TBFRDW_6.def", "x" : 612, "y" : 291, "z" : 5, "border" : "TOFHYD1A.bmp", "area" : "TZFHYD1A.bmp" }, - "dwellingUpLvl1": { "animation" : "TBFRUP_0.def", "x" : 641, "y" : 107, "z" : 1, "border" : "TOFGNL2.bmp", "area" : "TZFGNL2.bmp" }, - "dwellingUpLvl2": { "animation" : "TBFRUP_1.def", "x" : 125, "y" : 163, "border" : "TOFLIZ2.bmp", "area" : "TZFLIZ2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBFRUP_3.def", "x" : 159, "y" : 19, "border" : "TOFFLY2A.bmp", "area" : "TZFFLY2A.bmp" }, - "dwellingUpLvl4": { "animation" : "TBFRUP_4.def", "x" : 0, "y" : 257, "z" : 1, "border" : "TOFBAS2.bmp", "area" : "TZFBAS2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBFRUP_2.def", "x" : 15, "y" : 69, "z" : -2, "border" : "TOFGOR2.bmp", "area" : "TZFGOR2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBFRUP_5.def", "x" : 0, "y" : 4, "border" : "TOFWYV2.bmp", "area" : "TZFWYV2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBFRUP_6.def", "x" : 587, "y" : 263, "z" : 5, "border" : "TOFHYD2A.bmp", "area" : "TZFHYD2A.bmp" } + "dwellingLvl1": { "animation" : "TBFRDW_0.def", "x" : 641, "y" : 168, "z" : 1, "campaignBonus" : "BoFgnol1.pcx", "border" : "TOFGNL1.bmp", "area" : "TZFGNL1.bmp" }, + "dwellingLvl2": { "animation" : "TBFRDW_1.def", "x" : 141, "y" : 178, "campaignBonus" : "BoFlizr1.pcx", "border" : "TOFLIZ1.bmp", "area" : "TZFLIZ1.bmp" }, + "dwellingLvl3": { "animation" : "TBFRDW_3.def", "x" : 192, "y" : 85, "campaignBonus" : "BoFfly1.pcx", "border" : "TOFFLY1A.bmp", "area" : "TZFFLY1A.bmp" }, + "dwellingLvl4": { "animation" : "TBFRDW_4.def", "x" : 0, "y" : 292, "z" : 1, "campaignBonus" : "BoFbas1.pcx", "border" : "TOFBAS1.bmp", "area" : "TZFBAS1.bmp" }, + "dwellingLvl5": { "animation" : "TBFRDW_2.def", "x" : 15, "y" : 127, "z" : -2, "campaignBonus" : "BoFgorg1.pcx", "border" : "TOFGOR1.bmp", "area" : "TZFGOR1.bmp" }, + "dwellingLvl6": { "animation" : "TBFRDW_5.def", "x" : 0, "y" : 4, "campaignBonus" : "BoFwyvr1.pcx", "border" : "TOFWYV1.bmp", "area" : "TZFWYV1.bmp" }, + "dwellingLvl7": { "animation" : "TBFRDW_6.def", "x" : 612, "y" : 291, "z" : 5, "campaignBonus" : "BoFhydr1.pcx", "border" : "TOFHYD1A.bmp", "area" : "TZFHYD1A.bmp" }, + "dwellingUpLvl1": { "animation" : "TBFRUP_0.def", "x" : 641, "y" : 107, "z" : 1, "campaignBonus" : "BoFgnol2.pcx", "border" : "TOFGNL2.bmp", "area" : "TZFGNL2.bmp" }, + "dwellingUpLvl2": { "animation" : "TBFRUP_1.def", "x" : 125, "y" : 163, "campaignBonus" : "BoFlizr2.pcx", "border" : "TOFLIZ2.bmp", "area" : "TZFLIZ2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBFRUP_3.def", "x" : 159, "y" : 19, "campaignBonus" : "BoFfly2.pcx", "border" : "TOFFLY2A.bmp", "area" : "TZFFLY2A.bmp" }, + "dwellingUpLvl4": { "animation" : "TBFRUP_4.def", "x" : 0, "y" : 257, "z" : 1, "campaignBonus" : "BoFbas2.pcx", "border" : "TOFBAS2.bmp", "area" : "TZFBAS2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBFRUP_2.def", "x" : 15, "y" : 69, "z" : -2, "campaignBonus" : "BoFgorg2.pcx", "border" : "TOFGOR2.bmp", "area" : "TZFGOR2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBFRUP_5.def", "x" : 0, "y" : 4, "campaignBonus" : "BoFwyvr2.pcx", "border" : "TOFWYV2.bmp", "area" : "TZFWYV2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBFRUP_6.def", "x" : 587, "y" : 263, "z" : 5, "campaignBonus" : "BoFhydr2.pcx", "border" : "TOFHYD2A.bmp", "area" : "TZFHYD2A.bmp" } }, "musicTheme" : [ "music/FortressTown" ], diff --git a/config/factions/inferno.json b/config/factions/inferno.json index 813f392aa..6963fea74 100644 --- a/config/factions/inferno.json +++ b/config/factions/inferno.json @@ -80,44 +80,44 @@ }, "structures" : { - "mageGuild1": { "animation" : "TBINMAGE.def", "x" : 667, "y" : 127, "border" : "TOIMAG1A.bmp", "area" : "TZIMAG1A.bmp" }, - "mageGuild2": { "animation" : "TBINMAG2.def", "x" : 667, "y" : 101, "border" : "TOIMAG2A.bmp", "area" : "TZIMAG2A.bmp" }, - "mageGuild3": { "animation" : "TBINMAG3.def", "x" : 667, "y" : 83, "border" : "TOIMAG3A.bmp", "area" : "TZIMAG3A.bmp" }, - "mageGuild4": { "animation" : "TBINMAG4.def", "x" : 667, "y" : 56, "border" : "TOIMAG4A.bmp", "area" : "TZIMAG4A.bmp" }, - "mageGuild5": { "animation" : "TBINMAG5.def", "x" : 667, "y" : 35, "border" : "TOIMAG5A.bmp", "area" : "TZIMAG5A.bmp" }, - "tavern": { "animation" : "TBINTVRN.def", "x" : 105, "y" : 219, "z" : 1, "border" : "TOITAV.bmp", "area" : "TZITAV.bmp" }, - "fort": { "animation" : "TBINCSTL.def", "x" : 222, "y" : 44, "z" : -2, "border" : "TOICAS2A.bmp", "area" : "TZICAS2A.bmp" }, - "citadel": { "animation" : "TBINCAS2.def", "x" : 222, "y" : 44, "z" : -2, "border" : "TOICAS1A.bmp", "area" : "TZICAS1A.bmp" }, - "castle": { "animation" : "TBINCAS3.def", "x" : 222, "y" : 18, "z" : -2, "border" : "TOICAS3A.bmp", "area" : "TZICAS3A.bmp" }, - "villageHall": { "animation" : "TBINHALL.def", "x" : 0, "y" : 174, "border" : "TOIHAL1.bmp", "area" : "TZIHAL1.bmp" }, - "townHall": { "animation" : "TBINHAL2.def", "x" : 0, "y" : 174, "border" : "TOIHAL2.bmp", "area" : "TZIHAL2.bmp" }, - "cityHall": { "animation" : "TBINHAL3.def", "x" : 0, "y" : 174, "border" : "TOIHAL3.bmp", "area" : "TZIHAL3.bmp" }, - "capitol": { "animation" : "TBINHAL4.def", "x" : 0, "y" : 131, "border" : "TOIHAL4.bmp", "area" : "TZIHAL4.bmp" }, - "marketplace": { "animation" : "TBINMARK.def", "x" : 511, "y" : 301, "z" : 4, "border" : "TOIMAR1.bmp", "area" : "TZIMAR1.bmp" }, - "resourceSilo": { "animation" : "TBINSILO.def", "x" : 497, "y" : 337, "z" : 5, "border" : "TOIMAR2.bmp", "area" : "TZIMAR2.bmp" }, - "blacksmith": { "animation" : "TBINBLAK.def", "x" : 684, "y" : 253, "z" : 1, "border" : "TOIBLKA.bmp", "area" : "TZIBLKA.bmp" }, - "horde1": { "animation" : "TBINHRD1.def", "x" : 614, "y" : 256, "border" : "TOIMP1HA.bmp", "area" : "TZIMP1HA.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBINHRD2.def", "x" : 614, "y" : 221, "border" : "TOIMP2HA.bmp", "area" : "TZIMP2HA.bmp", "hidden" : true, "builds" : "horde1" }, - "special2": { "animation" : "TBINEXT0.def", "x" : 297, "y" : 0, "z" : -4, "border" : "TOICAB1A.bmp", "area" : "TZICAB1A.bmp" }, - "special3": { "animation" : "TBINEXT1.def", "x" : 227, "y" : 174, "z" : -1, "border" : "TOICASGA.bmp", "area" : "TZICASGA.bmp" }, - "special4": { "animation" : "TBINEXT2.def", "x" : 593, "y" : 104, "z" : -1, "border" : "TOIPAIN.bmp", "area" : "TZIPAIN.bmp" }, - "horde2": { "animation" : "TBINHRD3.def", "x" : 10, "y" : 301, "border" : "TOIHND1H.bmp", "area" : "TZIHND1H.bmp", "hidden" : true }, - "horde2Upgr": { "animation" : "TBINHRD4.def", "x" : 9, "y" : 273, "border" : "TOIHND2H.bmp", "area" : "TZIHND2H.bmp", "hidden" : true, "builds" : "horde2" }, - "grail": { "animation" : "TBINHOLY.def", "x" : 24, "y" : 10, "z" : -1, "border" : "TOIHOLY.bmp", "area" : "TZIHOLY.bmp" }, - "dwellingLvl1": { "animation" : "TBINDW_0.def", "x" : 614, "y" : 256, "border" : "TOIMP1A.bmp", "area" : "TZIMP1A.bmp" }, - "dwellingLvl2": { "animation" : "TBINDW_1.def", "x" : 187, "y" : 248, "z" : 4, "border" : "TOIGOG1A.bmp", "area" : "TZIGOG1A.bmp" }, - "dwellingLvl3": { "animation" : "TBINDW_2.def", "x" : 9, "y" : 325, "border" : "TOIHND1.bmp", "area" : "TZIHND1.bmp" }, - "dwellingLvl4": { "animation" : "TBINDW_3.def", "x" : 414, "y" : 204, "z" : 2, "border" : "TOIDMN1.bmp", "area" : "TZIDMN1.bmp" }, - "dwellingLvl5": { "animation" : "TBINDW_4.def", "x" : 359, "y" : 296, "z" : 3, "border" : "TOIPIT1.bmp", "area" : "TZIPIT1.bmp" }, - "dwellingLvl6": { "animation" : "TBINDW_5.def", "x" : 220, "y" : 350, "z" : 5, "border" : "TOIEFR1.bmp", "area" : "TZIEFR1.bmp" }, - "dwellingLvl7": { "animation" : "TBINDW_6.def", "x" : 420, "y" : 153, "z" : -3, "border" : "TOIDVL1.bmp", "area" : "TZIDVL1.bmp" }, - "dwellingUpLvl1": { "animation" : "TBINUP_0.def", "x" : 614, "y" : 221, "border" : "TOIMP2A.bmp", "area" : "TZIMP2A.bmp" }, - "dwellingUpLvl2": { "animation" : "TBINUP_1.def", "x" : 187, "y" : 212, "z" : 4, "border" : "TOIGOG2A.bmp", "area" : "TZIGOG2A.bmp" }, - "dwellingUpLvl3": { "animation" : "TBINUP_2.def", "x" : 9, "y" : 273, "border" : "TOIHND2.bmp", "area" : "TZIHND2.bmp" }, - "dwellingUpLvl4": { "animation" : "TBINUP_3.def", "x" : 412, "y" : 197, "z" : 2, "border" : "TOIDMN2.bmp", "area" : "TZIDMN2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBINUP_4.def", "x" : 359, "y" : 244, "z" : 3, "border" : "TOIPIT2.bmp", "area" : "TZIPIT2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBINUP_5.def", "x" : 220, "y" : 282, "z" : 5, "border" : "TOIEFR2.bmp", "area" : "TZIEFR2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBINUP_6.def", "x" : 420, "y" : 105, "z" : -3, "border" : "TOIDVL2.bmp", "area" : "TZIDVL2.bmp" } + "mageGuild1": { "animation" : "TBINMAGE.def", "x" : 667, "y" : 127, "campaignBonus" : "BoIMag1.pcx", "border" : "TOIMAG1A.bmp", "area" : "TZIMAG1A.bmp" }, + "mageGuild2": { "animation" : "TBINMAG2.def", "x" : 667, "y" : 101, "campaignBonus" : "BoIMag2.pcx", "border" : "TOIMAG2A.bmp", "area" : "TZIMAG2A.bmp" }, + "mageGuild3": { "animation" : "TBINMAG3.def", "x" : 667, "y" : 83, "campaignBonus" : "BoIMag3.pcx", "border" : "TOIMAG3A.bmp", "area" : "TZIMAG3A.bmp" }, + "mageGuild4": { "animation" : "TBINMAG4.def", "x" : 667, "y" : 56, "campaignBonus" : "BoIMag4.pcx", "border" : "TOIMAG4A.bmp", "area" : "TZIMAG4A.bmp" }, + "mageGuild5": { "animation" : "TBINMAG5.def", "x" : 667, "y" : 35, "campaignBonus" : "BoIMag5.pcx", "border" : "TOIMAG5A.bmp", "area" : "TZIMAG5A.bmp" }, + "tavern": { "animation" : "TBINTVRN.def", "x" : 105, "y" : 219, "z" : 1, "campaignBonus" : "BoITav.pcx", "border" : "TOITAV.bmp", "area" : "TZITAV.bmp" }, + "fort": { "animation" : "TBINCSTL.def", "x" : 222, "y" : 44, "z" : -2, "campaignBonus" : "BoICas1.pcx", "border" : "TOICAS2A.bmp", "area" : "TZICAS2A.bmp" }, + "citadel": { "animation" : "TBINCAS2.def", "x" : 222, "y" : 44, "z" : -2, "campaignBonus" : "BoICas2.pcx", "border" : "TOICAS1A.bmp", "area" : "TZICAS1A.bmp" }, + "castle": { "animation" : "TBINCAS3.def", "x" : 222, "y" : 18, "z" : -2, "campaignBonus" : "BoICas3.pcx", "border" : "TOICAS3A.bmp", "area" : "TZICAS3A.bmp" }, + "villageHall": { "animation" : "TBINHALL.def", "x" : 0, "y" : 174, "campaignBonus" : "BoIHal1.pcx", "border" : "TOIHAL1.bmp", "area" : "TZIHAL1.bmp" }, + "townHall": { "animation" : "TBINHAL2.def", "x" : 0, "y" : 174, "campaignBonus" : "BoIHal2.pcx", "border" : "TOIHAL2.bmp", "area" : "TZIHAL2.bmp" }, + "cityHall": { "animation" : "TBINHAL3.def", "x" : 0, "y" : 174, "campaignBonus" : "BoIHal3.pcx", "border" : "TOIHAL3.bmp", "area" : "TZIHAL3.bmp" }, + "capitol": { "animation" : "TBINHAL4.def", "x" : 0, "y" : 131, "campaignBonus" : "BoIHal4.pcx", "border" : "TOIHAL4.bmp", "area" : "TZIHAL4.bmp" }, + "marketplace": { "animation" : "TBINMARK.def", "x" : 511, "y" : 301, "z" : 4, "campaignBonus" : "BoIMrk1.pcx", "border" : "TOIMAR1.bmp", "area" : "TZIMAR1.bmp" }, + "resourceSilo": { "animation" : "TBINSILO.def", "x" : 497, "y" : 337, "z" : 5, "campaignBonus" : "BoIMrk2.pcx", "border" : "TOIMAR2.bmp", "area" : "TZIMAR2.bmp" }, + "blacksmith": { "animation" : "TBINBLAK.def", "x" : 684, "y" : 253, "z" : 1, "campaignBonus" : "BoIBlak.pcx", "border" : "TOIBLKA.bmp", "area" : "TZIBLKA.bmp" }, + "horde1": { "animation" : "TBINHRD1.def", "x" : 614, "y" : 256, "campaignBonus" : "BoIImpH.pcx", "border" : "TOIMP1HA.bmp", "area" : "TZIMP1HA.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBINHRD2.def", "x" : 614, "y" : 221, "campaignBonus" : "BoIImp2H.pcx", "border" : "TOIMP2HA.bmp", "area" : "TZIMP2HA.bmp", "hidden" : true, "builds" : "horde1" }, + "special2": { "animation" : "TBINEXT0.def", "x" : 297, "y" : 0, "z" : -4, "campaignBonus" : "BoICasB.pcx", "border" : "TOICAB1A.bmp", "area" : "TZICAB1A.bmp" }, + "special3": { "animation" : "TBINEXT1.def", "x" : 227, "y" : 174, "z" : -1, "campaignBonus" : "BoICasG.pcx", "border" : "TOICASGA.bmp", "area" : "TZICASGA.bmp" }, + "special4": { "animation" : "TBINEXT2.def", "x" : 593, "y" : 104, "z" : -1, "campaignBonus" : "BoIMagO.pcx", "border" : "TOIPAIN.bmp", "area" : "TZIPAIN.bmp" }, + "horde2": { "animation" : "TBINHRD3.def", "x" : 10, "y" : 301, "campaignBonus" : "BoIHndH.pcx", "border" : "TOIHND1H.bmp", "area" : "TZIHND1H.bmp", "hidden" : true }, + "horde2Upgr": { "animation" : "TBINHRD4.def", "x" : 9, "y" : 273, "campaignBonus" : "BoIHnd2H.pcx", "border" : "TOIHND2H.bmp", "area" : "TZIHND2H.bmp", "hidden" : true, "builds" : "horde2" }, + "grail": { "animation" : "TBINHOLY.def", "x" : 24, "y" : 10, "z" : -1, "campaignBonus" : "BoIHoly.pcx", "border" : "TOIHOLY.bmp", "area" : "TZIHOLY.bmp" }, + "dwellingLvl1": { "animation" : "TBINDW_0.def", "x" : 614, "y" : 256, "campaignBonus" : "BoIImp1.pcx", "border" : "TOIMP1A.bmp", "area" : "TZIMP1A.bmp" }, + "dwellingLvl2": { "animation" : "TBINDW_1.def", "x" : 187, "y" : 248, "z" : 4, "campaignBonus" : "BoIGog1.pcx", "border" : "TOIGOG1A.bmp", "area" : "TZIGOG1A.bmp" }, + "dwellingLvl3": { "animation" : "TBINDW_2.def", "x" : 9, "y" : 325, "campaignBonus" : "BoIHnd1.pcx", "border" : "TOIHND1.bmp", "area" : "TZIHND1.bmp" }, + "dwellingLvl4": { "animation" : "TBINDW_3.def", "x" : 414, "y" : 204, "z" : 2, "campaignBonus" : "BoIDmn1.pcx", "border" : "TOIDMN1.bmp", "area" : "TZIDMN1.bmp" }, + "dwellingLvl5": { "animation" : "TBINDW_4.def", "x" : 359, "y" : 296, "z" : 3, "campaignBonus" : "BoIPit1.pcx", "border" : "TOIPIT1.bmp", "area" : "TZIPIT1.bmp" }, + "dwellingLvl6": { "animation" : "TBINDW_5.def", "x" : 220, "y" : 350, "z" : 5, "campaignBonus" : "BoIEfr1.pcx", "border" : "TOIEFR1.bmp", "area" : "TZIEFR1.bmp" }, + "dwellingLvl7": { "animation" : "TBINDW_6.def", "x" : 420, "y" : 153, "z" : -3, "campaignBonus" : "BoIDvl1.pcx", "border" : "TOIDVL1.bmp", "area" : "TZIDVL1.bmp" }, + "dwellingUpLvl1": { "animation" : "TBINUP_0.def", "x" : 614, "y" : 221, "campaignBonus" : "BoIImp2.pcx", "border" : "TOIMP2A.bmp", "area" : "TZIMP2A.bmp" }, + "dwellingUpLvl2": { "animation" : "TBINUP_1.def", "x" : 187, "y" : 212, "z" : 4, "campaignBonus" : "BoIGog2.pcx", "border" : "TOIGOG2A.bmp", "area" : "TZIGOG2A.bmp" }, + "dwellingUpLvl3": { "animation" : "TBINUP_2.def", "x" : 9, "y" : 273, "campaignBonus" : "BoIHnd2.pcx", "border" : "TOIHND2.bmp", "area" : "TZIHND2.bmp" }, + "dwellingUpLvl4": { "animation" : "TBINUP_3.def", "x" : 412, "y" : 197, "z" : 2, "campaignBonus" : "BoIDmn2.pcx", "border" : "TOIDMN2.bmp", "area" : "TZIDMN2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBINUP_4.def", "x" : 359, "y" : 244, "z" : 3, "campaignBonus" : "BoIPit2.pcx", "border" : "TOIPIT2.bmp", "area" : "TZIPIT2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBINUP_5.def", "x" : 220, "y" : 282, "z" : 5, "campaignBonus" : "BoIEfr2.pcx", "border" : "TOIEFR2.bmp", "area" : "TZIEFR2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBINUP_6.def", "x" : 420, "y" : 105, "z" : -3, "campaignBonus" : "BoIDvl2.pcx", "border" : "TOIDVL2.bmp", "area" : "TZIDVL2.bmp" } }, "musicTheme" : [ "music/InfernoTown" ], diff --git a/config/factions/necropolis.json b/config/factions/necropolis.json index 21ac9c5e9..6cc148671 100644 --- a/config/factions/necropolis.json +++ b/config/factions/necropolis.json @@ -81,47 +81,47 @@ "structures" : { "extraAnimation": { "animation" : "TBNCEXT2.def", "x" : 25, "y" : 279, "z" : 9 }, - "mageGuild1": { "animation" : "TBNCMAGE.def", "x" : 341, "y" : 116, "z" : -1, "border" : "TONMAG1.bmp", "area" : "TZNMAG1.bmp" }, - "mageGuild2": { "animation" : "TBNCMAG2.def", "x" : 341, "y" : 97, "z" : -1, "border" : "TONMAG2.bmp", "area" : "TZNMAG2.bmp" }, - "mageGuild3": { "animation" : "TBNCMAG3.def", "x" : 341, "y" : 78, "z" : -1, "border" : "TONMAG3.bmp", "area" : "TZNMAG3.bmp" }, - "mageGuild4": { "animation" : "TBNCMAG4.def", "x" : 340, "y" : 62, "z" : -1, "border" : "TONMAG4.bmp", "area" : "TZNMAG4.bmp" }, - "mageGuild5": { "animation" : "TBNCMAG5.def", "x" : 343, "y" : 35, "z" : -1, "border" : "TONMAG5.bmp", "area" : "TZNMAG5.bmp" }, - "tavern": { "animation" : "TBNCTVRN.def", "x" : 508, "y" : 189, "border" : "TONTAV.bmp", "area" : "TZNTAV.bmp" }, - "shipyard": { "animation" : "TBNCDOCK.def", "x" : 617, "y" : 265, "z" : -2, "border" : "TONSHPBA.bmp", "area" : "TZNSHPBA.bmp" }, - "fort": { "animation" : "TBNCCSTL.def", "x" : 138, "y" : 66, "border" : "TONCAS1.bmp", "area" : "TZNCAS1.bmp" }, - "citadel": { "animation" : "TBNCCAS2.def", "x" : 139, "y" : 66, "border" : "TONCAS2.bmp", "area" : "TZNCAS2.bmp" }, - "castle": { "animation" : "TBNCCAS3.def", "x" : 34, "y" : 18, "border" : "TONCAS3.bmp", "area" : "TZNCAS3.bmp" }, - "villageHall": { "animation" : "TBNCHALL.def", "x" : 468, "y" : 76, "z" : -2, "border" : "TONHAL1.bmp", "area" : "TZNHAL1.bmp" }, - "townHall": { "animation" : "TBNCHAL2.def", "x" : 482, "y" : 56, "z" : -2, "border" : "TONHAL2.bmp", "area" : "TZNHAL2.bmp" }, - "cityHall": { "animation" : "TBNCHAL3.def", "x" : 478, "y" : 26, "z" : -2, "border" : "TONHAL3.bmp", "area" : "TZNHAL3.bmp" }, - "capitol": { "animation" : "TBNCHAL4.def", "x" : 481, "y" : 26, "z" : -2, "border" : "TONHAL4.bmp", "area" : "TZNHAL4.bmp" }, - "marketplace": { "animation" : "TBNCMARK.def", "x" : 347, "y" : 215, "z" : 2, "border" : "TONMRK1.bmp", "area" : "TZNMRK1.bmp" }, - "resourceSilo": { "animation" : "TBNCSILO.def", "x" : 276, "y" : 185, "z" : 1, "border" : "TONMRK2.bmp", "area" : "TZNMRK2.bmp" }, - "blacksmith": { "animation" : "TBNCBLAK.def", "x" : 382, "y" : 252, "z" : 7, "border" : "TONSMITA.bmp", "area" : "TZNSMITA.bmp" }, - "special1": { "animation" : "TBNCSPEC.def", "x" : 18, "y" : 0, "z" : -1, "border" : "TONSHRDA.bmp", "area" : "TZNSHRDA.bmp" }, - "horde1": { "animation" : "TBNCHRD1.def", "x" : 80, "y" : 222, "z" : 5, "border" : "TONSKE1H.bmp", "area" : "TZNSKE1H.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBNCHRD2.def", "x" : 64, "y" : 222, "z" : 5, "border" : "TONSKE2H.bmp", "area" : "TZNSKE2H.bmp", "hidden" : true, "builds" : "horde1" }, + "mageGuild1": { "animation" : "TBNCMAGE.def", "x" : 341, "y" : 116, "z" : -1, "campaignBonus" : "BoNmage1.pcx", "border" : "TONMAG1.bmp", "area" : "TZNMAG1.bmp" }, + "mageGuild2": { "animation" : "TBNCMAG2.def", "x" : 341, "y" : 97, "z" : -1, "campaignBonus" : "BoNmage2.pcx", "border" : "TONMAG2.bmp", "area" : "TZNMAG2.bmp" }, + "mageGuild3": { "animation" : "TBNCMAG3.def", "x" : 341, "y" : 78, "z" : -1, "campaignBonus" : "BoNmage3.pcx", "border" : "TONMAG3.bmp", "area" : "TZNMAG3.bmp" }, + "mageGuild4": { "animation" : "TBNCMAG4.def", "x" : 340, "y" : 62, "z" : -1, "campaignBonus" : "BoNmage4.pcx", "border" : "TONMAG4.bmp", "area" : "TZNMAG4.bmp" }, + "mageGuild5": { "animation" : "TBNCMAG5.def", "x" : 343, "y" : 35, "z" : -1, "campaignBonus" : "BoNmage5.pcx", "border" : "TONMAG5.bmp", "area" : "TZNMAG5.bmp" }, + "tavern": { "animation" : "TBNCTVRN.def", "x" : 508, "y" : 189, "campaignBonus" : "BoNtav.pcx", "border" : "TONTAV.bmp", "area" : "TZNTAV.bmp" }, + "shipyard": { "animation" : "TBNCDOCK.def", "x" : 617, "y" : 265, "z" : -2, "campaignBonus" : "BoNship.pcx", "border" : "TONSHPBA.bmp", "area" : "TZNSHPBA.bmp" }, + "fort": { "animation" : "TBNCCSTL.def", "x" : 138, "y" : 66, "campaignBonus" : "BoNcast1.pcx", "border" : "TONCAS1.bmp", "area" : "TZNCAS1.bmp" }, + "citadel": { "animation" : "TBNCCAS2.def", "x" : 139, "y" : 66, "campaignBonus" : "BoNcast2.pcx", "border" : "TONCAS2.bmp", "area" : "TZNCAS2.bmp" }, + "castle": { "animation" : "TBNCCAS3.def", "x" : 34, "y" : 18, "campaignBonus" : "BoNcast3.pcx", "border" : "TONCAS3.bmp", "area" : "TZNCAS3.bmp" }, + "villageHall": { "animation" : "TBNCHALL.def", "x" : 468, "y" : 76, "z" : -2, "campaignBonus" : "BoNhall1.pcx", "border" : "TONHAL1.bmp", "area" : "TZNHAL1.bmp" }, + "townHall": { "animation" : "TBNCHAL2.def", "x" : 482, "y" : 56, "z" : -2, "campaignBonus" : "BoNhall2.pcx", "border" : "TONHAL2.bmp", "area" : "TZNHAL2.bmp" }, + "cityHall": { "animation" : "TBNCHAL3.def", "x" : 478, "y" : 26, "z" : -2, "campaignBonus" : "BoNhall3.pcx", "border" : "TONHAL3.bmp", "area" : "TZNHAL3.bmp" }, + "capitol": { "animation" : "TBNCHAL4.def", "x" : 481, "y" : 26, "z" : -2, "campaignBonus" : "BoNhall4.pcx", "border" : "TONHAL4.bmp", "area" : "TZNHAL4.bmp" }, + "marketplace": { "animation" : "TBNCMARK.def", "x" : 347, "y" : 215, "z" : 2, "campaignBonus" : "BoNmark1.pcx", "border" : "TONMRK1.bmp", "area" : "TZNMRK1.bmp" }, + "resourceSilo": { "animation" : "TBNCSILO.def", "x" : 276, "y" : 185, "z" : 1, "campaignBonus" : "BoNmark2.pcx", "border" : "TONMRK2.bmp", "area" : "TZNMRK2.bmp" }, + "blacksmith": { "animation" : "TBNCBLAK.def", "x" : 382, "y" : 252, "z" : 7, "campaignBonus" : "BoNsmith.pcx", "border" : "TONSMITA.bmp", "area" : "TZNSMITA.bmp" }, + "special1": { "animation" : "TBNCSPEC.def", "x" : 18, "y" : 0, "z" : -1, "campaignBonus" : "BoNshrod.pcx", "border" : "TONSHRDA.bmp", "area" : "TZNSHRDA.bmp" }, + "horde1": { "animation" : "TBNCHRD1.def", "x" : 80, "y" : 222, "z" : 5, "campaignBonus" : "BoNskelH.pcx", "border" : "TONSKE1H.bmp", "area" : "TZNSKE1H.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBNCHRD2.def", "x" : 64, "y" : 222, "z" : 5, "campaignBonus" : "BoNnecro.pcx", "border" : "TONSKE2H.bmp", "area" : "TZNSKE2H.bmp", "hidden" : true, "builds" : "horde1" }, "ship": { "animation" : "TBNCBOAT.def", "x" : 617, "y" : 265, "z" : -2, "border" : "TONSHPNA.bmp", "area" : "TZNSHPNA.bmp", "hidden" : true }, - "special2": { "animation" : "TBNCEXT0.def", "x" : 307, "y" : 61, "z" : -2, "border" : "TONNECRA.bmp", "area" : "TZNNECRA.bmp" }, - "special3": { "animation" : "TBNCEXT1.def", "x" : 247, "y" : 275, "z" : 4, "border" : "TONSKELT.bmp", "area" : "TZNSKELT.bmp" }, - "grail": { "animation" : "TBNCHOLY.def", "x" : 410, "y" : 88, "border" : "TONHOLYA.bmp", "area" : "TZNHOLYA.bmp" }, + "special2": { "animation" : "TBNCEXT0.def", "x" : 307, "y" : 61, "z" : -2, "campaignBonus" : "BoNnecro.pcx", "border" : "TONNECRA.bmp", "area" : "TZNNECRA.bmp" }, + "special3": { "animation" : "TBNCEXT1.def", "x" : 247, "y" : 275, "z" : 4, "campaignBonus" : "BoNskelT.pcx", "border" : "TONSKELT.bmp", "area" : "TZNSKELT.bmp" }, + "grail": { "animation" : "TBNCHOLY.def", "x" : 410, "y" : 88, "campaignBonus" : "BoNholyG.pcx", "border" : "TONHOLYA.bmp", "area" : "TZNHOLYA.bmp" }, "extraTownHall": { "animation" : "TBNCEXT3.def", "x" : 0, "y" : 241, "z" : 6 }, "extraCityHall": { "animation" : "TBNCEXT4.def", "x" : 321, "y" : 255, "z" : 6 }, "extraCapitol": { "animation" : "TBNCEXT5.def", "x" : 475, "y" : 257, "z" : 6 }, - "dwellingLvl1": { "animation" : "TBNCDW_0.def", "x" : 80, "y" : 222, "z" : 5, "border" : "TONSKEL1.bmp", "area" : "TZNSKEL1.bmp" }, - "dwellingLvl2": { "animation" : "TBNCDW_1.def", "x" : 502, "y" : 223, "z" : 1, "border" : "TONZOMB1.bmp", "area" : "TZNZOMB1.bmp" }, - "dwellingLvl3": { "animation" : "TBNCDW_2.def", "x" : 0, "y" : 187, "z" : 8, "border" : "TONWIGH1.bmp", "area" : "TZNWIGH1.bmp" }, - "dwellingLvl4": { "animation" : "TBNCDW_3.def", "x" : 607, "y" : 212, "z" : 2, "border" : "TONVAM1.bmp", "area" : "TZNVAM1.bmp" }, - "dwellingLvl5": { "animation" : "TBNCDW_4.def", "x" : 206, "y" : 207, "z" : 3, "border" : "TONLICH1.bmp", "area" : "TZNLICH1.bmp" }, - "dwellingLvl6": { "animation" : "TBNCDW_5.def", "x" : 0, "y" : 31, "z" : -2, "border" : "TONBKN1.bmp", "area" : "TZNBKN1.bmp" }, - "dwellingLvl7": { "animation" : "TBNCDW_6.def", "x" : 663, "y" : 25, "border" : "TONBON1.bmp", "area" : "TZNBON1.bmp" }, - "dwellingUpLvl1": { "animation" : "TBNCUP_0.def", "x" : 64, "y" : 222, "z" : 5, "border" : "TONSKEL2.bmp", "area" : "TZNSKEL2.bmp" }, - "dwellingUpLvl2": { "animation" : "TBNCUP_1.def", "x" : 498, "y" : 224, "z" : 1, "border" : "TONZOMB2.bmp", "area" : "TZNZOMB2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBNCUP_2.def", "x" : 0, "y" : 179, "z" : 8, "border" : "TONWIGH2.bmp", "area" : "TZNWIGH2.bmp" }, - "dwellingUpLvl4": { "animation" : "TBNCUP_3.def", "x" : 615, "y" : 193, "z" : 2, "border" : "TONVAM2.bmp", "area" : "TZNVAM2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBNCUP_4.def", "x" : 222, "y" : 171, "z" : 3, "border" : "TONLICH2.bmp", "area" : "TZNLICH2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBNCUP_5.def", "x" : 0, "y" : 30, "z" : -2, "border" : "TONBKN2.bmp", "area" : "TZNBKN2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBNCUP_6.def", "x" : 662, "y" : 23, "border" : "TONBON2.bmp", "area" : "TZNBON2.bmp" } + "dwellingLvl1": { "animation" : "TBNCDW_0.def", "x" : 80, "y" : 222, "z" : 5, "campaignBonus" : "BoNskel1.pcx", "border" : "TONSKEL1.bmp", "area" : "TZNSKEL1.bmp" }, + "dwellingLvl2": { "animation" : "TBNCDW_1.def", "x" : 502, "y" : 223, "z" : 1, "campaignBonus" : "BoNzomb1.pcx", "border" : "TONZOMB1.bmp", "area" : "TZNZOMB1.bmp" }, + "dwellingLvl3": { "animation" : "TBNCDW_2.def", "x" : 0, "y" : 187, "z" : 8, "campaignBonus" : "BoNwigh1.pcx", "border" : "TONWIGH1.bmp", "area" : "TZNWIGH1.bmp" }, + "dwellingLvl4": { "animation" : "TBNCDW_3.def", "x" : 607, "y" : 212, "z" : 2, "campaignBonus" : "BoNvamp1.pcx", "border" : "TONVAM1.bmp", "area" : "TZNVAM1.bmp" }, + "dwellingLvl5": { "animation" : "TBNCDW_4.def", "x" : 206, "y" : 207, "z" : 3, "campaignBonus" : "BoNlich1.pcx", "border" : "TONLICH1.bmp", "area" : "TZNLICH1.bmp" }, + "dwellingLvl6": { "animation" : "TBNCDW_5.def", "x" : 0, "y" : 31, "z" : -2, "campaignBonus" : "BoNbkni1.pcx", "border" : "TONBKN1.bmp", "area" : "TZNBKN1.bmp" }, + "dwellingLvl7": { "animation" : "TBNCDW_6.def", "x" : 663, "y" : 25, "campaignBonus" : "BoNbone1.pcx", "border" : "TONBON1.bmp", "area" : "TZNBON1.bmp" }, + "dwellingUpLvl1": { "animation" : "TBNCUP_0.def", "x" : 64, "y" : 222, "z" : 5, "campaignBonus" : "BoNskel2.pcx", "border" : "TONSKEL2.bmp", "area" : "TZNSKEL2.bmp" }, + "dwellingUpLvl2": { "animation" : "TBNCUP_1.def", "x" : 498, "y" : 224, "z" : 1, "campaignBonus" : "BoNzomb2.pcx", "border" : "TONZOMB2.bmp", "area" : "TZNZOMB2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBNCUP_2.def", "x" : 0, "y" : 179, "z" : 8, "campaignBonus" : "BoNwigh2.pcx", "border" : "TONWIGH2.bmp", "area" : "TZNWIGH2.bmp" }, + "dwellingUpLvl4": { "animation" : "TBNCUP_3.def", "x" : 615, "y" : 193, "z" : 2, "campaignBonus" : "BoNvamp2.pcx", "border" : "TONVAM2.bmp", "area" : "TZNVAM2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBNCUP_4.def", "x" : 222, "y" : 171, "z" : 3, "campaignBonus" : "BoNlich2.pcx", "border" : "TONLICH2.bmp", "area" : "TZNLICH2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBNCUP_5.def", "x" : 0, "y" : 30, "z" : -2, "campaignBonus" : "BoNbkni2.pcx", "border" : "TONBKN2.bmp", "area" : "TZNBKN2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBNCUP_6.def", "x" : 662, "y" : 23, "campaignBonus" : "BoNbone2.pcx", "border" : "TONBON2.bmp", "area" : "TZNBON2.bmp" } }, "musicTheme" : [ "music/NecroTown" ], diff --git a/config/factions/rampart.json b/config/factions/rampart.json index aafcd7375..b840776c6 100644 --- a/config/factions/rampart.json +++ b/config/factions/rampart.json @@ -80,47 +80,47 @@ "structures" : { "extraAnimation": { "animation" : "TBRMEXT2.def", "x" : 327, "y" : 236, "z" : 1 }, - "mageGuild1": { "animation" : "TBRMMAGE.def", "x" : 454, "y" : 200, "z" : -1, "border" : "TORMAG1.bmp", "area" : "TZRMAG1.bmp" }, - "mageGuild2": { "animation" : "TBRMMAG2.def", "x" : 438, "y" : 178, "z" : -1, "border" : "TORMAG2.bmp", "area" : "TZRMAG2.bmp" }, - "mageGuild3": { "animation" : "TBRMMAG3.def", "x" : 418, "y" : 153, "z" : -1, "border" : "TORMAG3.bmp", "area" : "TZRMAG3.bmp" }, - "mageGuild4": { "animation" : "TBRMMAG4.def", "x" : 406, "y" : 129, "z" : -1, "border" : "TORMAG4.bmp", "area" : "TZRMAG4.bmp" }, - "mageGuild5": { "animation" : "TBRMMAG5.def", "x" : 384, "y" : 104, "z" : -1, "border" : "TORMAG5.bmp", "area" : "TZRMAG5.bmp" }, - "tavern": { "animation" : "TBRMTVRN.def", "x" : 181, "y" : 229, "z" : 1, "border" : "TORTAV.bmp", "area" : "TZRTAV.bmp" }, - "fort": { "animation" : "TBRMCSTL.def", "x" : 63, "y" : 25, "z" : -4, "border" : "TORCAS1.bmp", "area" : "TZRCAS1.bmp" }, - "citadel": { "animation" : "TBRMCAS2.def", "x" : 79, "y" : 18, "z" : -4, "border" : "TORCAS3.bmp", "area" : "TZRCAS3.bmp" }, - "castle": { "animation" : "TBRMCAS3.def", "x" : 79, "y" : 18, "z" : -4, "border" : "TORCAS2.bmp", "area" : "TZRCAS2.bmp" }, - "villageHall": { "animation" : "TBRMHALL.def", "x" : 565, "y" : 216, "border" : "TORHAL1.bmp", "area" : "TZRHAL1.bmp" }, - "townHall": { "animation" : "TBRMHAL2.def", "x" : 538, "y" : 187, "border" : "TORHAL2.bmp", "area" : "TZRHAL2.bmp" }, - "cityHall": { "animation" : "TBRMHAL3.def", "x" : 538, "y" : 187, "border" : "TORHAL3.bmp", "area" : "TZRHAL3.bmp" }, - "capitol": { "animation" : "TBRMHAL4.def", "x" : 534, "y" : 187, "border" : "TORHAL4.bmp", "area" : "TZRHAL4.bmp" }, - "marketplace": { "animation" : "TBRMMARK.def", "x" : 129, "y" : 301, "z" : 3, "border" : "TORMRK1.bmp", "area" : "TZRMRK1.bmp" }, - "resourceSilo": { "animation" : "TBRMSILO.def", "x" : 245, "y" : 324, "z" : 4, "border" : "TORMRK2.bmp", "area" : "TZRMRK2.bmp" }, - "blacksmith": { "animation" : "TBRMBLAK.def", "x" : 558, "y" : 105, "z" : -3, "border" : "TORAID.bmp", "area" : "TZRAID.bmp" }, - "special1": { "animation" : "TBRMSPEC.def", "x" : 555, "y" : 297, "z" : 2, "border" : "TORGAR1A.bmp", "area" : "TZRGAR1A.bmp" }, - "horde1": { "animation" : "TBRMHRD1.def", "x" : 0, "y" : 154, "z" : -2, "border" : "TORDWF1H.bmp", "area" : "TZRDWF1H.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBRMHRD2.def", "x" : 0, "y" : 143, "z" : -2, "border" : "TORDWF2H.bmp", "area" : "TZRDWF2H.bmp", "hidden" : true, "builds" : "horde1" }, - "special2": { "animation" : "TBRMEXT0.def", "x" : 555, "y" : 297, "z" : 2, "border" : "TORGAR2A.bmp", "area" : "TZRGAR2A.bmp" }, - "special3": { "animation" : "TBRMEXT1.def", "x" : 0, "y" : 181, "z" : 1, "border" : "TORDWFT.bmp", "area" : "TZRDWFT.bmp" }, - "horde2": { "animation" : "TBRMHRD3.def", "x" : 47, "y" : 142, "z" : -1, "border" : "TORTRE1H.bmp", "area" : "TZRTRE1H.bmp", "hidden" : true }, - "horde2Upgr": { "animation" : "TBRMHRD4.def", "x" : 47, "y" : 142, "z" : -1, "border" : "TORTRE2H.bmp", "area" : "TZRTRE2H.bmp", "hidden" : true, "builds" : "horde2" }, - "grail": { "animation" : "TBRMHOLY.def", "x" : 0, "y" : 54, "z" : -3, "border" : "TORHOLY.bmp", "area" : "TZRHOLY.bmp" }, + "mageGuild1": { "animation" : "TBRMMAGE.def", "x" : 454, "y" : 200, "z" : -1, "campaignBonus" : "BoRMag1.pcx", "border" : "TORMAG1.bmp", "area" : "TZRMAG1.bmp" }, + "mageGuild2": { "animation" : "TBRMMAG2.def", "x" : 438, "y" : 178, "z" : -1, "campaignBonus" : "BoRMag2.pcx", "border" : "TORMAG2.bmp", "area" : "TZRMAG2.bmp" }, + "mageGuild3": { "animation" : "TBRMMAG3.def", "x" : 418, "y" : 153, "z" : -1, "campaignBonus" : "BoRMag3.pcx", "border" : "TORMAG3.bmp", "area" : "TZRMAG3.bmp" }, + "mageGuild4": { "animation" : "TBRMMAG4.def", "x" : 406, "y" : 129, "z" : -1, "campaignBonus" : "BoRMag4.pcx", "border" : "TORMAG4.bmp", "area" : "TZRMAG4.bmp" }, + "mageGuild5": { "animation" : "TBRMMAG5.def", "x" : 384, "y" : 104, "z" : -1, "campaignBonus" : "BoRMag5.pcx", "border" : "TORMAG5.bmp", "area" : "TZRMAG5.bmp" }, + "tavern": { "animation" : "TBRMTVRN.def", "x" : 181, "y" : 229, "z" : 1, "campaignBonus" : "BoRTav.pcx", "border" : "TORTAV.bmp", "area" : "TZRTAV.bmp" }, + "fort": { "animation" : "TBRMCSTL.def", "x" : 63, "y" : 25, "z" : -4, "campaignBonus" : "BoRCas1.pcx", "border" : "TORCAS1.bmp", "area" : "TZRCAS1.bmp" }, + "citadel": { "animation" : "TBRMCAS2.def", "x" : 79, "y" : 18, "z" : -4, "campaignBonus" : "BoRCas2.pcx", "border" : "TORCAS3.bmp", "area" : "TZRCAS3.bmp" }, + "castle": { "animation" : "TBRMCAS3.def", "x" : 79, "y" : 18, "z" : -4, "campaignBonus" : "BoRCas3.pcx", "border" : "TORCAS2.bmp", "area" : "TZRCAS2.bmp" }, + "villageHall": { "animation" : "TBRMHALL.def", "x" : 565, "y" : 216, "campaignBonus" : "BoRHal1.pcx", "border" : "TORHAL1.bmp", "area" : "TZRHAL1.bmp" }, + "townHall": { "animation" : "TBRMHAL2.def", "x" : 538, "y" : 187, "campaignBonus" : "BoRHal2.pcx", "border" : "TORHAL2.bmp", "area" : "TZRHAL2.bmp" }, + "cityHall": { "animation" : "TBRMHAL3.def", "x" : 538, "y" : 187, "campaignBonus" : "BoRHal3.pcx", "border" : "TORHAL3.bmp", "area" : "TZRHAL3.bmp" }, + "capitol": { "animation" : "TBRMHAL4.def", "x" : 534, "y" : 187, "campaignBonus" : "BoRHal4.pcx", "border" : "TORHAL4.bmp", "area" : "TZRHAL4.bmp" }, + "marketplace": { "animation" : "TBRMMARK.def", "x" : 129, "y" : 301, "z" : 3, "campaignBonus" : "BoRMrk1.pcx", "border" : "TORMRK1.bmp", "area" : "TZRMRK1.bmp" }, + "resourceSilo": { "animation" : "TBRMSILO.def", "x" : 245, "y" : 324, "z" : 4, "campaignBonus" : "BoRMrk2.pcx", "border" : "TORMRK2.bmp", "area" : "TZRMRK2.bmp" }, + "blacksmith": { "animation" : "TBRMBLAK.def", "x" : 558, "y" : 105, "z" : -3, "campaignBonus" : "BoRAid.pcx", "border" : "TORAID.bmp", "area" : "TZRAID.bmp" }, + "special1": { "animation" : "TBRMSPEC.def", "x" : 555, "y" : 297, "z" : 2, "campaignBonus" : "BoRGar1.pcx", "border" : "TORGAR1A.bmp", "area" : "TZRGAR1A.bmp" }, + "horde1": { "animation" : "TBRMHRD1.def", "x" : 0, "y" : 154, "z" : -2, "campaignBonus" : "BoRDwf1h.pcx", "border" : "TORDWF1H.bmp", "area" : "TZRDWF1H.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBRMHRD2.def", "x" : 0, "y" : 143, "z" : -2, "campaignBonus" : "BoRDwf2h.pcx", "border" : "TORDWF2H.bmp", "area" : "TZRDWF2H.bmp", "hidden" : true, "builds" : "horde1" }, + "special2": { "animation" : "TBRMEXT0.def", "x" : 555, "y" : 297, "z" : 2, "campaignBonus" : "BoRGar2.pcx", "border" : "TORGAR2A.bmp", "area" : "TZRGAR2A.bmp" }, + "special3": { "animation" : "TBRMEXT1.def", "x" : 0, "y" : 181, "z" : 1, "campaignBonus" : "BoRDwf1t.pcx", "border" : "TORDWFT.bmp", "area" : "TZRDWFT.bmp" }, + "horde2": { "animation" : "TBRMHRD3.def", "x" : 47, "y" : 142, "z" : -1, "campaignBonus" : "BoRTre1h.pcx", "border" : "TORTRE1H.bmp", "area" : "TZRTRE1H.bmp", "hidden" : true }, + "horde2Upgr": { "animation" : "TBRMHRD4.def", "x" : 47, "y" : 142, "z" : -1, "campaignBonus" : "BoRTre2h.pcx", "border" : "TORTRE2H.bmp", "area" : "TZRTRE2H.bmp", "hidden" : true, "builds" : "horde2" }, + "grail": { "animation" : "TBRMHOLY.def", "x" : 0, "y" : 54, "z" : -3, "campaignBonus" : "BoRHoly.pcx", "border" : "TORHOLY.bmp", "area" : "TZRHOLY.bmp" }, "extraTownHall": { "animation" : "TBRMEXT3.def", "x" : 293, "y" : 235, "z" : 2 }, "extraCityHall": { "animation" : "TBRMEXT4.def", "x" : 295, "y" : 191, "z" : 0 }, "extraCapitol": { "animation" : "TBRMEXT5.def", "x" : 260, "y" : 171, "z" : 3 }, - "dwellingLvl1": { "animation" : "TBRMDW_0.def", "x" : 0, "y" : 236, "z" : 2, "border" : "TORCEN1A.bmp", "area" : "TZRCEN1A.bmp" }, - "dwellingLvl2": { "animation" : "TBRMDW_1.def", "x" : 0, "y" : 154, "z" : -2, "border" : "TORDWF1.bmp", "area" : "TZRDWF1.bmp" }, - "dwellingLvl3": { "animation" : "TBRMDW_2.def", "x" : 668, "y" : 101, "z" : -1, "border" : "TORELF1.bmp", "area" : "TZRELF1.bmp" }, - "dwellingLvl4": { "animation" : "TBRMDW_3.def", "x" : 287, "y" : 73, "z" : -1, "border" : "TORPEG1A.bmp", "area" : "TZRPEG1A.bmp" }, - "dwellingLvl5": { "animation" : "TBRMDW_4.def", "x" : 68, "y" : 146, "z" : -1, "border" : "TORTRE1.bmp", "area" : "TZRTRE1.bmp" }, - "dwellingLvl6": { "animation" : "TBRMDW_5.def", "x" : 362, "y" : 90, "z" : -2, "border" : "TORUNI1.bmp", "area" : "TZRUNI1.bmp" }, - "dwellingLvl7": { "animation" : "TBRMDW_6.def", "x" : 502, "y" : 27, "z" : -5, "border" : "TORDR1AA.bmp", "area" : "TZRDR1AA.bmp" }, - "dwellingUpLvl1": { "animation" : "TBRMUP_0.def", "x" : 0, "y" : 236, "z" : 2, "border" : "TORCEN2A.bmp", "area" : "TZRCEN2A.bmp" }, - "dwellingUpLvl2": { "animation" : "TBRMUP_1.def", "x" : 0, "y" : 143, "z" : -2, "border" : "TORDWF2.bmp", "area" : "TZRDWF2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBRMUP_2.def", "x" : 665, "y" : 101, "z" : -1, "border" : "TORELF2.bmp", "area" : "TZRELF2.bmp" }, - "dwellingUpLvl4": { "animation" : "TBRMUP_3.def", "x" : 287, "y" : 28, "z" : -1, "border" : "TORPEG2A.bmp", "area" : "TZRPEG2A.bmp" }, - "dwellingUpLvl5": { "animation" : "TBRMUP_4.def", "x" : 63, "y" : 146, "z" : -1, "border" : "TORTRE2.bmp", "area" : "TZRTRE2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBRMUP_5.def", "x" : 362, "y" : 90, "z" : -2, "border" : "TORUNI2.bmp", "area" : "TZRUNI2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBRMUP_6.def", "x" : 502, "y" : 5, "z" : -5, "border" : "TORDR2AA.bmp", "area" : "TZRDR2AA.bmp" } + "dwellingLvl1": { "animation" : "TBRMDW_0.def", "x" : 0, "y" : 236, "z" : 2, "campaignBonus" : "BoRCen1.pcx", "border" : "TORCEN1A.bmp", "area" : "TZRCEN1A.bmp" }, + "dwellingLvl2": { "animation" : "TBRMDW_1.def", "x" : 0, "y" : 154, "z" : -2, "campaignBonus" : "BoRDwf1.pcx", "border" : "TORDWF1.bmp", "area" : "TZRDWF1.bmp" }, + "dwellingLvl3": { "animation" : "TBRMDW_2.def", "x" : 668, "y" : 101, "z" : -1, "campaignBonus" : "BoRElf1.pcx", "border" : "TORELF1.bmp", "area" : "TZRELF1.bmp" }, + "dwellingLvl4": { "animation" : "TBRMDW_3.def", "x" : 287, "y" : 73, "z" : -1, "campaignBonus" : "BoRPeg1.pcx", "border" : "TORPEG1A.bmp", "area" : "TZRPEG1A.bmp" }, + "dwellingLvl5": { "animation" : "TBRMDW_4.def", "x" : 68, "y" : 146, "z" : -1, "campaignBonus" : "BoRTre1.pcx", "border" : "TORTRE1.bmp", "area" : "TZRTRE1.bmp" }, + "dwellingLvl6": { "animation" : "TBRMDW_5.def", "x" : 362, "y" : 90, "z" : -2, "campaignBonus" : "BoRUni1.pcx", "border" : "TORUNI1.bmp", "area" : "TZRUNI1.bmp" }, + "dwellingLvl7": { "animation" : "TBRMDW_6.def", "x" : 502, "y" : 27, "z" : -5, "campaignBonus" : "BoRDra1.pcx", "border" : "TORDR1AA.bmp", "area" : "TZRDR1AA.bmp" }, + "dwellingUpLvl1": { "animation" : "TBRMUP_0.def", "x" : 0, "y" : 236, "z" : 2, "campaignBonus" : "BoRCen2.pcx", "border" : "TORCEN2A.bmp", "area" : "TZRCEN2A.bmp" }, + "dwellingUpLvl2": { "animation" : "TBRMUP_1.def", "x" : 0, "y" : 143, "z" : -2, "campaignBonus" : "BoRDwf2.pcx", "border" : "TORDWF2.bmp", "area" : "TZRDWF2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBRMUP_2.def", "x" : 665, "y" : 101, "z" : -1, "campaignBonus" : "BoRElf2.pcx", "border" : "TORELF2.bmp", "area" : "TZRELF2.bmp" }, + "dwellingUpLvl4": { "animation" : "TBRMUP_3.def", "x" : 287, "y" : 28, "z" : -1, "campaignBonus" : "BoRPeg2.pcx", "border" : "TORPEG2A.bmp", "area" : "TZRPEG2A.bmp" }, + "dwellingUpLvl5": { "animation" : "TBRMUP_4.def", "x" : 63, "y" : 146, "z" : -1, "campaignBonus" : "BoRTre2.pcx", "border" : "TORTRE2.bmp", "area" : "TZRTRE2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBRMUP_5.def", "x" : 362, "y" : 90, "z" : -2, "campaignBonus" : "BoRUni2.pcx", "border" : "TORUNI2.bmp", "area" : "TZRUNI2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBRMUP_6.def", "x" : 502, "y" : 5, "z" : -5, "campaignBonus" : "BoRDra2.pcx", "border" : "TORDR2AA.bmp", "area" : "TZRDR2AA.bmp" } }, "musicTheme" : [ "music/Rampart" ], diff --git a/config/factions/stronghold.json b/config/factions/stronghold.json index 66bf92db0..a707e0128 100644 --- a/config/factions/stronghold.json +++ b/config/factions/stronghold.json @@ -80,41 +80,41 @@ "structures" : { "extraAnimation": { "animation" : "TBSTEXT3.def", "x" : 23, "y" : 20 }, - "mageGuild1": { "animation" : "TBSTMAGE.def", "x" : 473, "y" : 67, "z" : -2, "border" : "TOSMAG1.bmp", "area" : "TZSMAG1.bmp" }, - "mageGuild2": { "animation" : "TBSTMAG2.def", "x" : 473, "y" : 37, "z" : -2, "border" : "TOSMAG2.bmp", "area" : "TZSMAG2.bmp" }, - "mageGuild3": { "animation" : "TBSTMAG3.def", "x" : 473, "y" : 1, "z" : -2, "border" : "TOSMAG3.bmp", "area" : "TZSMAG3.bmp" }, - "tavern": { "animation" : "TBSTTVRN.def", "x" : 170, "y" : 280, "z" : 2, "border" : "TOSTAV.bmp", "area" : "TZSTAV.bmp" }, - "fort": { "animation" : "TBSTCSTL.def", "x" : 402, "y" : 148, "z" : -1, "border" : "TOSCA1.bmp", "area" : "TZSCA1.bmp" }, - "citadel": { "animation" : "TBSTCAS2.def", "x" : 402, "y" : 114, "z" : -1, "border" : "TOSCA2.bmp", "area" : "TZSCA2.bmp" }, - "castle": { "animation" : "TBSTCAS3.def", "x" : 402, "y" : 114, "z" : -1, "border" : "TOSCA3.bmp", "area" : "TZSCA3.bmp" }, - "villageHall": { "animation" : "TBSTHALL.def", "x" : 0, "y" : 259, "border" : "TOSHAL1A.bmp", "area" : "TZSHAL1A.bmp" }, - "townHall": { "animation" : "TBSTHAL2.def", "x" : 0, "y" : 225, "border" : "TOSHAL2A.bmp", "area" : "TZSHAL2A.bmp" }, - "cityHall": { "animation" : "TBSTHAL3.def", "x" : 0, "y" : 201, "border" : "TOSHAL3A.bmp", "area" : "TZSHAL3A.bmp" }, - "capitol": { "animation" : "TBSTHAL4.def", "x" : 0, "y" : 148, "border" : "TOSHAL4A.bmp", "area" : "TZSHAL4A.bmp" }, - "marketplace": { "animation" : "TBSTMARK.def", "x" : 397, "y" : 308, "z" : 1, "border" : "TOSMRK1.bmp", "area" : "TZSMRK1.bmp" }, - "resourceSilo": { "animation" : "TBSTSILO.def", "x" : 458, "y" : 248, "z" : 2, "border" : "TOSMRK2.bmp", "area" : "TZSMRK2.bmp" }, - "blacksmith": { "animation" : "TBSTBLAK.def", "x" : 660, "y" : 286, "border" : "TOSBLK1.bmp", "area" : "TZSBLK1.bmp" }, - "special1": { "animation" : "TBSTSPEC.def", "x" : 550, "y" : 229, "border" : "TOSCA1EA.bmp", "area" : "TZSCA1EA.bmp" }, - "horde1": { "animation" : "TBSTHRD1.def", "x" : 373, "y" : 239, "border" : "TOSGOB1H.bmp", "area" : "TZSGOB1H.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBSTHRD2.def", "x" : 373, "y" : 220, "border" : "TOSGOB2H.bmp", "area" : "TZSGOB2H.bmp", "hidden" : true, "builds" : "horde1" }, - "special2": { "animation" : "TBSTEXT0.def", "x" : 473, "y" : 282, "z" : 3, "border" : "TOSMRK1C.bmp", "area" : "TZSMRK1C.bmp" }, - "special3": { "animation" : "TBSTEXT1.def", "x" : 617, "y" : 286, "z" : 1, "border" : "TOSBLK2.bmp", "area" : "TZSBLK2.bmp" }, - "special4": { "animation" : "TBSTEXT2.def", "x" : 313, "y" : 13, "z" : -1, "border" : "TOSVAH.bmp", "area" : "TZSVAH.bmp" }, - "grail": { "animation" : "TBSTHOLY.def", "x" : 321, "y" : 105, "z" : 3, "border" : "TOSHOLYA.bmp", "area" : "TZSHOLYA.bmp" }, - "dwellingLvl1": { "animation" : "TBSTDW_0.def", "x" : 373, "y" : 239, "border" : "TOSGOB1.bmp", "area" : "TZSGOB1.bmp" }, - "dwellingLvl2": { "animation" : "TBSTDW_1.def", "x" : 266, "y" : 246, "z" : 1, "border" : "TOSWOL1.bmp", "area" : "TZSWOL1.bmp" }, - "dwellingLvl3": { "animation" : "TBSTDW_2.def", "x" : 566, "y" : 232, "z" : 2, "border" : "TOSORC1.bmp", "area" : "TZSORC1.bmp" }, - "dwellingLvl4": { "animation" : "TBSTDW_3.def", "x" : 197, "y" : 204, "border" : "TOSOGR1.bmp", "area" : "TZSOGR1.bmp" }, - "dwellingLvl5": { "animation" : "TBSTDW_4.def", "x" : 137, "y" : 30, "z" : -1, "border" : "TOSROC1.bmp", "area" : "TZSROC1.bmp" }, - "dwellingLvl6": { "animation" : "TBSTDW_5.def", "x" : 622, "y" : 160, "z" : -2, "border" : "TOSCYC1.bmp", "area" : "TZSCYC1.bmp" }, - "dwellingLvl7": { "animation" : "TBSTDW_6.def", "x" : 604, "y" : 0, "border" : "TOSBEH1A.bmp", "area" : "TZSBEH1A.bmp" }, - "dwellingUpLvl1": { "animation" : "TBSTUP_0.def", "x" : 373, "y" : 220, "border" : "TOSGOB2.bmp", "area" : "TZSGOB2.bmp" }, - "dwellingUpLvl2": { "animation" : "TBSTUP_1.def", "x" : 266, "y" : 225, "z" : 1, "border" : "TOSWOL2.bmp", "area" : "TZSWOL2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBSTUP_2.def", "x" : 566, "y" : 158, "z" : 2, "border" : "TOSORC2.bmp", "area" : "TZSORC2.bmp" }, - "dwellingUpLvl4": { "animation" : "TBSTUP_3.def", "x" : 197, "y" : 137, "border" : "TOSOGR2.bmp", "area" : "TZSOGR2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBSTUP_4.def", "x" : 129, "y" : 15, "z" : -1, "border" : "TOSROC2.bmp", "area" : "TZSROC2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBSTUP_5.def", "x" : 616, "y" : 93, "z" : -2, "border" : "TOSCYC2A.bmp", "area" : "TZSCYC2A.bmp" }, - "dwellingUpLvl7": { "animation" : "TBSTUP_6.def", "x" : 604, "y" : 0, "border" : "TOSBEH2A.bmp", "area" : "TZSBEH2A.bmp" } + "mageGuild1": { "animation" : "TBSTMAGE.def", "x" : 473, "y" : 67, "z" : -2, "campaignBonus" : "BoSmage1.pcx", "border" : "TOSMAG1.bmp", "area" : "TZSMAG1.bmp" }, + "mageGuild2": { "animation" : "TBSTMAG2.def", "x" : 473, "y" : 37, "z" : -2, "campaignBonus" : "BoSmage2.pcx", "border" : "TOSMAG2.bmp", "area" : "TZSMAG2.bmp" }, + "mageGuild3": { "animation" : "TBSTMAG3.def", "x" : 473, "y" : 1, "z" : -2, "campaignBonus" : "BoSmage3.pcx", "border" : "TOSMAG3.bmp", "area" : "TZSMAG3.bmp" }, + "tavern": { "animation" : "TBSTTVRN.def", "x" : 170, "y" : 280, "z" : 2, "campaignBonus" : "BoStav1.pcx", "border" : "TOSTAV.bmp", "area" : "TZSTAV.bmp" }, + "fort": { "animation" : "TBSTCSTL.def", "x" : 402, "y" : 148, "z" : -1, "campaignBonus" : "BoScas1.pcx", "border" : "TOSCA1.bmp", "area" : "TZSCA1.bmp" }, + "citadel": { "animation" : "TBSTCAS2.def", "x" : 402, "y" : 114, "z" : -1, "campaignBonus" : "BoScas2.pcx", "border" : "TOSCA2.bmp", "area" : "TZSCA2.bmp" }, + "castle": { "animation" : "TBSTCAS3.def", "x" : 402, "y" : 114, "z" : -1, "campaignBonus" : "BoScas3.pcx", "border" : "TOSCA3.bmp", "area" : "TZSCA3.bmp" }, + "villageHall": { "animation" : "TBSTHALL.def", "x" : 0, "y" : 259, "campaignBonus" : "BoShall1.pcx", "border" : "TOSHAL1A.bmp", "area" : "TZSHAL1A.bmp" }, + "townHall": { "animation" : "TBSTHAL2.def", "x" : 0, "y" : 225, "campaignBonus" : "BoShall2.pcx", "border" : "TOSHAL2A.bmp", "area" : "TZSHAL2A.bmp" }, + "cityHall": { "animation" : "TBSTHAL3.def", "x" : 0, "y" : 201, "campaignBonus" : "BoShall3.pcx", "border" : "TOSHAL3A.bmp", "area" : "TZSHAL3A.bmp" }, + "capitol": { "animation" : "TBSTHAL4.def", "x" : 0, "y" : 148, "campaignBonus" : "BoShall4.pcx", "border" : "TOSHAL4A.bmp", "area" : "TZSHAL4A.bmp" }, + "marketplace": { "animation" : "TBSTMARK.def", "x" : 397, "y" : 308, "z" : 1, "campaignBonus" : "BoSmrk1.pcx", "border" : "TOSMRK1.bmp", "area" : "TZSMRK1.bmp" }, + "resourceSilo": { "animation" : "TBSTSILO.def", "x" : 458, "y" : 248, "z" : 2, "campaignBonus" : "BoSmrk2.pcx", "border" : "TOSMRK2.bmp", "area" : "TZSMRK2.bmp" }, + "blacksmith": { "animation" : "TBSTBLAK.def", "x" : 660, "y" : 286, "campaignBonus" : "BoSblak1.pcx", "border" : "TOSBLK1.bmp", "area" : "TZSBLK1.bmp" }, + "special1": { "animation" : "TBSTSPEC.def", "x" : 550, "y" : 229, "campaignBonus" : "BoSescap.pcx", "border" : "TOSCA1EA.bmp", "area" : "TZSCA1EA.bmp" }, + "horde1": { "animation" : "TBSTHRD1.def", "x" : 373, "y" : 239, "campaignBonus" : "BoSgob1h.pcx", "border" : "TOSGOB1H.bmp", "area" : "TZSGOB1H.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBSTHRD2.def", "x" : 373, "y" : 220, "campaignBonus" : "BoSgob2h.pcx", "border" : "TOSGOB2H.bmp", "area" : "TZSGOB2H.bmp", "hidden" : true, "builds" : "horde1" }, + "special2": { "animation" : "TBSTEXT0.def", "x" : 473, "y" : 282, "z" : 3, "campaignBonus" : "BoSmrk1c.pcx", "border" : "TOSMRK1C.bmp", "area" : "TZSMRK1C.bmp" }, + "special3": { "animation" : "TBSTEXT1.def", "x" : 617, "y" : 286, "z" : 1, "campaignBonus" : "BoSblak2.pcx", "border" : "TOSBLK2.bmp", "area" : "TZSBLK2.bmp" }, + "special4": { "animation" : "TBSTEXT2.def", "x" : 313, "y" : 13, "z" : -1, "campaignBonus" : "BoSvahal.pcx", "border" : "TOSVAH.bmp", "area" : "TZSVAH.bmp" }, + "grail": { "animation" : "TBSTHOLY.def", "x" : 321, "y" : 105, "z" : 3, "campaignBonus" : "BoSholy.pcx", "border" : "TOSHOLYA.bmp", "area" : "TZSHOLYA.bmp" }, + "dwellingLvl1": { "animation" : "TBSTDW_0.def", "x" : 373, "y" : 239, "campaignBonus" : "BoSgob1.pcx", "border" : "TOSGOB1.bmp", "area" : "TZSGOB1.bmp" }, + "dwellingLvl2": { "animation" : "TBSTDW_1.def", "x" : 266, "y" : 246, "z" : 1, "campaignBonus" : "BoSwolf1.pcx", "border" : "TOSWOL1.bmp", "area" : "TZSWOL1.bmp" }, + "dwellingLvl3": { "animation" : "TBSTDW_2.def", "x" : 566, "y" : 232, "z" : 2, "campaignBonus" : "BoSorc1.pcx", "border" : "TOSORC1.bmp", "area" : "TZSORC1.bmp" }, + "dwellingLvl4": { "animation" : "TBSTDW_3.def", "x" : 197, "y" : 204, "campaignBonus" : "BoSogre1.pcx", "border" : "TOSOGR1.bmp", "area" : "TZSOGR1.bmp" }, + "dwellingLvl5": { "animation" : "TBSTDW_4.def", "x" : 137, "y" : 30, "z" : -1, "campaignBonus" : "BoSroc1.pcx", "border" : "TOSROC1.bmp", "area" : "TZSROC1.bmp" }, + "dwellingLvl6": { "animation" : "TBSTDW_5.def", "x" : 622, "y" : 160, "z" : -2, "campaignBonus" : "BoScyc1.pcx", "border" : "TOSCYC1.bmp", "area" : "TZSCYC1.bmp" }, + "dwellingLvl7": { "animation" : "TBSTDW_6.def", "x" : 604, "y" : 0, "campaignBonus" : "BoSbeh1.pcx", "border" : "TOSBEH1A.bmp", "area" : "TZSBEH1A.bmp" }, + "dwellingUpLvl1": { "animation" : "TBSTUP_0.def", "x" : 373, "y" : 220, "campaignBonus" : "BoSgob2.pcx", "border" : "TOSGOB2.bmp", "area" : "TZSGOB2.bmp" }, + "dwellingUpLvl2": { "animation" : "TBSTUP_1.def", "x" : 266, "y" : 225, "z" : 1, "campaignBonus" : "BoSwolf2.pcx", "border" : "TOSWOL2.bmp", "area" : "TZSWOL2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBSTUP_2.def", "x" : 566, "y" : 158, "z" : 2, "campaignBonus" : "BoSorc2.pcx", "border" : "TOSORC2.bmp", "area" : "TZSORC2.bmp" }, + "dwellingUpLvl4": { "animation" : "TBSTUP_3.def", "x" : 197, "y" : 137, "campaignBonus" : "BoSogre2.pcx", "border" : "TOSOGR2.bmp", "area" : "TZSOGR2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBSTUP_4.def", "x" : 129, "y" : 15, "z" : -1, "campaignBonus" : "BoSroc2.pcx", "border" : "TOSROC2.bmp", "area" : "TZSROC2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBSTUP_5.def", "x" : 616, "y" : 93, "z" : -2, "campaignBonus" : "BoScyc2.pcx", "border" : "TOSCYC2A.bmp", "area" : "TZSCYC2A.bmp" }, + "dwellingUpLvl7": { "animation" : "TBSTUP_6.def", "x" : 604, "y" : 0, "campaignBonus" : "BoSbeh2.pcx", "border" : "TOSBEH2A.bmp", "area" : "TZSBEH2A.bmp" } }, "musicTheme" : [ "music/Stronghold" ], diff --git a/config/factions/tower.json b/config/factions/tower.json index a66491500..05064d177 100644 --- a/config/factions/tower.json +++ b/config/factions/tower.json @@ -79,43 +79,43 @@ }, "structures" : { - "mageGuild1": { "animation" : "TBTWMAGE.def", "x" : 597, "y" : 82, "z" : -1, "border" : "TOTGLD1.bmp", "area" : "TZTGLD1.bmp" }, - "mageGuild2": { "animation" : "TBTWMAG2.def", "x" : 593, "y" : 65, "z" : -1, "border" : "TOTGLD2.bmp", "area" : "TZTGLD2.bmp" }, - "mageGuild3": { "animation" : "TBTWMAG3.def", "x" : 593, "y" : 48, "z" : -1, "border" : "TOTGLD3.bmp", "area" : "TZTGLD3.bmp" }, - "mageGuild4": { "animation" : "TBTWMAG4.def", "x" : 593, "y" : 31, "z" : -1, "border" : "TOTGLD4.bmp", "area" : "TZTGLD4.bmp" }, - "mageGuild5": { "animation" : "TBTWMAG5.def", "x" : 593, "y" : 14, "z" : -1, "border" : "TOTGLD5.bmp", "area" : "TZTGLD5.bmp" }, - "tavern": { "animation" : "TBTWTVRN.def", "x" : 375, "y" : 278, "z" : 1, "border" : "TOTTAV.bmp", "area" : "TZTTAV.bmp" }, - "fort": { "animation" : "TBTWCSTL.def", "x" : 304, "y" : 0, "z" : -1, "border" : "TOTCAS1.bmp", "area" : "TZTCAS1.bmp" }, - "citadel": { "animation" : "TBTWCAS2.def", "x" : 301, "y" : 0, "z" : -1, "border" : "TOTCAS2.bmp", "area" : "TZTCAS2.bmp" }, - "castle": { "animation" : "TBTWCAS3.def", "x" : 301, "y" : 0, "z" : -1, "border" : "TOTCAS3.bmp", "area" : "TZTCAS3.bmp" }, - "villageHall": { "animation" : "TBTWHALL.def", "x" : 0, "y" : 259, "z" : 2, "border" : "TOTHAL1.bmp", "area" : "TZTHAL1.bmp" }, - "townHall": { "animation" : "TBTWHAL2.def", "x" : 0, "y" : 220, "z" : 2, "border" : "TOTHAL2.bmp", "area" : "TZTHAL2.bmp" }, - "cityHall": { "animation" : "TBTWHAL3.def", "x" : 0, "y" : 82, "z" : 2, "border" : "TOTHAL3.bmp", "area" : "TZTHAL3.bmp" }, - "capitol": { "animation" : "TBTWHAL4.def", "x" : 0, "y" : 82, "z" : 2, "border" : "TOTHAL4.bmp", "area" : "TZTHAL4.bmp" }, - "marketplace": { "animation" : "TBTWMARK.def", "x" : 614, "y" : 292, "border" : "TOTMRK.bmp", "area" : "TZTMRK.bmp" }, - "resourceSilo": { "animation" : "TBTWSILO.def", "x" : 763, "y" : 214, "z" : 3, "border" : "TOTMRKS.bmp", "area" : "TZTMRKS.bmp" }, - "blacksmith": { "animation" : "TBTWBLAK.def", "x" : 478, "y" : 211, "border" : "TOTBLKA.bmp", "area" : "TZTBLKA.bmp" }, - "special1": { "animation" : "TBTWSPEC.def", "x" : 674, "y" : 276, "z" : 2, "border" : "TOTMRKA.bmp", "area" : "TZTMRKA.bmp" }, - "horde1": { "animation" : "TBTWHRD1.def", "x" : 0, "y" : 47, "border" : "TOTGAR1H.bmp", "area" : "TZTGAR1H.bmp", "hidden" : true }, - "horde1Upgr": { "animation" : "TBTWHRD2.def", "x" : 0, "y" : 28, "border" : "TOTGAR2H.bmp", "area" : "TZTGAR2H.bmp", "hidden" : true, "builds" : "horde1" }, - "special2": { "animation" : "TBTWEXT0.def", "x" : 409, "y" : 82, "border" : "TOTCASW.bmp", "area" : "TZTCASW.bmp" }, - "special3": { "animation" : "TBTWEXT1.def", "x" : 702, "y" : 115, "border" : "TOTGLDL.bmp", "area" : "TZTGLDL.bmp" }, - "special4": { "animation" : "TBTWEXT2.def", "x" : 592, "y" : 189, "z" : 1, "border" : "TOTGLDW.bmp", "area" : "TZTGLDW.bmp" }, - "grail": { "animation" : "TBTWHOLY.def", "x" : 237, "y" : 14, "z" : -2, "border" : "TOTHOLYA.bmp", "area" : "TZTHOLYA.bmp" }, - "dwellingLvl1": { "animation" : "TBTWDW_0.def", "x" : 453, "y" : 221, "z" : 1, "border" : "TOTGRM1A.bmp", "area" : "TZTGRM1A.bmp" }, - "dwellingLvl2": { "animation" : "TBTWDW_1.def", "x" : 4, "y" : 46, "border" : "TOTGAR1.bmp", "area" : "TZTGAR1.bmp" }, - "dwellingLvl3": { "animation" : "TBTWDW_2.def", "x" : 209, "y" : 177, "z" : 1, "border" : "TOTGOL1A.bmp", "area" : "TZTGOL1A.bmp" }, - "dwellingLvl4": { "animation" : "TBTWDW_3.def", "x" : 613, "y" : 95, "border" : "TOTMAG1.bmp", "area" : "TZTMAG1.bmp" }, - "dwellingLvl5": { "animation" : "TBTWDW_4.def", "x" : 511, "y" : 75, "border" : "TOTGEN1.bmp", "area" : "TZTGEN1.bmp" }, - "dwellingLvl6": { "animation" : "TBTWDW_5.def", "x" : 681, "y" : 208, "z" : 2, "border" : "TOTNAG1.bmp", "area" : "TZTNAG1.bmp" }, - "dwellingLvl7": { "animation" : "TBTWDW_6.def", "x" : 75, "y" : 144, "z" : -1, "border" : "TOTTIT1.bmp", "area" : "TZTTIT1.bmp" }, - "dwellingUpLvl1": { "animation" : "TBTWUP_0.def", "x" : 446, "y" : 221, "z" : 1, "border" : "TOTGRM2A.bmp", "area" : "TZTGRM2A.bmp" }, - "dwellingUpLvl2": { "animation" : "TBTWUP_1.def", "x" : 4, "y" : 28, "border" : "TOTGAR2.bmp", "area" : "TZTGAR2.bmp" }, - "dwellingUpLvl3": { "animation" : "TBTWUP_2.def", "x" : 209, "y" : 177, "z" : 1, "border" : "TOTGOL2A.bmp", "area" : "TZTGOL2A.bmp" }, - "dwellingUpLvl4": { "animation" : "TBTWUP_3.def", "x" : 613, "y" : 74, "border" : "TOTMAG2.bmp", "area" : "TZTMAG2.bmp" }, - "dwellingUpLvl5": { "animation" : "TBTWUP_4.def", "x" : 511, "y" : 8, "border" : "TOTGEN2.bmp", "area" : "TZTGEN2.bmp" }, - "dwellingUpLvl6": { "animation" : "TBTWUP_5.def", "x" : 681, "y" : 157, "z" : 2, "border" : "TOTNAG2.bmp", "area" : "TZTNAG2.bmp" }, - "dwellingUpLvl7": { "animation" : "TBTWUP_6.def", "x" : 75, "y" : 91, "z" : -1, "border" : "TOTTIT2.bmp", "area" : "TZTTIT2.bmp" } + "mageGuild1": { "animation" : "TBTWMAGE.def", "x" : 597, "y" : 82, "z" : -1, "campaignBonus" : "BoTGld1.pcx", "border" : "TOTGLD1.bmp", "area" : "TZTGLD1.bmp" }, + "mageGuild2": { "animation" : "TBTWMAG2.def", "x" : 593, "y" : 65, "z" : -1, "campaignBonus" : "BoTGld2.pcx", "border" : "TOTGLD2.bmp", "area" : "TZTGLD2.bmp" }, + "mageGuild3": { "animation" : "TBTWMAG3.def", "x" : 593, "y" : 48, "z" : -1, "campaignBonus" : "BoTGld3.pcx", "border" : "TOTGLD3.bmp", "area" : "TZTGLD3.bmp" }, + "mageGuild4": { "animation" : "TBTWMAG4.def", "x" : 593, "y" : 31, "z" : -1, "campaignBonus" : "BoTGld4.pcx", "border" : "TOTGLD4.bmp", "area" : "TZTGLD4.bmp" }, + "mageGuild5": { "animation" : "TBTWMAG5.def", "x" : 593, "y" : 14, "z" : -1, "campaignBonus" : "BoTGld5.pcx", "border" : "TOTGLD5.bmp", "area" : "TZTGLD5.bmp" }, + "tavern": { "animation" : "TBTWTVRN.def", "x" : 375, "y" : 278, "z" : 1, "campaignBonus" : "BoTTav.pcx", "border" : "TOTTAV.bmp", "area" : "TZTTAV.bmp" }, + "fort": { "animation" : "TBTWCSTL.def", "x" : 304, "y" : 0, "z" : -1, "campaignBonus" : "BoTCast1.pcx", "border" : "TOTCAS1.bmp", "area" : "TZTCAS1.bmp" }, + "citadel": { "animation" : "TBTWCAS2.def", "x" : 301, "y" : 0, "z" : -1, "campaignBonus" : "BoTCast2.pcx", "border" : "TOTCAS2.bmp", "area" : "TZTCAS2.bmp" }, + "castle": { "animation" : "TBTWCAS3.def", "x" : 301, "y" : 0, "z" : -1, "campaignBonus" : "BoTCast3.pcx", "border" : "TOTCAS3.bmp", "area" : "TZTCAS3.bmp" }, + "villageHall": { "animation" : "TBTWHALL.def", "x" : 0, "y" : 259, "z" : 2, "campaignBonus" : "BoTHall1.pcx", "border" : "TOTHAL1.bmp", "area" : "TZTHAL1.bmp" }, + "townHall": { "animation" : "TBTWHAL2.def", "x" : 0, "y" : 220, "z" : 2, "campaignBonus" : "BoTHall2.pcx", "border" : "TOTHAL2.bmp", "area" : "TZTHAL2.bmp" }, + "cityHall": { "animation" : "TBTWHAL3.def", "x" : 0, "y" : 82, "z" : 2, "campaignBonus" : "BoTHall3.pcx", "border" : "TOTHAL3.bmp", "area" : "TZTHAL3.bmp" }, + "capitol": { "animation" : "TBTWHAL4.def", "x" : 0, "y" : 82, "z" : 2, "campaignBonus" : "BoTHall4.pcx", "border" : "TOTHAL4.bmp", "area" : "TZTHAL4.bmp" }, + "marketplace": { "animation" : "TBTWMARK.def", "x" : 614, "y" : 292, "campaignBonus" : "BoTMark.pcx", "border" : "TOTMRK.bmp", "area" : "TZTMRK.bmp" }, + "resourceSilo": { "animation" : "TBTWSILO.def", "x" : 763, "y" : 214, "z" : 3, "campaignBonus" : "BoTMarkS.pcx", "border" : "TOTMRKS.bmp", "area" : "TZTMRKS.bmp" }, + "blacksmith": { "animation" : "TBTWBLAK.def", "x" : 478, "y" : 211, "campaignBonus" : "BoTBlack.pcx", "border" : "TOTBLKA.bmp", "area" : "TZTBLKA.bmp" }, + "special1": { "animation" : "TBTWSPEC.def", "x" : 674, "y" : 276, "z" : 2, "campaignBonus" : "BoTMarkA.pcx", "border" : "TOTMRKA.bmp", "area" : "TZTMRKA.bmp" }, + "horde1": { "animation" : "TBTWHRD1.def", "x" : 0, "y" : 47, "campaignBonus" : "BoTGa1H.pcx", "border" : "TOTGAR1H.bmp", "area" : "TZTGAR1H.bmp", "hidden" : true }, + "horde1Upgr": { "animation" : "TBTWHRD2.def", "x" : 0, "y" : 28, "campaignBonus" : "BoTGa2h.pcx", "border" : "TOTGAR2H.bmp", "area" : "TZTGAR2H.bmp", "hidden" : true, "builds" : "horde1" }, + "special2": { "animation" : "TBTWEXT0.def", "x" : 409, "y" : 82, "campaignBonus" : "BoTCastW.pcx", "border" : "TOTCASW.bmp", "area" : "TZTCASW.bmp" }, + "special3": { "animation" : "TBTWEXT1.def", "x" : 702, "y" : 115, "campaignBonus" : "BoTGldL.pcx", "border" : "TOTGLDL.bmp", "area" : "TZTGLDL.bmp" }, + "special4": { "animation" : "TBTWEXT2.def", "x" : 592, "y" : 189, "z" : 1, "campaignBonus" : "BoTGldW.pcx", "border" : "TOTGLDW.bmp", "area" : "TZTGLDW.bmp" }, + "grail": { "animation" : "TBTWHOLY.def", "x" : 237, "y" : 14, "z" : -2, "campaignBonus" : "BoTGrail.pcx", "border" : "TOTHOLYA.bmp", "area" : "TZTHOLYA.bmp" }, + "dwellingLvl1": { "animation" : "TBTWDW_0.def", "x" : 453, "y" : 221, "z" : 1, "campaignBonus" : "BoTGrem1.pcx", "border" : "TOTGRM1A.bmp", "area" : "TZTGRM1A.bmp" }, + "dwellingLvl2": { "animation" : "TBTWDW_1.def", "x" : 4, "y" : 46, "campaignBonus" : "BoTGar1.pcx", "border" : "TOTGAR1.bmp", "area" : "TZTGAR1.bmp" }, + "dwellingLvl3": { "animation" : "TBTWDW_2.def", "x" : 209, "y" : 177, "z" : 1, "campaignBonus" : "BoTGolm1.pcx", "border" : "TOTGOL1A.bmp", "area" : "TZTGOL1A.bmp" }, + "dwellingLvl4": { "animation" : "TBTWDW_3.def", "x" : 613, "y" : 95, "campaignBonus" : "BoTMag1.pcx", "border" : "TOTMAG1.bmp", "area" : "TZTMAG1.bmp" }, + "dwellingLvl5": { "animation" : "TBTWDW_4.def", "x" : 511, "y" : 75, "campaignBonus" : "BoTGen1.pcx", "border" : "TOTGEN1.bmp", "area" : "TZTGEN1.bmp" }, + "dwellingLvl6": { "animation" : "TBTWDW_5.def", "x" : 681, "y" : 208, "z" : 2, "campaignBonus" : "BoTNaga1.pcx", "border" : "TOTNAG1.bmp", "area" : "TZTNAG1.bmp" }, + "dwellingLvl7": { "animation" : "TBTWDW_6.def", "x" : 75, "y" : 144, "z" : -1, "campaignBonus" : "BoTTit1.pcx", "border" : "TOTTIT1.bmp", "area" : "TZTTIT1.bmp" }, + "dwellingUpLvl1": { "animation" : "TBTWUP_0.def", "x" : 446, "y" : 221, "z" : 1, "campaignBonus" : "BoTGrem2.pcx", "border" : "TOTGRM2A.bmp", "area" : "TZTGRM2A.bmp" }, + "dwellingUpLvl2": { "animation" : "TBTWUP_1.def", "x" : 4, "y" : 28, "campaignBonus" : "BoTGar2.pcx", "border" : "TOTGAR2.bmp", "area" : "TZTGAR2.bmp" }, + "dwellingUpLvl3": { "animation" : "TBTWUP_2.def", "x" : 209, "y" : 177, "z" : 1, "campaignBonus" : "BoTGolm2.pcx", "border" : "TOTGOL2A.bmp", "area" : "TZTGOL2A.bmp" }, + "dwellingUpLvl4": { "animation" : "TBTWUP_3.def", "x" : 613, "y" : 74, "campaignBonus" : "BoTMag2.pcx", "border" : "TOTMAG2.bmp", "area" : "TZTMAG2.bmp" }, + "dwellingUpLvl5": { "animation" : "TBTWUP_4.def", "x" : 511, "y" : 8, "campaignBonus" : "BoTGen2.pcx", "border" : "TOTGEN2.bmp", "area" : "TZTGEN2.bmp" }, + "dwellingUpLvl6": { "animation" : "TBTWUP_5.def", "x" : 681, "y" : 157, "z" : 2, "campaignBonus" : "BoTNaga2.pcx", "border" : "TOTNAG2.bmp", "area" : "TZTNAG2.bmp" }, + "dwellingUpLvl7": { "animation" : "TBTWUP_6.def", "x" : 75, "y" : 91, "z" : -1, "campaignBonus" : "BoTTit2.pcx", "border" : "TOTTIT2.bmp", "area" : "TZTTIT2.bmp" } }, "musicTheme" : [ "music/TowerTown" ], @@ -171,7 +171,12 @@ "special1": { "requires" : [ "marketplace" ], "marketModes" : ["resource-artifact", "artifact-resource"] }, "horde1": { "id" : 18, "upgrades" : "dwellingLvl2" }, "horde1Upgr": { "id" : 19, "upgrades" : "dwellingUpLvl2", "requires" : [ "horde1" ], "mode" : "auto" }, - "special2": { "height" : "high", "requires" : [ "fort" ] }, + "special2": { + "requires" : [ "fort" ], + "bonuses": [ + { "type": "SIGHT_RADIUS", "val": 15 }, // 5 base + 15 bonus = 20 tiles range + ] + }, "special3": { "type" : "library", "requires" : [ "mageGuild1" ] }, "special4": { "requires" : [ "mageGuild1" ], @@ -185,7 +190,13 @@ ] } }, - "grail": { "height" : "skyship", "produce" : { "gold": 5000 }, "bonuses": [ { "type": "PRIMARY_SKILL", "subtype": "primarySkill.knowledge", "val": 15 } ] }, + "grail": { + "produce" : { "gold": 5000 }, + "bonuses": [ + { "type": "PRIMARY_SKILL", "subtype": "primarySkill.knowledge", "val": 15 }, + { "type": "FULL_MAP_SCOUTING" } + ] + }, "dwellingLvl1": { "id" : 30, "requires" : [ "fort" ] }, "dwellingLvl2": { "id" : 31, "requires" : [ "dwellingLvl1" ] }, diff --git a/config/gameConfig.json b/config/gameConfig.json index 5ab82b8fe..769a748c9 100644 --- a/config/gameConfig.json +++ b/config/gameConfig.json @@ -99,6 +99,10 @@ "config/spells/vcmiAbility.json", "config/spells/moats.json" ], + "spellSchools" : + [ + "config/spellSchools.json" + ], "skills" : [ "config/skills.json" @@ -123,6 +127,11 @@ [ "config/obstacles.json" ], + "campaignRegions" : + [ + "config/campaignRegions.json" + ], + "settings": { @@ -145,7 +154,6 @@ "restorationOfErathia" : { "supported" : true, "iconIndex" : 0, - "buildingsCommon": { "townHall" : 0, "cityHall" : 1, @@ -190,7 +198,6 @@ "dwellingLvl7" : 39, "dwellingUpLvl7" : 40 }, - "buildings" : { "castle" : { "special1" : 18, // lighthouse @@ -236,10 +243,88 @@ "special3" : 18 // glyphsOfFear } }, - "portraits" : { "catherine" : 128, // In "RoE" Catherine only has portrait "portraitGeneralKendal" : 129 + }, + "campaignRegions" : { + + "good1" : 1, // Long Live the Queen + "good2" : 2, // Liberation + "good3" : 3, // Song for the Father + "evil1" : 4, // Dungeons and devils + "evil2" : 5, // Long Live the King + "neutral1" : 6, // Spoils of War + "secret1" : 7 // Seeds Of Discontent + }, + "campaignMusic" : { + "CampainMusic01" : 0, + "CampainMusic02" : 1, + "CampainMusic03" : 2, + "CampainMusic04" : 3, + "CampainMusic05" : 4, + "CampainMusic06" : 5, + "CampainMusic07" : 6, + "CampainMusic08" : 7, + "CampainMusic09" : 8, + "AiTheme0" : 9, + "AiTheme1" : 10, + "AiTheme2" : 11, + "Combat01" : 12, + "Combat02" : 13, + "Combat03" : 14, + "Combat04" : 15, + "CstleTown" : 16, + "TowerTown" : 17, + "Rampart" : 18, + "InfernoTown" : 19, + "NecroTown" : 20, + "Dungeon" : 21, + "Stronghold" : 22, + "FortressTown" : 23, + "ElemTown" : 24, + "Dirt" : 25, + "Sand" : 26, + "Grass" : 27, + "Snow" : 28, + "Swamp" : 29, + "Rough" : 30, + "Underground" : 31, + "Lava" : 32, + "Water" : 33, + "GoodTheme" : 34, + "NeutralTheme" : 35, + "EvilTheme" : 36, + "SecretTheme" : 37, + "LoopLepr" : 38, + "MainMenu" : 39, + "Win Scenario" : 40 + }, + "campaignVideo" : { + "GOOD1A.SMK" : 0, + "GOOD1B.SMK" : 1, + "GOOD1C.SMK" : 2, + "EVIL1A.SMK" : 3, + "EVIL1B.SMK" : 4, + "EVIL1C.SMK" : 5, + "NEUTRALA.SMK" : 6, + "NEUTRALB.SMK" : 7, + "NEUTRALC.SMK" : 8, + "GOOD2A.SMK" : 9, + "GOOD2B.SMK" : 10, + "GOOD2C.SMK" : 11, + "GOOD2D.SMK" : 12, + "EVIL2A.SMK" : 13, + "EVIL2AP1.SMK" : 14, + "EVIL2B.SMK" : 15, + "EVIL2C.SMK" : 16, + "EVIL2D.SMK" : 17, + "GOOD3A.SMK" : 18, + "GOOD3B.SMK" : 19, + "GOOD3C.SMK" : 20, + "SECRETA.SMK" : 21, + "SECRETB.SMK" : 22, + "SECRETC.SMK" : 23 } }, "armageddonsBlade" : { @@ -251,19 +336,69 @@ "special2" : 18 // magicUniversity } }, - "portraits" : { "pasis" : 128, "thunar" : 129, "portraitGeneralKendal" : 156, "portraitYoungCristian" : 157, "portraitOrdwald" : 158 + }, + "campaignRegions" : { + "dragonSlayer" : 8, + "foolhardyWaywardness" : 9, + "festivalOfLife" : 10, + "dragonsBlood" : 11, + "playingWithFire" : 12, + "armageddonsBlade" : 13 + }, + "campaignMusic" : { + "CampainMusic10" : 41, + "BladeABCampaign" : 42, + "BladeDBCampaign" : 43, + "BladeDSCampaign" : 44, + "BladeFLCampaign" : 45, + "BladeFWCampaign" : 46, + "BladePFCampaign" : 47 + }, + "campaignVideo" : { + "H3ABab1.smk" : 24, + "H3ABab2.smk" : 25, + "H3ABab3.smk" : 26, + "H3ABab4.smk" : 27, + "H3ABab5.smk" : 28, + "H3ABab6.smk" : 29, + "H3ABab7.smk" : 30, + "H3ABab8.smk" : 31, + "H3ABab9.smk" : 32, + "H3ABdb1.smk" : 33, + "H3ABdb2.smk" : 34, + "H3ABdb3.smk" : 35, + "H3ABdb4.smk" : 36, + "H3ABdb5.smk" : 37, + "H3ABds1.smk" : 38, + "H3ABds2.smk" : 39, + "H3ABds3.smk" : 40, + "H3ABds4.smk" : 41, + "H3ABds5.smk" : 42, + "H3ABfl1.smk" : 43, + "H3ABfl2.smk" : 44, + "H3ABfl3.smk" : 45, + "H3ABfl4.smk" : 46, + "H3ABfl5.smk" : 47, + "H3ABfw1.smk" : 48, + "H3ABfw2.smk" : 49, + "H3ABfw3.smk" : 50, + "H3ABfw4.smk" : 51, + "H3ABfw5.smk" : 52, + "H3ABpf1.smk" : 53, + "H3ABpf2.smk" : 54, + "H3ABpf3.smk" : 55, + "H3ABpf4.smk" : 56 } }, "shadowOfDeath" : { "supported" : true, "iconIndex" : 2, - "portraits" : { "portraitGeneralKendal" : 156, "portraitYoungCristian" : 157, @@ -272,6 +407,64 @@ "portraitYoungGem" : 160, "portraitYoungSandro" : 161, "portraitYoungYog" : 162 + }, + "campaignRegions" : { + "hackAndSlash" : 14, + "birthOfBarbarian" : 15, + "newBeginning" : 16, + "elixirOfLife" : 17, + "riseOfTheNecromancer" : 18, + "unholyAlliance" : 19, + "spectreOfPower" : 20 + }, + "campaignMusic" : { + "CampainMusic11" : 48 + }, + "campaignVideo" : { + "H3x2_BBa.smk" : 57, + "H3x2_BBb.smk" : 58, + "H3x2_BBc.smk" : 59, + "H3x2_BBd.smk" : 60, + "H3x2_BBe.smk" : 61, + "H3x2_BBf.smk" : 62, + "H3x2_Ela.smk" : 63, + "H3x2_Elb.smk" : 64, + "H3x2_Elc.smk" : 65, + "H3x2_Eld.smk" : 66, + "H3x2_Ele.smk" : 67, + "H3x2_HSa.smk" : 68, + "EVIL2C.SMK" : 69, + "H3x2_HSc.smk" : 70, + "H3x2_HSd.smk" : 71, + "H3x2_HSe.smk" : 72, + "H3x2_NBa.smk" : 73, + "H3x2_NBb.smk" : 74, + "H3x2_Nbc.smk" : 75, + "H3x2_Nbd.smk" : 76, + "H3x2_Nbe.smk" : 77, + "H3x2_RNa.smk" : 78, + "H3x2_RNb.smk" : 79, + "H3x2_RNc.smk" : 80, + "H3x2_RNd.smk" : 81, + "H3x2_RNe1.smk": 82, + "H3x2_SPa.smk" : 83, + "H3x2_SPb.smk" : 84, + "H3x2_SPc.smk" : 85, + "H3x2_SPd.smk" : 86, + "H3x2_SPe.smk" : 87, + "H3x2_UAa.smk" : 88, + "H3x2_UAb.smk" : 89, + "H3x2_UAc.smk" : 90, + "H3x2_UAd.smk" : 91, + "H3x2_UAe.smk" : 92, + "H3x2_UAf.smk" : 93, + "H3x2_UAg.smk" : 94, + "H3x2_UAh.smk" : 95, + "H3x2_UAi.smk" : 96, + "H3x2_UAj.smk" : 97, + "H3x2_UAk.smk" : 98, + "H3x2_UAl.smk" : 99, + "H3x2_UAm.smk" : 100 //H3x2_UAm.bik? } }, "chronicles" : { @@ -314,9 +507,17 @@ "movementPointsLand" : [ 1500, 1500, 1500, 1500, 1560, 1630, 1700, 1760, 1830, 1900, 1960, 2000 ], /// movement points hero can get on start of the turn when on sea, depending on speed of slowest creature (0-based list) "movementPointsSea" : [ 1500 ], - + /// maximal secondary skills per hero - "skillPerHero" : 8 + "skillPerHero" : 8, + + /// Base scouting range for hero without any range modifiers + "baseScoutingRange" : 5, + + /// Strength of generic secondary skill specialties ( "secondary" : "skillName" ) per level + "specialtySecondarySkillGrowth" : 5, + /// Strength of generic creature specialties ( "creature" : "creatureName" ) per level + "specialtyCreatureGrowth" : 5 }, "towns": @@ -338,7 +539,10 @@ // How much researchs/skips per day are possible? (array index is spell tier) "spellResearchPerDay": [ 2, 2, 2, 2, 1 ], // Exponent for increasing cost for each research (factor 1 disables this; array index is spell tier) - "spellResearchCostExponentPerResearch": [ 1.25, 1.25, 1.25, 1.25, 1.25 ] + "spellResearchCostExponentPerResearch": [ 1.25, 1.25, 1.25, 1.25, 1.25 ], + + // Base scouting range for town without any range modifiers + "baseScoutingRange" : 5 }, "combat": @@ -584,12 +788,6 @@ "val" : 1, "valueType" : "BASE_NUMBER" }, - "sightRadius" : - { - "type" : "SIGHT_RADIUS", //default sight radius - "val" : 5, - "valueType" : "BASE_NUMBER" - }, "experienceGain" : { "type" : "HERO_EXPERIENCE_GAIN_PERCENT", //default hero xp diff --git a/config/heroes/castle.json b/config/heroes/castle.json index ac013f35d..75e23f773 100644 --- a/config/heroes/castle.json +++ b/config/heroes/castle.json @@ -94,7 +94,8 @@ { "skill" : "artillery", "level": "basic" } ], "specialty" : { - "creature" : "ballista" + "creature" : "ballista", + "creatureLevel" : 5 } }, "tyris": diff --git a/config/heroes/dungeon.json b/config/heroes/dungeon.json index 58b067466..5fafca294 100644 --- a/config/heroes/dungeon.json +++ b/config/heroes/dungeon.json @@ -24,7 +24,8 @@ { "skill" : "offence", "level": "basic" } ], "specialty" : { - "creature" : "ballista" + "creature" : "ballista", + "creatureLevel" : 5 } }, "dace": diff --git a/config/heroes/fortress.json b/config/heroes/fortress.json index c17bbaae3..2a276babe 100644 --- a/config/heroes/fortress.json +++ b/config/heroes/fortress.json @@ -108,7 +108,8 @@ { "skill" : "artillery", "level": "basic" } ], "specialty" : { - "creature" : "ballista" + "creature" : "ballista", + "creatureLevel" : 5 } }, "broghild": diff --git a/config/heroes/inferno.json b/config/heroes/inferno.json index 1991298d3..029ac2e73 100644 --- a/config/heroes/inferno.json +++ b/config/heroes/inferno.json @@ -98,7 +98,8 @@ { "skill" : "logistics", "level": "basic" } ], "specialty" : { - "creature" : "ballista" + "creature" : "ballista", + "creatureLevel" : 5 } }, "nymus": diff --git a/config/heroes/stronghold.json b/config/heroes/stronghold.json index b18748ff8..6c72e693b 100644 --- a/config/heroes/stronghold.json +++ b/config/heroes/stronghold.json @@ -24,7 +24,8 @@ { "skill" : "artillery", "level": "basic" } ], "specialty" : { - "creature" : "ballista" + "creature" : "ballista", + "creatureLevel" : 5 } }, "jabarkas": diff --git a/config/heroes/tower.json b/config/heroes/tower.json index 705c2477a..fa994b2e8 100644 --- a/config/heroes/tower.json +++ b/config/heroes/tower.json @@ -71,7 +71,8 @@ { "skill" : "tactics", "level": "basic" } ], "specialty" : { - "creature" : "ballista" + "creature" : "ballista", + "creatureLevel" : 5 } }, "fafner": diff --git a/config/schemas/artifact.json b/config/schemas/artifact.json index 7818ac074..af82cf778 100644 --- a/config/schemas/artifact.json +++ b/config/schemas/artifact.json @@ -91,16 +91,16 @@ "type" : "object", "additionalProperties" : false, "description" : "Graphical files associated with the artifact", - "required" : [ "image", "map" ], + "required" : [ "image", "map", "scenarioBonus" ], "properties" : { "image" : { "type" : "string", "description" : "Base image for this artifact, used for example in hero screen", "format" : "imageFile" }, - "large" : { + "scenarioBonus" : { "type" : "string", - "description" : "Large image, used for drag-and-drop and popup messages", + "description" : "Image 58x64 in size, for use as campaign scenario starting bonus selection", "format" : "imageFile" }, "map" : { diff --git a/config/schemas/bonus.json b/config/schemas/bonus.json index 06fe97745..2f8bf8bee 100644 --- a/config/schemas/bonus.json +++ b/config/schemas/bonus.json @@ -10,6 +10,32 @@ "type" : "boolean", "description" : "If set to true, all instances of this bonus will be hidden in UI" }, + + "creatureNature" : { + "type" : "boolean", + "description" : "If set to true, this bonus will be considered 'creature nature' bonus, and such creature won't be automatically granted LIVING bonus" + }, + + "description" : { + "type" : "string" + }, + + "subtypeDescriptions" : { + "type" : "object", + "description" : "Custom description string for bonus subtype", + "additionalProperties" : { + "type" : "string" + } + }, + + "valueDescriptions" : { + "type" : "object", + "description" : "Custom description string for bonus value", + "additionalProperties" : { + "type" : "string" + } + }, + "graphics" : { "type" : "object", "additionalProperties" : false, @@ -38,22 +64,6 @@ } } } - }, - - "subtypeDescriptions" : { - "type" : "object", - "description" : "Custom description string for bonus subtype", - "additionalProperties" : { - "type" : "string" - } - }, - - "valueDescriptions" : { - "type" : "object", - "description" : "Custom description string for bonus value", - "additionalProperties" : { - "type" : "string" - } } } } diff --git a/config/schemas/bonusInstance.json b/config/schemas/bonusInstance.json index 4a801c75d..477b04122 100644 --- a/config/schemas/bonusInstance.json +++ b/config/schemas/bonusInstance.json @@ -37,6 +37,78 @@ } } ] + }, + "updater" : + { + "anyOf" : [ + { + "type" : "string", + "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "DIVIDE_STACK_LEVEL", "BONUS_OWNER_UPDATER", "TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL" ] + }, + { + "description" : "GROWS_WITH_LEVEL updater", + "type" : "object", + "required" : ["type", "valPer20", "stepSize"], + "additionalProperties" : false, + "properties" : { + "type" : { + "type" : "string", + "const" : "GROWS_WITH_LEVEL", + }, + "valPer20" : { + "type" : "integer", + "description" : "Bonus value for each 20 steps" + }, + "stepSize" : { + "type" : "integer", + "minimum" : 1, + "description" : "Size of each step, in levels" + } + } + }, + { + "description" : "TIMES_HERO_LEVEL updater", + "type" : "object", + "required" : ["type"], + "additionalProperties" : false, + "properties" : { + "type" : { + "type" : "string", + "const" : "TIMES_HERO_LEVEL", + }, + "stepSize" : { + "type" : "integer", + "minimum" : 1, + "description" : "Size of each step, in levels" + } + } + }, + { + "description" : "TIMES_STACK_SIZE updater", + "type" : "object", + "required" : ["type"], + "additionalProperties" : false, + "properties" : { + "type" : { + "type" : "string", + "const" : "TIMES_STACK_SIZE", + }, + "stepSize" : { + "type" : "integer", + "minimum" : 1, + "description" : "Size of each step, in levels" + }, + "minimum" : { + "type" : "integer", + "description" : "Minimal bonus value" + }, + "maximum" : { + "type" : "integer", + "description" : "Maximal bonus value" + } + } + } + ] } }, "additionalProperties" : false, @@ -69,56 +141,10 @@ "enum" : [ "BATTLE_WIDE", "VISITED_TOWN_AND_VISITOR", "PLAYER_PROPAGATOR", "HERO", "TEAM_PROPAGATOR", "GLOBAL_EFFECT" ] }, "updater" : { - "anyOf" : [ - { - "type" : "string", - "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "DIVIDE_STACK_LEVEL", "BONUS_OWNER_UPDATER", "TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL" ] - }, - { - "description" : "updater", - "type" : "object", - "required" : ["type", "parameters"], - "additionalProperties" : false, - "properties" : { - "type" : { - "type" : "string", - "enum" : [ "GROWS_WITH_LEVEL" ], - "description" : "type" - }, - "parameters" : { - "type" : "array", - "description" : "parameters", - "additionalItems" : true - } - } - } - ] + "$ref" : "#/definitions/updater" }, "propagationUpdater" : { - "anyOf" : [ - { - "type" : "string", - "enum" : [ "TIMES_HERO_LEVEL", "TIMES_STACK_LEVEL", "ARMY_MOVEMENT", "BONUS_OWNER_UPDATER" ] - }, - { - "description" : "propagationUpdater", - "type" : "object", - "required" : ["type", "parameters"], - "additionalProperties" : false, - "properties" : { - "type" : { - "type" : "string", - "enum" : [ "GROWS_WITH_LEVEL", "ARMY_MOVEMENT" ], - "description" : "type" - }, - "parameters" : { - "type" : "array", - "description" : "parameters", - "additionalItems" : true - } - } - } - ] + "$ref" : "#/definitions/updater" }, "limiters" : { "$ref" : "#/definitions/nestedLimiter", diff --git a/config/schemas/campaignRegion.json b/config/schemas/campaignRegion.json new file mode 100644 index 000000000..cc9910727 --- /dev/null +++ b/config/schemas/campaignRegion.json @@ -0,0 +1,40 @@ +{ + "type" : "object", + "$schema" : "http://json-schema.org/draft-04/schema", + "title" : "VCMI campaign region format", + "description" : "Format used to define campaign regions for h3c maps in VCMI", + "required" : [ "prefix", "colorSuffixLength", "desc" ], + "additionalProperties" : false, + "properties" : { + "prefix" : + { + "type" : "string", + "description" : "Prefix for all images from this region" + }, + "colorSuffixLength" : + { + "type" : "number", + "description" : "Number of symbols used to encode color, 1 or 2" + }, + "desc" : + { + "type" : "array", + "description" : "List of regions in this campaign", + "items" : { + "type" : "object", + "additionalProperties" : false, + "properties" : { + "infix" : { + "type" : "string" + }, + "x" : { + "type" : "number" + }, + "y" : { + "type" : "number" + } + } + } + } + } +} diff --git a/config/schemas/gameSettings.json b/config/schemas/gameSettings.json index 8b65ac9f5..0b1b093a8 100644 --- a/config/schemas/gameSettings.json +++ b/config/schemas/gameSettings.json @@ -48,7 +48,10 @@ "movementCostBase" : { "type" : "number" }, "movementPointsLand" : { "type" : "array" }, "movementPointsSea" : { "type" : "array" }, - "skillPerHero" : { "type" : "number" } + "skillPerHero" : { "type" : "number" }, + "specialtyCreatureGrowth" : { "type" : "number" }, + "specialtySecondarySkillGrowth" : { "type" : "number" }, + "baseScoutingRange" : { "type" : "number" } } }, "towns" : { @@ -60,7 +63,8 @@ "spellResearch" : { "type" : "boolean" }, "spellResearchCost" : { "type" : "array" }, "spellResearchPerDay" : { "type" : "array" }, - "spellResearchCostExponentPerResearch" : { "type" : "array" } + "spellResearchCostExponentPerResearch" : { "type" : "array" }, + "baseScoutingRange" : { "type" : "number" } } }, "combat": { diff --git a/config/schemas/hero.json b/config/schemas/hero.json index 689911972..c23f4a2f2 100644 --- a/config/schemas/hero.json +++ b/config/schemas/hero.json @@ -136,6 +136,14 @@ "secondary" : { "type" : "string", "description" : "Shortcut for defining secondary skill specialty, using standard H3 rules." + }, + "creatureLevel" : { + "type" : "integer", + "description" : "Assumed creature level for creature specialty" + }, + "stepSize" : { + "type" : "integer", + "description" : "How creature or secondary skill specialty should grow per each step. Default is 5" } } }, diff --git a/config/schemas/mod.json b/config/schemas/mod.json index 843132826..5d3970cc8 100644 --- a/config/schemas/mod.json +++ b/config/schemas/mod.json @@ -90,6 +90,7 @@ }, "version" : { "type" : "string", + "format" : "version", "description" : "Current mod version, up to 3 numbers, dot-separated. Format: A.B.C" }, "changelog" : { @@ -270,10 +271,18 @@ "description" : "List of configuration files for creatures", "$ref" : "#/definitions/fileListOrObject" }, + "campaignRegions" : { + "description" : "List of configuration files for campaign regions", + "$ref" : "#/definitions/fileListOrObject" + }, "artifacts" : { "description" : "List of configuration files for artifacts", "$ref" : "#/definitions/fileListOrObject" }, + "spellSchools" : { + "description" : "List of configuration files for spell schools", + "$ref" : "#/definitions/fileListOrObject" + }, "spells" : { "description" : "List of configuration files for spells", "$ref" : "#/definitions/fileListOrObject" diff --git a/config/schemas/skill.json b/config/schemas/skill.json index 6e98987f0..5c29e85ce 100644 --- a/config/schemas/skill.json +++ b/config/schemas/skill.json @@ -16,6 +16,7 @@ "images" : { "type" : "object", "description" : "Skill icons of varying size", + "required" : [ "small", "medium", "large", "scenarioBonus"], "properties" : { "small" : { "type" : "string", @@ -31,6 +32,11 @@ "type" : "string", "description" : "82x93 skill icon", "format" : "imageFile" + }, + "scenarioBonus" : { + "type" : "string", + "description" : "58x64 skill icon for use as campaign scenario bonus", + "format" : "imageFile" } } }, diff --git a/config/schemas/spell.json b/config/schemas/spell.json index 535698995..c1ddadf74 100644 --- a/config/schemas/spell.json +++ b/config/schemas/spell.json @@ -58,7 +58,7 @@ }, "levelInfo" : { "type" : "object", - "required" :["range", "description", "cost", "power", "aiValue"], + "required" :["range", "description", "cost", "power"], "additionalProperties" : false, "properties" : { @@ -77,9 +77,6 @@ "type" : "string", "description" : "spell range description in SRSL" }, - "aiValue" : { - "type" : "number" - }, "effects" : { "type" : "object", "description" : "Timed effects (updated by prolongation)", @@ -108,11 +105,6 @@ "type" : "boolean", "description" : "true: friendly/hostile based on positiveness; false: all targets" }, - "clearTarget" : - { - "type" : "boolean", - "description" : "LOCATION target only. Target hex/tile must be clear" - }, "clearAffected" : { "type" : "boolean", @@ -127,8 +119,67 @@ "additionalProperties" : false } }, - "required" : ["type", "name", "school", "level", "power","gainChance","flags","levels"], + "required" : ["type", "name", "school", "level", "power", "flags", "levels"], "additionalProperties" : false, + + "allOf": [ + { + "if": { + "not" : { + "properties": { + "index" : { + "type" : "number" + } + } + }, + "properties": { + "type": { + "enum" : ["adventure", "combat"], + }, + + } + }, + "then": { + "required" : ["school", "gainChance" ], + "properties": { + "levels": { + "required" : ["none", "basic", "advanced", "expert"] + }, + "graphics" : { + "required" : ["iconBook", "iconScroll", "iconEffect", "iconImmune", "iconScenarioBonus"] + }, + } + } + }, + { + "if": { + "not" : { + "properties": { + "index" : { + "type" : "number" + } + } + }, + "properties": { + "type": { + "const" : "ability" + } + } + }, + "then": { + "required" : ["school", "gainChance" ], + "properties": { + "levels": { + "required" : ["none"] + }, + "graphics" : { + "required" : ["iconEffect", "iconImmune"] + }, + } + } + } + ], + "properties" : { "index" : { "type" : "number", @@ -273,7 +324,7 @@ }, "iconEffect" : { "type" : "string", - "description" : "Resourse path of icon for spell effects during battle" , + "description" : "Resourse path of icon for spell effects during battle", "format" : "imageFile" }, "iconImmune" : { @@ -283,7 +334,7 @@ }, "iconScenarioBonus" : { "type" : "string", - "description" : "Resourse path of icon for scenario bonus" , + "description" : "Resourse path of 58x64 icon for scenario bonus", "format" : "imageFile" } } @@ -301,7 +352,6 @@ "levels" : { "type" : "object", "additionalProperties" : false, - "required" : ["none", "basic", "advanced", "expert"], "properties" : { "base" : { "type" : "object", diff --git a/config/schemas/spellSchool.json b/config/schemas/spellSchool.json new file mode 100644 index 000000000..51d8b3349 --- /dev/null +++ b/config/schemas/spellSchool.json @@ -0,0 +1,19 @@ +{ + "type" : "object", + "$schema" : "http://json-schema.org/draft-04/schema", + "title" : "VCMI spell school format", + "description" : "Format used to define new spell schools in VCMI", + "required" : [ "schoolBorders" ], + "additionalProperties" : false, + "properties" : { + "index" : { + "type" : "number", + "description" : "numeric id of h3 spell school, prohibited for new schools" + }, + "schoolBorders" : { + "type" : "string", + "description" : "File with frame borders of mastery levels for spells of this spell school in spellbook", + "format" : "animationFile" + } + } +} diff --git a/config/schemas/townBuilding.json b/config/schemas/townBuilding.json index 691089b99..49983eff9 100644 --- a/config/schemas/townBuilding.json +++ b/config/schemas/townBuilding.json @@ -44,11 +44,6 @@ "enum" : [ "normal", "auto", "special", "grail" ], "description" : "Mode in which this building will be built" }, - "height" : { - "type" : "string", - "enum" : [ "skyship", "high", "average", "low"], - "description" : "Height for lookout towers and some grails" - }, "requires" : { "$ref" : "#/definitions/buildingRequirement", "description" : "List of town buildings that must be built before this one" @@ -133,6 +128,13 @@ "enum" : [ "resource-resource", "resource-player", "creature-resource", "resource-artifact", "artifact-resource", "artifact-experience", "creature-experience", "creature-undead", "resource-skill"], }, "description" : "List of modes available in this market" + }, + "marketOffer" : { + "type" : "array", + "items" : { + "type" : "string" + }, + "description" : "List of predefined items available on market from this building" } } } diff --git a/config/schemas/townStructure.json b/config/schemas/townStructure.json index c66cdc7eb..c69ee2dac 100644 --- a/config/schemas/townStructure.json +++ b/config/schemas/townStructure.json @@ -29,6 +29,11 @@ "description" : "Golden border around building, displayed when building is selected", "format" : "imageFile" }, + "campaignBonus" : { + "type" : "string", + "description" : "Town building icon for campaigns", + "format" : "imageFile" + }, "x" : { "type" : "number", "description" : "Position on screen" diff --git a/config/spellSchools.json b/config/spellSchools.json new file mode 100644 index 000000000..40abc223f --- /dev/null +++ b/config/spellSchools.json @@ -0,0 +1,21 @@ +{ + "air" : { + "index" : 0, + "schoolBorders" : "SplevA" + }, + + "fire" : { + "index" : 1, + "schoolBorders" : "SplevF" + }, + + "earth" : { + "index" : 2, + "schoolBorders" : "SplevE" + }, + + "water" : { + "index" : 3, + "schoolBorders" : "SplevW" + } +} diff --git a/config/spells/moats.json b/config/spells/moats.json index 5b864d9d2..c2507e324 100644 --- a/config/spells/moats.json +++ b/config/spells/moats.json @@ -14,7 +14,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -52,7 +51,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -111,7 +109,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -149,7 +146,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -205,7 +201,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -259,7 +254,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -297,7 +291,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -356,7 +349,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -394,7 +386,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -453,7 +444,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -491,7 +481,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -550,7 +539,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -588,7 +576,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, @@ -647,7 +634,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -685,7 +671,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 0, "cost" : 0, "targetModifier":{"smart":false}, diff --git a/config/spells/other.json b/config/spells/other.json index 3c6d24200..267cf78a0 100644 --- a/config/spells/other.json +++ b/config/spells/other.json @@ -78,7 +78,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" @@ -254,7 +253,6 @@ "range" : "0", "description" : "", //For validation "cost" : 0, //For validation - "aiValue" : 0, //For validation "battleEffects" : { "directDamage" : { "type":"core:damage" diff --git a/config/spells/vcmiAbility.json b/config/spells/vcmiAbility.json index 6f69bb58e..8a81bda2f 100644 --- a/config/spells/vcmiAbility.json +++ b/config/spells/vcmiAbility.json @@ -17,7 +17,6 @@ "levels" : { "base": { "description" : "", - "aiValue" : 0, "power" : 40, "cost" : 1, "targetModifier":{"smart":true}, @@ -68,7 +67,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 10, "cost" : 0, "targetModifier":{"smart":true}, @@ -117,7 +115,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 1, "cost" : 0, "targetModifier":{"smart":true}, @@ -198,7 +195,6 @@ "levels" : { "base":{ "description" : "", - "aiValue" : 0, "power" : 1, "cost" : 0, "targetModifier":{"smart":true}, diff --git a/docs/Readme.md b/docs/Readme.md index fcbda78af..49e87d50c 100644 --- a/docs/Readme.md +++ b/docs/Readme.md @@ -99,4 +99,4 @@ Engine documentation: (NOTE: may be outdated) VCMI Project source code is licensed under GPL version 2 or later. VCMI Project assets are licensed under CC-BY-SA 4.0. Assets sources and information about contributors are available under following link: -Copyright (C) 2007-2024 VCMI Team (check AUTHORS file for the contributors list) +Copyright (C) 2007-2025 VCMI Team (check AUTHORS file for the contributors list) diff --git a/docs/modders/Bonus/Bonus_Limiters.md b/docs/modders/Bonus/Bonus_Limiters.md index 283eefb39..674e9a8b1 100644 --- a/docs/modders/Bonus/Bonus_Limiters.md +++ b/docs/modders/Bonus/Bonus_Limiters.md @@ -28,8 +28,8 @@ Bonus is only active if affected entity has another bonus that meets conditions Parameters: - Bonus type -- bonus subtype -- bonus sourceType and sourceId in struct +- Bonus subtype (only used if bonus type is set) +- Bonus source type and bonus source ID All parameters are optional. Values that don't need checking can be replaces with `null` @@ -42,11 +42,11 @@ Examples: { "type" : "HAS_ANOTHER_BONUS_LIMITER", "parameters" : [ - null, - null, + null, // bonus type is ignored + null, // bonus subtype is also ignored { - "type" : "SPELL_EFFECT", - "id" : "spell.bless" + "type" : "SPELL_EFFECT", // look for bonus of type SPELL_EFFECT + "id" : "spell.bless" // ... from spell "Bless" } ] } diff --git a/docs/modders/Bonus/Bonus_Types.md b/docs/modders/Bonus/Bonus_Types.md index 61b5bd260..c57663eef 100644 --- a/docs/modders/Bonus/Bonus_Types.md +++ b/docs/modders/Bonus/Bonus_Types.md @@ -27,12 +27,6 @@ Changes mastery level of spells of affected heroes and units. Examples are magic - subtype: school of magic - val: level -### DARKNESS - -On each turn, hides area in fog of war around affected town for all players other than town owner. Currently does not work for any entities other than towns. - -- val: radius in tiles - ## Player bonuses Intended to be setup as global effect, AI cheat etc. @@ -78,9 +72,9 @@ Allows flying movement for affected heroes Eliminates terrain penalty on certain terrain types for affected heroes (Nomads ability). -Note: to eliminate all terrain penalties see ROUGH_TERRAIN_DISCOUNT bonus +Note: to eliminate all terrain penalties see [ROUGH_TERRAIN_DISCOUNT](#rough_terrain_discount) bonus -- subtype: type of terrain, eg `terrain.sand` +- subtype: type of terrain, eg `sand` ### TERRAIN_NATIVE @@ -99,6 +93,27 @@ Reveal area of fog of war around affected heroes when hero is recruited or moves - val: radius in tiles +### DARKNESS + +On each turn, hides area in fog of war around affected objects for all players other than town owner. Areas within scouting range of owned objects are not affected + +NOTE: when used by heroes, effect would still activate only on new turn, and not on every hero movement + +- val: radius in tiles +- addInfo: optional, activation period (e.g. 7 = weekly, 28 = monthly) + +### FULL_MAP_SCOUTING + +On each turn, reveals entire map for owner of the bonus + +- addInfo: optional, activation period (e.g. 7 = weekly, 28 = monthly) + +### FULL_MAP_DARKNESS + +On each turn, hides entire map in fog of war for all players other than town owner. Areas within scouting range of owned objects are not affected + +- addInfo: optional, activation period (e.g. 7 = weekly, 28 = monthly) + ### MANA_REGENERATION Restores specific amount of mana points for affected heroes on new turn @@ -111,6 +126,12 @@ Restores specific percentage of mana pool for affected heroes on new turn. If he - val: percentage of spell points to restore +### SKELETON_TRANSFORMER_TARGET + +Unit affected by this bonus will be transformed into creature other than Skeleton when placed into Skeleton Transformer + +- subtype: type of creature to which this unit should be converted + ### NONEVIL_ALIGNMENT_MIX Allows mixing of creaturs of neutral and good factions in affected armies without penalty to morale (Angelic Alliance effect) @@ -123,18 +144,24 @@ Changes surrender cost for affected heroes ### IMPROVED_NECROMANCY -Allows to raise different creatures than Skeletons after battle. +Bonus allows the hero to raise specific creatures from corpses after battle. + +If the hero has multiple bonuses of the same type, the game will select the unit with the higher level. If the units have the same level, the game will select the unit with the higher market value (the total cost of the unit in gold, including converted resources). + +If the hero has no free space for the target creature but has space for its upgrade (including subsequent upgrades), the upgraded unit will be raised instead at a rate of two-thirds. - subtype: creature raised - val: Necromancer power -- addInfo: Level of Necromancy secondary skill (1 - Basic, 3 - Expert) -- Example (from Cloak Of The Undead King): +- addInfo: Requried total level of Necromancer power for this bonus to be active (val of all bonuses of this type) + +Example (from Cloak Of The Undead King): ```json { "type" : "IMPROVED_NECROMANCY", "subtype" : "creature.walkingDead", - "addInfo" : 1 + "addInfo" : 1, // requires 1 val of IMPROVED_NECROMANCY from other source, e.g. skill + "val" : 0 // does not provides levels of necromancer power on its own } ``` @@ -182,7 +209,7 @@ Allows affected heroes to position army before start of battle (Tactics) ### BEFORE_BATTLE_REPOSITION_BLOCK -Reduces distance in which enemy hero can reposition. Counters BEFORE_BATTLE_REPOSITION bonus +Reduces distance in which enemy hero can reposition. Counters [BEFORE_BATTLE_REPOSITION](#before_battle_reposition) bonus - val: distance within which hero can reposition his troops @@ -200,7 +227,7 @@ Increases experience gain from combat by affected units. No effect if stack expe ### UNDEAD_RAISE_PERCENTAGE -Defines percentage of enemy troops that will be raised after battle into own army (Necromancy). Raised unit is determined by IMPROVED_NECROMANCY bonus +Defines percentage of enemy troops that will be raised after battle into own army (Necromancy). Raised unit is determined by [IMPROVED_NECROMANCY](#improved_necromancy) bonus - val: percentage of raised troops @@ -255,7 +282,7 @@ Gives additional bonus to effect of all spells of selected school ### SPECIFIC_SPELL_DAMAGE -Gives additional bonus to effect of specific spell +For `damage`, `heal` and `demonSummon` spell effects, increases spell power by specific percentage - subtype: identifier of affected spell - val: bonus to spell effect, percentage @@ -411,31 +438,39 @@ Increases starting amount of shots that unit has in battle ## Creature abilities -## Static abilities and immunities +## Creature Natures + +### LIVING + +Affected unit is considered to be alive. Automatically granted to any unit that does not have any other creature nature bonus + +Living units can be affected by TRANSMUTATION, LIFE_DRAIN, and SOUL_STEAL bonuses ### NON_LIVING -Affected unit is considered to not be alive and not affected by morale and certain spells +Creature nature bonus. Affected unit is considered to not be alive and not affected by morale and certain spells ### MECHANICAL -Affected unit is considered to not be alive and not affected by morale and certain spells but should be repairable from engineers (factory). +Creature nature bonus. Affected unit is considered to not be alive and not affected by morale and certain spells but should be repairable from engineers (HotA Factory). ### GARGOYLE -Affected unit is considered to be a gargoyle and not affected by certain spells +Creature nature bonus. Affected unit is considered to be a gargoyle and not affected by certain spells ### UNDEAD -Affected unit is considered to be undead, which makes it immune to many effects, and also reduce morale of allied living units. +Creature nature bonus. Affected unit is considered to be undead, which makes it immune to many effects, not affected by morale, and also reduce morale of allied living units. ### SIEGE_WEAPON -Affected unit is considered to be a siege machine and can not be raised, healed, have morale or move. All War Machines should have this bonus. +Creature nature bonus. Affected unit is considered to be a siege machine and can not be raised, healed, have morale or move. All War Machines should have this bonus. + +## Static abilities and immunities ### DRAGON_NATURE -Affected unit is dragon. This bonus proved no effect, but is used as limiter several effects. +Affected unit is dragon. This bonus provides no effects on its own, but is used as limiter for Mutare specialty ### KING @@ -443,10 +478,6 @@ Affected unit will take more damage from units under Slayer spell effect - val: required skill mastery of Slayer spell to affect this unit -### FEARLESS - -Affected unit is immune to Fear ability - ### NO_LUCK Affected units can not receive good or bad luck @@ -495,6 +526,12 @@ Affected unit will deal more damage based on movement distance (Champions) - val: additional damage per passed tile, percentage +### VULNERABLE_FROM_BACK + +When affected unit is attacked from behind, it will receive more damage when attacked and will not turn around to face the attacker + +- val: additional damage for attacks from behind, percentage (0-100) + ### HATE Affected unit will deal more damage when attacking specific creature @@ -546,10 +583,12 @@ Examples: - Prism Breath (mods): `[ "FL", "FF", "FR" ]` — a more powerful version of Dragon Breath; all units behind the target are attacked. This is how all tiles can be referenced in the event of a frontal attack (green is the attacker and red is the defender). The hex on which defender is located is always included unconditionally. -![MULTIHEX_UNIT_ATTACK frontal attack hexes indexing](../images/Bonus_Multihex_Attack_Horizontal.svg) + +![MULTIHEX_UNIT_ATTACK frontal attack hexes indexing](../../images/Bonus_Multihex_Attack_Horizontal.svg) In the case of a double-wide unit that can attack hexes to the left and right (e.g. Cerberi), the left or right hex may end up inside the attacker in certain attack configurations. To avoid this, the hex that ends up inside the unit will be 'pushed' one hex forward. This does not affect single-wide units. See below for reference: -![MULTIHEX_UNIT_ATTACK vertical attack hexes indexing](../images/Bonus_Multihex_Attack_Vertical.svg) + +![MULTIHEX_UNIT_ATTACK vertical attack hexes indexing](../../images/Bonus_Multihex_Attack_Vertical.svg) ### MULTIHEX_ENEMY_ATTACK @@ -637,7 +676,7 @@ Affected unit will gain new creatures for each enemy killed by this unit ### TRANSMUTATION -Affected units have chance to transform attacked unit to other creature type +Affected units have chance to transform attacked, living unit to other creature type, unless attacked unit is under TRANSMUTATION_IMMUNITY bonus - val: chance for ability to trigger, percentage - subtype: @@ -645,6 +684,10 @@ Affected units have chance to transform attacked unit to other creature type - transmutationPerUnit: transformed unit will have same number of units as original stack - addInfo: creature to transform to. If not set, creature will transform to same unit as attacker +### TRANSMUTATION_IMMUNITY + +Affected unit is immune to TRANSMUTATION bonus effects + ### SUMMON_GUARDIANS When battle starts, affected units will be surrounded from all side with summoned units @@ -779,9 +822,11 @@ Affected unit has chance to deal double damage on attack (Death Knight) - val: chance to trigger, percentage -### FEAR +### FEARFUL -If enemy army has creatures affected by this bonus, they will skip their turn with 10% chance (Azure Dragon). Blocked by FEARLESS bonus. +Affected unit has chance to freeze in fear and entirely skip its turn (Azure Dragons) + +- val: chance for the unit to freeze in fear ### HEALER @@ -919,6 +964,7 @@ Affected unit is permanently enchanted with a spell, that is cast again every tu Affected unit is immune to all spell with level below or equal to value of this bonus - val: level of spell up to which this unit is immune to +- addInfo: if set to 1, this will be "absolute immunity" that can not be negated by Orb of Vulnerability ### MAGIC_RESISTANCE @@ -1068,10 +1114,6 @@ Dummy bonus that acts as marker for Dendroid's Bind ability - addInfo: ID of stack that have bound the unit -### SYNERGY_TARGET - -Dummy skill for alternative upgrades mod - ### THIEVES_GUILD_ACCESS Increases amount of information available in affected thieves guild (in town or in adventure map tavern). Does not affects adventure map object "Den of Thieves". You may want to use PLAYER_PROPAGATOR with this bonus to make its effect player wide. diff --git a/docs/modders/Bonus/Bonus_Updaters.md b/docs/modders/Bonus/Bonus_Updaters.md index fef6f5346..429baeab8 100644 --- a/docs/modders/Bonus/Bonus_Updaters.md +++ b/docs/modders/Bonus/Bonus_Updaters.md @@ -8,16 +8,15 @@ Check the files in `config/heroes/` for additional usage examples. ## GROWS_WITH_LEVEL -- Type: Complex -- Parameters: valPer20, stepSize=1 -- Effect: Updates val to `ceil(valPer20 * floor(heroLevel / stepSize) / 20)` +Effect: Updates val to `ceil(valPer20 * floor(heroLevel / stepSize) / 20)` Example: The following updater will cause a bonus to grow by 6 for every 40 levels. At first level, rounding will cause the bonus to be 0. ```json "updater" : { - "parameters" : [ 6, 2 ], - "type" : "GROWS_WITH_LEVEL" + "type" : "GROWS_WITH_LEVEL", + "valPer20" : 6, + "stepSize" : 2 } ``` @@ -25,8 +24,9 @@ Example: The following updater will cause a bonus to grow by 3 for every 20 leve ```json "updater" : { - "parameters" : [ 3 ], - "type" : "GROWS_WITH_LEVEL" + "type" : "GROWS_WITH_LEVEL", + "valPer20" : 3, + "stepSize" : 1 } ``` @@ -37,15 +37,22 @@ Remarks: ## TIMES_HERO_LEVEL -- Type: Simple -- Effect: Updates val to `val * heroLevel` +Effect: Updates val to `val * heroLevel / stepSize` Usage: `"updater" : "TIMES_HERO_LEVEL"` +Usage with stepSize greater than one: + +```json +"updater" : { + "type" : "TIMES_HERO_LEVEL", + "stepSize" : 2 +} +``` + ## TIMES_STACK_LEVEL -- Type: Simple -- Effect: Updates val to `val * stackLevel`, where `stackLevel` is level of stack (Pikeman is level 1, Angel is level 7) +Updates val to `val * stackLevel`, where `stackLevel` is level of stack (Pikeman is level 1, Angel is level 7) Usage: @@ -55,8 +62,7 @@ Remark: The stack level for war machines is 0. ## DIVIDE_STACK_LEVEL -- Type: Simple -- Effect: Updates val to `val / stackLevel`, where `stackLevel` is level of stack (Pikeman is level 1, Angel is level 7) +Updates val to `val / stackLevel`, where `stackLevel` is level of stack (Pikeman is level 1, Angel is level 7) Usage: @@ -66,8 +72,7 @@ Remark: The stack level for war machines is 0. ## TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL -- Type: Simple -- Effect: Same effect as `TIMES_HERO_LEVEL` combined with `DIVIDE_STACK_LEVEL`: `val * heroLevel / stackLevel` +Effect: Same effect as `TIMES_HERO_LEVEL` combined with `DIVIDE_STACK_LEVEL`: `val * heroLevel / stackLevel` Intended to be used as hero bonus (such as specialty, skill, or artifact), for bonuses that affect units (Example: Adela Bless specialty) @@ -75,6 +80,23 @@ Usage: `"updater" : "TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL"` +## TIMES_STACK_SIZE + +Effect: Updates val to `val = clamp(val * floor(stackSize / stepSize), minimum, maximum)`, where stackSize is total number of creatures in current unit stack + +Parameters `minimum` and `maximum` are optional and can be dropped if not needed + +Example: + +```json +"updater" : { + "type" : "TIMES_STACK_SIZE", + "minimum" : 0, + "maximum" : 100, + "stepSize" : 2 +} +``` + ## BONUS_OWNER_UPDATER Helper updater for proper functionality of `OPPOSITE_SIDE` limiter diff --git a/docs/modders/Entities_Format/Artifact_Format.md b/docs/modders/Entities_Format/Artifact_Format.md index 46e12622b..f11b914dd 100644 --- a/docs/modders/Entities_Format/Artifact_Format.md +++ b/docs/modders/Entities_Format/Artifact_Format.md @@ -46,8 +46,8 @@ In order to make functional artifact you also need: // Base image for this artifact, used for example in hero screen "image": "BigSword.png", - // Large image, used for drag-and-drop and popup messages - "large": "BigSword_large.png", + // Large 58x64 image, used for campaign scenario bonus selection + "scenarioBonus": "BigSword_large.png", //def file for adventure map "map": "BigSword.def" diff --git a/docs/modders/Entities_Format/Battle_Obstacle_Format.md b/docs/modders/Entities_Format/Battle_Obstacle_Format.md index f491b2900..d66a24386 100644 --- a/docs/modders/Entities_Format/Battle_Obstacle_Format.md +++ b/docs/modders/Entities_Format/Battle_Obstacle_Format.md @@ -36,7 +36,7 @@ How blocked tiles are defined depends on whether obstacle is `absolute` or not: Non-absolute obstacles specify their coordinates relative to bottom-left corner of obstacle. If you wish to have obstacle that takes multiple rows, substracting 17 from hex number would block tile directly above bottom-left corner of your obstacle. -For example, obstacle that blocks tiles `[1, 2, 3, -15, -16, -31]` would result in following layout on the battlefield: +For example, obstacle that blocks tiles `[1, 2, 3, -14, -15, -31]` would result in following layout on the battlefield: ![Battlefield Relative Obstacle Example](../../images/Battle_Field_Relative_Obstacle.svg) diff --git a/docs/modders/Entities_Format/Bonus_Types_Format.md b/docs/modders/Entities_Format/Bonus_Types_Format.md new file mode 100644 index 000000000..08bc5a8cd --- /dev/null +++ b/docs/modders/Entities_Format/Bonus_Types_Format.md @@ -0,0 +1,53 @@ +# Bonus Types Format + +WARNING: currently custom bonus types can only be used for custom "traits", for example to use them in limiters. At the moment it is not possible to provide custom mechanics for such bonus, or have custom bonuses with subtypes or addInfo parameters + +```json +{ + // If set to true, this bonus will be hidden in creature view + "hidden" : false, + + // If set to true, this bonus will be considered a "creature nature" bonus + // If creature has no creature nature bonuses, it is considered to be a LIVING creature + "creatureNature" : false, + + // Generic human-readable description of this bonus + // Visible in creature window + // Can be overriden in creature abilities or artifact bonuses + "description" : "{Bonus Name}\nBonus description", + + "graphics" : { + // Generic icon of this bonus + // Visible in creature window + // Can be overriden in creature abilities or artifact bonuses + "icon" : "path/to/icon.png", + + // Custom icons for specific subtypes of this bonus + "subtypeIcons" : { + "spellSchool.air" : "", + "spellSchool.water" : "", + }, + + // Custom icons for specific values of this bonus + // Note that values must be strings and wrapped in quotes + "valueIcons" : { + "1" : "", + "2" : "", + } + }, + + // Custom descriptions for specific subtypes of this bonus + "subtypeDescriptions" : { + "spellSchool.air" : "" + "spellSchool.water" : "", + }, + + // Custom descriptions for specific values of this bonus + // Note that values must be strings and wrapped in quotes + "valueDescriptions" : { + "1" : "" + "2" : "" + } + } +} +``` diff --git a/docs/modders/Entities_Format/Secondary_Skill_Format.md b/docs/modders/Entities_Format/Secondary_Skill_Format.md index 54da74461..eb9dc38db 100644 --- a/docs/modders/Entities_Format/Secondary_Skill_Format.md +++ b/docs/modders/Entities_Format/Secondary_Skill_Format.md @@ -83,6 +83,8 @@ level fields become optional if they equal "base" configuration. "medium" : "", // 82x93 skill icon "large" : "", + // 58x64 skill icon for campaign scenario bonus + "scenarioBonus" : "" } } ``` diff --git a/docs/modders/Entities_Format/Spell_Format.md b/docs/modders/Entities_Format/Spell_Format.md index 9aa39403f..f66b332ed 100644 --- a/docs/modders/Entities_Format/Spell_Format.md +++ b/docs/modders/Entities_Format/Spell_Format.md @@ -6,8 +6,11 @@ { "spellName": { - // Mandatory. Spell type // Allowed values: "adventure", "combat", "ability" + // adventure spells can only be cast by hero on adventure map + // combat spells can be cast by hero or by creatures during combat + // ability-type spells can not be rolled in town mage guild + // learned by hero and can only be used by creatures "type": "adventure", // Mandatory. Spell target type @@ -20,16 +23,17 @@ // Localizable name of this spell "name": "Localizable name", - // Mandatory. List of spell schools this spell belongs to + // List of spell schools this spell belongs to. Require for spells other than abilities "school": {"air":true, "earth":true, "fire":true, "water":true}, - // Mandatory. Spell level, value in range 1-5, or 0 for abilities + // Spell level, value in range 1-5, or 0 for abilities "level": 1, - // Mandatory. Base power of the spell + // Base power of the spell. To see how it affects spell, + // see description of corresponding battle effect(s) "power": 10, - // Mandatory. Default chance for this spell to appear in Mage Guilds + // Default chance for this spell to appear in Mage Guilds // Used only if chance for a faction is not set in gainChance field "defaultGainChance": 0, @@ -43,20 +47,23 @@ "animation":{}, // List of spells that will be countered by this spell + // If unit is affected by any spells from this list, + // then casting this spell will remove effect of countered spell "counters": { "spellID" : true, ... }, - //Mandatory. List of flags that describe this spell - // positive - this spell is positive to target (buff) - // negative - this spell is negative to target (debuff) + // List of flags that describe this spell + // positive - this spell is positive to target (buff) and can target allies + // negative - this spell is negative to target (debuff) and can target enemies // indifferent - spell is neither positive, nor negative - // damage - spell does damage (direct or indirect) - // offensive - direct damage (implicitly sets damage and negative) - // rising - rising spell (implicitly sets positive) - // special - this spell is normally unavailable and can only be received explicitly, e.g. from bonus SPELL - // nonMagical - this spell is not affected by Sorcery or magic resistance. School resistances apply. + // damage - spell does damage (direct or indirect). + // If set, AI will avoid obstacles with such effect, and spellbook popup will also list damage of the spell + // offensive - (Deprecated?) direct damage (implicitly sets damage and negative) + // rising - (Deprecated?) rising spell (implicitly sets positive) + // special - this spell can not be present in mage guild, or leared by hero, and can only be received explicitly, e.g. from bonus SPELL + // nonMagical - this spell is not affected by Sorcery or magic resistance. School resistances (if any) apply. "flags" : { "positive": true, }, @@ -195,36 +202,40 @@ TODO ```json { - //Mandatory, localizable description. Use {xxx} for formatting + //Localizable description. Use {xxx} for formatting "description": "", - //Mandatory, cost in mana points + //Cost in mana points "cost": 1, - //Mandatory, number + // Base power of the spell. To see how it affects spell, + // see description of corresponding battle effect(s) "power": 10, - //Mandatory, number - "aiValue": 20, - //Mandatory, flags structure //TODO // modifiers make sense for creature target "targetModifier": { - "smart": false, //true: friendly/hostile based on positiveness; false: all targets - "clearTarget": false, + // If true, then this spell will not affect units if: + // - target is friendly and spell is negative + // - target is enemy, and spell is positive + // Othervice, all units in affected area will be hit by a spell, provided they are not immune + "smart": false, + // LOCATION target only. All affected hexes must be empty with no obstacles or units on them "clearAffected": false, }, - //Mandatory - //spell range description in SRSL - // range "X" + smart modifier = enchanter casting, expert massive spells - // range "X" + no smart modifier = armageddon, death ripple, destroy undead - + // spell range description. Only for combat spells + // Describes distances from spell cast point that will be affected. + // For example, "range" : "0" will only affect hex on which this spell was cast (e.g. Magic Arrow) + // "range" : "0,1" will affect hex on which spell was cast, as well as all hexes around it (e.g. Fireball) + // "range" : "1" will only affect hexes around target, without affecting target itself (Frost Ring) + // "range" : "0,1,2," or "range" : "0-2" will affect all tiles 0,1 and 2 hexes away from the target (Inferno) + // Special case: range "X" implies massive spells that affect all units (armageddon, death ripple, destroy undead) "range": "X", - //DEPRECATED, Optional, arbitrary name - bonus format map - //timed effects, overriding by name + // DEPRECATED, please use "battleEffects" with timed effect instead + // List of bonuses that will affect targets for duration of the spell "effects": { "firstEffect": {[bonus format]}, @@ -233,162 +244,413 @@ TODO }, - //DEPRECATED, cumulative effects that stack while active + + // DEPRECATED, please use "battleEffects" with timed effect and "cumulative" set to true instead + // List of bonuses that will affect targets for duration of the spell. Casting spell repeatetly will cumulate effect (Disrupting Ray) "cumulativeEffects": { "firstCumulativeEffect": {[bonus format]} //... - }, + + /// See Configurable battle effects section below for detailed description "battleEffects": { "mod:firstEffect": {[effect format]}, "mod:secondEffect": {[effect format]} //... - } } ``` +## Spell power + +Most of battle effects are scaled based on spell effect value. This value is same across all effects and calculated as: + +```text +caster spell power * base spell power + spell mastery power(caster spell school) +``` + +Where: + +- `caster spell school` is assumed spell school level for the spell. For unit this is value of [SPELLCASTER](../bonus/Bonus_Types.md#spellcaster) bonus. For hero this is value of [MAGIC_SCHOOL_SKILL](../bonus/Bonus_Types.md#magic_school_skill) or [SPELL](../bonus/Bonus_Types.md#spell) bonus, whichever is greater +- `spell mastery power` is `power` parameter defined in config of corresponding mastery level of the spell +- `base spell power` is `power` parameter, as defined in config of spell itself +- `caster spell power` is spellpower of the hero, or [CREATURE_SPELL_POWER](../bonus/Bonus_Types.md#creature_spell_power) bonus for units + +If unit has [SPECIFIC_SPELL_POWER](../bonus/Bonus_Types.md#specific_spell_power) bonus for corresponding spell, game will use value of the bonus instead + +Power of `damage`, `heal`, `summon`, and `demonSummon` effects cast by hero can also be affected by following bonuses: + +- [SPECIAL_SPELL_LEV](../bonus/Bonus_Types.md#special_spell_lev) bonus for the spell, scaled down by target level (Solmyr / Deemer) + +Following bonuses will only affect `damage`, `heal` and `demonSummon` effects + +- [SPELL_DAMAGE](../bonus/Bonus_Types.md#spell_damage) for specific spell school (Sorcery) +- [SPECIFIC_SPELL_DAMAGE](../bonus/Bonus_Types.md#specific_spell_damage) for the spell (Luna / Ciele) + +## Smart target modifier + +To restrict spell from casting it on "wrong" side in combat, you can use `smart` target modifier. If this flag is set, and spell has `positive` flag, it can only affect friendly units. Similarly, spells with `negative` flag and `smart` target modifier can only affect enemies. This affects both primary targets and any secondary targets in case of area of effect or massive spells. + ## Configurable battle effects -**If spell have at least one special effect it become configurable spell and spell configuration processed different way** - -### Configurable spell - -Configurable spells ignore *offensive* flag, *effects* and *cumulativeEffects*. For backward compatibility *offensive* flag define Damage effect, *effects* and *cumulativeEffects* define Timed effect. - -### Special effect common format - -TODO +### Common format ```json -"mod:effectId":{ +"firstSpellEffect":{ + // identifier of effect type. See type-specific documentation below for possible values + "type":"core:effectType", -"type":"mod:effectType", //identifier of effect type -"indirect": false, // effect will be deferred (f.e. land mine damage) -"optional": false // you can cast spell even if this effect in not applicable + // effect will be deferred (f.e. land mine damage) TODO: clarify. Only dispell uses this flag! + "indirect": false, + + // spell can be cast even if this effect in not applicable, for example due to immunity + // Can be used for secondary effects, to allow casting spell if only main effect is applicable + "optional": false -//for unit target effects -"ignoreImmunity" : false, -"chainFactor" : 0.5, -"chainLength" : 4 + /// following fields are only applicable to effects that are cast on units (and not locations or summon) + + /// Ignore immunity unless unit has SPELL_IMMUNITY bonus for this spell with addInfo set to 1 + "ignoreImmunity" : false, -//other fields depending on type + /// Specifies number of additional targets to hit in chain, similar to Chain Lightning + "chainLength" : 4 + + // Only applicable for damage spells and only if chain length is non-zero. + // Multiplier for damage for each chained target + "chainFactor" : 0.5, } ``` ### Catapult -TODO +This spell can only be used when attacking a town with existing, non-destroyed walls. Can be also cast by defender, unless spell uses "smart" targeting + +Casting the spell on location with wall will deal 0-2 damage to the walls or towers, depending on spell configuration. + +Casting the spell with "massive" target will randomly pick selected number of target using logic similar to H3 ```json -"mod:effectId":{ +"firstSpellEffect":{ + "type": "core:catapult" -"type": "core:catapult" - "targetsToAttack": 1, //How many targets will be attacked by this - "chanceToHitKeep" : 5, //If it is a targeted spell, chances to hit keep - "chanceToHitGate" : 25, //If it is a targeted spell, chances to hit gate - "chanceToHitTower" : 10, //If it is a targeted spell, chances to hit tower - "chanceToHitWall" : 50, //If it is a targeted spell, chances to hit wall - "chanceToNormalHit" : 60, //Chance to have 1 damage to wall, used for both targeted and massive - "chanceToCrit" : 30 //Chance to have 2 damage to wall, used for both targeted and massive + // How many targets will be attacked by the spell + "targetsToAttack": 1, + + // If it is a targeted spell, probability to hit keep + "chanceToHitKeep" : 5, + + // If it is a targeted spell, probability to hit gate + "chanceToHitGate" : 25, + + // If it is a targeted spell, probability to hit tower + "chanceToHitTower" : 10, + + // If it is a targeted spell, probability to hit wall + "chanceToHitWall" : 50, + + // probability to deal 1 damage to wall, used for both targeted and massive + "chanceToNormalHit" : 60, + + // probability to deal 2 damage to wall, used for both targeted and massive + // chance to miss is defined implicitly, as remainer of 100% chance of normal and critical hits + "chanceToCrit" : 30 } ``` ### Clone -TODO - -Configurable version of Clone spell. +Configurable version of Clone spell. Casting the spell will create clone of targeted unit that belongs to side of spell caster. ```json +"firstSpellEffect":{ + "type": "core:clone" -"mod:effectId":{ - -"type": "core:clone" - -"maxTier" : 3//unit tier + // Maximal tier of unit on which this spell can be cast + "maxTier" : 3 } ``` -### Damage effect +### Damage -TODO +Deals specified damage to all affected targets based on spell effect value: -If effect is automatic, spell behave like offensive spell (uses power, levelPower etc) +- if `killByPercentage` is set, spell will deal damage equal to unit total health * [spell effect power](#spell-power) / 100 +- if `killByCount` is set, spell will deal damage equal to single creature health * [spell effect power](#spell-power) +- if neither flag is set, spell will deal damage equal to [spell effect power](#spell-power) + +If spell has chain effect, damage dealt to chained target will be multiplied by specified `chainFactor` + +Target with [SPELL_DAMAGE_REDUCTION](../bonus/Bonus_Types.md#spell_damage_reduction) bonus with value greater than 100% for any of spell school of the spell are immune to this effect ```json - -"mod:effectId":{ - -"type": "core:damage", -"killByCount": false, //if true works like Death Stare -"killByPercentage" : false, //if true works like DESTRUCTION ability - -//TODO: options override - +"firstSpellEffect":{ + "type": "core:damage", + "killByCount": false, + "killByPercentage" : false, } ``` ### Dispel -TODO +Dispells all bonuses provided by any other spells from this unit. Following spells can not be dispelled + +- Disrupting ray +- Acid Breath +- any effects from adventure spells +- any effects that comes from this spell, including effects from previous casts of the spell + +Only bonuses from spells with specified positiveness(es) will be dispelled. See configuration example. + +```json +"firstSpellEffect":{ + "type": "core:dispel", + + /// if set, spell will dispell other spells with "positive" flag + "dispelPositive": false, + + /// if set, spell will dispell other spells with "negative" flag + "dispelNegative" : false, + + /// if set, spell will dispell other spells with "indifferent" flag + "dispelNeutral" : false, +} +``` ### Heal -TODO +Effect restores [spell effect power](#spell-power) health points of affected unit. Can only be cast on unit that is not a clone and have lost some health points in the battle. + +If parameter `minFullUnits` is non-zero, spell can only be cast if it will at least heal enough health points to fully restore health of specified number of units. For example, a single Archangel can only use Resurrection on units with 100 health points or lower + +Spell can be used on dead units, but only if corpse is not blocked by a living unit. + +```json +"firstSpellEffect":{ + "type": "core:heal", + + /// Minimal amount of health points that this spell can restore, based on target creature health + "minFullUnits" : 1, + + /// "heal" - only heals the unit, without resurrecting any creatures + /// "resurrect" - heals, resurrecting any dead units from stack until running out of power + /// "overHeal" - similar to resurrect, however it may also increase unit stack size over its initial size + "healLevel" : "heal", + + /// "oneBattle" - any resurrected unit will only stay alive till end of battle + /// "permanent" - any resurrected units will stay permanently after the combat + "healPower" : "permanent" +} +``` + +### Sacrifice + +Sacrifice spell. Allows to destroy first target, while healing the second one. Destroyed unit is completely removed from the game. + +Effect configuration is identical to [Heal effect](#heal). + +```json +"firstSpellEffect":{ + "type": "core:sacrifice" + "minFullUnits" : 1, + "healLevel" : "heal", + "healPower" : "permanent" +} +``` ### Obstacle TODO -### Remove obstacle - -TODO - -### Sacrifice - -TODO - -### Summon - -TODO - -### Teleport - -TODO - -### Timed - -TODO - -If effect is automatic, spell behave like \[de\]buff spell (effect and -cumulativeEffects ignored) - ```json +"firstSpellEffect":{ + "type": "core:obstacle" + + "hidden" : false, + "passable" : false, + "trap" : false, + "removeOnTrigger" : false, + "hideNative" : false, -"mod:effectId":{ - -"type": "core:timed", -"cumulative": false -"bonus": -{ -"firstBonus":{[bonus format]} -//... -} + "patchCount" : 1, + "turnsRemaining" : 1, + "triggerAbility" : "obstacleTriggerAbility", + + "attacker" : { + "shape" : [], + "range" : [], + "appearSound" : {}, + "appearAnimation" : {}, + "animation" : {}, + "offsetY" : 0 + }, + + "defender" : { + "shape" : [], + "range" : [], + "appearSound" : {}, + "appearAnimation" : {}, + "animation" : {}, + "offsetY" : 0 + } } ``` -## Additional documentation - -### Targets, ranges, modifiers +### Moat TODO -- CREATURE target (only battle spells) +```json +"firstSpellEffect":{ + "type": "core:moat" + + "hidden" : false, + "trap" : false, + "removeOnTrigger" : false, + "dispellable" : false, + + "moatDamage" : 90, + "moatHexes" : [], + + "triggerAbility" : "obstacleTriggerAbility", + + "defender" : { + "shape" : [], + "range" : [], + "appearSound" : {}, + "appearAnimation" : {}, + "animation" : {}, + "offsetY" : 0 + } +} +``` + +### Remove obstacle + +Effect removes an obstacle from targeted hex + +```json +"firstSpellEffect":{ + "type": "core:removeObstacle", + + /// If set to true, spell can remove large ("absolute") obstacles + "removeAbsolute" : false, + + /// If set to true, spell can remove small obstacles (H3 behavior) + "removeUsual" : true, + + // If set to true, spell can remove any obstacle that was created by spell + "removeAllSpells" : true, + + // If set to true, spell can remove obstacles that were created with specific spell + "removeSpells" : [ "spellA", "spellB" ], +} +``` + +### Summon + +Effect summons additional units to the battlefield. + +If `exclusive` flag is set, attempt to summon a different creature by the same side in combat will fail (even if previous summon was non-exclusive) + +Amount of summoned units is equal to [spell effect power](#spell-power). Summoned units will disappear after combat, unless `permanent` flag in effect config is set + +If `summonByHealth` option is set, then number of summoned units will be equal to [spell effect power](#spell-power) / unit health. Hero need to be able to summon at least one full unit for spell to work + +if `summonSameUnit` flag is set, and same creature was already summoned before, spell will instead heal unit in "overheal" mode, using same [spell effect power](#spell-power). + +```json +"firstSpellEffect":{ + "type": "core:summon", + + /// Unit to summon + "id" : "airElemental", + + "permanent" : false, + "exclusive" : false, + "summonByHealth" : false, + "summonSameUnit" : false, +} +``` + +### Demon Summon + +Implements Pit Lord's ability with the same name. Raises targeted dead unit as unit specified in spell parameters on casters side. New unit will be placed on the same position as corpse, and corpse will be removed from the battlefield + +Raised amount of units is limited by (rounded down): + +- total HP of summoned unit can not be larger than [spell effect power](#spell-power) of caster +- total HP of summoned unit can not be larger than total HP of dead unit +- total stack size of summoned unit can not be greater than stack size of dead unit + +```json +"firstSpellEffect":{ + "type": "core:demonSummon", + + /// Unit to summon + "id" : "demon", + + /// If true, unit will remain after combat + "permanent" : false +} +``` + +### Teleport + +Effect instantly moves unit from its current location to targeted tile + +```json +"firstSpellEffect":{ + "type": "core:teleport", + + /// If true, unit will trigger obstacles on destination location + "triggerObstacles" : false, + + /// If true, unit can be teleported across moat during town siege + "isMoatPassable" : false, + + /// If true, unit can be teleported across walls during town siege + "isWallPassable" : false, +} +``` + +### Timed + +Timed effect gives affected units specified bonuses for duration of the spell. + +Duration of effect is: + +- Hero: Spellpower + value of [SPELL_DURATION](../bonus/Bonus_Types.md#spell_duration) + [SPELL_DURATION](../bonus/Bonus_Types.md#spell_duration) for specific spell +- Units: value of [CREATURE_ENCHANT_POWER](../bonus/Bonus_Types.md#creature_enchant_power), or 3 if no such bonus + +Value of all bonuses can be affected by following bonuses: + +- [SPECIAL_PECULIAR_ENCHANT](../bonus/Bonus_Types.md#special_peculiar_enchant): value modified by 1-3 according to level of target unit +- [SPECIAL_ADD_VALUE_ENCHANT](../bonus/Bonus_Types.md#special_add_value_enchant): value from addInfo is added to val of bonus +- [SPECIAL_FIXED_VALUE_ENCHANT](../bonus/Bonus_Types.md#special_fixed_value_enchant): value from addInfo replaces val of bonus + +```json +"firstSpellEffect" : { + "type": "core:timed", + + // if set to true, recasting same spell will accumulate (and prolong) effects of previous spellcast + "cumulative" : false + + // List of bonuses granted by this spell + "bonus" : { + "firstBonus" : {[bonus format]} + //... + } +} +``` + +## Target types + +### CREATURE + - range 0: smart assumed single creature target - range "X" + smart modifier = enchanter casting, expert massive spells - range "X" + no smart modifier = armageddon, death ripple, destroy undead @@ -396,14 +658,17 @@ TODO - smart modifier: smth like cloud of confusion in H4 (if I remember correctly :) ) - no smart modifier: like inferno, fireball etc. but target only creature -- NO_TARGET +### NO_TARGET + - no target selection,(abilities, most adventure spells) -- LOCATION +### LOCATION + - any tile on map/battlefield (inferno, fireball etc.), DD also here but with special handling - clearTarget - destination hex must be clear (unused so far) - clearAfffected - all affected hexes must be clear (forceField, fireWall) -- OBSTACLE target +### OBSTACLE + - range 0: any single obstacle - range X: all obstacles diff --git a/docs/modders/Entities_Format/Spell_School_Format.md b/docs/modders/Entities_Format/Spell_School_Format.md new file mode 100644 index 000000000..42dfadfeb --- /dev/null +++ b/docs/modders/Entities_Format/Spell_School_Format.md @@ -0,0 +1,16 @@ +# Spell School Format + +WARNING: currently custom spell schools are only partially supported: + +- it is possible to use custom spell schools in bonus system +- it is possible to make skill for specializing in such spell +- it is possible to specify border decorations for mastery level of such spell in spellbook +- it is NOT possible to add "bookmark" filter for spellbook for spells of such school + +```json + // Internal field for H3 schools. Do not use for mods + "index" : "", + + // animation file with spell borders for spell mastery levels + "schoolBorders" : "SplevA" +``` diff --git a/docs/modders/Entities_Format/Town_Building_Format.md b/docs/modders/Entities_Format/Town_Building_Format.md index c97b87c7b..ecc4f7678 100644 --- a/docs/modders/Entities_Format/Town_Building_Format.md +++ b/docs/modders/Entities_Format/Town_Building_Format.md @@ -150,16 +150,7 @@ These are just a couple of examples of what can be done in VCMI. See vcmi config // Generally only needs to be specified for "special" buildings // See 'List of unique town buildings' section below for detailed description of this field "type" : "", - - // If set, building will have Lookout Tower logic - extend sight radius of a town. - // Possible values: - // low - increases town sight radius by 5 tiles - // average - sight radius extended by 15 tiles - // high - sight radius extended by 20 tiles - // skyship - entire map will be revealed - // If not set, building will not affect sight radius of a town - "height" : "average" - + // Resources produced each day by this building "produce" : { "sulfur" : 1, @@ -213,6 +204,10 @@ These are just a couple of examples of what can be done in VCMI. See vcmi config // If the building is a market, it requires market mode. "marketModes" : [ "resource-resource", "resource-player" ], + + // Required if building offers resource-skill trade. + // NOTE: multiple resource-skill buildings in the same town are not supported + "marketOffer" : [ "fireMagic", "airMagic", "waterMagic", "earthMagic" ], } ``` diff --git a/docs/modders/Guides/Bonus_System.md b/docs/modders/Guides/Bonus_System.md new file mode 100644 index 000000000..77461e498 --- /dev/null +++ b/docs/modders/Guides/Bonus_System.md @@ -0,0 +1,208 @@ +# Bonus System Guide + +Bonuses are effects that can be given to various game entities. A lot of game mechanics in VCMI are implemented as bonuses. Most notably, but not limited to: + +- All artifact effects +- All hero specialties +- All secondary skill effects +- All creature abilities +- Large number of spells +- Some of town building + +While they don't provide same level of flexibility as ERM scripting from WoG, they are way easier to use and generally can be undestood by AI. List of supported effects is rather long, and covers all H3 mechanics, as well as some additions to support WoG creature abilities, HotA, and extensions requested by modders for VCMI. + +## Basic Usage + +See also: [List of Bonus Types](../Bonus/Bonus_Types.md) + +### Bonuses without parameters + +Some of the simplest bonuses don't require any parameters, so all you need to do is specify the bonus type: + +```json +"bonuses" : { + "noPenalty" : { + "type" : "NO_DISTANCE_PENALTY" + } +} +``` + +With this bonus, all ranged units in the army of the hero will not have a distance penalty when firing at distances larger than 10 hexes. + +### Bonuses with value + +Although bonuses without parameters do exist, the majority of bonuses require some configuration to suit your needs. For example: + +```json +"bonuses" : { + "scouting" : { + "type" : "SIGHT_RADIUS", + "val" : 3 + } +} +``` + +This bonus increases the hero's sight (scouting radius) by three adventure map tiles. If the hero has multiple sources of this bonus (such as a secondary skill, specialty or other artifacts) all the bonuses will stack and the hero's actual scouting range will be equal to the sum of the values of all the bonuses. + +### Bonuses with subtypes + +In addition to value, many bonuses support so-called 'subtypes', which allow you to specify exactly what should be affected by the bonus. For example: + +```json +"bonuses" : { + "noSandPenalty" : { + "type" : "NO_TERRAIN_PENALTY", + "subtype" : "sand" + } +} +``` + +This bonus would eliminate the terrain penalty for your army when moving across sand terrain. Such subtypes can also be used to target objects added by mods without the need for additional bonus types in the game engine. + +It is also possible, and in fact required for many bonuses, to use both subtypes with a value. In this scenario, only bonuses of the same type and subtype will stack: + +```json +"bonuses" : { + "attack" : { + "type" : "PRIMARY_SKILL", + "subtype" : "attack", + "val" : 3 + } +} +``` + +### Bonuses with additional info + +In addition to the `type`, `subtype` and `val` parameters, some bonuses may require or support an additional parameter called 'addInfo'. This is used by some bonuses to provide additional parameters that are not suitable for subtypes or values. For example: + +```json +"bonuses" : { + "upgradeMages" : { + "type" : "SPECIAL_UPGRADE", + "subtype" : "creature.mage", + "addInfo" : "creature.enchanter" + } +} +``` + +This bonus allows a hero with such an artefact to upgrade any mage in their army to an enchanter. For information on how to configure addInfo for a particular bonus, please refer to the [bonus types documentation](../Bonus/Bonus_Types.md). + +## Advanced Usage + +### Bonus Limiters + +Generally, a bonus affects the entity that has the bonus, as well as all entities located 'below' (or 'inside') the affected entity. + +For example, a bonus given to a player would affect all their heroes, towns and other owned objects, as well as their armies. However, this is undesirable in some scenarios. Heroes specialising in a specific creature, for instance, should only affect that creature and not their entire army. To support such a scenario, it is possible to use 'limiters', which enable bonuses to be applied only to certain affected entities: + +```json +"specialty" : { + "bonuses" : { + "attack" : { + "type" : "PRIMARY_SKILL", + "subtype" : "primarySkill.attack" + "val" : 3 + "limiters" : { + // Type of limiter. See bonus system reference for details + "type" : "CREATURE_TYPE_LIMITER", + // Type-specific parameters of the limiter + "parameters" : [ + "pixie", // affected unit + true // whether upgrades of affected unit should also be affected + ], + } + } + } +} +``` + +This speciality increases the attack of all Pixies in the army by 3, but does not affect any other units or the hero himself. The game supports multiple other limiters for various other use cases. Please refer to the [bonus limiters documentation](../Bonus/Bonus_Limiters.md). for details. + +### Bonus Propagators + +In some cases, it is preferable to extend the effect of bonuses instead. A typical example is a creature ability that affects the entire battlefield. For example, Angels increase the morale of all units in their hero's army. However, simply giving the Angels a morale bonus would only affect the Angels themselves. In order to affect all units in the army, such an ability would require the bonus to be 'propagated' upwards (i.e. outside of the affected entity). For such scenarios, it is possible to use `propagator`: + +```json +"abilities": +{ + "raisesMorale" : { + "type" : "MORALE", + "val" : 1, + "propagator" : "HERO", + } +} +``` + +This propagator extends the ability to all units in the hero's army, including the unit from which it originates. It is possible to propagate the bonus to most entities that form part of the bonus system. Please refer to the [bonus propagators documentation](../Bonus/Bonus_Propagators.md) for details. + +### Bonus Updaters + +Unlike propagators and limiters, updaters do not modify the entities affected by the bonus; instead, they modify the bonus itself. This is primarily used for H3 hero specialties, which are often scaled according to the level of the hero or the level of the affected unit. However, it is possible to use updaters in other areas if desired. Example: + +```json +"specialty" : { + "bonuses" : { + "attack" : { + "type" : "PRIMARY_SKILL", + "subtype" : "primarySkill.attack", + "val" : 1, + "updater" : "TIMES_HERO_LEVEL" + } + } +} +``` + +This speciality increases the hero's attack by 1, multiplied by their level. For example, a level 20 hero would have an attack of +20. + +Full list of supported bonus updaters can be found in [bonus updaters documentation](../Bonus/Bonus_Updaters.md) + +### Only enemy side bonus + +When creating a battle-wide bonus, you can use the 'BATTLE_WIDE' propagator to achieve the desired effect. Similarly, when creating a bonus that only affects allied units, use the 'HERO' propagator instead. However, due to the implementation details of the game's bonus system, bonuses that only affect the enemy side require specific configuration. + +For example, to implement the morale-reducing ability of Ghost Dragons, you can use the following form: + +```json +"abilities": +{ + "decreaseMorale" : { + "type" : "MORALE", + "val" : -1, + "propagator": "BATTLE_WIDE", + "propagationUpdater" : "BONUS_OWNER_UPDATER", + "limiters" : [ "OPPOSITE_SIDE" ] + } +} +``` + +As can be seen from the example, such bonuses must perform the following operations to work: + +- The `BATTLE_WIDE` propagator extends the effect of the bonus to the entire battlefield. +- a `BONUS_OWNER_UPDATER` propagation updater – to indicate which side of the battlefield the bonus originates from +- an `OPPOSITE_SIDE` limiter to restrict the bonus to units (or heroes) belonging to the other side of the battle. + +## Expert Usage + +### Full Bonus Tree Layout + +As mentioned in previous parts, the propagator allows bonuses to be propagated 'upwards', and bonuses only affect entities 'downwards' by default. Generally, it is clear which entities lie 'upwards' or 'downwards' – for example, creatures belong to an army, which belongs to a hero, who belongs to a player. Some cases might not be so clear, but you can consult the diagram below for help. + +In this diagram, all entities connected to an entity above it are considered to be 'below', and vice versa: + +![Bonus System Nodes Diagram](../../images/Bonus_System_Nodes.svg) + +### Combining updaters, propagators and limiters + +When the game evaluates bonuses, the following order of operations is performed: + +- If the bonus has a propagator, the game will attempt to look upwards through the bonus tree to find the entity to which the bonus should be propagated. +- If such an entity is found and the bonus has a propagation updater, the updater is executed using the context of the bonus source. +- The bonus is then moved to the entity to which it was propagated. +- The game then collects all bonuses located upwards from the entity for which the bonus is being evaluated. Each time a bonus with an updater passes through a node, the updater is applied to the bonus using the context of the entity it passes through, including the original entity that holds the bonus and the current entity. +- Once all bonuses have been collected, the game executes the limiter on each bonus and drops the bonus on a negative result. + +As a result, there are some considerations you should bear in mind. + +- The bonus updater is executed on every entity between the bonus source (or the bonus propagation target if a propagator is used). For example, a bonus propagated to a hero from a creature can use updaters that require either the hero or the creature. +- The bonus propagation updater, however, can only be used with updaters that require a creature as context in the case of a creature ability. +- A bonus limiter can only be used on the final entity through which the game accesses the bonus system for this particular bonus. For example, the SIGHT_RADIUS bonus is checked from the hero's perspective and can only be used with limiters that are valid for heroes. diff --git a/docs/modders/Mod_File_Format.md b/docs/modders/Mod_File_Format.md index d6917d4ff..846b07ba6 100644 --- a/docs/modders/Mod_File_Format.md +++ b/docs/modders/Mod_File_Format.md @@ -119,7 +119,16 @@ These are fields that are present only in local mod.json file ], // List of configuration files for skills - skills + "skills" : + [ + "config/skills.json" + ], + + // List of configuration files for campaign regions for h3c campaigns + "campaignRegions" : + [ + "config/campaignRegions.json" + ], // list of creature configuration files "creatures" : diff --git a/include/vcmi/FactionMember.h b/include/vcmi/FactionMember.h index 28d86d355..d6e329bee 100644 --- a/include/vcmi/FactionMember.h +++ b/include/vcmi/FactionMember.h @@ -61,6 +61,8 @@ public: */ int moraleValAndBonusList(std::shared_ptr & bonusList) const; int luckValAndBonusList(std::shared_ptr & bonusList) const; + + bool unaffectedByMorale() const; }; VCMI_LIB_NAMESPACE_END diff --git a/lib/BasicTypes.cpp b/lib/BasicTypes.cpp index b77f10fc8..ee88d3312 100644 --- a/lib/BasicTypes.cpp +++ b/lib/BasicTypes.cpp @@ -69,6 +69,15 @@ int AFactionMember::getMaxDamage(bool ranged) const return getBonusBearer()->valOfBonuses(selector, cachingStr); } +bool AFactionMember::unaffectedByMorale() const +{ + static const auto unaffectedByMoraleSelector = Selector::type()(BonusType::NON_LIVING).Or(Selector::type()(BonusType::MECHANICAL)).Or(Selector::type()(BonusType::UNDEAD)) + .Or(Selector::type()(BonusType::SIEGE_WEAPON)).Or(Selector::type()(BonusType::NO_MORALE)); + + static const std::string cachingStrUn = "AFactionMember::unaffectedByMoraleSelector"; + return getBonusBearer()->hasBonus(unaffectedByMoraleSelector, cachingStrUn); +} + int AFactionMember::moraleValAndBonusList(TConstBonusListPtr & bonusList) const { int32_t maxGoodMorale = LIBRARY->engineSettings()->getVector(EGameSettings::COMBAT_GOOD_MORALE_CHANCE).size(); @@ -81,12 +90,7 @@ int AFactionMember::moraleValAndBonusList(TConstBonusListPtr & bonusList) const return maxGoodMorale; } - static const auto unaffectedByMoraleSelector = Selector::type()(BonusType::NON_LIVING).Or(Selector::type()(BonusType::MECHANICAL)).Or(Selector::type()(BonusType::UNDEAD)) - .Or(Selector::type()(BonusType::SIEGE_WEAPON)).Or(Selector::type()(BonusType::NO_MORALE)); - - static const std::string cachingStrUn = "AFactionMember::unaffectedByMoraleSelector"; - auto unaffected = getBonusBearer()->hasBonus(unaffectedByMoraleSelector, cachingStrUn); - if(unaffected) + if(unaffectedByMorale()) { if(bonusList && !bonusList->empty()) bonusList = std::make_shared(); @@ -186,14 +190,7 @@ ui32 ACreature::getMovementRange(int turn) const bool ACreature::isLiving() const //TODO: theoreticaly there exists "LIVING" bonus in stack experience documentation { - static const std::string cachingStr = "ACreature::isLiving"; - static const CSelector selector = Selector::type()(BonusType::UNDEAD) - .Or(Selector::type()(BonusType::NON_LIVING)) - .Or(Selector::type()(BonusType::MECHANICAL)) - .Or(Selector::type()(BonusType::GARGOYLE)) - .Or(Selector::type()(BonusType::SIEGE_WEAPON)); - - return !getBonusBearer()->hasBonus(selector, cachingStr); + return getBonusBearer()->hasBonusOfType(BonusType::LIVING); } diff --git a/lib/CBonusTypeHandler.cpp b/lib/CBonusTypeHandler.cpp index ffd92fa55..481727676 100644 --- a/lib/CBonusTypeHandler.cpp +++ b/lib/CBonusTypeHandler.cpp @@ -24,16 +24,10 @@ #include "texts/CGeneralTextHandler.h" #include "json/JsonUtils.h" -template class std::vector; - VCMI_LIB_NAMESPACE_BEGIN ///CBonusType -CBonusType::CBonusType(): - hidden(true) -{} - std::string CBonusType::getDescriptionTextID() const { return TextIdentifier( "core", "bonus", identifier, "description").get(); @@ -45,21 +39,24 @@ CBonusTypeHandler::CBonusTypeHandler() { //register predefined bonus types - #define BONUS_NAME(x) \ - do { \ - bonusTypes.push_back(CBonusType()); \ - } while(0); +#define BONUS_NAME(x) { #x }, + builtinBonusNames = { + BONUS_LIST + }; +#undef BONUS_NAME + for (int i = 0; i < builtinBonusNames.size(); ++i) + bonusTypes.push_back(std::make_shared()); - BONUS_LIST; - #undef BONUS_NAME + for (int i = 0; i < builtinBonusNames.size(); ++i) + registerObject(ModScope::scopeBuiltin(), "bonus", builtinBonusNames[i], i); } CBonusTypeHandler::~CBonusTypeHandler() = default; std::string CBonusTypeHandler::bonusToString(const std::shared_ptr & bonus, const IBonusBearer * bearer) const { - const CBonusType & bt = bonusTypes[vstd::to_underlying(bonus->type)]; + const CBonusType & bt = *bonusTypes.at(vstd::to_underlying(bonus->type)); int bonusValue = bearer->valOfBonuses(bonus->type, bonus->subtype); if(bt.hidden) return ""; @@ -93,7 +90,7 @@ std::string CBonusTypeHandler::bonusToString(const std::shared_ptr & bonu ImagePath CBonusTypeHandler::bonusToGraphics(const std::shared_ptr & bonus) const { - const CBonusType & bt = bonusTypes[vstd::to_underlying(bonus->type)]; + const CBonusType & bt = *bonusTypes.at(vstd::to_underlying(bonus->type)); if (bonus->type == BonusType::SPELL_IMMUNITY && bonus->subtype.as().hasValue()) { @@ -117,18 +114,21 @@ std::vector CBonusTypeHandler::loadLegacyData() void CBonusTypeHandler::loadObject(std::string scope, std::string name, const JsonNode & data) { - auto it = bonusNameMap.find(name); - - if(it == bonusNameMap.end()) + if (vstd::contains(builtinBonusNames, name)) { - logBonus->warn("Unrecognized bonus name! (%s)", name); + //h3 bonus + BonusType bonus = static_cast(vstd::find_pos(builtinBonusNames, name)); + CBonusType & bt =*bonusTypes.at(vstd::to_underlying(bonus)); + loadItem(data, bt, name); + logBonus->trace("Loaded bonus type %s", name); } else { - CBonusType & bt = bonusTypes[vstd::to_underlying(it->second)]; - - loadItem(data, bt, name); - logBonus->trace("Loaded bonus type %s", name); + // new bonus + registerObject(scope, "bonus", name, bonusTypes.size()); + bonusTypes.push_back(std::make_shared()); + loadItem(data, *bonusTypes.back(), name); + logBonus->trace("New bonus type %s", name); } } @@ -141,6 +141,7 @@ void CBonusTypeHandler::loadItem(const JsonNode & source, CBonusType & dest, con { dest.identifier = name; dest.hidden = source["hidden"].Bool(); //Null -> false + dest.creatureNature = source["creatureNature"].Bool(); //Null -> false if (!dest.hidden) LIBRARY->generaltexth->registerString( "vcmi", dest.getDescriptionTextID(), source["description"]); @@ -185,4 +186,23 @@ void CBonusTypeHandler::loadItem(const JsonNode & source, CBonusType & dest, con } } +const std::string & CBonusTypeHandler::bonusToString(BonusType bonus) const +{ + return bonusTypes.at(static_cast(bonus))->identifier; +} + +bool CBonusTypeHandler::isCreatureNatureBonus(BonusType bonus) const +{ + return bonusTypes.at(static_cast(bonus))->creatureNature; +} + +std::vector CBonusTypeHandler::getAllObjets() const +{ + std::vector ret; + for (int i = 0; i < bonusTypes.size(); ++i) + ret.push_back(static_cast(i)); + + return ret; +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/CBonusTypeHandler.h b/lib/CBonusTypeHandler.h index 04eff221d..daad7183a 100644 --- a/lib/CBonusTypeHandler.h +++ b/lib/CBonusTypeHandler.h @@ -19,10 +19,10 @@ VCMI_LIB_NAMESPACE_BEGIN class JsonNode; -class DLL_LINKAGE CBonusType +class DLL_LINKAGE CBonusType : boost::noncopyable { public: - CBonusType(); + CBonusType() = default; std::string getDescriptionTextID() const; @@ -36,11 +36,13 @@ private: std::map valueDescriptions; std::string identifier; - bool hidden; + bool creatureNature = false; + bool hidden = true; }; class DLL_LINKAGE CBonusTypeHandler : public IBonusTypeHandler { + std::vector builtinBonusNames; public: CBonusTypeHandler(); virtual ~CBonusTypeHandler(); @@ -52,10 +54,15 @@ public: void loadObject(std::string scope, std::string name, const JsonNode & data) override; void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override; + const std::string & bonusToString(BonusType bonus) const; + + bool isCreatureNatureBonus(BonusType bonus) const; + + std::vector getAllObjets() const; private: void loadItem(const JsonNode & source, CBonusType & dest, const std::string & name) const; - std::vector bonusTypes; //index = BonusType + std::vector > bonusTypes; //index = BonusType }; VCMI_LIB_NAMESPACE_END diff --git a/lib/CCreatureHandler.cpp b/lib/CCreatureHandler.cpp index 5ce9fe00f..c8c3c2eaa 100644 --- a/lib/CCreatureHandler.cpp +++ b/lib/CCreatureHandler.cpp @@ -10,6 +10,7 @@ #include "StdInc.h" #include "CCreatureHandler.h" +#include "CBonusTypeHandler.h" #include "ResourceSet.h" #include "entities/faction/CFaction.h" #include "entities/faction/CTownHandler.h" @@ -902,37 +903,15 @@ void CCreatureHandler::loadCreatureJson(CCreature * creature, const JsonNode & c { creature->animDefName = AnimationPath::fromJson(config["graphics"]["animation"]); - //FIXME: MOD COMPATIBILITY - if (config["abilities"].getType() == JsonNode::JsonType::DATA_STRUCT) + for(const auto & ability : config["abilities"].Struct()) { - for(const auto & ability : config["abilities"].Struct()) + if (!ability.second.isNull()) { - if (!ability.second.isNull()) - { - auto b = JsonUtils::parseBonus(ability.second, creature->getBonusTextID(ability.first)); - b->source = BonusSource::CREATURE_ABILITY; - b->sid = BonusSourceID(creature->getId()); - b->duration = BonusDuration::PERMANENT; - creature->addNewBonus(b); - } - } - } - else - { - for(const JsonNode &ability : config["abilities"].Vector()) - { - if(ability.getType() == JsonNode::JsonType::DATA_VECTOR) - { - logMod->error("Ignored outdated creature ability format in %s", creature->getJsonKey()); - } - else - { - auto b = JsonUtils::parseBonus(ability); - b->source = BonusSource::CREATURE_ABILITY; - b->sid = BonusSourceID(creature->getId()); - b->duration = BonusDuration::PERMANENT; - creature->addNewBonus(b); - } + auto b = JsonUtils::parseBonus(ability.second, creature->getBonusTextID(ability.first)); + b->source = BonusSource::CREATURE_ABILITY; + b->sid = BonusSourceID(creature->getId()); + b->duration = BonusDuration::PERMANENT; + creature->addNewBonus(b); } } @@ -1000,7 +979,7 @@ void CCreatureHandler::loadStackExperience(CCreature * creature, const JsonNode auto bonus = JsonUtils::parseBonus (exp["bonus"]); bonus->source = BonusSource::STACK_EXPERIENCE; bonus->duration = BonusDuration::PERMANENT; - bonus->limiter = std::make_shared(RankRangeLimiter(lowerLimit)); + bonus->addLimiter(std::make_shared(lowerLimit)); creature->addNewBonus (bonus); break; //TODO: allow bonuses to turn off? } @@ -1020,7 +999,7 @@ void CCreatureHandler::loadStackExperience(CCreature * creature, const JsonNode auto bonus = JsonUtils::parseBonus (bonusInput); bonus->source = BonusSource::STACK_EXPERIENCE; bonus->duration = BonusDuration::PERMANENT; - bonus->limiter.reset (new RankRangeLimiter(lowerLimit)); + bonus->addLimiter(std::make_shared(lowerLimit)); creature->addNewBonus (bonus); } lastVal = static_cast(val.Float()); @@ -1076,7 +1055,7 @@ void CCreatureHandler::loadStackExp(Bonus & b, BonusList & bl, CLegacyConfigPars b.subtype = BonusCustomSubtype::deathStareGorgon; break; case 'F': - b.type = BonusType::FEAR; break; + b.type = BonusType::FEARFUL; break; case 'g': b.type = BonusType::SPELL_DAMAGE_REDUCTION; b.subtype = BonusSubtypeID(SpellSchool::ANY); @@ -1105,7 +1084,7 @@ void CCreatureHandler::loadStackExp(Bonus & b, BonusList & bl, CLegacyConfigPars case 'D': b.type = BonusType::ADDITIONAL_ATTACK; break; case 'f': - b.type = BonusType::FEARLESS; break; + b.type = BonusType::FEARFUL; break; case 'F': b.type = BonusType::FLYING; break; case 'm': @@ -1364,7 +1343,18 @@ CCreatureHandler::~CCreatureHandler() void CCreatureHandler::afterLoadFinalization() { + for(auto & creature : objects) + { + if (!creature) + continue; + auto natureBonuses = creature->getBonuses([](const Bonus * b){ + return LIBRARY->bth->isCreatureNatureBonus(b->type); + }); + + if (natureBonuses->empty()) + creature->addNewBonus(std::make_shared(BonusDuration::PERMANENT, BonusType::LIVING, BonusSource::CREATURE_ABILITY, 0, BonusSourceID(creature->getId()))); + } } std::set CCreatureHandler::getDefaultAllowed() const diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index db35e6fb4..9405dfe8d 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -69,7 +69,6 @@ set(lib_MAIN_SRCS bonuses/BonusCache.cpp bonuses/BonusEnum.cpp bonuses/BonusList.cpp - bonuses/BonusParams.cpp bonuses/BonusSelector.cpp bonuses/BonusCustomTypes.cpp bonuses/CBonusSystemNode.cpp @@ -86,9 +85,14 @@ set(lib_MAIN_SRCS callback/CNonConstInfoCallback.cpp callback/CPlayerSpecificInfoCallback.cpp callback/GameRandomizer.cpp + callback/MapInfoCallback.cpp + callback/EditorCallback.cpp + campaign/CampaignBonus.cpp campaign/CampaignHandler.cpp campaign/CampaignState.cpp + campaign/CampaignRegions.cpp + campaign/CampaignRegionsHandler.cpp constants/EntityIdentifiers.cpp @@ -100,7 +104,6 @@ set(lib_MAIN_SRCS entities/artifact/CArtifactInstance.cpp entities/artifact/CArtifactSet.cpp entities/building/CBuilding.cpp - entities/building/CBuildingHandler.cpp entities/faction/CFaction.cpp entities/faction/CTown.cpp entities/faction/CTownHandler.cpp @@ -172,6 +175,7 @@ set(lib_MAIN_SRCS mapping/MapFormatH3M.cpp mapping/MapReaderH3M.cpp mapping/MapFormatJson.cpp + mapping/MapFormatSettings.cpp mapping/ObstacleProxy.cpp modding/ActiveModsInSaveList.cpp @@ -256,6 +260,7 @@ set(lib_MAIN_SRCS spells/ObstacleCasterProxy.cpp spells/Problem.cpp spells/ProxyCaster.cpp + spells/SpellSchoolHandler.cpp spells/TargetCondition.cpp spells/ViewSpellInt.cpp @@ -450,7 +455,6 @@ set(lib_MAIN_HEADERS bonuses/BonusCache.h bonuses/BonusEnum.h bonuses/BonusList.h - bonuses/BonusParams.h bonuses/BonusSelector.h bonuses/BonusCustomTypes.h bonuses/CBonusSystemNode.h @@ -480,10 +484,14 @@ set(lib_MAIN_HEADERS callback/IGameInfoCallback.h callback/IGameRandomizer.h callback/GameRandomizer.h - - + callback/MapInfoCallback.h + callback/EditorCallback.h + + campaign/CampaignBonus.h campaign/CampaignConstants.h campaign/CampaignHandler.h + campaign/CampaignRegions.h + campaign/CampaignRegionsHandler.h campaign/CampaignScenarioPrologEpilog.h campaign/CampaignState.h @@ -504,7 +512,6 @@ set(lib_MAIN_HEADERS entities/artifact/CArtifactSet.h entities/artifact/EArtifactClass.h entities/building/CBuilding.h - entities/building/CBuildingHandler.h entities/building/TownFortifications.h entities/faction/CFaction.h entities/faction/CTown.h @@ -587,6 +594,7 @@ set(lib_MAIN_HEADERS mapping/MapFeaturesH3M.h mapping/MapFormatH3M.h mapping/MapFormat.h + mapping/MapFormatSettings.h mapping/MapReaderH3M.h mapping/MapFormatJson.h mapping/ObstacleProxy.h @@ -701,6 +709,7 @@ set(lib_MAIN_HEADERS spells/ObstacleCasterProxy.h spells/Problem.h spells/ProxyCaster.h + spells/SpellSchoolHandler.h spells/TargetCondition.h spells/ViewSpellInt.h diff --git a/lib/CSkillHandler.cpp b/lib/CSkillHandler.cpp index 4941af95b..4eddd9b3e 100644 --- a/lib/CSkillHandler.cpp +++ b/lib/CSkillHandler.cpp @@ -9,20 +9,19 @@ */ #include "StdInc.h" +#include "CSkillHandler.h" #include -#include "CSkillHandler.h" - +#include "GameLibrary.h" #include "bonuses/Updaters.h" #include "constants/StringConstants.h" #include "filesystem/Filesystem.h" -#include "json/JsonBonus.h" -#include "json/JsonUtils.h" #include "modding/IdentifierStorage.h" #include "texts/CGeneralTextHandler.h" #include "texts/CLegacyConfigParser.h" -#include "GameLibrary.h" +#include "json/JsonBonus.h" +#include "json/JsonUtils.h" VCMI_LIB_NAMESPACE_BEGIN @@ -250,6 +249,10 @@ std::shared_ptr CSkillHandler::loadFromJson(const std::string & scope, c skillAtLevel.iconSmall = levelNode["images"]["small"].String(); skillAtLevel.iconMedium = levelNode["images"]["medium"].String(); skillAtLevel.iconLarge = levelNode["images"]["large"].String(); + if (!levelNode["images"]["scenarioBonus"].isNull()) + skillAtLevel.scenarioBonus = levelNode["images"]["scenarioBonus"].String(); + else + skillAtLevel.scenarioBonus = skillAtLevel.iconMedium; // MOD COMPATIBILITY fallback for pre-1.7 mods } for(const auto & b : json["specialty"].Vector()) @@ -259,7 +262,7 @@ std::shared_ptr CSkillHandler::loadFromJson(const std::string & scope, c if (bonusNode.isStruct()) { auto bonus = JsonUtils::parseBonus(bonusNode); - bonus->val = 5; // default H3 value, hardcoded for now + bonus->val = 0; // set by HeroHandler on specialty load bonus->updater = std::make_shared(); bonus->valType = BonusValueType::PERCENT_TO_TARGET_TYPE; bonus->targetSourceType = BonusSource::SECONDARY_SKILL; diff --git a/lib/CSkillHandler.h b/lib/CSkillHandler.h index 5096e526d..0979a4a90 100644 --- a/lib/CSkillHandler.h +++ b/lib/CSkillHandler.h @@ -28,6 +28,7 @@ public: std::string iconSmall; std::string iconMedium; std::string iconLarge; + std::string scenarioBonus; std::vector> effects; }; diff --git a/lib/GameLibrary.cpp b/lib/GameLibrary.cpp index 4b6c5d294..00c11db94 100644 --- a/lib/GameLibrary.cpp +++ b/lib/GameLibrary.cpp @@ -18,6 +18,7 @@ #include "RiverHandler.h" #include "TerrainHandler.h" #include "spells/CSpellHandler.h" +#include "spells/SpellSchoolHandler.h" #include "spells/effects/Registry.h" #include "CSkillHandler.h" #include "entities/artifact/CArtHandler.h" @@ -25,6 +26,8 @@ #include "entities/hero/CHeroClassHandler.h" #include "entities/hero/CHeroHandler.h" #include "texts/CGeneralTextHandler.h" +#include "campaign/CampaignRegionsHandler.h" +#include "mapping/MapFormatSettings.h" #include "modding/CModHandler.h" #include "modding/IdentifierStorage.h" #include "modding/CModVersion.h" @@ -178,9 +181,11 @@ void GameLibrary::initializeLibrary() createHandler(biomeHandler); createHandler(objh); createHandler(objtypeh); + createHandler(spellSchoolHandler); createHandler(spellh); createHandler(skillh); createHandler(terviewh); + createHandler(campaignRegions); createHandler(tplh); //templates need already resolved identifiers (refactor?) #if SCRIPTING_ENABLED createHandler(scriptHandler); @@ -190,6 +195,8 @@ void GameLibrary::initializeLibrary() modh->load(); modh->afterLoad(); + + createHandler(mapFormat); } #if SCRIPTING_ENABLED diff --git a/lib/GameLibrary.h b/lib/GameLibrary.h index 3b954171d..7e7fee1ba 100644 --- a/lib/GameLibrary.h +++ b/lib/GameLibrary.h @@ -40,6 +40,9 @@ class IHandlerBase; class IGameSettings; class GameSettings; class CIdentifierStorage; +class SpellSchoolHandler; +class MapFormatSettings; +class CampaignRegionsHandler; #if SCRIPTING_ENABLED namespace scripting @@ -78,6 +81,7 @@ public: std::unique_ptr heroclassesh; std::unique_ptr creh; std::unique_ptr spellh; + std::unique_ptr spellSchoolHandler; std::unique_ptr skillh; // TODO: Remove ObjectHandler altogether? std::unique_ptr objh; @@ -95,6 +99,8 @@ public: std::unique_ptr obstacleHandler; std::unique_ptr settingsHandler; std::unique_ptr biomeHandler; + std::unique_ptr mapFormat; + std::unique_ptr campaignRegions; #if SCRIPTING_ENABLED std::unique_ptr scriptHandler; diff --git a/lib/GameSettings.cpp b/lib/GameSettings.cpp index 90e907f7c..a3132be39 100644 --- a/lib/GameSettings.cpp +++ b/lib/GameSettings.cpp @@ -77,6 +77,7 @@ const std::vector GameSettings::settingProperties = {EGameSettings::DWELLINGS_ACCUMULATE_WHEN_OWNED, "dwellings", "accumulateWhenOwned" }, {EGameSettings::DWELLINGS_MERGE_ON_RECRUIT, "dwellings", "mergeOnRecruit" }, {EGameSettings::HEROES_BACKPACK_CAP, "heroes", "backpackSize" }, + {EGameSettings::HEROES_BASE_SCOUNTING_RANGE, "heroes", "baseScoutingRange" }, {EGameSettings::HEROES_MINIMAL_PRIMARY_SKILLS, "heroes", "minimalPrimarySkills" }, {EGameSettings::HEROES_PER_PLAYER_ON_MAP_CAP, "heroes", "perPlayerOnMapCap" }, {EGameSettings::HEROES_PER_PLAYER_TOTAL_CAP, "heroes", "perPlayerTotalCap" }, @@ -87,6 +88,8 @@ const std::vector GameSettings::settingProperties = {EGameSettings::HEROES_MOVEMENT_POINTS_LAND, "heroes", "movementPointsLand" }, {EGameSettings::HEROES_MOVEMENT_POINTS_SEA, "heroes", "movementPointsSea" }, {EGameSettings::HEROES_SKILL_PER_HERO, "heroes", "skillPerHero" }, + {EGameSettings::HEROES_SPECIALTY_CREATURE_GROWTH, "heroes", "specialtyCreatureGrowth" }, + {EGameSettings::HEROES_SPECIALTY_SECONDARY_SKILL_GROWTH, "heroes", "specialtySecondarySkillGrowth" }, {EGameSettings::MAP_FORMAT_ARMAGEDDONS_BLADE, "mapFormat", "armageddonsBlade" }, {EGameSettings::MAP_FORMAT_CHRONICLES, "mapFormat", "chronicles" }, {EGameSettings::MAP_FORMAT_HORN_OF_THE_ABYSS, "mapFormat", "hornOfTheAbyss" }, @@ -117,6 +120,7 @@ const std::vector GameSettings::settingProperties = {EGameSettings::TEXTS_ROAD, "textData", "road" }, {EGameSettings::TEXTS_SPELL, "textData", "spell" }, {EGameSettings::TEXTS_TERRAIN, "textData", "terrain" }, + {EGameSettings::TOWNS_BASE_SCOUNTING_RANGE, "towns", "baseScoutingRange" }, {EGameSettings::TOWNS_BUILDINGS_PER_TURN_CAP, "towns", "buildingsPerTurnCap" }, {EGameSettings::TOWNS_STARTING_DWELLING_CHANCES, "towns", "startingDwellingChances" }, {EGameSettings::TOWNS_SPELL_RESEARCH, "towns", "spellResearch" }, diff --git a/lib/IGameSettings.h b/lib/IGameSettings.h index 37027a7db..693c30fd0 100644 --- a/lib/IGameSettings.h +++ b/lib/IGameSettings.h @@ -50,6 +50,7 @@ enum class EGameSettings DWELLINGS_ACCUMULATE_WHEN_OWNED, DWELLINGS_MERGE_ON_RECRUIT, HEROES_BACKPACK_CAP, + HEROES_BASE_SCOUNTING_RANGE, HEROES_MINIMAL_PRIMARY_SKILLS, HEROES_PER_PLAYER_ON_MAP_CAP, HEROES_PER_PLAYER_TOTAL_CAP, @@ -60,6 +61,9 @@ enum class EGameSettings HEROES_MOVEMENT_POINTS_LAND, HEROES_MOVEMENT_POINTS_SEA, HEROES_SKILL_PER_HERO, + HEROES_SPECIALTY_CREATURE_GROWTH, + HEROES_SPECIALTY_SECONDARY_SKILL_GROWTH, + INTERFACE_PLAYER_COLORED_BACKGROUND, MAP_FORMAT_ARMAGEDDONS_BLADE, MAP_FORMAT_CHRONICLES, MAP_FORMAT_HORN_OF_THE_ABYSS, @@ -92,14 +96,13 @@ enum class EGameSettings TEXTS_TERRAIN, TOWNS_BUILDINGS_PER_TURN_CAP, TOWNS_STARTING_DWELLING_CHANCES, - INTERFACE_PLAYER_COLORED_BACKGROUND, + TOWNS_BASE_SCOUNTING_RANGE, TOWNS_SPELL_RESEARCH, TOWNS_SPELL_RESEARCH_COST, TOWNS_SPELL_RESEARCH_PER_DAY, TOWNS_SPELL_RESEARCH_COST_EXPONENT_PER_RESEARCH, - OPTIONS_COUNT, - OPTIONS_BEGIN = BONUSES_GLOBAL + OPTIONS_COUNT }; class DLL_LINKAGE IGameSettings diff --git a/lib/IHandlerBase.h b/lib/IHandlerBase.h index ce6800b3e..62590b981 100644 --- a/lib/IHandlerBase.h +++ b/lib/IHandlerBase.h @@ -15,7 +15,7 @@ class JsonNode; class Entity; /// base class for all handlers that can be accessed from mod system -class DLL_LINKAGE IHandlerBase +class DLL_LINKAGE IHandlerBase : boost::noncopyable { protected: static std::string getScopeBuiltin(); @@ -44,7 +44,8 @@ public: virtual ~IHandlerBase() = default; }; -template class CHandlerBase : public _ServiceBase, public IHandlerBase +template +class CHandlerBase : public _ServiceBase, public IHandlerBase { const _Object * getObjectImpl(const int32_t index) const { diff --git a/lib/StartInfo.cpp b/lib/StartInfo.cpp index 7929b21dc..637e71bbb 100644 --- a/lib/StartInfo.cpp +++ b/lib/StartInfo.cpp @@ -90,22 +90,9 @@ std::string StartInfo::getCampaignName() const return LIBRARY->generaltexth->allTexts[508]; } -bool StartInfo::isRestorationOfErathiaCampaign() const +bool StartInfo::restrictedGarrisonsForAI() const { - constexpr std::array roeCampaigns = { - "DATA/GOOD1", - "DATA/EVIL1", - "DATA/GOOD2", - "DATA/NEUTRAL1", - "DATA/EVIL2", - "DATA/GOOD3", - "DATA/SECRET1", - }; - - if (!campState) - return false; - - return vstd::contains(roeCampaigns, campState->getFilename()); + return campState && campState->restrictedGarrisonsForAI(); } void LobbyInfo::verifyStateBeforeStart(bool ignoreNoHuman) const diff --git a/lib/StartInfo.h b/lib/StartInfo.h index 36ba625ec..4f161bf48 100644 --- a/lib/StartInfo.h +++ b/lib/StartInfo.h @@ -153,8 +153,8 @@ struct DLL_LINKAGE StartInfo : public Serializeable // TODO: Must be client-side std::string getCampaignName() const; - /// Controls hardcoded check for handling of garrisons by AI in Restoration of Erathia campaigns to match H3 behavior - bool isRestorationOfErathiaCampaign() const; + /// Controls check for handling of garrisons by AI in Restoration of Erathia campaigns to match H3 behavior + bool restrictedGarrisonsForAI() const; template void serialize(Handler &h) diff --git a/lib/battle/BattleInfo.cpp b/lib/battle/BattleInfo.cpp index 942c98875..d952a7e01 100644 --- a/lib/battle/BattleInfo.cpp +++ b/lib/battle/BattleInfo.cpp @@ -358,13 +358,13 @@ std::unique_ptr BattleInfo::setupBattle(IGameInfoCallback *cb, const if (currentBattle->townID.hasValue()) { - if (currentBattle->getTown()->fortificationsLevel().citadelHealth != 0) + if (currentBattle->getDefendedTown()->fortificationsLevel().citadelHealth != 0) currentBattle->generateNewStack(currentBattle->nextUnitId(), CStackBasicDescriptor(CreatureID::ARROW_TOWERS, 1), BattleSide::DEFENDER, SlotID::ARROW_TOWERS_SLOT, BattleHex::CASTLE_CENTRAL_TOWER); - if (currentBattle->getTown()->fortificationsLevel().upperTowerHealth != 0) + if (currentBattle->getDefendedTown()->fortificationsLevel().upperTowerHealth != 0) currentBattle->generateNewStack(currentBattle->nextUnitId(), CStackBasicDescriptor(CreatureID::ARROW_TOWERS, 1), BattleSide::DEFENDER, SlotID::ARROW_TOWERS_SLOT, BattleHex::CASTLE_UPPER_TOWER); - if (currentBattle->getTown()->fortificationsLevel().lowerTowerHealth != 0) + if (currentBattle->getDefendedTown()->fortificationsLevel().lowerTowerHealth != 0) currentBattle->generateNewStack(currentBattle->nextUnitId(), CStackBasicDescriptor(CreatureID::ARROW_TOWERS, 1), BattleSide::DEFENDER, SlotID::ARROW_TOWERS_SLOT, BattleHex::CASTLE_BOTTOM_TOWER); //Moat generating is done on server @@ -568,13 +568,6 @@ const CGHeroInstance * BattleInfo::getSideHero(BattleSide side) const return getSide(side).getHero(); } -const CGTownInstance * BattleInfo::getTown() const -{ - if (townID.hasValue()) - return cb->getTown(townID); - return nullptr; -} - uint8_t BattleInfo::getTacticDist() const { return tacticDistance; diff --git a/lib/battle/BattleInfo.h b/lib/battle/BattleInfo.h index dd322d9e7..cd07bd511 100644 --- a/lib/battle/BattleInfo.h +++ b/lib/battle/BattleInfo.h @@ -101,8 +101,6 @@ public: const CArmedInstance * getSideArmy(BattleSide side) const override; const CGHeroInstance * getSideHero(BattleSide side) const override; - const CGTownInstance * getTown() const; - ui8 getTacticDist() const override; BattleSide getTacticsSide() const override; diff --git a/lib/battle/DamageCalculator.cpp b/lib/battle/DamageCalculator.cpp index 5c9c0600f..eaf07c3a7 100644 --- a/lib/battle/DamageCalculator.cpp +++ b/lib/battle/DamageCalculator.cpp @@ -275,6 +275,15 @@ double DamageCalculator::getAttackJoustingFactor() const return 0.0; } +double DamageCalculator::getAttackFromBackFactor() const +{ + int value = info.defender->valOfBonuses(BonusType::VULNERABLE_FROM_BACK); + + if (value != 0 && callback.isToReverse(info.attacker, info.defender, info.attackerPos, info.defenderPos)) + return value / 100.0; + return 0; +} + double DamageCalculator::getAttackHateFactor() const { //assume that unit have only few HATE features and cache them all @@ -462,6 +471,7 @@ std::vector DamageCalculator::getAttackFactors() const getAttackBlessFactor(), getAttackLuckFactor(), getAttackJoustingFactor(), + getAttackFromBackFactor(), getAttackDeathBlowFactor(), getAttackDoubleDamageFactor(), getAttackHateFactor(), diff --git a/lib/battle/DamageCalculator.h b/lib/battle/DamageCalculator.h index d7f91e0b5..d0d649f71 100644 --- a/lib/battle/DamageCalculator.h +++ b/lib/battle/DamageCalculator.h @@ -52,6 +52,7 @@ class DLL_LINKAGE DamageCalculator double getAttackDoubleDamageFactor() const; double getAttackHateFactor() const; double getAttackRevengeFactor() const; + double getAttackFromBackFactor() const; double getDefenseSkillFactor() const; double getDefenseArmorerFactor() const; diff --git a/lib/bonuses/Bonus.cpp b/lib/bonuses/Bonus.cpp index c892976bc..7d7634d7c 100644 --- a/lib/bonuses/Bonus.cpp +++ b/lib/bonuses/Bonus.cpp @@ -14,6 +14,7 @@ #include "Updaters.h" #include "Propagators.h" +#include "../CBonusTypeHandler.h" #include "../CCreatureHandler.h" #include "../CCreatureSet.h" #include "../CSkillHandler.h" @@ -172,7 +173,7 @@ JsonNode Bonus::toJsonNode() const { JsonNode root; // only add values that might reasonably be found in config files - root["type"].String() = vstd::findKey(bonusNameMap, type); + root["type"].String() = LIBRARY->bth->bonusToString(type); if(subtype != BonusSubtypeID()) root["subtype"].String() = subtype.toString(); if(additionalInfo != CAddInfo::NONE) @@ -243,9 +244,7 @@ std::shared_ptr Bonus::addPropagator(const TPropagatorPtr & Propagator) DLL_LINKAGE std::ostream & operator<<(std::ostream &out, const Bonus &bonus) { - for(const auto & i : bonusNameMap) - if(i.second == bonus.type) - out << "\tType: " << i.first << " \t"; + out << "\tType: " << LIBRARY->bth->bonusToString(bonus.type) << " \t"; #define printField(field) out << "\t" #field ": " << (int)bonus.field << "\n" printField(val); diff --git a/lib/bonuses/Bonus.h b/lib/bonuses/Bonus.h index c49e8b1ca..aa88d09ba 100644 --- a/lib/bonuses/Bonus.h +++ b/lib/bonuses/Bonus.h @@ -65,9 +65,8 @@ struct DLL_LINKAGE Bonus : public std::enable_shared_from_this, public Se BonusValueType valType = BonusValueType::ADDITIVE_VALUE; // 1 byte BonusSource source = BonusSource::OTHER; //source type" uses BonusSource values - what gave that bonus - 1 byte BonusSource targetSourceType = BonusSource::OTHER;//Bonuses of what origin this amplifies, uses BonusSource values. Needed for PERCENT_TO_TARGET_TYPE. - 1 byte - BonusType type = BonusType::NONE; //uses BonusType values - says to what is this bonus - 1 byte BonusLimitEffect effectRange = BonusLimitEffect::NO_LIMIT; // 1 byte - // 1 bytes padding + BonusType type = BonusType::NONE; //uses BonusType values - says to what is this bonus - 2 bytes BonusSubtypeID subtype; BonusSourceID sid; //source id: id of object/artifact/spell diff --git a/lib/bonuses/BonusCache.cpp b/lib/bonuses/BonusCache.cpp index c64c3e4a2..924ac3de4 100644 --- a/lib/bonuses/BonusCache.cpp +++ b/lib/bonuses/BonusCache.cpp @@ -17,6 +17,7 @@ #include "../GameLibrary.h" #include "../IGameSettings.h" +#include "../spells/SpellSchoolHandler.h" VCMI_LIB_NAMESPACE_BEGIN @@ -59,22 +60,18 @@ bool BonusValueCache::hasBonus() const MagicSchoolMasteryCache::MagicSchoolMasteryCache(const IBonusBearer * target) :target(target) + ,schools(LIBRARY->spellSchoolHandler->getAllObjects().size() + 1) {} void MagicSchoolMasteryCache::update() const { static const CSelector allBonusesSelector = Selector::type()(BonusType::MAGIC_SCHOOL_SKILL); - static const std::array schoolsSelector = { - Selector::subtype()(SpellSchool::ANY), - Selector::subtype()(SpellSchool::AIR), - Selector::subtype()(SpellSchool::FIRE), - Selector::subtype()(SpellSchool::WATER), - Selector::subtype()(SpellSchool::EARTH), - }; auto list = target->getBonuses(allBonusesSelector); - for (int i = 0; i < schoolsSelector.size(); ++i) - schools[i] = list->valOfBonuses(schoolsSelector[i]); + schools[0] = list->valOfBonuses(Selector::subtype()(SpellSchool::ANY)); + + for (int i = 1; i < schools.size(); ++i) + schools[i] = list->valOfBonuses(Selector::subtype()(SpellSchool(i-1))); version = target->getTreeVersion(); } diff --git a/lib/bonuses/BonusCache.h b/lib/bonuses/BonusCache.h index 908d26e47..1989727c7 100644 --- a/lib/bonuses/BonusCache.h +++ b/lib/bonuses/BonusCache.h @@ -171,7 +171,7 @@ class MagicSchoolMasteryCache { const IBonusBearer * target; mutable std::atomic version = 0; - mutable std::array, 4+1> schools; + mutable std::vector> schools; void update() const; public: diff --git a/lib/bonuses/BonusEnum.cpp b/lib/bonuses/BonusEnum.cpp index 1408a4aee..03fa02688 100644 --- a/lib/bonuses/BonusEnum.cpp +++ b/lib/bonuses/BonusEnum.cpp @@ -14,12 +14,6 @@ VCMI_LIB_NAMESPACE_BEGIN -#define BONUS_NAME(x) { #x, BonusType::x }, - const std::map bonusNameMap = { - BONUS_LIST - }; -#undef BONUS_NAME - #define BONUS_VALUE(x) { #x, BonusValueType::x }, const std::map bonusValueMap = { BONUS_VALUE_LIST }; #undef BONUS_VALUE diff --git a/lib/bonuses/BonusEnum.h b/lib/bonuses/BonusEnum.h index 718e5d2b0..33ff90c51 100644 --- a/lib/bonuses/BonusEnum.h +++ b/lib/bonuses/BonusEnum.h @@ -91,8 +91,8 @@ class JsonNode; BONUS_NAME(DEFENSIVE_STANCE) /* val - bonus to defense while defending */ \ BONUS_NAME(ATTACKS_ALL_ADJACENT) /*eg. hydra*/ \ BONUS_NAME(MORE_DAMAGE_FROM_SPELL) /*value - damage increase in %, subtype - spell id*/ \ - BONUS_NAME(FEAR) \ - BONUS_NAME(FEARLESS) \ + BONUS_NAME(FEARFUL) \ + BONUS_NAME(LIVING) \ BONUS_NAME(NO_DISTANCE_PENALTY) \ BONUS_NAME(ENCHANTER)/* for Enchanter spells, val - skill level, subtype - spell id, additionalInfo - cooldown */ \ BONUS_NAME(HEALER) \ @@ -142,13 +142,13 @@ class JsonNode; BONUS_NAME(MANUAL_CONTROL) /* manually control warmachine with id = subtype, chance = val */ \ BONUS_NAME(WIDE_BREATH) /* initial desigh: dragon breath affecting multiple nearby hexes */\ BONUS_NAME(FIRST_STRIKE) /* first counterattack, then attack if possible */\ - BONUS_NAME(SYNERGY_TARGET) /* dummy skill for alternative upgrades mod */\ + BONUS_NAME(VULNERABLE_FROM_BACK) /*bonus damage for attacks from behind*/\ BONUS_NAME(SHOOTS_ALL_ADJACENT) /* H4 Cyclops-like shoot (attacks all hexes neighbouring with target) without spell-like mechanics */\ BONUS_NAME(BLOCK_MAGIC_BELOW) /*blocks casting spells of the level < value */ \ BONUS_NAME(DESTRUCTION) /*kills extra units after hit, subtype = 0 - kill percentage of units, 1 - kill amount, val = chance in percent to trigger, additional info - amount/percentage to kill*/ \ BONUS_NAME(SPECIAL_CRYSTAL_GENERATION) /*crystal dragon crystal generation*/ \ BONUS_NAME(NO_SPELLCAST_BY_DEFAULT) /*spellcast will not be default attack option for this creature*/ \ - BONUS_NAME(GARGOYLE) /* gargoyle is special than NON_LIVING, cannot be rised or healed */ \ + BONUS_NAME(SKELETON_TRANSFORMER_TARGET) /* for skeleton transformer */ \ BONUS_NAME(SPECIAL_ADD_VALUE_ENCHANT) /*specialty spell like Aenin has, increased effect of spell, additionalInfo = value to add*/\ BONUS_NAME(SPECIAL_FIXED_VALUE_ENCHANT) /*specialty spell like Melody has, constant spell effect (i.e. 3 luck), additionalInfo = value to fix.*/\ BONUS_NAME(THIEVES_GUILD_ACCESS) \ @@ -189,6 +189,9 @@ class JsonNode; BONUS_NAME(MULTIHEX_ENEMY_ATTACK) /*eg. dragons*/ \ BONUS_NAME(MULTIHEX_ANIMATION) /*eg. dragons*/ \ BONUS_NAME(STACK_EXPERIENCE_GAIN_PERCENT) /*modifies all stack experience gains*/\ + BONUS_NAME(FULL_MAP_SCOUTING) /*Skyship*/\ + BONUS_NAME(FULL_MAP_DARKNESS) /*opposite to Skyship*/\ + BONUS_NAME(TRANSMUTATION_IMMUNITY) /*blocks TRANSMUTATION bonus*/\ /* end of list */ @@ -223,11 +226,12 @@ class JsonNode; BONUS_VALUE(INDEPENDENT_MIN) //used for SECONDARY_SKILL_PREMY bonus -enum class BonusType : uint8_t +enum class BonusType : uint16_t { #define BONUS_NAME(x) x, BONUS_LIST #undef BONUS_NAME + BUILTIN_BONUSES_COUNT }; namespace BonusDuration //when bonus is automatically removed { @@ -272,7 +276,6 @@ enum class BonusValueType : uint8_t #undef BONUS_VALUE }; -extern DLL_LINKAGE const std::map bonusNameMap; extern DLL_LINKAGE const std::map bonusValueMap; extern DLL_LINKAGE const std::map bonusSourceMap; extern DLL_LINKAGE const std::map bonusDurationMap; diff --git a/lib/bonuses/BonusList.cpp b/lib/bonuses/BonusList.cpp index 09cde5566..ed7b88d06 100644 --- a/lib/bonuses/BonusList.cpp +++ b/lib/bonuses/BonusList.cpp @@ -69,7 +69,11 @@ int BonusList::totalValue(int baseValue) const int indepMax = std::numeric_limits::min(); }; - auto applyPercentage = [](int base, int percent) -> int { + auto applyPercentageRoundUp = [](int base, int percent) -> int { + return (static_cast(base) * (100 + percent) + 99) / 100; + }; + + auto applyPercentageRoundDown = [](int base, int percent) -> int { return (static_cast(base) * (100 + percent)) / 100; }; @@ -96,7 +100,11 @@ int BonusList::totalValue(int baseValue) const for(const auto & b : bonuses) { int sourceIndex = vstd::to_underlying(b->source); - int valModified = applyPercentage(b->val, percentToSource[sourceIndex]); + // Workaround: creature hero specialties in H3 is the only place that uses rounding up in bonuses + // TODO: try to find more elegant solution? + int valModified = b->source == BonusSource::CREATURE_ABILITY ? + applyPercentageRoundUp(b->val, percentToSource[sourceIndex]): + applyPercentageRoundDown(b->val, percentToSource[sourceIndex]); switch(b->valType) { @@ -123,9 +131,9 @@ int BonusList::totalValue(int baseValue) const } } - accumulated.base = applyPercentage(accumulated.base, accumulated.percentToBase); + accumulated.base = applyPercentageRoundDown(accumulated.base, accumulated.percentToBase); accumulated.base += accumulated.additive; - auto valFirst = applyPercentage(accumulated.base ,accumulated.percentToAll); + auto valFirst = applyPercentageRoundDown(accumulated.base ,accumulated.percentToAll); if(indexMinCount && indexMaxCount && accumulated.indepMin < accumulated.indepMax) accumulated.indepMax = accumulated.indepMin; diff --git a/lib/bonuses/BonusParams.cpp b/lib/bonuses/BonusParams.cpp deleted file mode 100644 index 7805e004d..000000000 --- a/lib/bonuses/BonusParams.cpp +++ /dev/null @@ -1,374 +0,0 @@ -/* - * BonusParams.cpp, part of VCMI engine - * - * Authors: listed in file AUTHORS in main folder - * - * License: GNU General Public License v2.0 or later - * Full text of license available in license.txt file, in main folder - * - */ - -#include "StdInc.h" - -#include "BonusEnum.h" -#include "BonusParams.h" -#include "BonusSelector.h" - -#include "../ResourceSet.h" -#include "../GameLibrary.h" -#include "../modding/IdentifierStorage.h" -#include "../modding/ModScope.h" - -VCMI_LIB_NAMESPACE_BEGIN - -const std::set deprecatedBonusSet = { - "SECONDARY_SKILL_PREMY", - "SECONDARY_SKILL_VAL2", - "MAXED_SPELL", - "LAND_MOVEMENT", - "SEA_MOVEMENT", - "SIGHT_RADIOUS", - "NO_TYPE", - "SPECIAL_SECONDARY_SKILL", - "FULL_HP_REGENERATION", - "KING1", - "KING2", - "KING3", - "BLOCK_MORALE", - "BLOCK_LUCK", - "SELF_MORALE", - "SELF_LUCK", - "DIRECT_DAMAGE_IMMUNITY", - "AIR_SPELL_DMG_PREMY", - "EARTH_SPELL_DMG_PREMY" - "FIRE_SPELL_DMG_PREMY" - "WATER_SPELL_DMG_PREMY", - "FIRE_SPELLS", - "AIR_SPELLS", - "WATER_SPELLS", - "EARTH_SPELLS", - "FIRE_IMMUNITY", - "AIR_IMMUNITY", - "WATER_IMMUNITY", - "EARTH_IMMUNITY" -}; - -BonusParams::BonusParams(std::string deprecatedTypeStr, std::string deprecatedSubtypeStr, int deprecatedSubtype): - isConverted(true) -{ - if(deprecatedTypeStr == "SECONDARY_SKILL_PREMY" || deprecatedTypeStr == "SPECIAL_SECONDARY_SKILL") - { - if(deprecatedSubtype == SecondarySkill::PATHFINDING || deprecatedSubtypeStr == "skill.pathfinding") - type = BonusType::ROUGH_TERRAIN_DISCOUNT; - else if(deprecatedSubtype == SecondarySkill::DIPLOMACY || deprecatedSubtypeStr == "skill.diplomacy") - type = BonusType::WANDERING_CREATURES_JOIN_BONUS; - else if(deprecatedSubtype == SecondarySkill::WISDOM || deprecatedSubtypeStr == "skill.wisdom") - type = BonusType::MAX_LEARNABLE_SPELL_LEVEL; - else if(deprecatedSubtype == SecondarySkill::MYSTICISM || deprecatedSubtypeStr == "skill.mysticism") - type = BonusType::MANA_REGENERATION; - else if(deprecatedSubtype == SecondarySkill::NECROMANCY || deprecatedSubtypeStr == "skill.necromancy") - type = BonusType::UNDEAD_RAISE_PERCENTAGE; - else if(deprecatedSubtype == SecondarySkill::LEARNING || deprecatedSubtypeStr == "skill.learning") - type = BonusType::HERO_EXPERIENCE_GAIN_PERCENT; - else if(deprecatedSubtype == SecondarySkill::RESISTANCE || deprecatedSubtypeStr == "skill.resistance") - type = BonusType::MAGIC_RESISTANCE; - else if(deprecatedSubtype == SecondarySkill::EAGLE_EYE || deprecatedSubtypeStr == "skill.eagleEye") - type = BonusType::LEARN_BATTLE_SPELL_CHANCE; - else if(deprecatedSubtype == SecondarySkill::SCOUTING || deprecatedSubtypeStr == "skill.scouting") - type = BonusType::SIGHT_RADIUS; - else if(deprecatedSubtype == SecondarySkill::INTELLIGENCE || deprecatedSubtypeStr == "skill.intelligence") - { - type = BonusType::MANA_PER_KNOWLEDGE_PERCENTAGE; - valueType = BonusValueType::PERCENT_TO_BASE; - } - else if(deprecatedSubtype == SecondarySkill::SORCERY || deprecatedSubtypeStr == "skill.sorcery") - { - type = BonusType::SPELL_DAMAGE; - subtype = BonusSubtypeID(SpellSchool::ANY); - } - else if(deprecatedSubtype == SecondarySkill::SCHOLAR || deprecatedSubtypeStr == "skill.scholar") - type = BonusType::LEARN_MEETING_SPELL_LIMIT; - else if(deprecatedSubtype == SecondarySkill::ARCHERY|| deprecatedSubtypeStr == "skill.archery") - { - subtype = BonusCustomSubtype::damageTypeRanged; - type = BonusType::PERCENTAGE_DAMAGE_BOOST; - } - else if(deprecatedSubtype == SecondarySkill::OFFENCE || deprecatedSubtypeStr == "skill.offence") - { - subtype = BonusCustomSubtype::damageTypeMelee; - type = BonusType::PERCENTAGE_DAMAGE_BOOST; - } - else if(deprecatedSubtype == SecondarySkill::ARMORER || deprecatedSubtypeStr == "skill.armorer") - { - subtype = BonusCustomSubtype::damageTypeAll; - type = BonusType::GENERAL_DAMAGE_REDUCTION; - } - else if(deprecatedSubtype == SecondarySkill::NAVIGATION || deprecatedSubtypeStr == "skill.navigation") - { - subtype = BonusCustomSubtype::heroMovementSea; - valueType = BonusValueType::PERCENT_TO_BASE; - type = BonusType::MOVEMENT; - } - else if(deprecatedSubtype == SecondarySkill::LOGISTICS || deprecatedSubtypeStr == "skill.logistics") - { - subtype = BonusCustomSubtype::heroMovementLand; - valueType = BonusValueType::PERCENT_TO_BASE; - type = BonusType::MOVEMENT; - } - else if(deprecatedSubtype == SecondarySkill::ESTATES || deprecatedSubtypeStr == "skill.estates") - { - type = BonusType::GENERATE_RESOURCE; - subtype = BonusSubtypeID(GameResID(EGameResID::GOLD)); - } - else if(deprecatedSubtype == SecondarySkill::AIR_MAGIC || deprecatedSubtypeStr == "skill.airMagic") - { - type = BonusType::MAGIC_SCHOOL_SKILL; - subtype = BonusSubtypeID(SpellSchool::AIR); - } - else if(deprecatedSubtype == SecondarySkill::WATER_MAGIC || deprecatedSubtypeStr == "skill.waterMagic") - { - type = BonusType::MAGIC_SCHOOL_SKILL; - subtype = BonusSubtypeID(SpellSchool::WATER); - } - else if(deprecatedSubtype == SecondarySkill::FIRE_MAGIC || deprecatedSubtypeStr == "skill.fireMagic") - { - type = BonusType::MAGIC_SCHOOL_SKILL; - subtype = BonusSubtypeID(SpellSchool::FIRE); - } - else if(deprecatedSubtype == SecondarySkill::EARTH_MAGIC || deprecatedSubtypeStr == "skill.earthMagic") - { - type = BonusType::MAGIC_SCHOOL_SKILL; - subtype = BonusSubtypeID(SpellSchool::EARTH); - } - else if (deprecatedSubtype == SecondarySkill::ARTILLERY || deprecatedSubtypeStr == "skill.artillery") - { - type = BonusType::BONUS_DAMAGE_CHANCE; - subtype = BonusSubtypeID(CreatureID(CreatureID::BALLISTA)); - } - else if (deprecatedSubtype == SecondarySkill::FIRST_AID || deprecatedSubtypeStr == "skill.firstAid") - { - type = BonusType::SPECIFIC_SPELL_POWER; - subtype = SpellID(*LIBRARY->identifiers()->getIdentifier( ModScope::scopeGame(), "spell", "firstAid")); - } - else if (deprecatedSubtype == SecondarySkill::BALLISTICS || deprecatedSubtypeStr == "skill.ballistics") - { - type = BonusType::CATAPULT_EXTRA_SHOTS; - subtype = SpellID(*LIBRARY->identifiers()->getIdentifier( ModScope::scopeGame(), "spell", "catapultShot")); - } - else - isConverted = false; - } - else if (deprecatedTypeStr == "SECONDARY_SKILL_VAL2") - { - if(deprecatedSubtype == SecondarySkill::EAGLE_EYE || deprecatedSubtypeStr == "skill.eagleEye") - type = BonusType::LEARN_BATTLE_SPELL_LEVEL_LIMIT; - else if (deprecatedSubtype == SecondarySkill::ARTILLERY || deprecatedSubtypeStr == "skill.artillery") - { - type = BonusType::HERO_GRANTS_ATTACKS; - subtype = BonusSubtypeID(CreatureID(CreatureID::BALLISTA)); - } - else - isConverted = false; - } - else if (deprecatedTypeStr == "SEA_MOVEMENT") - { - subtype = BonusCustomSubtype::heroMovementSea; - valueType = BonusValueType::ADDITIVE_VALUE; - type = BonusType::MOVEMENT; - } - else if (deprecatedTypeStr == "LAND_MOVEMENT") - { - subtype = BonusCustomSubtype::heroMovementLand; - valueType = BonusValueType::ADDITIVE_VALUE; - type = BonusType::MOVEMENT; - } - else if (deprecatedTypeStr == "MAXED_SPELL") - { - type = BonusType::SPELL; - subtype = SpellID(*LIBRARY->identifiers()->getIdentifier( ModScope::scopeGame(), "spell", deprecatedSubtypeStr)); - valueType = BonusValueType::INDEPENDENT_MAX; - val = 3; - } - else if (deprecatedTypeStr == "FULL_HP_REGENERATION") - { - type = BonusType::HP_REGENERATION; - val = 100000; //very high value to always chose stack health - } - else if (deprecatedTypeStr == "KING1") - { - type = BonusType::KING; - val = 0; - } - else if (deprecatedTypeStr == "KING2") - { - type = BonusType::KING; - val = 2; - } - else if (deprecatedTypeStr == "KING3") - { - type = BonusType::KING; - val = 3; - } - else if (deprecatedTypeStr == "SIGHT_RADIOUS") - type = BonusType::SIGHT_RADIUS; - else if (deprecatedTypeStr == "SELF_MORALE") - { - type = BonusType::MORALE; - val = 1; - valueType = BonusValueType::INDEPENDENT_MAX; - } - else if (deprecatedTypeStr == "SELF_LUCK") - { - type = BonusType::LUCK; - val = 1; - valueType = BonusValueType::INDEPENDENT_MAX; - } - else if (deprecatedTypeStr == "DIRECT_DAMAGE_IMMUNITY") - { - type = BonusType::SPELL_DAMAGE_REDUCTION; - subtype = BonusSubtypeID(SpellSchool::ANY); - val = 100; - } - else if (deprecatedTypeStr == "AIR_SPELL_DMG_PREMY") - { - type = BonusType::SPELL_DAMAGE; - subtype = BonusSubtypeID(SpellSchool::AIR); - } - else if (deprecatedTypeStr == "FIRE_SPELL_DMG_PREMY") - { - type = BonusType::SPELL_DAMAGE; - subtype = BonusSubtypeID(SpellSchool::FIRE); - } - else if (deprecatedTypeStr == "WATER_SPELL_DMG_PREMY") - { - type = BonusType::SPELL_DAMAGE; - subtype = BonusSubtypeID(SpellSchool::WATER); - } - else if (deprecatedTypeStr == "EARTH_SPELL_DMG_PREMY") - { - type = BonusType::SPELL_DAMAGE; - subtype = BonusSubtypeID(SpellSchool::EARTH); - } - else if (deprecatedTypeStr == "AIR_SPELLS") - { - type = BonusType::SPELLS_OF_SCHOOL; - subtype = BonusSubtypeID(SpellSchool::AIR); - } - else if (deprecatedTypeStr == "FIRE_SPELLS") - { - type = BonusType::SPELLS_OF_SCHOOL; - subtype = BonusSubtypeID(SpellSchool::FIRE); - } - else if (deprecatedTypeStr == "WATER_SPELLS") - { - type = BonusType::SPELLS_OF_SCHOOL; - subtype = BonusSubtypeID(SpellSchool::WATER); - } - else if (deprecatedTypeStr == "EARTH_SPELLS") - { - type = BonusType::SPELLS_OF_SCHOOL; - subtype = BonusSubtypeID(SpellSchool::EARTH); - } - else if (deprecatedTypeStr == "AIR_IMMUNITY") - { - subtype = BonusSubtypeID(SpellSchool::AIR); - switch(deprecatedSubtype) - { - case 0: - type = BonusType::SPELL_SCHOOL_IMMUNITY; - break; - case 1: - type = BonusType::NEGATIVE_EFFECTS_IMMUNITY; - break; - default: - type = BonusType::SPELL_DAMAGE_REDUCTION; - val = 100; - } - } - else if (deprecatedTypeStr == "FIRE_IMMUNITY") - { - subtype = BonusSubtypeID(SpellSchool::FIRE); - switch(deprecatedSubtype) - { - case 0: - type = BonusType::SPELL_SCHOOL_IMMUNITY; - break; - case 1: - type = BonusType::NEGATIVE_EFFECTS_IMMUNITY; - break; - default: - type = BonusType::SPELL_DAMAGE_REDUCTION; - val = 100; - } - } - else if (deprecatedTypeStr == "WATER_IMMUNITY") - { - subtype = BonusSubtypeID(SpellSchool::WATER); - switch(deprecatedSubtype) - { - case 0: - type = BonusType::SPELL_SCHOOL_IMMUNITY; - break; - case 1: - type = BonusType::NEGATIVE_EFFECTS_IMMUNITY; - break; - default: - type = BonusType::SPELL_DAMAGE_REDUCTION; - val = 100; - } - } - else if (deprecatedTypeStr == "EARTH_IMMUNITY") - { - subtype = BonusSubtypeID(SpellSchool::EARTH); - switch(deprecatedSubtype) - { - case 0: - type = BonusType::SPELL_SCHOOL_IMMUNITY; - break; - case 1: - type = BonusType::NEGATIVE_EFFECTS_IMMUNITY; - break; - default: - type = BonusType::SPELL_DAMAGE_REDUCTION; - val = 100; - } - } - else - isConverted = false; -} - -const JsonNode & BonusParams::toJson() -{ - assert(isConverted); - if(ret.isNull()) - { - ret["type"].String() = vstd::findKey(bonusNameMap, type); - if(subtype) - ret["subtype"].String() = subtype->toString(); - if(valueType) - ret["valueType"].String() = vstd::findKey(bonusValueMap, *valueType); - if(val) - ret["val"].Float() = *val; - if(targetType) - ret["targetSourceType"].String() = vstd::findKey(bonusSourceMap, *targetType); - jsonCreated = true; - } - ret.setModScope(ModScope::scopeGame()); - return ret; -}; - -CSelector BonusParams::toSelector() -{ - assert(isConverted); - - auto ret = Selector::type()(type); - if(subtype) - ret = ret.And(Selector::subtype()(*subtype)); - if(valueType) - ret = ret.And(Selector::valueType(*valueType)); - if(targetType) - ret = ret.And(Selector::targetSourceType()(*targetType)); - return ret; -} - -VCMI_LIB_NAMESPACE_END diff --git a/lib/bonuses/BonusParams.h b/lib/bonuses/BonusParams.h deleted file mode 100644 index 57e79c43a..000000000 --- a/lib/bonuses/BonusParams.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * BonusParams.h, part of VCMI engine - * - * Authors: listed in file AUTHORS in main folder - * - * License: GNU General Public License v2.0 or later - * Full text of license available in license.txt file, in main folder - * - */ -#pragma once - -#include "Bonus.h" - -#include "../GameConstants.h" -#include "../json/JsonNode.h" - -VCMI_LIB_NAMESPACE_BEGIN - -struct DLL_LINKAGE BonusParams { - bool isConverted; - BonusType type = BonusType::NONE; - std::optional subtype = std::nullopt; - std::optional valueType = std::nullopt; - std::optional val = std::nullopt; - std::optional targetType = std::nullopt; - - BonusParams(bool isConverted = true) : isConverted(isConverted) {}; - BonusParams(std::string deprecatedTypeStr, std::string deprecatedSubtypeStr = "", int deprecatedSubtype = 0); - const JsonNode & toJson(); - CSelector toSelector(); -private: - JsonNode ret; - bool jsonCreated = false; -}; - -extern DLL_LINKAGE const std::set deprecatedBonusSet; - -VCMI_LIB_NAMESPACE_END diff --git a/lib/bonuses/IBonusBearer.cpp b/lib/bonuses/IBonusBearer.cpp index 532e6ef14..47db5f7e8 100644 --- a/lib/bonuses/IBonusBearer.cpp +++ b/lib/bonuses/IBonusBearer.cpp @@ -15,10 +15,10 @@ VCMI_LIB_NAMESPACE_BEGIN -int IBonusBearer::valOfBonuses(const CSelector &selector, const std::string &cachingStr) const +int IBonusBearer::valOfBonuses(const CSelector &selector, const std::string &cachingStr, int baseValue) const { TConstBonusListPtr hlp = getAllBonuses(selector, nullptr, cachingStr); - return hlp->totalValue(); + return hlp->totalValue(baseValue); } bool IBonusBearer::hasBonus(const CSelector &selector, const std::string &cachingStr) const @@ -63,14 +63,17 @@ TConstBonusListPtr IBonusBearer::getBonusesOfType(BonusType type, BonusSubtypeID return getBonuses(s, cachingStr); } -int IBonusBearer::valOfBonuses(BonusType type) const +int IBonusBearer::applyBonuses(BonusType type, int baseValue) const { //This part is performance-critical std::string cachingStr = "type_" + std::to_string(static_cast(type)); - CSelector s = Selector::type()(type); + return valOfBonuses(s, cachingStr, baseValue); +} - return valOfBonuses(s, cachingStr); +int IBonusBearer::valOfBonuses(BonusType type) const +{ + return applyBonuses(type, 0); } bool IBonusBearer::hasBonusOfType(BonusType type) const diff --git a/lib/bonuses/IBonusBearer.h b/lib/bonuses/IBonusBearer.h index a4d4fb25d..d38b3db1b 100644 --- a/lib/bonuses/IBonusBearer.h +++ b/lib/bonuses/IBonusBearer.h @@ -21,7 +21,7 @@ public: IBonusBearer() = default; virtual ~IBonusBearer() = default; virtual TConstBonusListPtr getAllBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = {}) const = 0; - int valOfBonuses(const CSelector &selector, const std::string &cachingStr = {}) const; + int valOfBonuses(const CSelector &selector, const std::string &cachingStr = {}, int baseValue = 0) const; bool hasBonus(const CSelector &selector, const std::string &cachingStr = {}) const; bool hasBonus(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = {}) const; TConstBonusListPtr getBonuses(const CSelector &selector, const CSelector &limit, const std::string &cachingStr = {}) const; @@ -30,6 +30,7 @@ public: std::shared_ptr getBonus(const CSelector &selector) const; //returns any bonus visible on node that matches (or nullptr if none matches) //Optimized interface (with auto-caching) + int applyBonuses(BonusType type, int baseValue) const; //subtype -> subtype of bonus; int valOfBonuses(BonusType type) const; //subtype -> subtype of bonus; bool hasBonusOfType(BonusType type) const;//determines if hero has a bonus of given type (and optionally subtype) int valOfBonuses(BonusType type, BonusSubtypeID subtype) const; //subtype -> subtype of bonus; diff --git a/lib/bonuses/Limiters.cpp b/lib/bonuses/Limiters.cpp index 8d53b7b60..4943b7907 100644 --- a/lib/bonuses/Limiters.cpp +++ b/lib/bonuses/Limiters.cpp @@ -12,6 +12,7 @@ #include "Limiters.h" #include "Updaters.h" +#include "../CBonusTypeHandler.h" #include "../GameLibrary.h" #include "../entities/faction/CFaction.h" #include "../entities/faction/CTownHandler.h" @@ -188,7 +189,7 @@ ILimiter::EDecision HasAnotherBonusLimiter::limit(const BonusLimitationContext & std::string HasAnotherBonusLimiter::toString() const { - std::string typeName = vstd::findKey(bonusNameMap, type); + std::string typeName = LIBRARY->bth->bonusToString(type); if(isSubtypeRelevant) { boost::format fmt("HasAnotherBonusLimiter(type=%s, subtype=%s)"); @@ -206,7 +207,7 @@ std::string HasAnotherBonusLimiter::toString() const JsonNode HasAnotherBonusLimiter::toJsonNode() const { JsonNode root; - std::string typeName = vstd::findKey(bonusNameMap, type); + std::string typeName = LIBRARY->bth->bonusToString(type); auto sourceTypeName = vstd::findKey(bonusSourceMap, source); root["type"].String() = "HAS_ANOTHER_BONUS_LIMITER"; diff --git a/lib/bonuses/Updaters.cpp b/lib/bonuses/Updaters.cpp index 1a32d0635..778e87ac7 100644 --- a/lib/bonuses/Updaters.cpp +++ b/lib/bonuses/Updaters.cpp @@ -33,7 +33,9 @@ JsonNode IUpdater::toJsonNode() const return JsonNode(); } -GrowsWithLevelUpdater::GrowsWithLevelUpdater(int valPer20, int stepSize) : valPer20(valPer20), stepSize(stepSize) +GrowsWithLevelUpdater::GrowsWithLevelUpdater(int valPer20, int stepSize) + : valPer20(valPer20) + , stepSize(stepSize) { } @@ -76,7 +78,7 @@ std::shared_ptr TimesHeroLevelUpdater::createUpdatedBonus(const std::shar { int level = dynamic_cast(context).level; auto newBonus = std::make_shared(*b); - newBonus->val *= level; + newBonus->val *= level / stepSize; return newBonus; } return b; @@ -113,6 +115,40 @@ JsonNode TimesHeroLevelDivideStackLevelUpdater::toJsonNode() const return JsonNode("TIMES_HERO_LEVEL_DIVIDE_STACK_LEVEL"); } +std::shared_ptr TimesStackSizeUpdater::apply(const std::shared_ptr & b, int count) const +{ + auto newBonus = std::make_shared(*b); + newBonus->val *= std::clamp(count / stepSize, minimum, maximum); + newBonus->updater = nullptr; // prevent double-apply + return newBonus; +} + +std::shared_ptr TimesStackSizeUpdater::createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const +{ + if(context.getNodeType() == CBonusSystemNode::STACK_INSTANCE || context.getNodeType() == CBonusSystemNode::COMMANDER) + { + int count = dynamic_cast(context).getCount(); + return apply(b, count); + } + + if(context.getNodeType() == CBonusSystemNode::STACK_BATTLE) + { + const auto & stack = dynamic_cast(context); + return apply(b, stack.getCount()); + } + return b; +} + +std::string TimesStackSizeUpdater::toString() const +{ + return "TimesStackSizeUpdater"; +} + +JsonNode TimesStackSizeUpdater::toJsonNode() const +{ + return JsonNode("TIMES_STACK_SIZE"); +} + std::shared_ptr TimesStackLevelUpdater::apply(const std::shared_ptr & b, int level) const { auto newBonus = std::make_shared(*b); diff --git a/lib/bonuses/Updaters.h b/lib/bonuses/Updaters.h index af7500ff5..f79bb4322 100644 --- a/lib/bonuses/Updaters.h +++ b/lib/bonuses/Updaters.h @@ -64,10 +64,20 @@ public: class DLL_LINKAGE TimesHeroLevelUpdater : public IUpdater { + int stepSize = 1; public: + TimesHeroLevelUpdater() = default; + TimesHeroLevelUpdater(int stepSize) + : stepSize(stepSize) + { + assert(stepSize > 0); + } + template void serialize(Handler & h) { h & static_cast(*this); + if (h.hasFeature(Handler::Version::UNIVERSITY_CONFIG)) + h & stepSize; } std::shared_ptr createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const override; @@ -75,15 +85,39 @@ public: JsonNode toJsonNode() const override; }; -class DLL_LINKAGE TimesStackLevelUpdater : public IUpdater +class DLL_LINKAGE TimesStackSizeUpdater : public IUpdater { - std::shared_ptr apply(const std::shared_ptr & b, int level) const; + std::shared_ptr apply(const std::shared_ptr & b, int count) const; + + int minimum; + int maximum; + int stepSize; public: + TimesStackSizeUpdater() = default; + TimesStackSizeUpdater(int minimum, int maximum, int stepSize) + : minimum(minimum) + , maximum(maximum) + , stepSize(stepSize) + {} + + std::shared_ptr createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const override; + std::string toString() const override; + JsonNode toJsonNode() const override; + template void serialize(Handler & h) { h & static_cast(*this); + h & minimum; + h & maximum; + h & stepSize; } +}; +class DLL_LINKAGE TimesStackLevelUpdater : public IUpdater +{ + std::shared_ptr apply(const std::shared_ptr & b, int level) const; + +public: std::shared_ptr createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const override; std::string toString() const override; JsonNode toJsonNode() const override; @@ -92,12 +126,8 @@ public: class DLL_LINKAGE DivideStackLevelUpdater : public IUpdater { std::shared_ptr apply(const std::shared_ptr & b, int level) const; -public: - template void serialize(Handler & h) - { - h & static_cast(*this); - } +public: std::shared_ptr createUpdatedBonus(const std::shared_ptr & b, const CBonusSystemNode & context) const override; std::string toString() const override; JsonNode toJsonNode() const override; @@ -125,11 +155,6 @@ public: class DLL_LINKAGE OwnerUpdater : public IUpdater { public: - template void serialize(Handler& h) - { - h & static_cast(*this); - } - std::shared_ptr createUpdatedBonus(const std::shared_ptr& b, const CBonusSystemNode& context) const override; std::string toString() const override; JsonNode toJsonNode() const override; diff --git a/lib/callback/CGameInfoCallback.cpp b/lib/callback/CGameInfoCallback.cpp index e949561cd..2da943329 100644 --- a/lib/callback/CGameInfoCallback.cpp +++ b/lib/callback/CGameInfoCallback.cpp @@ -34,11 +34,10 @@ VCMI_LIB_NAMESPACE_BEGIN #define ERROR_RET_IF(cond, txt) do {if(cond){logGlobal->error("%s: %s", BOOST_CURRENT_FUNCTION, txt); return;}} while(0) #define ERROR_RET_VAL_IF(cond, txt, retVal) do {if(cond){logGlobal->error("%s: %s", BOOST_CURRENT_FUNCTION, txt); return retVal;}} while(0) -PlayerColor CGameInfoCallback::getOwner(ObjectInstanceID heroID) const +const IMarket * CGameInfoCallback::getMarket(ObjectInstanceID objid) const { - const CGObjectInstance *obj = getObj(heroID); - ERROR_RET_VAL_IF(!obj, "No such object!", PlayerColor::CANNOT_DETERMINE); - return obj->tempOwner; + const CGObjectInstance * obj = getObj(objid, false); + return dynamic_cast(obj); } int CGameInfoCallback::getResource(PlayerColor Player, GameResID which) const @@ -54,21 +53,6 @@ const PlayerSettings * CGameInfoCallback::getPlayerSettings(PlayerColor color) c return &gameState().getStartInfo()->getIthPlayersSettings(color); } -bool CGameInfoCallback::isAllowed(SpellID id) const -{ - return gameState().getMap().allowedSpells.count(id) != 0; -} - -bool CGameInfoCallback::isAllowed(ArtifactID id) const -{ - return gameState().getMap().allowedArtifact.count(id) != 0; -} - -bool CGameInfoCallback::isAllowed(SecondarySkill id) const -{ - return gameState().getMap().allowedAbilities.count(id) != 0; -} - std::optional CGameInfoCallback::getPlayerID() const { return std::nullopt; @@ -129,20 +113,10 @@ TurnTimerInfo CGameInfoCallback::getPlayerTurnTime(PlayerColor color) const const CGObjectInstance* CGameInfoCallback::getObj(ObjectInstanceID objid, bool verbose) const { - if (!objid.hasValue()) - { - if(verbose) - logGlobal->error("Cannot get object with id %d. No such object", objid.getNum()); - return nullptr; - } + const CGObjectInstance * ret = MapInfoCallback::getObj(objid, verbose); - const CGObjectInstance *ret = gameState().getMap().getObject(objid); if(!ret) - { - if(verbose) - logGlobal->error("Cannot get object with id %d. Object was removed", objid.getNum()); return nullptr; - } if(getPlayerID().has_value() && !isVisibleFor(ret, *getPlayerID()) && ret->tempOwner != getPlayerID()) { @@ -154,32 +128,6 @@ const CGObjectInstance* CGameInfoCallback::getObj(ObjectInstanceID objid, bool v return ret; } -const CGHeroInstance* CGameInfoCallback::getHero(ObjectInstanceID objid) const -{ - const CGObjectInstance *obj = getObj(objid, false); - if(obj) - return dynamic_cast(obj); - else - return nullptr; -} -const CGTownInstance* CGameInfoCallback::getTown(ObjectInstanceID objid) const -{ - const CGObjectInstance *obj = getObj(objid, false); - if(obj) - return dynamic_cast(obj); - else - return nullptr; -} - -const IMarket * CGameInfoCallback::getMarket(ObjectInstanceID objid) const -{ - const CGObjectInstance * obj = getObj(objid, false); - if(obj) - return dynamic_cast(obj); - else - return nullptr; -} - void CGameInfoCallback::fillUpgradeInfo(const CArmedInstance *obj, SlotID stackPos, UpgradeInfo & out) const { ERROR_RET_IF(!canGetFullInfo(obj), "Cannot get info about not owned object!"); @@ -295,11 +243,6 @@ bool CGameInfoCallback::getTownInfo(const CGObjectInstance * town, InfoAboutTown return true; } -const IGameSettings & CGameInfoCallback::getSettings() const -{ - return gameState().getSettings(); -} - int3 CGameInfoCallback::guardingCreaturePosition (int3 pos) const { ERROR_RET_VAL_IF(!isVisible(pos), "Tile is not visible!", int3(-1,-1,-1)); @@ -506,7 +449,7 @@ std::vector CGameInfoCallback::getAllVisitableObjs() c return ret; } -const CGObjectInstance * CGameInfoCallback::getTopObj (int3 pos) const +const CGObjectInstance * CGameInfoCallback::getTopObj(int3 pos) const { return vstd::backOrNull(getVisitableObjs(pos)); } @@ -525,11 +468,6 @@ std::vector CGameInfoCallback::getFlaggableObjects(in return ret; } -int3 CGameInfoCallback::getMapSize() const -{ - return int3(gameState().getMap().width, gameState().getMap().height, gameState().getMap().twoLevel ? 2 : 1); -} - std::vector CGameInfoCallback::getAvailableHeroes(const CGObjectInstance * townOrTavern) const { ASSERT_IF_CALLED_WITH_PLAYER @@ -643,7 +581,7 @@ EBuildingState CGameInfoCallback::canBuildStructure( const CGTownInstance *t, Bu return EBuildingState::ALLOWED; } -const CMapHeader * CGameInfoCallback::getMapHeader() const +const CMap * CGameInfoCallback::getMapConstPtr() const { return &gameState().getMap(); } @@ -778,11 +716,6 @@ const TeamState * CGameInfoCallback::getPlayerTeam( PlayerColor color ) const } } -bool CGameInfoCallback::isInTheMap(const int3 &pos) const -{ - return gameState().getMap().isInTheMap(pos); -} - void CGameInfoCallback::getVisibleTilesInRange(std::unordered_set &tiles, int3 pos, int radious, int3::EDistanceFormula distanceFormula) const { gameState().getTilesInRange(tiles, pos, radious, ETileVisibility::REVEALED, *getPlayerID(), distanceFormula); @@ -793,16 +726,6 @@ void CGameInfoCallback::calculatePaths(const std::shared_ptr & gameState().calculatePaths(config); } -const CArtifactInstance * CGameInfoCallback::getArtInstance( ArtifactInstanceID aid ) const -{ - return gameState().getMap().getArtifactInstance(aid); -} - -const CGObjectInstance * CGameInfoCallback::getObjInstance( ObjectInstanceID oid ) const -{ - return gameState().getMap().getObject((oid)); -} - const CArtifactSet * CGameInfoCallback::getArtSet(const ArtifactLocation & loc) const { auto & gs = const_cast(gameState()); @@ -903,7 +826,7 @@ void CGameInfoCallback::getTilesInRange(std::unordered_set & tiles, logGlobal->error("Illegal call to getTilesInRange!"); return; } - if(radious == CBuilding::HEIGHT_SKYSHIP) //reveal entire map + if(radious == GameConstants::FULL_MAP_RANGE) getAllTiles (tiles, player, -1, [](auto * tile){return true;}); else { diff --git a/lib/callback/CGameInfoCallback.h b/lib/callback/CGameInfoCallback.h index 0097107b9..87a27209e 100644 --- a/lib/callback/CGameInfoCallback.h +++ b/lib/callback/CGameInfoCallback.h @@ -9,16 +9,18 @@ */ #pragma once -#include "IGameInfoCallback.h" +#include "MapInfoCallback.h" VCMI_LIB_NAMESPACE_BEGIN struct SThievesGuildInfo; class Player; -class DLL_LINKAGE CGameInfoCallback : public IGameInfoCallback +class DLL_LINKAGE CGameInfoCallback : public MapInfoCallback { protected: + const CMap * getMapConstPtr() const override; + bool hasAccess(std::optional playerId) const; bool canGetFullInfo(const CGObjectInstance *obj) const; //true we player owns obj or ally owns obj or privileged mode @@ -28,10 +30,6 @@ public: int getDate(Date mode=Date::DAY)const override; //mode=0 - total days in game, mode=1 - day of week, mode=2 - current week, mode=3 - current month const StartInfo * getStartInfo() const override; const StartInfo * getInitialStartInfo() const; - bool isAllowed(SpellID id) const override; - bool isAllowed(ArtifactID id) const override; - bool isAllowed(SecondarySkill id) const override; - const IGameSettings & getSettings() const override; //player virtual std::optional getPlayerID() const; @@ -55,14 +53,11 @@ public: void fillUpgradeInfo(const CArmedInstance *obj, SlotID stackPos, UpgradeInfo &out) const; //hero - const CGHeroInstance * getHero(ObjectInstanceID objid) const override; int getHeroCount(PlayerColor player, bool includeGarrisoned) const override; std::vector getHeroes(PlayerColor player) const; bool getHeroInfo(const CGObjectInstance * hero, InfoAboutHero & dest, const CGObjectInstance * selectedObject = nullptr) const; int32_t getSpellCost(const spells::Spell * sp, const CGHeroInstance * caster) const; int64_t estimateSpellDamage(const CSpell * sp, const CGHeroInstance * hero) const; - const CArtifactInstance * getArtInstance(ArtifactInstanceID aid) const override; - const CGObjectInstance * getObjInstance(ObjectInstanceID oid) const override; const CArtifactSet * getArtSet(const ArtifactLocation & loc) const; //objects @@ -72,25 +67,20 @@ public: std::vector getAllVisitableObjs() const; std::vector getFlaggableObjects(int3 pos) const; const CGObjectInstance * getTopObj(int3 pos) const override; - PlayerColor getOwner(ObjectInstanceID heroID) const; const IMarket * getMarket(ObjectInstanceID objid) const; //map int3 guardingCreaturePosition (int3 pos) const override; std::vector getGuardingCreatures (int3 pos) const override; bool isTileGuardedUnchecked(int3 tile) const; - const CMapHeader * getMapHeader()const override; - int3 getMapSize() const override; const TerrainTile * getTile(int3 tile, bool verbose = true) const override; const TerrainTile * getTileUnchecked(int3 tile) const override; - bool isInTheMap(const int3 &pos) const override; void getVisibleTilesInRange(std::unordered_set &tiles, int3 pos, int radious, int3::EDistanceFormula distanceFormula = int3::DIST_2D) const; void calculatePaths(const std::shared_ptr & config) const override; EDiggingStatus getTileDigStatus(int3 tile, bool verbose = true) const override; bool checkForVisitableDir(const int3 & src, const int3 & dst) const override; //town - const CGTownInstance* getTown(ObjectInstanceID objid) const override; int howManyTowns(PlayerColor Player) const; std::vector getAvailableHeroes(const CGObjectInstance * townOrTavern) const; std::string getTavernRumor(const CGObjectInstance * townOrTavern) const; diff --git a/lib/callback/EditorCallback.cpp b/lib/callback/EditorCallback.cpp new file mode 100644 index 000000000..1fc40ec9b --- /dev/null +++ b/lib/callback/EditorCallback.cpp @@ -0,0 +1,197 @@ +/* + * EditorCallback.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#include "StdInc.h" +#include "EditorCallback.h" +#include "../lib/mapping/CMap.h" + +#define THROW_EDITOR_UNSUPPORTED \ + throw std::runtime_error(std::string("EditorCallback: ") + __func__ + " is not available in map editor") + +VCMI_LIB_NAMESPACE_BEGIN + +const CMap * EditorCallback::getMapConstPtr() const +{ + if(!map) + throw std::runtime_error("EditorCallback: map pointer is null"); + return map; +} + +EditorCallback::EditorCallback(const CMap * map) + : map(map) +{} + +void EditorCallback::setMap(const CMap * map) +{ + this->map = map; +} + +CGameState & EditorCallback::gameState() +{ + THROW_EDITOR_UNSUPPORTED; +} + +const CGameState & EditorCallback::gameState() const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const StartInfo * EditorCallback::getStartInfo() const +{ + THROW_EDITOR_UNSUPPORTED; +} + +int EditorCallback::getDate(Date mode) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const TerrainTile * EditorCallback::getTile(int3, bool) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const TerrainTile * EditorCallback::getTileUnchecked(int3) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const CGObjectInstance * EditorCallback::getTopObj(int3) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +EDiggingStatus EditorCallback::getTileDigStatus(int3, bool) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +void EditorCallback::calculatePaths(const std::shared_ptr &) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +int3 EditorCallback::guardingCreaturePosition(int3) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::checkForVisitableDir(const int3 &, const int3 &) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +std::vector EditorCallback::getGuardingCreatures(int3) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +void EditorCallback::getTilesInRange(std::unordered_set &, const int3 &, int, ETileVisibility, std::optional, int3::EDistanceFormula) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +void EditorCallback::getAllTiles(std::unordered_set &, std::optional, int, std::function) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +std::vector EditorCallback::getVisibleTeleportObjects(std::vector, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +std::vector EditorCallback::getTeleportChannelEntrances(TeleportChannelID, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +std::vector EditorCallback::getTeleportChannelExits(TeleportChannelID, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::isTeleportChannelImpassable(TeleportChannelID, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::isTeleportChannelBidirectional(TeleportChannelID, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::isTeleportChannelUnidirectional(TeleportChannelID, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::isTeleportEntrancePassable(const CGTeleport *, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::isVisibleFor(int3 pos, PlayerColor player) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +bool EditorCallback::isVisibleFor(const CGObjectInstance *obj, PlayerColor player) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +#if SCRIPTING_ENABLED +scripting::Pool * EditorCallback::getGlobalContextPool() const +{ + THROW_EDITOR_UNSUPPORTED; +} +#endif + +const TeamState * EditorCallback::getTeam(TeamID) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const TeamState * EditorCallback::getPlayerTeam(PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const PlayerState * EditorCallback::getPlayerState(PlayerColor, bool) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +const PlayerSettings * EditorCallback::getPlayerSettings(PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +PlayerRelations EditorCallback::getPlayerRelations(PlayerColor, PlayerColor) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +int EditorCallback::getHeroCount(PlayerColor, bool) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +EPlayerStatus EditorCallback::getPlayerStatus(PlayerColor, bool) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +int EditorCallback::getResource(PlayerColor, GameResID) const +{ + THROW_EDITOR_UNSUPPORTED; +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/callback/EditorCallback.h b/lib/callback/EditorCallback.h new file mode 100644 index 000000000..c32410669 --- /dev/null +++ b/lib/callback/EditorCallback.h @@ -0,0 +1,77 @@ +/* + * EditorCallback.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#pragma once + +#include "../lib/callback/MapInfoCallback.h" + +VCMI_LIB_NAMESPACE_BEGIN + +class DLL_LINKAGE EditorCallback : public MapInfoCallback +{ + +public: + explicit EditorCallback(const CMap * map); + + void setMap(const CMap * map); + const CMap * getMapConstPtr() const override; + + // Access to full game state — not available in editor + CGameState & gameState() override; + const CGameState & gameState() const override; + + // Unused in editor — return null or dummy + const StartInfo * getStartInfo() const override; + int getDate(Date mode) const override; + + const TerrainTile * getTile(int3 tile, bool verbose) const override; + const TerrainTile * getTileUnchecked(int3 tile) const override; + const CGObjectInstance * getTopObj(int3 pos) const override; + EDiggingStatus getTileDigStatus(int3 tile, bool verbose) const override; + void calculatePaths(const std::shared_ptr & config) const override; + int3 guardingCreaturePosition(int3 pos) const override; + bool checkForVisitableDir(const int3 & src, const int3 & dst) const override; + std::vector getGuardingCreatures(int3 pos) const override; + + void getTilesInRange(std::unordered_set & tiles, const int3 & pos, int radius, ETileVisibility mode, std::optional player, int3::EDistanceFormula formula) const override; + void getAllTiles(std::unordered_set &tiles, std::optional player, int level, std::function filter) const override; + + std::vector getVisibleTeleportObjects(std::vector ids, PlayerColor player) const override; + std::vector getTeleportChannelEntrances(TeleportChannelID id, PlayerColor player) const override; + std::vector getTeleportChannelExits(TeleportChannelID id, PlayerColor player) const override; + bool isTeleportChannelImpassable(TeleportChannelID id, PlayerColor player) const override; + bool isTeleportChannelBidirectional(TeleportChannelID id, PlayerColor player) const override; + bool isTeleportChannelUnidirectional(TeleportChannelID id, PlayerColor player) const override; + bool isTeleportEntrancePassable(const CGTeleport * obj, PlayerColor player) const override; + + bool isVisibleFor(int3 pos, PlayerColor player) const override; + bool isVisibleFor(const CGObjectInstance * obj, PlayerColor player) const override; + +// Optional scripting +#if SCRIPTING_ENABLED + scripting::Pool * getGlobalContextPool() const override; +#endif + + // Player-related (stub or throw) + const TeamState * getTeam(TeamID teamID) const override; + const TeamState * getPlayerTeam(PlayerColor color) const override; + const PlayerState * getPlayerState(PlayerColor color, bool verbose) const override; + const PlayerSettings * getPlayerSettings(PlayerColor color) const override; + PlayerRelations getPlayerRelations(PlayerColor color1, PlayerColor color2) const override; + int getHeroCount(PlayerColor player, bool includeGarrisoned) const override; + EPlayerStatus getPlayerStatus(PlayerColor player, bool verbose) const override; + int getResource(PlayerColor player, GameResID which) const override; + + virtual ~EditorCallback() = default; + +private: + const CMap * map; +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/callback/IGameEventCallback.h b/lib/callback/IGameEventCallback.h index e7992cc80..08a0fafc5 100644 --- a/lib/callback/IGameEventCallback.h +++ b/lib/callback/IGameEventCallback.h @@ -102,7 +102,6 @@ public: virtual void startBattle(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, const BattleLayout & layout, const CGTownInstance *town)=0; //use hero=nullptr for no hero virtual void startBattle(const CArmedInstance *army1, const CArmedInstance *army2)=0; //if any of armies is hero, hero will be used, visitable tile of second obj is place of battle virtual bool moveHero(ObjectInstanceID hid, int3 dst, EMovementMode moveMove, bool transit = false, PlayerColor asker = PlayerColor::NEUTRAL)=0; - virtual bool swapGarrisonOnSiege(ObjectInstanceID tid)=0; virtual void giveHeroBonus(GiveBonus * bonus)=0; virtual void setMovePoints(SetMovePoints * smp)=0; virtual void setMovePoints(ObjectInstanceID hid, int val, ChangeValueMode mode)=0; diff --git a/lib/callback/IGameInfoCallback.h b/lib/callback/IGameInfoCallback.h index 8154e6b25..b4021c375 100644 --- a/lib/callback/IGameInfoCallback.h +++ b/lib/callback/IGameInfoCallback.h @@ -73,10 +73,10 @@ public: /// WEEK - number of week within month (1..4) /// MONTH - current month (1..inf) /// DAY_OF_MONTH - number of day within current month, (1..28) - virtual int getDate(Date mode=Date::DAY)const = 0; + virtual int getDate(Date mode=Date::DAY) const = 0; /// Return pointer to static map header for current map - virtual const CMapHeader * getMapHeader()const = 0; + virtual const CMapHeader * getMapHeader() const = 0; /// Returns post-randomized startin information on current game virtual const StartInfo * getStartInfo() const = 0; @@ -103,9 +103,9 @@ public: virtual bool isInTheMap(const int3 &pos) const = 0; /// Returns pointer to specified team. Team must be valid - virtual const TeamState *getTeam(TeamID teamID) const = 0; + virtual const TeamState * getTeam(TeamID teamID) const = 0; /// Returns pointer to specified team. Player must be valid. Players without belong to a team with single member - virtual const TeamState *getPlayerTeam(PlayerColor color) const = 0; + virtual const TeamState * getPlayerTeam(PlayerColor color) const = 0; /// Returns current state of a specific player. Player must be valid virtual const PlayerState * getPlayerState(PlayerColor color, bool verbose = true) const = 0; /// Returns starting settings of a specified player. Player must be valid @@ -122,7 +122,7 @@ public: /// Returns pointer to hero using provided object ID. Returns null on failure virtual const CGHeroInstance * getHero(ObjectInstanceID objid) const = 0; /// Returns pointer to town using provided object ID. Returns null on failure - virtual const CGTownInstance* getTown(ObjectInstanceID objid) const = 0; + virtual const CGTownInstance * getTown(ObjectInstanceID objid) const = 0; /// Returns pointer to object using provided object ID. Returns null on failure virtual const CGObjectInstance * getObj(ObjectInstanceID objid, bool verbose = true) const = 0; /// Returns pointer to object using provided object ID. Returns null on failure @@ -146,7 +146,7 @@ public: /// Return true if src tile is visitable from dst tile virtual bool checkForVisitableDir(const int3 & src, const int3 & dst) const = 0; /// Returns all wandering monsters that guard specified tile - virtual std::vector getGuardingCreatures (int3 pos) const = 0; + virtual std::vector getGuardingCreatures (int3 pos) const = 0; /// Returns all tiles within specified range with specific tile visibility mode virtual void getTilesInRange(std::unordered_set & tiles, const int3 & pos, int radius, ETileVisibility mode, std::optional player = std::optional(), int3::EDistanceFormula formula = int3::DIST_2D) const = 0; diff --git a/lib/callback/MapInfoCallback.cpp b/lib/callback/MapInfoCallback.cpp new file mode 100644 index 000000000..1296fd48c --- /dev/null +++ b/lib/callback/MapInfoCallback.cpp @@ -0,0 +1,129 @@ +/* + * MapInfoCallback.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#include "StdInc.h" +#include "MapInfoCallback.h" +#include "../constants/EntityIdentifiers.h" +#include "../mapObjects/CGObjectInstance.h" +#include "../mapObjects/CGHeroInstance.h" +#include "../mapObjects/CGTownInstance.h" +#include "../mapObjects/MiscObjects.h" +#include "../StartInfo.h" +#include "../mapping/CMap.h" +#include "../spells/CSpellHandler.h" + +VCMI_LIB_NAMESPACE_BEGIN + +MapInfoCallback::~MapInfoCallback() = default; + +const CGObjectInstance * MapInfoCallback::getObj(ObjectInstanceID objid, bool verbose) const +{ + if(!objid.hasValue()) + { + if(verbose) + logGlobal->error("Cannot get object with id %d. No such object", objid.getNum()); + return nullptr; + } + + const CGObjectInstance * ret = getMapConstPtr()->getObject(objid); + if(!ret && verbose) + { + logGlobal->error("Cannot get object with id %d. Object was removed", objid.getNum()); + return nullptr; + } + + return ret; +} + +const CGHeroInstance * MapInfoCallback::getHero(ObjectInstanceID objid) const +{ + const CGObjectInstance * obj = getObj(objid, false); + return dynamic_cast(obj); +} + +const CGTownInstance * MapInfoCallback::getTown(ObjectInstanceID objid) const +{ + const CGObjectInstance * obj = getObj(objid, false); + return dynamic_cast(obj); +} + +PlayerColor MapInfoCallback::getOwner(ObjectInstanceID heroID) const +{ + const CGObjectInstance * obj = getObj(heroID); + if(!obj) + { + logGlobal->error("MapInfoCallback::getOwner(heroID): No such object for heroID: %d", heroID.num); + return PlayerColor::CANNOT_DETERMINE; + } + + return obj->tempOwner; +} + +const CArtifactInstance * MapInfoCallback::getArtInstance(ArtifactInstanceID aid) const +{ + return getMapConstPtr()->getArtifactInstance(aid); +} + +const CGObjectInstance * MapInfoCallback::getObjInstance(ObjectInstanceID oid) const +{ + return getMapConstPtr()->getObject((oid)); +} + +bool MapInfoCallback::isInTheMap(const int3 & pos) const +{ + return getMapConstPtr()->isInTheMap(pos); +} + +bool MapInfoCallback::isAllowed(SpellID id) const +{ + return getMapConstPtr()->allowedSpells.count(id) != 0; +} + +bool MapInfoCallback::isAllowed(ArtifactID id) const +{ + return getMapConstPtr()->allowedArtifact.count(id) != 0; +} + +bool MapInfoCallback::isAllowed(SecondarySkill id) const +{ + return getMapConstPtr()->allowedAbilities.count(id) != 0; +} + +int3 MapInfoCallback::getMapSize() const +{ + return int3(getMapConstPtr()->width, getMapConstPtr()->height, getMapConstPtr()->twoLevel ? 2 : 1); +} + +void MapInfoCallback::getAllowedSpells(std::vector & out, std::optional level) +{ + for (auto const & spellID : getMapConstPtr()->allowedSpells) + { + const auto * spell = spellID.toEntity(LIBRARY); + + if (!isAllowed(spellID)) + continue; + + if (level.has_value() && spell->getLevel() != level) + continue; + + out.push_back(spellID); + } +} + +const IGameSettings & MapInfoCallback::getSettings() const +{ + return getMapConstPtr()->getSettings(); +} + +const CMapHeader * MapInfoCallback::getMapHeader() const +{ + return getMapConstPtr(); +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/callback/MapInfoCallback.h b/lib/callback/MapInfoCallback.h new file mode 100644 index 000000000..2f34e3d50 --- /dev/null +++ b/lib/callback/MapInfoCallback.h @@ -0,0 +1,45 @@ +/* + * MapInfoCallback.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#pragma once + +#include "IGameInfoCallback.h" + +VCMI_LIB_NAMESPACE_BEGIN + +class CMap; + +class DLL_LINKAGE MapInfoCallback : public IGameInfoCallback +{ +protected: + virtual const CMap * getMapConstPtr() const = 0; + +public: + virtual ~MapInfoCallback(); + + const CGObjectInstance * getObj(ObjectInstanceID objid, bool verbose = true) const override; + const CGObjectInstance * getObjInstance(ObjectInstanceID oid) const override; + const CArtifactInstance * getArtInstance(ArtifactInstanceID aid) const override; + const CGHeroInstance * getHero(ObjectInstanceID objid) const override; + const CGTownInstance * getTown(ObjectInstanceID objid) const override; + PlayerColor getOwner(ObjectInstanceID heroID) const; + + bool isInTheMap(const int3 & pos) const override; + bool isAllowed(SpellID id) const override; + bool isAllowed(ArtifactID id) const override; + bool isAllowed(SecondarySkill id) const override; + int3 getMapSize() const override; + void getAllowedSpells(std::vector & out, std::optional level); + + const IGameSettings & getSettings() const override; + const CMapHeader * getMapHeader() const override; + +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignBonus.cpp b/lib/campaign/CampaignBonus.cpp new file mode 100644 index 000000000..923aa8f2b --- /dev/null +++ b/lib/campaign/CampaignBonus.cpp @@ -0,0 +1,353 @@ +/* + * CampaignBonus.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#include "StdInc.h" +#include "CampaignBonus.h" + +#include "../filesystem/CBinaryReader.h" +#include "../mapping/MapIdentifiersH3M.h" +#include "../json/JsonNode.h" +#include "../constants/StringConstants.h" + +VCMI_LIB_NAMESPACE_BEGIN + +static const std::map bonusTypeMap = { + {"spell", CampaignBonusType::SPELL}, + {"creature", CampaignBonusType::MONSTER}, + {"building", CampaignBonusType::BUILDING}, + {"artifact", CampaignBonusType::ARTIFACT}, + {"scroll", CampaignBonusType::SPELL_SCROLL}, + {"primarySkill", CampaignBonusType::PRIMARY_SKILL}, + {"secondarySkill", CampaignBonusType::SECONDARY_SKILL}, + {"resource", CampaignBonusType::RESOURCE}, + {"prevHero", CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO}, + {"hero", CampaignBonusType::HERO}, +}; + +static const std::map heroSpecialMap = { + {"strongest", HeroTypeID::CAMP_STRONGEST}, + {"generated", HeroTypeID::CAMP_GENERATED}, + {"random", HeroTypeID::CAMP_RANDOM} +}; + +static const std::map resourceTypeMap = { + {"wood", EGameResID::WOOD}, + {"mercury", EGameResID::MERCURY}, + {"ore", EGameResID::ORE}, + {"sulfur", EGameResID::SULFUR}, + {"crystal", EGameResID::CRYSTAL}, + {"gems", EGameResID::GEMS}, + {"gold", EGameResID::GOLD}, + {"common", EGameResID::COMMON}, + {"rare", EGameResID::RARE} +}; + +CampaignBonus::CampaignBonus(CBinaryReader & reader, const MapIdentifiersH3M & remapper, CampaignStartOptions mode) +{ + switch(mode) + { + case CampaignStartOptions::NONE: + // in this mode game should not attempt to create instances of bonuses + throw std::runtime_error("Attempt to create empty campaign bonus"); + + case CampaignStartOptions::START_BONUS: + { + auto bonusType = static_cast(reader.readUInt8()); + + switch(bonusType) + { + case CampaignBonusType::SPELL: + { + HeroTypeID hero(reader.readInt16()); + SpellID spell(reader.readUInt8()); + data = CampaignBonusSpell{remapper.remap(hero), spell}; + break; + } + case CampaignBonusType::MONSTER: + { + HeroTypeID hero(reader.readInt16()); + CreatureID creature(reader.readUInt16()); + int32_t amount = reader.readUInt16(); + data = CampaignBonusCreatures{remapper.remap(hero), remapper.remap(creature), amount}; + break; + } + case CampaignBonusType::BUILDING: + { + BuildingID building(reader.readUInt8()); + data = CampaignBonusBuilding{building, remapper.remapBuilding(std::nullopt, building)}; + break; + } + case CampaignBonusType::ARTIFACT: + { + HeroTypeID hero(reader.readInt16()); + ArtifactID artifact(reader.readUInt16()); + data = CampaignBonusArtifact{remapper.remap(hero), remapper.remap(artifact)}; + break; + } + case CampaignBonusType::SPELL_SCROLL: + { + HeroTypeID hero(reader.readInt16()); + SpellID spell(reader.readUInt8()); + data = CampaignBonusSpellScroll{remapper.remap(hero), spell}; + break; + } + case CampaignBonusType::PRIMARY_SKILL: + { + HeroTypeID hero(reader.readInt16()); + std::array amounts = {}; + for(auto & value : amounts) + value = reader.readUInt8(); + + data = CampaignBonusPrimarySkill{remapper.remap(hero), amounts}; + break; + } + case CampaignBonusType::SECONDARY_SKILL: + { + HeroTypeID hero(reader.readInt16()); + SecondarySkill skill(reader.readUInt8()); + int32_t skillMastery(reader.readUInt8()); + data = CampaignBonusSecondarySkill{remapper.remap(hero), remapper.remap(skill), skillMastery}; + break; + } + case CampaignBonusType::RESOURCE: + { + GameResID resource(reader.readInt8()); + int32_t amount(reader.readInt32()); + data = CampaignBonusStartingResources{resource, amount}; + break; + } + default: + throw std::runtime_error("Corrupted or unsupported h3c file"); + } + break; + } + case CampaignStartOptions::HERO_CROSSOVER: //reading of players (colors / scenarios ?) player can choose + { + PlayerColor player(reader.readUInt8()); + CampaignScenarioID scenario(reader.readUInt8()); + data = CampaignBonusHeroesFromScenario{player, scenario}; + break; + } + case CampaignStartOptions::HERO_OPTIONS: //heroes player can choose between + { + PlayerColor player(reader.readUInt8()); + HeroTypeID hero(reader.readInt16()); + data = CampaignBonusStartingHero{player, remapper.remap(hero)}; + break; + } + default: + { + throw std::runtime_error("Corrupted or unsupported h3c file"); + } + } +} + +CampaignBonus::CampaignBonus(const JsonNode & bjson, CampaignStartOptions mode) +{ + CampaignBonusType bonusType; + + if (!bjson["what"].isNull()) + { + bonusType = bonusTypeMap.at(bjson["what"].String()); + } + else if (mode == CampaignStartOptions::HERO_CROSSOVER) + { + bonusType = CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO; + } + else if (mode == CampaignStartOptions::HERO_OPTIONS) + { + bonusType = CampaignBonusType::HERO; + } + else + { + throw std::runtime_error("Corrupted or unsupported vcmp file"); + } + + const auto & decodeHeroTypeID = [](JsonNode heroType) -> HeroTypeID + { + if(vstd::contains(heroSpecialMap, heroType.String())) + return HeroTypeID(heroSpecialMap.at(heroType.String())); + else + return HeroTypeID(HeroTypeID::decode(heroType.String())); + }; + + switch(bonusType) + { + case CampaignBonusType::SPELL: + { + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + SpellID spell(SpellID::decode(bjson["spellType"].String())); + data = CampaignBonusSpell{hero, spell}; + break; + } + case CampaignBonusType::MONSTER: + { + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + CreatureID creature(CreatureID::decode(bjson["creatureType"].String())); + int32_t amount = bjson["creatureAmount"].Integer(); + data = CampaignBonusCreatures{hero, creature, amount}; + break; + } + case CampaignBonusType::BUILDING: + { + BuildingID building(vstd::find_pos(EBuildingType::names, bjson["buildingType"].String())); + data = CampaignBonusBuilding{building, building}; + break; + } + case CampaignBonusType::ARTIFACT: + { + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + ArtifactID artifact(ArtifactID::decode(bjson["artifactType"].String())); + data = CampaignBonusArtifact{hero, artifact}; + break; + } + case CampaignBonusType::SPELL_SCROLL: + { + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + SpellID spell(SpellID::decode(bjson["spellType"].String())); + data = CampaignBonusSpellScroll{hero, spell}; + break; + } + case CampaignBonusType::PRIMARY_SKILL: + { + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + std::array amounts = {}; + for(size_t i = 0; i < amounts.size(); ++i) + amounts[i] = bjson[NPrimarySkill::names[i]].Integer(); + + data = CampaignBonusPrimarySkill{hero, amounts}; + break; + } + case CampaignBonusType::SECONDARY_SKILL: + { + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + SecondarySkill skill(SecondarySkill::decode(bjson["skillType"].String())); + int32_t skillMastery = bjson["skillMastery"].Integer(); + data = CampaignBonusSecondarySkill{hero, skill, skillMastery}; + break; + } + case CampaignBonusType::RESOURCE: + { + GameResID resource(resourceTypeMap.at(bjson["resourceType"].String())); + int32_t resourceAmount(bjson["resourceAmount"].Integer()); + data = CampaignBonusStartingResources{resource, resourceAmount}; + break; + } + case CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO: //reading of players (colors / scenarios ?) player can choose + { + PlayerColor player(SecondarySkill::decode(bjson["playerColor"].String())); + CampaignScenarioID scenario(bjson["scenario"].Integer()); + data = CampaignBonusHeroesFromScenario{player, scenario}; + break; + } + case CampaignBonusType::HERO: //heroes player can choose between + { + PlayerColor player(SecondarySkill::decode(bjson["playerColor"].String())); + HeroTypeID hero(decodeHeroTypeID(bjson["hero"])); + data = CampaignBonusStartingHero{player, hero}; + break; + } + default: + throw std::runtime_error("Corrupted or unsupported h3c file"); + } +} + +JsonNode CampaignBonus::toJson() const +{ + JsonNode bnode; + + const auto & encodeHeroTypeID = [](HeroTypeID heroType) -> JsonNode + { + if(vstd::contains(vstd::reverseMap(heroSpecialMap), heroType)) + return JsonNode(vstd::reverseMap(heroSpecialMap)[heroType]); + else + return JsonNode(HeroTypeID::encode(heroType)); + }; + + bnode["what"].String() = vstd::reverseMap(bonusTypeMap).at(getType()); + + switch (getType()) + { + case CampaignBonusType::SPELL: + { + const auto & bonusValue = getValue(); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + bnode["spellType"].String() = SpellID::encode(bonusValue.spell.getNum()); + break; + } + case CampaignBonusType::MONSTER: + { + const auto & bonusValue = getValue(); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + bnode["creatureType"].String() = CreatureID::encode(bonusValue.creature.getNum()); + bnode["creatureAmount"].Integer() = bonusValue.amount; + break; + } + case CampaignBonusType::BUILDING: + { + const auto & bonusValue = getValue(); + bnode["buildingType"].String() = EBuildingType::names[bonusValue.buildingDecoded.getNum()]; + break; + } + case CampaignBonusType::ARTIFACT: + { + const auto & bonusValue = getValue(); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + bnode["artifactType"].String() = ArtifactID::encode(bonusValue.artifact.getNum()); + break; + } + case CampaignBonusType::SPELL_SCROLL: + { + const auto & bonusValue = getValue(); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + bnode["spellType"].String() = SpellID::encode(bonusValue.spell.getNum()); + break; + } + case CampaignBonusType::PRIMARY_SKILL: + { + const auto & bonusValue = getValue(); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + for(size_t i = 0; i < bonusValue.amounts.size(); ++i) + bnode[NPrimarySkill::names[i]].Integer() = bonusValue.amounts[i]; + break; + } + case CampaignBonusType::SECONDARY_SKILL: + { + const auto & bonusValue = getValue(); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + bnode["skillType"].String() = SecondarySkill::encode(bonusValue.skill.getNum()); + bnode["skillMastery"].Integer() = bonusValue.mastery; + break; + } + case CampaignBonusType::RESOURCE: + { + const auto & bonusValue = getValue(); + bnode["resourceType"].String() = vstd::reverseMap(resourceTypeMap)[bonusValue.resource.getNum()]; + bnode["resourceAmount"].Integer() = bonusValue.amount; + break; + } + case CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO: + { + const auto & bonusValue = getValue(); + bnode["playerColor"].String() = PlayerColor::encode(bonusValue.startingPlayer); + bnode["scenario"].Integer() = bonusValue.scenario.getNum(); + break; + } + case CampaignBonusType::HERO: + { + const auto & bonusValue = getValue(); + bnode["playerColor"].String() = PlayerColor::encode(bonusValue.startingPlayer); + bnode["hero"] = encodeHeroTypeID(bonusValue.hero); + break; + } + } + return bnode; +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignBonus.h b/lib/campaign/CampaignBonus.h new file mode 100644 index 000000000..e8f1e6cd1 --- /dev/null +++ b/lib/campaign/CampaignBonus.h @@ -0,0 +1,224 @@ +/* + * CampaignBonus.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#pragma once + +#include "CampaignConstants.h" +#include "../constants/EntityIdentifiers.h" + +VCMI_LIB_NAMESPACE_BEGIN + +class CBinaryReader; +class MapIdentifiersH3M; +class JsonNode; + +struct CampaignBonusSpell +{ + HeroTypeID hero; + SpellID spell; + + template void serialize(Handler &h) + { + h & hero; + h & spell; + } +}; + +struct CampaignBonusCreatures +{ + HeroTypeID hero; + CreatureID creature; + int32_t amount = 0; + + template void serialize(Handler &h) + { + h & hero; + h & creature; + h & amount; + } +}; + +struct CampaignBonusBuilding +{ + BuildingID buildingH3M; + BuildingID buildingDecoded; + + template void serialize(Handler &h) + { + h & buildingH3M; + h & buildingDecoded; + } +}; + +struct CampaignBonusArtifact +{ + HeroTypeID hero; + ArtifactID artifact; + + template void serialize(Handler &h) + { + h & hero; + h & artifact; + } +}; + +struct CampaignBonusSpellScroll +{ + HeroTypeID hero; + SpellID spell; + + template void serialize(Handler &h) + { + h & hero; + h & spell; + } +}; + +struct CampaignBonusPrimarySkill +{ + HeroTypeID hero; + std::array amounts = {}; + + template void serialize(Handler &h) + { + h & hero; + h & amounts; + } +}; + +struct CampaignBonusSecondarySkill +{ + HeroTypeID hero; + SecondarySkill skill; + int32_t mastery = 0; + + template void serialize(Handler &h) + { + h & hero; + h & skill; + h & mastery; + } +}; + +struct CampaignBonusStartingResources +{ + GameResID resource; + int32_t amount = 0; + + template void serialize(Handler &h) + { + h & resource; + h & amount; + } +}; + +struct CampaignBonusHeroesFromScenario +{ + PlayerColor startingPlayer; + CampaignScenarioID scenario; + + template void serialize(Handler &h) + { + h & startingPlayer; + h & scenario; + } +}; + +struct CampaignBonusStartingHero +{ + PlayerColor startingPlayer; + HeroTypeID hero; + + template void serialize(Handler &h) + { + h & startingPlayer; + h & hero; + } +}; + +class CampaignBonus +{ + using Variant = std::variant< + CampaignBonusSpell, // UNTESTED + CampaignBonusCreatures, + CampaignBonusBuilding, // UNTESTED - broken, Long Live the King, Liberation last + CampaignBonusArtifact, + CampaignBonusSpellScroll, + CampaignBonusPrimarySkill, + CampaignBonusSecondarySkill, + CampaignBonusStartingResources, + CampaignBonusHeroesFromScenario, + CampaignBonusStartingHero>; + + Variant data; + + template + struct HasHero : std::false_type { }; + + template + struct HasHero().hero, void())> : std::true_type { }; + +public: + CampaignBonus() = default; + + template + CampaignBonus(const BonusType & value) + :data(value) + {} + + DLL_LINKAGE CampaignBonus(CBinaryReader & reader, const MapIdentifiersH3M & remapper, CampaignStartOptions mode); + DLL_LINKAGE CampaignBonus(const JsonNode & json, CampaignStartOptions mode); + + template + const T & getValue() const + { + return std::get(data); + } + + HeroTypeID getTargetedHero() const + { + HeroTypeID result; + + std::visit([&result](const auto & bonusValue){ + if constexpr (HasHero::value) + { + result = bonusValue.hero; + } + else + throw std::runtime_error("Attempt to get targeted hero on invalid type!"); + }, data); + + return result; + } + + bool isBonusForHero() const + { + auto type = getType(); + return type == CampaignBonusType::SPELL || + type == CampaignBonusType::MONSTER || + type == CampaignBonusType::ARTIFACT || + type == CampaignBonusType::SPELL_SCROLL || + type == CampaignBonusType::PRIMARY_SKILL || + type == CampaignBonusType::SECONDARY_SKILL; + } + + CampaignBonusType getType() const + { + return static_cast(data.index()); + } + + DLL_LINKAGE JsonNode toJson() const; + + template void serialize(Handler &h) + { + h & data; + } +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignConstants.h b/lib/campaign/CampaignConstants.h index ef58fd78a..6d5643b83 100644 --- a/lib/campaign/CampaignConstants.h +++ b/lib/campaign/CampaignConstants.h @@ -27,7 +27,7 @@ enum class CampaignVersion : uint8_t VCMI_MAX = 1, }; -enum class CampaignStartOptions: int8_t +enum class CampaignStartOptions : int8_t { NONE = 0, START_BONUS, @@ -37,7 +37,6 @@ enum class CampaignStartOptions: int8_t enum class CampaignBonusType : int8_t { - NONE = -1, SPELL, MONSTER, BUILDING, diff --git a/lib/campaign/CampaignHandler.cpp b/lib/campaign/CampaignHandler.cpp index 067a322f2..4972d0468 100644 --- a/lib/campaign/CampaignHandler.cpp +++ b/lib/campaign/CampaignHandler.cpp @@ -11,6 +11,7 @@ #include "CampaignHandler.h" #include "CampaignState.h" +#include "CampaignRegionsHandler.h" #include "../filesystem/Filesystem.h" #include "../filesystem/CCompressedStream.h" @@ -18,9 +19,9 @@ #include "../filesystem/CBinaryReader.h" #include "../filesystem/CZipLoader.h" #include "../GameLibrary.h" -#include "../constants/StringConstants.h" #include "../mapping/CMapHeader.h" #include "../mapping/CMapService.h" +#include "../mapping/MapFormatSettings.h" #include "../modding/CModHandler.h" #include "../modding/IdentifierStorage.h" #include "../modding/ModScope.h" @@ -29,7 +30,7 @@ VCMI_LIB_NAMESPACE_BEGIN -void CampaignHandler::readCampaign(Campaign * ret, const std::vector & input, std::string filename, std::string modName, std::string encoding) +void CampaignHandler::readCampaign(Campaign * ret, const std::vector & input, const std::string & filename, const std::string & modName, const std::string & encoding) { if (input.front() < uint8_t(' ')) // binary format { @@ -77,8 +78,8 @@ std::unique_ptr CampaignHandler::getHeader( const std::string & name) std::shared_ptr CampaignHandler::getCampaign( const std::string & name ) { ResourcePath resourceID(name, EResType::CAMPAIGN); - std::string modName = LIBRARY->modh->findResourceOrigin(resourceID); - std::string encoding = LIBRARY->modh->findResourceEncoding(resourceID); + const std::string & modName = LIBRARY->modh->findResourceOrigin(resourceID); + const std::string & encoding = LIBRARY->modh->findResourceEncoding(resourceID); auto ret = std::make_unique(); @@ -124,14 +125,14 @@ static std::string convertMapName(std::string input) return input; } -std::string CampaignHandler::readLocalizedString(CampaignHeader & target, CBinaryReader & reader, std::string filename, std::string modName, std::string encoding, std::string identifier) +std::string CampaignHandler::readLocalizedString(CampaignHeader & target, CBinaryReader & reader, const std::string & filename, const std::string & modName, const std::string & encoding, const std::string & identifier) { - std::string input = TextOperations::toUnicode(reader.readBaseString(), encoding); + const std::string & input = TextOperations::toUnicode(reader.readBaseString(), encoding); return readLocalizedString(target, input, filename, modName, identifier); } -std::string CampaignHandler::readLocalizedString(CampaignHeader & target, std::string text, std::string filename, std::string modName, std::string identifier) +std::string CampaignHandler::readLocalizedString(CampaignHeader & target, const std::string & text, const std::string & filename, const std::string & modName, const std::string & identifier) { TextIdentifier stringID( "campaign", convertMapName(filename), identifier); @@ -142,7 +143,7 @@ std::string CampaignHandler::readLocalizedString(CampaignHeader & target, std::s return stringID.get(); } -void CampaignHandler::readHeaderFromJson(CampaignHeader & ret, JsonNode & reader, std::string filename, std::string modName, std::string encoding) +void CampaignHandler::readHeaderFromJson(CampaignHeader & ret, JsonNode & reader, const std::string & filename, const std::string & modName, const std::string & encoding) { ret.version = static_cast(reader["version"].Integer()); if(ret.version < CampaignVersion::VCMI_MIN || ret.version > CampaignVersion::VCMI_MAX) @@ -152,7 +153,7 @@ void CampaignHandler::readHeaderFromJson(CampaignHeader & ret, JsonNode & reader } ret.version = CampaignVersion::VCMI; - ret.campaignRegions = CampaignRegions::fromJson(reader["regions"]); + ret.campaignRegions = CampaignRegions(reader["regions"]); ret.numberOfScenarios = reader["scenarios"].Vector().size(); ret.name.appendTextID(readLocalizedString(ret, reader["name"].String(), filename, modName, "name")); ret.description.appendTextID(readLocalizedString(ret, reader["description"].String(), filename, modName, "description")); @@ -175,7 +176,7 @@ JsonNode CampaignHandler::writeHeaderToJson(CampaignHeader & header) { JsonNode node; node["version"].Integer() = static_cast(CampaignVersion::VCMI); - node["regions"] = CampaignRegions::toJson(header.campaignRegions); + node["regions"] = header.campaignRegions.toJson(); node["name"].String() = header.name.toString(); node["description"].String() = header.description.toString(); node["author"].String() = header.author.toString(); @@ -260,44 +261,6 @@ static const std::map startOptionsMap = { {"hero", CampaignStartOptions::HERO_OPTIONS} }; -static const std::map bonusTypeMap = { - {"spell", CampaignBonusType::SPELL}, - {"creature", CampaignBonusType::MONSTER}, - {"building", CampaignBonusType::BUILDING}, - {"artifact", CampaignBonusType::ARTIFACT}, - {"scroll", CampaignBonusType::SPELL_SCROLL}, - {"primarySkill", CampaignBonusType::PRIMARY_SKILL}, - {"secondarySkill", CampaignBonusType::SECONDARY_SKILL}, - {"resource", CampaignBonusType::RESOURCE}, - //{"prevHero", CScenarioTravel::STravelBonus::EBonusType::HEROES_FROM_PREVIOUS_SCENARIO}, - //{"hero", CScenarioTravel::STravelBonus::EBonusType::HERO}, -}; - -static const std::map primarySkillsMap = { - {"attack", 0}, - {"defence", 8}, - {"spellpower", 16}, - {"knowledge", 24}, -}; - -static const std::map heroSpecialMap = { - {"strongest", HeroTypeID::CAMP_STRONGEST}, - {"generated", HeroTypeID::CAMP_GENERATED}, - {"random", HeroTypeID::CAMP_RANDOM} -}; - -static const std::map resourceTypeMap = { - {"wood", EGameResID::WOOD}, - {"mercury", EGameResID::MERCURY}, - {"ore", EGameResID::ORE}, - {"sulfur", EGameResID::SULFUR}, - {"crystal", EGameResID::CRYSTAL}, - {"gems", EGameResID::GEMS}, - {"gold", EGameResID::GOLD}, - {"common", EGameResID::COMMON}, - {"rare", EGameResID::RARE} -}; - CampaignTravel CampaignHandler::readScenarioTravelFromJson(JsonNode & reader) { CampaignTravel ret; @@ -327,115 +290,19 @@ CampaignTravel CampaignHandler::readScenarioTravelFromJson(JsonNode & reader) } ret.startOptions = startOptionsMap.at(reader["startOptions"].String()); - switch(ret.startOptions) - { - case CampaignStartOptions::NONE: - //no bonuses. Seems to be OK - break; - case CampaignStartOptions::START_BONUS: //reading of bonuses player can choose - { - ret.playerColor = PlayerColor(PlayerColor::decode(reader["playerColor"].String())); - for(auto & bjson : reader["bonuses"].Vector()) - { - CampaignBonus bonus; - bonus.type = bonusTypeMap.at(bjson["what"].String()); - switch (bonus.type) - { - case CampaignBonusType::RESOURCE: - bonus.info1 = resourceTypeMap.at(bjson["type"].String()); - bonus.info2 = bjson["amount"].Integer(); - break; - - case CampaignBonusType::BUILDING: - bonus.info1 = vstd::find_pos(EBuildingType::names, bjson["type"].String()); - if(bonus.info1 == -1) - logGlobal->warn("VCMP Loading: unresolved building identifier %s", bjson["type"].String()); - break; - - default: - auto heroIdentifier = bjson["hero"].String(); - auto it = heroSpecialMap.find(heroIdentifier); - if(it != heroSpecialMap.end()) - bonus.info1 = it->second; - else - if(auto identifier = LIBRARY->identifiers()->getIdentifier(ModScope::scopeMap(), "hero", heroIdentifier)) - bonus.info1 = identifier.value(); - else - logGlobal->warn("VCMP Loading: unresolved hero identifier %s", heroIdentifier); - - bonus.info3 = bjson["amount"].Integer(); - - switch(bonus.type) - { - case CampaignBonusType::SPELL: - case CampaignBonusType::MONSTER: - case CampaignBonusType::SECONDARY_SKILL: - case CampaignBonusType::ARTIFACT: - if(auto identifier = LIBRARY->identifiers()->getIdentifier(ModScope::scopeMap(), bjson["what"].String(), bjson["type"].String())) - bonus.info2 = identifier.value(); - else - logGlobal->warn("VCMP Loading: unresolved %s identifier %s", bjson["what"].String(), bjson["type"].String()); - break; - - case CampaignBonusType::SPELL_SCROLL: - if(auto Identifier = LIBRARY->identifiers()->getIdentifier(ModScope::scopeMap(), "spell", bjson["type"].String())) - bonus.info2 = Identifier.value(); - else - logGlobal->warn("VCMP Loading: unresolved spell scroll identifier %s", bjson["type"].String()); - break; - - case CampaignBonusType::PRIMARY_SKILL: - for(auto & ps : primarySkillsMap) - bonus.info2 |= bjson[ps.first].Integer() << ps.second; - break; - - default: - bonus.info2 = bjson["type"].Integer(); - } - break; - } - ret.bonusesToChoose.push_back(bonus); - } - break; - } - case CampaignStartOptions::HERO_CROSSOVER: //reading of players (colors / scenarios ?) player can choose - { - for(auto & bjson : reader["bonuses"].Vector()) - { - CampaignBonus bonus; - bonus.type = CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO; - bonus.info1 = bjson["playerColor"].Integer(); //player color - bonus.info2 = bjson["scenario"].Integer(); //from what scenario - ret.bonusesToChoose.push_back(bonus); - } - break; - } - case CampaignStartOptions::HERO_OPTIONS: //heroes player can choose between - { - for(auto & bjson : reader["bonuses"].Vector()) - { - CampaignBonus bonus; - bonus.type = CampaignBonusType::HERO; - bonus.info1 = bjson["playerColor"].Integer(); //player color - auto heroIdentifier = bjson["hero"].String(); - auto it = heroSpecialMap.find(heroIdentifier); - if(it != heroSpecialMap.end()) - bonus.info2 = it->second; - else - if (auto identifier = LIBRARY->identifiers()->getIdentifier(ModScope::scopeMap(), "hero", heroIdentifier)) - bonus.info2 = identifier.value(); - else - logGlobal->warn("VCMP Loading: unresolved hero identifier %s", heroIdentifier); - - ret.bonusesToChoose.push_back(bonus); - } - break; + if (!reader["playerColor"].isNull()) + ret.playerColor = PlayerColor(PlayerColor::decode(reader["playerColor"].String())); + + for(auto & bjson : reader["bonuses"].Vector()) + { + try { + ret.bonusesToChoose.emplace_back(bjson, ret.startOptions); } - default: + catch (const std::exception &) { - logGlobal->warn("VCMP Loading: Unsupported start options value"); - break; + logGlobal->error("Failed to parse campaign bonus: %s", bjson.toCompactString()); + throw; } } @@ -454,121 +321,56 @@ void CampaignHandler::writeScenarioTravelToJson(JsonNode & node, const CampaignT node["heroKeeps"].Vector().push_back(JsonNode("spells")); if(travel.whatHeroKeeps.artifacts) node["heroKeeps"].Vector().push_back(JsonNode("artifacts")); - for(auto & c : travel.monstersKeptByHero) + for(const auto & c : travel.monstersKeptByHero) node["keepCreatures"].Vector().push_back(JsonNode(CreatureID::encode(c))); - for(auto & a : travel.artifactsKeptByHero) + for(const auto & a : travel.artifactsKeptByHero) node["keepArtifacts"].Vector().push_back(JsonNode(ArtifactID::encode(a))); - node["startOptions"].String() = vstd::reverseMap(startOptionsMap)[travel.startOptions]; - switch(travel.startOptions) - { - case CampaignStartOptions::NONE: - break; - case CampaignStartOptions::START_BONUS: - { - node["playerColor"].String() = PlayerColor::encode(travel.playerColor); - for(auto & bonus : travel.bonusesToChoose) - { - JsonNode bnode; - bnode["what"].String() = vstd::reverseMap(bonusTypeMap)[bonus.type]; - switch (bonus.type) - { - case CampaignBonusType::RESOURCE: - bnode["type"].String() = vstd::reverseMap(resourceTypeMap)[bonus.info1]; - bnode["amount"].Integer() = bonus.info2; - break; - case CampaignBonusType::BUILDING: - bnode["type"].String() = EBuildingType::names[bonus.info1]; - break; - default: - if(vstd::contains(vstd::reverseMap(heroSpecialMap), bonus.info1)) - bnode["hero"].String() = vstd::reverseMap(heroSpecialMap)[bonus.info1]; - else - bnode["hero"].String() = HeroTypeID::encode(bonus.info1); - bnode["amount"].Integer() = bonus.info3; - switch(bonus.type) - { - case CampaignBonusType::SPELL: - bnode["type"].String() = SpellID::encode(bonus.info2); - break; - case CampaignBonusType::MONSTER: - bnode["type"].String() = CreatureID::encode(bonus.info2); - break; - case CampaignBonusType::SECONDARY_SKILL: - bnode["type"].String() = SecondarySkill::encode(bonus.info2); - break; - case CampaignBonusType::ARTIFACT: - bnode["type"].String() = ArtifactID::encode(bonus.info2); - break; - case CampaignBonusType::SPELL_SCROLL: - bnode["type"].String() = SpellID::encode(bonus.info2); - break; - case CampaignBonusType::PRIMARY_SKILL: - for(auto & ps : primarySkillsMap) - bnode[ps.first].Integer() = (bonus.info2 >> ps.second) & 0xff; - break; - default: - bnode["type"].Integer() = bonus.info2; - } - break; - } - node["bonuses"].Vector().push_back(bnode); - } - break; - } - case CampaignStartOptions::HERO_CROSSOVER: - { - for(auto & bonus : travel.bonusesToChoose) - { - JsonNode bnode; - bnode["playerColor"].Integer() = bonus.info1; - bnode["scenario"].Integer() = bonus.info2; - node["bonuses"].Vector().push_back(bnode); - } - break; - } - case CampaignStartOptions::HERO_OPTIONS: - { - for(auto & bonus : travel.bonusesToChoose) - { - JsonNode bnode; - bnode["playerColor"].Integer() = bonus.info1; + if (travel.playerColor.isValidPlayer()) + node["playerColor"].String() = PlayerColor::encode(travel.playerColor.getNum()); - if(vstd::contains(vstd::reverseMap(heroSpecialMap), bonus.info2)) - bnode["hero"].String() = vstd::reverseMap(heroSpecialMap)[bonus.info2]; - else - bnode["hero"].String() = HeroTypeID::encode(bonus.info2); - - node["bonuses"].Vector().push_back(bnode); - } - break; - } - } + for (const auto & bonus : travel.bonusesToChoose) + node["bonuses"].Vector().push_back(bonus.toJson()); } -void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader & reader, std::string filename, std::string modName, std::string encoding ) +void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader & reader, const std::string & filename, const std::string & modName, const std::string & encoding ) { ret.version = static_cast(reader.readUInt32()); if (ret.version == CampaignVersion::HotA) { - [[maybe_unused]] int32_t unknownA = reader.readInt32(); - [[maybe_unused]] int32_t unknownB = reader.readInt32(); - [[maybe_unused]] int32_t unknownC = reader.readInt8(); + int32_t formatVersion = reader.readInt32(); + + if (formatVersion == 2) + { + int hotaVersionMajor = reader.readUInt32(); + int hotaVersionMinor = reader.readUInt32(); + int hotaVersionPatch = reader.readUInt32(); + logGlobal->trace("Loading HotA campaign, version %d.%d.%d", hotaVersionMajor, hotaVersionMinor, hotaVersionPatch); + + bool forceMatchingVersion = reader.readBool(); + if (forceMatchingVersion) + logGlobal->warn("Map '%s': This map is forced to use specific hota version!", filename); + } + + [[maybe_unused]] int32_t unknownB = reader.readInt8(); + [[maybe_unused]] int32_t unknownC = reader.readInt32(); ret.numberOfScenarios = reader.readInt32(); - assert(unknownA == 1); assert(unknownB == 1); assert(unknownC == 0); assert(ret.numberOfScenarios <= 8); - - // TODO. Or they are hardcoded in this hota version? - // ret.campaignRegions = ???; } - ui8 campId = reader.readUInt8() - 1;//change range of it from [1, 20] to [0, 19] - if(ret.version < CampaignVersion::Chr) // For chronicles: Will be overridden later; Chronicles uses own logic (reusing OH3 ID's) - ret.loadLegacyData(campId); + const auto & mapping = LIBRARY->mapFormat->getMapping(ret.version); + + CampaignRegionID campaignMapId(reader.readUInt8()); + if(ret.version != CampaignVersion::Chr) + { + ret.campaignRegions = *LIBRARY->campaignRegions->getByIndex(mapping.remap(campaignMapId)); + if(ret.version != CampaignVersion::HotA) + ret.numberOfScenarios = ret.campaignRegions.regionsCount(); + } ret.name.appendTextID(readLocalizedString(ret, reader, filename, modName, encoding, "name")); ret.description.appendTextID(readLocalizedString(ret, reader, filename, modName, encoding, "description")); ret.author.appendRawString(""); @@ -580,7 +382,8 @@ void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader else ret.difficultyChosenByPlayer = false; - ret.music = prologMusicName(reader.readInt8()); + ret.music = mapping.remapCampaignMusic(reader.readUInt8()); + logGlobal->trace("Campaign %s: map %d (%d scenarios), music theme: %s", filename, campaignMapId.getNum(), ret.numberOfScenarios, ret.music.getOriginalName()); ret.filename = filename; ret.modName = modName; ret.encoding = encoding; @@ -588,18 +391,17 @@ void CampaignHandler::readHeaderFromMemory( CampaignHeader & ret, CBinaryReader CampaignScenario CampaignHandler::readScenarioFromMemory( CBinaryReader & reader, CampaignHeader & header) { + const auto & mapping = LIBRARY->mapFormat->getMapping(header.version); + auto prologEpilogReader = [&](const std::string & identifier) -> CampaignScenarioPrologEpilog { CampaignScenarioPrologEpilog ret; ret.hasPrologEpilog = reader.readBool(); if(ret.hasPrologEpilog) { - bool isOriginalCampaign = boost::starts_with(header.getFilename(), "DATA/"); - - ui8 index = reader.readUInt8(); - ret.prologVideo = CampaignHandler::prologVideoName(index); - ret.prologMusic = CampaignHandler::prologMusicName(reader.readUInt8()); - ret.prologVoice = isOriginalCampaign ? CampaignHandler::prologVoiceName(index) : AudioPath(); + ret.prologVideo = mapping.remapCampaignVideo(reader.readUInt8()); + ret.prologMusic = mapping.remapCampaignMusic(reader.readUInt8()); + logGlobal->trace("Campaign %s, scenario %s: music theme: %s, video: %s", header.filename, identifier, ret.prologMusic.getOriginalName(), ret.prologVideo.getOriginalName()); ret.prologText.appendTextID(readLocalizedString(header, reader, header.filename, header.modName, header.encoding, identifier)); } return ret; @@ -637,14 +439,14 @@ CampaignScenario CampaignHandler::readScenarioFromMemory( CBinaryReader & reader } template -static void readContainer(std::set & container, CBinaryReader & reader, int sizeBytes) +static void readContainer(std::set & container, CBinaryReader & reader, const MapIdentifiersH3M & remapper, int sizeBytes) { for(int iId = 0, byte = 0; iId < sizeBytes * 8; ++iId) { if(iId % 8 == 0) byte = reader.readUInt8(); if(byte & (1 << iId % 8)) - container.insert(Identifier(iId)); + container.insert(remapper.remap(Identifier(iId))); } } @@ -658,128 +460,30 @@ CampaignTravel CampaignHandler::readScenarioTravelFromMemory(CBinaryReader & rea ret.whatHeroKeeps.secondarySkills = whatHeroKeeps & 4; ret.whatHeroKeeps.spells = whatHeroKeeps & 8; ret.whatHeroKeeps.artifacts = whatHeroKeeps & 16; + + const auto & mapping = LIBRARY->mapFormat->getMapping(version); if (version == CampaignVersion::HotA) { - readContainer(ret.monstersKeptByHero, reader, 24); - readContainer(ret.artifactsKeptByHero, reader, 21); + readContainer(ret.monstersKeptByHero, reader, mapping, 24); + readContainer(ret.artifactsKeptByHero, reader, mapping, 21); } else { - readContainer(ret.monstersKeptByHero, reader, 19); - readContainer(ret.artifactsKeptByHero, reader, version < CampaignVersion::SoD ? 17 : 18); + readContainer(ret.monstersKeptByHero, reader, mapping, 19); + readContainer(ret.artifactsKeptByHero, reader, mapping, version < CampaignVersion::SoD ? 17 : 18); } ret.startOptions = static_cast(reader.readUInt8()); - switch(ret.startOptions) + if (ret.startOptions == CampaignStartOptions::START_BONUS) + ret.playerColor.setNum(reader.readUInt8()); + + if (ret.startOptions != CampaignStartOptions::NONE) { - case CampaignStartOptions::NONE: - //no bonuses. Seems to be OK - break; - case CampaignStartOptions::START_BONUS: //reading of bonuses player can choose - { - ret.playerColor.setNum(reader.readUInt8()); - ui8 numOfBonuses = reader.readUInt8(); - for (int g=0; g(reader.readUInt8()); - //hero: FFFD means 'most powerful' and FFFE means 'generated' - switch(bonus.type) - { - case CampaignBonusType::SPELL: - { - bonus.info1 = reader.readUInt16(); //hero - bonus.info2 = reader.readUInt8(); //spell ID - break; - } - case CampaignBonusType::MONSTER: - { - bonus.info1 = reader.readUInt16(); //hero - bonus.info2 = reader.readUInt16(); //monster type - bonus.info3 = reader.readUInt16(); //monster count - break; - } - case CampaignBonusType::BUILDING: - { - bonus.info1 = reader.readUInt8(); //building ID (0 - town hall, 1 - city hall, 2 - capitol, etc) - break; - } - case CampaignBonusType::ARTIFACT: - { - bonus.info1 = reader.readUInt16(); //hero - bonus.info2 = reader.readUInt16(); //artifact ID - break; - } - case CampaignBonusType::SPELL_SCROLL: - { - bonus.info1 = reader.readUInt16(); //hero - bonus.info2 = reader.readUInt8(); //spell ID - break; - } - case CampaignBonusType::PRIMARY_SKILL: - { - bonus.info1 = reader.readUInt16(); //hero - bonus.info2 = reader.readUInt32(); //bonuses (4 bytes for 4 skills) - break; - } - case CampaignBonusType::SECONDARY_SKILL: - { - bonus.info1 = reader.readUInt16(); //hero - bonus.info2 = reader.readUInt8(); //skill ID - bonus.info3 = reader.readUInt8(); //skill level - break; - } - case CampaignBonusType::RESOURCE: - { - bonus.info1 = reader.readUInt8(); //type - //FD - wood+ore - //FE - mercury+sulfur+crystal+gem - bonus.info2 = reader.readUInt32(); //count - break; - } - default: - logGlobal->warn("Corrupted h3c file"); - break; - } - ret.bonusesToChoose.push_back(bonus); - } - break; - } - case CampaignStartOptions::HERO_CROSSOVER: //reading of players (colors / scenarios ?) player can choose - { - ui8 numOfBonuses = reader.readUInt8(); - for (int g=0; gwarn("Corrupted h3c file"); - break; - } + ui8 numOfBonuses = reader.readUInt8(); + for (int g=0; g > CampaignHandler::getFile(std::unique_ptr music; - return AudioPath::builtinTODO(LIBRARY->generaltexth->translate("core.cmpmusic." + std::to_string(static_cast(index)))); -} - -AudioPath CampaignHandler::prologVoiceName(ui8 index) -{ - JsonNode config(JsonPath::builtin("CONFIG/campaignMedia")); - auto audio = config["voice"].Vector(); - if(index < audio.size()) - return AudioPath::fromJson(audio[index]); - return AudioPath(); -} - VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignHandler.h b/lib/campaign/CampaignHandler.h index bd97b2ed5..a21d8efd3 100644 --- a/lib/campaign/CampaignHandler.h +++ b/lib/campaign/CampaignHandler.h @@ -16,13 +16,13 @@ VCMI_LIB_NAMESPACE_BEGIN class DLL_LINKAGE CampaignHandler { - static std::string readLocalizedString(CampaignHeader & target, CBinaryReader & reader, std::string filename, std::string modName, std::string encoding, std::string identifier); - static std::string readLocalizedString(CampaignHeader & target, std::string text, std::string filename, std::string modName, std::string identifier); + static std::string readLocalizedString(CampaignHeader & target, CBinaryReader & reader, const std::string & filename, const std::string & modName, const std::string & encoding, const std::string & identifier); + static std::string readLocalizedString(CampaignHeader & target, const std::string & text, const std::string & filename, const std::string & modName, const std::string & identifier); - static void readCampaign(Campaign * target, const std::vector & stream, std::string filename, std::string modName, std::string encoding); + static void readCampaign(Campaign * target, const std::vector & stream, const std::string & filename, const std::string & modName, const std::string & encoding); //parsers for VCMI campaigns (*.vcmp) - static void readHeaderFromJson(CampaignHeader & target, JsonNode & reader, std::string filename, std::string modName, std::string encoding); + static void readHeaderFromJson(CampaignHeader & target, JsonNode & reader, const std::string & filename, const std::string & modName, const std::string & encoding); static CampaignScenario readScenarioFromJson(JsonNode & reader); static CampaignTravel readScenarioTravelFromJson(JsonNode & reader); @@ -30,17 +30,13 @@ class DLL_LINKAGE CampaignHandler static void writeScenarioTravelToJson(JsonNode & node, const CampaignTravel & travel); //parsers for original H3C campaigns - static void readHeaderFromMemory(CampaignHeader & target, CBinaryReader & reader, std::string filename, std::string modName, std::string encoding); + static void readHeaderFromMemory(CampaignHeader & target, CBinaryReader & reader, const std::string & filename, const std::string & modName, const std::string & encoding); static CampaignScenario readScenarioFromMemory(CBinaryReader & reader, CampaignHeader & header); static CampaignTravel readScenarioTravelFromMemory(CBinaryReader & reader, CampaignVersion version); /// returns h3c split in parts. 0 = h3c header, 1-end - maps (binary h3m) /// headerOnly - only header will be decompressed, returned vector wont have any maps static std::vector> getFile(std::unique_ptr file, const std::string & filename, bool headerOnly); - static VideoPath prologVideoName(ui8 index); - static AudioPath prologMusicName(ui8 index); - static AudioPath prologVoiceName(ui8 index); - static constexpr auto VCMP_HEADER_FILE_NAME = "header.json"; public: static std::unique_ptr getHeader( const std::string & name); //name - name of appropriate file diff --git a/lib/campaign/CampaignRegions.cpp b/lib/campaign/CampaignRegions.cpp new file mode 100644 index 000000000..b8c1b5223 --- /dev/null +++ b/lib/campaign/CampaignRegions.cpp @@ -0,0 +1,137 @@ +/* + * CampaignRegions.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#include "StdInc.h" +#include "CampaignRegions.h" + +#include "../json/JsonNode.h" + +VCMI_LIB_NAMESPACE_BEGIN + +CampaignRegions::RegionDescription::RegionDescription(const JsonNode & node) +{ + infix = node["infix"].String(); + pos = Point(static_cast(node["x"].Float()), static_cast(node["y"].Float())); + if(!node["labelPos"].isNull()) + labelPos = Point(static_cast(node["labelPos"]["x"].Float()), static_cast(node["labelPos"]["y"].Float())); + else + labelPos = std::nullopt; +} + +JsonNode CampaignRegions::RegionDescription::toJson() const +{ + JsonNode node; + node["infix"].String() = infix; + node["x"].Float() = pos.x; + node["y"].Float() = pos.y; + if(labelPos != std::nullopt) + { + node["labelPos"]["x"].Float() = (*labelPos).x; + node["labelPos"]["y"].Float() = (*labelPos).y; + } + else + node["labelPos"].clear(); + return node; +} + +CampaignRegions::CampaignRegions(const JsonNode & node) +{ + campPrefix = node["prefix"].String(); + colorSuffixLength = static_cast(node["colorSuffixLength"].Float()); + campSuffix = node["suffix"].isNull() ? std::vector() : std::vector{node["suffix"].Vector()[0].String(), node["suffix"].Vector()[1].String(), node["suffix"].Vector()[2].String()}; + campBackground = node["background"].isNull() ? "" : node["background"].String(); + + for(const JsonNode & desc : node["desc"].Vector()) + regions.push_back(CampaignRegions::RegionDescription(desc)); +} + +JsonNode CampaignRegions::toJson() const +{ + JsonNode node; + node["prefix"].String() = campPrefix; + node["colorSuffixLength"].Float() = colorSuffixLength; + if(campSuffix.empty()) + node["suffix"].clear(); + else + node["suffix"].Vector() = JsonVector{ JsonNode(campSuffix[0]), JsonNode(campSuffix[1]), JsonNode(campSuffix[2]) }; + if(campBackground.empty()) + node["background"].clear(); + else + node["background"].String() = campBackground; + node["desc"].Vector() = JsonVector(); + for(const auto & region : regions) + node["desc"].Vector().push_back(region.toJson()); + return node; +} + +ImagePath CampaignRegions::getBackgroundName() const +{ + if(campBackground.empty()) + return ImagePath::builtin(campPrefix + "_BG.BMP"); + else + return ImagePath::builtin(campBackground); +} + +Point CampaignRegions::getPosition(CampaignScenarioID which) const +{ + const auto & region = regions[which.getNum()]; + return region.pos; +} + +std::optional CampaignRegions::getLabelPosition(CampaignScenarioID which) const +{ + const auto & region = regions[which.getNum()]; + return region.labelPos; +} + +ImagePath CampaignRegions::getNameFor(CampaignScenarioID which, int colorIndex, const std::string & type) const +{ + const auto & region = regions[which.getNum()]; + + static const std::array, 3> colors = {{ + { "", "", "", "", "", "", "", "" }, + { "R", "B", "N", "G", "O", "V", "T", "P" }, + { "Re", "Bl", "Br", "Gr", "Or", "Vi", "Te", "Pi" } + }}; + + std::string color = colors[colorSuffixLength][colorIndex]; + + return ImagePath::builtin(campPrefix + region.infix + "_" + type + color + ".BMP"); +} + +ImagePath CampaignRegions::getAvailableName(CampaignScenarioID which, int color) const +{ + if(campSuffix.empty()) + return getNameFor(which, color, "En"); + else + return getNameFor(which, color, campSuffix[0]); +} + +ImagePath CampaignRegions::getSelectedName(CampaignScenarioID which, int color) const +{ + if(campSuffix.empty()) + return getNameFor(which, color, "Se"); + else + return getNameFor(which, color, campSuffix[1]); +} + +ImagePath CampaignRegions::getConqueredName(CampaignScenarioID which, int color) const +{ + if(campSuffix.empty()) + return getNameFor(which, color, "Co"); + else + return getNameFor(which, color, campSuffix[2]); +} + +int CampaignRegions::regionsCount() const +{ + return regions.size(); +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignRegions.h b/lib/campaign/CampaignRegions.h new file mode 100644 index 000000000..4adb1b15d --- /dev/null +++ b/lib/campaign/CampaignRegions.h @@ -0,0 +1,80 @@ +/* + * CampaignRegions.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#pragma once + +#include "../Point.h" +#include "../filesystem/ResourcePath.h" +#include "../constants/EntityIdentifiers.h" + +VCMI_LIB_NAMESPACE_BEGIN + +class DLL_LINKAGE CampaignRegions +{ + // Campaign editor + friend class CampaignEditor; + friend class CampaignProperties; + friend class ScenarioProperties; + + /// Shared prefix for all campaign images + std::string campPrefix; + /// Suffix for enabled/selected/completed campaign region maps + std::vector campSuffix; + /// Custom background name for campaign + std::string campBackground; + /// Lookup scheme for colored campaign images location + int colorSuffixLength = 0; + + struct DLL_LINKAGE RegionDescription + { + std::string infix; + Point pos; + std::optional labelPos; + + template void serialize(Handler &h) + { + h & infix; + h & pos; + h & labelPos; + } + + RegionDescription() = default; + explicit RegionDescription(const JsonNode & node); + JsonNode toJson() const; + }; + + std::vector regions; + + ImagePath getNameFor(CampaignScenarioID which, int color, const std::string & type) const; + +public: + CampaignRegions() = default; + explicit CampaignRegions(const JsonNode & node); + + ImagePath getBackgroundName() const; + Point getPosition(CampaignScenarioID which) const; + std::optional getLabelPosition(CampaignScenarioID which) const; + ImagePath getAvailableName(CampaignScenarioID which, int color) const; + ImagePath getSelectedName(CampaignScenarioID which, int color) const; + ImagePath getConqueredName(CampaignScenarioID which, int color) const; + int regionsCount() const; + + template void serialize(Handler &h) + { + h & campPrefix; + h & colorSuffixLength; + h & regions; + h & campSuffix; + h & campBackground; + } + + JsonNode toJson() const; +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignRegionsHandler.cpp b/lib/campaign/CampaignRegionsHandler.cpp new file mode 100644 index 000000000..695585bcc --- /dev/null +++ b/lib/campaign/CampaignRegionsHandler.cpp @@ -0,0 +1,34 @@ +/* + * CampaignRegionsHandler.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#include "StdInc.h" +#include "CampaignRegionsHandler.h" + +#include "../json/JsonNode.h" + +VCMI_LIB_NAMESPACE_BEGIN + +std::vector CampaignRegionsHandler::loadLegacyData() +{ + return {}; +} + +void CampaignRegionsHandler::loadObject(std::string scope, std::string name, const JsonNode & data) +{ + auto object = std::make_shared(data); + registerObject(scope, "campaignRegion", name, objects.size()); + objects.push_back(object); +} + +void CampaignRegionsHandler::loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) +{ + throw std::runtime_error("CampaignRegionsHandler::loadObject - load by index is not supported!"); +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignRegionsHandler.h b/lib/campaign/CampaignRegionsHandler.h new file mode 100644 index 000000000..49450e14f --- /dev/null +++ b/lib/campaign/CampaignRegionsHandler.h @@ -0,0 +1,38 @@ +/* + * CampaignRegionsHandler.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ +#pragma once + +#include "CampaignRegions.h" + +#include "../IHandlerBase.h" + +VCMI_LIB_NAMESPACE_BEGIN + +/// Managed campaign region sets - "map" of campaign locations, with selectable scenarios +/// Used only for .h3c campaigns. .vmap's embed campaign regions layout in its format +class DLL_LINKAGE CampaignRegionsHandler : public IHandlerBase +{ +public: + std::vector loadLegacyData() override; + + /// loads single object into game. Scope is namespace of this object, same as name of source mod + void loadObject(std::string scope, std::string name, const JsonNode & data) override; + void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override; + + const CampaignRegions * getByIndex(int index) const + { + return objects.at(index).get(); + } + +private: + std::vector> objects; +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignScenarioPrologEpilog.h b/lib/campaign/CampaignScenarioPrologEpilog.h index 17dc1c506..a93a1c722 100644 --- a/lib/campaign/CampaignScenarioPrologEpilog.h +++ b/lib/campaign/CampaignScenarioPrologEpilog.h @@ -18,7 +18,7 @@ struct DLL_LINKAGE CampaignScenarioPrologEpilog { bool hasPrologEpilog = false; VideoPath prologVideo; - AudioPath prologMusic; // from CmpMusic.txt + AudioPath prologMusic; AudioPath prologVoice; MetaString prologText; diff --git a/lib/campaign/CampaignState.cpp b/lib/campaign/CampaignState.cpp index 9ac8f4bc8..88c7a659a 100644 --- a/lib/campaign/CampaignState.cpp +++ b/lib/campaign/CampaignState.cpp @@ -17,6 +17,7 @@ #include "../mapping/CMapService.h" #include "../mapping/CMapInfo.h" #include "../mapping/CMap.h" +#include "../mapping/MapFormatSettings.h" #include "../mapObjects/CGHeroInstance.h" #include "../serializer/JsonDeserializer.h" #include "../serializer/JsonSerializer.h" @@ -33,170 +34,14 @@ void CampaignScenario::loadPreconditionRegions(ui32 regions) } } -CampaignRegions::RegionDescription CampaignRegions::RegionDescription::fromJson(const JsonNode & node) -{ - CampaignRegions::RegionDescription rd; - rd.infix = node["infix"].String(); - rd.pos = Point(static_cast(node["x"].Float()), static_cast(node["y"].Float())); - if(!node["labelPos"].isNull()) - rd.labelPos = Point(static_cast(node["labelPos"]["x"].Float()), static_cast(node["labelPos"]["y"].Float())); - else - rd.labelPos = std::nullopt; - return rd; -} - -JsonNode CampaignRegions::RegionDescription::toJson(CampaignRegions::RegionDescription & rd) -{ - JsonNode node; - node["infix"].String() = rd.infix; - node["x"].Float() = rd.pos.x; - node["y"].Float() = rd.pos.y; - if(rd.labelPos != std::nullopt) - { - node["labelPos"]["x"].Float() = (*rd.labelPos).x; - node["labelPos"]["y"].Float() = (*rd.labelPos).y; - } - else - node["labelPos"].clear(); - return node; -} - -CampaignRegions CampaignRegions::fromJson(const JsonNode & node) -{ - CampaignRegions cr; - cr.campPrefix = node["prefix"].String(); - cr.colorSuffixLength = static_cast(node["colorSuffixLength"].Float()); - cr.campSuffix = node["suffix"].isNull() ? std::vector() : std::vector{node["suffix"].Vector()[0].String(), node["suffix"].Vector()[1].String(), node["suffix"].Vector()[2].String()}; - cr.campBackground = node["background"].isNull() ? "" : node["background"].String(); - - for(const JsonNode & desc : node["desc"].Vector()) - cr.regions.push_back(CampaignRegions::RegionDescription::fromJson(desc)); - - return cr; -} - -JsonNode CampaignRegions::toJson(CampaignRegions cr) -{ - JsonNode node; - node["prefix"].String() = cr.campPrefix; - node["colorSuffixLength"].Float() = cr.colorSuffixLength; - if(!cr.campSuffix.size()) - node["suffix"].clear(); - else - node["suffix"].Vector() = JsonVector{ JsonNode(cr.campSuffix[0]), JsonNode(cr.campSuffix[1]), JsonNode(cr.campSuffix[2]) }; - if(cr.campBackground.empty()) - node["background"].clear(); - else - node["background"].String() = cr.campBackground; - node["desc"].Vector() = JsonVector(); - for(auto & region : cr.regions) - node["desc"].Vector().push_back(CampaignRegions::RegionDescription::toJson(region)); - return node; -} - -CampaignRegions CampaignRegions::getLegacy(int campId) -{ - static std::vector campDescriptions; - if(campDescriptions.empty()) //read once - { - const JsonNode config(JsonPath::builtin("config/campaign_regions.json")); - for(const JsonNode & campaign : config["campaign_regions"].Vector()) - campDescriptions.push_back(CampaignRegions::fromJson(campaign)); - } - - return campDescriptions.at(campId); -} - -ImagePath CampaignRegions::getBackgroundName() const -{ - if(campBackground.empty()) - return ImagePath::builtin(campPrefix + "_BG.BMP"); - else - return ImagePath::builtin(campBackground); -} - -Point CampaignRegions::getPosition(CampaignScenarioID which) const -{ - auto const & region = regions[which.getNum()]; - return region.pos; -} - -std::optional CampaignRegions::getLabelPosition(CampaignScenarioID which) const -{ - auto const & region = regions[which.getNum()]; - return region.labelPos; -} - -ImagePath CampaignRegions::getNameFor(CampaignScenarioID which, int colorIndex, std::string type) const -{ - auto const & region = regions[which.getNum()]; - - static const std::array, 3> colors = {{ - { "", "", "", "", "", "", "", "" }, - { "R", "B", "N", "G", "O", "V", "T", "P" }, - { "Re", "Bl", "Br", "Gr", "Or", "Vi", "Te", "Pi" } - }}; - - std::string color = colors[colorSuffixLength][colorIndex]; - - return ImagePath::builtin(campPrefix + region.infix + "_" + type + color + ".BMP"); -} - -ImagePath CampaignRegions::getAvailableName(CampaignScenarioID which, int color) const -{ - if(campSuffix.empty()) - return getNameFor(which, color, "En"); - else - return getNameFor(which, color, campSuffix[0]); -} - -ImagePath CampaignRegions::getSelectedName(CampaignScenarioID which, int color) const -{ - if(campSuffix.empty()) - return getNameFor(which, color, "Se"); - else - return getNameFor(which, color, campSuffix[1]); -} - -ImagePath CampaignRegions::getConqueredName(CampaignScenarioID which, int color) const -{ - if(campSuffix.empty()) - return getNameFor(which, color, "Co"); - else - return getNameFor(which, color, campSuffix[2]); -} - - -bool CampaignBonus::isBonusForHero() const -{ - return type == CampaignBonusType::SPELL || - type == CampaignBonusType::MONSTER || - type == CampaignBonusType::ARTIFACT || - type == CampaignBonusType::SPELL_SCROLL || - type == CampaignBonusType::PRIMARY_SKILL || - type == CampaignBonusType::SECONDARY_SKILL; -} - -void CampaignHeader::loadLegacyData(ui8 campId) -{ - campaignRegions = CampaignRegions::getLegacy(campId); - numberOfScenarios = LIBRARY->generaltexth->getCampaignLength(campId); -} - -void CampaignHeader::loadLegacyData(CampaignRegions regions, int numOfScenario) -{ - campaignRegions = regions; - numberOfScenarios = numOfScenario; -} - bool CampaignHeader::playerSelectedDifficulty() const { return difficultyChosenByPlayer; } -bool CampaignHeader::formatVCMI() const +CampaignVersion CampaignHeader::getFormat() const { - return version == CampaignVersion::VCMI; + return version; } std::string CampaignHeader::getDescriptionTranslated() const @@ -373,7 +218,7 @@ void CampaignState::setCurrentMapAsConquered(std::vector heroe { boost::range::sort(heroes, [](const CGHeroInstance * a, const CGHeroInstance * b) { - return a->getValueForCampaign() > b->getValueForCampaign(); + return CGHeroInstance::compareCampaignValue(a, b); }); logGlobal->info("Scenario %d of campaign %s (%s) has been completed", currentMap->getNum(), getFilename(), getNameTranslated()); @@ -533,43 +378,45 @@ std::set Campaign::allScenarios() const void Campaign::overrideCampaign() { - const JsonNode node = JsonUtils::assembleFromFiles("config/campaignOverrides.json"); - for (auto & entry : node.Struct()) - if(filename == entry.first) - { - if(!entry.second["regions"].isNull() && !entry.second["scenarioCount"].isNull()) - loadLegacyData(CampaignRegions::fromJson(entry.second["regions"]), entry.second["scenarioCount"].Integer()); - if(!entry.second["loadingBackground"].isNull()) - loadingBackground = ImagePath::builtin(entry.second["loadingBackground"].String()); - if(!entry.second["videoRim"].isNull()) - videoRim = ImagePath::builtin(entry.second["videoRim"].String()); - if(!entry.second["introVideo"].isNull()) - introVideo = VideoPath::builtin(entry.second["introVideo"].String()); - if(!entry.second["outroVideo"].isNull()) - outroVideo = VideoPath::builtin(entry.second["outroVideo"].String()); - } + const JsonNode & overrides = LIBRARY->mapFormat->campaignOverrides(filename); + + if(!overrides["regions"].isNull()) + campaignRegions = CampaignRegions(overrides["regions"]); + if (!overrides["scenarioCount"].isNull()) + numberOfScenarios = overrides["scenarioCount"].Integer(); + if(!overrides["loadingBackground"].isNull()) + loadingBackground = ImagePath::builtin(overrides["loadingBackground"].String()); + if(!overrides["videoRim"].isNull()) + videoRim = ImagePath::builtin(overrides["videoRim"].String()); + if(!overrides["introVideo"].isNull()) + introVideo = VideoPath::builtin(overrides["introVideo"].String()); + if(!overrides["outroVideo"].isNull()) + outroVideo = VideoPath::builtin(overrides["outroVideo"].String()); + if(!overrides["heroGemSorceress"].isNull()) + gemSorceressID = HeroTypeID(*LIBRARY->identifiersHandler->getIdentifier("hero", overrides["heroGemSorceress"])); + if(!overrides["heroYogWizard"].isNull()) + yogWizardID = HeroTypeID(*LIBRARY->identifiersHandler->getIdentifier("hero", overrides["heroYogWizard"])); + + restrictGarrisonsAI = overrides["restrictedGarrisonsForAI"].Bool(); } void Campaign::overrideCampaignScenarios() { - const JsonNode node = JsonUtils::assembleFromFiles("config/campaignOverrides.json"); - for (auto & entry : node.Struct()) - if(filename == entry.first) + const JsonNode & overrides = LIBRARY->mapFormat->campaignOverrides(filename); + + if(!overrides["scenarios"].isNull()) + { + auto sc = overrides["scenarios"].Vector(); + for(int i = 0; i < sc.size(); i++) { - if(!entry.second["scenarios"].isNull()) - { - auto sc = entry.second["scenarios"].Vector(); - for(int i = 0; i < sc.size(); i++) - { - auto it = scenarios.begin(); - std::advance(it, i); - if(!sc.at(i)["voiceProlog"].isNull()) - it->second.prolog.prologVoice = AudioPath::builtin(sc.at(i)["voiceProlog"].String()); - if(!sc.at(i)["voiceEpilog"].isNull()) - it->second.epilog.prologVoice = AudioPath::builtin(sc.at(i)["voiceEpilog"].String()); - } - } + auto it = scenarios.begin(); + std::advance(it, i); + if(!sc.at(i)["voiceProlog"].isNull()) + it->second.prolog.prologVoice = AudioPath::builtin(sc.at(i)["voiceProlog"].String()); + if(!sc.at(i)["voiceEpilog"].isNull()) + it->second.epilog.prologVoice = AudioPath::builtin(sc.at(i)["voiceEpilog"].String()); } + } } int Campaign::scenariosCount() const @@ -590,4 +437,17 @@ bool CampaignState::isCampaignFinished() const return conqueredScenarios() == allScenarios(); } +HeroTypeID CampaignHeader::getYogWizardID() const +{ + return yogWizardID; +} +HeroTypeID CampaignHeader::getGemSorceressID() const +{ + return gemSorceressID; +} +bool CampaignHeader::restrictedGarrisonsForAI() const +{ + return restrictGarrisonsAI; +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/campaign/CampaignState.h b/lib/campaign/CampaignState.h index a01a5f720..e627862fc 100644 --- a/lib/campaign/CampaignState.h +++ b/lib/campaign/CampaignState.h @@ -9,14 +9,14 @@ */ #pragma once -#include "../GameConstants.h" +#include "CampaignBonus.h" +#include "CampaignRegions.h" +#include "CampaignScenarioPrologEpilog.h" + #include "../filesystem/ResourcePath.h" +#include "../gameState/HighScore.h" #include "../serializer/Serializeable.h" #include "../texts/TextLocalizationContainer.h" -#include "CampaignConstants.h" -#include "CampaignScenarioPrologEpilog.h" -#include "../gameState/HighScore.h" -#include "../Point.h" VCMI_LIB_NAMESPACE_BEGIN @@ -30,61 +30,6 @@ class CMapInfo; class JsonNode; class IGameInfoCallback; -class DLL_LINKAGE CampaignRegions -{ - // Campaign editor - friend class CampaignEditor; - friend class CampaignProperties; - friend class ScenarioProperties; - - std::string campPrefix; - std::vector campSuffix; - std::string campBackground; - int colorSuffixLength; - - struct DLL_LINKAGE RegionDescription - { - std::string infix; - Point pos; - std::optional labelPos; - - template void serialize(Handler &h) - { - h & infix; - h & pos; - h & labelPos; - } - - static CampaignRegions::RegionDescription fromJson(const JsonNode & node); - static JsonNode toJson(CampaignRegions::RegionDescription & rd); - }; - - std::vector regions; - - ImagePath getNameFor(CampaignScenarioID which, int color, std::string type) const; - -public: - ImagePath getBackgroundName() const; - Point getPosition(CampaignScenarioID which) const; - std::optional getLabelPosition(CampaignScenarioID which) const; - ImagePath getAvailableName(CampaignScenarioID which, int color) const; - ImagePath getSelectedName(CampaignScenarioID which, int color) const; - ImagePath getConqueredName(CampaignScenarioID which, int color) const; - - template void serialize(Handler &h) - { - h & campPrefix; - h & colorSuffixLength; - h & regions; - h & campSuffix; - h & campBackground; - } - - static CampaignRegions fromJson(const JsonNode & node); - static JsonNode toJson(CampaignRegions cr); - static CampaignRegions getLegacy(int campId); -}; - class DLL_LINKAGE CampaignHeader : public boost::noncopyable { friend class CampaignHandler; @@ -112,17 +57,17 @@ class DLL_LINKAGE CampaignHeader : public boost::noncopyable VideoPath introVideo; VideoPath outroVideo; + HeroTypeID yogWizardID; + HeroTypeID gemSorceressID; + int numberOfScenarios = 0; bool difficultyChosenByPlayer = false; - - void loadLegacyData(ui8 campId); - void loadLegacyData(CampaignRegions regions, int numOfScenario); + bool restrictGarrisonsAI = false; TextContainerRegistrable textContainer; - public: bool playerSelectedDifficulty() const; - bool formatVCMI() const; + CampaignVersion getFormat() const; std::string getDescriptionTranslated() const; std::string getNameTranslated() const; @@ -139,6 +84,10 @@ public: VideoPath getIntroVideo() const; VideoPath getOutroVideo() const; + HeroTypeID getYogWizardID() const; + HeroTypeID getGemSorceressID() const; + bool restrictedGarrisonsForAI() const; + const CampaignRegions & getRegions() const; TextContainerRegistrable & getTexts(); @@ -154,6 +103,8 @@ public: h & campaignVersion; h & creationDateTime; h & difficultyChosenByPlayer; + if (h.hasFeature(Handler::Version::CAMPAIGN_BONUSES)) + h & restrictGarrisonsAI; h & filename; h & modName; h & music; @@ -163,26 +114,11 @@ public: h & videoRim; h & introVideo; h & outroVideo; - } -}; - -struct DLL_LINKAGE CampaignBonus -{ - CampaignBonusType type = CampaignBonusType::NONE; - - //purpose depends on type - int32_t info1 = 0; - int32_t info2 = 0; - int32_t info3 = 0; - - bool isBonusForHero() const; - - template void serialize(Handler &h) - { - h & type; - h & info1; - h & info2; - h & info3; + if (h.hasFeature(Handler::Version::CAMPAIGN_BONUSES)) + { + h & yogWizardID; + h & gemSorceressID; + } } }; @@ -221,7 +157,30 @@ struct DLL_LINKAGE CampaignTravel h & artifactsKeptByHero; h & startOptions; h & playerColor; - h & bonusesToChoose; + if (h.hasFeature(Handler::Version::CAMPAIGN_BONUSES)) + { + h & bonusesToChoose; + } + else + { + struct OldBonus{ + CampaignBonusType type = {}; + int32_t info1 = 0; + int32_t info2 = 0; + int32_t info3 = 0; + + void serialize(Handler &h) + { + h & type; + h & info1; + h & info2; + h & info3; + } + }; + + std::vector oldBonuses; + h & oldBonuses; + } } }; diff --git a/lib/constants/EntityIdentifiers.cpp b/lib/constants/EntityIdentifiers.cpp index 9ed3e4132..d246da948 100644 --- a/lib/constants/EntityIdentifiers.cpp +++ b/lib/constants/EntityIdentifiers.cpp @@ -29,9 +29,10 @@ #include "modding/IdentifierStorage.h" #include "modding/ModScope.h" #include "GameLibrary.h" -#include "CCreatureHandler.h"//todo: remove -#include "spells/CSpellHandler.h" //todo: remove -#include "CSkillHandler.h"//todo: remove +#include "CCreatureHandler.h" +#include "spells/CSpellHandler.h" +#include "spells/SpellSchoolHandler.h" +#include "CSkillHandler.h" #include "entities/artifact/CArtifact.h" #include "entities/faction/CFaction.h" #include "entities/hero/CHero.h" @@ -39,7 +40,7 @@ #include "mapObjectConstructors/AObjectTypeHandler.h" #include "constants/StringConstants.h" #include "texts/CGeneralTextHandler.h" -#include "TerrainHandler.h" //TODO: remove +#include "TerrainHandler.h" #include "RiverHandler.h" #include "RoadHandler.h" #include "BattleFieldHandler.h" @@ -54,11 +55,9 @@ const QueryID QueryID::NONE(-1); const QueryID QueryID::CLIENT(-2); const HeroTypeID HeroTypeID::NONE(-1); const HeroTypeID HeroTypeID::RANDOM(-2); -const HeroTypeID HeroTypeID::GEM(27); -const HeroTypeID HeroTypeID::SOLMYR(45); -const HeroTypeID HeroTypeID::CAMP_STRONGEST(0xFFFD); -const HeroTypeID HeroTypeID::CAMP_GENERATED(0xFFFE); -const HeroTypeID HeroTypeID::CAMP_RANDOM(0xFFFF); +const HeroTypeID HeroTypeID::CAMP_STRONGEST(-3); +const HeroTypeID HeroTypeID::CAMP_GENERATED(-2); +const HeroTypeID HeroTypeID::CAMP_RANDOM(-1); const ObjectInstanceID ObjectInstanceID::NONE(-1); @@ -77,8 +76,8 @@ const TeamID TeamID::NO_TEAM(-1); const SpellSchool SpellSchool::ANY(-1); const SpellSchool SpellSchool::AIR(0); const SpellSchool SpellSchool::FIRE(1); -const SpellSchool SpellSchool::WATER(2); -const SpellSchool SpellSchool::EARTH(3); +const SpellSchool SpellSchool::EARTH(2); +const SpellSchool SpellSchool::WATER(3); const FactionID FactionID::NONE(-2); const FactionID FactionID::DEFAULT(-1); @@ -257,6 +256,8 @@ si32 HeroTypeID::decode(const std::string & identifier) { if (identifier == "random") return -2; + if (identifier == "strongest") + return -3; return resolveIdentifier("hero", identifier); } @@ -266,6 +267,8 @@ std::string HeroTypeID::encode(const si32 index) return ""; if (index == -2) return "random"; + if (index == -3) + return "strongest"; return LIBRARY->heroTypes()->getByIndex(index)->getJsonKey(); } @@ -595,7 +598,7 @@ std::string SpellSchool::encode(const si32 index) if (index == ANY.getNum()) return "any"; - return SpellConfig::SCHOOL[index].jsonName; + return LIBRARY->spellSchoolHandler->getById(SpellSchool(index))->getJsonKey(); } std::string SpellSchool::entityType() diff --git a/lib/constants/EntityIdentifiers.h b/lib/constants/EntityIdentifiers.h index 713496fa1..a2794cbf4 100644 --- a/lib/constants/EntityIdentifiers.h +++ b/lib/constants/EntityIdentifiers.h @@ -115,9 +115,6 @@ public: static const HeroTypeID NONE; static const HeroTypeID RANDOM; - static const HeroTypeID GEM; // aka Gem, Sorceress in campaign - static const HeroTypeID SOLMYR; // aka Young Yog in campaigns - static const HeroTypeID CAMP_STRONGEST; static const HeroTypeID CAMP_GENERATED; static const HeroTypeID CAMP_RANDOM; @@ -745,7 +742,7 @@ public: CREATURE_SLOT = 0, // Commander - COMMANDER1 = 0, COMMANDER2, COMMANDER3, COMMANDER4, COMMANDER5, COMMANDER6, + COMMANDER1 = 0, COMMANDER2, COMMANDER3, COMMANDER4, COMMANDER5, COMMANDER6, COMMANDER7, COMMANDER8, COMMANDER9, // Altar ALTAR = BACKPACK_START @@ -816,11 +813,8 @@ public: IMP = 42, // for Deity of Fire FAMILIAR = 43, // for Deity of Fire SKELETON = 56, // for Skeleton Transformer - BONE_DRAGON = 68, // for Skeleton Transformer TROGLODYTES = 70, // for Abandoned Mine MEDUSA = 76, // for Siege UI workaround - HYDRA = 110, // for Skeleton Transformer - CHAOS_HYDRA = 111, // for Skeleton Transformer AIR_ELEMENTAL = 112, // for tests FIRE_ELEMENTAL = 114, // for tests PSYCHIC_ELEMENTAL = 120, // for hardcoded ability @@ -1068,9 +1062,9 @@ public: MITHRIL, COUNT, - WOOD_AND_ORE = 127, // special case for town bonus resource - COMMON = 0xFD, // campaign bonus - RARE = 0xFE, // campaign bonus + WOOD_AND_ORE = -4, // special case for town bonus resource + COMMON = -3, // campaign bonus + RARE = -2, // campaign bonus NONE = -1 }; }; @@ -1125,6 +1119,13 @@ public: static const CampaignScenarioID NONE; }; +class DLL_LINKAGE CampaignRegionID : public StaticIdentifier +{ +public: + using StaticIdentifier::StaticIdentifier; +}; + + // Deprecated // TODO: remove using Obj = MapObjectID; diff --git a/lib/constants/NumericConstants.h b/lib/constants/NumericConstants.h index 9ca09409d..09c408a6d 100644 --- a/lib/constants/NumericConstants.h +++ b/lib/constants/NumericConstants.h @@ -25,7 +25,6 @@ namespace GameConstants constexpr int CREATURES_PER_TOWN = 8; //without upgrades constexpr int SPELL_LEVELS = 5; constexpr int SPELL_SCHOOL_LEVELS = 4; - constexpr int DEFAULT_SCHOOLS = 4; constexpr int CRE_LEVELS = 10; // number of creature experience levels constexpr int HERO_GOLD_COST = 2500; @@ -53,6 +52,8 @@ namespace GameConstants constexpr int TOURNAMENT_RULES_DD_MAP_TILES_THRESHOLD = 144*144*2; //map tiles count threshold for 2 dimension door casts with tournament rules constexpr int KINGDOM_WINDOW_HEROES_SLOTS = 4; constexpr int INFO_WINDOW_ARTIFACTS_MAX_ITEMS = 14; + + constexpr int FULL_MAP_RANGE = std::numeric_limits::max(); } VCMI_LIB_NAMESPACE_END diff --git a/lib/constants/StringConstants.h b/lib/constants/StringConstants.h index 955460a8f..200cd4e8a 100644 --- a/lib/constants/StringConstants.h +++ b/lib/constants/StringConstants.h @@ -99,7 +99,7 @@ namespace NArtifactPosition inline constexpr std::array namesCommander = { - "commander1", "commander2", "commander3", "commander4", "commander5", "commander6", + "commander1", "commander2", "commander3", "commander4", "commander5", "commander6", "commander7", "commander8", "commander9" }; diff --git a/lib/entities/artifact/ArtifactUtils.cpp b/lib/entities/artifact/ArtifactUtils.cpp index 945e08fd1..8b783ce7c 100644 --- a/lib/entities/artifact/ArtifactUtils.cpp +++ b/lib/entities/artifact/ArtifactUtils.cpp @@ -148,7 +148,10 @@ DLL_LINKAGE const std::vector & ArtifactUtils::commanderSlots( ArtifactPosition::COMMANDER3, ArtifactPosition::COMMANDER4, ArtifactPosition::COMMANDER5, - ArtifactPosition::COMMANDER6 + ArtifactPosition::COMMANDER6, + ArtifactPosition::COMMANDER7, + ArtifactPosition::COMMANDER8, + ArtifactPosition::COMMANDER9 }; return positions; diff --git a/lib/entities/artifact/CArtHandler.cpp b/lib/entities/artifact/CArtHandler.cpp index 8fbaf924d..31495f19a 100644 --- a/lib/entities/artifact/CArtHandler.cpp +++ b/lib/entities/artifact/CArtHandler.cpp @@ -142,15 +142,10 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, if(!node["growing"].isNull()) { for(auto bonus : node["growing"]["bonusesPerLevel"].Vector()) - { - art->bonusesPerLevel.emplace_back(static_cast(bonus["level"].Float()), Bonus()); - JsonUtils::parseBonus(bonus["bonus"], &art->bonusesPerLevel.back().second); - } + art->bonusesPerLevel.emplace_back(static_cast(bonus["level"].Float()), JsonUtils::parseBonus(bonus["bonus"])); + for(auto bonus : node["growing"]["thresholdBonuses"].Vector()) - { - art->thresholdBonuses.emplace_back(static_cast(bonus["level"].Float()), Bonus()); - JsonUtils::parseBonus(bonus["bonus"], &art->thresholdBonuses.back().second); - } + art->thresholdBonuses.emplace_back(static_cast(bonus["level"].Float()), JsonUtils::parseBonus(bonus["bonus"])); } art->id = ArtifactID(index); @@ -166,10 +161,10 @@ std::shared_ptr CArtHandler::loadFromJson(const std::string & scope, const JsonNode & graphics = node["graphics"]; art->image = graphics["image"].String(); - if(!graphics["large"].isNull()) - art->large = graphics["large"].String(); + if(!graphics["scenarioBonus"].isNull()) + art->scenarioBonus = graphics["scenarioBonus"].String(); else - art->large = art->image; + art->scenarioBonus = art->image; // MOD COMPATIBILITY fallback for pre-1.7 mods art->advMapDef = graphics["map"].String(); diff --git a/lib/entities/artifact/CArtifact.cpp b/lib/entities/artifact/CArtifact.cpp index 465480a1b..cd33ea4fc 100644 --- a/lib/entities/artifact/CArtifact.cpp +++ b/lib/entities/artifact/CArtifact.cpp @@ -59,22 +59,22 @@ bool CGrowingArtifact::isGrowing() const return !bonusesPerLevel.empty() || !thresholdBonuses.empty(); } -std::vector > & CGrowingArtifact::getBonusesPerLevel() +std::vector >> & CGrowingArtifact::getBonusesPerLevel() { return bonusesPerLevel; } -const std::vector > & CGrowingArtifact::getBonusesPerLevel() const +const std::vector >> & CGrowingArtifact::getBonusesPerLevel() const { return bonusesPerLevel; } -std::vector > & CGrowingArtifact::getThresholdBonuses() +std::vector >> & CGrowingArtifact::getThresholdBonuses() { return thresholdBonuses; } -const std::vector > & CGrowingArtifact::getThresholdBonuses() const +const std::vector >> & CGrowingArtifact::getThresholdBonuses() const { return thresholdBonuses; } @@ -102,7 +102,6 @@ std::string CArtifact::getModScope() const void CArtifact::registerIcons(const IconRegistar & cb) const { cb(getIconIndex(), 0, "ARTIFACT", image); - cb(getIconIndex(), 0, "ARTIFACTLARGE", large); } ArtifactID CArtifact::getId() const @@ -359,7 +358,7 @@ void CArtifact::setImage(int32_t newIconIndex, const std::string & newImage, con { iconIndex = newIconIndex; image = newImage; - large = newLargeImage; + scenarioBonus = newLargeImage; } diff --git a/lib/entities/artifact/CArtifact.h b/lib/entities/artifact/CArtifact.h index 374272e1d..2c9e5d46f 100644 --- a/lib/entities/artifact/CArtifact.h +++ b/lib/entities/artifact/CArtifact.h @@ -54,15 +54,15 @@ class DLL_LINKAGE CGrowingArtifact protected: CGrowingArtifact() = default; - std::vector> bonusesPerLevel; // Bonus given each n levels - std::vector> thresholdBonuses; // After certain level they will be added once + std::vector>> bonusesPerLevel; // Bonus given each n levels + std::vector>> thresholdBonuses; // After certain level they will be added once public: bool isGrowing() const; - std::vector> & getBonusesPerLevel(); - const std::vector> & getBonusesPerLevel() const; - std::vector> & getThresholdBonuses(); - const std::vector> & getThresholdBonuses() const; + std::vector>> & getBonusesPerLevel(); + const std::vector>> & getBonusesPerLevel() const; + std::vector>> & getThresholdBonuses(); + const std::vector>> & getThresholdBonuses() const; }; class DLL_LINKAGE CChargedArtifact @@ -91,7 +91,6 @@ class DLL_LINKAGE CArtifact final : public Artifact, public CBonusSystemNode, { ArtifactID id; std::string image; - std::string large; // big image for custom artifacts, used in drag & drop std::string advMapDef; // used for adventure map object std::string modScope; std::string identifier; @@ -105,6 +104,8 @@ public: /// Bonuses that are created for each instance of artifact std::vector> instanceBonuses; + std::string scenarioBonus; + EArtifactClass aClass = EArtifactClass::ART_SPECIAL; bool onlyOnWaterMap; diff --git a/lib/entities/artifact/CArtifactInstance.cpp b/lib/entities/artifact/CArtifactInstance.cpp index 2177ae693..3d0e124c3 100644 --- a/lib/entities/artifact/CArtifactInstance.cpp +++ b/lib/entities/artifact/CArtifactInstance.cpp @@ -109,7 +109,7 @@ void CGrowingArtifactInstance::growingUp() // Every n levels if(artInst->valOfBonuses(BonusType::ARTIFACT_GROWING) % bonus.first == 0) { - artInst->accumulateBonus(std::make_shared(bonus.second)); + artInst->accumulateBonus(std::make_shared(*bonus.second)); } } for(const auto & bonus : artType->getThresholdBonuses()) @@ -117,7 +117,7 @@ void CGrowingArtifactInstance::growingUp() // At n level if(artInst->valOfBonuses(BonusType::ARTIFACT_GROWING) == bonus.first) { - artInst->addNewBonus(std::make_shared(bonus.second)); + artInst->addNewBonus(std::make_shared(*bonus.second)); } } @@ -131,6 +131,9 @@ void CChargedArtifactInstance::onChargesChanged() auto artInst = static_cast(this); const auto artType = artInst->getType(); + if(!artType->isCharged()) + return; + const auto bonusSelector = artType->getDischargeCondition() == DischargeArtifactCondition::SPELLCAST ? Selector::type()(BonusType::SPELL) : Selector::all; diff --git a/lib/entities/building/CBuilding.cpp b/lib/entities/building/CBuilding.cpp index e4cb68869..60ce227a7 100644 --- a/lib/entities/building/CBuilding.cpp +++ b/lib/entities/building/CBuilding.cpp @@ -25,14 +25,6 @@ const std::map CBuilding::MODES = { "grail", CBuilding::BUILD_GRAIL } }; -const std::map CBuilding::TOWER_TYPES = - { - { "low", CBuilding::HEIGHT_LOW }, - { "average", CBuilding::HEIGHT_AVERAGE }, - { "high", CBuilding::HEIGHT_HIGH }, - { "skyship", CBuilding::HEIGHT_SKYSHIP } -}; - BuildingTypeUniqueID CBuilding::getUniqueTypeID() const { return BuildingTypeUniqueID(town->faction->getId(), bid); diff --git a/lib/entities/building/CBuilding.h b/lib/entities/building/CBuilding.h index ed8a71f3b..7656d8543 100644 --- a/lib/entities/building/CBuilding.h +++ b/lib/entities/building/CBuilding.h @@ -15,6 +15,7 @@ #include "../../LogicalExpression.h" #include "../../ResourceSet.h" #include "../../bonuses/BonusList.h" +#include "../../networkPacks/TradeItem.h" #include "../../rewardable/Info.h" VCMI_LIB_NAMESPACE_BEGIN @@ -39,6 +40,7 @@ public: ArtifactID warMachine; TownFortifications fortifications; std::set marketModes; + std::vector marketOffer; BuildingID bid; //structure ID BuildingID upgrade; /// indicates that building "upgrade" can be improved by this, -1 = empty @@ -58,17 +60,7 @@ public: BUILD_GRAIL // 3 - grail - building requires grail to be built } mode; - enum ETowerHeight // for lookup towers and some grails - { - HEIGHT_NO_TOWER = 5, // building has not 'lookout tower' ability - HEIGHT_LOW = 10, // low lookout tower, but castle without lookout tower gives radius 5 - HEIGHT_AVERAGE = 15, - HEIGHT_HIGH = 20, // such tower is in the Tower town - HEIGHT_SKYSHIP = std::numeric_limits::max() // grail, open entire map - } height; - static const std::map MODES; - static const std::map TOWER_TYPES; CBuilding() : town(nullptr), mode(BUILD_NORMAL) {}; diff --git a/lib/entities/building/CBuildingHandler.cpp b/lib/entities/building/CBuildingHandler.cpp deleted file mode 100644 index 0c8600f85..000000000 --- a/lib/entities/building/CBuildingHandler.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * CBuildingHandler.cpp, part of VCMI engine - * - * Authors: listed in file AUTHORS in main folder - * - * License: GNU General Public License v2.0 or later - * Full text of license available in license.txt file, in main folder - * - */ -#include "StdInc.h" -#include "CBuildingHandler.h" -#include "GameLibrary.h" -#include "../faction/CTown.h" -#include "../faction/CTownHandler.h" - -VCMI_LIB_NAMESPACE_BEGIN - -BuildingID CBuildingHandler::campToERMU(int camp, FactionID townType, const std::set & builtBuildings) -{ - static const std::vector campToERMU = - { - BuildingID::TOWN_HALL, BuildingID::CITY_HALL, - BuildingID::CAPITOL, BuildingID::FORT, BuildingID::CITADEL, BuildingID::CASTLE, BuildingID::TAVERN, - BuildingID::BLACKSMITH, BuildingID::MARKETPLACE, BuildingID::RESOURCE_SILO, BuildingID::NONE, - BuildingID::MAGES_GUILD_1, BuildingID::MAGES_GUILD_2, BuildingID::MAGES_GUILD_3, BuildingID::MAGES_GUILD_4, - BuildingID::MAGES_GUILD_5, - BuildingID::SHIPYARD, BuildingID::GRAIL, - BuildingID::SPECIAL_1, BuildingID::SPECIAL_2, BuildingID::SPECIAL_3, BuildingID::SPECIAL_4 - }; //creature generators with banks - handled separately - - if (camp < campToERMU.size()) - { - return campToERMU[camp]; - } - - static const std::vector hordeLvlsPerTType[GameConstants::F_NUMBER] = - { - {2}, {1}, {1,4}, {0,2}, {0}, {0}, {0}, {0}, {0} - }; - - int curPos = static_cast(campToERMU.size()); - for (int i=0; i<(*LIBRARY->townh)[townType]->town->creatures.size(); ++i) - { - if(camp == curPos) //non-upgraded - return BuildingID(30 + i); - curPos++; - if(camp == curPos) //upgraded - return BuildingID(37 + i); - curPos++; - - if (i < 5) // last two levels don't have reserved horde ID. Yet another H3C weirdeness - { - if (vstd::contains(hordeLvlsPerTType[townType.getNum()], i)) - { - if (camp == curPos) - { - if (hordeLvlsPerTType[townType.getNum()][0] == i) - { - BuildingID dwellingID(BuildingID::getDwellingFromLevel(hordeLvlsPerTType[townType.getNum()][0], 1)); - - if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built - return BuildingID::HORDE_1_UPGR; - else //upgraded dwelling not presents - return BuildingID::HORDE_1; - } - else - { - if(hordeLvlsPerTType[townType.getNum()].size() > 1) - { - BuildingID dwellingID(BuildingID::getDwellingFromLevel(hordeLvlsPerTType[townType.getNum()][1], 1)); - - if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built - return BuildingID::HORDE_2_UPGR; - else //upgraded dwelling not presents - return BuildingID::HORDE_2; - } - } - } - } - curPos++; - } - } - assert(0); - return BuildingID::NONE; //not found -} - -VCMI_LIB_NAMESPACE_END diff --git a/lib/entities/building/CBuildingHandler.h b/lib/entities/building/CBuildingHandler.h deleted file mode 100644 index c2b777312..000000000 --- a/lib/entities/building/CBuildingHandler.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * CBuildingHandler.h, part of VCMI engine - * - * Authors: listed in file AUTHORS in main folder - * - * License: GNU General Public License v2.0 or later - * Full text of license available in license.txt file, in main folder - * - */ -#pragma once - -#include "../../constants/EntityIdentifiers.h" - -VCMI_LIB_NAMESPACE_BEGIN - -class DLL_LINKAGE CBuildingHandler -{ -public: - static BuildingID campToERMU(int camp, FactionID townType, const std::set & builtBuildings); -}; - -VCMI_LIB_NAMESPACE_END diff --git a/lib/entities/faction/CTown.h b/lib/entities/faction/CTown.h index b48087703..cf772bd84 100644 --- a/lib/entities/faction/CTown.h +++ b/lib/entities/faction/CTown.h @@ -31,6 +31,7 @@ struct DLL_LINKAGE CStructure int3 pos; AnimationPath defName; ImagePath borderName; + ImagePath campaignBonus; ImagePath areaName; std::string identifier; diff --git a/lib/entities/faction/CTownHandler.cpp b/lib/entities/faction/CTownHandler.cpp index b07442b95..cb5649c24 100644 --- a/lib/entities/faction/CTownHandler.cpp +++ b/lib/entities/faction/CTownHandler.cpp @@ -283,8 +283,6 @@ void CTownHandler::loadBuilding(CTown * town, const std::string & stringID, cons ? CBuilding::BUILD_GRAIL : vstd::find_or(CBuilding::MODES, source["mode"].String(), CBuilding::BUILD_NORMAL); - ret->height = vstd::find_or(CBuilding::TOWER_TYPES, source["height"].String(), CBuilding::HEIGHT_NO_TOWER); - ret->identifier = stringID; ret->modScope = source.getModScope(); ret->town = town; @@ -386,7 +384,23 @@ void CTownHandler::loadBuilding(CTown * town, const std::string & stringID, cons for(const auto & element : source["marketModes"].Vector()) { if(MappedKeys::MARKET_NAMES_TO_TYPES.count(element.String())) - ret->marketModes.insert(MappedKeys::MARKET_NAMES_TO_TYPES.at(element.String())); + { + auto mode = MappedKeys::MARKET_NAMES_TO_TYPES.at(element.String()); + ret->marketModes.insert(mode); + + if (mode == EMarketMode::RESOURCE_SKILL) + { + const auto & items = source["marketOffer"].Vector(); + ret->marketOffer.resize(items.size()); + for (int i = 0; i < items.size(); ++i) + { + LIBRARY->identifiers()->requestIdentifier("secondarySkill", items[i], [ret, i](si32 identifier) + { + ret->marketOffer[i] = SecondarySkill(identifier); + }); + } + } + } } registerObject(source.getModScope(), ret->town->getBuildingScope(), ret->identifier, ret->bid.getNum()); @@ -436,6 +450,7 @@ void CTownHandler::loadStructure(CTown &town, const std::string & stringID, cons ret->hiddenUpgrade = source["hidden"].Bool(); ret->defName = AnimationPath::fromJson(source["animation"]); ret->borderName = ImagePath::fromJson(source["border"]); + ret->campaignBonus = ImagePath::fromJson(source["campaignBonus"]); ret->areaName = ImagePath::fromJson(source["area"]); town.clientInfo.structures.emplace_back(ret); diff --git a/lib/entities/hero/CHeroHandler.cpp b/lib/entities/hero/CHeroHandler.cpp index 968549b1d..444e7ee92 100644 --- a/lib/entities/hero/CHeroHandler.cpp +++ b/lib/entities/hero/CHeroHandler.cpp @@ -140,13 +140,22 @@ void CHeroHandler::loadHeroSkills(CHero * hero, const JsonNode & node) const } } -/// creates standard H3 hero specialty for creatures -std::vector> CHeroHandler::createCreatureSpecialty(CreatureID cid) const +std::vector> CHeroHandler::createCreatureSpecialty(CreatureID cid, int fixedLevel, int growthPerStep) const { std::vector> result; - const auto & specCreature = *cid.toCreature(); - int stepSize = specCreature.getLevel() ? specCreature.getLevel() : 5; + + if (fixedLevel == 0) + fixedLevel = specCreature.getLevel(); + + if (fixedLevel == 0) + { + fixedLevel = 5; + logMod->warn("Creature '%s' of level 0 has hero with generic specialty! Please specify level explicitly or give creature non-zero level", specCreature.getJsonKey()); + } + + if (growthPerStep == 0) + growthPerStep = LIBRARY->engineSettings()->getInteger(EGameSettings::HEROES_SPECIALTY_CREATURE_GROWTH); { auto bonus = std::make_shared(); @@ -156,29 +165,22 @@ std::vector> CHeroHandler::createCreatureSpecialty(Creatu result.push_back(bonus); } + for (const auto & skill : { PrimarySkill::ATTACK, PrimarySkill::DEFENSE}) { auto bonus = std::make_shared(); bonus->type = BonusType::PRIMARY_SKILL; - bonus->subtype = BonusSubtypeID(PrimarySkill::ATTACK); - bonus->val = 0; + bonus->subtype = BonusSubtypeID(skill); + bonus->val = growthPerStep; + bonus->valType = BonusValueType::PERCENT_TO_TARGET_TYPE; + bonus->targetSourceType = BonusSource::CREATURE_ABILITY; bonus->limiter.reset(new CCreatureTypeLimiter(specCreature, true)); - bonus->updater.reset(new GrowsWithLevelUpdater(specCreature.getAttack(false), stepSize)); - result.push_back(bonus); - } - - { - auto bonus = std::make_shared(); - bonus->type = BonusType::PRIMARY_SKILL; - bonus->subtype = BonusSubtypeID(PrimarySkill::DEFENSE); - bonus->val = 0; - bonus->limiter.reset(new CCreatureTypeLimiter(specCreature, true)); - bonus->updater.reset(new GrowsWithLevelUpdater(specCreature.getDefense(false), stepSize)); + bonus->updater.reset(new TimesHeroLevelUpdater(fixedLevel)); result.push_back(bonus); } return result; } -std::vector> CHeroHandler::createSecondarySkillSpecialty(SecondarySkill skillID) const +std::vector> CHeroHandler::createSecondarySkillSpecialty(SecondarySkill skillID, int growthPerStep) const { std::vector> result; const auto & skillPtr = LIBRARY->skillh->objects[skillID.getNum()]; @@ -186,8 +188,15 @@ std::vector> CHeroHandler::createSecondarySkillSpecialty( if (skillPtr->specialtyTargetBonuses.empty()) logMod->warn("Skill '%s' does not supports generic specialties!", skillPtr->getJsonKey()); + if (growthPerStep == 0) + growthPerStep = LIBRARY->engineSettings()->getInteger(EGameSettings::HEROES_SPECIALTY_SECONDARY_SKILL_GROWTH); + for (const auto & bonus : skillPtr->specialtyTargetBonuses) - result.push_back(std::make_shared(*bonus)); + { + auto bonusCopy = std::make_shared(*bonus); + bonusCopy->val = growthPerStep; + result.push_back(bonusCopy); + } return result; } @@ -236,9 +245,13 @@ void CHeroHandler::loadHeroSpecialty(CHero * hero, const JsonNode & node) const //creature specialty - alias for simplicity if(!specialtyNode["creature"].isNull()) { - LIBRARY->identifiers()->requestIdentifier("creature", specialtyNode["creature"], [this, hero, prepSpec](si32 creature) + const JsonNode & creatureNode = specialtyNode["creature"]; + int targetLevel = specialtyNode["creatureLevel"].Integer(); + int stepSize = specialtyNode["stepSize"].Integer(); + + LIBRARY->identifiers()->requestIdentifier("creature", creatureNode, [this, hero, prepSpec, targetLevel, stepSize](si32 creature) { - for (const auto & bonus : createCreatureSpecialty(CreatureID(creature))) + for (const auto & bonus : createCreatureSpecialty(CreatureID(creature), targetLevel, stepSize)) hero->specialty.push_back(prepSpec(bonus)); }); } @@ -246,9 +259,12 @@ void CHeroHandler::loadHeroSpecialty(CHero * hero, const JsonNode & node) const //secondary skill specialty - alias for simplicity if(!specialtyNode["secondary"].isNull()) { - LIBRARY->identifiers()->requestIdentifier("secondarySkill", specialtyNode["secondary"], [this, hero, prepSpec](si32 creature) + const JsonNode & skillNode = specialtyNode["secondary"]; + int stepSize = specialtyNode["stepSize"].Integer(); + + LIBRARY->identifiers()->requestIdentifier("secondarySkill", skillNode, [this, hero, prepSpec, stepSize](si32 creature) { - for (const auto & bonus : createSecondarySkillSpecialty(SecondarySkill(creature))) + for (const auto & bonus : createSecondarySkillSpecialty(SecondarySkill(creature), stepSize)) hero->specialty.push_back(prepSpec(bonus)); }); } diff --git a/lib/entities/hero/CHeroHandler.h b/lib/entities/hero/CHeroHandler.h index fa1550bf5..8591d93c6 100644 --- a/lib/entities/hero/CHeroHandler.h +++ b/lib/entities/hero/CHeroHandler.h @@ -32,8 +32,8 @@ class DLL_LINKAGE CHeroHandler : public CHandlerBase> createCreatureSpecialty(CreatureID cid) const; - std::vector> createSecondarySkillSpecialty(SecondarySkill skillID) const; + std::vector> createCreatureSpecialty(CreatureID cid, int fixedLevel, int growthPerStep) const; + std::vector> createSecondarySkillSpecialty(SecondarySkill skillID, int growthPerStep) const; public: ui32 level(TExpType experience) const; //calculates level corresponding to given experience amount diff --git a/lib/gameState/CGameState.cpp b/lib/gameState/CGameState.cpp index 327c06d37..75cc3b4dd 100644 --- a/lib/gameState/CGameState.cpp +++ b/lib/gameState/CGameState.cpp @@ -554,6 +554,7 @@ void CGameState::placeStartingHero(const PlayerColor & playerColor, const HeroTy hero = std::dynamic_pointer_cast(object); hero->ID = Obj::HERO; hero->setHeroType(heroTypeId); + assert(hero->appearance != nullptr); } hero->tempOwner = playerColor; @@ -787,12 +788,6 @@ void CGameState::initTowns(vstd::RNG & randomGenerator) if (campaign) campaign->initTowns(); - map->townUniversitySkills.clear(); - map->townUniversitySkills.push_back(SecondarySkill(SecondarySkill::FIRE_MAGIC)); - map->townUniversitySkills.push_back(SecondarySkill(SecondarySkill::AIR_MAGIC)); - map->townUniversitySkills.push_back(SecondarySkill(SecondarySkill::WATER_MAGIC)); - map->townUniversitySkills.push_back(SecondarySkill(SecondarySkill::EARTH_MAGIC)); - for (const auto & townID : map->getAllTowns()) { auto vti = getTown(townID); diff --git a/lib/gameState/CGameStateCampaign.cpp b/lib/gameState/CGameStateCampaign.cpp index ee1b43321..4e7e5ed93 100644 --- a/lib/gameState/CGameStateCampaign.cpp +++ b/lib/gameState/CGameStateCampaign.cpp @@ -17,7 +17,6 @@ #include "../entities/artifact/ArtifactUtils.h" #include "../entities/artifact/CArtifact.h" #include "../entities/building/CBuilding.h" -#include "../entities/building/CBuildingHandler.h" #include "../entities/hero/CHeroClass.h" #include "../entities/hero/CHero.h" #include "../mapping/CMapEditManager.h" @@ -29,6 +28,7 @@ #include "../StartInfo.h" #include "../mapping/CMap.h" #include "../CPlayerState.h" +#include "mapping/MapFormatSettings.h" #include #include @@ -66,8 +66,8 @@ std::optional CGameStateCampaign::getHeroesSourceScenario() auto campaignState = gameState->scenarioOps->campState; auto bonus = currentBonus(); - if(bonus && bonus->type == CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO) - return static_cast(bonus->info2); + if(bonus && bonus->getType() == CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO) + return bonus->getValue().scenario; return campaignState->lastScenario(); } @@ -211,17 +211,18 @@ void CGameStateCampaign::trimCrossoverHeroesParameters(vstd::RNG & randomGenerat void CGameStateCampaign::placeCampaignHeroes(vstd::RNG & randomGenerator) { // place bonus hero - auto campaignState = gameState->scenarioOps->campState; - auto campaignBonus = campaignState->getBonus(*campaignState->currentScenario()); - bool campaignGiveHero = campaignBonus && campaignBonus->type == CampaignBonusType::HERO; + const auto & campaignState = gameState->scenarioOps->campState; + const auto & campaignBonus = campaignState->getBonus(*campaignState->currentScenario()); + bool campaignGiveHero = campaignBonus && campaignBonus->getType() == CampaignBonusType::HERO; if(campaignGiveHero) { - auto playerColor = PlayerColor(campaignBonus->info1); - auto it = gameState->scenarioOps->playerInfos.find(playerColor); + const auto & campaignBonusValue = campaignBonus->getValue(); + const auto & playerColor = campaignBonusValue.startingPlayer; + const auto & it = gameState->scenarioOps->playerInfos.find(playerColor); if(it != gameState->scenarioOps->playerInfos.end()) { - HeroTypeID heroTypeId = HeroTypeID(campaignBonus->info2); + HeroTypeID heroTypeId = campaignBonusValue.hero; if(heroTypeId == HeroTypeID::CAMP_RANDOM) // random bonus hero { heroTypeId = gameState->pickUnusedHeroTypeRandomly(randomGenerator, playerColor); @@ -309,20 +310,22 @@ void CGameStateCampaign::giveCampaignBonusToHero(CGHeroInstance * hero) assert(curBonus->isBonusForHero()); //apply bonus - switch(curBonus->type) + switch(curBonus->getType()) { case CampaignBonusType::SPELL: { - hero->addSpellToSpellbook(SpellID(curBonus->info2)); + const auto & bonusValue = curBonus->getValue(); + hero->addSpellToSpellbook(bonusValue.spell); break; } case CampaignBonusType::MONSTER: { + const auto & bonusValue = curBonus->getValue(); for(int i = 0; i < GameConstants::ARMY_SIZE; i++) { if(hero->slotEmpty(SlotID(i))) { - hero->addToSlot(SlotID(i), CreatureID(curBonus->info2), curBonus->info3); + hero->addToSlot(SlotID(i), bonusValue.creature, bonusValue.amount); break; } } @@ -330,13 +333,15 @@ void CGameStateCampaign::giveCampaignBonusToHero(CGHeroInstance * hero) } case CampaignBonusType::ARTIFACT: { - if(!gameState->giveHeroArtifact(hero, static_cast(curBonus->info2))) + const auto & bonusValue = curBonus->getValue(); + if(!gameState->giveHeroArtifact(hero, bonusValue.artifact)) logGlobal->error("Cannot give starting artifact - no free slots!"); break; } case CampaignBonusType::SPELL_SCROLL: { - const auto scroll = gameState->createScroll(SpellID(curBonus->info2)); + const auto & bonusValue = curBonus->getValue(); + const auto scroll = gameState->createScroll(bonusValue.spell); const auto slot = ArtifactUtils::getArtAnyPosition(hero, scroll->getTypeId()); if(ArtifactUtils::isSlotEquipment(slot) || ArtifactUtils::isSlotBackpack(slot)) gameState->map->putArtifactInstance(*hero, scroll->getId(), slot); @@ -346,10 +351,10 @@ void CGameStateCampaign::giveCampaignBonusToHero(CGHeroInstance * hero) } case CampaignBonusType::PRIMARY_SKILL: { - const ui8 * ptr = reinterpret_cast(&curBonus->info2); + const auto & bonusValue = curBonus->getValue(); for(auto skill : PrimarySkill::ALL_SKILLS()) { - int val = ptr[skill.getNum()]; + int val = bonusValue.amounts[skill.getNum()]; if(val == 0) continue; @@ -361,7 +366,8 @@ void CGameStateCampaign::giveCampaignBonusToHero(CGHeroInstance * hero) } case CampaignBonusType::SECONDARY_SKILL: { - hero->setSecSkillLevel(SecondarySkill(curBonus->info2), curBonus->info3, ChangeValueMode::ABSOLUTE); + const auto & bonusValue = curBonus->getValue(); + hero->setSecSkillLevel(bonusValue.skill, bonusValue.mastery, ChangeValueMode::ABSOLUTE); break; } } @@ -526,7 +532,7 @@ void CGameStateCampaign::generateCampaignHeroesToReplace() void CGameStateCampaign::initHeroes() { auto chosenBonus = currentBonus(); - if (chosenBonus && chosenBonus->isBonusForHero() && chosenBonus->info1 != HeroTypeID::CAMP_GENERATED.getNum()) //exclude generated heroes + if (chosenBonus && chosenBonus->isBonusForHero() && chosenBonus->getTargetedHero() != HeroTypeID::CAMP_GENERATED.getNum()) //exclude generated heroes { //find human player PlayerColor humanPlayer=PlayerColor::NEUTRAL; @@ -542,12 +548,12 @@ void CGameStateCampaign::initHeroes() const auto & heroes = gameState->players.at(humanPlayer).getHeroes(); - if (chosenBonus->info1 == HeroTypeID::CAMP_STRONGEST.getNum()) //most powerful + if (chosenBonus->getTargetedHero() == HeroTypeID::CAMP_STRONGEST.getNum()) //most powerful { int maxB = -1; for (int b=0; bgetValueForCampaign() > heroes[maxB]->getValueForCampaign()) + if(maxB == -1 || CGHeroInstance::compareCampaignValue(heroes[b], heroes[maxB])) { maxB = b; } @@ -561,7 +567,7 @@ void CGameStateCampaign::initHeroes() { for (auto & hero : heroes) { - if (hero->getHeroTypeID().getNum() == chosenBonus->info1) + if (hero->getHeroTypeID().getNum() == chosenBonus->getTargetedHero()) { giveCampaignBonusToHero(hero); break; @@ -571,9 +577,10 @@ void CGameStateCampaign::initHeroes() } auto campaignState = gameState->scenarioOps->campState; - auto * yog = gameState->getUsedHero(HeroTypeID::SOLMYR); - if (yog && boost::starts_with(campaignState->getFilename(), "DATA/YOG") && campaignState->currentScenario()->getNum() == 2) + if (campaignState->getYogWizardID().hasValue() && boost::starts_with(campaignState->getFilename(), "DATA/YOG") && campaignState->currentScenario()->getNum() == 2) { + auto * yog = gameState->getUsedHero(campaignState->getYogWizardID()); + assert(yog); assert(yog->isCampaignYog()); gameState->giveHeroArtifact(yog, ArtifactID::ANGELIC_ALLIANCE); } @@ -595,18 +602,17 @@ void CGameStateCampaign::initStartingResources() return ret; }; - auto chosenBonus = currentBonus(); - if(chosenBonus && chosenBonus->type == CampaignBonusType::RESOURCE) + const auto & chosenBonus = currentBonus(); + if(chosenBonus && chosenBonus->getType() == CampaignBonusType::RESOURCE) { + const auto & bonusValue = chosenBonus->getValue(); + std::vector people = getHumanPlayerInfo(); //players we will give resource bonus for(const PlayerSettings *ps : people) { std::vector res; //resources we will give - switch (chosenBonus->info1) + switch (bonusValue.resource.toEnum()) { - case 0: case 1: case 2: case 3: case 4: case 5: case 6: - res.push_back(chosenBonus->info1); - break; case EGameResID::COMMON: //wood+ore res.push_back(GameResID(EGameResID::WOOD)); res.push_back(GameResID(EGameResID::ORE)); @@ -618,14 +624,12 @@ void CGameStateCampaign::initStartingResources() res.push_back(GameResID(EGameResID::GEMS)); break; default: - assert(0); + res.push_back(bonusValue.resource); break; } - //increasing resource quantity + for (auto & re : res) - { - gameState->players.at(ps->color).resources[re] += chosenBonus->info2; - } + gameState->players.at(ps->color).resources[re] += bonusValue.amount; } } } @@ -637,9 +641,11 @@ void CGameStateCampaign::initTowns() if (!chosenBonus) return; - if (chosenBonus->type != CampaignBonusType::BUILDING) + if (chosenBonus->getType() != CampaignBonusType::BUILDING) return; + const auto & bonusValue = chosenBonus->getValue(); + for (const auto & townID : gameState->map->getAllTowns()) { auto town = gameState->getTown(townID); @@ -656,11 +662,13 @@ void CGameStateCampaign::initTowns() if (town->anchorPos() != pi.posOfMainTown) continue; - BuildingID newBuilding; - if(gameState->scenarioOps->campState->formatVCMI()) - newBuilding = BuildingID(chosenBonus->info1); - else - newBuilding = CBuildingHandler::campToERMU(chosenBonus->info1, town->getFactionID(), town->getBuildings()); + BuildingID newBuilding = bonusValue.buildingDecoded; + + if (bonusValue.buildingH3M.hasValue()) + { + auto mapping = LIBRARY->mapFormat->getMapping(gameState->scenarioOps->campState->getFormat()); + newBuilding = mapping.remapBuilding(town->getFactionID(), bonusValue.buildingH3M); + } // Build granted building & all prerequisites - e.g. Mages Guild Lvl 3 should also give Mages Guild Lvl 1 & 2 while(true) @@ -687,7 +695,7 @@ bool CGameStateCampaign::playerHasStartingHero(PlayerColor playerColor) const if (!campaignBonus) return false; - if(campaignBonus->type == CampaignBonusType::HERO && playerColor == PlayerColor(campaignBonus->info1)) + if(campaignBonus->getType() == CampaignBonusType::HERO && playerColor == PlayerColor(campaignBonus->getValue().startingPlayer)) return true; return false; } diff --git a/lib/gameState/CGameStateCampaign.h b/lib/gameState/CGameStateCampaign.h index 4f99d7925..b57769aa4 100644 --- a/lib/gameState/CGameStateCampaign.h +++ b/lib/gameState/CGameStateCampaign.h @@ -15,7 +15,7 @@ VCMI_LIB_NAMESPACE_BEGIN -struct CampaignBonus; +class CampaignBonus; struct CampaignTravel; class CGHeroInstance; class CGameState; diff --git a/lib/gameState/GameStatePackVisitor.cpp b/lib/gameState/GameStatePackVisitor.cpp index 09bc761b6..ee71eaee5 100644 --- a/lib/gameState/GameStatePackVisitor.cpp +++ b/lib/gameState/GameStatePackVisitor.cpp @@ -385,7 +385,6 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack) auto beatenHero = dynamic_cast(obj); assert(beatenHero); - auto * siegeNode = beatenHero->whereShouldBeAttachedOnSiege(gs); vstd::erase_if(beatenHero->artifactsInBackpack, [](const ArtSlotInfo& asi) { return asi.getArt()->getTypeId() == ArtifactID::GRAIL; @@ -400,14 +399,6 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack) beatenHero->setVisitedTown(nullptr, false); } - beatenHero->detachFromBonusSystem(gs); - beatenHero->tempOwner = PlayerColor::NEUTRAL; //no one owns beaten hero - - // FIXME: workaround: - // hero should be attached to siegeNode after battle - // however this code might also be called on dismissing hero while in town - if (siegeNode && vstd::contains(beatenHero->getParentNodes(), siegeNode)) - beatenHero->detachFrom(*siegeNode); //If hero on Boat is removed, the Boat disappears if(beatenHero->inBoat()) @@ -417,12 +408,13 @@ void GameStatePackVisitor::visitRemoveObject(RemoveObject & pack) gs.getMap().eraseObject(boat->id); } + beatenHero->detachFromBonusSystem(gs); + beatenHero->tempOwner = PlayerColor::NEUTRAL; //no one owns beaten hero auto beatenObject = gs.getMap().eraseObject(obj->id); //return hero to the pool, so he may reappear in tavern gs.heroesPool->addHeroToPool(beatenHero->getHeroTypeID()); gs.getMap().addToHeroPool(std::dynamic_pointer_cast(beatenObject)); - return; } @@ -1173,6 +1165,18 @@ void GameStatePackVisitor::visitBattleStart(BattleStart & pack) pack.info->battleID = gs.nextBattleID; pack.info->localInit(); + if (pack.info->getDefendedTown() && pack.info->getSideHero(BattleSide::DEFENDER)) + { + CGTownInstance * town = gs.getTown(pack.info->townID); + CGHeroInstance * hero = gs.getHero(pack.info->getSideHero(BattleSide::DEFENDER)->id); + + if (town->getVisitingHero() == hero) + { + hero->detachFrom(town->townAndVis); + hero->attachTo(*town); + } + } + gs.currentBattles.push_back(std::move(pack.info)); gs.nextBattleID = BattleID(gs.nextBattleID.getNum() + 1); } @@ -1191,7 +1195,7 @@ void GameStatePackVisitor::visitBattleTriggerEffect(BattleTriggerEffect & pack) { CStack * st = gs.getBattle(pack.battleID)->getStack(pack.stackID); assert(st); - switch(static_cast(pack.effect)) + switch(pack.effect) { case BonusType::HP_REGENERATION: { @@ -1218,11 +1222,11 @@ void GameStatePackVisitor::visitBattleTriggerEffect(BattleTriggerEffect & pack) case BonusType::ENCHANTER: case BonusType::MORALE: break; - case BonusType::FEAR: + case BonusType::FEARFUL: st->fear = true; break; default: - logNetwork->error("Unrecognized trigger effect type %d", pack.effect); + logNetwork->error("Unrecognized trigger effect type %d", static_cast(pack.effect)); } } @@ -1232,17 +1236,6 @@ void GameStatePackVisitor::visitBattleUpdateGateState(BattleUpdateGateState & pa gs.getBattle(pack.battleID)->si.gateState = pack.state; } -void GameStatePackVisitor::visitBattleCancelled(BattleCancelled & pack) -{ - auto currentBattle = boost::range::find_if(gs.currentBattles, [&](const auto & battle) - { - return battle->battleID == pack.battleID; - }); - - assert(currentBattle != gs.currentBattles.end()); - gs.currentBattles.erase(currentBattle); -} - void GameStatePackVisitor::visitBattleResultAccepted(BattleResultAccepted & pack) { // Remove any "until next battle" bonuses @@ -1348,8 +1341,44 @@ void GameStatePackVisitor::visitBattleUnitsChanged(BattleUnitsChanged & pack) pack.visitTyped(battleVisitor); } +void GameStatePackVisitor::restorePreBattleState(BattleID battleID) +{ + auto battleIter = boost::range::find_if(gs.currentBattles, [&](const auto & battle) + { + return battle->battleID == battleID; + }); + + const auto & currentBattle = **battleIter; + + if (currentBattle.getDefendedTown() && currentBattle.getSideHero(BattleSide::DEFENDER)) + { + CGTownInstance * town = gs.getTown(currentBattle.townID); + CGHeroInstance * hero = gs.getHero(currentBattle.getSideHero(BattleSide::DEFENDER)->id); + + if (town->getVisitingHero() == hero) + { + hero->detachFrom(*town); + hero->attachTo(town->townAndVis); + } + } +} + +void GameStatePackVisitor::visitBattleCancelled(BattleCancelled & pack) +{ + restorePreBattleState(pack.battleID); + + auto battleIter = boost::range::find_if(gs.currentBattles, [&](const auto & battle) + { + return battle->battleID == pack.battleID; + }); + + assert(battleIter != gs.currentBattles.end()); + gs.currentBattles.erase(battleIter); +} + void GameStatePackVisitor::visitBattleResultsApplied(BattleResultsApplied & pack) { + restorePreBattleState(pack.battleID); pack.learnedSpells.visit(*this); for(auto & discharging : pack.dischargingArtifacts) diff --git a/lib/gameState/GameStatePackVisitor.h b/lib/gameState/GameStatePackVisitor.h index 8a5890453..da6707d2b 100644 --- a/lib/gameState/GameStatePackVisitor.h +++ b/lib/gameState/GameStatePackVisitor.h @@ -17,6 +17,7 @@ class CGameState; class GameStatePackVisitor final : public ICPackVisitor { + void restorePreBattleState(BattleID battleID); private: CGameState & gs; diff --git a/lib/json/JsonBonus.cpp b/lib/json/JsonBonus.cpp index 4d77f1fa9..2ace906b6 100644 --- a/lib/json/JsonBonus.cpp +++ b/lib/json/JsonBonus.cpp @@ -15,10 +15,10 @@ #include "../texts/CGeneralTextHandler.h" #include "../GameLibrary.h" -#include "../bonuses/BonusParams.h" #include "../bonuses/Limiters.h" #include "../bonuses/Propagators.h" #include "../bonuses/Updaters.h" +#include "../CBonusTypeHandler.h" #include "../constants/StringConstants.h" #include "../modding/IdentifierStorage.h" @@ -115,6 +115,7 @@ static void loadBonusSubtype(BonusSubtypeID & subtype, BonusType type, const Jso case BonusType::HATE: case BonusType::SUMMON_GUARDIANS: case BonusType::MANUAL_CONTROL: + case BonusType::SKELETON_TRANSFORMER_TARGET: { LIBRARY->identifiers()->requestIdentifier( "creature", node, [&subtype](int32_t identifier) { @@ -185,14 +186,14 @@ static void loadBonusSubtype(BonusSubtypeID & subtype, BonusType type, const Jso break; } default: - for(const auto & i : bonusNameMap) - if(i.second == type) - logMod->warn("Bonus type %s does not supports subtypes!", i.first ); + { + logMod->warn("Bonus type %s does not supports subtypes!", LIBRARY->bth->bonusToString(type)); subtype = BonusSubtypeID(); + } } } -static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & node) +static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & value) { const auto & getFirstValue = [](const JsonNode & jsonNode) -> const JsonNode & { @@ -202,7 +203,6 @@ static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & no return jsonNode; }; - const JsonNode & value = node["addInfo"]; if (value.isNull()) return; @@ -220,6 +220,10 @@ static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & no case BonusType::PRIMARY_SKILL: case BonusType::ENCHANTER: case BonusType::SPECIAL_PECULIAR_ENCHANT: + case BonusType::SPELL_IMMUNITY: + case BonusType::DARKNESS: + case BonusType::FULL_MAP_SCOUTING: + case BonusType::FULL_MAP_DARKNESS: // 1 number var = getFirstValue(value).Integer(); break; @@ -235,10 +239,17 @@ static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & no case BonusType::SPELL_BEFORE_ATTACK: case BonusType::SPELL_AFTER_ATTACK: // 3 numbers - var.resize(3); - var[0] = value[0].Integer(); - var[1] = value[1].Integer(); - var[2] = value[2].Integer(); + if (value.isNumber()) + { + var = getFirstValue(value).Integer(); + } + else + { + var.resize(3); + var[0] = value[0].Integer(); + var[1] = value[1].Integer(); + var[2] = value[2].Integer(); + } break; case BonusType::MULTIHEX_UNIT_ATTACK: case BonusType::MULTIHEX_ENEMY_ATTACK: @@ -259,10 +270,7 @@ static void loadBonusAddInfo(CAddInfo & var, BonusType type, const JsonNode & no } break; default: - for(const auto & i : bonusNameMap) - if(i.second == type) - logMod->warn("Bonus type %s does not supports addInfo!", i.first ); - + logMod->warn("Bonus type %s does not supports addInfo!", LIBRARY->bth->bonusToString(type) ); } } @@ -370,33 +378,6 @@ static void loadBonusSourceInstance(BonusSourceID & sourceInstance, BonusSource } } -static BonusParams convertDeprecatedBonus(const JsonNode &ability) -{ - if(vstd::contains(deprecatedBonusSet, ability["type"].String())) - { - logMod->warn("There is deprecated bonus found:\n%s\nTrying to convert...", ability.toString()); - auto params = BonusParams(ability["type"].String(), - ability["subtype"].isString() ? ability["subtype"].String() : "", - ability["subtype"].isNumber() ? ability["subtype"].Integer() : -1); - if(params.isConverted) - { - if(ability["type"].String() == "SECONDARY_SKILL_PREMY" && bonusValueMap.find(ability["valueType"].String())->second == BonusValueType::PERCENT_TO_BASE) //assume secondary skill special - { - params.valueType = BonusValueType::PERCENT_TO_TARGET_TYPE; - params.targetType = BonusSource::SECONDARY_SKILL; - } - - logMod->warn("Please, use this bonus:\n%s\nConverted successfully!", params.toJson().toString()); - return params; - } - else - logMod->error("Cannot convert bonus!\n%s", ability.toString()); - } - BonusParams ret; - ret.isConverted = false; - return ret; -} - static TUpdaterPtr parseUpdater(const JsonNode & updaterJson) { const std::map> bonusUpdaterMap = @@ -422,12 +403,29 @@ static TUpdaterPtr parseUpdater(const JsonNode & updaterJson) case JsonNode::JsonType::DATA_STRUCT: if(updaterJson["type"].String() == "GROWS_WITH_LEVEL") { - auto updater = std::make_shared(); - const JsonVector param = updaterJson["parameters"].Vector(); - updater->valPer20 = static_cast(param[0].Integer()); - if(param.size() > 1) - updater->stepSize = static_cast(param[1].Integer()); - return updater; + // MOD COMPATIBILITY - parameters is deprecated in 1.7 + const JsonNode & param = updaterJson["parameters"]; + int valPer20 = updaterJson["valPer20"].isNull() ? param[0].Integer() : updaterJson["valPer20"].Integer(); + int stepSize = updaterJson["stepSize"].isNull() ? param[1].Integer() : updaterJson["stepSize"].Integer(); + + return std::make_shared(valPer20, std::max(1, stepSize)); + } + if(updaterJson["type"].String() == "TIMES_HERO_LEVEL") + { + int stepSize = updaterJson["stepSize"].Integer(); + return std::make_shared(std::max(1, stepSize)); + } + if(updaterJson["type"].String() == "TIMES_STACK_SIZE") + { + int minimum = updaterJson["minimum"].isNull() ? std::numeric_limits::min() : updaterJson["minimum"].Integer(); + int maximum = updaterJson["maximum"].isNull() ? std::numeric_limits::max() : updaterJson["maximum"].Integer(); + int stepSize = updaterJson["stepSize"].Integer(); + if (minimum > maximum) + { + logMod->warn("TIMES_STACK_SIZE updater: minimum value (%d) is above maximum value(%d)!", minimum, maximum); + return std::make_shared(maximum, minimum, std::max(1, stepSize)); + } + return std::make_shared(minimum, maximum, std::max(1, stepSize)); } else logMod->warn("Unknown updater type \"%s\"", updaterJson["type"].String()); @@ -441,17 +439,16 @@ VCMI_LIB_NAMESPACE_BEGIN std::shared_ptr JsonUtils::parseBonus(const JsonVector & ability_vec) { auto b = std::make_shared(); - std::string type = ability_vec[0].String(); - auto it = bonusNameMap.find(type); - if (it == bonusNameMap.end()) - { - logMod->error("Error: invalid ability type %s.", type); - return b; - } - b->type = it->second; + const JsonNode & typeNode = ability_vec[0]; + const JsonNode & subtypeNode = ability_vec[2]; + + LIBRARY->identifiers()->requestIdentifier("bonus", typeNode, [b, subtypeNode](si32 bonusID) + { + b->type = static_cast(bonusID); + loadBonusSubtype(b->subtype, b->type, subtypeNode); + }); b->val = static_cast(ability_vec[1].Float()); - loadBonusSubtype(b->subtype, b->type, ability_vec[2]); b->additionalInfo = static_cast(ability_vec[3].Float()); b->duration = BonusDuration::PERMANENT; //TODO: handle flags (as integer) b->turnsRemain = 0; @@ -505,7 +502,7 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter case JsonNode::JsonType::DATA_STRUCT: //customizable limiters { std::string limiterType = limiter["type"].String(); - const JsonVector & parameters = limiter["parameters"].Vector(); + const JsonNode & parameters = limiter["parameters"]; if(limiterType == "CREATURE_TYPE_LIMITER") { auto creatureLimiter = std::make_shared(); @@ -515,7 +512,7 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter }); auto includeUpgrades = false; - if(parameters.size() > 1) + if(parameters.Vector().size() > 1) { bool success = true; includeUpgrades = parameters[1].TryBoolFromString(success); @@ -530,49 +527,37 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter { auto bonusLimiter = std::make_shared(); - if (!parameters[0].isNull()) + static const JsonNode nullNode; + const JsonNode & jsonType = parameters[0]; + const JsonNode & jsonSubtype = parameters.Vector().size() > 2 ? parameters[1] : nullNode; + const JsonNode & jsonSource = parameters.Vector().size() > 2 ? parameters[2] : parameters[1]; + + if (!jsonType.isNull()) { - std::string anotherBonusType = parameters[0].String(); - auto it = bonusNameMap.find(anotherBonusType); - if(it != bonusNameMap.end()) + LIBRARY->identifiers()->requestIdentifier("bonus", jsonType, [bonusLimiter, jsonSubtype](si32 bonusID) { - bonusLimiter->type = it->second; - } - else - { - logMod->error("Error: invalid ability type %s.", anotherBonusType); - } + bonusLimiter->type = static_cast(bonusID); + if (jsonSubtype.isNull()) + loadBonusSubtype(bonusLimiter->subtype, bonusLimiter->type, jsonSubtype); + }); } - auto findSource = [&](const JsonNode & parameter) + if(!jsonSource.isNull()) { - if(parameter.getType() == JsonNode::JsonType::DATA_STRUCT) + auto sourceIt = bonusSourceMap.find(jsonSource["type"].String()); + if(sourceIt != bonusSourceMap.end()) { - auto sourceIt = bonusSourceMap.find(parameter["type"].String()); - if(sourceIt != bonusSourceMap.end()) - { - bonusLimiter->source = sourceIt->second; - bonusLimiter->isSourceRelevant = true; - if(!parameter["id"].isNull()) { - loadBonusSourceInstance(bonusLimiter->sid, bonusLimiter->source, parameter["id"]); - bonusLimiter->isSourceIDRelevant = true; - } + bonusLimiter->source = sourceIt->second; + bonusLimiter->isSourceRelevant = true; + if(!jsonSource["id"].isNull()) { + loadBonusSourceInstance(bonusLimiter->sid, bonusLimiter->source, jsonSource["id"]); + bonusLimiter->isSourceIDRelevant = true; } } - return false; - }; - if(parameters.size() > 1) - { - if(findSource(parameters[1]) && parameters.size() == 2) - return bonusLimiter; else - { - loadBonusSubtype(bonusLimiter->subtype, bonusLimiter->type, parameters[1]); - bonusLimiter->isSubtypeRelevant = true; - if(parameters.size() > 2) - findSource(parameters[2]); - } + logMod->warn("HAS_ANOTHER_BONUS_LIMITER: unknown bonus source type '%s'!", jsonSource["type"].String()); } + return bonusLimiter; } else if(limiterType == "CREATURE_ALIGNMENT_LIMITER") @@ -595,7 +580,7 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter else if(limiterType == "CREATURE_LEVEL_LIMITER") { auto levelLimiter = std::make_shared(); - if(!parameters.empty()) //If parameters is empty, level limiter works as CREATURES_ONLY limiter + if(!parameters.Vector().empty()) //If parameters is empty, level limiter works as CREATURES_ONLY limiter { levelLimiter->minLevel = parameters[0].Integer(); if(parameters[1].isNumber()) @@ -606,7 +591,7 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter else if(limiterType == "CREATURE_TERRAIN_LIMITER") { auto terrainLimiter = std::make_shared(); - if(!parameters.empty()) + if(!parameters.Vector().empty()) { LIBRARY->identifiers()->requestIdentifier("terrain", parameters[0], [terrainLimiter](si32 terrain) { @@ -617,9 +602,9 @@ std::shared_ptr JsonUtils::parseLimiter(const JsonNode & limiter } else if(limiterType == "UNIT_ON_HEXES") { auto hexLimiter = std::make_shared(); - if(!parameters.empty()) + if(!parameters.Vector().empty()) { - for (const auto & parameter: parameters){ + for (const auto & parameter : parameters.Vector()){ if(parameter.isNumber()) hexLimiter->applicableHexes.insert(BattleHex(parameter.Integer())); } @@ -654,42 +639,29 @@ std::shared_ptr JsonUtils::parseBonus(const JsonNode &ability, const Text bool JsonUtils::parseBonus(const JsonNode &ability, Bonus *b, const TextIdentifier & descriptionID) { const JsonNode * value = nullptr; + const JsonNode & subtypeNode = ability["subtype"]; + const JsonNode & addinfoNode = ability["addInfo"]; - std::string type = ability["type"].String(); - auto it = bonusNameMap.find(type); - auto params = std::make_unique(false); - if (it == bonusNameMap.end()) + if (ability["type"].isNull()) { - params = std::make_unique(convertDeprecatedBonus(ability)); - if(!params->isConverted) - { - logMod->error("Error: invalid ability type %s.", type); - return false; - } - b->type = params->type; - b->val = params->val.value_or(0); - b->valType = params->valueType.value_or(BonusValueType::ADDITIVE_VALUE); - if(params->targetType) - b->targetSourceType = params->targetType.value(); + logMod->error("Failed to parse bonus. Description: '%s'. Config: '%s'", descriptionID.get(), ability.toCompactString()); + return false; } - else - b->type = it->second; - loadBonusSubtype(b->subtype, b->type, params->isConverted ? params->toJson()["subtype"] : ability["subtype"]); - - if(!params->isConverted) + LIBRARY->identifiers()->requestIdentifier("bonus", ability["type"], [b, subtypeNode, addinfoNode](si32 bonusID) { - b->val = static_cast(ability["val"].Float()); + b->type = static_cast(bonusID); + loadBonusSubtype(b->subtype, b->type, subtypeNode); + loadBonusAddInfo(b->additionalInfo, b->type, addinfoNode); + }); - value = &ability["valueType"]; - if (!value->isNull()) - b->valType = static_cast(parseByMapN(bonusValueMap, value, "value type ")); - } + b->val = static_cast(ability["val"].Float()); + + value = &ability["valueType"]; + if (!value->isNull()) + b->valType = static_cast(parseByMapN(bonusValueMap, value, "value type ")); b->stacking = ability["stacking"].String(); - - loadBonusAddInfo(b->additionalInfo, b->type, ability); - b->turnsRemain = static_cast(ability["turns"].Float()); if(!ability["description"].isNull()) @@ -812,12 +784,7 @@ CSelector JsonUtils::parseSelector(const JsonNode & ability) value = &ability["type"]; if(value->isString()) { - auto it = bonusNameMap.find(value->String()); - if(it != bonusNameMap.end()) - { - type = it->second; - ret = ret.And(Selector::type()(it->second)); - } + ret = ret.And(Selector::type()(static_cast(*LIBRARY->identifiers()->getIdentifier("bonus", value->String())))); } value = &ability["subtype"]; if(!value->isNull() && type != BonusType::NONE) diff --git a/lib/json/JsonRandom.cpp b/lib/json/JsonRandom.cpp index 43781f9b7..c70dd54d3 100644 --- a/lib/json/JsonRandom.cpp +++ b/lib/json/JsonRandom.cpp @@ -580,13 +580,13 @@ JsonRandom::JsonRandom(IGameInfoCallback * cb, IGameRandomizer & gameRandomizer) return ret; } - std::vector JsonRandom::loadBonuses(const JsonNode & value) + std::vector> JsonRandom::loadBonuses(const JsonNode & value) { - std::vector ret; + std::vector> ret; for (const JsonNode & entry : value.Vector()) { if(auto bonus = JsonUtils::parseBonus(entry)) - ret.push_back(*bonus); + ret.push_back(bonus); } return ret; } diff --git a/lib/json/JsonRandom.h b/lib/json/JsonRandom.h index e407b24dc..296bc720f 100644 --- a/lib/json/JsonRandom.h +++ b/lib/json/JsonRandom.h @@ -91,7 +91,7 @@ public: std::vector loadHeroes(const JsonNode & value); std::vector loadHeroClasses(const JsonNode & value); - static std::vector loadBonuses(const JsonNode & value); + static std::vector> loadBonuses(const JsonNode & value); }; VCMI_LIB_NAMESPACE_END diff --git a/lib/json/JsonValidator.cpp b/lib/json/JsonValidator.cpp index c2cad2a7b..0d516c4cf 100644 --- a/lib/json/JsonValidator.cpp +++ b/lib/json/JsonValidator.cpp @@ -19,6 +19,7 @@ #include "../modding/CModHandler.h" #include "../texts/TextOperations.h" #include "../ScopeGuard.h" +#include "modding/CModVersion.h" VCMI_LIB_NAMESPACE_BEGIN @@ -119,6 +120,13 @@ static std::string notCheck(JsonValidator & validator, const JsonNode & baseSche return ""; } +static std::string ifCheck(JsonValidator & validator, const JsonNode & baseSchema, const JsonNode & schema, const JsonNode & data) +{ + if (validator.check(schema, data).empty()) + return validator.check(baseSchema["then"], data); + return ""; +} + static std::string enumCheck(JsonValidator & validator, const JsonNode & baseSchema, const JsonNode & schema, const JsonNode & data) { for(const auto & enumEntry : schema.Vector()) @@ -531,6 +539,14 @@ static std::string videoFile(const JsonNode & node) } #undef TEST_FILE +static std::string version(const JsonNode & node) +{ + auto version = CModVersion::fromString(node.String()); + if (version == CModVersion()) + return "Failed to parse mod version: " + node.toCompactString() + ". Expected format X.Y.Z, where X, Y, Z are non-negative numbers"; + return ""; +} + JsonValidator::TValidatorMap createCommonFields() { JsonValidator::TValidatorMap ret; @@ -544,6 +560,8 @@ JsonValidator::TValidatorMap createCommonFields() ret["type"] = typeCheck; ret["not"] = notCheck; ret["$ref"] = refCheck; + ret["if"] = ifCheck; + ret["then"] = emptyCheck; // implemented as part of "if check" // fields that don't need implementation ret["title"] = emptyCheck; @@ -620,6 +638,7 @@ JsonValidator::TFormatMap createFormatMap() ret["animationFile"] = animationFile; ret["imageFile"] = imageFile; ret["videoFile"] = videoFile; + ret["version"] = version; //TODO: // uri-reference diff --git a/lib/mapObjectConstructors/CDefaultObjectTypeHandler.h b/lib/mapObjectConstructors/CDefaultObjectTypeHandler.h index 9f0e09ca3..a2213c402 100644 --- a/lib/mapObjectConstructors/CDefaultObjectTypeHandler.h +++ b/lib/mapObjectConstructors/CDefaultObjectTypeHandler.h @@ -29,6 +29,8 @@ class CDefaultObjectTypeHandler : public AObjectTypeHandler std::shared_ptr create(IGameInfoCallback * cb, std::shared_ptr tmpl) const final { + assert(cb); + auto result = createObject(cb); preInitObject(result.get()); @@ -46,6 +48,8 @@ protected: virtual void randomizeObject(ObjectType * object, IGameRandomizer & gameRandomizer) const {} virtual std::shared_ptr createObject(IGameInfoCallback * cb) const { + assert(cb); + return std::make_shared(cb); } }; diff --git a/lib/mapObjectConstructors/CObjectClassesHandler.h b/lib/mapObjectConstructors/CObjectClassesHandler.h index 264b6f1ee..f31d6e286 100644 --- a/lib/mapObjectConstructors/CObjectClassesHandler.h +++ b/lib/mapObjectConstructors/CObjectClassesHandler.h @@ -45,7 +45,7 @@ public: }; /// Main class responsible for creation of all adventure map objects -class DLL_LINKAGE CObjectClassesHandler : public IHandlerBase, boost::noncopyable +class DLL_LINKAGE CObjectClassesHandler : public IHandlerBase { /// list of object handlers, each of them handles only one type std::vector< std::unique_ptr > mapObjectTypes; @@ -106,4 +106,4 @@ public: std::string getJsonKey(MapObjectID type) const; }; -VCMI_LIB_NAMESPACE_END \ No newline at end of file +VCMI_LIB_NAMESPACE_END diff --git a/lib/mapObjectConstructors/CRewardableConstructor.cpp b/lib/mapObjectConstructors/CRewardableConstructor.cpp index ae2e6d32c..0431f64e7 100644 --- a/lib/mapObjectConstructors/CRewardableConstructor.cpp +++ b/lib/mapObjectConstructors/CRewardableConstructor.cpp @@ -46,12 +46,12 @@ std::shared_ptr CRewardableConstructor::create(IGameInfoCallba return ret; } -void CRewardableConstructor::assignBonuses(std::vector & bonuses, MapObjectID objectID) const +void CRewardableConstructor::assignBonuses(std::vector> & bonuses, MapObjectID objectID) const { for (auto & bonus : bonuses) { - bonus.source = BonusSource::OBJECT_TYPE; - bonus.sid = BonusSourceID(objectID); + bonus->source = BonusSource::OBJECT_TYPE; + bonus->sid = BonusSourceID(objectID); } } diff --git a/lib/mapObjectConstructors/CRewardableConstructor.h b/lib/mapObjectConstructors/CRewardableConstructor.h index fd1e03775..eddc66ea3 100644 --- a/lib/mapObjectConstructors/CRewardableConstructor.h +++ b/lib/mapObjectConstructors/CRewardableConstructor.h @@ -20,7 +20,7 @@ class DLL_LINKAGE CRewardableConstructor : public AObjectTypeHandler { Rewardable::Info objectInfo; - void assignBonuses(std::vector & bonuses, MapObjectID objectID) const; + void assignBonuses(std::vector> & bonuses, MapObjectID objectID) const; void initTypeData(const JsonNode & config) override; bool blockVisit = false; diff --git a/lib/mapObjectConstructors/CommonConstructors.cpp b/lib/mapObjectConstructors/CommonConstructors.cpp index 8cf655aef..fecec9187 100644 --- a/lib/mapObjectConstructors/CommonConstructors.cpp +++ b/lib/mapObjectConstructors/CommonConstructors.cpp @@ -269,7 +269,7 @@ void BoatInstanceConstructor::initializeObject(CGBoat * boat) const boat->onboardAssaultAllowed = onboardAssaultAllowed; boat->onboardVisitAllowed = onboardVisitAllowed; for(auto & b : bonuses) - boat->addNewBonus(std::make_shared(b)); + boat->addNewBonus(b); } AnimationPath BoatInstanceConstructor::getBoatAnimationName() const diff --git a/lib/mapObjectConstructors/CommonConstructors.h b/lib/mapObjectConstructors/CommonConstructors.h index fd37fdd04..a941d3143 100644 --- a/lib/mapObjectConstructors/CommonConstructors.h +++ b/lib/mapObjectConstructors/CommonConstructors.h @@ -110,7 +110,7 @@ class DLL_LINKAGE BoatInstanceConstructor : public CDefaultObjectTypeHandler bonuses; + std::vector> bonuses; EPathfindingLayer layer; bool onboardAssaultAllowed; //if true, hero can attack units from transport bool onboardVisitAllowed; //if true, hero can visit objects from transport diff --git a/lib/mapObjects/CArmedInstance.cpp b/lib/mapObjects/CArmedInstance.cpp index 7500fdf12..169c135e2 100644 --- a/lib/mapObjects/CArmedInstance.cpp +++ b/lib/mapObjects/CArmedInstance.cpp @@ -70,9 +70,6 @@ void CArmedInstance::updateMoraleBonusFromArmy() std::set factions; bool hasUndead = false; - const std::string undeadCacheKey = "type_UNDEAD"; - static const CSelector undeadSelector = Selector::type()(BonusType::UNDEAD); - for(const auto & slot : Slots()) { const auto * creature = slot.second->getCreatureID().toEntity(LIBRARY); @@ -82,7 +79,7 @@ void CArmedInstance::updateMoraleBonusFromArmy() if (!hasUndead) { //this is costly check, let's skip it at first undead - hasUndead |= slot.second->hasBonus(undeadSelector, undeadCacheKey); + hasUndead |= slot.second->hasBonusOfType(BonusType::UNDEAD); } } diff --git a/lib/mapObjects/CGHeroInstance.cpp b/lib/mapObjects/CGHeroInstance.cpp index bac24e5e0..7efbf9a76 100644 --- a/lib/mapObjects/CGHeroInstance.cpp +++ b/lib/mapObjects/CGHeroInstance.cpp @@ -18,6 +18,7 @@ #include "../callback/IGameInfoCallback.h" #include "../callback/IGameEventCallback.h" #include "../callback/IGameRandomizer.h" +#include "../callback/EditorCallback.h" #include "../texts/CGeneralTextHandler.h" #include "../TerrainHandler.h" #include "../RoadHandler.h" @@ -89,21 +90,12 @@ const IBonusBearer* CGHeroInstance::getBonusBearer() const TerrainId CGHeroInstance::getNativeTerrain() const { - // NOTE: in H3 neutral stacks will ignore terrain penalty only if placed as topmost stack(s) in hero army. - // This is clearly bug in H3 however intended behaviour is not clear. - // Current VCMI behaviour will ignore neutrals in calculations so army in VCMI - // will always have best penalty without any influence from player-defined stacks order - // and army that consist solely from neutral will always be considered to be on native terrain - TerrainId nativeTerrain = ETerrainId::ANY_TERRAIN; for(const auto & stack : stacks) { TerrainId stackNativeTerrain = stack.second->getNativeTerrain(); //consider terrain bonuses e.g. Lodestar. - if(stackNativeTerrain == ETerrainId::NONE) - continue; - if(nativeTerrain == ETerrainId::ANY_TERRAIN) nativeTerrain = stackNativeTerrain; else if(nativeTerrain != stackNativeTerrain) @@ -749,19 +741,30 @@ uint64_t CGHeroInstance::getValueForDiplomacy() const return heroStrength * armyStrength; } -uint32_t CGHeroInstance::getValueForCampaign() const +bool CGHeroInstance::compareCampaignValue(const CGHeroInstance * left, const CGHeroInstance * right) { - /// Determined by testing H3: hero is preferred for transfer in campaigns if total sum of his primary skills and his secondary skill levels is greatest - uint32_t score = 0; - score += getPrimSkillLevel(PrimarySkill::ATTACK); - score += getPrimSkillLevel(PrimarySkill::DEFENSE); - score += getPrimSkillLevel(PrimarySkill::SPELL_POWER); - score += getPrimSkillLevel(PrimarySkill::DEFENSE); + // https://heroes.thelazy.net/index.php/Power_rating - for (const auto& secondary : secSkills) - score += secondary.second; + uint32_t leftLevel = left->level; + uint64_t leftExperience = left->exp; + uint32_t leftPrimary = left->getPrimSkillLevel(PrimarySkill::ATTACK) + left->getPrimSkillLevel(PrimarySkill::DEFENSE) + left->getPrimSkillLevel(PrimarySkill::SPELL_POWER) + left->getPrimSkillLevel(PrimarySkill::DEFENSE); + uint32_t leftPrimaryAndLevel = leftPrimary + leftLevel; - return score; + uint32_t rightLevel = right->level; + uint64_t rightExperience = right->exp; + uint32_t rightPrimary = right->getPrimSkillLevel(PrimarySkill::ATTACK) + right->getPrimSkillLevel(PrimarySkill::DEFENSE) + right->getPrimSkillLevel(PrimarySkill::SPELL_POWER) + right->getPrimSkillLevel(PrimarySkill::DEFENSE); + uint32_t rightPrimaryAndLevel = rightPrimary + rightLevel; + + if (leftPrimaryAndLevel != rightPrimaryAndLevel) + return leftPrimaryAndLevel > rightPrimaryAndLevel; + + if (leftLevel != rightLevel) + return leftLevel > rightLevel; + + if (leftExperience != rightExperience) + return leftExperience > rightExperience; + + return left->getHeroTypeID() > right->getHeroTypeID(); } ui64 CGHeroInstance::getTotalStrength() const @@ -982,88 +985,86 @@ bool CGHeroInstance::canLearnSpell(const spells::Spell * spell, bool allowBanned */ CStackBasicDescriptor CGHeroInstance::calculateNecromancy (const BattleResult &battleResult) const { - bool hasImprovedNecromancy = hasBonusOfType(BonusType::IMPROVED_NECROMANCY); + TConstBonusListPtr improvedNecromancy = getBonusesOfType(BonusType::IMPROVED_NECROMANCY); // need skill or cloak of undead king - lesser artifacts don't work without skill - if (hasImprovedNecromancy) + if (improvedNecromancy->empty()) + return CStackBasicDescriptor(); + + int raisedUnitsPercentage = std::clamp(valOfBonuses(BonusType::UNDEAD_RAISE_PERCENTAGE), 0, 100); + if (raisedUnitsPercentage == 0) + return CStackBasicDescriptor(); + + const std::map &casualties = battleResult.casualties[CBattleInfoEssentials::otherSide(battleResult.winner)]; + if(casualties.empty()) + return CStackBasicDescriptor(); + + // figure out what to raise - pick strongest creature meeting requirements + CreatureID bestCreature = CreatureID::NONE; + int necromancerPower = improvedNecromancy->totalValue(); + + // pick best bonus available + for(const std::shared_ptr & newPick : *improvedNecromancy) { - double necromancySkill = valOfBonuses(BonusType::UNDEAD_RAISE_PERCENTAGE) / 100.0; - const ui8 necromancyLevel = valOfBonuses(BonusType::IMPROVED_NECROMANCY); - vstd::amin(necromancySkill, 1.0); //it's impossible to raise more creatures than all... - const std::map &casualties = battleResult.casualties[CBattleInfoEssentials::otherSide(battleResult.winner)]; - if(casualties.empty()) - return CStackBasicDescriptor(); - // figure out what to raise - pick strongest creature meeting requirements - CreatureID creatureTypeRaised = CreatureID::NONE; //now we always have IMPROVED_NECROMANCY, no need for hardcode - int requiredCasualtyLevel = 1; - TConstBonusListPtr improvedNecromancy = getBonusesOfType(BonusType::IMPROVED_NECROMANCY); - if(!improvedNecromancy->empty()) + // addInfo[0] = required necromancy skill + if(newPick->additionalInfo[0] > necromancerPower) + continue; + + CreatureID newCreature = newPick->subtype.as();; + + if(!bestCreature.hasValue()) { - int maxCasualtyLevel = 1; - for(const auto & casualty : casualties) - vstd::amax(maxCasualtyLevel, LIBRARY->creatures()->getById(casualty.first)->getLevel()); - // pick best bonus available - std::shared_ptr topPick; - for(const std::shared_ptr & newPick : *improvedNecromancy) - { - // addInfo[0] = required necromancy skill, addInfo[1] = required casualty level - if(newPick->additionalInfo[0] > necromancyLevel || newPick->additionalInfo[1] > maxCasualtyLevel) - continue; - if(!topPick) - { - topPick = newPick; - } - else - { - auto quality = [](const std::shared_ptr & pick) -> std::tuple - { - const auto * c = pick->subtype.as().toCreature(); - return std::tuple {c->getLevel(), static_cast(c->getFullRecruitCost().marketValue()), -pick->additionalInfo[1]}; - }; - if(quality(topPick) < quality(newPick)) - topPick = newPick; - } - } - if(topPick) - { - creatureTypeRaised = topPick->subtype.as(); - requiredCasualtyLevel = std::max(topPick->additionalInfo[1], 1); - } + bestCreature = newCreature; } - assert(creatureTypeRaised != CreatureID::NONE); - // raise upgraded creature (at 2/3 rate) if no space available otherwise - if(getSlotFor(creatureTypeRaised) == SlotID()) + else { - for (const auto & slot : Slots()) + auto quality = [](CreatureID pick) -> std::tuple { - if (creatureTypeRaised.toCreature()->isMyDirectOrIndirectUpgrade(slot.second->getCreature())) - { - creatureTypeRaised = slot.second->getCreatureID(); - necromancySkill *= 2/3.0; - break; - } - } + const auto * c = pick.toCreature(); + return std::tuple {c->getLevel(), static_cast(c->getFullRecruitCost().marketValue())}; + }; + if(quality(bestCreature) < quality(newCreature)) + bestCreature = newCreature; } - // calculate number of creatures raised - low level units contribute at 50% rate - const double raisedUnitHealth = creatureTypeRaised.toCreature()->getMaxHealth(); - double raisedUnits = 0; - for(const auto & casualty : casualties) - { - const CCreature * c = casualty.first.toCreature(); - double raisedFromCasualty = std::min(c->getMaxHealth() / raisedUnitHealth, 1.0) * casualty.second * necromancySkill; - if(c->getLevel() < requiredCasualtyLevel) - raisedFromCasualty *= 0.5; - raisedUnits += raisedFromCasualty; - } - return CStackBasicDescriptor(creatureTypeRaised, std::max(static_cast(raisedUnits), 1)); } - return CStackBasicDescriptor(); + assert(bestCreature != CreatureID::NONE); + CreatureID selectedCreature = bestCreature; + + // raise upgraded creature (at 2/3 rate) if no space available otherwise + if(getSlotFor(selectedCreature) == SlotID()) + { + for (const auto & slot : Slots()) + { + if (selectedCreature.toCreature()->isMyDirectOrIndirectUpgrade(slot.second->getCreature())) + { + selectedCreature = slot.second->getCreatureID(); + break; + } + } + } + + // calculate number of creatures raised - low level units contribute at 50% rate + const double raisedUnitHealth = selectedCreature.toCreature()->getMaxHealth(); + double raisedUnits = 0; + for(const auto & casualty : casualties) + { + const CCreature * c = casualty.first.toCreature(); + double raisedFromCasualty = std::min(c->getMaxHealth() / raisedUnitHealth, 1.0) * casualty.second * raisedUnitsPercentage; + + if (bestCreature != selectedCreature) + raisedUnits += raisedFromCasualty * 2 / 3 / 100; + else + raisedUnits += raisedFromCasualty / 100; + } + + return CStackBasicDescriptor(selectedCreature, std::max(static_cast(raisedUnits), 1)); } int CGHeroInstance::getSightRadius() const { - return valOfBonuses(BonusType::SIGHT_RADIUS); // scouting gives SIGHT_RADIUS bonus + int baseValue = LIBRARY->engineSettings()->getInteger(EGameSettings::HEROES_BASE_SCOUNTING_RANGE); + return applyBonuses(BonusType::SIGHT_RADIUS, baseValue); } si32 CGHeroInstance::manaRegain() const @@ -1346,25 +1347,6 @@ void CGHeroInstance::detachFromBonusSystem(CGameState & gs) } } -CBonusSystemNode * CGHeroInstance::whereShouldBeAttachedOnSiege(const bool isBattleOutsideTown) const -{ - if(!getVisitedTown()) - return nullptr; - - if (isBattleOutsideTown) - return const_cast(&getVisitedTown()->townAndVis); - - return const_cast(getVisitedTown()); -} - -CBonusSystemNode * CGHeroInstance::whereShouldBeAttachedOnSiege(CGameState & gs) -{ - if(getVisitedTown()) - return whereShouldBeAttachedOnSiege(getVisitedTown()->isBattleOutsideTown(this)); - - return &CArmedInstance::whereShouldBeAttached(gs); -} - CBonusSystemNode & CGHeroInstance::whereShouldBeAttached(CGameState & gs) { if(visitedTown.hasValue()) @@ -1707,7 +1689,15 @@ void CGHeroInstance::serializeCommonOptions(JsonSerializeFormat & handler) handler.serializeIdArray("spellBook", spells); if(handler.saving) - CArtifactSet::serializeJsonArtifacts(handler, "artifacts", &cb->gameState().getMap()); + { + // FIXME: EditorCallback (used in map editor) has no access to GameState. + // serializeJsonArtifacts expects non-const CMap * + // Find some cleaner solution + if(auto * ecb = dynamic_cast(cb)) + CArtifactSet::serializeJsonArtifacts(handler, "artifacts", const_cast(ecb->getMapConstPtr())); + else + CArtifactSet::serializeJsonArtifacts(handler, "artifacts", &cb->gameState().getMap()); + } } void CGHeroInstance::serializeJsonOptions(JsonSerializeFormat & handler) @@ -1793,7 +1783,7 @@ bool CGHeroInstance::isMissionCritical() const void CGHeroInstance::fillUpgradeInfo(UpgradeInfo & info, const CStackInstance & stack) const { - TConstBonusListPtr lista = getBonusesOfType(BonusType::SPECIAL_UPGRADE, BonusSubtypeID(stack.getId())); + TConstBonusListPtr lista = stack.getBonusesOfType(BonusType::SPECIAL_UPGRADE, BonusSubtypeID(stack.getId())); for(const auto & it : *lista) { auto nid = CreatureID(it->additionalInfo[0]); @@ -1807,37 +1797,13 @@ void CGHeroInstance::fillUpgradeInfo(UpgradeInfo & info, const CStackInstance & bool CGHeroInstance::isCampaignYog() const { const StartInfo *si = cb->getStartInfo(); - - // it would be nice to find a way to move this hack to config/mapOverrides.json - if(!si || !si->campState) - return false; - - std::string campaign = si->campState->getFilename(); - if (!boost::starts_with(campaign, "DATA/YOG")) // "Birth of a Barbarian" - return false; - - if (getHeroTypeID() != HeroTypeID::SOLMYR) // Yog (based on Solmyr) - return false; - - return true; + return si && si->campState &&si->campState->getYogWizardID() == getHeroTypeID(); } bool CGHeroInstance::isCampaignGem() const { const StartInfo *si = cb->getStartInfo(); - - // it would be nice to find a way to move this hack to config/mapOverrides.json - if(!si || !si->campState) - return false; - - std::string campaign = si->campState->getFilename(); - if (!boost::starts_with(campaign, "DATA/GEM") && !boost::starts_with(campaign, "DATA/FINAL")) // "New Beginning" and "Unholy Alliance" - return false; - - if (getHeroTypeID() != HeroTypeID::GEM) // Yog (based on Solmyr) - return false; - - return true; + return si && si->campState &&si->campState->getGemSorceressID() == getHeroTypeID(); } ResourceSet CGHeroInstance::dailyIncome() const diff --git a/lib/mapObjects/CGHeroInstance.h b/lib/mapObjects/CGHeroInstance.h index 3f37397ed..e2b12718f 100644 --- a/lib/mapObjects/CGHeroInstance.h +++ b/lib/mapObjects/CGHeroInstance.h @@ -212,7 +212,8 @@ public: double getMagicStrength() const; // takes knowledge / spell power skill but also current mana, whether the hero owns a spell-book and whether that books contains anything into account double getHeroStrength() const; // includes fighting and magic strength - uint32_t getValueForCampaign() const; + /// Returns true if 'left' hero is stronger than 'right' when considering campaign transfer priority + static bool compareCampaignValue(const CGHeroInstance * left, const CGHeroInstance * right); uint64_t getValueForDiplomacy() const; ui64 getTotalStrength() const; // includes fighting strength and army strength @@ -275,9 +276,6 @@ public: ///IConstBonusProvider const IBonusBearer* getBonusBearer() const override; - CBonusSystemNode * whereShouldBeAttachedOnSiege(const bool isBattleOutsideTown) const; - CBonusSystemNode * whereShouldBeAttachedOnSiege(CGameState & gs); - ///spells::Caster int32_t getCasterUnitId() const override; int32_t getSpellSchoolLevel(const spells::Spell * spell, SpellSchool * outSelectedSchool = nullptr) const override; diff --git a/lib/mapObjects/CGPandoraBox.cpp b/lib/mapObjects/CGPandoraBox.cpp index a7f5d1607..19fc2dc11 100644 --- a/lib/mapObjects/CGPandoraBox.cpp +++ b/lib/mapObjects/CGPandoraBox.cpp @@ -109,10 +109,10 @@ void CGPandoraBox::grantRewardWithMessage(IGameEventCallback & gameEvents, const for(auto b : vi.reward.heroBonuses) { - if(b.val && b.type == BonusType::MORALE) - txt = setText(b.val > 0, 179, 178, h); - if(b.val && b.type == BonusType::LUCK) - txt = setText(b.val > 0, 181, 180, h); + if(b->val && b->type == BonusType::MORALE) + txt = setText(b->val > 0, 179, 178, h); + if(b->val && b->type == BonusType::LUCK) + txt = setText(b->val > 0, 181, 180, h); } sendInfoWindow(txt, temp); @@ -229,11 +229,11 @@ void CGPandoraBox::serializeJsonOptions(JsonSerializeFormat & handler) int val = 0; handler.serializeInt("morale", val, 0); if(val) - vinfo.reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id)); + vinfo.reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id))); handler.serializeInt("luck", val, 0); if(val) - vinfo.reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id)); + vinfo.reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id))); vinfo.reward.resources.serializeJson(handler, "resources"); { diff --git a/lib/mapObjects/CGTownInstance.cpp b/lib/mapObjects/CGTownInstance.cpp index 4d39ab2d6..c09db88b7 100644 --- a/lib/mapObjects/CGTownInstance.cpp +++ b/lib/mapObjects/CGTownInstance.cpp @@ -12,6 +12,8 @@ #include "CGTownInstance.h" #include "TownBuildingInstance.h" + +#include "../IGameSettings.h" #include "../spells/CSpellHandler.h" #include "../bonuses/Bonus.h" #include "../battle/IBattleInfoCallback.h" @@ -42,17 +44,10 @@ VCMI_LIB_NAMESPACE_BEGIN -int CGTownInstance::getSightRadius() const //returns sight distance +int CGTownInstance::getSightRadius() const { - auto ret = CBuilding::HEIGHT_NO_TOWER; - - for(const auto & bid : builtBuildings) - { - auto height = getTown()->buildings.at(bid)->height; - if(ret < height) - ret = height; - } - return ret; + int baseValue = LIBRARY->engineSettings()->getInteger(EGameSettings::TOWNS_BASE_SCOUNTING_RANGE); + return applyBonuses(BonusType::SIGHT_RADIUS, baseValue); } void CGTownInstance::setPropertyDer(ObjProperty what, ObjPropertyID identifier) @@ -312,19 +307,12 @@ void CGTownInstance::onHeroVisit(IGameEventCallback & gameEvents, const CGHeroIn if(armedGarrison() || getVisitingHero()) { const CGHeroInstance * defendingHero = getVisitingHero() ? getVisitingHero() : getGarrisonHero(); - const CArmedInstance * defendingArmy = defendingHero ? (CArmedInstance *)defendingHero : this; + const CArmedInstance * defendingArmy = defendingHero ? static_cast(defendingHero) : this; const bool isBattleOutside = isBattleOutsideTown(defendingHero); - if(!isBattleOutside && getVisitingHero() && defendingHero == getVisitingHero()) - { - //we have two approaches to merge armies: mergeGarrisonOnSiege() and used in the CGameHandler::garrisonSwap(ObjectInstanceID tid) - auto * nodeSiege = defendingHero->whereShouldBeAttachedOnSiege(isBattleOutside); + if(!isBattleOutside && defendingHero == getVisitingHero()) + mergeGarrisonOnSiege(gameEvents); - if(nodeSiege == (CBonusSystemNode *)this) - gameEvents.swapGarrisonOnSiege(this->id); - - const_cast(defendingHero)->setVisitedTown(this, false); //hack to return visitor from garrison after battle - } gameEvents.startBattle(h, defendingArmy, getSightCenter(), h, defendingHero, BattleLayout::createDefaultLayout(*cb, h, defendingArmy), (isBattleOutside ? nullptr : this)); } else @@ -683,7 +671,15 @@ std::vector CGTownInstance::availableItemsIds(EMarketMode mode) co } else if ( mode == EMarketMode::RESOURCE_SKILL ) { - return cb->gameState().getMap().townUniversitySkills; + for (const auto & buildingID : builtBuildings) + { + const auto * buildingPtr = getTown()->buildings.at(buildingID).get(); + if (vstd::contains(buildingPtr->marketModes, mode)) + return buildingPtr->marketOffer; + } + + logMod->warn("Town has resource-skill trade but has no skills to offer!"); + return {}; } else return IMarket::availableItemsIds(mode); diff --git a/lib/mapObjects/CQuest.cpp b/lib/mapObjects/CQuest.cpp index 6c5043612..f26e6addb 100644 --- a/lib/mapObjects/CQuest.cpp +++ b/lib/mapObjects/CQuest.cpp @@ -703,9 +703,9 @@ void CGSeerHut::serializeJsonOptions(JsonSerializeFormat & handler) if(metaTypeName == "mana") reward.manaDiff = val; if(metaTypeName == "morale") - reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id)); + reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id))); if(metaTypeName == "luck") - reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id)); + reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(id))); if(metaTypeName == "resource") { auto rawId = *LIBRARY->identifiers()->getIdentifier(ModScope::scopeMap(), fullIdentifier, false); diff --git a/lib/mapObjects/ObstacleSetHandler.h b/lib/mapObjects/ObstacleSetHandler.h index 349175175..2810d43b3 100644 --- a/lib/mapObjects/ObstacleSetHandler.h +++ b/lib/mapObjects/ObstacleSetHandler.h @@ -102,7 +102,7 @@ private: }; // TODO: Instantiate ObstacleSetHandler -class DLL_LINKAGE ObstacleSetHandler : public IHandlerBase, boost::noncopyable +class DLL_LINKAGE ObstacleSetHandler : public IHandlerBase { public: diff --git a/lib/mapObjects/TownBuildingInstance.cpp b/lib/mapObjects/TownBuildingInstance.cpp index f6e3ee128..97bc2ed54 100644 --- a/lib/mapObjects/TownBuildingInstance.cpp +++ b/lib/mapObjects/TownBuildingInstance.cpp @@ -73,7 +73,7 @@ TownRewardableBuildingInstance::TownRewardableBuildingInstance(CGTownInstance * configuration = generateConfiguration(gameRandomizer); } -void TownRewardableBuildingInstance::assignBonuses(std::vector & bonuses) const +void TownRewardableBuildingInstance::assignBonuses(std::vector> & bonuses) const { const auto & building = town->getTown()->buildings.at(getBuildingType()); @@ -81,13 +81,13 @@ void TownRewardableBuildingInstance::assignBonuses(std::vector & bonuses) { if (building->mapObjectLikeBonuses.hasValue()) { - bonus.source = BonusSource::OBJECT_TYPE; - bonus.sid = BonusSourceID(building->mapObjectLikeBonuses); + bonus->source = BonusSource::OBJECT_TYPE; + bonus->sid = BonusSourceID(building->mapObjectLikeBonuses); } else { - bonus.source = BonusSource::TOWN_STRUCTURE; - bonus.sid = BonusSourceID(building->getUniqueTypeID()); + bonus->source = BonusSource::TOWN_STRUCTURE; + bonus->sid = BonusSourceID(building->getUniqueTypeID()); } } } diff --git a/lib/mapObjects/TownBuildingInstance.h b/lib/mapObjects/TownBuildingInstance.h index 063359191..fa1616ebe 100644 --- a/lib/mapObjects/TownBuildingInstance.h +++ b/lib/mapObjects/TownBuildingInstance.h @@ -58,7 +58,7 @@ class DLL_LINKAGE TownRewardableBuildingInstance : public TownBuildingInstance, bool wasVisitedBefore(const CGHeroInstance * contextHero) const override; void grantReward(IGameEventCallback & gameEvents, ui32 rewardID, const CGHeroInstance * hero) const override; Rewardable::Configuration generateConfiguration(IGameRandomizer & gameRandomizer) const; - void assignBonuses(std::vector & bonuses) const; + void assignBonuses(std::vector> & bonuses) const; const IObjectInterface * getObject() const override; bool wasVisited(PlayerColor player) const override; diff --git a/lib/mapping/CMap.h b/lib/mapping/CMap.h index 743f7e8fb..21233f658 100644 --- a/lib/mapping/CMap.h +++ b/lib/mapping/CMap.h @@ -272,7 +272,6 @@ public: std::map obelisksVisited; //map: team_id => how many obelisks has been visited std::vector townMerchantArtifacts; - std::vector townUniversitySkills; void overrideGameSettings(const JsonNode & input); void overrideGameSetting(EGameSettings option, const JsonNode & input); @@ -345,7 +344,11 @@ public: h & obeliskCount; h & obelisksVisited; h & townMerchantArtifacts; - h & townUniversitySkills; + if (!h.hasFeature(Handler::Version::UNIVERSITY_CONFIG)) + { + std::vector townUniversitySkills; + h & townUniversitySkills; + } h & instanceNames; h & *gameSettings; diff --git a/lib/mapping/CMapHeader.cpp b/lib/mapping/CMapHeader.cpp index 7afdc3ccc..430e342a8 100644 --- a/lib/mapping/CMapHeader.cpp +++ b/lib/mapping/CMapHeader.cpp @@ -39,6 +39,7 @@ FactionID PlayerInfo::defaultCastle() const if(isFactionRandom) return FactionID::RANDOM; + assert(!allowedFactions.empty()); if(!allowedFactions.empty()) return *allowedFactions.begin(); diff --git a/lib/mapping/CMapService.cpp b/lib/mapping/CMapService.cpp index ddad72bf7..252297f2c 100644 --- a/lib/mapping/CMapService.cpp +++ b/lib/mapping/CMapService.cpp @@ -10,6 +10,8 @@ #include "StdInc.h" #include "CMapService.h" +#include "MapFormatSettings.h" + #include "../json/JsonUtils.h" #include "../filesystem/Filesystem.h" #include "../filesystem/CBinaryReader.h" @@ -163,23 +165,11 @@ std::unique_ptr CMapService::getMapLoader(std::unique_ptr CMapService::getMapPatcher(std::string scenarioName) { - static const JsonNode node = loadPatches("config/mapOverrides.json"); - boost::to_lower(scenarioName); logGlobal->debug("Request to patch map %s", scenarioName); - return std::unique_ptr(new CMapPatcher(node[scenarioName])); + return std::make_unique(LIBRARY->mapFormat->mapOverrides(scenarioName)); } VCMI_LIB_NAMESPACE_END diff --git a/lib/mapping/MapFeaturesH3M.cpp b/lib/mapping/MapFeaturesH3M.cpp index 965a81aef..4794ea738 100644 --- a/lib/mapping/MapFeaturesH3M.cpp +++ b/lib/mapping/MapFeaturesH3M.cpp @@ -131,7 +131,7 @@ MapFormatFeaturesH3M MapFormatFeaturesH3M::getFeaturesHOTA(uint32_t hotaVersion) { // even if changes are minimal, we might not be able to parse map header in map selection screen // throw exception - to be caught by map selection screen & excluded as invalid - if(hotaVersion > 7) + if(hotaVersion > 8) throw std::runtime_error("Invalid map format!"); MapFormatFeaturesH3M result = getFeaturesSOD(); @@ -142,6 +142,7 @@ MapFormatFeaturesH3M MapFormatFeaturesH3M::getFeaturesHOTA(uint32_t hotaVersion) result.levelHOTA5 = hotaVersion > 4; result.levelHOTA6 = hotaVersion > 5; result.levelHOTA7 = hotaVersion > 6; + result.levelHOTA8 = hotaVersion > 7; result.artifactsBytes = 21; result.heroesBytes = 23; diff --git a/lib/mapping/MapFeaturesH3M.h b/lib/mapping/MapFeaturesH3M.h index 07579cdd1..4afd48dea 100644 --- a/lib/mapping/MapFeaturesH3M.h +++ b/lib/mapping/MapFeaturesH3M.h @@ -16,8 +16,7 @@ enum class EMapFormat : uint8_t; struct MapFormatFeaturesH3M { -public: - static MapFormatFeaturesH3M find(EMapFormat format, uint32_t hotaVersion); +private: static MapFormatFeaturesH3M getFeaturesROE(); static MapFormatFeaturesH3M getFeaturesAB(); static MapFormatFeaturesH3M getFeaturesSOD(); @@ -25,8 +24,11 @@ public: static MapFormatFeaturesH3M getFeaturesWOG(); static MapFormatFeaturesH3M getFeaturesHOTA(uint32_t hotaVersion); +public: MapFormatFeaturesH3M() = default; + static MapFormatFeaturesH3M find(EMapFormat format, uint32_t hotaVersion); + // number of bytes in bitmask of appropriate type int factionsBytes; @@ -75,6 +77,7 @@ public: bool levelHOTA5 = false; // 1.7.0 bool levelHOTA6 = false; // 1.7.1 bool levelHOTA7 = false; // 1.7.2 + bool levelHOTA8 = false; // 1.7.3 }; VCMI_LIB_NAMESPACE_END diff --git a/lib/mapping/MapFormatH3M.cpp b/lib/mapping/MapFormatH3M.cpp index 3512e82b2..8afa96e57 100644 --- a/lib/mapping/MapFormatH3M.cpp +++ b/lib/mapping/MapFormatH3M.cpp @@ -13,7 +13,7 @@ #include "CMap.h" #include "MapReaderH3M.h" -#include "MapFormat.h" +#include "MapFormatSettings.h" #include "../CCreatureHandler.h" #include "../texts/CGeneralTextHandler.h" @@ -42,6 +42,7 @@ #include "../networkPacks/ArtifactLocation.h" #include "../spells/CSpellHandler.h" #include "../texts/TextOperations.h" +#include "entities/hero/CHeroClass.h" VCMI_LIB_NAMESPACE_BEGIN @@ -111,52 +112,6 @@ void CMapLoaderH3M::init() //map->banWaterContent(); //Not sure if force this for custom scenarios } -static MapIdentifiersH3M generateMapping(EMapFormat format) -{ - auto features = MapFormatFeaturesH3M::find(format, 0); - MapIdentifiersH3M identifierMapper; - - if(features.levelROE) - identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_RESTORATION_OF_ERATHIA)); - if(features.levelAB) - identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_ARMAGEDDONS_BLADE)); - if(features.levelSOD) - identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_SHADOW_OF_DEATH)); - if(features.levelCHR) - identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_CHRONICLES)); - if(features.levelWOG) - identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_IN_THE_WAKE_OF_GODS)); - if(features.levelHOTA0) - identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_HORN_OF_THE_ABYSS)); - - return identifierMapper; -} - -static std::map generateMappings() -{ - std::map result; - auto addMapping = [&result](EMapFormat format) - { - try - { - result[format] = generateMapping(format); - } - catch(const std::runtime_error &) - { - // unsupported map format - skip - } - }; - - addMapping(EMapFormat::ROE); - addMapping(EMapFormat::AB); - addMapping(EMapFormat::SOD); - addMapping(EMapFormat::CHR); - addMapping(EMapFormat::HOTA); - addMapping(EMapFormat::WOG); - - return result; -} - void CMapLoaderH3M::readHeader() { // Map version @@ -168,6 +123,14 @@ void CMapLoaderH3M::readHeader() features = MapFormatFeaturesH3M::find(mapHeader->version, hotaVersion); reader->setFormatLevel(features); + if(features.levelHOTA8) + { + int hotaVersionMajor = reader->readUInt32(); + int hotaVersionMinor = reader->readUInt32(); + int hotaVersionPatch = reader->readUInt32(); + logGlobal->trace("Loading HotA map, version %d.%d.%d", hotaVersionMajor, hotaVersionMinor, hotaVersionPatch); + } + if(features.levelHOTA1) { bool isMirrorMap = reader->readBool(); @@ -211,6 +174,13 @@ void CMapLoaderH3M::readHeader() if (!canHireDefeatedHeroes) logGlobal->warn("Map '%s': Option to block hiring of defeated heroes is not implemented!", mapName); } + + if(features.levelHOTA8) + { + bool forceMatchingVersion = reader->readBool(); + if (forceMatchingVersion) + logGlobal->warn("Map '%s': This map is forced to use specific hota version!", mapName); + } } else { @@ -218,12 +188,10 @@ void CMapLoaderH3M::readHeader() reader->setFormatLevel(features); } - // optimization - load mappings only once to avoid slow parsing of map headers for map list - static const std::map identifierMappers = generateMappings(); - if (!identifierMappers.count(mapHeader->version)) + if (!LIBRARY->mapFormat->isSupported(mapHeader->version)) throw std::runtime_error("Unsupported map format! Format ID " + std::to_string(static_cast(mapHeader->version))); - const MapIdentifiersH3M & identifierMapper = identifierMappers.at(mapHeader->version); + const MapIdentifiersH3M & identifierMapper = LIBRARY->mapFormat->getMapping(mapHeader->version); reader->setIdentifierRemapper(identifierMapper); @@ -285,7 +253,12 @@ void CMapLoaderH3M::readPlayerInfo() const bool allFactionsAllowed = playerInfo.isFactionRandom && allowedFactions.size() == features.factionsCount; if(!allFactionsAllowed) - playerInfo.allowedFactions = allowedFactions; + { + if (!allowedFactions.empty()) + playerInfo.allowedFactions = allowedFactions; + else + logGlobal->warn("Map '%s': Player %d has no allowed factions to play! Ignoring.", mapName, i); + } playerInfo.hasMainTown = reader->readBool(); if(playerInfo.hasMainTown) @@ -871,8 +844,9 @@ void CMapLoaderH3M::readPredefinedHeroes() if(!custom) continue; - auto hero = std::make_shared(map->cb); - hero->ID = Obj::HERO; + auto handler = LIBRARY->objtypeh->getHandlerFor(Obj::HERO, HeroTypeID(heroID).toHeroType()->heroClass->getIndex()); + auto object = handler->create(map->cb, handler->getTemplates().front()); + auto hero = std::dynamic_pointer_cast(object); hero->subID = heroID; bool hasExp = reader->readBool(); @@ -1111,9 +1085,9 @@ void CMapLoaderH3M::readBoxContent(CGPandoraBox * object, const int3 & mapPositi reward.heroExperience = reader->readUInt32(); reward.manaDiff = reader->readInt32(); if(auto val = reader->readInt8Checked(-3, 3)) - reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(idToBeGiven)); + reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(idToBeGiven))); if(auto val = reader->readInt8Checked(-3, 3)) - reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(idToBeGiven)); + reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(idToBeGiven))); reader->readResources(reward.resources); for(int x = 0; x < GameConstants::PRIMARY_SKILLS; ++x) @@ -2303,12 +2277,12 @@ void CMapLoaderH3M::readSeerHutQuest(CGSeerHut * hut, const int3 & position, con } case ESeerHutRewardType::MORALE: { - reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, reader->readInt8Checked(-3, 3), BonusSourceID(idToBeGiven)); + reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::MORALE, BonusSource::OBJECT_INSTANCE, reader->readInt8Checked(-3, 3), BonusSourceID(idToBeGiven))); break; } case ESeerHutRewardType::LUCK: { - reward.heroBonuses.emplace_back(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, reader->readInt8Checked(-3, 3), BonusSourceID(idToBeGiven)); + reward.heroBonuses.push_back(std::make_shared(BonusDuration::ONE_BATTLE, BonusType::LUCK, BonusSource::OBJECT_INSTANCE, reader->readInt8Checked(-3, 3), BonusSourceID(idToBeGiven))); break; } case ESeerHutRewardType::RESOURCES: @@ -2401,7 +2375,8 @@ EQuestMission CMapLoaderH3M::readQuest(IQuestObject * guard, const int3 & positi case EQuestMission::KILL_HERO: case EQuestMission::KILL_CREATURE: { - assert(questsToResolve.count(guard) == 0); + // NOTE: assert might fail on multi-quest seers + //assert(questsToResolve.count(guard) == 0); questsToResolve[guard] = reader->readUInt32(); break; } diff --git a/lib/mapping/MapFormatSettings.cpp b/lib/mapping/MapFormatSettings.cpp new file mode 100644 index 000000000..36687876a --- /dev/null +++ b/lib/mapping/MapFormatSettings.cpp @@ -0,0 +1,96 @@ +/* + * MapFormatSettings.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#include "StdInc.h" +#include "MapFormatSettings.h" + +#include "MapFeaturesH3M.h" + +#include "../GameLibrary.h" +#include "../IGameSettings.h" +#include "../json/JsonUtils.h" +#include "../modding/ModScope.h" + +VCMI_LIB_NAMESPACE_BEGIN + +MapIdentifiersH3M MapFormatSettings::generateMapping(EMapFormat format) +{ + auto features = MapFormatFeaturesH3M::find(format, 0); + MapIdentifiersH3M identifierMapper; + + if(features.levelROE) + identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_RESTORATION_OF_ERATHIA)); + if(features.levelAB) + identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_ARMAGEDDONS_BLADE)); + if(features.levelSOD) + identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_SHADOW_OF_DEATH)); + if(features.levelCHR) + identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_CHRONICLES)); + if(features.levelWOG) + identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_IN_THE_WAKE_OF_GODS)); + if(features.levelHOTA0) + identifierMapper.loadMapping(LIBRARY->engineSettings()->getValue(EGameSettings::MAP_FORMAT_HORN_OF_THE_ABYSS)); + + return identifierMapper; +} + +std::map MapFormatSettings::generateCampaignMapping() +{ + return { + {CampaignVersion::RoE, EMapFormat::ROE }, + {CampaignVersion::AB, EMapFormat::AB }, + {CampaignVersion::SoD, EMapFormat::SOD }, + {CampaignVersion::WoG, EMapFormat::WOG }, + {CampaignVersion::Chr, EMapFormat::CHR }, + {CampaignVersion::HotA, EMapFormat::HOTA} + }; +} + +std::map MapFormatSettings::generateMappings() +{ + std::map result; + auto addMapping = [&result](EMapFormat format) + { + try + { + result[format] = generateMapping(format); + logMod->trace("Loaded map format support for %d", static_cast(format)); + } + catch(const std::runtime_error &) + { + // unsupported map format - skip + logMod->debug("Failed to load map format support for %d", static_cast(format)); + } + }; + + addMapping(EMapFormat::ROE); + addMapping(EMapFormat::AB); + addMapping(EMapFormat::SOD); + addMapping(EMapFormat::CHR); + addMapping(EMapFormat::HOTA); + addMapping(EMapFormat::WOG); + + return result; +} + +MapFormatSettings::MapFormatSettings() + : mapping(generateMappings()) + , campaignToMap(generateCampaignMapping()) + , campaignOverridesConfig(JsonUtils::assembleFromFiles("config/campaignOverrides.json")) + , mapOverridesConfig(JsonUtils::assembleFromFiles("config/mapOverrides.json")) +{ + for (auto & entry : mapOverridesConfig.Struct()) + JsonUtils::validate(entry.second, "vcmi:mapHeader", "patch for " + entry.first); + + campaignOverridesConfig.setModScope(ModScope::scopeMap()); + mapOverridesConfig.setModScope(ModScope::scopeMap()); +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/mapping/MapFormatSettings.h b/lib/mapping/MapFormatSettings.h new file mode 100644 index 000000000..0dab2cd8b --- /dev/null +++ b/lib/mapping/MapFormatSettings.h @@ -0,0 +1,65 @@ +/* + * MapFormatSettings.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#pragma once + +#include "MapIdentifiersH3M.h" +#include "MapFormat.h" +#include "../campaign/CampaignConstants.h" +#include "../json/JsonNode.h" + +VCMI_LIB_NAMESPACE_BEGIN + +class MapFormatSettings : boost::noncopyable +{ + static MapIdentifiersH3M generateMapping(EMapFormat format); + static std::map generateMappings(); + static std::map generateCampaignMapping(); + + std::map mapping; + std::map campaignToMap; + + JsonNode campaignOverridesConfig; + JsonNode mapOverridesConfig; +public: + MapFormatSettings(); + + bool isSupported(EMapFormat format) const + { + return mapping.count(format) != 0; + } + + bool isSupported(CampaignVersion format) const + { + return isSupported(campaignToMap.at(format)); + } + + const MapIdentifiersH3M & getMapping(EMapFormat format) const + { + return mapping.at(format); + } + + const MapIdentifiersH3M & getMapping(CampaignVersion format) const + { + return mapping.at(campaignToMap.at(format)); + } + + const JsonNode & campaignOverrides(const std::string & campaignName) + { + return campaignOverridesConfig[campaignName]; + } + + const JsonNode & mapOverrides(const std::string & mapName) + { + return mapOverridesConfig[mapName]; + } +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/mapping/MapIdentifiersH3M.cpp b/lib/mapping/MapIdentifiersH3M.cpp index 50a5169f1..b5d6c7872 100644 --- a/lib/mapping/MapIdentifiersH3M.cpp +++ b/lib/mapping/MapIdentifiersH3M.cpp @@ -89,6 +89,12 @@ void MapIdentifiersH3M::loadMapping(const JsonNode & mapping) } } + for (auto entry : mapping["campaignVideo"].Struct()) + mappingCampaignVideo[entry.second.Integer()] = VideoPath::builtinTODO(entry.first); + + for (auto entry : mapping["campaignMusic"].Struct()) + mappingCampaignMusic[entry.second.Integer()] = AudioPath::builtinTODO(entry.first); + loadMapping(mappingHeroPortrait, mapping["portraits"], "hero"); loadMapping(mappingBuilding, mapping["buildingsCommon"], "building.core:random"); loadMapping(mappingFaction, mapping["factions"], "faction"); @@ -98,6 +104,7 @@ void MapIdentifiersH3M::loadMapping(const JsonNode & mapping) loadMapping(mappingTerrain, mapping["terrains"], "terrain"); loadMapping(mappingArtifact, mapping["artifacts"], "artifact"); loadMapping(mappingSecondarySkill, mapping["skills"], "skill"); + loadMapping(mappingCampaignRegions, mapping["campaignRegions"], "campaignRegion"); } void MapIdentifiersH3M::remapTemplate(ObjectTemplate & objectTemplate) @@ -213,4 +220,28 @@ SecondarySkill MapIdentifiersH3M::remap(SecondarySkill input) const return input; } +CampaignRegionID MapIdentifiersH3M::remap(CampaignRegionID input) const +{ + if (!mappingCampaignRegions.count(input)) + throw std::out_of_range("Campaign region with ID " + std::to_string(input.getNum()) + " is not defined"); + + return mappingCampaignRegions.at(input); +} + +VideoPath MapIdentifiersH3M::remapCampaignVideo(int input) const +{ + if (!mappingCampaignVideo.count(input)) + throw std::out_of_range("Campaign video with ID " + std::to_string(input) + " is not defined"); + + return mappingCampaignVideo.at(input); +} + +AudioPath MapIdentifiersH3M::remapCampaignMusic(int input) const +{ + if (!mappingCampaignMusic.count(input)) + throw std::out_of_range("Campaign music with ID " + std::to_string(input) + " is not defined"); + + return mappingCampaignMusic.at(input); +} + VCMI_LIB_NAMESPACE_END diff --git a/lib/mapping/MapIdentifiersH3M.h b/lib/mapping/MapIdentifiersH3M.h index 9b694f158..4c53424d7 100644 --- a/lib/mapping/MapIdentifiersH3M.h +++ b/lib/mapping/MapIdentifiersH3M.h @@ -31,7 +31,7 @@ struct ObjectTypeIdentifier } }; -class MapIdentifiersH3M +class DLL_LINKAGE MapIdentifiersH3M { std::map mappingBuilding; std::map> mappingFactionBuilding; @@ -43,6 +43,9 @@ class MapIdentifiersH3M std::map mappingTerrain; std::map mappingArtifact; std::map mappingSecondarySkill; + std::map mappingCampaignRegions; + std::map mappingCampaignVideo; + std::map mappingCampaignMusic; std::map mappingObjectTemplate; std::map mappingObjectIndex; @@ -54,6 +57,8 @@ public: void remapTemplate(ObjectTemplate & objectTemplate); + AudioPath remapCampaignMusic(int index) const; + VideoPath remapCampaignVideo(int index) const; BuildingID remapBuilding(std::optional owner, BuildingID input) const; HeroTypeID remapPortrait(HeroTypeID input) const; FactionID remap(FactionID input) const; @@ -63,6 +68,7 @@ public: TerrainId remap(TerrainId input) const; ArtifactID remap(ArtifactID input) const; SecondarySkill remap(SecondarySkill input) const; + CampaignRegionID remap(CampaignRegionID input) const; }; diff --git a/lib/modding/CModVersion.cpp b/lib/modding/CModVersion.cpp index c9b56a1fd..97b4cf72a 100644 --- a/lib/modding/CModVersion.cpp +++ b/lib/modding/CModVersion.cpp @@ -18,29 +18,41 @@ CModVersion CModVersion::GameVersion() return CModVersion(VCMI_VERSION_MAJOR, VCMI_VERSION_MINOR, VCMI_VERSION_PATCH); } -CModVersion CModVersion::fromString(std::string from) +CModVersion CModVersion::fromString(const std::string & from) { - int major = Any; - int minor = Any; - int patch = Any; + std::vector segments; + boost::split(segments, from, boost::is_any_of(".")); + + if (from.empty()) + return CModVersion(); + + if (segments.size() > 3) + return CModVersion(); + + static const std::string whitelist = "1234567890."; + + for (const auto & ch : from) + if (whitelist.find(ch) == std::string::npos) + return CModVersion(); + try { - auto pointPos = from.find('.'); - major = std::stoi(from.substr(0, pointPos)); - if(pointPos != std::string::npos) - { - from = from.substr(pointPos + 1); - pointPos = from.find('.'); - minor = std::stoi(from.substr(0, pointPos)); - if(pointPos != std::string::npos) - patch = std::stoi(from.substr(pointPos + 1)); - } + int major = Any; + int minor = Any; + int patch = Any; + + major = std::stoi(segments[0]); + if (segments.size() > 1) + minor = std::stoi(segments[1]); + if (segments.size() > 2) + patch = std::stoi(segments[2]); + + return CModVersion(major, minor, patch); } - catch(const std::invalid_argument &) + catch(const std::logic_error &) { return CModVersion(); } - return CModVersion(major, minor, patch); } std::string CModVersion::toString() const diff --git a/lib/modding/CModVersion.h b/lib/modding/CModVersion.h index 2a20876f9..94656fe84 100644 --- a/lib/modding/CModVersion.h +++ b/lib/modding/CModVersion.h @@ -32,7 +32,7 @@ struct DLL_LINKAGE CModVersion CModVersion(int mj, int mi, int p): major(mj), minor(mi), patch(p) {} static CModVersion GameVersion(); - static CModVersion fromString(std::string from); + static CModVersion fromString(const std::string & from); std::string toString() const; bool operator !=(const CModVersion & other) const; diff --git a/lib/modding/ContentTypeHandler.cpp b/lib/modding/ContentTypeHandler.cpp index be0ae0677..941b18bb0 100644 --- a/lib/modding/ContentTypeHandler.cpp +++ b/lib/modding/ContentTypeHandler.cpp @@ -18,6 +18,7 @@ #include "../BattleFieldHandler.h" #include "../CCreatureHandler.h" #include "../CConfigHandler.h" +#include "../campaign/CampaignRegionsHandler.h" #include "../entities/artifact/CArtHandler.h" #include "../entities/faction/CTownHandler.h" #include "../entities/hero/CHeroClassHandler.h" @@ -39,6 +40,7 @@ #include "../mapObjectConstructors/CObjectClassesHandler.h" #include "../rmg/CRmgTemplateStorage.h" #include "../spells/CSpellHandler.h" +#include "../spells/SpellSchoolHandler.h" #include "../GameLibrary.h" VCMI_LIB_NAMESPACE_BEGIN @@ -244,10 +246,12 @@ void CContentHandler::init() handlers.insert(std::make_pair("artifacts", ContentTypeHandler(LIBRARY->arth.get(), "artifact"))); handlers.insert(std::make_pair("bonuses", ContentTypeHandler(LIBRARY->bth.get(), "bonus"))); handlers.insert(std::make_pair("creatures", ContentTypeHandler(LIBRARY->creh.get(), "creature"))); + handlers.insert(std::make_pair("campaignRegions", ContentTypeHandler(LIBRARY->campaignRegions.get(), "campaignRegion"))); handlers.insert(std::make_pair("factions", ContentTypeHandler(LIBRARY->townh.get(), "faction"))); handlers.insert(std::make_pair("objects", ContentTypeHandler(LIBRARY->objtypeh.get(), "object"))); handlers.insert(std::make_pair("heroes", ContentTypeHandler(LIBRARY->heroh.get(), "hero"))); handlers.insert(std::make_pair("spells", ContentTypeHandler(LIBRARY->spellh.get(), "spell"))); + handlers.insert(std::make_pair("spellSchools", ContentTypeHandler(LIBRARY->spellSchoolHandler.get(), "spellSchool"))); handlers.insert(std::make_pair("skills", ContentTypeHandler(LIBRARY->skillh.get(), "skill"))); handlers.insert(std::make_pair("templates", ContentTypeHandler(LIBRARY->tplh.get(), "template"))); #if SCRIPTING_ENABLED diff --git a/lib/modding/IdentifierStorage.cpp b/lib/modding/IdentifierStorage.cpp index 3a94734d2..894221bef 100644 --- a/lib/modding/IdentifierStorage.cpp +++ b/lib/modding/IdentifierStorage.cpp @@ -23,10 +23,6 @@ VCMI_LIB_NAMESPACE_BEGIN CIdentifierStorage::CIdentifierStorage() { - //TODO: moddable spell schools - for (auto i = 0; i < GameConstants::DEFAULT_SCHOOLS; ++i) - registerObject(ModScope::scopeBuiltin(), "spellSchool", SpellConfig::SCHOOL[i].jsonName, SpellConfig::SCHOOL[i].id.getNum()); - registerObject(ModScope::scopeBuiltin(), "spellSchool", "any", SpellSchool::ANY.getNum()); for (int i = 0; i < GameConstants::RESOURCE_QUANTITY; ++i) @@ -87,27 +83,13 @@ CIdentifierStorage::CIdentifierStorage() registerObject(ModScope::scopeBuiltin(), "spell", "spellbook_preset", SpellID::SPELLBOOK_PRESET); } -void CIdentifierStorage::checkIdentifier(std::string & ID) +void CIdentifierStorage::checkIdentifier(const std::string & ID) { if (boost::algorithm::ends_with(ID, ".")) - logMod->warn("BIG WARNING: identifier %s seems to be broken!", ID); - else - { - size_t pos = 0; - do - { - if (std::tolower(ID[pos]) != ID[pos] ) //Not in camelCase - { - logMod->warn("Warning: identifier %s is not in camelCase!", ID); - ID[pos] = std::tolower(ID[pos]);// Try to fix the ID - } - pos = ID.find('.', pos); - } - while(pos++ != std::string::npos); - } + logMod->error("BIG WARNING: identifier %s seems to be broken!", ID); } -void CIdentifierStorage::requestIdentifier(ObjectCallback callback) const +void CIdentifierStorage::requestIdentifier(const ObjectCallback & callback) const { checkIdentifier(callback.type); checkIdentifier(callback.name); diff --git a/lib/modding/IdentifierStorage.h b/lib/modding/IdentifierStorage.h index 9972cd5ee..76b67bc76 100644 --- a/lib/modding/IdentifierStorage.h +++ b/lib/modding/IdentifierStorage.h @@ -67,9 +67,9 @@ class DLL_LINKAGE CIdentifierStorage void debugDumpIdentifiers(); /// Check if identifier can be valid (camelCase, point as separator) - static void checkIdentifier(std::string & ID); + static void checkIdentifier(const std::string & ID); - void requestIdentifier(ObjectCallback callback) const; + void requestIdentifier(const ObjectCallback & callback) const; bool resolveIdentifier(const ObjectCallback & callback) const; std::vector getPossibleIdentifiers(const ObjectCallback & callback) const; diff --git a/lib/networkPacks/PacksForClientBattle.h b/lib/networkPacks/PacksForClientBattle.h index 47260e5b5..cbe7fadbb 100644 --- a/lib/networkPacks/PacksForClientBattle.h +++ b/lib/networkPacks/PacksForClientBattle.h @@ -488,7 +488,7 @@ struct DLL_LINKAGE BattleTriggerEffect : public CPackForClient { BattleID battleID = BattleID::NONE; int stackID = 0; - int effect = 0; //use corresponding Bonus type + BonusType effect = BonusType::NONE; int val = 0; int additionalInfo = 0; diff --git a/lib/rewardable/Interface.cpp b/lib/rewardable/Interface.cpp index de0438afc..a0f69bbc3 100644 --- a/lib/rewardable/Interface.cpp +++ b/lib/rewardable/Interface.cpp @@ -152,24 +152,24 @@ void Rewardable::Interface::grantRewardAfterLevelup(IGameEventCallback & gameEve gameEvents.setMovePoints(&smp); } - for(const Bonus & bonus : info.reward.heroBonuses) + for(const auto & bonus : info.reward.heroBonuses) { - GiveBonus gb(GiveBonus::ETarget::OBJECT, hero->id, bonus); + GiveBonus gb(GiveBonus::ETarget::OBJECT, hero->id, *bonus); gameEvents.giveHeroBonus(&gb); } if (hero->getCommander()) { - for(const Bonus & bonus : info.reward.commanderBonuses) + for(const auto & bonus : info.reward.commanderBonuses) { - GiveBonus gb(GiveBonus::ETarget::HERO_COMMANDER, hero->id, bonus); + GiveBonus gb(GiveBonus::ETarget::HERO_COMMANDER, hero->id, *bonus); gameEvents.giveHeroBonus(&gb); } } - for(const Bonus & bonus : info.reward.playerBonuses) + for(const auto & bonus : info.reward.playerBonuses) { - GiveBonus gb(GiveBonus::ETarget::PLAYER, hero->getOwner(), bonus); + GiveBonus gb(GiveBonus::ETarget::PLAYER, hero->getOwner(), *bonus); gameEvents.giveHeroBonus(&gb); } diff --git a/lib/rewardable/Reward.cpp b/lib/rewardable/Reward.cpp index 3fa34b2ef..c514c4721 100644 --- a/lib/rewardable/Reward.cpp +++ b/lib/rewardable/Reward.cpp @@ -81,10 +81,10 @@ void Rewardable::Reward::loadComponents(std::vector & comps, const CG for (auto & bonus : heroBonuses) { - if (bonus.type == BonusType::MORALE) - comps.emplace_back(ComponentType::MORALE, bonus.val); - if (bonus.type == BonusType::LUCK) - comps.emplace_back(ComponentType::LUCK, bonus.val); + if (bonus->type == BonusType::MORALE) + comps.emplace_back(ComponentType::MORALE, bonus->val); + if (bonus->type == BonusType::LUCK) + comps.emplace_back(ComponentType::LUCK, bonus->val); } if (heroExperience) diff --git a/lib/rewardable/Reward.h b/lib/rewardable/Reward.h index 973fbcdcd..83a70123a 100644 --- a/lib/rewardable/Reward.h +++ b/lib/rewardable/Reward.h @@ -86,9 +86,9 @@ struct DLL_LINKAGE Reward final std::vector guards; /// list of bonuses, e.g. morale/luck - std::vector heroBonuses; - std::vector commanderBonuses; - std::vector playerBonuses; + std::vector> heroBonuses; + std::vector> commanderBonuses; + std::vector> playerBonuses; /// skills that hero may receive or lose std::vector primary; diff --git a/lib/serializer/CMemorySerializer.h b/lib/serializer/CMemorySerializer.h index 3914ccf1a..966740bf3 100644 --- a/lib/serializer/CMemorySerializer.h +++ b/lib/serializer/CMemorySerializer.h @@ -31,10 +31,11 @@ public: CMemorySerializer(); template - static std::unique_ptr deepCopy(const T &data) + static std::unique_ptr deepCopy(const T &data, IGameInfoCallback * cb = nullptr) { CMemorySerializer mem; mem.oser & &data; + mem.iser.cb = cb; std::unique_ptr ret; mem.iser & ret; @@ -42,10 +43,11 @@ public: } template - static std::shared_ptr deepCopyShared(const T &data) + static std::shared_ptr deepCopyShared(const T &data, IGameInfoCallback * cb = nullptr) { CMemorySerializer mem; mem.oser & &data; + mem.iser.cb = cb; std::shared_ptr ret; mem.iser & ret; diff --git a/lib/serializer/ESerializationVersion.h b/lib/serializer/ESerializationVersion.h index 709c8b8f9..b2cac1c5a 100644 --- a/lib/serializer/ESerializationVersion.h +++ b/lib/serializer/ESerializationVersion.h @@ -45,8 +45,10 @@ enum class ESerializationVersion : int32_t CUSTOM_BONUS_ICONS, // support for custom icons in bonuses SERVER_STATISTICS, // statistics now only saved on server OPPOSITE_SIDE_LIMITER_OWNER, // opposite side limiter no longer stores owner in itself + UNIVERSITY_CONFIG, // town university is configurable + CAMPAIGN_BONUSES, // new format for scenario bonuses in campaigns - CURRENT = OPPOSITE_SIDE_LIMITER_OWNER, + CURRENT = CAMPAIGN_BONUSES, }; static_assert(ESerializationVersion::MINIMAL <= ESerializationVersion::CURRENT, "Invalid serialization version definition!"); diff --git a/lib/spells/BattleSpellMechanics.cpp b/lib/spells/BattleSpellMechanics.cpp index 3f75e27d4..5dc2377d8 100644 --- a/lib/spells/BattleSpellMechanics.cpp +++ b/lib/spells/BattleSpellMechanics.cpp @@ -310,10 +310,8 @@ void BattleSpellMechanics::cast(ServerCallback * server, const Target & target) int manaChannel = 0; for(const auto * stack : battle()->battleGetAllStacks(true)) //TODO: shouldn't bonus system handle it somehow? { - if(stack->unitOwner() == otherHero->tempOwner) - { + if(stack->unitOwner() == otherHero->tempOwner && stack->alive()) vstd::amax(manaChannel, stack->valOfBonuses(BonusType::MANA_CHANNELING)); - } } sc.manaGained = (manaChannel * spellCost) / 100; } diff --git a/lib/spells/CSpellHandler.cpp b/lib/spells/CSpellHandler.cpp index 3147d77cf..7f55193d2 100644 --- a/lib/spells/CSpellHandler.cpp +++ b/lib/spells/CSpellHandler.cpp @@ -21,56 +21,23 @@ #include "../constants/StringConstants.h" -#include "../battle/BattleInfo.h" +#include "../CBonusTypeHandler.h" #include "../battle/CBattleInfoCallback.h" #include "../battle/Unit.h" #include "../json/JsonBonus.h" #include "../json/JsonUtils.h" #include "../GameLibrary.h" -#include "../mapObjects/CGHeroInstance.h" //todo: remove #include "../modding/IdentifierStorage.h" -#include "../modding/ModUtility.h" -#include "../serializer/CSerializer.h" #include "../texts/CLegacyConfigParser.h" #include "../texts/CGeneralTextHandler.h" #include "ISpellMechanics.h" +#include "bonuses/BonusSelector.h" +#include "spells/SpellSchoolHandler.h" VCMI_LIB_NAMESPACE_BEGIN -namespace SpellConfig -{ -static const std::string LEVEL_NAMES[] = {"none", "basic", "advanced", "expert"}; - -const spells::SchoolInfo SCHOOL[4] = -{ - { - SpellSchool::AIR, - "air" - }, - { - SpellSchool::FIRE, - "fire" - }, - { - SpellSchool::WATER, - "water" - }, - { - SpellSchool::EARTH, - "earth" - } -}; - -//order as described in http://bugs.vcmi.eu/view.php?id=91 -static const SpellSchool SCHOOL_ORDER[4] = -{ - SpellSchool::AIR, //=0 - SpellSchool::FIRE, //=1 - SpellSchool::EARTH,//=3(!) - SpellSchool::WATER //=2(!) -}; -} //namespace SpellConfig +static constexpr std::array LEVEL_NAMES = {"none", "basic", "advanced", "expert"}; ///CSpell CSpell::CSpell(): @@ -132,7 +99,7 @@ int64_t CSpell::calculateDamage(const spells::Caster * caster) const bool CSpell::hasSchool(SpellSchool which) const { - return school.count(which) && school.at(which); + return schools.count(which); } bool CSpell::canBeCast(const CBattleInfoCallback * cb, spells::Mode mode, const spells::Caster * caster) const @@ -158,13 +125,11 @@ spells::AimType CSpell::getTargetType() const void CSpell::forEachSchool(const std::function& cb) const { bool stop = false; - for(auto iter : SpellConfig::SCHOOL_ORDER) + for(auto schoolID : LIBRARY->spellSchoolHandler->getAllObjects()) { - const spells::SchoolInfo & cnf = SpellConfig::SCHOOL[iter.getNum()]; - if(school.at(cnf.id)) + if(schools.count(schoolID)) { - cb(cnf.id, stop); - + cb(schoolID, stop); if(stop) break; } @@ -189,8 +154,8 @@ std::string CSpell::getNameTranslated() const std::string CSpell::getDescriptionTextID(int32_t level) const { - TextIdentifier id("spell", modScope, identifier, "description", SpellConfig::LEVEL_NAMES[level]); - return id.get(); + TextIdentifier textID("spell", modScope, identifier, "description", LEVEL_NAMES[level]); + return textID.get(); } std::string CSpell::getDescriptionTranslated(int32_t level) const @@ -473,26 +438,14 @@ JsonNode CSpell::convertTargetCondition(const BTVector & immunity, const BTVecto static const std::string CONDITION_NORMAL = "normal"; static const std::string CONDITION_ABSOLUTE = "absolute"; -#define BONUS_NAME(x) { BonusType::x, #x }, - static const std::map bonusNameRMap = { BONUS_LIST }; -#undef BONUS_NAME - JsonNode res; auto convertVector = [&](const std::string & targetName, const BTVector & source, const std::string & value) { for(auto bonusType : source) { - auto iter = bonusNameRMap.find(bonusType); - if(iter != bonusNameRMap.end()) - { - auto fullId = ModUtility::makeFullIdentifier("", "bonus", iter->second); - res[targetName][fullId].String() = value; - } - else - { - logGlobal->error("Invalid bonus type %d", static_cast(bonusType)); - } + std::string bonusName = LIBRARY->bth->bonusToString(bonusType); + res[targetName][bonusName].String() = value; } }; @@ -574,15 +527,13 @@ CSpell::TargetInfo::TargetInfo(const CSpell * spell, const int level, spells::Mo : type(spell->getTargetType()), smart(false), massive(false), - clearAffected(false), - clearTarget(false) + clearAffected(false) { const auto & levelInfo = spell->getLevelInfo(level); smart = levelInfo.smartTarget; massive = levelInfo.range.empty(); clearAffected = levelInfo.clearAffected; - clearTarget = levelInfo.clearTarget; } bool DLL_LINKAGE isInScreenRange(const int3 & center, const int3 & pos) @@ -594,7 +545,6 @@ bool DLL_LINKAGE isInScreenRange(const int3 & center, const int3 & pos) ///CSpellHandler std::vector CSpellHandler::loadLegacyData() { - using namespace SpellConfig; std::vector legacyData; CLegacyConfigParser parser(TextPath::builtin("DATA/SPTRAITS.TXT")); @@ -647,7 +597,8 @@ std::vector CSpellHandler::loadLegacyData() for(const auto & name : NFaction::names) chances[name].Integer() = static_cast(parser.readNumber()); - auto AIVals = parser.readNumArray(GameConstants::SPELL_SCHOOL_LEVELS); + // Unused, AI values + parser.readNumArray(GameConstants::SPELL_SCHOOL_LEVELS); std::vector descriptions; for(size_t i = 0; i < GameConstants::SPELL_SCHOOL_LEVELS; i++) @@ -662,7 +613,6 @@ std::vector CSpellHandler::loadLegacyData() level["description"].String() = descriptions[i]; level["cost"].Integer() = costs[i]; level["power"].Integer() = powers[i]; - level["aiValue"].Integer() = AIVals[i]; } legacyData.push_back(lineNode); @@ -770,8 +720,6 @@ std::shared_ptr CSpellHandler::loadFromJson(const std::string & scope, c assert(identifier.find(':') == std::string::npos); assert(!scope.empty()); - using namespace SpellConfig; - SpellID id(static_cast(index)); auto spell = std::make_shared(); @@ -796,11 +744,15 @@ std::shared_ptr CSpellHandler::loadFromJson(const std::string & scope, c logMod->trace("%s: loading spell %s", __FUNCTION__, spell->getNameTranslated()); - const auto schoolNames = json["school"]; - - for(const spells::SchoolInfo & info : SpellConfig::SCHOOL) + for(const auto & schoolJson : json["school"].Struct()) { - spell->school[info.id] = schoolNames[info.jsonName].Bool(); + if (schoolJson.second.Bool()) + { + LIBRARY->identifiers()->requestIdentifier(schoolJson.second.getModScope(), "spellSchool", schoolJson.first, [spell](si32 schoolID) + { + spell->schools.emplace(schoolID); + }); + } } spell->castOnSelf = json["canCastOnSelf"].Bool(); @@ -888,28 +840,17 @@ std::shared_ptr CSpellHandler::loadFromJson(const std::string & scope, c spell->onlyOnWaterMap = json["onlyOnWaterMap"].Bool(); - auto findBonus = [&](const std::string & name, std::vector & vec) - { - auto it = bonusNameMap.find(name); - if(it == bonusNameMap.end()) - { - logMod->error("Spell %s: invalid bonus name %s", spell->getNameTranslated(), name); - } - else - { - vec.push_back(static_cast(it->second)); - } - }; - auto readBonusStruct = [&](const std::string & name, std::vector & vec) { for(auto bonusData: json[name].Struct()) { - const std::string bonusId = bonusData.first; - const bool flag = bonusData.second.Bool(); + if(!bonusData.second.Bool()) + continue; - if(flag) - findBonus(bonusId, vec); + LIBRARY->identifiers()->requestIdentifier(bonusData.second.getModScope(), "bonus", bonusData.first, [&vec](si32 bonusID) + { + vec.push_back(static_cast(bonusID)); + }); } }; @@ -1022,9 +963,7 @@ std::shared_ptr CSpellHandler::loadFromJson(const std::string & scope, c LIBRARY->generaltexth->registerString(scope, spell->getDescriptionTextID(levelIndex), levelNode["description"]); levelObject.cost = static_cast(levelNode["cost"].Integer()); - levelObject.AIValue = static_cast(levelNode["aiValue"].Integer()); levelObject.smartTarget = levelNode["targetModifier"]["smart"].Bool(); - levelObject.clearTarget = levelNode["targetModifier"]["clearTarget"].Bool(); levelObject.clearAffected = levelNode["targetModifier"]["clearAffected"].Bool(); levelObject.range = spellRangeInHexes(levelNode["range"].String()); @@ -1058,7 +997,7 @@ std::shared_ptr CSpellHandler::loadFromJson(const std::string & scope, c levelObject.cumulativeEffects.push_back(b); } - if(levelNode["battleEffects"].getType() == JsonNode::JsonType::DATA_STRUCT && !levelNode["battleEffects"].Struct().empty()) + if(!levelNode["battleEffects"].Struct().empty()) { levelObject.battleEffects = levelNode["battleEffects"]; diff --git a/lib/spells/CSpellHandler.h b/lib/spells/CSpellHandler.h index 1e6790b68..06d5fc106 100644 --- a/lib/spells/CSpellHandler.h +++ b/lib/spells/CSpellHandler.h @@ -35,21 +35,8 @@ namespace test namespace spells { - -class ISpellMechanicsFactory; -class IBattleCast; - -struct SchoolInfo -{ - SpellSchool id; //backlink - std::string jsonName; -}; - -} - -namespace SpellConfig -{ - extern const spells::SchoolInfo SCHOOL[4]; + class ISpellMechanicsFactory; + class IBattleCast; } enum class VerticalPosition : ui8{TOP, CENTER, BOTTOM}; @@ -103,7 +90,6 @@ public: { si32 cost = 0; si32 power = 0; - si32 AIValue = 0; bool smartTarget = true; bool clearTarget = false; @@ -142,7 +128,6 @@ public: bool smart; bool massive; bool clearAffected; - bool clearTarget; TargetInfo(const CSpell * spell, const int32_t level, spells::Mode mode); }; @@ -150,7 +135,7 @@ public: using BTVector = std::vector; - std::map school; + std::set schools; std::map probabilities; //% chance to gain for castles bool onlyOnWaterMap; //Spell will be banned on maps without water diff --git a/lib/spells/SpellSchoolHandler.cpp b/lib/spells/SpellSchoolHandler.cpp new file mode 100644 index 000000000..535223c44 --- /dev/null +++ b/lib/spells/SpellSchoolHandler.cpp @@ -0,0 +1,60 @@ +/* + * SpellSchoolHandler.cpp, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#include "StdInc.h" +#include "SpellSchoolHandler.h" + +#include "../json/JsonNode.h" + +VCMI_LIB_NAMESPACE_BEGIN + +std::vector SpellSchoolHandler::loadLegacyData() +{ + objects.resize(4); + + return std::vector(4, JsonNode(JsonMap())); +} + +std::shared_ptr SpellSchoolHandler::loadObjectImpl(std::string scope, std::string name, const JsonNode & data, size_t index) +{ + auto ret = std::make_shared(); + + ret->id = SpellSchool(index); + ret->jsonName = name; + ret->spellBordersPath = AnimationPath::fromJson(data["schoolBorders"]); + + return ret; +} + +/// loads single object into game. Scope is namespace of this object, same as name of source mod +void SpellSchoolHandler::loadObject(std::string scope, std::string name, const JsonNode & data) +{ + objects.push_back(loadObjectImpl(scope, name, data, objects.size())); + registerObject(scope, "spellSchool", name, objects.back()->getIndex()); +} + +void SpellSchoolHandler::loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) +{ + assert(objects[index] == nullptr); // ensure that this id was not loaded before + objects[index] = loadObjectImpl(scope, name, data, index); + registerObject(scope, "spellSchool", name, objects[index]->getIndex()); +} + +std::vector SpellSchoolHandler::getAllObjects() const +{ + std::vector result; + + for (const auto & school : objects) + result.push_back(school->id); + + return result; +} + +VCMI_LIB_NAMESPACE_END diff --git a/lib/spells/SpellSchoolHandler.h b/lib/spells/SpellSchoolHandler.h new file mode 100644 index 000000000..74c992706 --- /dev/null +++ b/lib/spells/SpellSchoolHandler.h @@ -0,0 +1,72 @@ +/* + * SpellSchoolHandler.h, part of VCMI engine + * + * Authors: listed in file AUTHORS in main folder + * + * License: GNU General Public License v2.0 or later + * Full text of license available in license.txt file, in main folder + * + */ + +#pragma once + +#include "../constants/EntityIdentifiers.h" +#include "../IHandlerBase.h" +#include "../filesystem/ResourcePath.h" + +VCMI_LIB_NAMESPACE_BEGIN + +class SpellSchoolHandler; + +namespace spells +{ + +class DLL_LINKAGE SpellSchoolType +{ + friend class VCMI_LIB_WRAP_NAMESPACE(SpellSchoolHandler); + + SpellSchool id; //backlink + std::string jsonName; + AnimationPath spellBordersPath; + +public: + std::string getJsonKey() const + { + return jsonName; + } + + AnimationPath getSpellBordersPath() const + { + return spellBordersPath; + } + + int getIndex() const + { + return id.getNum(); + } +}; + +} + +class DLL_LINKAGE SpellSchoolHandler : public IHandlerBase +{ + std::shared_ptr loadObjectImpl(std::string scope, std::string name, const JsonNode & data, size_t index); +public: + std::vector loadLegacyData() override; + + /// loads single object into game. Scope is namespace of this object, same as name of source mod + void loadObject(std::string scope, std::string name, const JsonNode & data) override; + void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override; + + std::vector getAllObjects() const; + + const spells::SpellSchoolType * getById(SpellSchool index) const + { + return objects.at(index).get(); + } + +private: + std::vector> objects; +}; + +VCMI_LIB_NAMESPACE_END diff --git a/lib/spells/TargetCondition.cpp b/lib/spells/TargetCondition.cpp index 5460450c5..e97c1302c 100644 --- a/lib/spells/TargetCondition.cpp +++ b/lib/spells/TargetCondition.cpp @@ -15,7 +15,6 @@ #include "../CBonusTypeHandler.h" #include "../battle/CBattleInfoCallback.h" #include "../battle/Unit.h" -#include "../bonuses/BonusParams.h" #include "../bonuses/BonusList.h" #include "../json/JsonBonus.h" #include "../modding/IdentifierStorage.h" @@ -356,21 +355,11 @@ public: { if(type == "bonus") { - //TODO: support custom bonus types - - auto it = bonusNameMap.find(identifier); - if(it != bonusNameMap.end()) - return std::make_shared(Selector::type()(it->second)); - - auto params = BonusParams(identifier, "", -1); - if(params.isConverted) - { - if(params.val) - return std::make_shared(params.toSelector(), *params.val, *params.val); - return std::make_shared(params.toSelector()); - } - - logMod->error("Invalid bonus type %s in spell target condition.", identifier); + std::optional bonusID(LIBRARY->identifiers()->getIdentifier(scope, "bonus", identifier, true)); + if (bonusID) + return std::make_shared(Selector::type()(static_cast(*bonusID))); + else + logMod->error("Invalid bonus %s type in spell target condition.", identifier); } else if(type == "creature") { diff --git a/lib/texts/CGeneralTextHandler.cpp b/lib/texts/CGeneralTextHandler.cpp index 2f3cff5e8..5d07c445b 100644 --- a/lib/texts/CGeneralTextHandler.cpp +++ b/lib/texts/CGeneralTextHandler.cpp @@ -159,7 +159,6 @@ CGeneralTextHandler::CGeneralTextHandler(): readToVector("core.heroscrn", "DATA/HEROSCRN.TXT" ); readToVector("core.tentcolr", "DATA/TENTCOLR.TXT" ); readToVector("core.skilllev", "DATA/SKILLLEV.TXT" ); - readToVector("core.cmpmusic", "DATA/CMPMUSIC.TXT" ); readToVector("core.minename", "DATA/MINENAME.TXT" ); readToVector("core.mineevnt", "DATA/MINEEVNT.TXT" ); readToVector("core.xtrainfo", "DATA/XTRAINFO.TXT" ); @@ -288,8 +287,6 @@ CGeneralTextHandler::CGeneralTextHandler(): } } while (parser.endLine() && !text.empty()); - - scenariosCountPerCampaign.push_back(region); } } } @@ -306,15 +303,6 @@ int32_t CGeneralTextHandler::pluralText(const int32_t textIndex, const int32_t c return textIndex + 1; } -size_t CGeneralTextHandler::getCampaignLength(size_t campaignID) const -{ - assert(campaignID < scenariosCountPerCampaign.size()); - - if(campaignID < scenariosCountPerCampaign.size()) - return scenariosCountPerCampaign[campaignID]; - return 0; -} - std::string CGeneralTextHandler::getPreferredLanguage() { assert(!settings["general"]["language"].String().empty()); diff --git a/lib/texts/CGeneralTextHandler.h b/lib/texts/CGeneralTextHandler.h index 428eea1b0..fe7771952 100644 --- a/lib/texts/CGeneralTextHandler.h +++ b/lib/texts/CGeneralTextHandler.h @@ -42,9 +42,6 @@ class DLL_LINKAGE CGeneralTextHandler: public TextLocalizationContainer { void readToVector(const std::string & sourceID, const std::string & sourceName); - /// number of scenarios in specific campaign. TODO: move to a better location - std::vector scenariosCountPerCampaign; - public: LegacyTextContainer allTexts; @@ -78,8 +75,6 @@ public: int32_t pluralText(int32_t textIndex, int32_t count) const; - size_t getCampaignLength(size_t campaignID) const; - CGeneralTextHandler(); CGeneralTextHandler(const CGeneralTextHandler&) = delete; CGeneralTextHandler operator=(const CGeneralTextHandler&) = delete; diff --git a/mapeditor/CMakeLists.txt b/mapeditor/CMakeLists.txt index fcbd0d382..6072c3c93 100644 --- a/mapeditor/CMakeLists.txt +++ b/mapeditor/CMakeLists.txt @@ -21,7 +21,7 @@ set(editor_SRCS mapsettings/rumorsettings.cpp mapsettings/translations.cpp PlayerSelectionDialog.cpp - playersettings.cpp + PlayerSettingsDialog.cpp playerparams.cpp scenelayer.cpp mapcontroller.cpp @@ -72,7 +72,7 @@ set(editor_HEADERS mapsettings/rumorsettings.h mapsettings/translations.h PlayerSelectionDialog.h - playersettings.h + PlayerSettingsDialog.h playerparams.h scenelayer.h mapcontroller.h @@ -116,7 +116,7 @@ set(editor_FORMS mapsettings/eventsettings.ui mapsettings/rumorsettings.ui mapsettings/translations.ui - playersettings.ui + PlayerSettingsDialog.ui playerparams.ui validator.ui inspector/townbuildingswidget.ui diff --git a/mapeditor/playersettings.cpp b/mapeditor/PlayerSettingsDialog.cpp similarity index 85% rename from mapeditor/playersettings.cpp rename to mapeditor/PlayerSettingsDialog.cpp index 1efcb436a..5282b7e3b 100644 --- a/mapeditor/playersettings.cpp +++ b/mapeditor/PlayerSettingsDialog.cpp @@ -9,16 +9,16 @@ */ #include "StdInc.h" -#include "playersettings.h" -#include "ui_playersettings.h" +#include "PlayerSettingsDialog.h" +#include "ui_PlayerSettingsDialog.h" #include "playerparams.h" #include "mainwindow.h" #include "../lib/mapping/CMap.h" -PlayerSettings::PlayerSettings(MapController & ctrl, QWidget *parent) : +PlayerSettingsDialog::PlayerSettingsDialog(MapController & ctrl, QWidget *parent) : QDialog(parent), - ui(new Ui::PlayerSettings), + ui(new Ui::PlayerSettingsDialog), controller(ctrl) { ui->setupUi(this); @@ -48,13 +48,13 @@ PlayerSettings::PlayerSettings(MapController & ctrl, QWidget *parent) : setAttribute(Qt::WA_DeleteOnClose); } -PlayerSettings::~PlayerSettings() +PlayerSettingsDialog::~PlayerSettingsDialog() { controller.settingsDialog = nullptr; delete ui; } -void PlayerSettings::on_playersCount_currentIndexChanged(int index) +void PlayerSettingsDialog::on_playersCount_currentIndexChanged(int index) { const auto selectedPlayerCount = index + 1; assert(selectedPlayerCount <= controller.map()->players.size()); @@ -90,7 +90,7 @@ void PlayerSettings::on_playersCount_currentIndexChanged(int index) } -void PlayerSettings::on_pushButton_clicked() +void PlayerSettingsDialog::on_pushButton_clicked() { for(auto * w : paramWidgets) { diff --git a/mapeditor/playersettings.h b/mapeditor/PlayerSettingsDialog.h similarity index 70% rename from mapeditor/playersettings.h rename to mapeditor/PlayerSettingsDialog.h index 84960e50e..751be3c7b 100644 --- a/mapeditor/playersettings.h +++ b/mapeditor/PlayerSettingsDialog.h @@ -14,16 +14,16 @@ #include "playerparams.h" namespace Ui { -class PlayerSettings; +class PlayerSettingsDialog; } -class PlayerSettings : public QDialog +class PlayerSettingsDialog : public QDialog { Q_OBJECT public: - explicit PlayerSettings(MapController & controller, QWidget *parent = nullptr); - ~PlayerSettings(); + explicit PlayerSettingsDialog(MapController & controller, QWidget *parent = nullptr); + ~PlayerSettingsDialog(); private slots: @@ -32,7 +32,7 @@ private slots: void on_pushButton_clicked(); private: - Ui::PlayerSettings *ui; + Ui::PlayerSettingsDialog *ui; std::vector paramWidgets; diff --git a/mapeditor/playersettings.ui b/mapeditor/PlayerSettingsDialog.ui similarity index 92% rename from mapeditor/playersettings.ui rename to mapeditor/PlayerSettingsDialog.ui index 3e51fceee..084c79140 100644 --- a/mapeditor/playersettings.ui +++ b/mapeditor/PlayerSettingsDialog.ui @@ -1,9 +1,9 @@ - PlayerSettings - + PlayerSettingsDialog + - Qt::WindowModal + Qt::WindowModality::WindowModal @@ -14,7 +14,7 @@ - Qt::NoFocus + Qt::FocusPolicy::NoFocus Player settings @@ -33,8 +33,8 @@ 0 0 - 628 - 187 + 634 + 201 diff --git a/mapeditor/campaigneditor/campaigneditor.cpp b/mapeditor/campaigneditor/campaigneditor.cpp index 6003679f3..89ee4877f 100644 --- a/mapeditor/campaigneditor/campaigneditor.cpp +++ b/mapeditor/campaigneditor/campaigneditor.cpp @@ -19,6 +19,7 @@ #include "../../lib/VCMIDirs.h" #include "../../lib/json/JsonNode.h" +#include "../../lib/campaign/CampaignRegionsHandler.h" #include "../../lib/campaign/CampaignState.h" #include "../../lib/mapping/CMap.h" @@ -200,7 +201,7 @@ void CampaignEditor::on_actionNew_triggered() return; campaignState = std::make_unique(); - campaignState->campaignRegions = CampaignRegions::getLegacy(0); + campaignState->campaignRegions = *LIBRARY->campaignRegions->getByIndex(0); for (int i = 0; i < campaignState->campaignRegions.regions.size(); i++) { CampaignScenario s; diff --git a/mapeditor/campaigneditor/campaignproperties.cpp b/mapeditor/campaigneditor/campaignproperties.cpp index 1f1120dde..e10b47143 100644 --- a/mapeditor/campaigneditor/campaignproperties.cpp +++ b/mapeditor/campaigneditor/campaignproperties.cpp @@ -13,6 +13,7 @@ #include "../../lib/GameLibrary.h" #include "../../lib/texts/CGeneralTextHandler.h" +#include "../../lib/campaign/CampaignRegionsHandler.h" #include "../../lib/campaign/CampaignState.h" #include "../../lib/constants/StringConstants.h" #include "../../lib/json/JsonNode.h" @@ -89,7 +90,7 @@ void CampaignProperties::on_buttonBox_clicked(QAbstractButton * button) void CampaignProperties::on_comboBoxRegionPreset_currentIndexChanged(int index) { if(ui->comboBoxRegionPreset->count() == 21 && ui->comboBoxRegionPreset->currentIndex() != 20) - regions = CampaignRegions::getLegacy(ui->comboBoxRegionPreset->currentIndex()); + regions = *LIBRARY->campaignRegions->getByIndex(index); loadRegion(); } diff --git a/mapeditor/campaigneditor/scenarioproperties.cpp b/mapeditor/campaigneditor/scenarioproperties.cpp index b2004ac30..aed06a84d 100644 --- a/mapeditor/campaigneditor/scenarioproperties.cpp +++ b/mapeditor/campaigneditor/scenarioproperties.cpp @@ -218,11 +218,13 @@ void ScenarioProperties::reloadMapRelatedUi() for(int i = 0; i < ui->comboBoxStartingBonusPlayerPosition->count(); ++i) // copy from player dropdown comboBoxPlayer->addItem(ui->comboBoxStartingBonusPlayerPosition->itemText(i), ui->comboBoxStartingBonusPlayerPosition->itemData(i)); + const auto & bonusValue = bonus.getValue(); + // set selected - int index = comboBoxPlayer->findData(bonus.info1); + int index = comboBoxPlayer->findData(bonusValue.startingPlayer.getNum()); if(index != -1) comboBoxPlayer->setCurrentIndex(index); - index = comboBoxOption->findData(bonus.info2); + index = comboBoxOption->findData(bonusValue.scenario.getNum()); if(index != -1) comboBoxOption->setCurrentIndex(index); @@ -337,12 +339,24 @@ void ScenarioProperties::on_buttonBox_clicked(QAbstractButton * button) { for (int i = 0; i < ui->tableWidgetStartingCrossover->rowCount(); ++i) { - CampaignBonus bonus; - bonus.type = ui->radioButtonStartingOptionHeroCrossover->isChecked() ? CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO : CampaignBonusType::HERO; QComboBox* comboBoxOption = qobject_cast(ui->tableWidgetStartingCrossover->cellWidget(i, 0)); QComboBox* comboBoxPlayer = qobject_cast(ui->tableWidgetStartingCrossover->cellWidget(i, 1)); - bonus.info1 = comboBoxPlayer->currentData().toInt(); - bonus.info2 = comboBoxOption->currentData().toInt(); + CampaignBonus bonus; + + if (ui->radioButtonStartingOptionHeroCrossover->isChecked()) + { + bonus = CampaignBonusHeroesFromScenario{ + PlayerColor(comboBoxPlayer->currentData().toInt()), + CampaignScenarioID(comboBoxOption->currentData().toInt()) + }; + } + else + { + bonus = CampaignBonusStartingHero{ + PlayerColor(comboBoxPlayer->currentData().toInt()), + HeroTypeID(comboBoxOption->currentData().toInt()) + }; + } campaignState->scenarios.at(scenario).travelOptions.bonusesToChoose.push_back(bonus); } } @@ -476,8 +490,8 @@ void ScenarioProperties::on_pushButtonStartingAdd_clicked() } else { - CampaignBonus bonus; - bonus.type = CampaignBonusType::SPELL; + CampaignBonus bonus = CampaignBonusSpell{ HeroTypeID(), SpellID() }; + if(StartingBonus::showStartingBonus(PlayerColor(ui->comboBoxStartingBonusPlayerPosition->currentData().toInt()), map, bonus)) { QListWidgetItem * item = new QListWidgetItem(StartingBonus::getBonusListTitle(bonus, map)); diff --git a/mapeditor/campaigneditor/startingbonus.cpp b/mapeditor/campaigneditor/startingbonus.cpp index 7cac96dda..cd312a0eb 100644 --- a/mapeditor/campaigneditor/startingbonus.cpp +++ b/mapeditor/campaigneditor/startingbonus.cpp @@ -139,131 +139,139 @@ void StartingBonus::loadBonus() comboBox->setCurrentIndex(index); }; - switch (bonus.type) + switch(bonus.getType()) { - case CampaignBonusType::SPELL: - ui->radioButtonSpell->setChecked(true); - on_radioButtonSpell_toggled(); - setComboBoxValue(ui->comboBoxSpellRecipient, bonus.info1); - setComboBoxValue(ui->comboBoxSpellSpell, bonus.info2); - break; - case CampaignBonusType::MONSTER: - ui->radioButtonCreature->setChecked(true); - on_radioButtonCreature_toggled(); - setComboBoxValue(ui->comboBoxCreatureRecipient, bonus.info1); - setComboBoxValue(ui->comboBoxCreatureCreatureType, bonus.info2); - ui->spinBoxCreatureQuantity->setValue(bonus.info3); - break; - case CampaignBonusType::BUILDING: - ui->radioButtonBuilding->setChecked(true); - on_radioButtonBuilding_toggled(); - setComboBoxValue(ui->comboBoxBuildingBuilding, bonus.info1); - break; - case CampaignBonusType::ARTIFACT: - ui->radioButtonArtifact->setChecked(true); - on_radioButtonArtifact_toggled(); - setComboBoxValue(ui->comboBoxArtifactRecipient, bonus.info1); - setComboBoxValue(ui->comboBoxArtifactArtifact, bonus.info2); - break; - case CampaignBonusType::SPELL_SCROLL: - ui->radioButtonSpellScroll->setChecked(true); - on_radioButtonSpellScroll_toggled(); - setComboBoxValue(ui->comboBoxSpellScrollRecipient, bonus.info1); - setComboBoxValue(ui->comboBoxSpellScrollSpell, bonus.info2); - break; - case CampaignBonusType::PRIMARY_SKILL: - ui->radioButtonPrimarySkill->setChecked(true); - on_radioButtonPrimarySkill_toggled(); - setComboBoxValue(ui->comboBoxPrimarySkillRecipient, bonus.info1); - ui->spinBoxPrimarySkillAttack->setValue((bonus.info2 >> 0) & 0xff); - ui->spinBoxPrimarySkillDefense->setValue((bonus.info2 >> 8) & 0xff); - ui->spinBoxPrimarySkillSpell->setValue((bonus.info2 >> 16) & 0xff); - ui->spinBoxPrimarySkillKnowledge->setValue((bonus.info2 >> 24) & 0xff); - break; - case CampaignBonusType::SECONDARY_SKILL: - ui->radioButtonSecondarySkill->setChecked(true); - on_radioButtonSecondarySkill_toggled(); - setComboBoxValue(ui->comboBoxSecondarySkillRecipient, bonus.info1); - setComboBoxValue(ui->comboBoxSecondarySkillSecondarySkill, bonus.info2); - setComboBoxValue(ui->comboBoxSecondarySkillMastery, bonus.info3); - break; - case CampaignBonusType::RESOURCE: - ui->radioButtonResource->setChecked(true); - on_radioButtonResource_toggled(); - setComboBoxValue(ui->comboBoxResourceResourceType, bonus.info1); - ui->spinBoxResourceQuantity->setValue(bonus.info2); - break; - - default: - break; + case CampaignBonusType::SPELL: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonSpell->setChecked(true); + on_radioButtonSpell_toggled(); + setComboBoxValue(ui->comboBoxSpellRecipient, bonusValue.hero.getNum()); + setComboBoxValue(ui->comboBoxSpellSpell, bonusValue.spell.getNum()); + break; + } + case CampaignBonusType::MONSTER: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonCreature->setChecked(true); + on_radioButtonCreature_toggled(); + setComboBoxValue(ui->comboBoxCreatureRecipient, bonusValue.hero.getNum()); + setComboBoxValue(ui->comboBoxCreatureCreatureType, bonusValue.creature.getNum()); + ui->spinBoxCreatureQuantity->setValue(bonusValue.amount); + break; + } + case CampaignBonusType::BUILDING: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonBuilding->setChecked(true); + on_radioButtonBuilding_toggled(); + setComboBoxValue(ui->comboBoxBuildingBuilding, bonusValue.buildingDecoded.getNum()); + break; + } + case CampaignBonusType::ARTIFACT: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonArtifact->setChecked(true); + on_radioButtonArtifact_toggled(); + setComboBoxValue(ui->comboBoxArtifactRecipient, bonusValue.hero.getNum()); + setComboBoxValue(ui->comboBoxArtifactArtifact, bonusValue.artifact.getNum()); + break; + } + case CampaignBonusType::SPELL_SCROLL: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonSpellScroll->setChecked(true); + on_radioButtonSpellScroll_toggled(); + setComboBoxValue(ui->comboBoxSpellScrollRecipient, bonusValue.hero.getNum()); + setComboBoxValue(ui->comboBoxSpellScrollSpell, bonusValue.spell.getNum()); + break; + } + case CampaignBonusType::PRIMARY_SKILL: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonPrimarySkill->setChecked(true); + on_radioButtonPrimarySkill_toggled(); + setComboBoxValue(ui->comboBoxPrimarySkillRecipient, bonusValue.hero.getNum()); + ui->spinBoxPrimarySkillAttack->setValue(bonusValue.amounts[0]); + ui->spinBoxPrimarySkillDefense->setValue(bonusValue.amounts[0]); + ui->spinBoxPrimarySkillSpell->setValue(bonusValue.amounts[0]); + ui->spinBoxPrimarySkillKnowledge->setValue(bonusValue.amounts[0]); + break; + } + case CampaignBonusType::SECONDARY_SKILL: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonSecondarySkill->setChecked(true); + on_radioButtonSecondarySkill_toggled(); + setComboBoxValue(ui->comboBoxSecondarySkillRecipient, bonusValue.hero.getNum()); + setComboBoxValue(ui->comboBoxSecondarySkillSecondarySkill, bonusValue.skill.getNum()); + setComboBoxValue(ui->comboBoxSecondarySkillMastery, bonusValue.mastery); + break; + } + case CampaignBonusType::RESOURCE: + { + const auto & bonusValue = bonus.getValue(); + ui->radioButtonResource->setChecked(true); + on_radioButtonResource_toggled(); + setComboBoxValue(ui->comboBoxResourceResourceType, bonusValue.resource.getNum()); + ui->spinBoxResourceQuantity->setValue(bonusValue.amount); + break; + } + + default: + break; } } void StartingBonus::saveBonus() { if(ui->radioButtonSpell->isChecked()) - bonus.type = CampaignBonusType::SPELL; + bonus = CampaignBonusSpell{ + HeroTypeID(ui->comboBoxSpellRecipient->currentData().toInt()), + SpellID(ui->comboBoxSpellSpell->currentData().toInt()) + }; else if(ui->radioButtonCreature->isChecked()) - bonus.type = CampaignBonusType::MONSTER; + bonus = CampaignBonusCreatures{ + HeroTypeID(ui->comboBoxCreatureRecipient->currentData().toInt()), + CreatureID(ui->comboBoxCreatureCreatureType->currentData().toInt()), + int32_t(ui->spinBoxCreatureQuantity->value()) + }; else if(ui->radioButtonBuilding->isChecked()) - bonus.type = CampaignBonusType::BUILDING; + bonus = CampaignBonusBuilding{ + BuildingID{}, + BuildingID(ui->comboBoxBuildingBuilding->currentData().toInt()) + }; else if(ui->radioButtonArtifact->isChecked()) - bonus.type = CampaignBonusType::ARTIFACT; + bonus = CampaignBonusArtifact{ + HeroTypeID(ui->comboBoxCreatureRecipient->currentData().toInt()), + ArtifactID(ui->comboBoxArtifactArtifact->currentData().toInt()) + }; else if(ui->radioButtonSpellScroll->isChecked()) - bonus.type = CampaignBonusType::SPELL_SCROLL; + bonus = CampaignBonusSpellScroll{ + HeroTypeID(ui->comboBoxCreatureRecipient->currentData().toInt()), + SpellID(ui->comboBoxSpellScrollSpell->currentData().toInt()) + }; else if(ui->radioButtonPrimarySkill->isChecked()) - bonus.type = CampaignBonusType::PRIMARY_SKILL; + bonus = CampaignBonusPrimarySkill{ + HeroTypeID(ui->comboBoxCreatureRecipient->currentData().toInt()), + { + uint8_t(ui->spinBoxPrimarySkillAttack->value()), + uint8_t(ui->spinBoxPrimarySkillDefense->value()), + uint8_t(ui->spinBoxPrimarySkillSpell->value()), + uint8_t(ui->spinBoxPrimarySkillKnowledge->value()), + } + }; else if(ui->radioButtonSecondarySkill->isChecked()) - bonus.type = CampaignBonusType::SECONDARY_SKILL; + bonus = CampaignBonusSecondarySkill{ + HeroTypeID(ui->comboBoxCreatureRecipient->currentData().toInt()), + SecondarySkill(ui->comboBoxSecondarySkillSecondarySkill->currentData().toInt()), + int32_t(ui->comboBoxSecondarySkillMastery->currentData().toInt()) + }; else if(ui->radioButtonResource->isChecked()) - bonus.type = CampaignBonusType::RESOURCE; - - bonus.info1 = 0; - bonus.info2 = 0; - bonus.info3 = 0; - - switch (bonus.type) - { - case CampaignBonusType::SPELL: - bonus.info1 = ui->comboBoxSpellRecipient->currentData().toInt(); - bonus.info2 = ui->comboBoxSpellSpell->currentData().toInt(); - break; - case CampaignBonusType::MONSTER: - bonus.info1 = ui->comboBoxCreatureRecipient->currentData().toInt(); - bonus.info2 = ui->comboBoxCreatureCreatureType->currentData().toInt(); - bonus.info3 = ui->spinBoxCreatureQuantity->value(); - break; - case CampaignBonusType::BUILDING: - bonus.info1 = ui->comboBoxBuildingBuilding->currentData().toInt(); - break; - case CampaignBonusType::ARTIFACT: - bonus.info1 = ui->comboBoxArtifactRecipient->currentData().toInt(); - bonus.info2 = ui->comboBoxArtifactArtifact->currentData().toInt(); - break; - case CampaignBonusType::SPELL_SCROLL: - bonus.info1 = ui->comboBoxSpellScrollRecipient->currentData().toInt(); - bonus.info2 = ui->comboBoxSpellScrollSpell->currentData().toInt(); - break; - case CampaignBonusType::PRIMARY_SKILL: - bonus.info1 = ui->comboBoxPrimarySkillRecipient->currentData().toInt(); - bonus.info2 |= ui->spinBoxPrimarySkillAttack->value() << 0; - bonus.info2 |= ui->spinBoxPrimarySkillDefense->value() << 8; - bonus.info2 |= ui->spinBoxPrimarySkillSpell->value() << 16; - bonus.info2 |= ui->spinBoxPrimarySkillKnowledge->value() << 24; - break; - case CampaignBonusType::SECONDARY_SKILL: - bonus.info1 = ui->comboBoxSecondarySkillRecipient->currentData().toInt(); - bonus.info2 = ui->comboBoxSecondarySkillSecondarySkill->currentData().toInt(); - bonus.info3 = ui->comboBoxSecondarySkillMastery->currentData().toInt(); - break; - case CampaignBonusType::RESOURCE: - bonus.info1 = ui->comboBoxResourceResourceType->currentData().toInt(); - bonus.info2 = ui->spinBoxResourceQuantity->value(); - break; - - default: - break; - } + bonus = CampaignBonusStartingResources{ + GameResID(ui->comboBoxResourceResourceType->currentData().toInt()), + int32_t(ui->spinBoxResourceQuantity->value()) + }; } void StartingBonus::on_buttonBox_clicked(QAbstractButton * button) @@ -309,40 +317,66 @@ QString StartingBonus::getBonusListTitle(CampaignBonus bonus, std::shared_ptr> 0) & 0xff).arg((bonus.info2 >> 8) & 0xff).arg((bonus.info2 >> 16) & 0xff).arg((bonus.info2 >> 24) & 0xff).arg(getHeroName(bonus.info1)); - case CampaignBonusType::SECONDARY_SKILL: - return tr("Secondary skill"); - case CampaignBonusType::RESOURCE: - return tr("Resource"); + case CampaignBonusType::SPELL: + { + const auto & bonusValue = bonus.getValue(); + return tr("%1 spell for %2").arg(getSpellName(bonusValue.spell)).arg(getHeroName(bonusValue.hero)); + } + case CampaignBonusType::MONSTER: + { + const auto & bonusValue = bonus.getValue(); + return tr("%1 %2 for %3").arg(bonusValue.amount).arg(getMonsterName(bonusValue.creature, bonusValue.amount)).arg(getHeroName(bonusValue.hero)); + } + case CampaignBonusType::BUILDING: + { + return tr("Building"); + } + case CampaignBonusType::ARTIFACT: + { + const auto & bonusValue = bonus.getValue(); + return tr("%1 artifact for %2").arg(getArtifactName(bonusValue.artifact)).arg(getHeroName(bonusValue.hero)); + } + case CampaignBonusType::SPELL_SCROLL: + { + const auto & bonusValue = bonus.getValue(); + return tr("%1 spell scroll for %2").arg(getSpellName(bonusValue.spell)).arg(getHeroName(bonusValue.hero)); + } + case CampaignBonusType::PRIMARY_SKILL: + { + const auto & bonusValue = bonus.getValue(); + return tr("Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5") + .arg(bonusValue.amounts[0]) + .arg(bonusValue.amounts[1]) + .arg(bonusValue.amounts[2]) + .arg(bonusValue.amounts[3]) + .arg(getHeroName(bonusValue.hero)); + } + case CampaignBonusType::SECONDARY_SKILL: + { + return tr("Secondary skill"); + } + case CampaignBonusType::RESOURCE: + { + return tr("Resource"); + } } return {}; } diff --git a/mapeditor/campaigneditor/startingbonus.h b/mapeditor/campaigneditor/startingbonus.h index 5c46be185..3fcbabe08 100644 --- a/mapeditor/campaigneditor/startingbonus.h +++ b/mapeditor/campaigneditor/startingbonus.h @@ -13,7 +13,7 @@ #include "lib/constants/EntityIdentifiers.h" #include "lib/campaign/CampaignState.h" -struct CampaignBonus; +class CampaignBonus; class CMap; namespace Ui { diff --git a/mapeditor/helper.cpp b/mapeditor/helper.cpp index 62982c4ba..652a4db26 100644 --- a/mapeditor/helper.cpp +++ b/mapeditor/helper.cpp @@ -23,7 +23,7 @@ #include "../lib/mapping/MapFormatJson.h" #include "../lib/modding/ModIncompatibility.h" -std::unique_ptr Helper::openMapInternal(const QString & filenameSelect) +std::unique_ptr Helper::openMapInternal(const QString & filenameSelect, IGameInfoCallback * cb) { QFileInfo fi(filenameSelect); std::string fname = fi.fileName().toStdString(); @@ -50,7 +50,7 @@ std::unique_ptr Helper::openMapInternal(const QString & filenameSelect) if(!modList.empty()) throw ModIncompatibility(modList); - return mapService.loadMap(resId, nullptr); + return mapService.loadMap(resId, cb); } else throw std::runtime_error("Corrupted map"); @@ -85,7 +85,9 @@ void Helper::saveCampaign(std::shared_ptr campaignState, const QS auto saver = std::make_shared(io, filename.toStdString()); for(auto & scenario : campaignState->allScenarios()) { - auto map = campaignState->getMap(scenario, nullptr); + EditorCallback cb(nullptr); + auto map = campaignState->getMap(scenario, &cb); + cb.setMap(map.get()); MapController::repairMap(map.get()); CMemoryBuffer serializeBuffer; { diff --git a/mapeditor/helper.h b/mapeditor/helper.h index 90a8b2259..62fa2aa4c 100644 --- a/mapeditor/helper.h +++ b/mapeditor/helper.h @@ -12,10 +12,11 @@ class CMap; class CampaignState; +class IGameInfoCallback; namespace Helper { - std::unique_ptr openMapInternal(const QString &); + std::unique_ptr openMapInternal(const QString &, IGameInfoCallback *); std::shared_ptr openCampaignInternal(const QString &); void saveCampaign(std::shared_ptr campaignState, const QString & filename); -} \ No newline at end of file +} diff --git a/mapeditor/inspector/artifactwidget.cpp b/mapeditor/inspector/artifactwidget.cpp index acfaa497d..ab2301921 100644 --- a/mapeditor/inspector/artifactwidget.cpp +++ b/mapeditor/inspector/artifactwidget.cpp @@ -43,19 +43,18 @@ ArtifactWidget::ArtifactWidget(CArtifactFittingSet & fittingSet, QWidget * paren } ui->possiblePositions->addItem(QString::fromStdString(NArtifactPosition::backpack), ArtifactPosition::BACKPACK_START); fillArtifacts(); - - } void ArtifactWidget::fillArtifacts() { ui->artifact->clear(); auto currentSlot = ui->possiblePositions->currentData().toInt(); - for (const auto& art : LIBRARY->arth->getDefaultAllowed()) + for (const auto & art : LIBRARY->arth->getDefaultAllowed()) { auto artifact = art.toArtifact(); // forbid spell scroll for now as require special handling - if (artifact->canBePutAt(&fittingSet, currentSlot, true) && artifact->getId() != ArtifactID::SPELL_SCROLL) { + if (artifact->canBePutAt(&fittingSet, currentSlot, true) && artifact->getId() != ArtifactID::SPELL_SCROLL) + { ui->artifact->addItem(QString::fromStdString(artifact->getNameTranslated()), QVariant::fromValue(artifact->getIndex())); } } diff --git a/mapeditor/inspector/heroartifactswidget.cpp b/mapeditor/inspector/heroartifactswidget.cpp index a668cdf9f..b5b4c63d6 100644 --- a/mapeditor/inspector/heroartifactswidget.cpp +++ b/mapeditor/inspector/heroartifactswidget.cpp @@ -28,6 +28,9 @@ HeroArtifactsWidget::HeroArtifactsWidget(MapController & controller, CGHeroInsta fittingSet(CArtifactFittingSet(h)) { ui->setupUi(this); + + connect(ui->saveButton, &QPushButton::clicked, this, &HeroArtifactsWidget::onSaveButtonClicked); + connect(ui->cancelButton, &QPushButton::clicked, this, &HeroArtifactsWidget::onCancelButtonClicked); } HeroArtifactsWidget::~HeroArtifactsWidget() @@ -37,9 +40,9 @@ HeroArtifactsWidget::~HeroArtifactsWidget() void HeroArtifactsWidget::on_addButton_clicked() { - ArtifactWidget artifactWidget{ fittingSet, this }; - connect(&artifactWidget, &ArtifactWidget::saveArtifact, this, &HeroArtifactsWidget::onSaveArtifact); - artifactWidget.exec(); + auto * artifactWidget = new ArtifactWidget(fittingSet, this); + connect(artifactWidget, &ArtifactWidget::saveArtifact, this, &HeroArtifactsWidget::onSaveArtifact); + artifactWidget->open(); } void HeroArtifactsWidget::on_removeButton_clicked() @@ -55,6 +58,16 @@ void HeroArtifactsWidget::on_removeButton_clicked() ui->artifacts->removeRow(row); } +void HeroArtifactsWidget::onSaveButtonClicked() +{ + accept(); +} + +void HeroArtifactsWidget::onCancelButtonClicked() +{ + reject(); +} + void HeroArtifactsWidget::onSaveArtifact(int32_t artifactIndex, ArtifactPosition slot) { auto artifact = controller.map()->createArtifact(LIBRARY->arth->getByIndex(artifactIndex)->getId()); @@ -143,8 +156,11 @@ void HeroArtifactsDelegate::setModelData(QWidget * editor, QAbstractItemModel * { if (auto * ed = qobject_cast(editor)) { - ed->commitChanges(); - updateModelData(model, index); + if(ed->result() == QDialog::Accepted) + { + ed->commitChanges(); + updateModelData(model, index); + } } else { @@ -158,6 +174,7 @@ void HeroArtifactsDelegate::updateModelData(QAbstractItemModel * model, const QM for(const auto & [artPosition, artSlotInfo] : hero.artifactsWorn) { auto slotText = NArtifactPosition::namesHero[artPosition.num]; + textList += QString("%1: %2").arg(QString::fromStdString(slotText)).arg(QString::fromStdString(artSlotInfo.getArt()->getType()->getNameTranslated())); } textList += QString("%1:").arg(QString::fromStdString(NArtifactPosition::backpack)); diff --git a/mapeditor/inspector/heroartifactswidget.h b/mapeditor/inspector/heroartifactswidget.h index 75a36fd15..22007dbee 100644 --- a/mapeditor/inspector/heroartifactswidget.h +++ b/mapeditor/inspector/heroartifactswidget.h @@ -38,6 +38,10 @@ private slots: void on_removeButton_clicked(); + void onSaveButtonClicked(); + + void onCancelButtonClicked(); + private: enum Column { diff --git a/mapeditor/inspector/heroartifactswidget.ui b/mapeditor/inspector/heroartifactswidget.ui index c3d326618..bf3cea782 100644 --- a/mapeditor/inspector/heroartifactswidget.ui +++ b/mapeditor/inspector/heroartifactswidget.ui @@ -3,7 +3,7 @@ HeroArtifactsWidget - Qt::NonModal + Qt::WindowModality::NonModal @@ -46,7 +46,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -96,19 +96,19 @@ true - Qt::ScrollBarAlwaysOff + Qt::ScrollBarPolicy::ScrollBarAlwaysOff - QAbstractScrollArea::AdjustToContents + QAbstractScrollArea::SizeAdjustPolicy::AdjustToContents - QAbstractItemView::NoEditTriggers + QAbstractItemView::EditTrigger::NoEditTriggers - QAbstractItemView::SingleSelection + QAbstractItemView::SelectionMode::SingleSelection - QAbstractItemView::SelectRows + QAbstractItemView::SelectionBehavior::SelectRows true @@ -137,6 +137,37 @@ + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Save + + + + + + + Cancel + + + + + diff --git a/mapeditor/inspector/inspector.cpp b/mapeditor/inspector/inspector.cpp index 9e2870260..6767f8053 100644 --- a/mapeditor/inspector/inspector.cpp +++ b/mapeditor/inspector/inspector.cpp @@ -41,6 +41,7 @@ Initializer::Initializer(MapController & controller, CGObjectInstance * o, const , defaultPlayer(pl) { logGlobal->info("New object instance initialized"); + o->cb = controller.getCallback(); ///IMPORTANT! initialize order should be from base objects to derived objects INIT_OBJ_TYPE(CGResource); INIT_OBJ_TYPE(CGArtifact); @@ -74,10 +75,10 @@ void Initializer::initialize(CGSignBottle * o) void Initializer::initialize(CGCreature * o) { if(!o) return; - + o->character = CGCreature::Character::HOSTILE; if(!o->hasStackAtSlot(SlotID(0))) - o->putStack(SlotID(0), std::make_unique(o->cb, CreatureID(o->subID), 0, false)); + o->putStack(SlotID(0), std::make_unique(o->cb, CreatureID(o->subID), 1, false)); } void Initializer::initialize(CGDwelling * o) @@ -206,6 +207,13 @@ void Initializer::initialize(CGArtifact * o) auto a = controller.map()->createScroll(*RandomGeneratorUtil::nextItem(out, CRandomGenerator::getDefault())); o->setArtifactInstance(a); } + else if(o->ID == Obj::ARTIFACT) + { + auto instance = controller.map()->createArtifact(o->getArtifactType()); + o->setArtifactInstance(instance); + } + else + throw std::runtime_error("Unimplemented initializer for CGArtifact object ID = "+ std::to_string(o->ID.getNum())); } void Initializer::initialize(CGMine * o) @@ -365,11 +373,11 @@ void Inspector::updateProperties(CGTownInstance * o) void Inspector::updateProperties(CGArtifact * o) { if(!o) return; - + addProperty(QObject::tr("Message"), o->message, false); - + const CArtifactInstance * instance = o->getArtifactInstance(); - if(instance) + if(instance && o->ID == Obj::SPELL_SCROLL) { SpellID spellId = instance->getScrollSpellID(); if(spellId != SpellID::NONE) diff --git a/mapeditor/inspector/rewardswidget.cpp b/mapeditor/inspector/rewardswidget.cpp index 3ad14d6dd..103aa32da 100644 --- a/mapeditor/inspector/rewardswidget.cpp +++ b/mapeditor/inspector/rewardswidget.cpp @@ -13,10 +13,13 @@ #include "../lib/GameLibrary.h" #include "../lib/CSkillHandler.h" #include "../lib/spells/CSpellHandler.h" +#include "../lib/CBonusTypeHandler.h" #include "../lib/CCreatureHandler.h" #include "../lib/constants/StringConstants.h" #include "../lib/entities/artifact/CArtifact.h" #include "../lib/mapping/CMap.h" +#include "../lib/modding/IdentifierStorage.h" +#include "../lib/modding/ModScope.h" #include "../lib/rewardable/Configuration.h" #include "../lib/rewardable/Limiter.h" #include "../lib/rewardable/Reward.h" @@ -183,8 +186,8 @@ RewardsWidget::RewardsWidget(CMap & m, CRewardableObject & p, QWidget *parent) : //fill bonuses for(auto & s : bonusDurationMap) ui->bonusDuration->addItem(QString::fromStdString(s.first)); - for(auto & s : bonusNameMap) - ui->bonusType->addItem(QString::fromStdString(s.first)); + for(auto & s : LIBRARY->bth->getAllObjets()) + ui->bonusType->addItem(QString::fromStdString(LIBRARY->bth->bonusToString(s))); //set default values if(dynamic_cast(&object)) @@ -340,9 +343,9 @@ void RewardsWidget::saveCurrentVisitInfo(int index) for(int i = 0; i < ui->bonuses->rowCount(); ++i) { auto dur = bonusDurationMap.at(ui->bonuses->item(i, 0)->text().toStdString()); - auto typ = bonusNameMap.at(ui->bonuses->item(i, 1)->text().toStdString()); + auto typ = static_cast(*LIBRARY->identifiers()->getIdentifier(ModScope::scopeBuiltin(), "bonus", ui->bonuses->item(i, 1)->text().toStdString())); auto val = ui->bonuses->item(i, 2)->data(Qt::UserRole).toInt(); - vinfo.reward.heroBonuses.emplace_back(dur, typ, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(object.id)); + vinfo.reward.heroBonuses.push_back(std::make_shared(dur, typ, BonusSource::OBJECT_INSTANCE, val, BonusSourceID(object.id))); } vinfo.limiter.dayOfWeek = ui->lDayOfWeek->currentIndex(); @@ -480,7 +483,7 @@ void RewardsWidget::loadCurrentVisitInfo(int index) for(auto & i : vinfo.reward.heroBonuses) { - auto dur = vstd::findKey(bonusDurationMap, i.duration); + auto dur = vstd::findKey(bonusDurationMap, i->duration); for(int i = 0; i < ui->bonusDuration->count(); ++i) { if(ui->bonusDuration->itemText(i) == QString::fromStdString(dur)) @@ -490,7 +493,7 @@ void RewardsWidget::loadCurrentVisitInfo(int index) } } - auto typ = vstd::findKey(bonusNameMap, i.type); + std::string typ = LIBRARY->bth->bonusToString(i->type); for(int i = 0; i < ui->bonusType->count(); ++i) { if(ui->bonusType->itemText(i) == QString::fromStdString(typ)) @@ -500,7 +503,7 @@ void RewardsWidget::loadCurrentVisitInfo(int index) } } - ui->bonusValue->setValue(i.val); + ui->bonusValue->setValue(i->val); on_bonusAdd_clicked(); } @@ -816,7 +819,8 @@ void RewardsDelegate::updateModelData(QAbstractItemModel * model, const QModelIn QStringList bonusesList; for (auto & bonus : vinfo.reward.heroBonuses) { - bonusesList += QString("%1 %2 (%3)").arg(QString::fromStdString(vstd::findKey(bonusDurationMap, bonus.duration))).arg(QString::fromStdString(vstd::findKey(bonusNameMap, bonus.type))).arg(bonus.val); + std::string bonusName = LIBRARY->bth->bonusToString(bonus->type); + bonusesList += QString("%1 %2 (%3)").arg(QString::fromStdString(vstd::findKey(bonusDurationMap, bonus->duration))).arg(QString::fromStdString(bonusName)).arg(bonus->val); } textList += QObject::tr("Bonuses: %1").arg(bonusesList.join(", ")); } diff --git a/mapeditor/mainwindow.cpp b/mapeditor/mainwindow.cpp index e437b112b..3a2f9a062 100644 --- a/mapeditor/mainwindow.cpp +++ b/mapeditor/mainwindow.cpp @@ -46,7 +46,7 @@ #include "mapsettings/mapsettings.h" #include "mapsettings/translations.h" #include "mapsettings/modsettings.h" -#include "playersettings.h" +#include "PlayerSettingsDialog.h" #include "validator.h" #include "helper.h" #include "campaigneditor/campaigneditor.h" @@ -395,7 +395,7 @@ bool MainWindow::openMap(const QString & filenameSelect) { try { - controller.setMap(Helper::openMapInternal(filenameSelect)); + controller.setMap(Helper::openMapInternal(filenameSelect, controller.getCallback())); } catch(const ModIncompatibility & e) { @@ -703,7 +703,7 @@ void MainWindow::addGroupIntoCatalog(const QString & groupName, bool useCustomNa } //create object to extract name - auto temporaryObj(factory->create(nullptr, templ)); + auto temporaryObj(factory->create(controller.getCallback(), templ)); QString translated = useCustomName ? QString::fromStdString(temporaryObj->getObjectName().c_str()) : subGroupName; itemType->setText(translated); @@ -1143,7 +1143,7 @@ void MainWindow::on_actionMapSettings_triggered() void MainWindow::on_actionPlayers_settings_triggered() { - auto settingsDialog = new PlayerSettings(controller, this); + auto settingsDialog = new PlayerSettingsDialog(controller, this); settingsDialog->setWindowModality(Qt::WindowModal); settingsDialog->setModal(true); connect(settingsDialog, &QDialog::finished, this, &MainWindow::onPlayersChanged); @@ -1370,7 +1370,8 @@ void MainWindow::on_actionh3m_converter_triggered() for(auto & m : mapFiles) { CMapService mapService; - auto map = Helper::openMapInternal(m); + auto map = Helper::openMapInternal(m, controller.getCallback()); + controller.setCallback(std::make_unique(map.get())); controller.repairMap(map.get()); mapService.saveMap(map, (saveDirectory + '/' + QFileInfo(m).completeBaseName() + ".vmap").toStdString()); } diff --git a/mapeditor/mapcontroller.cpp b/mapeditor/mapcontroller.cpp index 70f6d5448..d6ca9e702 100644 --- a/mapeditor/mapcontroller.cpp +++ b/mapeditor/mapcontroller.cpp @@ -51,6 +51,7 @@ MapController::MapController(MainWindow * m): main(m) _miniscenes[i].reset(new MinimapScene(i)); } connectScenes(); + _cb = std::make_unique(nullptr); } void MapController::connectScenes() @@ -70,6 +71,16 @@ MapController::~MapController() main = nullptr; } +void MapController::setCallback(std::unique_ptr cb) +{ + _cb = std::move(cb); +} + +EditorCallback * MapController::getCallback() +{ + return _cb.get(); +} + const std::unique_ptr & MapController::getMapUniquePtr() const { return _map; @@ -104,6 +115,8 @@ void MapController::repairMap(CMap * map) { if(!map) return; + + assert(map->cb); //make sure events/rumors has name to have proper identifiers int emptyNameId = 1; @@ -126,6 +139,9 @@ void MapController::repairMap(CMap * map) for(auto obj : allImpactedObjects) { + if(obj == nullptr) + continue; + //fix flags if(obj->asOwnable() != nullptr && obj->getOwner() == PlayerColor::UNFLAGGABLE) { @@ -201,7 +217,9 @@ void MapController::repairMap(CMap * map) void MapController::setMap(std::unique_ptr cmap) { + cmap->cb = _cb.get(); _map = std::move(cmap); + _cb->setMap(_map.get()); repairMap(); @@ -355,7 +373,7 @@ void MapController::copyToClipboard(int level) for(auto * obj : selectedObjects) { assert(obj->pos.z == level); - _clipboard.push_back(CMemorySerializer::deepCopy(*obj)); + _clipboard.push_back(CMemorySerializer::deepCopy(*obj, _cb.get())); } } @@ -370,7 +388,7 @@ void MapController::pasteFromClipboard(int level) QStringList errors; for(auto & objUniquePtr : _clipboard) { - auto obj = CMemorySerializer::deepCopyShared(*objUniquePtr); + auto obj = CMemorySerializer::deepCopyShared(*objUniquePtr, _cb.get()); QString errorMsg; if(!canPlaceObject(obj.get(), errorMsg)) { @@ -381,7 +399,8 @@ void MapController::pasteFromClipboard(int level) if(_map->isInTheMap(newPos)) obj->pos = newPos; obj->pos.z = level; - + + obj->id = {}; Initializer init(*this, obj.get(), defaultPlayer); _map->getEditManager()->insertObject(obj); _scenes[level]->selectionObjectsView.selectObject(obj.get()); diff --git a/mapeditor/mapcontroller.h b/mapeditor/mapcontroller.h index 9e6134733..6ed3d90c3 100644 --- a/mapeditor/mapcontroller.h +++ b/mapeditor/mapcontroller.h @@ -13,6 +13,7 @@ #include "maphandler.h" #include "mapview.h" #include "lib/modding/ModVerificationInfo.h" +#include "../lib/callback/EditorCallback.h" VCMI_LIB_NAMESPACE_BEGIN using ModCompatibilityInfo = std::map; @@ -31,6 +32,8 @@ public: MapController(const MapController &&) = delete; ~MapController(); + void setCallback(std::unique_ptr); + EditorCallback * getCallback(); void setMap(std::unique_ptr); void initObstaclePainters(CMap * map); @@ -93,6 +96,7 @@ signals: void requestModsUpdate(const ModCompatibilityInfo & mods, bool leaveCheckedUnchanged) const; private: + std::unique_ptr _cb; std::unique_ptr _map; std::unique_ptr _mapHandler; MainWindow * main; diff --git a/mapeditor/mapview.cpp b/mapeditor/mapview.cpp index 89b96f3e9..1d478040d 100644 --- a/mapeditor/mapview.cpp +++ b/mapeditor/mapview.cpp @@ -594,7 +594,7 @@ void MapView::dragEnterEvent(QDragEnterEvent * event) auto factory = LIBRARY->objtypeh->getHandlerFor(objId, objSubId); auto templ = factory->getTemplates()[templateId]; controller->discardObject(sc->level); - controller->createObject(sc->level, factory->create(nullptr, templ)); + controller->createObject(sc->level, factory->create(controller->getCallback(), templ)); } } diff --git a/mapeditor/playerparams.h b/mapeditor/playerparams.h index 57601d2c3..5c650cbfe 100644 --- a/mapeditor/playerparams.h +++ b/mapeditor/playerparams.h @@ -18,6 +18,8 @@ namespace Ui { class PlayerParams; } +class QListWidgetItem; + class PlayerParams : public QWidget { Q_OBJECT diff --git a/mapeditor/translation/belarusian.ts b/mapeditor/translation/belarusian.ts index 11f621685..d889328a5 100644 --- a/mapeditor/translation/belarusian.ts +++ b/mapeditor/translation/belarusian.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Налады арміі Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Шырокі строй Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Цесны строй @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакт Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Апрануць у: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Скасаваць @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдактар кампаній VCMI File - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдагаваць View - + AI-generated, needs review by native speaker; delete this comment afterwards + Выгляд Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Панэль інструментаў Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Адкрыць Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць New - + AI-generated, needs review by native speaker; delete this comment afterwards + Новы Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць як... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Уласцівасці кампаніі Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Уласцівасці сцэнара Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Паказаць поўнае тло Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдактар сцэнара Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Пацверджанне Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Незахаваныя змены будуць страчаныя. Вы ўпэўнены? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Адкрыць мапу All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Усе падтрымліваючыя кампаніі (*.vcmp *.h3c);;Кампаніі VCMI(*.vcmp);;Кампаніі HoMM3(*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць кампанію VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампаніі VCMI (*.vcmp) @@ -156,158 +183,189 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Уласцівасці кампаніі General - + AI-generated, needs review by native speaker; delete this comment afterwards + Агульнае Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва кампаніі Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Апісанне кампаніі Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Аўтар Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кантакт аўтара (напрыклад, e-mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Дата стварэння кампаніі Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версія кампаніі Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музыка Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Складанасць сцэнара выбіраецца карыстальнікам Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэгіёны Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Набор рэгіёнаў Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Фон Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Суфікс Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Префікс Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Даўжыня суфікса колеру Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Рознае Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Загрузка выявы фону Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Выява рамкі відэа Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Уводнае відэа Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Фінальнае відэа Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Карыстальніцкае Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Інфікс X - + AI-generated, needs review by native speaker; delete this comment afterwards + X Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Y Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Пазіцыя надпісу X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Пазіцыя надпісу Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Менш сцэнараў New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Новае наладжванне рэгіёнаў падтрымлівае менш сцэнараў, чым раней. Некаторыя будуць выдалены. Працягнуць? @@ -315,27 +373,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзеі па часе Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Новая падзея @@ -343,47 +406,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва мапы Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Апісанне мапы Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Аўтар Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кантакт аўтара (напрыклад, email) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Час стварэння мапы Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версія мапы Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Абмежаваць максімальны ўзровень герояў Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Складанасць @@ -391,7 +463,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Генерацыя мапы @@ -399,27 +472,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Слот Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакт @@ -427,7 +505,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Уменні героя @@ -435,32 +514,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + TextLabel Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Уменне Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Наладзіць уменні @@ -468,37 +553,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Наладзіць заклёнствы Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 5 @@ -506,783 +598,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Паведамленне аб паразе 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 дзён без горада Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Параметры No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Без асаблівых умоў паразы Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Страта замка Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Страта героя Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Час скончыўся Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Дні без горада MainWindow - + VCMI Map Editor Рэдактар ​​карт VCMI File - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Адкрыць нядаўна Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапа Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдагаваць View - + AI-generated, needs review by native speaker; delete this comment afterwards + Выгляд Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Панэль інструментаў Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Мінімапа Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Прагляд аб’ектаў мапы Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Аглядальнік Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Інспектар Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Уласцівасць Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Значэнне Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Інструменты Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Маляванне Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэрэны Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Дарыгі Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэкі Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Папярэдні прагляд Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Адкрыць Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Больш... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Новы Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць як... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдактар кампаній - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Паказаць падземны ўзровень Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Перадача ходу Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Выразаць Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Скапіяваць Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Уставіць Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Запоўніць Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Запаўняе вобласць перашкодамі Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Сетка Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Агульнае Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва і апісанне мапы Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Налады гульцоў Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Адмяніць Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Паўтарыць Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Сцерці Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Нейтральны Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Праверыць Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Абнавіць знешні выгляд Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Перастварыць перашкоды Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Экспартаваць як... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Пераклады Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Канвэртар h3m Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Канвэртар h3c Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Заблакаваць Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Заблакаваць аб’екты на мапе, каб пазбегнуць выпадковых зменаў Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Разблакаваць Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Разблакаваць усе аб’екты на мапе Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Павялічыць маштаб Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Паменшыць маштаб Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Скінуць маштаб Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Пацверджанне - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Незахаваныя змены будуць страчаныя, вы ўпэўнены? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Патрабуюцца моды + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Не атрымалася адкрыць мапу - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Адкрыць мапу - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Усе падтрымліваемыя мапы (*.vmap *.h3m);;Мапы VCMI(*.vmap);;Мапы HoMM3(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Нядаўна адкрытыя файлы - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Праверка мапы - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапа мае крытычныя памылкі і, хутчэй за ўсё, не будзе прайграна. Адкрыйце Валідатар у меню Мапа, каб убачыць знойдзеныя праблемы - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапа мае памылкі. Адкрыйце Валідатар у меню Мапа, каб убачыць знойдзеныя праблемы - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Не атрымалася захаваць мапу - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць мапу - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапы VCMI (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Гарады - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Аб’екты - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Героі - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурсы - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Банкі - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Жыллё - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Паверхня - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Тэлепорты - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Руднікі + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Трыгеры + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Монстры + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Заданні + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Аб’екты WoG + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Перашкоды + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Іншае - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Праблема з загрузкай модаў - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Крытычная памылка падчас загрузкі модаў. Адключыце памылковыя моды і перазапусціце. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Паказаць паверхню - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Аб’екты не абраныя - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Гэта дзеянне незваротнае. Хочаце працягнуць? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Адбыліся памылкі. %1 аб’ектаў не былі абноўлены - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць як выява - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць мапы для канвертацыі - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапы HoMM3 (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць каталог для захавання пераўтворанных мап - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Аперацыя завершана - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Паспяхова пераўтворана мапаў: %1 - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Не ўдалося пераўтварыць мапу. Аперацыя спынена - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць кампанію для канвертацыі - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампаніі HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць файл прызначэння - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампаніі VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 не можа быць створаны як НЕЙТРАЛЬНЫ. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Адсутнічае неабходны мод + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Хочаце зрабіць гэта зараз? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Мод гэтага аб’екта з’яўляецца абавязковым для карэктнай працы мапы. @@ -1290,67 +1566,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Налады мапы General - + AI-generated, needs review by native speaker; delete this comment afterwards + Агульнае Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Моды Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзеі Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Перамога Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Параза Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Па часе Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Чуткі Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Здольнасці Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Героі Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК @@ -1358,7 +1647,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Немагчыма размясціць аб’ект @@ -1366,7 +1656,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Паведамленне @@ -1374,47 +1665,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Абавязковыя моды для гульні на гэтай мапе Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва мода Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версія Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Аўтаматычнае прызначэнне Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Усталяваць неабходныя моды на падставе аб’ектаў, размешчаных на мапе. Гэты метад можа выклікаць праблемы пры выкарыстанні мадыфікаваных узнагарод, гарнізонаў і г.д. Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Моды аб’ектаў мапы Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Усталяваць усе моды з гульнявым зместам як абавязковыя Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Моды з поўным зместам @@ -1422,57 +1722,95 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец/ШІ CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Толькі ШІ Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Каманда Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўны горад Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Колер ... - + AI-generated, needs review by native speaker; delete this comment afterwards + ... Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Выпадковая фракцыя Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварыць героя ў галоўным горадзе (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (па змаўчанні) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Без каманды Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ID гульца: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць гульца + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Немагчыма стварыць героя як НЕЙТРАЛЬНАГА + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Пераключыцеся на аднаго з даступных гульцоў: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Спалучэнне клавіш: %1 @@ -1480,22 +1818,26 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Налады гульца Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гульцы 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 1 Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК @@ -1503,179 +1845,212 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Партрэт ... - + AI-generated, needs review by native speaker; delete this comment afterwards + ... Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Па змаўчанні QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Пачатковец + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Прасунуты + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Эксперт - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Другасныя ўменні па змаўчанні: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Другасныя ўменні: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Паслухмяны Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Дабразычлівы Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Агрэсіўны Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Варожы Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзікі No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Без патруля POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + РАНГ СІЛЫ HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + ТЫП ГЕРОЯ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Клас героя Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Партрэт Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Уменні Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - - + %n плітка(і) + %n плітка(і) + %n плітка(і) Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Будынкі Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзеі Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурс Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Узнагарода: артыфакт Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Заданне Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Ідэнтыфікатар ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва інстанцыі IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + Статычны neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + нейтральны Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Армія @@ -1688,31 +2063,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Уладальнік Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Як у горада Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Падраздзяленні, якія можна выдаліць Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып заглушкі Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Ранг сілы @@ -1720,67 +2100,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып героя Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвед MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + МУЖЧЫНА FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ЖАНЧЫНА Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Пол Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Імя Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Біяграфія Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Радыус патруля Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва горада Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Як у гульца @@ -1793,19 +2184,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Паведамленне Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклён Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Прадуктыўнасць @@ -1813,270 +2207,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Колькасць Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Персанаж Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць горад Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Ніколі не ўцякае Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Не расце Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Узнагарода Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць пасля Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Трыгер чалавека Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Трыгер ШІ First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст пры першым візіце Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст пры наступных візітах Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст пасля выканання Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Паўтараць заданне Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Абмежаванне па часе UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + НЕМАГЧЫМА ПАЗНАЧЫЦЬ - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Немагчыма размясціць аб’ект - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + На мапе можа быць толькі адзін артэфакт Грааля. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (падмодуль %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Мод '%1'%2 неабходны для аб’екта на мапе. +Дадайце яго ў спіс патрабуемых модаў у Мапа->Агульныя налады. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Карыстальніцкія заклёнствы: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы па змаўчанні - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Па змаўчанні Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Заданне: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень тыдня: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Мінула дзён: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень героя: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвед героя: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ачкі маны: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Працэнт маны: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўныя навыкі: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурсы: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Другасныя навыкі: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварэнні: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Героі: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Класы герояў: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гульцы: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Узнагароды: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Паведамленне пра ўзнагароду: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Розніца маны: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Ачкі перамяшчэння: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Працэнт перамяшчэння: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклён выкарыстаны: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонусы: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Пабудаваныя будынкі: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Забароненыя будынкі: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзеі горада: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Патрабуецца: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Магчыма: @@ -2084,132 +2536,158 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Мэта місіі Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень тыдня Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Мінула дзён Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень героя Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвед героя Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Ачкі заклёнаў % - + AI-generated, needs review by native speaker; delete this comment afterwards + % Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Забіць героя/монстра ... - + AI-generated, needs review by native speaker; delete this comment afterwards + ... Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўныя навыкі Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Атака Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Абарона Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Сіла заклёнаў Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Веданне Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурсы Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Навыкі Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварэнні Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Героі Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Класы герояў Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гульцы None - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень %1 @@ -2217,7 +2695,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Узнагароды @@ -2225,7 +2704,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць @@ -2233,90 +2713,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэжым наведвання Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэжым выбару On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст пры выбары Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Можна адмовіцца Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Скінуць параметры Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Перыяд days - + AI-generated, needs review by native speaker; delete this comment afterwards + дзён Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Скінуць наведвальнікаў Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Скінуць узнагароды Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып акна Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Інфармацыя аб падзеі Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Паведамленне, якое з’явіцца пры выдачы ўзнагароды Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Узнагарода Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень героя Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвед героя Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Ачкі заклёнаў @@ -2324,171 +2821,202 @@ % - + AI-generated, needs review by native speaker; delete this comment afterwards + % Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Перапаўненне Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Перамяшчэнне Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць аб’ект Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўныя навыкі Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Атака Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Абарона Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Сіла заклёнаў Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Веданне Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурсы Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Навыкі Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварэнні Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонусы Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Працягласць Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Значэнне Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Накласці Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Накласці заклён на мапе прыгод Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклён Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень школы магіі Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Абмежавальнік Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень тыдня Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Мінула дзён Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Героі Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Класы герояў Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гульцы - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узнагарода %1 @@ -2496,27 +3024,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Чуткі ў тракціры Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Новая чутка @@ -2525,287 +3058,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Уласцівасці сцэнара General - + AI-generated, needs review by native speaker; delete this comment afterwards + Агульнае Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва рэгіёна Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Колер рэгіёна Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва сцэнара Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл мапы Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Імпартаваць... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Экспартаваць... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Складанасць па змаўчанні Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Перадумовы Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст пры правым кліку на рэгіён Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пралог/Эпілог Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пралог Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Уключана Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Відэа Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музыка Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Голас Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Эпілог Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Перанос Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Перанесеныя героі захоўваюць Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвед Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўныя навыкі Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Другасныя навыкі Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакты All - + AI-generated, needs review by native speaker; delete this comment afterwards + Усё None - + AI-generated, needs review by native speaker; delete this comment afterwards + Нічога Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Перанесеныя артыфакты Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Пачатковыя Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Пачатковыя параметры: Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Пачатковыя бонусы Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Налады пераносу героя Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Налады пачатковага героя Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонус Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Пазіцыя гульца Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Пачатковы бонус Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Перанесены/Пачатковы герой Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдагаваць... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Найлепшы Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Створаны Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Выпадковы No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма мапы Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Адкрыць мапу All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Усе падтрымліваемыя мапы (*.vmap *.h3m);;Мапы VCMI(*.vmap);;Мапы HoMM3(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Памылка Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Не ўдалося адкрыць файл. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Захаваць мапу VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапы VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапы HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Сцэнар-крыніца Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой @@ -2813,12 +3401,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Уласцівасці сцэнара Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Абраць тып бонусу @@ -2826,55 +3416,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклён Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварэнне - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Будынак Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакт Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Скрутак заклёна Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўны навык - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Другасны навык - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурс @@ -2884,118 +3482,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Атрымальнік Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып стварэння Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Колькасць Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Навык атакі Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Навык абароны Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Сіла заклёнаў Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Веданне Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып рэсурсу Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдагаваць пачатковы бонус - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Найлепшы - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Створаны - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Выпадковы - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Агульны (%1 і %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэдкі (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + найлепшы герой - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + створаны герой - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + выпадковы герой - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 заклён для %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 для %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 артыфакт для %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 скрутак заклёна для %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Асноўны навык (Атака: %1, Абарона: %2, Магія: %3, Веданне: %4) для %5 @@ -3003,77 +3624,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзея па часе Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва падзеі Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Увядзіце тэкст паведамлення падзеі affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + уздзейнічае на чалавека affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + уздзейнічае на ШІ Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень першага з’яўлення Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Паўтарыць праз (0 = без паўтору) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Закранутыя гульцы Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурсы type - + AI-generated, needs review by native speaker; delete this comment afterwards + тып qty - + AI-generated, needs review by native speaker; delete this comment afterwards + кольк. Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Аб’екты для выдалення Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК @@ -3081,42 +3717,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Будынкі Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Пабудаваць усё Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Знесці ўсё Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Уключыць усё Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Выключыць усё Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тып Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Уключана Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Пабудавана @@ -3124,77 +3768,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзея горада General - + AI-generated, needs review by native speaker; delete this comment afterwards + Агульнае Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва падзеі Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Увядзіце тэкст паведамлення падзеі Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень першага з’яўлення Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Паўтарыць праз (0 = без паўтору) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Закранутыя гульцы affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + уздзейнічае на чалавека affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + уздзейнічае на ШІ Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Рэсурсы Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Будынкі Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварэнні OK - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень стварэння %1 / Узровень стварэння %1 з паляпшэннем Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень %1 - %2 @@ -3202,7 +3861,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень %1 - %2 @@ -3210,32 +3870,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзеі горада Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Падзеі па часе Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Дадаць Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Дзень %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Новая падзея @@ -3243,17 +3909,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклёнствы Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Наладзіць заклёнствы Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 1 @@ -3262,7 +3931,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклён, які можа з’явіцца ў гільдыі магіі @@ -3271,27 +3941,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклён, які павінен з’явіцца ў гільдыі магіі Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Узровень 5 @@ -3299,43 +3974,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Пераклады мапы Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Мова Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Падтрымліваецца String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Ідэнтыфікатар радка Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Тэкст Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць пераклад Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Мову па змаўчанні нельга выдаліць All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Усе існуючыя тэкставыя запісы для гэтай мовы будуць выдалены. Працягнуць? @@ -3343,117 +4026,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Вынікі праверкі мапы - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапа не загружана - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Для гульца %1 не даступна ніводнай фракцыі - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ніводзін гулец не можа гуляць на гэтай мапе - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Мапа даступная толькі для аднаго гульца і не можа быць запушчана - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ніводзін чалавек-гулец не можа гуляць на гэтай мапе - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Аб’ект %1 прызначаны непрыдатнаму для гульні гульцу %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Скрутак заклёна %1 не мае прывязкі да інстанцыі і павінен быць выдалены - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Артыфакт %1 забаронены наладамі мапы - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец %1 не мае ніводнага горада і героя + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Турма %1 павінна быць НЕЙТРАЛЬНАЙ + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Аб’ект %1, якім можна завалодаць, з’яўляецца НЕПАЗНАЧАЛЬНЫМ, але павінен мець НЕЙТРАЛЬНАГА ці гульца як уладальніка + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 павінен мець уладальніка - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 забаронены наладамі мапы - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 прысутнічае на мапе паўторна - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 мае пусты тып і павінен быць выдалены - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Скрутак заклёна %1 забаронены наладамі мапы - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Гулец %1 не мае пачатковага горада - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва мапы не зададзена - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Апісанне мапы не зададзена - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Мапа сапраўдная і не мае памылак. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Падчас праверкі адбылася выключэнне: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Падчас праверкі адбылася невядомая выключэнне @@ -3461,77 +4167,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Паведамленне аб перамозе Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Толькі для людзей-гульцоў Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Дазволіць стандартную перамогу Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Параметры - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Без асаблівай перамогі - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Захапіць артыфакт - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Наняць стварэнняў - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Назапасіць рэсурсы - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Пабудаваць будынак - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Захапіць горад - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Перамагчы героя - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Даставіць артыфакт - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Забіць монстра + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Любое месца @@ -3539,67 +4260,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварыць новую мапу Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Памер мапы Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Вышыня Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Шырыня XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Выпадковая мапа Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гульцы S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3607,172 +4341,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Выпадкова Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Каманды людзей Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Каманды ШІ Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартны памер Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Адвольны памер Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Падземны ўзровень Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Людзі Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Камп’ютары Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Сіла монстраў Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Слабыя Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Звычайныя Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Моцныя Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Колькасць вады None - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Астравы Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Дарогі Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Зямля Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Жвір Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Машонка Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Шаблон Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Адвольнае зерне Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Стварыць выпадковую мапу OK - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Скасаваць No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма шаблона No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма шаблона для зададзеных параметраў. Немагчыма стварыць выпадковую мапу. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + Сбой генератара мапы (RMG) [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [па змаўчанні] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Шлях да мапы для адкрыцця. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Выцягнуць арыгінальныя архівы H3 у асобную тэчку. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + З вынятага архіва падзяляе TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 і Un44 на асобныя PNG's. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + З вынятага архіва канвертуе асобныя выявы (у тэчцы Images) з .pcx у .png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Выдаліць арыгінальныя файлы, што былі падзелены/ператвораны. diff --git a/mapeditor/translation/bulgarian.ts b/mapeditor/translation/bulgarian.ts index 034b50d4b..61a3e790a 100644 --- a/mapeditor/translation/bulgarian.ts +++ b/mapeditor/translation/bulgarian.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Настройки на армията Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Широка формация Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Тясна формация @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакт Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Екипиране къде: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Отказ @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI Редактор на кампании File - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Редакция View - + AI-generated, needs review by native speaker; delete this comment afterwards + Изглед Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Лента с инструменти Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Отвори Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази New - + AI-generated, needs review by native speaker; delete this comment afterwards + Нов Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази като... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства на кампанията Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства на сценария Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Покажи пълен фон Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор на сценарии Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Потвърждение Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Незаписаните промени ще бъдат загубени, сигурни ли сте? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Отвори карта All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Всички поддържани кампании (*.vcmp *.h3c);;VCMI кампании(*.vcmp);;HoMM3 кампании(*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази кампания VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI кампании (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства на кампанията General - + AI-generated, needs review by native speaker; delete this comment afterwards + Общи Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на кампанията Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Описание на кампанията Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Автор Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Контакт с автора (напр. имейл) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Дата на създаване на кампанията Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версия на кампанията Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музика Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Трудността на сценария се избира от потребителя Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Региони Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Предварително зададени региони Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Фон Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Суфикс Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Префикс Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Дължина на цветния суфикс Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Разни Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Зареждане на фонова картина Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Изображение за видео рамка Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Интро видео Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Аутро видео Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонализирано Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Инфикс @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиция на етикета X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиция на етикета Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + По-малко сценарии New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Новата конфигурация на региона поддържа по-малко сценарии. Някои ще бъдат премахнати. Да продължа ли? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Събития с време Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ново събитие @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на картата Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Описание на картата Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Автор Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Контакт с автора (напр. имейл) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Дата на създаване на картата Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версия на картата Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Ограничаване на максимално ниво на герои Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Трудност @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Генериране на карта @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Слот Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакт @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Умения на героя @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Текстов етикет Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Умение Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонализирай уменията @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонализирай заклинанията Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Съобщение при загуба 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 дни без град Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Параметри No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма специална загуба Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Загуба на замък Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Загуба на герой Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Времето изтече Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Дни без град MainWindow - + VCMI Map Editor Редактор на карти VCMI File - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Последно отваряни Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Карта Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Редакция View - + AI-generated, needs review by native speaker; delete this comment afterwards + Изглед Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Лента с инструменти Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Миникарта Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Изглед на обекти от картата Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Браузър Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Инспектор Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойство Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Стойност Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Инструменти Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Рисуване Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Терени Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Пътища Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Реки Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Преглед Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Отвори Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Още... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Нов Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази като... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор на кампании - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Преглед на подземие Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Проход Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Изрежи Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Копирай Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Постави Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Запълни Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Запълва избраното с препятствия Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Мрежа Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Общи Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Заглавие и описание на картата Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Настройки на играчите Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Отмени Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Повтори Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Изтрий Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Неутрален Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Провери Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Обнови външния вид Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Пресъздай препятствията Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Експортирай като... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Преводи Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m конвертор Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c конвертор Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Заключи Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Заключи обекти на картата, за да се избегнат ненужни промени Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Отключи Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Отключи всички обекти на картата Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Увеличи Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Намали Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Нулирай мащаба Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Потвърждение - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Незаписаните промени ще бъдат загубени, сигурни ли сте? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Необходими са модове + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Неуспешно отваряне на карта - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Отвори карта - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Всички поддържани карти (*.vmap *.h3m);;VCMI карти(*.vmap);;HoMM3 карти(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Последно отворени файлове - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Валидиране на картата - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Картата има критични проблеми и най-вероятно няма да бъде игрална. Отворете Валидатора от менюто Карта, за да видите намерените проблеми - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Картата има някои грешки. Отворете Валидатора от менюто Карта, за да видите намерените проблеми - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Неуспешно запазване на картата - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази карта - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI карти (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Градове - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Обекти - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Герои - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Банки - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Жилища - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Терен - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Телепорти - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Мини + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Тригери + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Чудовища + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Мисии + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Wog обекти + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Препятствия + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Други - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Проблем при зареждане на модове - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Критична грешка при зареждане на модове. Изключете невалидните модове и рестартирайте. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Преглед на повърхността - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма избрани обекти - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Тази операция е необратима. Искате ли да продължите? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Възникнаха грешки. %1 обекта не бяха обновени - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази като изображение - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Изберете карти за конвертиране - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 карти (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Изберете директория за запазване на конвертираните карти - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Операцията завърши - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Успешно конвертирани %1 карти - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Неуспешно конвертиране на карта. Прекъсване на операцията - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Изберете кампания за конвертиране - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 кампании (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Изберете целеви файл - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI кампании (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 не може да бъде създаден като НЕУТРАЛЕН. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Липсващ необходим мод + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Желаете ли да го направите сега? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Модът на този обект е задължителен, за да остане картата валидна. @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Настройки на картата General - + AI-generated, needs review by native speaker; delete this comment afterwards + Общи Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Модове Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Събития Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Победа Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Загуба Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + С времеви ограничения Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Слухове Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Способности Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Герои Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Не може да се постави обект @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Съобщение @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Задължителни модове за игра на тази карта Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на мода Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версия Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Автоматично задаване Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Задай нужните модове според обектите, поставени на картата. Този метод може да причини проблеми, ако сте персонализирали награди, гарнизони и т.н. от модове Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Модове с обекти от картата Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Задай всички модове със съдържание в играта като задължителни Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Модове с пълно съдържание @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Човек/CPU CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Само CPU Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Отбор Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Основен град Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Цвят @@ -1452,27 +1755,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Случайна фракция Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Генерирай герой в основния град (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (по подразбиране) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Без отбор Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ID на играча: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Избери играч + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Герой не може да бъде създаден като НЕУТРАЛЕН + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Превключете към някой от наличните играчи: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Пряк път: %1 @@ -1480,12 +1815,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Настройки на играча Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Играчите @@ -1495,7 +1832,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК @@ -1503,7 +1841,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Портрет @@ -1514,167 +1853,198 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + По подразбиране QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Начинаещ + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Напреднал + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Експерт - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартни вторични умения: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторични умения: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Подчинителен Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Приятелски Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Агресивен Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Враждебен Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Свиреп No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Без патрул POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + СИЛОВ РАНГ HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + ТИП ГЕРОЙ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Клас на героя Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Портрет Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Умения Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - + %n поле(та) + %n поле(та) Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Сгради Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Събития Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурс Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Награда: артефакт Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Мисия Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Идентификатор ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + ПодID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на инстанцията IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + Статичен ли е neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + неутрален Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Армия @@ -1687,31 +2057,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Собственик Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Същият като града Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Могат да се премахнат единици Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип на заместителя Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Силов ранг @@ -1719,67 +2094,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип герой Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Опит MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + МЪЖ FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ЖЕНА Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Пол Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Биография Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Радиус на патрулиране Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на града Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Същият като играча @@ -1792,19 +2178,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Съобщение Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинание Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Продуктивност @@ -1812,270 +2201,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Количество Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Характер Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Избери град Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Никога не бяга Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Не нараства Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Награда Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни след Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Задейства се от човек Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Задейства се от ИИ First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при първо посещение Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при следващо посещение Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при завършване Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Повтаряема мисия Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Лимит от време UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + НЕОЗНАЧИМ - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Не може да се постави обект - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + На картата може да има само един обект на граала. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (подмодул на %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Модът '%1'%2 е необходим за обект на картата. +Добавете го към задължителните модове в Настройки → Общи. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонализирани заклинания: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартни заклинания - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + По подразбиране Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Мисия: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден от седмицата: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Изминали дни: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво на героя: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Опит на героя: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Точки мана: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Процент мана: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Основни умения: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторични умения: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Същества: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Герои: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Класове герои: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч(и): %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Награди: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Съобщение за награда: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Разлика в мана: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Точки за движение: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Процент движение: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Извършено заклинание: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонуси: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Построени сгради: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Забранени сгради: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Събития в града: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Задължително: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Възможно: @@ -2083,32 +2530,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Цел на мисията Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден от седмицата Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Изминали дни Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво на героя Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Опит на героя Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Точки за заклинания @@ -2118,7 +2571,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Убий герой/чудовище @@ -2128,87 +2582,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Основни умения Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Атака Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Защита Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Магическа сила Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Знания Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Умения Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Същества Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Герои Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Класове герои Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч(и) None - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден %1 @@ -2216,7 +2687,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Награди @@ -2224,7 +2696,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави @@ -2232,90 +2705,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Режим на посещение Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Режим на избор On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при избор Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Може да се откаже Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Нулирай параметрите Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Период days - + AI-generated, needs review by native speaker; delete this comment afterwards + дни Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Нулирай посетителите Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Нулирай наградите Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип на прозореца Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Информация за събитието Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Съобщение, което ще се покаже при получаване на тази награда Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Награда Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво на героя Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Опит на героя Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Точки за заклинания @@ -2328,166 +2818,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Препълване Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Движение Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахване на обект Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Основни умения Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Атака Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Защита Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Магическа сила Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Знания Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Умения Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Същества Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонуси Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Продължителност Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Стойност Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Използвай Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Използвай заклинание от приключенската карта Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинание Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво на магическо училище Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ограничение Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден от седмицата Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Изминали дни Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Герои Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Класове герои Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч(и) - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Награда %1 @@ -2495,27 +3015,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Слухове в кръчмата Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Нов слух @@ -2524,287 +3049,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства на сценария General - + AI-generated, needs review by native speaker; delete this comment afterwards + Общи Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на региона Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Цвят на региона Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на сценария Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл на картата Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Импортиране... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Експортиране... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартна трудност Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Предварителни условия Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при десен клик върху регион Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пролог/Епилог Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пролог Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Активирано Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Видео Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музика Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Глас Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Епилог Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Прехвърляне Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Героите се запазват при прехвърляне Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Опит Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Основни умения Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторични умения Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти All - + AI-generated, needs review by native speaker; delete this comment afterwards + Всички None - + AI-generated, needs review by native speaker; delete this comment afterwards + Нито едно Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти при прехвърляне Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Начални Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Началните опции са Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Опции за начален бонус Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Опции за прехвърляне на герой Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Опции за начален герой Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонус Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиция на играча Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Опция за начален бонус Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Прехвърляне/Начален герой Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактирай... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Най-силен Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Генериран Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Случаен No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма карта Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Отвори карта All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Всички поддържани карти (*.vmap *.h3m);;VCMI карти(*.vmap);;HoMM3 карти(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Грешка Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Не може да се отвори файлът. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Запази карта VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI карти (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 карти (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Изходен сценарий Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой @@ -2812,12 +3392,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства на сценария Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Изберете тип бонус @@ -2825,55 +3407,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинание Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Същество - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Сграда Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакт Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Свитък със заклинание Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Основно умение - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторично умение - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурс @@ -2883,118 +3473,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Получател Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип същество Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Количество Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Умение за атака Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Умение за защита Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Магическа сила Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Знания Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Майсторство Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип ресурс Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактиране на начален бонус - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Най-силен - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Генериран - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Случаен - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Чести (%1 и %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Редки (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + най-силен герой - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + генериран герой - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + случаен герой - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 заклинание за %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 за %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 артефакт за %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 свитък със заклинание за %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Основно умение (Атака: %1, Защита: %2, Магия: %3, Знания: %4) за %5 @@ -3002,77 +3615,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Събитие с време Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на събитието Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Въведете текст за съобщението на събитието affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + засяга човек affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + засяга ИИ Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден на първа поява Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Повторение след (0 = без повторение) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Засегнати играчи Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси type - + AI-generated, needs review by native speaker; delete this comment afterwards + тип qty - + AI-generated, needs review by native speaker; delete this comment afterwards + кол-во Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Обекти за изтриване Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК @@ -3080,42 +3708,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Сгради Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Построй всички Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Разруши всички Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Активирай всички Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Деактивирай всички Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Активирано Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Построено @@ -3123,77 +3759,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Събитие в града General - + AI-generated, needs review by native speaker; delete this comment afterwards + Общи Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Име на събитието Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Въведете текст за съобщението на събитието Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден на първа поява Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Повторение след (0 = без повторение) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Засегнати играчи affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + засяга човек affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + засяга ИИ Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Сгради Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Същества OK - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Същество ниво %1 / Същество ниво %1 Подобрение Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден %1 - %2 @@ -3201,7 +3852,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден %1 - %2 @@ -3209,32 +3861,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Събития в града Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Събития с време Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Добави Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ден %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ново събитие @@ -3242,17 +3900,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонализирай заклинания Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 1 @@ -3261,7 +3922,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинание, което може да се появи в магическата гилдия @@ -3270,27 +3932,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинание, което трябва да се появи в магическата гилдия Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ниво 5 @@ -3298,43 +3965,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Преводи на картата Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Език Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Поддържан String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Идентификатор на низ Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Премахни превод Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Езикът по подразбиране не може да бъде премахнат All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Всички съществуващи текстове за този език ще бъдат премахнати. Продължаване? @@ -3342,117 +4017,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Резултати от валидирането на картата - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Картата не е заредена - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма разрешени фракции за играч %1 - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма разрешени играчи за тази карта - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Картата е разрешена само за един играч и не може да бъде стартирана - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма разрешени човешки играчи за тази карта - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Обект %1 е зададен на неиграем играч %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Свитък със заклинание %1 няма зададена инстанция и трябва да бъде премахнат - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакт %1 е забранен от настройките на картата - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч %1 няма зададени градове и герои + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Затвор %1 трябва да е НЕУТРАЛЕН + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Присвояем обект %1 е НЕОЗНАЧИМ, но трябва да има НЕУТРАЛЕН или играч-собственик + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 трябва да има собственик - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 е забранен от настройките на картата - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 има дубликат на картата - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 няма тип и трябва да бъде премахнат - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Свитък със заклинание %1 е забранен от настройките на картата - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч %1 няма начален град - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Името на картата не е зададено - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Описанието на картата не е зададено - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Картата е валидна и няма проблеми. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Възникна изключение при валидирането: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Възникна неизвестно изключение при валидирането @@ -3460,77 +4158,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Съобщение за победа Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Само за човешки играчи Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Позволи стандартна победа Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Параметри - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Без специална победа - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Грабване на артефакт - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Наемане на същества - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Натрупване на ресурси - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Строеж на сграда - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Завладяване на град - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Побеждаване на герой - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Пренасяне на артефакт - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Убийство на чудовище + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Който и да е град @@ -3538,67 +4251,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Създай нова карта Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Размер на картата Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Височина Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Ширина XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Случайна карта Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Играч(и) S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3606,172 +4332,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Случайно Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Човешки отбори Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Компютърни отбори Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартен размер Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Потребителски размер Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Подземие Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Хора Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Компютри Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Сила на чудовищата Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Слаба Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Нормална Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Силна Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Водно съдържание None - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Острови Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Пътища Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Пръст Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Чакъл Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Паваж Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Шаблон Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Потребителско семе Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Генерирай случайна карта OK - + AI-generated, needs review by native speaker; delete this comment afterwards + ОК Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Отказ No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма шаблон No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Няма шаблон за зададените параметри. Не може да се генерира случайна карта. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + Грешка при генерация на карта [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [по подразбиране] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Път до картата, която да се отвори. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Извлечете оригиналните H3 архиви в отделна папка. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + От извлечен архив разделя TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 и Un44 на отделни PNG файлове. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + От извлечен архив конвертира единични изображения (в папката Images) от .pcx в .png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Изтрий оригиналните файлове, за тези които са разделени/конвертирани. diff --git a/mapeditor/translation/chinese.ts b/mapeditor/translation/chinese.ts index fb2d60e7b..977e3157f 100644 --- a/mapeditor/translation/chinese.ts +++ b/mapeditor/translation/chinese.ts @@ -553,7 +553,7 @@ MainWindow - + VCMI Map Editor VCMI地图编辑器 @@ -707,8 +707,8 @@ - - + + View underground 查看地下 @@ -855,9 +855,9 @@ - - - + + + Update appearance 更新外观 @@ -1049,242 +1049,273 @@ Ctrl+Shift+= - + Confirmation 确认 - + Unsaved changes will be lost, are you sure? 未保存的改动会丢失,你确定要这么做吗? - + Mods are required 需要模组 - + Failed to open map 打开地图失败 - + Open map 打开地图 - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) 所有支持的地图类型(*.vmap *.h3m);;VCMI地图(*.vmap);;英雄无敌3地图(*.h3m) - + Recently Opened Files 最近打开文件 - + Map validation 地图校验 - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found 地图有致命问题,很可能无法游玩。打开地图菜单的校验功能以定位问题 - + Map has some errors. Open Validator from the Map menu to see issues found 地图有一些错误,打开地图菜单的校验功能以定位问题 - + Failed to save map 保存地图失败 - + Save map 保存地图 - + VCMI maps (*.vmap) VCMI地图(*.vmap) - + Type 类型 - + Towns 城镇 - + Objects 物体 - + Heroes 英雄 - + Artifacts 宝物 - + Resources 资源 - + Banks 宝屋 - + Dwellings 巢穴 - + Grounds 地面 - + Teleports 传送门 - + Mines 矿井 - + Triggers 触发器 - + Monsters 怪物 - + Quests 任务 - + Wog Objects Wog物体 - + Obstacles 障碍物 - + Other 其他 - + Mods loading problem 模组加载遇到问题 - + Critical error during Mods loading. Disable invalid mods and restart. 加载模组时遇到致命错误,请关闭无效模组后重启。 - - + + View surface 查看地上 - + No objects selected 未选择任何物体 - + This operation is irreversible. Do you want to continue? 此操作无法被撤销,你确定要继续么? - + Errors occurred. %1 objects were not updated 发生错误!%1 物体未完成更新 - + Save to image 保存为图片 - + Select maps to convert 选择待转换的地图 - + HoMM3 maps(*.h3m) 英雄无敌3地图文件(*.h3m) - + Choose directory to save converted maps 选择保存转换地图的目录 - + Operation completed 操作完成 - + Successfully converted %1 maps 成功转换 %1 地图 - + Failed to convert the map. Abort operation 转换地图失败,操作终止 - + Select campaign to convert 选择待转换的战役 - + HoMM3 campaigns (*.h3c) 英雄无敌3战役文件(*.h3c) - + Select destination file 选择目标文件 - + VCMI campaigns (*.vcmp) VCMI战役文件(*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + 英雄 %1 无法在中立阵营被创建。 + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + 缺少必需的模组 + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +你现在要这样做吗? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + 该对象的模组是地图保持有效所必需的。 + + MapSettings @@ -1475,6 +1506,33 @@ 玩家ID: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + 选择玩家 + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + 无法将英雄创建为中立 + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + 切换到可用玩家之一: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + 快捷键:%1 + + PlayerSettings @@ -1520,27 +1578,27 @@ QObject - + Beginner 初级 - + Advanced 中级 - + Expert 高级 - + Default secondary skills: 默认辅助技能: - + Secondary skills: 辅助技能: @@ -1896,34 +1954,44 @@ 没有旗帜 - + Can't place object 无法放置物体 - + There can only be one grail object on the map. 只能放置一个神器在地图上。 - - Hero %1 cannot be created as NEUTRAL. - 英雄 %1 无法在中立阵营被创建。 + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (%1 的子模组) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + 模组 '%1'%2 是地图上某个对象所需的。 +请在地图->常规设置中将其添加为必需模组。 + + + + Custom Spells: 自定义魔法: - - + + Default Spells 默认魔法 - + Default 默认 @@ -1944,13 +2012,13 @@ - + Hero Level: %1 英雄等级:%1 - + Hero Experience: %1 英雄经验值:%1 @@ -1961,43 +2029,43 @@ - + Mana Percentage: %1 魔法值百分比:%1 - + Primary Skills: %1/%2/%3/%4 主属性:%1/%2/%3/%4 - + Resources: %1 资源:%1 - + Artifacts: %1 宝物:%1 - + Spells: %1 魔法:%1 - + Secondary Skills: %1 辅助技能:%1 - + Creatures: %1 生物:%1 @@ -2017,37 +2085,37 @@ 玩家:%1 - + Rewards: 奖励: - + Reward Message: %1 奖励消息:%1 - + Mana Diff: %1 魔法值变动:%1 - + Move Points: %1 移动点数:%1 - + Move Percentage: %1 移动点数百分比:%1 - + Spell Cast: %1 (%2) 施法:%1(%2) - + Bonuses: %1 奖励:%1 @@ -2067,12 +2135,12 @@ 城镇事件: - + Required: 必须: - + Possible: 可选: @@ -2473,18 +2541,18 @@ 玩家 - + None - + Day %1 %1 天 - - + + Reward %1 奖励 %1 @@ -2523,7 +2591,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + 场景属性 @@ -2836,7 +2905,7 @@ - + Building 建筑 @@ -2863,14 +2932,14 @@ - + Secondary skill 辅助技能 - + Resource 资源 @@ -2931,67 +3000,67 @@ 编辑初始奖励 - + Strongest 强大 - + Generated 一般 - + Random 随机 - + Common (%1 and %2) 普通 (%1和%2) - + Rare (%1, %2, %3, %4) 稀有 (%1,%2,%3,%4) - + strongest hero 强大英雄 - + generated hero 普通英雄 - + random hero 随机英雄 - + %1 spell for %2 %2 的%1魔法 - + %1 %2 for %3 %3的%1 %2 - + %1 artifact for %2 %2的%1宝物 - + %1 spell scroll for %2 %2的%1魔法卷轴 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 %5的主属性(攻击力:%1,防御力%2,魔法:%3,知识:%4) @@ -3344,112 +3413,114 @@ 地图验证结果 - + Map is not loaded 未加载地图 - + No factions allowed for player %1 玩家 %1 没有可使用的种族 - + No players allowed to play this map 该地图未设置任何玩家 - + Map is allowed for one player and cannot be started 该地图只有一个玩家,无法开始游戏 - + No human players allowed to play this map 该地图缺少人类玩家 - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - 部队实例 %1 没有旗帜,需要设置为中立或任一玩家所有 - - - + Object %1 is assigned to non-playable player %2 物体 %1 属于无法游戏的玩家 %2 - + Spell scroll %1 doesn't have instance assigned and must be removed 魔法卷轴 %1 没有分配任何实例,需要被移除 - + Artifact %1 is prohibited by map settings 宝物 %1 被地图设置禁止 - + Player %1 has no towns and heroes assigned 玩家 %1 没有分配任何城镇或英雄 - + Prison %1 must be a NEUTRAL 监狱 %1 需要为中立 - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + 可归属对象 %1 是 UNFLAGGABLE,但必须为中立或玩家所有 + + + Hero %1 must have an owner 英雄 %1 需要有一个所有者 - + Hero %1 is prohibited by map settings 英雄 %1 被地图设置禁止 - + Hero %1 has duplicate on map 英雄 %1 在地图上有多个 - + Hero %1 has an empty type and must be removed 英雄 %1 属于空类型,必须移除 - + Spell scroll %1 is prohibited by map settings 魔法卷轴 %1 被地图设置禁止 - + Player %1 doesn't have any starting town 玩家 %1 没有一座起始城镇 - + Map name is not specified 地图名字为空 - + Map description is not specified 地图描述为空 - - Map contains object from mod "%1", but doesn't require it - 地图包含模组 %1 的物体,但没有声明依赖该模组 + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + 地图有效,无任何问题。 - + Exception occurs during validation: %1 在验证地图期间发生异常:%1 - + Unknown exception occurs during validation 在验证地图期间发生未知异常 @@ -3482,52 +3553,52 @@ 参数 - + No special victory 无特殊胜利条件 - + Capture artifact 获取宝物 - + Hire creatures 雇佣生物 - + Accumulate resources 获得资源 - + Construct building 建造神器 - + Capture town 占领城镇 - + Defeat hero 击败英雄 - + Transport artifact 运送宝物 - + Kill monster 击杀怪物 - + Any town 任一城镇 @@ -3748,27 +3819,27 @@ main - + Filepath of the map to open. 要打开的地图所在的文件路径。 - + Extract original H3 archives into a separate folder. 将原始H3文件解压到特定目录。 - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. 数据文件解压后,将TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 und Un44切分为独立的PNG文件。 - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. 数据文件解压后,将每一张图片(Images目录)从pcx格式转化为png格式。 - + Delete original files, for the ones split / converted. 当切分/转换完成后,原始文件将被删除。 diff --git a/mapeditor/translation/czech.ts b/mapeditor/translation/czech.ts index 6812f7d76..a24a9fb93 100644 --- a/mapeditor/translation/czech.ts +++ b/mapeditor/translation/czech.ts @@ -435,7 +435,8 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Textový štítek @@ -553,7 +554,7 @@ MainWindow - + VCMI Map Editor Editor map VCMI @@ -707,8 +708,8 @@ - - + + View underground Zobrazit podzemí @@ -855,9 +856,9 @@ - - - + + + Update appearance Aktualizovat vzhled @@ -1049,242 +1050,273 @@ Ctrl+Shift+= - + Confirmation Potvrzení - + Unsaved changes will be lost, are you sure? Neuložené změny budou ztraceny, jste si jisti? - + Mods are required Vyžadované modifikace - + Failed to open map Otevření mapy se nezdařilo - + Open map Otevřít mapu - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Všechny podporované mapy (*.vmap *.h3m);; Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) - + Recently Opened Files Naposledny otevřené soubory - + Map validation Kontrola mapy - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found Mapa obsahuje kritické problémy a pravděpodobně nebude hratelná. Otevřete Validátor z nabídky Mapa, abyste zobrazili nalezené chyby - + Map has some errors. Open Validator from the Map menu to see issues found Mapa obsahuje chyby. Otevřete Validátor z nabídky Mapa, abyste zobrazili nalezené problémy - + Failed to save map Nepodařilo se uložit mapu - + Save map Uložit mapu - + VCMI maps (*.vmap) Mapy VCMI (*.vmap) - + Type Druh - + Towns Města - + Objects Objekty - + Heroes Hrdinové - + Artifacts Artefakty - + Resources Suroviny - + Banks Zásobárny - + Dwellings Obydlí - + Grounds Země - + Teleports Teleporty - + Mines Doly - + Triggers Spouštěče - + Monsters Jednotky - + Quests Úkoly - + Wog Objects WoG objekty - + Obstacles Překážky - + Other Ostatní - + Mods loading problem Problém s načítáním modifikací - + Critical error during Mods loading. Disable invalid mods and restart. Kritická chyba při načítání modifikací. Deaktivujte neplatné modifikace a restartujte. - - + + View surface Zobrazit povrch - + No objects selected Nejsou vybrány žádné objekty - + This operation is irreversible. Do you want to continue? Tento úkon je nezvratný. Chcete pokračovat? - + Errors occurred. %1 objects were not updated Nastaly chyby. Nebylo aktualizováno %1 objektů - + Save to image Uložit do obrázku - + Select maps to convert Vyberte mapy pro převod - + HoMM3 maps(*.h3m) Mapy HoMM3 (*.h3m) - + Choose directory to save converted maps Vyberte složku pro uložení převedených map - + Operation completed Operace dokončena - + Successfully converted %1 maps Úspěšně převedeno %1 map - + Failed to convert the map. Abort operation Převod map selhal. Úkon zrušen - + Select campaign to convert Vyberte kampaň ke konverzi - + HoMM3 campaigns (*.h3c) Kampaně HoMM3 (*.h3c) - + Select destination file Vyberte cílový soubor - + VCMI campaigns (*.vcmp) Kampaně VCMI (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + Hrdina %1 nemůže být vytvořen jako NEUTRÁLNÍ. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Chybějící povinný mod + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Chcete to udělat nyní? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Mod tohoto objektu je povinný, aby mapa zůstala platná. + + MapSettings @@ -1475,6 +1507,33 @@ ID hráče: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Vyberte hráče + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Hrdina nemůže být vytvořen jako NEUTRÁLNÍ + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Přepněte na jednoho z dostupných hráčů: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Zkratka: %1 + + PlayerSettings @@ -1520,27 +1579,27 @@ QObject - + Beginner Začátečník - + Advanced Pokročilý - + Expert Expert - + Default secondary skills: Výchozí dovednosti: - + Secondary skills: Dovednosti: @@ -1898,34 +1957,44 @@ NEOZNAČITELNÝ - + Can't place object Objekt nelze umístit - + There can only be one grail object on the map. Na mapě může být pouze jeden grál. - - Hero %1 cannot be created as NEUTRAL. - Hrdina %1 nemůže být vytvořen jako NEUTRÁLNÍ. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (submodul %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Mod '%1'%2 je vyžadován objektem na mapě. +Přidejte ho do povinných modů mapy v nabídce Mapa->Obecné nastavení. + + + + Custom Spells: Vlastní kouzla: - - + + Default Spells Výchozí kouzla - + Default Výchozí @@ -1946,13 +2015,13 @@ - + Hero Level: %1 Úroveň hrdiny: %1 - + Hero Experience: %1 Zkušenosti hrdiny: %1 @@ -1963,43 +2032,43 @@ - + Mana Percentage: %1 Podíl magické energie: %1 - + Primary Skills: %1/%2/%3/%4 Primární dovednosti: %1/%2/%3/%4 - + Resources: %1 Suroviny: %1 - + Artifacts: %1 Artefakty: %1 - + Spells: %1 Kouzla: %1 - + Secondary Skills: %1 Dovednosti: %1 - + Creatures: %1 Jednotky: %1 @@ -2019,37 +2088,37 @@ Hráči: %1 - + Rewards: Odměny: - + Reward Message: %1 Zpráva o odměně: %1 - + Mana Diff: %1 Spotřeba magické energie: %1 - + Move Points: %1 Body pohybu:%1 - + Move Percentage: %1 Podíl pohybu: %1 - + Spell Cast: %1 (%2) Seslané kouzlo: %1 (%2) - + Bonuses: %1 Bonusy: %1 @@ -2069,12 +2138,12 @@ Události města: - + Required: Požadováno: - + Possible: Možné: @@ -2475,18 +2544,18 @@ Hráči - + None Žádný - + Day %1 Den %1 - - + + Reward %1 Odměna %1 @@ -2838,7 +2907,7 @@ - + Building Budiva @@ -2865,14 +2934,14 @@ - + Secondary skill Druhotné schopnosti - + Resource Surovina @@ -2933,67 +3002,67 @@ Úprava startovního bonusu - + Strongest Nejsilnější - + Generated Náhodný - + Random Náhodně - + Common (%1 and %2) Společný (%1 a %2) - + Rare (%1, %2, %3, %4) Vzácné (%1, %2, %3, %4) - + strongest hero nejsilnější hrdina - + generated hero Vygenerovaný hrdina - + random hero náhodný hrdina - + %1 spell for %2 Kouzlo %1 pro %2 - + %1 %2 for %3 %1 %2 pro %3 - + %1 artifact for %2 Artefakt %1 pro %2 - + %1 spell scroll for %2 Kouzelný svitek %1 pro %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Základní schopnosti (Útok: %1, Obrana: %2, Síla kouzel: %3, Znalosti: %4) pro %5 @@ -3346,112 +3415,114 @@ Výsledky validátoru - + Map is not loaded Mapa není načtena - + No factions allowed for player %1 Pro hráče %1 nejsou povoleny žádné frakce - + No players allowed to play this map Tato mapa neumožňuje hru žádnému hráči - + Map is allowed for one player and cannot be started Tato mapa je určena pouze pro jednoho hráče a nelze ji spustit - + No human players allowed to play this map Na této mapě není povolen žádný lidský hráč - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - Obrněná instance %1 nemůže být označena vlajkou, ale musí mít vlastníka nebo neutrálního nebo hráče - - - + Object %1 is assigned to non-playable player %2 Objekt %1 je přiřazen nehratelnému hráči %2 - + Spell scroll %1 doesn't have instance assigned and must be removed Kouzelný svitek %1 nemá přiřazenou instanci a musí být odstraněn - + Artifact %1 is prohibited by map settings Artefakt %1 je zakázán nastavením mapy - + Player %1 has no towns and heroes assigned Hráč %1 nemá přiřazena žádná města ani hrdiny - + Prison %1 must be a NEUTRAL Vězení %1 musí být NEUTRÁLNÍ - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Objekt %1 je UNFLAGGABLE, ale musí mít vlastníka – NEUTRÁLNÍHO nebo hráče + + + Hero %1 must have an owner Hrdina %1 musí mít vlastníka - + Hero %1 is prohibited by map settings Hrdina %1 je zakázaný nastavením mapy - + Hero %1 has duplicate on map Hrdina %1 má na mapě dvojníka - + Hero %1 has an empty type and must be removed Hrdina %1 nemá přiřazený typ a musí být odstraněn - + Spell scroll %1 is prohibited by map settings Kouzlo %1 je zakázáno nastavením mapy - + Player %1 doesn't have any starting town Hráč %1 nemá žádné počáteční město - + Map name is not specified Mapa nemá název - + Map description is not specified Mapa nemá popis - - Map contains object from mod "%1", but doesn't require it - Mapa obsahuje objekt z modifikace "%1". ale nevyžaduje ji + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Mapa je platná a nemá žádné problémy. - + Exception occurs during validation: %1 Při posudku nastala výjimka: %1 - + Unknown exception occurs during validation Nasta neznámá výjimka při posudku @@ -3484,52 +3555,52 @@ Parametry - + No special victory Bez speciálního vítězství - + Capture artifact Získat artefakt - + Hire creatures Najmout jednotky - + Accumulate resources Nashromáždit zdroje - + Construct building Postavit budovu - + Capture town Získat město - + Defeat hero Porazit hrdinu - + Transport artifact Dopravit artefakt - + Kill monster Zabít jednotky - + Any town Libovolné město @@ -3750,27 +3821,27 @@ main - + Filepath of the map to open. Cesta k souboru mapy, kterou chcete otevřít. - + Extract original H3 archives into a separate folder. Rozbalit originální archivy H3 do zvláštní složky. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Z rozbaleného archivu rozdělí TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 a Un44 do jednotlivých PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Z rozbaleného archivu převede jednoduché obrázky (nalezené ve složce Images) z .pcx do png. - + Delete original files, for the ones split / converted. Odstranit původní soubory pro ty, které byly rozděleny nebo převedeny. diff --git a/mapeditor/translation/english.ts b/mapeditor/translation/english.ts index ea475ce26..ee669a3bd 100644 --- a/mapeditor/translation/english.ts +++ b/mapeditor/translation/english.ts @@ -553,7 +553,7 @@ MainWindow - + VCMI Map Editor @@ -707,8 +707,8 @@ - - + + View underground @@ -855,9 +855,9 @@ - - - + + + Update appearance @@ -1049,242 +1049,267 @@ - + Confirmation - + Unsaved changes will be lost, are you sure? - + Mods are required - + Failed to open map - + Open map - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + Recently Opened Files - + Map validation - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + Map has some errors. Open Validator from the Map menu to see issues found - + Failed to save map - + Save map - + VCMI maps (*.vmap) - + Type - + Towns - + Objects - + Heroes - + Artifacts - + Resources - + Banks - + Dwellings - + Grounds - + Teleports - + Mines - + Triggers - + Monsters - + Quests - + Wog Objects - + Obstacles - + Other - + Mods loading problem - + Critical error during Mods loading. Disable invalid mods and restart. - - + + View surface - + No objects selected - + This operation is irreversible. Do you want to continue? - + Errors occurred. %1 objects were not updated - + Save to image - + Select maps to convert - + HoMM3 maps(*.h3m) - + Choose directory to save converted maps - + Operation completed - + Successfully converted %1 maps - + Failed to convert the map. Abort operation - + Select campaign to convert - + HoMM3 campaigns (*.h3c) - + Select destination file - + VCMI campaigns (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + + + + + Missing Required Mod + + + + + + +Do you want to do that now ? + + + + + This object's mod is mandatory for map to remain valid. + + + MapSettings @@ -1475,6 +1500,29 @@ + + PlayerSelectionDialog + + + Select Player + + + + + Hero cannot be created as NEUTRAL + + + + + Switch to one of the available players: + + + + + Shortcut: %1 + + + PlayerSettings @@ -1520,27 +1568,27 @@ QObject - + Beginner - + Advanced - + Expert - + Default secondary skills: - + Secondary skills: @@ -1897,34 +1945,41 @@ - + Can't place object - + There can only be one grail object on the map. - - Hero %1 cannot be created as NEUTRAL. + + (submod of %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + + + + + Custom Spells: - - + + Default Spells - + Default @@ -1945,13 +2000,13 @@ - + Hero Level: %1 - + Hero Experience: %1 @@ -1962,43 +2017,43 @@ - + Mana Percentage: %1 - + Primary Skills: %1/%2/%3/%4 - + Resources: %1 - + Artifacts: %1 - + Spells: %1 - + Secondary Skills: %1 - + Creatures: %1 @@ -2018,37 +2073,37 @@ - + Rewards: - + Reward Message: %1 - + Mana Diff: %1 - + Move Points: %1 - + Move Percentage: %1 - + Spell Cast: %1 (%2) - + Bonuses: %1 @@ -2068,12 +2123,12 @@ - + Required: - + Possible: @@ -2474,18 +2529,18 @@ - + None - + Day %1 - - + + Reward %1 @@ -2837,7 +2892,7 @@ - + Building @@ -2864,14 +2919,14 @@ - + Secondary skill - + Resource @@ -2932,67 +2987,67 @@ - + Strongest - + Generated - + Random - + Common (%1 and %2) - + Rare (%1, %2, %3, %4) - + strongest hero - + generated hero - + random hero - + %1 spell for %2 - + %1 %2 for %3 - + %1 artifact for %2 - + %1 spell scroll for %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 @@ -3345,112 +3400,112 @@ - + Map is not loaded - + No factions allowed for player %1 - + No players allowed to play this map - + Map is allowed for one player and cannot be started - + No human players allowed to play this map - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + Artifact %1 is prohibited by map settings - + Player %1 has no towns and heroes assigned - + Prison %1 must be a NEUTRAL - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + + + + Hero %1 must have an owner - + Hero %1 is prohibited by map settings - + Hero %1 has duplicate on map - + Hero %1 has an empty type and must be removed - + Spell scroll %1 is prohibited by map settings - + Player %1 doesn't have any starting town - + Map name is not specified - + Map description is not specified - - Map contains object from mod "%1", but doesn't require it + + The map is valid and has no issues. - + Exception occurs during validation: %1 - + Unknown exception occurs during validation @@ -3483,52 +3538,52 @@ - + No special victory - + Capture artifact - + Hire creatures - + Accumulate resources - + Construct building - + Capture town - + Defeat hero - + Transport artifact - + Kill monster - + Any town @@ -3749,27 +3804,27 @@ main - + Filepath of the map to open. - + Extract original H3 archives into a separate folder. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + Delete original files, for the ones split / converted. diff --git a/mapeditor/translation/finnish.ts b/mapeditor/translation/finnish.ts index f093e6f78..8ee205d20 100644 --- a/mapeditor/translation/finnish.ts +++ b/mapeditor/translation/finnish.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Armeijan asetukset Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Leveä muodostelma Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiivis muodostelma @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakti Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Varusta paikkaan: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Peruuta @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjamuokkain File - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiedosto Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Muokkaa View - + AI-generated, needs review by native speaker; delete this comment afterwards + Näytä Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Työkalupalkki Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Avaa Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna New - + AI-generated, needs review by native speaker; delete this comment afterwards + Uusi Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna nimellä... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjan ominaisuudet Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Skenaarion ominaisuudet Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Näytä koko taustakuva Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Skenaariomuokkain Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahvistus Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallentamattomat muutokset menetetään,oletko varma? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Avaa kartta All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaikki tuetut kampanjat (*.vcmp *.h3c);;VCMI-kampanjat (*.vcmp);;HoMM3-kampanjat (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna kampanja VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjat (*.vcmp) @@ -156,158 +183,189 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjan ominaisuudet General - + AI-generated, needs review by native speaker; delete this comment afterwards + Yleiset Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjan nimi Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjan kuvaus Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekijä Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekijän yhteystiedot (esim. sähköposti) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjan luontipäivämäärä Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjan versio Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musiikki Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Käyttäjä voi valita vaikeustason Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Alueet Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Alue-esiasetus Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Tausta Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Pääte Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Etuliite Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Väri-päätteen pituus Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekalaiset Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Ladataan taustakuvaa Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Videokehyskuva Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Introvideo Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Lopetusvideo Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukautettu Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Väliosa X - + AI-generated, needs review by native speaker; delete this comment afterwards + X Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Y Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekstin sijainti X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekstin sijainti Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Vähemmän skenaarioita New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Uusi alueasetus tukee vähemmän skenaarioita kuin aiemmin. Jotkut poistetaan. Jatketaanko? @@ -315,27 +373,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Lomake Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Ajoitetut tapahtumat Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Uusi tapahtuma @@ -343,47 +406,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Lomake Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan nimi Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan kuvaus Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekijä Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekijän yhteystiedot (esim. sähköposti) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan luontiaika Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaversio Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Rajoita sankareiden enimmäistasoa Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Vaikeustaso @@ -391,7 +463,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Luodaan karttaa @@ -399,27 +472,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Paikka Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakti @@ -427,7 +505,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin taidot @@ -435,32 +514,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekstikenttä Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Taito Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukauta taitoja @@ -468,37 +553,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukauta loitsuja Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 5 @@ -506,783 +598,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Lomake Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Tappion viesti 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 päivää ilman kaupunkia Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametrit No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei erityistä tappiota Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Menetä linna Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Menetä sankari Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Aika loppui Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Päiviä ilman kaupunkia MainWindow - + VCMI Map Editor VCMI-karttaeditori File - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiedosto Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Avaa viimeisimmät Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartta Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Muokkaa View - + AI-generated, needs review by native speaker; delete this comment afterwards + Näytä Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Työkalupalkki Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Minikartta Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaobjektien näkymä Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Selain Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Tarkastaja Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Ominaisuus Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Arvo Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Työkalut Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Maalaus Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Maastot Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiet Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Joet Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Esikatselu Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Avaa Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Uusi Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna nimellä... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjamuokkain - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Näytä maanalainen Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Ohita Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Leikkaa Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Kopioi Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Liitä Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Täytä Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Täyttää valinnan esteillä Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Ruudukko Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Yleiset Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan nimi ja kuvaus Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja-asetukset Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Kumoa Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Tee uudelleen Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Neutraali Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahvista Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Päivitä ulkoasu Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Luo esteet uudelleen Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Vie nimellä... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Käännökset Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m-muunnin Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c-muunnin Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Lukitse Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Lukitse objektit kartalla estääksesi tarpeettomat muutokset Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista lukitus Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista kaikkien kartan objektien lukitus Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Lähennä Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitonna Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Palauta zoomaus Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahvistus - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallentamattomat muutokset menetetään,oletko varma? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Modit vaaditaan + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaa ei voitu avata - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Avaa kartta - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaikki tuetut kartat (*.vmap *.h3m);;VCMI-kartat(*.vmap);;HoMM3-kartat(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Viimeksi avatut tiedostot - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan tarkistus - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartassa on kriittisiä ongelmia,eikä se todennäköisesti ole pelattavissa. Avaa tarkistus Kartta-valikosta nähdäksesi löydetyt virheet - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartassa on joitakin virheitä. Avaa tarkistus Kartta-valikosta nähdäksesi löydetyt virheet - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaa ei voitu tallentaa - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna kartta - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kartat (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tyyppi - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Kaupungit - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Objektit - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarit - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssit - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Pankit - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Asuinpaikat - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Maastot - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Teleportit - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Kaivokset + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Laukaisimet + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Hirviöt + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Tehtävät + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + WoG-objektit + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Esteet + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Muut - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Modien latausongelma - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Kriittinen virhe modien latauksessa. Poista virheelliset modit käytöstä ja käynnistä uudelleen. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Näytä pinta - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei valittuja objekteja - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Tätä toimintoa ei voi perua. Haluatko jatkaa? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapahtui virheitä. %1 objektia ei päivitetty - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna kuvana - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse kartat muunnettavaksi - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kartat (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse hakemisto muunnettujen karttojen tallennukseen - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Toiminto suoritettu - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 karttaa muunnettiin onnistuneesti - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan muuntaminen epäonnistui. Keskeytetään - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse muunnettava kampanja - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kampanjat (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse kohdetiedosto - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjat (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Sankaria %1 ei voida luoda NEUTRAALINA. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Vaadittu modi puuttuu + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Haluatko tehdä sen nyt? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Tämän objektin modi on pakollinen,jotta kartta pysyy kelvollisena. @@ -1290,67 +1566,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartta-asetukset General - + AI-generated, needs review by native speaker; delete this comment afterwards + Yleiset Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Modit Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapahtumat Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Voitto Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Häviö Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Ajastettu Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Huhut Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Kyvyt Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarit Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1358,7 +1647,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Objektia ei voi sijoittaa @@ -1366,7 +1656,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Viesti @@ -1374,47 +1665,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Lomake Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaa pelatessa vaadittavat modit Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Modin nimi Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versio Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Automaattinen määritys Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Aseta vaaditut modit kartalle asetettujen objektien perusteella. Tämä voi aiheuttaa ongelmia,jos olet mukauttanut palkintoja,varuskuntia jne. modeista Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaobjektien modit Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Aseta kaikki pelisisältöä sisältävät modit pakollisiksi Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Täyden sisällön modit @@ -1422,57 +1722,95 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Ihminen/CPU CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Vain CPU Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Joukkue Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Pääkaupunki Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Väri ... - + AI-generated, needs review by native speaker; delete this comment afterwards + ... Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Satunnainen osapuoli Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Luo sankari pääkaupunkiin (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (oletus) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei joukkuetta Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajan tunnus: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse pelaaja + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Sankaria ei voi luoda NEUTRAALINA + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Vaihda johonkin saatavilla olevista pelaajista: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Pikanäppäin: %1 @@ -1480,22 +1818,26 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja-asetukset Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajat 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 1 Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1503,178 +1845,211 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Muotokuva ... - + AI-generated, needs review by native speaker; delete this comment afterwards + ... Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Oletus QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Aloittelija + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Edistynyt + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Asiantuntija - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Oletustoissijaiset taidot: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Toissijaiset taidot: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Myöntyvä Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Ystävällinen Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Aggressiivinen Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Vihamielinen Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Raivoisa No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei partiointia POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + VOIMATASO HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + SANKARITYYPPI Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankariluokka Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Muotokuva Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Taidot Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - + %n ruutu + %n ruutua Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakennukset Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapahtumat Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssi Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktipalkinto Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Tehtävä Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Tunniste ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + Alitunniste InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + Instanssinimi IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + OnStaattinen neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + neutraali Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Armeija @@ -1687,31 +2062,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Omistaja Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Sama kuin kaupungilla Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Poistettavat yksiköt Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Paikanpitotyyppi Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Voimatason sijoitus @@ -1719,67 +2099,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarityyppi Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kokemus MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + MIES FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + NAINEN Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Sukupuoli Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nimi Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Elämäkerta Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Partiointisäde Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaupungin nimi Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Sama kuin pelaajalla @@ -1792,19 +2183,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Viesti Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsu Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuottavuus @@ -1812,270 +2206,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Määrä Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Hahmo Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse kaupunki Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei koskaan pakene Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei kasva Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Palkinto Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista jälkeen Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Ihmisen laukaisija Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Tietokoneen laukaisija First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Ensimmäinen vierailuteksti Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Seuraavan vierailun teksti Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Suoritettu teksti Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Toista tehtävä Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Aikaraja UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + EI LIPUTETTAVISSA - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Objektia ei voi sijoittaa - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartalla voi olla vain yksi Graali-objekti. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (alalisäosa %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Lisäosa '%1'%2 vaaditaan kartalla olevan objektin takia. +Lisää se kartan vaadittuihin lisäosiin valikosta Kartta → Yleiset asetukset. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukautetut loitsut: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Oletusloitsut - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Oletus Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Tehtävä: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Viikonpäivä: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päiviä kulunut: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin taso: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin kokemus: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Manapisteet: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Manaprosentti: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päätaidot: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssit: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Toissijaiset taidot: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksiköt: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarit: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankariluokat: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajat: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Palkinnot: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Palkintoviesti: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Manaero: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Liikkumispisteet: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Liikkumisprosentti: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsu heitetty: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonukset: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakennetut rakennukset: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Kielletyt rakennukset: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaupunkitapahtumat: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Vaadittu: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Mahdollinen: @@ -2083,132 +2535,158 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Tehtävän tavoite Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Viikonpäivä Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Päiviä kulunut Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin taso Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin kokemus Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsupisteet % - + AI-generated, needs review by native speaker; delete this comment afterwards + % Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapa sankari/hirviö ... - + AI-generated, needs review by native speaker; delete this comment afterwards + ... Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Päätaidot Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Hyökkäys Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Puolustus Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsuvoima Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Tieto Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssit Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Taidot Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksiköt Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarit Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankariluokat Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajat None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei mitään Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päivä %1 @@ -2216,7 +2694,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Palkinnot @@ -2224,7 +2703,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää @@ -2232,90 +2712,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Vierailutila Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Valintatila On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Valintaviesti Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Voi kieltäytyä Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Nollaa parametrit Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Jakso days - + AI-generated, needs review by native speaker; delete this comment afterwards + päivää Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Nollaa vierailijat Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Nollaa palkinnot Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Ikkunatyyppi Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapahtumatiedot Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Viesti, joka näytetään palkinnon myöntämisen yhteydessä Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Palkinto Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin taso Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin kokemus Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsupisteet @@ -2323,171 +2820,202 @@ % - + AI-generated, needs review by native speaker; delete this comment afterwards + % Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Ylitys Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Liike Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista objekti Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Päätaidot Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Hyökkäys Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Puolustus Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsuvoima Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Tieto Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssit Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Taidot Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksiköt Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonukset Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Kesto Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tyyppi Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Arvo Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Heitä Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Heitä seikkailukartan loitsu Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsu Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Taikakoulun taso Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Rajoitin Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Viikonpäivä Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Päiviä kulunut Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarit Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankariluokat Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajat - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei mitään - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päivä %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Palkinto %1 @@ -2495,27 +3023,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Lomake Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Kapakan huhut Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Uusi huhu @@ -2524,287 +3057,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Skenaarion ominaisuudet General - + AI-generated, needs review by native speaker; delete this comment afterwards + Yleiset Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Alueen nimi Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Alueen väri Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Skenaarion nimi Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttatiedosto Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuo... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Vie... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Oletusvaikeustaso Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Edellytykset Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Alueen hiiren oikean napin teksti Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prologi/Epilogi Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prologi Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Käytössä Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musiikki Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Ääni Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Teksti Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilogi Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Siirtyminen Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Siirtymässä sankarit säilyvät Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kokemus Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Päätaidot Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Sivutaidot Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktit All - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaikki None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei mitään Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Siirtymässä artefaktit Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Aloitus Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Aloitusasetukset ovat Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Aloitusbonuksen vaihtoehdot Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarin siirtymäasetukset Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Aloitussankarin asetukset Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajan sijainti Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Aloitusbonusvaihtoehto Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Siirtymä/Aloitussankari Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Muokkaa... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahvin Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Luotu Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Satunnainen No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei karttaa Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaaja Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Avaa kartta All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaikki tuetut kartat (*.vmap *.h3m);;VCMI-kartat (*.vmap);;HoMM3-kartat (*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Virhe Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiedoston avaaminen epäonnistui. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Tallenna kartta VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kartat (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kartat (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Lähdeskenaario Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankari @@ -2812,12 +3400,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Skenaarion ominaisuudet Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Valitse bonustyyppi @@ -2825,55 +3415,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsu Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksikkö - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakennus Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakti Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsukäärö Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Päätaidot - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Sivutaidot - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssi @@ -2883,118 +3481,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Vastaanottaja Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksikkötyyppi Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Määrä Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Hyökkäystaito Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Puolustustaito Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsuvoima Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiede Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Hallinta Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssityyppi Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Muokkaa aloitusbonusta - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahvin - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Luotu - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Satunnainen - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Yhteinen (%1 ja %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Harvinainen (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + vahvin sankari - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + luotu sankari - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + satunnainen sankari - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1-loitsu kohteelle %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 kohteelle %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1-artefakti kohteelle %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1-loitsukäärö kohteelle %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päätaidot (Hyökkäys: %1, Puolustus: %2, Loitsu: %3, Tiede: %4) kohteelle %5 @@ -3002,77 +3623,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ajastettu tapahtuma Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapahtuman nimi Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Kirjoita tapahtumaviestin teksti affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + vaikuttaa ihmispelaajaan affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + vaikuttaa tekoälyyn Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ensimmäinen tapahtumapäivä Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Toistuvuus (0 = ei toistoa) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Vaikuttavat pelaajat Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssit type - + AI-generated, needs review by native speaker; delete this comment afterwards + tyyppi qty - + AI-generated, needs review by native speaker; delete this comment afterwards + määrä Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Poistettavat objektit Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -3080,42 +3716,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakennukset Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakenna kaikki Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Pura kaikki Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Ota kaikki käyttöön Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista kaikki käytöstä Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tyyppi Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Käytössä Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakennettu @@ -3123,77 +3767,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaupunkitapahtuma General - + AI-generated, needs review by native speaker; delete this comment afterwards + Yleiset Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tapahtuman nimi Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Kirjoita tapahtumaviestin teksti Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ensimmäinen tapahtumapäivä Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Toistuvuus (0 = ei toistoa) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Vaikuttavat pelaajat affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + vaikuttaa ihmispelaajaan affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + vaikuttaa tekoälyyn Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurssit Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Rakennukset Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksiköt OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Yksikkötaso %1 / Yksikkötaso %1 Parannus Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päivä %1 - %2 @@ -3201,7 +3860,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päivä %1 - %2 @@ -3209,32 +3869,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaupunkitapahtumat Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Ajastetut tapahtumat Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lisää Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Päivä %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Uusi tapahtuma @@ -3242,17 +3908,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsut Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukauta loitsut Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 1 @@ -3261,7 +3930,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsu joka voi ilmestyä taikagildaan @@ -3270,27 +3940,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsu joka täytyy ilmestyä taikagildaan Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Taso 5 @@ -3298,43 +3973,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttakäännökset Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Kieli Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuettu String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Merkkijonon ID Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Teksti Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista käännös Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Oletuskieltä ei voi poistaa All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaikki nykyiset tekstimerkinnät tälle kielelle poistetaan. Jatketaanko? @@ -3342,117 +4025,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartantarkastuksen tulokset - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttaa ei ole ladattu - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajalle %1 ei ole sallittuja ryhmiä - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Yhtään pelaajaa ei ole sallittu pelaamaan tätä karttaa - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartta on sallittu yhdelle pelaajalle eikä sitä voi aloittaa - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Yhtään ihmispelaajaa ei ole sallittu pelaamaan tätä karttaa - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Objekti %1 on määritetty ei-pelattavalle pelaajalle %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsukäärö %1 ei ole liitetty mihinkään instanssiin ja se täytyy poistaa - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakti %1 on estetty kartan asetuksissa - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajalla %1 ei ole kaupunkeja tai sankareita määritettynä + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Vankila %1 täytyy olla NEUTRAALI + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Omistettava objekti %1 on LIPUTTAMATON, mutta sillä täytyy olla NEUTRAALI tai pelaajan omistaja + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarilla %1 täytyy olla omistaja - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankari %1 on estetty kartan asetuksissa - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankari %1 esiintyy kartalla kahteen kertaan - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Sankarilla %1 ei ole tyyppiä ja se täytyy poistaa - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Loitsukäärö %1 on estetty kartan asetuksissa - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajalla %1 ei ole yhtään aloituskaupunkia - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartalla ei ole nimeä - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartalla ei ole kuvausta - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Kartta on kelvollinen eikä siinä ole virheitä. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Poikkeus tapahtui tarkistuksen aikana: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuntematon poikkeus tapahtui tarkistuksen aikana @@ -3460,77 +4166,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Lomake Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Voittoviesti Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Vain ihmispelaajille Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Salli tavallinen voitto Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametrit - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Ei erikoisvoittoa - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Valtaa artefakti - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Palkkaa yksiköitä - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Kokoa resursseja - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Rakenna rakennus - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Valtaa kaupunki - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Voita sankari - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Kuljeta artefakti - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Tapa hirviö + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Mikä tahansa kaupunki @@ -3538,67 +4259,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Luo uusi kartta Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttakoko Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Korkeus Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Leveys XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Satunnainen kartta Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Pelaajat S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3606,172 +4340,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Satunnainen Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Ihmistiimit Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Tietokoneen tiimit Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Vakiokoko Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukautettu koko Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Maanalainen Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Ihmiset Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Tietokoneet Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Hirviöiden vahvuus Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Heikko Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Normaali Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahva Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Vesimäärä None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei ollenkaan Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Saaristo Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiet Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Multa Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Sora Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Kivitie Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Pohja Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Mukautettu siemen Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Luo satunnainen kartta OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Peruuta No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Ei pohjaa No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametrien mukaisia pohjia ei ole. Satunnaista karttaa ei voi luoda. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + RMG epäonnistui [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [oletus] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Avattavan kartan tiedostopolku. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Pura alkuperäiset H3-arkistot erilliseen kansioon. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + Puretusta arkistosta jakaa TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 ja Un44 yksittäisiin PNG-kuviin. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + Puretusta arkistosta muuntaa yksittäiset kuvat (.pcx) PNG-muotoon (löytyvät Images-kansiosta). + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Poista alkuperäiset tiedostot niiltä osin, mitkä jaettiin / muunnettiin. diff --git a/mapeditor/translation/french.ts b/mapeditor/translation/french.ts index 63843159e..902302fa0 100644 --- a/mapeditor/translation/french.ts +++ b/mapeditor/translation/french.ts @@ -25,12 +25,14 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Équiper où : @@ -49,7 +51,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Éditeur de Campagnes VCMI @@ -100,24 +103,28 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propriétés de la campagne Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propriétés du scénario Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Afficher l’arrière-plan complet Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Éditeur de scénario @@ -137,17 +144,20 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Toutes les campagnes prises en charge (*.vcmp *.h3c);;Campagnes VCMI (*.vcmp);;Campagnes HoMM3 (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Enregistrer la campagne VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Campagnes VCMI (*.vcmp) @@ -156,7 +166,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propriétés de la campagne @@ -166,12 +177,14 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nom de la campagne Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Description de la campagne @@ -181,58 +194,69 @@ Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Contact de l’auteur (ex. e-mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Date de création de la campagne Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Version de la campagne Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musique Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + La difficulté du scénario est sélectionnable par l’utilisateur Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Régions Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Préréglage des régions Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Arrière-plan Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Suffixe Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Préfixe Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Longueur du suffixe de couleur @@ -247,37 +271,44 @@ Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Divers Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Chargement de l’image d’arrière-plan Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Image de bordure vidéo Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Vidéo d’introduction Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Vidéo de fin Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Personnalisé Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Infixe @@ -292,22 +323,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Position de l’étiquette X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Position de l’étiquette Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Moins de scénarios New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + La nouvelle configuration de région prend en charge moins de scénarios qu’auparavant. Certains seront supprimés. Continuer ? @@ -399,7 +434,8 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacts @@ -414,12 +450,14 @@ Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Emplacement Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact @@ -435,7 +473,8 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Étiquette de texte @@ -553,7 +592,7 @@ MainWindow - + VCMI Map Editor Éditeur de carte VCMI @@ -566,7 +605,8 @@ Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Ouvrir récemment @@ -661,12 +701,14 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Plus... @@ -676,7 +718,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -686,7 +729,8 @@ Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N @@ -702,20 +746,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Éditeur de campagne - - + + View underground Voir le sous-sol Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +771,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+P @@ -735,7 +782,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +793,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +804,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +825,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +841,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Entrée @@ -800,7 +852,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +864,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +875,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +886,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Suppr @@ -841,7 +897,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +908,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+V - - - + + + Update appearance Mettre à jour l'apparence @@ -874,7 +932,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +943,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +954,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +965,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +976,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +987,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +998,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1009,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,7 +1020,8 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E @@ -975,7 +1042,8 @@ Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+M @@ -986,7 +1054,8 @@ Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+C @@ -1026,7 +1095,8 @@ Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ @@ -1036,7 +1106,8 @@ Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- @@ -1049,240 +1120,299 @@ Ctrl+Maj+= - + Confirmation Confirmation - + Unsaved changes will be lost, are you sure? Les modifications non sauvegardées seront perdues. Êtes-vous sûr ? - - - Mods are required - - - Failed to open map - + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Des mods sont requis - + + Failed to open map + AI-generated, needs review by native speaker; delete this comment afterwards + Échec de l’ouverture de la carte + + + Open map Ouvrir une carte - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Toutes les cartes prises en charge (*.vmap *.h3m);;Cartes VCMI (*.vmap);;Cartes HoMM3 (*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Fichiers récemment ouverts - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Validation de la carte - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + La carte comporte des problèmes critiques et ne sera probablement pas jouable. Ouvrez le validateur depuis le menu Carte pour voir les problèmes détectés - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + La carte comporte certaines erreurs. Ouvrez le validateur depuis le menu Carte pour voir les problèmes détectés - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Échec de l’enregistrement de la carte - + Save map Enregistrer la carte - + VCMI maps (*.vmap) Cartes VCMI (*.vmap) - + Type Type - + Towns - + AI-generated, needs review by native speaker; delete this comment afterwards + Villes - + Objects - + AI-generated, needs review by native speaker; delete this comment afterwards + Objets - + Heroes Héros - - - Artifacts - - - - - Resources - - - - - Banks - - - - - Dwellings - - - - - Grounds - - - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacts - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Ressources - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Banques - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Habitations - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Terrains - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Téléporteurs - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Mines + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Déclencheurs + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Monstres + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Quêtes + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Objets WoG + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Obstacles + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Autres - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Problème de chargement des mods - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Erreur critique lors du chargement des mods. Désactivez les mods invalides et redémarrez. - - + + View surface Afficher la surface - + No objects selected Pas d'objets sélectionnés - + This operation is irreversible. Do you want to continue? Cette opération est irreversible. Voulez-vous continuer ? - + Errors occurred. %1 objects were not updated Erreur rencontrée. %1 objets n'ont pas étés mis à jour - + Save to image Sauvegarder en tant qu'image - + Select maps to convert Sélectionner les cartes à convertir - + HoMM3 maps(*.h3m) Cartes HoMM3(*.h3m) - + Choose directory to save converted maps Sélectionner le dossier ou sauvegarder les cartes converties - + Operation completed Opération terminée - + Successfully converted %1 maps Conversion éffectuée avec succès des %1 cartes - + Failed to convert the map. Abort operation Erreur de conversion de carte. Opération annulée - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Sélectionner une campagne à convertir - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Campagnes HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Sélectionner le fichier de destination - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Campagnes VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + Le héro %1 ne peut pas être créé en tant que NEUTRE. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Mod requis manquant + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Voulez-vous le faire maintenant ? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Le mod de cet objet est obligatoire pour que la carte reste valide. @@ -1467,7 +1597,8 @@ No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Aucune équipe @@ -1475,6 +1606,33 @@ Identifiant du joueur : %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Sélectionner un joueur + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Un héros ne peut pas être créé comme NEUTRE + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Basculer vers l’un des joueurs disponibles : + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Raccourci : %1 + + PlayerSettings @@ -1520,29 +1678,31 @@ QObject - + Beginner Débutant - + Advanced Avancé - + Expert Expert - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences secondaires par défaut : - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences secondaires : @@ -1573,22 +1733,26 @@ No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Pas de patrouille POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + NIVEAU DE PUISSANCE HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + TYPE DE HÉROS Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Classe du héros @@ -1598,20 +1762,23 @@ Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacts %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - + %n case + %n cases @@ -1627,42 +1794,50 @@ Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressource Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Récompense : artefact Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Quête Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Identifiant ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + Sous-ID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + NomInstance IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + EstStatique @@ -1674,7 +1849,8 @@ Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Armée @@ -1687,31 +1863,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Propriétaire Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Identique à la ville Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Unités amovibles Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Type d’espace réservé Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Niveau de puissance @@ -1719,43 +1900,50 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Type de héros Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Expérience MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + HOMME FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + FEMME Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Genre Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nom Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Biographie @@ -1767,19 +1955,22 @@ Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Rayon de patrouille Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nom de la ville Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Identique au joueur @@ -1804,7 +1995,8 @@ Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Productivité @@ -1812,29 +2004,34 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Quantité Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Personnage Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Sélectionner une ville Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Ne fuit jamais Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Pas de croissance @@ -1846,50 +2043,58 @@ Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Supprimer après Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Déclencheur humain Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Déclencheur IA First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Texte à la première visite Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Texte à la visite suivante Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Texte de complétion Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Répéter la quête Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Limite de temps @@ -1897,185 +2102,225 @@ INCLASSABLE - + Can't place object Impossible de placer l'objet - + There can only be one grail object on the map. Il ne peut y avoir qu'un objet Graal sur la carte. - - Hero %1 cannot be created as NEUTRAL. - Le héro %1 ne peut pas être créé en tant que NEUTRE. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (sous-mod de %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Le mod « %1 »%2 est requis par un objet sur la carte. +Ajoutez-le aux mods requis dans Carte → Paramètres généraux. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Sorts personnalisés : - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Sorts par défaut - + Default Défaut Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Quête : Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jour de la semaine : %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jours écoulés : %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Niveau du héros : %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Expérience du héros : %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Points de mana : %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pourcentage de mana : %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences principales : %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressources : %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacts : %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sorts : %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences secondaires : %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Créatures : %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Héros : %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Classes de héros : %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Joueurs : %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Récompenses : - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Message de récompense : %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Différence de mana : %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Points de déplacement : %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pourcentage de déplacement : %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Sort lancé : %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus : %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Bâtiments construits : Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Bâtiments interdits : Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Événements de ville : - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Requis : - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Possibles : @@ -2474,18 +2719,18 @@ Joueurs - + None Aucune - + Day %1 Jour %1 - - + + Reward %1 Récompense %1 @@ -2524,7 +2769,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propriétés du scénario @@ -2534,32 +2780,38 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nom de la région Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Couleur de la région Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nom du scénario Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Fichier de carte Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importer... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exporter... @@ -2570,27 +2822,32 @@ Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Difficulté par défaut Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Conditions préalables Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Texte au clic droit sur la région Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prologue / Épilogue Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prologue @@ -2602,19 +2859,22 @@ Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Vidéo Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musique Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Voix @@ -2625,32 +2885,38 @@ Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Épilogue Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Transfert Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Les héros transférés sont conservés Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Expérience Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences principales Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétences secondaires @@ -2660,12 +2926,14 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacts All - + AI-generated, needs review by native speaker; delete this comment afterwards + Tous @@ -2675,74 +2943,88 @@ Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacts transférés Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Départ Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Options de départ Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Options de bonus de départ Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Options de transfert de héros Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Options du héros de départ Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Position du joueur Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Option de bonus de départ Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Transfert / Héros de départ Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Ajouter... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifier... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Le plus fort Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Généré @@ -2752,7 +3034,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Aucune carte @@ -2773,13 +3056,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Erreur Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Impossible d’ouvrir le fichier. @@ -2789,22 +3074,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Cartes VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Cartes HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Scénario source Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Héros @@ -2812,12 +3101,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propriétés du scénario Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Sélectionner un type de bonus @@ -2831,49 +3122,56 @@ Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Créature - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Bâtiment Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Parchemin de sort Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétence principale - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétence secondaire - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressource @@ -2883,33 +3181,39 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Destinataire Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Type de créature Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Quantité Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétence d’attaque Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Compétence de défense Spell power - Puissance du sort + AI-generated, needs review by native speaker; delete this comment afterwards + Puissance magique @@ -2919,82 +3223,97 @@ Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Maîtrise Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Type de ressource Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifier le bonus de départ - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Le plus fort - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Généré - + Random Aléatoire - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Commun (%1 et %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Rare (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + héros le plus fort - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + héros généré - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + héros aléatoire - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sort %1 pour %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 pour %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact %1 pour %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Parchemin %1 pour %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Comp. principale (Attaque : %1, Défense : %2, Sort : %3, Connaissance : %4) pour %5 @@ -3057,7 +3376,8 @@ Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Objets à supprimer @@ -3270,7 +3590,8 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Sort qui doit apparaître dans la guilde des mages @@ -3345,112 +3666,114 @@ Résultats de la validation de la carte - + Map is not loaded Aucune carte n'est chargée - + No factions allowed for player %1 Pas de factions autorisées pour le joueur %1 - + No players allowed to play this map Aucun joueur autorisé à jouer sur cette carte - + Map is allowed for one player and cannot be started La carte est autorisée pour un joueur et ne peut pas être démarrée - + No human players allowed to play this map Aucun joueur humain n'est autorisé à jouer sur cette carte - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - L'instance blindée %1 est IMMARQUABLE mais doit avoir un propriétaire NEUTRE ou joueur - - - + Object %1 is assigned to non-playable player %2 L'objet %1 est attribué au joueur non jouable %2 - + Spell scroll %1 doesn't have instance assigned and must be removed Le défilement de sort %1 n'a pas d'instance assignée et doit être enlevé - + Artifact %1 is prohibited by map settings L'artéfact %1 est interdit par la configuration de la carte - + Player %1 has no towns and heroes assigned Le joueur %1 n'a pas de ville ni de héro assigné - + Prison %1 must be a NEUTRAL La prison %1 doit être NEUTRE - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + L’objet possédé %1 ne peut être marqué mais doit avoir un propriétaire NEUTRE ou joueur + + + Hero %1 must have an owner Le héros %1 doit avoir un propriétaire - + Hero %1 is prohibited by map settings Le héros %1 est interdit par les paramètres de la carte - + Hero %1 has duplicate on map Le héros %1 a un doublon sur la carte - + Hero %1 has an empty type and must be removed Le héros %1 a un type vide et doit être supprimé - + Spell scroll %1 is prohibited by map settings Le défilement des sorts %1 est interdit par les paramètres de la carte - + Player %1 doesn't have any starting town Le joueur %1 n'a pas de ville de départ - + Map name is not specified Le nom de la carte n'est pas spécifié - + Map description is not specified La description de la carte n'est pas spécifiée - - Map contains object from mod "%1", but doesn't require it - La carte contient des objets du mod "%1", mais il n'est pas requis + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + La carte est valide et ne présente aucun problème. - + Exception occurs during validation: %1 Une exception se produit lors de la validation : %1 - + Unknown exception occurs during validation Une exception inconnue se produit lors de la validation @@ -3483,54 +3806,55 @@ Paramètres - + No special victory Pas de victoire spéciale - + Capture artifact Récupérer l'artefact - + Hire creatures Engagez des créatures - + Accumulate resources Accumuler des resources - + Construct building Construire un bâtiment - + Capture town Conquérir une ville - + Defeat hero Battre un héros - + Transport artifact Transporter un artefact - + Kill monster Tuer un monster - + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + N’importe quelle ville @@ -3621,27 +3945,32 @@ Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Taille standard Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Taille personnalisée Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Souterrain Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Humains Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Ordinateurs @@ -3687,17 +4016,20 @@ Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Terre Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Gravier Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Pavés @@ -3743,33 +4075,34 @@ [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [défaut] main - + Filepath of the map to open. Chemin du fichier de la carte à ouvrir. - + Extract original H3 archives into a separate folder. Extraire les archives H3 d'origine dans un dossier séparé. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. À partir d'une archive extraite, il divise TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 et Un44 en fichiers PNG individuals. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. À partir d'une archive extraite, convertit des images uniques (trouvées dans le dossier Images) de .pcx en png. - + Delete original files, for the ones split / converted. Supprimer les fichiers d'origine, pour ceux fractionnés/converts. diff --git a/mapeditor/translation/german.ts b/mapeditor/translation/german.ts index 5cf99d1c9..205a729b9 100644 --- a/mapeditor/translation/german.ts +++ b/mapeditor/translation/german.ts @@ -553,7 +553,7 @@ MainWindow - + VCMI Map Editor VCMI-Karteneditor @@ -707,8 +707,8 @@ - - + + View underground Ansicht Untergrund @@ -855,9 +855,9 @@ - - - + + + Update appearance Aussehen aktualisieren @@ -1049,242 +1049,273 @@ Strg+Umschalt+= - + Confirmation Bestätigung - + Unsaved changes will be lost, are you sure? Ungespeicherte Änderungen gehen verloren, sind sie sicher? - + Mods are required Mods sind erforderlich - + Failed to open map Karte konnte nicht geöffnet werden - + Open map Karte öffnen - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Alle unterstützten Karten (*.vmap *.h3m);;VCMI-Karten (*.vmap);;HoMM3-Karten (*.h3m) - + Recently Opened Files Kürzlich geöffnete Dateien - + Map validation Validierung der Karte - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found Die Karte hat kritische Probleme und wird höchstwahrscheinlich nicht spielbar sein. Öffnen Sie den Validator aus dem Kartenmenü, um die gefundenen Probleme zu sehen - + Map has some errors. Open Validator from the Map menu to see issues found Karte hat einige Fehler. Öffnen Sie den Validator aus dem Kartenmenü, um die gefundenen Probleme zu sehen - + Failed to save map Karte konnte nicht gespeichert werden - + Save map Karte speichern - + VCMI maps (*.vmap) VCMI-Karten (*.vmap) - + Type Typ - + Towns Städte - + Objects Objekte - + Heroes Helden - + Artifacts Artefakte - + Resources Ressourcen - + Banks Bänke - + Dwellings Unterkünfte - + Grounds Gelände - + Teleports Teleporter - + Mines Minen - + Triggers Trigger - + Monsters Monster - + Quests Aufgaben - + Wog Objects Wog Objekte - + Obstacles Hindernisse - + Other Anderes - + Mods loading problem Problem beim Laden von Mods - + Critical error during Mods loading. Disable invalid mods and restart. Kritischer Fehler beim Laden von Mods. Deaktivieren Sie ungültige Mods und starten Sie neu. - - + + View surface Oberfläche anzeigen - + No objects selected Keine Objekte selektiert - + This operation is irreversible. Do you want to continue? Diese Operation ist unumkehrbar. Möchten sie fortsetzen? - + Errors occurred. %1 objects were not updated Fehler sind aufgetreten. %1 Objekte konnten nicht aktualisiert werden - + Save to image Als Bild speichern - + Select maps to convert Zu konvertierende Karten auswählen - + HoMM3 maps(*.h3m) HoMM3-Karten (*.h3m) - + Choose directory to save converted maps Verzeichnis zum Speichern der konvertierten Karten wählen - + Operation completed Vorgang abgeschlossen - + Successfully converted %1 maps Erfolgreiche Konvertierung von %1 Karten - + Failed to convert the map. Abort operation Die Karte konnte nicht konvertiert werden. Vorgang abgebrochen - + Select campaign to convert Kampagne zur Konvertierung auswählen - + HoMM3 campaigns (*.h3c) HoMM3-Kampagnen (*.h3c) - + Select destination file Zieldatei auswählen - + VCMI campaigns (*.vcmp) VCMI-Kampagnen (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + Held %1 kann nicht als NEUTRAL erstellt werden. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Erforderliches Mod fehlt + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Möchten Sie das jetzt tun? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Das Mod dieses Objekts ist erforderlich, damit die Karte gültig bleibt. + + MapSettings @@ -1475,6 +1506,33 @@ Spieler-ID: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Spieler auswählen + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Held kann nicht als NEUTRAL erstellt werden + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Wechseln Sie zu einem der verfügbaren Spieler: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Tastenkombination: %1 + + PlayerSettings @@ -1520,27 +1578,27 @@ QObject - + Beginner Anfänger - + Advanced Fortgeschrittene - + Expert Experte - + Default secondary skills: Standard-Sekundärfähigkeiten: - + Secondary skills: Sekundärfähigkeiten: @@ -1897,34 +1955,44 @@ UNFLAGGBAR - + Can't place object Objekt kann nicht platziert werden - + There can only be one grail object on the map. Es kann sich nur ein Gral auf der Karte befinden. - - Hero %1 cannot be created as NEUTRAL. - Held %1 kann nicht als NEUTRAL erstellt werden. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (Submodul von %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Das Mod „%1“%2 wird von einem Objekt auf der Karte benötigt. +Fügen Sie es zu den erforderlichen Mods unter Karte → Allgemeine Einstellungen hinzu. + + + + Custom Spells: Benutzerdefinierte Zaubersprüche: - - + + Default Spells Standard-Zaubersprüche - + Default Standard @@ -1945,13 +2013,13 @@ - + Hero Level: %1 Heldenstufe: %1 - + Hero Experience: %1 Heldenerfahrung: %1 @@ -1962,43 +2030,43 @@ - + Mana Percentage: %1 Mana-Prozentsatz: %1 - + Primary Skills: %1/%2/%3/%4 Primäre Fertigkeiten: %1/%2/%3/%4 - + Resources: %1 Ressourcen: %1 - + Artifacts: %1 Artefakte: %1 - + Spells: %1 Zaubersprüche: %1 - + Secondary Skills: %1 Sekundäre Fertigkeiten: %1 - + Creatures: %1 Kreaturen: %1 @@ -2018,37 +2086,37 @@ Spieler: %1 - + Rewards: Belohnungen: - + Reward Message: %1 Belohnungsmeldung: %1 - + Mana Diff: %1 Mana-Differenz: %1 - + Move Points: %1 Bewegungspunkte: %1 - + Move Percentage: %1 Prozentsatz der Bewegung: %1 - + Spell Cast: %1 (%2) Zauberspruch gewirkt: %1 (%2) - + Bonuses: %1 Boni: %1 @@ -2068,12 +2136,12 @@ Stadt-Ereignisse: - + Required: Erforderlich: - + Possible: Möglich: @@ -2474,18 +2542,18 @@ Spieler - + None Keine - + Day %1 Tag %1 - - + + Reward %1 Belohnung %1 @@ -2837,7 +2905,7 @@ - + Building Gebäude @@ -2864,14 +2932,14 @@ - + Secondary skill Sekundäre Fähigkeit - + Resource Ressource @@ -2932,67 +3000,67 @@ Bearbeite Start-Bonus - + Strongest Stärkster - + Generated Generiert - + Random Zufall - + Common (%1 and %2) Gängig (%1 and %2) - + Rare (%1, %2, %3, %4) Selten (%1, %2, %3, %4) - + strongest hero stärkster Held - + generated hero generierter Held - + random hero zufälliger Held - + %1 spell for %2 %1 Zauber für %2 - + %1 %2 for %3 %1 %2 für %3 - + %1 artifact for %2 %1 Artefakt für %2 - + %1 spell scroll for %2 %1 Zauberrolle für %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Primäre Fähigkeit (Angriff: %1, Verteidigung: %2, Zauberkraft: %3, Wissen: %4) für %5 @@ -3345,112 +3413,114 @@ Ergebnisse der Kartenvalidierung - + Map is not loaded Karte ist nicht geladen - + No factions allowed for player %1 Keine Fraktionen für Spieler %1 erlaubt - + No players allowed to play this map Keine Spieler dürfen diese Karte spielen - + Map is allowed for one player and cannot be started Karte ist für einen Spieler erlaubt und kann nicht gestartet werden - + No human players allowed to play this map Keine menschlichen Spieler dürfen diese Karte spielen - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - Gepanzerte Instanz %1 ist UNFLAGGABLE, muss aber NEUTRAL oder Spielerbesitzer haben - - - + Object %1 is assigned to non-playable player %2 Objekt %1 ist dem nicht spielbaren Spieler %2 zugewiesen - + Spell scroll %1 doesn't have instance assigned and must be removed Zauberschriftrolle %1 hat keine Instanz zugewiesen und muss entfernt werden - + Artifact %1 is prohibited by map settings Artefakt %1 ist durch Karteneinstellungen verboten - + Player %1 has no towns and heroes assigned Spieler %1 hat keine Städte und Helden zugewiesen - + Prison %1 must be a NEUTRAL Gefängnis %1 muss NEUTRAL sein - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Besitzbares Objekt %1 kann nicht markiert werden, muss aber NEUTRAL oder einem Spieler gehören + + + Hero %1 must have an owner Held %1 muss einen Besitzer haben - + Hero %1 is prohibited by map settings Held %1 ist durch Karteneinstellungen verboten - + Hero %1 has duplicate on map Held %1 hat Duplikat auf Karte - + Hero %1 has an empty type and must be removed Held %1 hat einen leeren Typ und muss entfernt werden - + Spell scroll %1 is prohibited by map settings Zauberschriftrolle %1 ist durch Karteneinstellungen verboten - + Player %1 doesn't have any starting town Spieler %1 hat keine Startstadt - + Map name is not specified Kartenname ist nicht angegeben - + Map description is not specified Kartenbeschreibung ist nicht angegeben - - Map contains object from mod "%1", but doesn't require it - Karte enthält Objekt aus Mod "%1", benötigt es aber nicht + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Die Karte ist gültig und weist keine Probleme auf. - + Exception occurs during validation: %1 Bei der Validierung ist eine Ausnahme aufgetreten: %1 - + Unknown exception occurs during validation Unbekannte Ausnahme trat während der Validierung auf @@ -3483,52 +3553,52 @@ Parameter - + No special victory Kein besonderer Sieg - + Capture artifact Artefakt sammeln - + Hire creatures Kreaturen anheuern - + Accumulate resources Ressourcen ansammeln - + Construct building Gebäude errichten - + Capture town Stadt einnehmen - + Defeat hero Held besiegen - + Transport artifact Artefakt transportieren - + Kill monster Monster töten - + Any town Jede Stadt @@ -3749,27 +3819,27 @@ main - + Filepath of the map to open. Dateipfad der zu öffnenden Karte. - + Extract original H3 archives into a separate folder. Extrahieren Sie die Original-H3-Archive in einen separaten Ordner. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Aus einem extrahierten Archiv zerlegt es TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 und Un44 in einzelne PNGs. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Aus einem extrahierten Archiv werden einzelne Bilder (aus dem Ordner "Images") von .pcx in png konvertiert. - + Delete original files, for the ones split / converted. Löschen Sie die Originaldateien für die gesplitteten/konvertierten Dateien. diff --git a/mapeditor/translation/greek.ts b/mapeditor/translation/greek.ts index 5ac1d9681..38f0e9ec6 100644 --- a/mapeditor/translation/greek.ts +++ b/mapeditor/translation/greek.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Ρυθμίσεις στρατού Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Ευρεία διάταξη Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Σφιχτή διάταξη @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνούργημα Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Εξοπλισμός σε: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Ακύρωση @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI Επεξεργαστής Εκστρατείας File - + AI-generated, needs review by native speaker; delete this comment afterwards + Αρχείο Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Επεξεργασία View - + AI-generated, needs review by native speaker; delete this comment afterwards + Προβολή Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Γραμμή εργαλείων Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνοιγμα Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση New - + AI-generated, needs review by native speaker; delete this comment afterwards + Νέο Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση ως... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιότητες Εκστρατείας Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιότητες Σεναρίου Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Εμφάνιση πλήρους φόντου Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Επεξεργαστής σεναρίου Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιβεβαίωση Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Οι μη αποθηκευμένες αλλαγές θα χαθούν, είστε βέβαιοι; Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνοιγμα χάρτη All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Όλες οι υποστηριζόμενες εκστρατείες (*.vcmp *.h3c);;VCMI εκστρατείες(*.vcmp);;HoMM3 εκστρατείες(*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση εκστρατείας VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI εκστρατείες (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιότητες Εκστρατείας General - + AI-generated, needs review by native speaker; delete this comment afterwards + Γενικά Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα εκστρατείας Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Περιγραφή εκστρατείας Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Συγγραφέας Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Επικοινωνία συγγραφέα (π.χ. email) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημερομηνία δημιουργίας εκστρατείας Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Έκδοση εκστρατείας Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Μουσική Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Η δυσκολία του σεναρίου επιλέγεται από τον χρήστη Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Περιοχές Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Προκαθορισμένες περιοχές Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Φόντο Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατάληξη Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρόθεμα Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήκος κατάληξης χρώματος Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Διάφορα Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Φόντο κατά τη φόρτωση Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Εικόνα βίντεο περιγράμματος Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Εισαγωγικό βίντεο Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Τελικό βίντεο Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμοσμένο Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενδιάμεσο @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Θέση ετικέτας Χ Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Θέση ετικέτας Υ Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Λιγότερα σενάρια New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Η νέα ρύθμιση περιοχής υποστηρίζει λιγότερα σενάρια από πριν. Μερικά θα αφαιρεθούν. Συνέχεια; @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Μορφή Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρονικά γεγονότα Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Νέο γεγονός @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Μορφή Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα χάρτη Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Περιγραφή χάρτη Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Συγγραφέας Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Επικοινωνία συγγραφέα (π.χ. email) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρόνος δημιουργίας χάρτη Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Έκδοση χάρτη Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Περιορισμός μέγιστου επιπέδου ηρώων Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Δυσκολία @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Δημιουργία χάρτη @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνούργηματα Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Θέση Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνούργημα @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Ικανότητες ήρωα @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Ετικέτα κειμένου Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Ικανότητα Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμογή ικανοτήτων @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμογή ξορκιών Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Μορφή Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήνυμα ήττας 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 μέρες χωρίς πόλη Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Παράμετροι No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Χωρίς ειδική ήττα Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Απώλεια κάστρου Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Απώλεια ήρωα Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Έληξε ο χρόνος Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρες χωρίς πόλη MainWindow - + VCMI Map Editor Επεξεργαστής χάρτη VCMI File - + AI-generated, needs review by native speaker; delete this comment afterwards + Αρχείο Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνοιγμα πρόσφατων Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Χάρτης Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Επεξεργασία View - + AI-generated, needs review by native speaker; delete this comment afterwards + Προβολή Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Γραμμή εργαλείων Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Μικροχάρτης Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Προβολή αντικειμένων χάρτη Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Περιηγητής Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιθεωρητής Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιότητα Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Τιμή Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Εργαλεία Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Ζωγραφική Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Εδάφη Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Δρόμοι Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Ποτάμια Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Προεπισκόπηση Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνοιγμα Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Περισσότερα... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Νέο Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση ως... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Επεξεργαστής εκστρατείας - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Προβολή υπόγειου Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Πάσο Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποκοπή Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Αντιγραφή Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Επικόλληση Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Γέμισμα Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Γεμίζει την επιλογή με εμπόδια Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Πλέγμα Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Γενικά Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Τίτλος και περιγραφή χάρτη Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Ρυθμίσεις παικτών Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Αναίρεση Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Επαναφορά Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Διαγραφή Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Ουδέτερος Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Επικύρωση Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενημέρωση εμφάνισης Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Αναδημιουργία εμποδίων Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Εξαγωγή ως... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Μεταφράσεις Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Μετατροπέας h3m Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Μετατροπέας h3c Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Κλείδωμα Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Κλειδώστε αντικείμενα στον χάρτη για να αποφύγετε περιττές αλλαγές Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξεκλείδωμα Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξεκλειδώστε όλα τα αντικείμενα στον χάρτη Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Μεγέθυνση Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Σμίκρυνση Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Επαναφορά ζουμ Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maj+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιβεβαίωση - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Οι μη αποθηκευμένες αλλαγές θα χαθούν, είστε βέβαιοι; + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Απαιτούνται mods + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποτυχία ανοίγματος χάρτη - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνοιγμα χάρτη - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Όλοι οι υποστηριζόμενοι χάρτες (*.vmap *.h3m);;Χάρτες VCMI(*.vmap);;Χάρτες HoMM3(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρόσφατα Ανοιγμένα Αρχεία - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Επικύρωση χάρτη - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο χάρτης έχει κρίσιμα προβλήματα και πιθανότατα δεν θα είναι αναπαίξιμος. Ανοίξτε τον Επικυρωτή από το μενού Χάρτης για να δείτε τα προβλήματα - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο χάρτης έχει κάποια σφάλματα. Ανοίξτε τον Επικυρωτή από το μενού Χάρτης για να δείτε τα προβλήματα - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποτυχία αποθήκευσης χάρτη - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση χάρτη - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + Χάρτες VCMI (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Πόλεις - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Αντικείμενα - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Ήρωες - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Πόροι - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Τράπεζες - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Κατοικίες - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Εδάφη - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Τηλεμεταφορές - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Ορυχεία + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Ενεργοποιητές + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Τέρατα + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Αποστολές + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Αντικείμενα Wog + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Εμπόδια + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Άλλα - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρόβλημα φόρτωσης Mods - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Κρίσιμο σφάλμα κατά τη φόρτωση των Mods. Απενεργοποιήστε τα άκυρα mods και επανεκκινήστε. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Προβολή επιφάνειας - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν επιλέχθηκαν αντικείμενα - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Αυτή η ενέργεια είναι μη αναστρέψιμη. Θέλετε να συνεχίσετε; - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Παρουσιάστηκαν σφάλματα. %1 αντικείμενα δεν ενημερώθηκαν - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση ως εικόνα - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλέξτε χάρτες για μετατροπή - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Χάρτες HoMM3(*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλέξτε κατάλογο για αποθήκευση μετατρεπόμενων χαρτών - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Η λειτουργία ολοκληρώθηκε - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Μετατράπηκαν επιτυχώς %1 χάρτες - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποτυχία μετατροπής του χάρτη. Διακοπή λειτουργίας - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλέξτε καμπάνια για μετατροπή - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Καμπάνιες HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλέξτε αρχείο προορισμού - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Καμπάνιες VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Ο Ήρωας %1 δεν μπορεί να δημιουργηθεί ως ΟΥΔΕΤΕΡΟΣ. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Λείπει απαιτούμενο Mod + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Θέλετε να το κάνετε τώρα ; + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Το mod αυτού του αντικειμένου είναι υποχρεωτικό για να παραμείνει ο χάρτης έγκυρος. @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Ρυθμίσεις χάρτη General - + AI-generated, needs review by native speaker; delete this comment afterwards + Γενικά Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Mods Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Γεγονότα Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Νίκη Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Ήττα Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρονικά Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Φήμες Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Ικανότητες Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Ήρωες Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + ΟΚ @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Αδυναμία τοποθέτησης αντικειμένου @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήνυμα @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Φόρμα Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Υποχρεωτικά mods για να παιχτεί αυτός ο χάρτης Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα mod Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Έκδοση Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Αυτόματη ανάθεση Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Ορισμός απαιτούμενων mods βάσει των αντικειμένων που τοποθετήθηκαν στον χάρτη. Αυτή η μέθοδος μπορεί να προκαλέσει προβλήματα εάν έχετε προσαρμόσει ανταμοιβές, φρουρές κ.λπ. από mods Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Mods αντικειμένων χάρτη Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Ορισμός όλων των mods που έχουν περιεχόμενο παιχνιδιού ως υποχρεωτικά Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Mods με πλήρες περιεχόμενο @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνθρωπος/Υπολογιστής CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Μόνο Υπολογιστής Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Ομάδα Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Κύρια πόλη Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρώμα @@ -1452,27 +1755,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Τυχαία φυλή Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Δημιουργία ήρωα στην κύρια πόλη (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (προεπιλογή) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Χωρίς ομάδα Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Αναγνωριστικό Παίκτη: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλογή Παίκτη + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Ο ήρωας δεν μπορεί να δημιουργηθεί ως ΟΥΔΕΤΕΡΟΣ + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Αλλάξτε σε έναν από τους διαθέσιμους παίκτες: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Συντόμευση: %1 @@ -1480,12 +1815,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Ρυθμίσεις παίκτη Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτες @@ -1495,7 +1832,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Εντάξει @@ -1503,7 +1841,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Πορτρέτο @@ -1514,167 +1853,198 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Προεπιλογή QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Αρχάριος + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Προχωρημένος + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Ειδικός - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Προεπιλεγμένες δευτερεύουσες ικανότητες: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Δευτερεύουσες ικανότητες: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Συμβατός Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Φιλικός Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιθετικός Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Εχθρικός Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Άγριος No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Χωρίς περιπολία POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + ΚΑΤΑΤΑΞΗ ΔΥΝΑΜΗΣ HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + ΤΥΠΟΣ ΗΡΩΑ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Κλάση ήρωα Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Πορτρέτο Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Ικανότητες Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Αντικείμενα %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - + %n κελί(α) + %n κελί(α) Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Κτίρια Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Γεγονότα Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόρος Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Ανταμοιβή αντικειμένου Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποστολή Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Αναγνωριστικό ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + ΌνομαΣτιγμιότυπου IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + ΕίναιΣτατικό neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + ουδέτερος Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Στρατός @@ -1687,31 +2057,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιοκτήτης Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Ίδιος με την πόλη Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαιρούμενες μονάδες Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος placeholder Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατάταξη δύναμης @@ -1719,67 +2094,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος ήρωα Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Εμπειρία MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ΑΝΔΡΑΣ FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ΓΥΝΑΙΚΑ Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Φύλο Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Βιογραφία Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Ακτίνα περιπολίας Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα πόλης Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Ίδιο με τον παίκτη @@ -1792,19 +2178,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήνυμα Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκι Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Παραγωγικότητα @@ -1812,270 +2201,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Ποσότητα Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Χαρακτήρας Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλογή πόλης Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν τρέπεται ποτέ σε φυγή Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν αυξάνεται Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Ανταμοιβή Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση μετά από Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενεργοποίηση από άνθρωπο Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενεργοποίηση από Υπολογιστή First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο πρώτης επίσκεψης Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο επόμενης επίσκεψης Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο ολοκλήρωσης Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Επανάληψη αποστολής Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρονικό όριο UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + ΧΩΡΙΣ ΣΗΜΑΙΑ - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Αδυναμία τοποθέτησης αντικειμένου - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Μπορεί να υπάρχει μόνο ένα αντικείμενο Γκράαλ στον χάρτη. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (υπο-τροποποίηση του %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Η τροποποίηση '%1'%2 απαιτείται από ένα αντικείμενο στον χάρτη. +Προσθέστε την στις απαιτούμενες τροποποιήσεις του χάρτη στις Γενικές ρυθμίσεις. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμοσμένα Ξόρκια: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Προεπιλεγμένα Ξόρκια - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Προεπιλογή Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποστολή: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα Εβδομάδας: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρες που πέρασαν: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο Ήρωα: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Εμπειρία Ήρωα: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόντοι Μάνα: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ποσοστό Μάνα: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρωτεύοντα Χαρακτηριστικά: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόροι: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Δευτερεύουσες Δεξιότητες: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Μονάδες: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ήρωες: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατηγορίες Ηρώων: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτες: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Ανταμοιβές: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήνυμα Ανταμοιβής: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Διαφορά Μάνα: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Πόντοι Κίνησης: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ποσοστό Κίνησης: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Ρίψη Ξορκιού: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Μπόνους: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Κτίρια που κατασκευάστηκαν: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Απαγορευμένα κτίρια: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Γεγονότα πόλης: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Απαιτούμενα: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Πιθανά: @@ -2083,32 +2530,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Στόχος αποστολής Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα εβδομάδας Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Περασμένες ημέρες Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο ήρωα Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Εμπειρία ήρωα Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόντοι Ξορκιών @@ -2118,7 +2571,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Σκοτώστε ήρωα/τέρας @@ -2128,87 +2582,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρωτεύοντα χαρακτηριστικά Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίθεση Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Άμυνα Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Δύναμη Ξορκιού Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Γνώση Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόροι Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεξιότητες Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Μονάδες Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Ήρωες Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατηγορίες Ηρώων Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτες None - + AI-generated, needs review by native speaker; delete this comment afterwards + Κανένας Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα %1 @@ -2216,7 +2687,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Ανταμοιβές @@ -2224,7 +2696,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη @@ -2232,90 +2705,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Λειτουργία επίσκεψης Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Λειτουργία επιλογής On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο κατά την επιλογή Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Δυνατότητα άρνησης Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Επαναφορά παραμέτρων Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Περίοδος days - + AI-generated, needs review by native speaker; delete this comment afterwards + ημέρες Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Επαναφορά επισκεπτών Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Επαναφορά ανταμοιβών Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος παραθύρου Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Πληροφορίες γεγονότος Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήνυμα που θα εμφανιστεί κατά την παροχή αυτής της ανταμοιβής Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Ανταμοιβή Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο ήρωα Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Εμπειρία ήρωα Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόντοι Ξορκιών @@ -2328,166 +2818,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Υπερχείλιση Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Κίνηση Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση αντικειμένου Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρωτεύοντα χαρακτηριστικά Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίθεση Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Άμυνα Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Δύναμη Ξορκιού Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Γνώση Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόροι Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεξιότητες Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Μονάδες Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Μπόνους Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Διάρκεια Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Τιμή Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Εκτέλεση Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Εκτέλεση ξορκιού στον χάρτη περιπέτειας Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκι Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο σχολής μαγείας Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Περιοριστής Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα εβδομάδας Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Περασμένες ημέρες Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Ήρωες Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατηγορίες Ηρώων Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτες - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Κανένας - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ανταμοιβή %1 @@ -2495,27 +3015,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Φόρμα Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Φήμες ταβέρνας Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Νέα φήμη @@ -2524,287 +3049,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιότητες Σεναρίου General - + AI-generated, needs review by native speaker; delete this comment afterwards + Γενικά Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα περιοχής Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρώμα περιοχής Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα σεναρίου Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Αρχείο χάρτη Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Εισαγωγή... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Εξαγωγή... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Προεπιλεγμένη δυσκολία Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Προϋποθέσεις Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο δεξιού κλικ περιοχής Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρόλογος/Επίλογος Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρόλογος Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενεργοποιημένο Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Βίντεο Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Μουσική Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Φωνή Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίλογος Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Μεταφορά Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Οι ήρωες μεταφοράς διατηρούν Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Εμπειρία Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρωτεύοντα χαρακτηριστικά Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Δευτερεύουσες δεξιότητες Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα All - + AI-generated, needs review by native speaker; delete this comment afterwards + Όλα None - + AI-generated, needs review by native speaker; delete this comment afterwards + Κανένα Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα μεταφοράς Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Αρχικά Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Οι αρχικές επιλογές είναι Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλογές αρχικού μπόνους Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλογές μεταφοράς ήρωα Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλογές αρχικού ήρωα Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Μπόνους Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Θέση παίκτη Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλογή αρχικού μπόνους Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Μεταφοράς/ Αρχικός ήρωας Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Επεξεργασία... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Ισχυρότερος Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Δημιουργήθηκε Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Τυχαίος No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Χωρίς χάρτη Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτης Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνοιγμα χάρτη All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Όλοι οι υποστηριζόμενοι χάρτες (*.vmap *.h3m);;Χάρτες VCMI(*.vmap);;Χάρτες HoMM3(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Σφάλμα Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν ήταν δυνατό το άνοιγμα του αρχείου. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποθήκευση χάρτη VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Χάρτες VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Χάρτες HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Σενάριο πηγής Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Ήρωας @@ -2812,12 +3392,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Ιδιότητες Σεναρίου Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Επιλέξτε τύπο μπόνους @@ -2825,55 +3407,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκι Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Πλάσμα - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Κτίριο Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Τεχνουργήματα Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Κύλινδρος ξορκιού Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρωτεύουσα ικανότητα - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Δευτερεύουσα ικανότητα - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόρος @@ -2883,118 +3473,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Παραλήπτης Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος πλάσματος Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Ποσότητα Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Ικανότητα επίθεσης Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Ικανότητα άμυνας Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Ισχύς ξορκιού Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Γνώση Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατοχή Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος πόρου Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Επεξεργασία Αρχικού Μπόνους - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Ισχυρότερος - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Δημιουργήθηκε - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Τυχαίος - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Κοινό (%1 και %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Σπάνιο (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + ισχυρότερος ήρωας - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + παραγόμενος ήρωας - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + τυχαίος ήρωας - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 ξόρκι για %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 για %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 τεχνουργήματα για %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 κύλινδρος ξορκιού για %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρωτεύουσα ικανότητα (Επίθεση: %1, Άμυνα: %2, Ξόρκι: %3, Γνώση: %4) για %5 @@ -3002,77 +3615,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρονομετρημένο γεγονός Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα γεγονότος Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Πληκτρολογήστε το κείμενο μηνύματος γεγονότος affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + επηρεάζει άνθρωπο affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + επηρεάζει AI Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα πρώτης εμφάνισης Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Επανάληψη μετά (0 = χωρίς επανάληψη) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Επηρεαζόμενοι παίκτες Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόροι type - + AI-generated, needs review by native speaker; delete this comment afterwards + τύπος qty - + AI-generated, needs review by native speaker; delete this comment afterwards + ποσότητα Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Αντικείμενα προς διαγραφή Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Εντάξει @@ -3080,42 +3708,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Κτίρια Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατασκευή όλων Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατεδάφιση όλων Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενεργοποίηση όλων Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Απενεργοποίηση όλων Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Τύπος Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Ενεργοποιημένο Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Κατασκευασμένο @@ -3123,77 +3759,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Γεγονός πόλης General - + AI-generated, needs review by native speaker; delete this comment afterwards + Γενικά Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Όνομα γεγονότος Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Πληκτρολογήστε το κείμενο μηνύματος γεγονότος Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα πρώτης εμφάνισης Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Επανάληψη μετά (0 = χωρίς επανάληψη) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Επηρεαζόμενοι παίκτες affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + επηρεάζει άνθρωπο affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + επηρεάζει AI Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Πόροι Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Κτίρια Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Πλάσματα OK - + AI-generated, needs review by native speaker; delete this comment afterwards + Εντάξει Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο πλάσματος %1 / Αναβάθμιση πλάσματος επιπέδου %1 Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα %1 - %2 @@ -3201,7 +3852,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα %1 - %2 @@ -3209,32 +3861,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Γεγονότα πόλης Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Χρονομετρημένα γεγονότα Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσθήκη Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ημέρα %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Νέο γεγονός @@ -3242,17 +3900,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκια Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμογή ξορκιών Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 1 @@ -3261,7 +3922,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκι που μπορεί να εμφανιστεί στη μαγική συντεχνία @@ -3270,27 +3932,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Ξόρκι που πρέπει να εμφανιστεί στη μαγική συντεχνία Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίπεδο 5 @@ -3298,43 +3965,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Μεταφράσεις χάρτη Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Γλώσσα Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Υποστηριζόμενη String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Αναγνωριστικό συμβολοσειράς Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Κείμενο Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Αφαίρεση μετάφρασης Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Η προεπιλεγμένη γλώσσα δεν μπορεί να αφαιρεθεί All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Όλες οι υπάρχουσες εγγραφές κειμένου για αυτήν τη γλώσσα θα αφαιρεθούν. Συνέχεια; @@ -3342,117 +4017,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποτελέσματα επικύρωσης χάρτη - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο χάρτης δεν έχει φορτωθεί - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν επιτρέπονται φατρίες για τον παίκτη %1 - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν επιτρέπονται παίκτες να παίξουν αυτόν τον χάρτη - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο χάρτης επιτρέπεται για έναν παίκτη και δεν μπορεί να ξεκινήσει - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν επιτρέπονται ανθρώπινοι παίκτες να παίξουν αυτόν τον χάρτη - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Το αντικείμενο %1 έχει ανατεθεί σε μη παικτικό παίκτη %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Το ειλητάριο ξορκιού %1 δεν έχει ανατεθεί σε παρουσία και πρέπει να αφαιρεθεί - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Το αντικείμενο %1 απαγορεύεται από τις ρυθμίσεις χάρτη - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο παίκτης %1 δεν έχει ανατεθειμένες πόλεις και ήρωες + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Η φυλακή %1 πρέπει να είναι ΟΥΔΕΤΕΡΗ + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Το αντικείμενο που μπορεί να αποκτηθεί %1 είναι ΜΗ ΣΗΜΑΙΝΟΜΕΝΟ αλλά πρέπει να έχει ΟΥΔΕΤΕΡΟ ή παίκτη ιδιοκτήτη + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Ο ήρωας %1 πρέπει να έχει ιδιοκτήτη - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο ήρωας %1 απαγορεύεται από τις ρυθμίσεις χάρτη - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο ήρωας %1 έχει διπλότυπο στον χάρτη - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο ήρωας %1 δεν έχει τύπο και πρέπει να αφαιρεθεί - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Το ειλητάριο ξορκιού %1 απαγορεύεται από τις ρυθμίσεις χάρτη - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Ο παίκτης %1 δεν έχει καμία αρχική πόλη - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Το όνομα χάρτη δεν έχει καθοριστεί - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Η περιγραφή χάρτη δεν έχει καθοριστεί - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Ο χάρτης είναι έγκυρος και δεν έχει προβλήματα. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Παρουσιάστηκε εξαίρεση κατά την επικύρωση: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Παρουσιάστηκε άγνωστη εξαίρεση κατά την επικύρωση @@ -3460,77 +4158,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Φόρμα Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Μήνυμα νίκης Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Μόνο για ανθρώπινους παίκτες Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Επίτρεψε τυπική νίκη Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Παράμετροι - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Χωρίς ειδική νίκη - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Κατάκτηση αντικειμένου - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Πρόσληψη πλασμάτων - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Συσσώρευση πόρων - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Κατασκευή κτηρίου - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Κατάκτηση πόλης - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Ήττα ήρωα - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Μεταφορά αντικειμένου - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Σκοτώστε τέρας + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Οποιαδήποτε πόλη @@ -3538,67 +4251,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Δημιουργία νέου χάρτη Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Μέγεθος χάρτη Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Ύψος Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Πλάτος XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Τυχαίος χάρτης Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Παίκτες S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + Μ (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + ΜΜ (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + ΜΒ (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + Β (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + ΠΒ (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + Γ (252x252) @@ -3606,172 +4332,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Τυχαίο Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Ομάδες ανθρώπων Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Ομάδες υπολογιστή Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Κανονικό μέγεθος Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμοσμένο μέγεθος Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Υπόγειο Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Άνθρωποι Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Υπολογιστές Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Ισχύς τεράτων Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Αδύναμη Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Κανονική Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Δυνατή Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Ποσότητα νερού None - + AI-generated, needs review by native speaker; delete this comment afterwards + Καθόλου Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Νησιά Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Δρόμοι Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Χώμα Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Χαλίκι Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Λιθόστρωτο Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Πρότυπο Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Προσαρμοσμένος σπόρος Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Δημιουργία τυχαίου χάρτη OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Ακύρωση No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Χωρίς πρότυπο No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Δεν υπάρχει πρότυπο για τις καθορισμένες παραμέτρους. Δεν μπορεί να δημιουργηθεί τυχαίος χάρτης. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + Αποτυχία RMG [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [προεπιλογή] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Διαδρομή αρχείου του χάρτη προς άνοιγμα. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Εξαγωγή των αρχικών αρχείων H3 σε ξεχωριστό φάκελο. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + Από εξαγόμενο αρχείο, χωρίζει τα TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 και Un44 σε μεμονωμένα PNG. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + Από εξαγόμενο αρχείο, μετατρέπει μεμονωμένες εικόνες (στο φάκελο Images) από .pcx σε png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Διαγραφή αρχικών αρχείων για εκείνα που χωρίστηκαν / μετατράπηκαν. diff --git a/mapeditor/translation/hungarian.ts b/mapeditor/translation/hungarian.ts index bb48a6cb5..9076418d5 100644 --- a/mapeditor/translation/hungarian.ts +++ b/mapeditor/translation/hungarian.ts @@ -49,7 +49,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI kampány szerkesztő @@ -100,24 +101,28 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány tulajdonságai Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Szintró tulajdonságai Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Teljes háttér megjelenítése Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Szintró szerkesztő @@ -137,12 +142,14 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Minden támogatott kampány (*.vcmp *.h3c);;VCMI kampányok (*.vcmp);;HoMM3 kampányok (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány mentése @@ -156,7 +163,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány tulajdonságai @@ -166,12 +174,14 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány neve Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány leírása @@ -181,58 +191,69 @@ Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Szerző elérhetősége (pl. e-mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány létrehozásának dátuma Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány verziója Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Zene Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + A szintró nehézsége választható Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Régiók Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Régió előbeállítás Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Háttér Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Utótag Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Előtag Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Szín utótag hossza @@ -247,37 +268,44 @@ Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Egyéb Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Háttérkép betöltése Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Videó szegély képe Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Bevezető videó Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Záró videó Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Egyéni Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Köztag @@ -292,22 +320,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Címke X pozíció Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Címke Y pozíció Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Kevesebb szintró New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Az új régióbeállítás kevesebb szintrót támogat, mint korábban. Néhány törlésre kerül. Folytatja? @@ -553,7 +585,7 @@ MainWindow - + VCMI Map Editor VCMI térképszerkesztő @@ -661,7 +693,8 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O @@ -676,7 +709,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -686,7 +720,8 @@ Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N @@ -702,20 +737,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampány szerkesztő - - + + View underground Földalatti nézet Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +762,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P @@ -735,7 +773,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +784,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +795,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +816,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +832,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter @@ -800,7 +843,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +855,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +866,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +877,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del @@ -841,7 +888,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +899,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance Megjelenés frissítése @@ -874,7 +923,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +934,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +945,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +956,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +967,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +978,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +989,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1000,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,7 +1011,8 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E @@ -975,7 +1033,8 @@ Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M @@ -986,7 +1045,8 @@ Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C @@ -1026,7 +1086,8 @@ Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ @@ -1049,242 +1110,273 @@ Ctrl+Shift+= - + Confirmation Megerősítés - + Unsaved changes will be lost, are you sure? Nem mentett változások el fognak veszni, biztos benne? - + Mods are required Modok szükségesek - + Failed to open map Nem sikerült a térkép megnyitása - + Open map Térkép megnyitása - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Minden támogatott térkép (*.vmap *.h3m);;VCMI térképek (*.vmap);;HoMM3 térképek (*.h3m) - + Recently Opened Files Legutóbb megnyitott fájlok - + Map validation Térkép érvényesítése - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found A térképen kritikus hibák vannak, és valószínűleg nem játszható. Nyissa meg az Ellenőrzőt a Térkép menüből, hogy megnézze a hibákat - + Map has some errors. Open Validator from the Map menu to see issues found A térképen hibák vannak. Nyissa meg az Ellenőrzőt a Térkép menüből, hogy megnézze a hibákat - + Failed to save map Nem sikerült a térkép mentése - + Save map Térkép mentése - + VCMI maps (*.vmap) VCMI térképek (*.vmap) - + Type Típus - + Towns Városok - + Objects Objektumok - + Heroes Hősök - + Artifacts Tárgyak - + Resources Erőforrások - + Banks Bankok - + Dwellings Lakhelyek - + Grounds Talajok - + Teleports Teleportok - + Mines Bányák - + Triggers Indítók - + Monsters Szörnyek - + Quests Küldetések - + Wog Objects Wog Objektumok - + Obstacles Akadályok - + Other Egyéb - + Mods loading problem Mod betöltési probléma - + Critical error during Mods loading. Disable invalid mods and restart. Kritikus hiba történt a Modok betöltése során. Tiltsa le az érvénytelen modokat és indítsa újra. - - + + View surface Felszín megtekintése - + No objects selected Nincs kiválasztott objektum - + This operation is irreversible. Do you want to continue? Ez a művelet visszafordíthatatlan. Folytatja? - + Errors occurred. %1 objects were not updated Hibák történtek. %1 objektum nem lett frissítve - + Save to image Mentés képként - + Select maps to convert Térképek kiválasztása konvertáláshoz - + HoMM3 maps(*.h3m) HoMM3 térképek (*.h3m) - + Choose directory to save converted maps Könyvtár kiválasztása a konvertált térképek mentéséhez - + Operation completed Művelet befejezve - + Successfully converted %1 maps Sikeresen konvertálva: %1 térkép - + Failed to convert the map. Abort operation Nem sikerült a térkép konvertálása. Művelet megszakítva - + Select campaign to convert Kampány kiválasztása konvertáláshoz - + HoMM3 campaigns (*.h3c) HoMM3 kampányok (*.h3c) - + Select destination file Célfájl kiválasztása - + VCMI campaigns (*.vcmp) VCMI kampányok (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + A(z) %1 hős nem hozható létre SEMLEGESKÉNT. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Hiányzó szükséges mod + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Szeretnéd ezt most megtenni? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Ennek az objektumnak a modja kötelező ahhoz, hogy a térkép érvényes maradjon. + + MapSettings @@ -1475,6 +1567,33 @@ Játékos azonosító: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Játékos kiválasztása + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + A hős nem hozható létre SEMLEGESKÉNT + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Váltás az egyik elérhető játékosra: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Gyorsbillentyű: %1 + + PlayerSettings @@ -1520,27 +1639,27 @@ QObject - + Beginner Kezdő - + Advanced Haladó - + Expert Szakértő - + Default secondary skills: Alapértelmezett másodlagos képességek: - + Secondary skills: Másodlagos képességek: @@ -1896,34 +2015,44 @@ NEM ZÁSZLÓZHATÓ - + Can't place object Nem lehet objektumot elhelyezni - + There can only be one grail object on the map. Csak egy Szent Grál objektum lehet a térképen. - - Hero %1 cannot be created as NEUTRAL. - A(z) %1 hős nem hozható létre SEMLEGESKÉNT. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (%1 almodulja) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + A(z) '%1'%2 modot egy objektum igényli a térképen. +Add hozzá a térkép kötelező moduljaihoz a Térkép → Általános beállításokban. + + + + Custom Spells: Egyéni varázslatok: - - + + Default Spells Alapértelmezett varázslatok - + Default Alapértelmezett @@ -1944,13 +2073,13 @@ - + Hero Level: %1 Hős szint: %1 - + Hero Experience: %1 Hős tapasztalat: %1 @@ -1961,43 +2090,43 @@ - + Mana Percentage: %1 Mana százalék: %1 - + Primary Skills: %1/%2/%3/%4 Elsődleges képességek: %1/%2/%3/%4 - + Resources: %1 Erőforrások: %1 - + Artifacts: %1 Tárgyak: %1 - + Spells: %1 Varázslatok: %1 - + Secondary Skills: %1 Másodlagos képességek: %1 - + Creatures: %1 Egységek: %1 @@ -2017,37 +2146,37 @@ Játékosok: %1 - + Rewards: Jutalmak: - + Reward Message: %1 Jutalom üzenet: %1 - + Mana Diff: %1 Mana különbség: %1 - + Move Points: %1 Mozgáspontok: %1 - + Move Percentage: %1 Mozgás százalék: %1 - + Spell Cast: %1 (%2) Varázslat használat: %1 (%2) - + Bonuses: %1 Bónuszok: %1 @@ -2067,12 +2196,12 @@ Városi események: - + Required: Szükséges: - + Possible: Lehetséges: @@ -2473,18 +2602,18 @@ Játékosok - + None Nincs - + Day %1 Nap %1 - - + + Reward %1 Jutalom %1 @@ -2523,7 +2652,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Forgatókönyv tulajdonságai @@ -2533,32 +2663,38 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Régió neve Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Régió színe Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Forgatókönyv neve Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Térkép fájl Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importálás... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exportálás... @@ -2569,27 +2705,32 @@ Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Alapértelmezett nehézség Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Előfeltételek Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Jobb kattintás szövege a régión Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prológus/Epilógus Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prológus @@ -2601,19 +2742,22 @@ Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Videó Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Zene Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Hang @@ -2624,17 +2768,20 @@ Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilógus Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Átvezetés Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Átvezetett hősök megtartása @@ -2649,7 +2796,8 @@ Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Másodlagos képességek @@ -2664,7 +2812,8 @@ All - + AI-generated, needs review by native speaker; delete this comment afterwards + Összes @@ -2674,74 +2823,88 @@ Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Átvezetett tárgyak Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Kezdő Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Kezdő beállítások Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Kezdő bónusz opciók Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Hős átvezetési opciók Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Kezdő hős opciók Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bónusz Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Játékos pozíció Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Kezdő bónusz opció Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Átvezetett / Kezdő hős Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Hozzáadás... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Szerkesztés... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Leghatalmasabb Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generált @@ -2751,7 +2914,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Nincs térkép @@ -2772,13 +2936,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Hiba Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Nem sikerült megnyitni a fájlt. @@ -2788,22 +2954,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI térképek (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 térképek (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Forrás forgatókönyv Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Hős @@ -2811,12 +2981,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Forgatókönyv tulajdonságai Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Bónusz típus kiválasztása @@ -2830,15 +3002,17 @@ Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Lény - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Épület @@ -2851,26 +3025,29 @@ Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Varázstekercs Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Elsődleges képesség - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Másodlagos képesség - + Resource Erőforrás @@ -2882,28 +3059,33 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Címzett Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Lénytípus Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Mennyiség Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Támadó képesség Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Védő képesség @@ -2918,82 +3100,97 @@ Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Jártasság Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Erőforrás típusa Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Kezdő bónusz szerkesztése - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Leghatalmasabb - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generált - + Random Véletlen - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Gyakori (%1 és %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Ritka (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + leghatalmasabb hős - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + generált hős - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + véletlen hős - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 varázslat %2 számára - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 %3 számára - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 tárgy %2 számára - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 varázstekercs %2 számára - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Elsődleges képesség (Támadás: %1, Védekezés: %2, Mágia: %3, Tudás: %4) %5 számára @@ -3344,112 +3541,114 @@ Térkép érvényességi eredmények - + Map is not loaded A térkép nincs betöltve - + No factions allowed for player %1 Nincs engedélyezett frakció a(z) %1 játékos számára - + No players allowed to play this map Nincs játékos, aki játszhatná ezt a térképet - + Map is allowed for one player and cannot be started A térkép csak egy játékos számára engedélyezett, és nem indítható - + No human players allowed to play this map Nincsenek emberi játékosok, akik játszhatnák ezt a térképet - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - A(z) %1 páncélozott objektum UNFLAGGABLE, de semlegesnek vagy játékos tulajdonában lévőnek kell lennie - - - + Object %1 is assigned to non-playable player %2 A(z) %1 objektum egy nem játszható játékoshoz van rendelve: %2 - + Spell scroll %1 doesn't have instance assigned and must be removed A(z) %1 varázstekercsnek nincs hozzárendelt példánya, ezért el kell távolítani - + Artifact %1 is prohibited by map settings A(z) %1 tárgy tiltva van a térképbeállítások szerint - + Player %1 has no towns and heroes assigned A(z) %1 játékosnak nincs hozzárendelt városa és hőse - + Prison %1 must be a NEUTRAL A(z) %1 börtönnek semlegesnek kell lennie - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + A birtokolható objektum %1 NEM ZÁSZLÓZHATÓ, de semleges vagy játékos tulajdonossal kell rendelkeznie + + + Hero %1 must have an owner A(z) %1 hősnek tulajdonossal kell rendelkeznie - + Hero %1 is prohibited by map settings A(z) %1 hős tiltva van a térképbeállítások szerint - + Hero %1 has duplicate on map A(z) %1 hős duplikátumként szerepel a térképen - + Hero %1 has an empty type and must be removed A(z) %1 hős típus nélküli, ezért el kell távolítani - + Spell scroll %1 is prohibited by map settings A(z) %1 varázstekercs tiltva van a térképbeállítások szerint - + Player %1 doesn't have any starting town A(z) %1 játékosnak nincs kezdővárosa - + Map name is not specified A térkép neve nincs megadva - + Map description is not specified A térkép leírása nincs megadva - - Map contains object from mod "%1", but doesn't require it - A térkép a(z) "%1" modból származó objektumot tartalmaz, de nem igényli azt + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + A térkép érvényes és nem tartalmaz hibákat. - + Exception occurs during validation: %1 Hiba történt az érvényesítés során: %1 - + Unknown exception occurs during validation Ismeretlen hiba történt az érvényesítés során @@ -3482,52 +3681,52 @@ Paraméterek - + No special victory Nincs különleges győzelem - + Capture artifact Tárgy megszerzése - + Hire creatures Lények felvétele - + Accumulate resources Erőforrások felhalmozása - + Construct building Épület felépítése - + Capture town Város elfoglalása - + Defeat hero Hős legyőzése - + Transport artifact Tárgy szállítása - + Kill monster Szörny megölése - + Any town Bármely város @@ -3748,27 +3947,27 @@ main - + Filepath of the map to open. A megnyitni kívánt térkép fájlútvonala. - + Extract original H3 archives into a separate folder. Az eredeti H3 archívumok kibontása egy külön mappába. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Egy kibontott archívumból a TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 és Un44 fájlokat egyedi PNG-kre bontja. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Egy kibontott archívumból az egyedi képeket (az Images mappában találhatók) .pcx formátumból png formátumba konvertálja. - + Delete original files, for the ones split / converted. Az eredeti fájlokat törli azok helyett, amelyek szétbontásra/konvertálásra kerültek. diff --git a/mapeditor/translation/italian.ts b/mapeditor/translation/italian.ts index 9e1df9cb7..1d3a28eac 100644 --- a/mapeditor/translation/italian.ts +++ b/mapeditor/translation/italian.ts @@ -49,7 +49,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor Campagna VCMI @@ -100,24 +101,28 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietà della Campagna Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietà dello Scenario Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Mostra sfondo completo Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor scenario @@ -137,12 +142,14 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tutte le campagne supportate (*.vcmp *.h3c);;Campagne VCMI (*.vcmp);;Campagne HoMM3 (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Salva campagna @@ -156,7 +163,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietà della Campagna @@ -166,12 +174,14 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nome della campagna Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Descrizione della campagna @@ -181,58 +191,69 @@ Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Contatto dell'autore (es. e-mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Data di creazione della campagna Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versione della campagna Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musica Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + La difficoltà dello scenario è selezionabile dall'utente Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Regioni Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Preset delle Regioni Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Sfondo Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Suffisso Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Prefisso Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Lunghezza suffisso colore @@ -247,37 +268,44 @@ Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Varie Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Caricamento immagine di sfondo Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Immagine bordo video Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video introduttivo Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video finale Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Personalizzato Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Intersuffisso @@ -292,22 +320,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Posizione etichetta X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Posizione etichetta Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Meno scenari New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + La nuova configurazione della regione supporta meno scenari di prima. Alcuni verranno rimossi. Continuare? @@ -553,7 +585,7 @@ MainWindow - + VCMI Map Editor Editor di mappe VCMI @@ -661,7 +693,8 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O @@ -676,7 +709,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -686,7 +720,8 @@ Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N @@ -702,20 +737,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor campagna - - + + View underground Visualizza sottosuolo Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +762,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maiusc+P @@ -735,7 +773,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +784,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +795,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +816,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +832,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Invio @@ -800,7 +843,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +855,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +866,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +877,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Canc @@ -841,7 +888,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +899,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maiusc+V - - - + + + Update appearance Aggiorna aspetto @@ -874,7 +923,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +934,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +945,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +956,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +967,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +978,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +989,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1000,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,7 +1011,8 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E @@ -975,7 +1033,8 @@ Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maiusc+M @@ -986,7 +1045,8 @@ Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Maiusc+C @@ -1026,7 +1086,8 @@ Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ @@ -1049,242 +1110,273 @@ Ctrl+Shift+= - + Confirmation Conferma - + Unsaved changes will be lost, are you sure? Le modifiche non salvate andranno perse, sei sicuro? - + Mods are required Mod richiesti - + Failed to open map Impossibile aprire la mappa - + Open map Apri mappa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Tutte le mappe supportate (*.vmap *.h3m);;Mappe VCMI(*.vmap);;Mappe HoMM3(*.h3m) - + Recently Opened Files File recenti - + Map validation Validazione mappa - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found La mappa ha problemi critici e probabilmente non sarà giocabile. Apri il Validatore dal menu Mappa per vedere i problemi rilevati - + Map has some errors. Open Validator from the Map menu to see issues found La mappa ha alcuni errori. Apri il Validatore dal menu Mappa per vedere i problemi rilevati - + Failed to save map Salvataggio della mappa fallito - + Save map Salva mappa - + VCMI maps (*.vmap) Mappe VCMI (*.vmap) - + Type Tipo - + Towns Città - + Objects Oggetti - + Heroes Eroi - + Artifacts Artefatti - + Resources Risorse - + Banks Banche - + Dwellings Dimore - + Grounds Terreni - + Teleports Teletrasporti - + Mines Miniere - + Triggers Trigger - + Monsters Mostri - + Quests Missioni - + Wog Objects Oggetti Wog - + Obstacles Ostacoli - + Other Altro - + Mods loading problem Problema nel caricamento dei mod - + Critical error during Mods loading. Disable invalid mods and restart. Errore critico durante il caricamento dei mod. Disabilita i mod non validi e riavvia. - - + + View surface Visualizza superficie - + No objects selected Nessun oggetto selezionato - + This operation is irreversible. Do you want to continue? Questa operazione è irreversibile. Vuoi continuare? - + Errors occurred. %1 objects were not updated Si sono verificati errori. %1 oggetti non sono stati aggiornati - + Save to image Salva come immagine - + Select maps to convert Seleziona mappe da convertire - + HoMM3 maps(*.h3m) Mappe HoMM3(*.h3m) - + Choose directory to save converted maps Scegli la directory per salvare le mappe convertite - + Operation completed Operazione completata - + Successfully converted %1 maps Convertite con successo %1 mappe - + Failed to convert the map. Abort operation Impossibile convertire la mappa. Operazione annullata - + Select campaign to convert Seleziona la campagna da convertire - + HoMM3 campaigns (*.h3c) Campagne HoMM3 (*.h3c) - + Select destination file Seleziona il file di destinazione - + VCMI campaigns (*.vcmp) Campagne VCMI (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + L'eroe %1 non può essere creato come NEUTRALE. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Mod mancante richiesto + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Vuoi farlo ora? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + La mod di questo oggetto è obbligatoria affinché la mappa rimanga valida. + + MapSettings @@ -1475,6 +1567,33 @@ ID giocatore: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Seleziona giocatore + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + L'eroe non può essere creato come NEUTRALE + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Passa a uno dei giocatori disponibili: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Scorciatoia: %1 + + PlayerSettings @@ -1520,27 +1639,27 @@ QObject - + Beginner Principiante - + Advanced Avanzato - + Expert Esperto - + Default secondary skills: Abilità secondarie predefinite: - + Secondary skills: Abilità secondarie: @@ -1897,34 +2016,44 @@ NON FLAGGABILE - + Can't place object Impossibile posizionare l'oggetto - + There can only be one grail object on the map. Può esserci solo un oggetto Graal sulla mappa. - - Hero %1 cannot be created as NEUTRAL. - L'eroe %1 non può essere creato come NEUTRALE. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (sottomodulo di %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + La mod '%1'%2 è richiesta da un oggetto sulla mappa. +Aggiungila alle mod richieste della mappa in Mappa->Impostazioni generali. + + + + Custom Spells: Incantesimi personalizzati: - - + + Default Spells Incantesimi predefiniti - + Default Predefinito @@ -1945,13 +2074,13 @@ - + Hero Level: %1 Livello eroe: %1 - + Hero Experience: %1 Esperienza eroe: %1 @@ -1962,43 +2091,43 @@ - + Mana Percentage: %1 Percentuale mana: %1 - + Primary Skills: %1/%2/%3/%4 Abilità primarie: %1/%2/%3/%4 - + Resources: %1 Risorse: %1 - + Artifacts: %1 Artefatti: %1 - + Spells: %1 Incantesimi: %1 - + Secondary Skills: %1 Abilità secondarie: %1 - + Creatures: %1 Creature: %1 @@ -2018,37 +2147,37 @@ Giocatori: %1 - + Rewards: Ricompense: - + Reward Message: %1 Messaggio ricompensa: %1 - + Mana Diff: %1 Differenza mana: %1 - + Move Points: %1 Punti movimento: %1 - + Move Percentage: %1 Percentuale movimento: %1 - + Spell Cast: %1 (%2) Incantesimo lanciato: %1 (%2) - + Bonuses: %1 Bonus: %1 @@ -2068,12 +2197,12 @@ Eventi città: - + Required: Richiesti: - + Possible: Possibili: @@ -2474,18 +2603,18 @@ Giocatori - + None Nessuno - + Day %1 Giorno %1 - - + + Reward %1 Ricompensa %1 @@ -2524,7 +2653,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietà dello scenario @@ -2534,32 +2664,38 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nome regione Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Colore regione Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nome scenario Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + File mappa Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importa... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Esporta... @@ -2570,27 +2706,32 @@ Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Difficoltà predefinita Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Prerequisiti Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Testo clic destro regione Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prologo/Epilogo Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prologo @@ -2602,19 +2743,22 @@ Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musica Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Voce @@ -2625,17 +2769,20 @@ Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilogo Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Continuità Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Gli eroi di continuità mantengono @@ -2650,7 +2797,8 @@ Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilità secondarie @@ -2665,7 +2813,8 @@ All - + AI-generated, needs review by native speaker; delete this comment afterwards + Tutti @@ -2675,74 +2824,88 @@ Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefatti di continuità Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Inizio Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Le opzioni iniziali sono Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opzioni bonus iniziale Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opzioni eroe di continuità Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opzioni eroe iniziale Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Posizione del giocatore Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Opzione bonus iniziale Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Continuità/Eroe iniziale Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Aggiungi... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifica... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Più forte Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generato @@ -2752,7 +2915,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Nessuna mappa @@ -2773,13 +2937,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Errore Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Impossibile aprire il file. @@ -2789,22 +2955,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Mappe VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Mappe HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenario di origine Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroe @@ -2812,12 +2982,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietà dello scenario Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Seleziona un tipo di bonus @@ -2831,15 +3003,17 @@ Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Creatura - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Edificio @@ -2852,26 +3026,29 @@ Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Pergamena magica Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilità primaria - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilità secondaria - + Resource Risorsa @@ -2883,28 +3060,33 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Destinatario Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tipo di creatura Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Quantità Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilità attacco Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilità difesa @@ -2919,82 +3101,97 @@ Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Padronanza Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tipo di risorsa Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifica bonus iniziale - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Più forte - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generato - + Random Casuale - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Comune (%1 e %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Raro (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + eroe più forte - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + eroe generato - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + eroe casuale - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 incantesimo per %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 per %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 artefatto per %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 pergamena magica per %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilità primaria (Attacco: %1, Difesa: %2, Magia: %3, Conoscenza: %4) per %5 @@ -3345,112 +3542,114 @@ Risultati validazione mappa - + Map is not loaded Mappa non caricata - + No factions allowed for player %1 Nessuna fazione consentita per il giocatore %1 - + No players allowed to play this map Nessun giocatore autorizzato a giocare questa mappa - + Map is allowed for one player and cannot be started La mappa è consentita per un solo giocatore e non può essere avviata - + No human players allowed to play this map Nessun giocatore umano può giocare questa mappa - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - L'istanza corazzata %1 è NON FLAGGABILE ma deve avere un proprietario NEUTRALE o giocatore - - - + Object %1 is assigned to non-playable player %2 L'oggetto %1 è assegnato a un giocatore non giocabile %2 - + Spell scroll %1 doesn't have instance assigned and must be removed La pergamena incantesimo %1 non ha un'istanza assegnata e deve essere rimossa - + Artifact %1 is prohibited by map settings L'artefatto %1 è vietato dalle impostazioni della mappa - + Player %1 has no towns and heroes assigned Il giocatore %1 non ha città e eroi assegnati - + Prison %1 must be a NEUTRAL La prigione %1 deve essere NEUTRALE - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + L'oggetto possedibile %1 NON PUÒ ESSERE SEGNATO ma deve avere un proprietario NEUTRALE o giocatore + + + Hero %1 must have an owner L'eroe %1 deve avere un proprietario - + Hero %1 is prohibited by map settings L'eroe %1 è vietato dalle impostazioni della mappa - + Hero %1 has duplicate on map L'eroe %1 ha un duplicato sulla mappa - + Hero %1 has an empty type and must be removed L'eroe %1 ha un tipo vuoto e deve essere rimosso - + Spell scroll %1 is prohibited by map settings La pergamena incantesimo %1 è vietata dalle impostazioni della mappa - + Player %1 doesn't have any starting town Il giocatore %1 non ha nessuna città iniziale - + Map name is not specified Il nome della mappa non è specificato - + Map description is not specified La descrizione della mappa non è specificata - - Map contains object from mod "%1", but doesn't require it - La mappa contiene un oggetto dal mod "%1", ma non lo richiede + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + La mappa è valida e non presenta problemi. - + Exception occurs during validation: %1 Si è verificata un'eccezione durante la validazione: %1 - + Unknown exception occurs during validation Si è verificata un'eccezione sconosciuta durante la validazione @@ -3483,52 +3682,52 @@ Parametri - + No special victory Nessuna vittoria speciale - + Capture artifact Cattura artefatto - + Hire creatures Assumi creature - + Accumulate resources Accumula risorse - + Construct building Costruisci edificio - + Capture town Cattura città - + Defeat hero Sconfiggi eroe - + Transport artifact Trasporta artefatto - + Kill monster Uccidi mostro - + Any town Qualsiasi città @@ -3749,27 +3948,27 @@ main - + Filepath of the map to open. Percorso file della mappa da aprire. - + Extract original H3 archives into a separate folder. Estrai gli archivi originali di H3 in una cartella separata. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Da un archivio estratto, divide TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 e Un44 in PNG individuali. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Da un archivio estratto, converte immagini singole (trovate nella cartella Images) da .pcx a .png. - + Delete original files, for the ones split / converted. Elimina i file originali per quelli divisi/convertiti. diff --git a/mapeditor/translation/japanese.ts b/mapeditor/translation/japanese.ts index 301ffd196..d44a9717e 100644 --- a/mapeditor/translation/japanese.ts +++ b/mapeditor/translation/japanese.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 軍隊設定 Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + 広い陣形 Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + 密集陣形 @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + 装備場所: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + 保存 Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンセル @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMIキャンペーンエディタ File - + AI-generated, needs review by native speaker; delete this comment afterwards + ファイル Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + 編集 View - + AI-generated, needs review by native speaker; delete this comment afterwards + 表示 Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + ツールバー Open - + AI-generated, needs review by native speaker; delete this comment afterwards + 開く Save - + AI-generated, needs review by native speaker; delete this comment afterwards + 保存 New - + AI-generated, needs review by native speaker; delete this comment afterwards + 新規作成 Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + 名前を付けて保存... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーンのプロパティ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオのプロパティ Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + 背景を全体表示 Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオエディタ Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + 確認 Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + 未保存の変更は失われます。本当によろしいですか? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップを開く All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + すべての対応キャンペーン (*.vcmp *.h3c);;VCMIキャンペーン (*.vcmp);;HoMM3キャンペーン (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーンを保存 VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMIキャンペーン (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーンのプロパティ General - + AI-generated, needs review by native speaker; delete this comment afterwards + 一般 Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーン名 Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーンの説明 Author - + AI-generated, needs review by native speaker; delete this comment afterwards + 作者 Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + 作者の連絡先(例:メールアドレス) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーン作成日 Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーンバージョン Music - + AI-generated, needs review by native speaker; delete this comment afterwards + 音楽 Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオの難易度はユーザーが選択可能 Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + 地域 Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + 地域プリセット Background - + AI-generated, needs review by native speaker; delete this comment afterwards + 背景 Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + 接尾辞 Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + 接頭辞 Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + 色の接尾辞の長さ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + その他 Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + 背景画像を読み込み中 Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + ビデオ枠画像 Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + イントロビデオ Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + アウトロビデオ Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + カスタム Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + 中間語 @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + ラベル位置X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + ラベル位置Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオ数の削減 New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + 新しい地域設定では以前より少ないシナリオ数に対応しています。一部が削除されます。続行しますか? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + フォーム Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + タイムイベント Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + 新しいイベント @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + フォーム Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ名 Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + マップの説明 Author - + AI-generated, needs review by native speaker; delete this comment afterwards + 作者 Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + 作者の連絡先(例:メールアドレス) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ作成日 Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + マップバージョン Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローの最大レベル制限 Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + 難易度 @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ生成中 @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + スロット Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロースキル @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + テキストラベル Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + スキル Level - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + スキルをカスタマイズ @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 呪文 Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 呪文をカスタマイズ Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + フォーム Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + 敗北メッセージ 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7日間町がない Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + パラメーター No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + 特別な敗北なし Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + 城を失う Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローを失う Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + 時間切れ Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 町なしの日数 MainWindow - + VCMI Map Editor VCMIマップエディター File - + AI-generated, needs review by native speaker; delete this comment afterwards + ファイル Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + 最近開いたファイル Map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + 編集 View - + AI-generated, needs review by native speaker; delete this comment afterwards + 表示 Player - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + ツールバー Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + ミニマップ Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + マップオブジェクトビュー Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + ブラウザ Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + インスペクター Property - + AI-generated, needs review by native speaker; delete this comment afterwards + プロパティ Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + ツール Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + ペイント Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + 地形 Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + 道路 Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + プレビュー Open - + AI-generated, needs review by native speaker; delete this comment afterwards + 開く Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + その他... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + 保存 Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + 新規作成 Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + 名前を付けて保存... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンペーンエディター - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + 地下を表示 Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + パス Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + 切り取り Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + コピー Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + 貼り付け Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + 塗りつぶし Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + 選択範囲を障害物で塗りつぶします Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + グリッド Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + 一般 Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + マップのタイトルと説明 Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー設定 Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + 元に戻す Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + やり直し Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + 中立 Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + 検証 Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + 外観を更新 Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + 障害物を再作成 Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + 名前を付けてエクスポート... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + 翻訳 Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m コンバーター Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c コンバーター Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + ロック Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ上のオブジェクトをロックして不必要な変更を防ぐ Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + ロック解除 Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ上のすべてのオブジェクトのロックを解除する Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + ズームイン Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + ズームアウト Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + ズームリセット Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + 確認 - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + 保存されていない変更は失われます。よろしいですか? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + 必要なModがあります + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップを開くのに失敗しました - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップを開く - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + すべての対応マップ (*.vmap *.h3m);;VCMIマップ(*.vmap);;HoMM3マップ(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + 最近開いたファイル - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + マップの検証 - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + マップに重大な問題があり、プレイできない可能性があります。マップメニューからバリデータを開いて問題を確認してください - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + マップにいくつかのエラーがあります。マップメニューからバリデータを開いて問題を確認してください - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップの保存に失敗しました - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップを保存 - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMIマップ (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 種類 - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + オブジェクト - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + バンク - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + 住居 - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + 地形 - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + テレポート - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + 鉱山 + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + トリガー + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + モンスター + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + クエスト + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Wogオブジェクト + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + 障害物 + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + その他 - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Modの読み込み問題 - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod読み込み中に重大なエラーが発生しました。無効なModを無効にして再起動してください。 - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + 地上を表示 - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + オブジェクトが選択されていません - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + この操作は元に戻せません。本当に続行しますか? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + エラーが発生しました。%1 個のオブジェクトが更新されませんでした - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + 画像として保存 - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + 変換するマップを選択 - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3マップ (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + 変換されたマップを保存するディレクトリを選択 - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + 操作が完了しました - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 個のマップが正常に変換されました - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + マップの変換に失敗しました。操作を中止します - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + 変換するキャンペーンを選択 - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3キャンペーン (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + 保存先ファイルを選択 - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMIキャンペーン (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー %1 は中立 (NEUTRAL) として作成できません。 + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + 必要なModが見つかりません + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +今すぐ行いますか? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + このオブジェクトのModはマップを有効な状態に保つために必須です。 @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ設定 General - + AI-generated, needs review by native speaker; delete this comment afterwards + 一般 Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod Events - + AI-generated, needs review by native speaker; delete this comment afterwards + イベント Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + 勝利 Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + 敗北 Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + 時間制限 Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + 能力 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + OK @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + オブジェクトを配置できません @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + メッセージ @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + フォーム Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + このマップをプレイするために必要なMod Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod名 Version - + AI-generated, needs review by native speaker; delete this comment afterwards + バージョン Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + 自動割り当て Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + マップに配置されたオブジェクトに基づいて必要なModを設定します。報酬や守備隊などをModでカスタマイズしている場合、問題が発生する可能性があります Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + マップオブジェクトMod Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + ゲームコンテンツを含むすべてのModを必須として設定 Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + フルコンテンツMod @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間/CPU CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + CPUのみ Team - + AI-generated, needs review by native speaker; delete this comment afterwards + チーム Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + メインの町 Color - + AI-generated, needs review by native speaker; delete this comment afterwards + @@ -1452,27 +1755,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダムな勢力 Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + メインにヒーローを生成 (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (デフォルト) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + チームなし Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤーID:%1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤーを選択 + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローは中立 (NEUTRAL) として作成できません + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + 利用可能なプレイヤーのいずれかに切り替えてください: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + ショートカット:%1 @@ -1480,12 +1815,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー設定 Players - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー @@ -1495,7 +1832,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + OK @@ -1503,7 +1841,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + ポートレート @@ -1514,96 +1853,114 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + デフォルト QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + 初心者 + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + 上級 + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + エキスパート - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + デフォルトの副次スキル: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + 副次スキル: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + 穏やか Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + 友好的 Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + 攻撃的 Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + 敵対的 Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + 凶暴 No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + 巡回なし POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + 戦力ランク HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロータイプ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロークラス Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + ポートレート Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + スキル Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト @@ -1616,64 +1973,76 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + 建物 Events - + AI-generated, needs review by native speaker; delete this comment afterwards + イベント Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト報酬 Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + クエスト Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + 識別子 ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + サブID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + インスタンス名 IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + 静的か neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + 中立 Army - + AI-generated, needs review by native speaker; delete this comment afterwards + 軍隊 @@ -1686,31 +2055,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + 所有者 Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + 町と同じ Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + 除去可能なユニット Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + プレースホルダータイプ Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + 戦力ランク @@ -1718,67 +2092,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロータイプ Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + 経験値 MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + 男性 FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + 女性 Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + 性別 Name - + AI-generated, needs review by native speaker; delete this comment afterwards + 名前 Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + 経歴 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + 巡回範囲 Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + 町の名前 Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤーと同じ @@ -1791,19 +2176,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + メッセージ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + 生産性 @@ -1811,270 +2199,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Character - + AI-generated, needs review by native speaker; delete this comment afterwards + キャラクター Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + 町を選択 Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + 決して逃走しない Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + 成長しない Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬 Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + 後で除去 Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間トリガー Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + CPUトリガー First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + 初回訪問時のテキスト Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + 次回訪問時のテキスト Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + 完了時のテキスト Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + クエストを繰り返す Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + 時間制限 UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + フラグ不可 - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + オブジェクトを配置できません - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ上に聖杯オブジェクトは1つだけ配置できます。 - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (%1 のサブMod) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + マップ上のオブジェクトにはMod '%1'%2 が必要です。 +マップ→一般設定で必須Modとして追加してください。 + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + カスタム魔法: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + デフォルトの魔法 - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + デフォルト Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + クエスト: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 曜日:%1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 経過日数:%1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローレベル:%1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー経験値:%1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + マナポイント:%1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + マナの割合:%1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + 基本スキル:%1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源:%1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト:%1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法:%1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 副次スキル:%1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャー:%1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー:%1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロークラス:%1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー:%1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬メッセージ:%1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + マナ差分:%1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + 移動ポイント:%1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 移動の割合:%1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + 詠唱魔法:%1(%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + ボーナス:%1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + 建設済みの建物: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + 禁止された建物: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + 町のイベント: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + 必要条件: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + 可能性: @@ -2082,32 +2528,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + ミッション目標 Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + 曜日 Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + 経過日数 Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローレベル Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー経験値 Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔力ポイント @@ -2117,7 +2569,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー/モンスターの撃破 @@ -2127,87 +2580,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 基本スキル Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + 攻撃 Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + 防御 Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔力 Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + 知識 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + スキル Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャー Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロークラス Players - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー None - + AI-generated, needs review by native speaker; delete this comment afterwards + なし Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 日付 %1 @@ -2215,7 +2685,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬 @@ -2223,7 +2694,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 @@ -2231,90 +2703,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + 訪問モード Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + 選択モード On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + 選択時のテキスト Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + 拒否可能 Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + パラメータをリセット Period - + AI-generated, needs review by native speaker; delete this comment afterwards + 期間 days - + AI-generated, needs review by native speaker; delete this comment afterwards + Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + 訪問者をリセット Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬をリセット Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + ウィンドウタイプ Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + イベント情報 Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + この報酬が与えられたときに表示されるメッセージ Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬 Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローレベル Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー経験値 Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔力ポイント @@ -2327,166 +2816,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + オーバーフロー Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + 移動 Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + オブジェクトを削除 Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 基本スキル Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + 攻撃 Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + 防御 Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔力 Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + 知識 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + スキル Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャー Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + ボーナス Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + 持続時間 Type - + AI-generated, needs review by native speaker; delete this comment afterwards + 種類 Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + 詠唱 Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + アドベンチャーマップ魔法を詠唱 Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法学校のレベル Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + 制限条件 Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + 曜日 Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + 経過日数 Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロークラス Players - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + なし - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 日付 %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 報酬 %1 @@ -2494,27 +3013,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + フォーム Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + 酒場の噂 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + 新しい噂 @@ -2523,287 +3047,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオのプロパティ General - + AI-generated, needs review by native speaker; delete this comment afterwards + 一般 Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + 地域名 Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + 地域の色 Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオ名 Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + マップファイル Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + インポート... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + エクスポート... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + デフォルト難易度 Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + 前提条件 Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + 地域の右クリックテキスト Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + プロローグ/エピローグ Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + プロローグ Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + 有効 Video - + AI-generated, needs review by native speaker; delete this comment afterwards + ビデオ Music - + AI-generated, needs review by native speaker; delete this comment afterwards + 音楽 Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + 音声 Text - + AI-generated, needs review by native speaker; delete this comment afterwards + テキスト Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + エピローグ Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + クロスオーバー Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + クロスオーバーヒーローの保持 Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + 経験値 Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 基本スキル Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 副次スキル Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト All - + AI-generated, needs review by native speaker; delete this comment afterwards + すべて None - + AI-generated, needs review by native speaker; delete this comment afterwards + なし Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + クロスオーバーアーティファクト Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + 開始 Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + 開始オプションは次の通りです Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + 開始時のボーナスオプション Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + クロスオーバーヒーローのオプション Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + 開始ヒーローのオプション Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + ボーナス Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー位置 Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + 開始時のボーナスオプション Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + クロスオーバー/開始ヒーロー Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + 編集... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + 最強 Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + 自動生成 Random - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダム No map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップなし Player - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップを開く All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + すべての対応マップ (*.vmap *.h3m);;VCMIマップ(*.vmap);;HoMM3マップ(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + エラー Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + ファイルを開けませんでした。 Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + マップを保存 VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMIマップ (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3マップ (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + 元シナリオ Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー @@ -2811,12 +3390,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + シナリオのプロパティ Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + ボーナスタイプを選択 @@ -2824,55 +3405,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャー - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + 建物 Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法の巻物 Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 基本スキル - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 副次スキル - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 @@ -2882,118 +3471,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + 受取人 Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャータイプ Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + 数量 Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 攻撃スキル Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 防御スキル Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔力 Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + 知識 Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + 熟練度 Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源タイプ Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + 開始ボーナスを編集 - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + 最強 - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + 自動生成 - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダム - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + 共通(%1 と %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + レア(%1、%2、%3、%4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 最強のヒーロー - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 自動生成ヒーロー - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダムヒーロー - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 のための魔法 %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2(対象:%3) - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 のためのアーティファクト - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 のための魔法の巻物 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + 基本スキル(攻撃:%1、防御:%2、魔力:%3、知識:%4)対象:%5 @@ -3001,77 +3613,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + 時間指定イベント Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + イベント名 Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + イベントメッセージテキストを入力 affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間に影響 affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + AIに影響 Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + 初回発生日 Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + 繰り返し間隔(0=繰り返しなし) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + 影響を受けるプレイヤー Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 type - + AI-generated, needs review by native speaker; delete this comment afterwards + 種類 qty - + AI-generated, needs review by native speaker; delete this comment afterwards + 数量 Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除するオブジェクト Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + OK @@ -3079,42 +3706,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + 建物 Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + すべて建設 Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + すべて取り壊し Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + すべて有効化 Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + すべて無効化 Type - + AI-generated, needs review by native speaker; delete this comment afterwards + 種類 Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + 有効 Built - + AI-generated, needs review by native speaker; delete this comment afterwards + 建設済み @@ -3122,77 +3757,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + 町のイベント General - + AI-generated, needs review by native speaker; delete this comment afterwards + 一般 Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + イベント名 Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + イベントメッセージテキストを入力 Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + 初回発生日 Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + 繰り返し間隔(0=繰り返しなし) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + 影響を受けるプレイヤー affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間に影響 affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + AIに影響 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 資源 Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + 建物 Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャー OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャーレベル %1 / アップグレード付きレベル %1 Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 日 %1 - %2 @@ -3200,7 +3850,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 日 %1 - %2 @@ -3208,32 +3859,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + 町のイベント Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + 時間指定イベント Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 追加 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 削除 Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 日 %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + 新しいイベント @@ -3241,17 +3898,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法 Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法をカスタマイズ Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 1 @@ -3260,7 +3920,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔術師ギルドに登場する可能性のある魔法 @@ -3269,27 +3930,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔術師ギルドに必ず登場する魔法 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + レベル 5 @@ -3297,43 +3963,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ翻訳 Language - + AI-generated, needs review by native speaker; delete this comment afterwards + 言語 Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + サポート済み String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + 文字列ID Text - + AI-generated, needs review by native speaker; delete this comment afterwards + テキスト Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + 翻訳を削除 Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + デフォルト言語は削除できません All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + この言語のすべてのテキストレコードが削除されます。続行しますか? @@ -3341,117 +4015,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ検証結果 - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + マップが読み込まれていません - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー %1 に許可された派閥がありません - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + このマップをプレイできるプレイヤーがいません - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + マップは1人用にしか対応しておらず、開始できません - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間プレイヤーがこのマップをプレイすることはできません - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + オブジェクト %1 はプレイ不可プレイヤー %2 に割り当てられています - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法の巻物 %1 はインスタンスが割り当てられておらず、削除する必要があります - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクト %1 はマップ設定で禁止されています - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー %1 には町もヒーローも割り当てられていません + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + 監獄 %1 は中立 (NEUTRAL) でなければなりません + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + 所有可能オブジェクト %1 はフラグ不可(UNFLAGGABLE)ですが、中立またはプレイヤー所有でなければなりません + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー %1 は所有者が必要です - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー %1 はマップ設定で禁止されています - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー %1 はマップ上に重複しています - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーロー %1 のタイプが空であり、削除する必要があります - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 魔法の巻物 %1 はマップ設定で禁止されています - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー %1 には開始時の町がありません - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + マップ名が指定されていません - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + マップの説明が指定されていません - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + このマップは有効で、問題はありません。 - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 検証中に例外が発生しました:%1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + 検証中に不明な例外が発生しました @@ -3459,77 +4156,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + フォーム Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + 勝利メッセージ Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間プレイヤーのみ Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + 標準的な勝利を許可 Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + パラメータ - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + 特別な勝利条件なし - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクトを獲得 - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + クリーチャーを雇用 - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + 資源を蓄積 - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + 建物を建設 - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + 町を占領 - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + ヒーローを倒す - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + アーティファクトを運ぶ - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + モンスターを倒す + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + 任意の町 @@ -3537,67 +4249,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + 新しいマップを作成 Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + マップサイズ Height - + AI-generated, needs review by native speaker; delete this comment afterwards + 高さ Width - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL(144×144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダムマップ Players - + AI-generated, needs review by native speaker; delete this comment afterwards + プレイヤー S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S(36×36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M(72×72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L(108×108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H(180×180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH(216×216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G(252×252) @@ -3605,172 +4330,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダム Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間チーム Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + コンピューターチーム Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + 標準サイズ Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + カスタムサイズ Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + 地下 Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + 人間 Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + コンピューター Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + モンスターの強さ Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + 弱い Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + 普通 Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + 強い Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + 水の量 None - + AI-generated, needs review by native speaker; delete this comment afterwards + なし Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + 道路 Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + 砂利 Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + 石畳 Template - + AI-generated, needs review by native speaker; delete this comment afterwards + テンプレート Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + カスタムシード Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + ランダムマップを生成 OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + キャンセル No template - + AI-generated, needs review by native speaker; delete this comment afterwards + テンプレートなし No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + 指定されたパラメータに対応するテンプレートがありません。ランダムマップを生成できません。 RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + RMG失敗 [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [デフォルト] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + 開くマップのファイルパス。 - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + 元のH3アーカイブを別のフォルダに抽出します。 - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + 抽出されたアーカイブから、TwCrPort、CPRSMALL、FlagPort、ITPA、ITPt、Un32、Un44 を個別のPNGに分割します。 + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + 抽出されたアーカイブから、Imagesフォルダにある単体画像(.pcx)をpngに変換します。 + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + 分割/変換されたファイルの元ファイルを削除します。 diff --git a/mapeditor/translation/korean.ts b/mapeditor/translation/korean.ts index e6368a56e..21166b73c 100644 --- a/mapeditor/translation/korean.ts +++ b/mapeditor/translation/korean.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 군대 설정 Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + 넓은 대형 Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + 좁은 대형 @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + 장착 위치: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + 저장 Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + 취소 @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI 캠페인 편집기 File - + AI-generated, needs review by native speaker; delete this comment afterwards + 파일 Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + 편집 View - + AI-generated, needs review by native speaker; delete this comment afterwards + 보기 Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + 도구 모음 Open - + AI-generated, needs review by native speaker; delete this comment afterwards + 열기 Save - + AI-generated, needs review by native speaker; delete this comment afterwards + 저장 New - + AI-generated, needs review by native speaker; delete this comment afterwards + 새로 만들기 Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + 다른 이름으로 저장... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 속성 Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 속성 Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + 전체 배경 표시 Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 편집기 Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + 저장되지 않은 변경 사항이 손실됩니다. 계속하시겠습니까? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 열기 All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + 모든 지원 캠페인 (*.vcmp *.h3c);;VCMI 캠페인(*.vcmp);;HoMM3 캠페인(*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 저장 VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI 캠페인 (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 속성 General - + AI-generated, needs review by native speaker; delete this comment afterwards + 일반 Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 이름 Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 설명 Author - + AI-generated, needs review by native speaker; delete this comment afterwards + 작성자 Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + 작성자 연락처 (예: 이메일) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 생성 날짜 Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 버전 Music - + AI-generated, needs review by native speaker; delete this comment afterwards + 음악 Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 난이도는 사용자 선택 가능 Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + 지역 Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + 지역 프리셋 Background - + AI-generated, needs review by native speaker; delete this comment afterwards + 배경 Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + 접미사 Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + 접두사 Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + 색상 접미사 길이 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + 기타 Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + 배경 이미지 불러오는 중 Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + 비디오 테두리 이미지 Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + 인트로 비디오 Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + 아웃트로 비디오 Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + 사용자 정의 Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + 중간 삽입어 @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + 라벨 위치 X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + 라벨 위치 Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 수 감소 New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + 새로운 지역 설정은 이전보다 시나리오 수가 적습니다. 일부가 제거됩니다. 계속하시겠습니까? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + 시간 이벤트 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + 새 이벤트 @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 이름 Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 설명 Author - + AI-generated, needs review by native speaker; delete this comment afterwards + 작성자 Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + 작성자 연락처 (예: 이메일) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 생성 시간 Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 버전 Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + 히어로 최대 레벨 제한 Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + 난이도 @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 생성 중 @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + 슬롯 Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 히어로 기술 @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + 텍스트 라벨 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 기술 Level - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기술 사용자 정의 @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 사용자 정의 Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 5 @@ -506,783 +596,946 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + 패배 메시지 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7일 동안 도시 없음 Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + 매개변수 No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + 특별한 패배 없음 Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + 성 잃기 Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 히어로 잃기 Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + 시간 초과 Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 없이 보낸 일수 MainWindow - + VCMI Map Editor VCMI 맵 편집기 File - + AI-generated, needs review by native speaker; delete this comment afterwards + 파일 Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + 최근 열기 Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + 편집 View - + AI-generated, needs review by native speaker; delete this comment afterwards + 보기 Player - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + 도구 모음 Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + 미니맵 Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 오브젝트 보기 Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + 브라우저 Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + 인스펙터 Property - + AI-generated, needs review by native speaker; delete this comment afterwards + 속성 Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + 도구 Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + 그리기 Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + 지형 Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + 도로 Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + 미리보기 Open - + AI-generated, needs review by native speaker; delete this comment afterwards + 열기 Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + 더 보기... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + 저장 Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + 새로 만들기 Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + 다른 이름으로 저장... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + 캠페인 편집기 - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + 지하 보기 Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + 통과 Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + 잘라내기 Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + 복사 Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + 붙여넣기 Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + 채우기 Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + 선택 영역을 장애물로 채웁니다 Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + 격자 Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + 일반 Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 제목 및 설명 Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 설정 Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + 실행 취소 Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + 다시 실행 Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + 지우기 Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + 중립 Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + 검사 Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + 외형 업데이트 Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + 장애물 다시 생성 Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + 다른 이름으로 내보내기... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + 번역 Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m 변환기 Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c 변환기 Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + 잠금 Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + 불필요한 변경을 방지하기 위해 맵의 오브젝트를 잠급니다 Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + 잠금 해제 Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵의 모든 오브젝트의 잠금을 해제합니다 Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + 확대 Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + 축소 Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + 확대 초기화 Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + 저장되지 않은 변경 사항이 손실됩니다. 계속하시겠습니까? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + 필수 모드가 필요합니다 + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 열기에 실패했습니다 - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 열기 - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + 지원되는 모든 맵 (*.vmap *.h3m);;VCMI 맵(*.vmap);;HoMM3 맵(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + 최근에 연 파일 - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 유효성 검사 - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵에 치명적인 문제가 있어 플레이할 수 없 - + Map has some errors. Open Validator from the Map menu to see issues found - + Failed to save map - + Save map - + VCMI maps (*.vmap) - + Type - + Towns - + Objects - + Heroes - + Artifacts - + Resources - + Banks - + Dwellings - + Grounds - + Teleports - + Mines - + Triggers - + Monsters - + Quests - + Wog Objects - + Obstacles - + Other - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + 모드 로딩 문제 - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + 모드를 불러오는 중 치명적인 오류가 발생했습니다. 잘못된 모드를 비활성화하고 다시 시작하세요. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + 지상 보기 - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + 선택된 오브젝트 없음 - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + 이 작업은 되돌릴 수 없습니다. 계속하시겠습니까? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + 오류가 발생했습니다. %1개의 오브젝트가 업데이트되지 않았습니다 - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + 이미지로 저장 - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + 변환할 맵 선택 - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 맵(*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + 변환된 맵을 저장할 디렉토리 선택 - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + 작업 완료 - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + %1개의 맵이 성공적으로 변환되었습니다 - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 변환 실패. 작업을 중단합니다 - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + 변환할 캠페인 선택 - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 캠페인 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + 대상 파일 선택 - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI 캠페인 (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 %1은(는) 중립으로 생성할 수 없습니다. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + 필수 모드 누락 + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +지금 실행하시겠습니까? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + 이 오브젝트의 모드는 맵의 유효성을 유지하기 위해 필수입니다. @@ -1290,67 +1543,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 설정 General - + AI-generated, needs review by native speaker; delete this comment afterwards + 일반 Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + 모드 Events - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + 승리 Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + 패배 Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + 시간제한 Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + 소문 Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + 능력 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 @@ -1358,7 +1624,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + 오브젝트를 배치할 수 없습니다 @@ -1366,7 +1633,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + 메시지 @@ -1374,47 +1642,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + 양식 Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + 이 맵을 플레이하려면 필수 모드가 필요합니다 Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + 모드 이름 Version - + AI-generated, needs review by native speaker; delete this comment afterwards + 버전 Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + 자동 지정 Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵에 배치된 오브젝트를 기준으로 필수 모드를 설정합니다. 이 방법은 보상, 주둔지 등을 사용자 지정한 경우 문제를 일으킬 수 있습니다 Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 오브젝트 모드 Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + 게임 콘텐츠가 있는 모든 모드를 필수로 설정 Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + 전체 콘텐츠 모드 @@ -1422,27 +1699,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + 인간/컴퓨터 CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + 컴퓨터 전용 Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + 주요 도시 Color - + AI-generated, needs review by native speaker; delete this comment afterwards + 색상 @@ -1452,27 +1734,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 진영 Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + 주요 도시에 영웅 생성 (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (기본값) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + 팀 없음 Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 ID: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 선택 + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅은 중립으로 생성할 수 없습니다 + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + 사용 가능한 플레이어 중 하나로 전환하세요: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + 단축키: %1 @@ -1480,12 +1794,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 설정 Players - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 @@ -1495,7 +1811,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 @@ -1503,7 +1820,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + 초상화 @@ -1514,96 +1832,114 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본값 QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + 초보자 + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + 숙련자 + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + 전문가 - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 보조 기술: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + 보조 기술: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + 온순함 Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + 우호적 Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + 공격적 Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + 적대적 Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + 야성적 No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + 순찰 없음 POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + 전투력 순위 HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 유형 Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 클래스 Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + 초상화 Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기술 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 @@ -1616,64 +1952,76 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + 건물 Events - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 보상 Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + 퀘스트 Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + 식별자 ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + 하위 ID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + 인스턴스 이름 IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + 정적 여부 neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + 중립 Army - + AI-generated, needs review by native speaker; delete this comment afterwards + 군대 @@ -1686,31 +2034,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + 소유자 Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시와 동일 Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 가능한 유닛 Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + 자리 표시자 유형 Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + 전투력 순위 @@ -1718,67 +2071,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 유형 Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + 경험치 MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + 남성 FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + 여성 Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + 성별 Name - + AI-generated, needs review by native speaker; delete this comment afterwards + 이름 Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + 전기 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + 순찰 반경 Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 이름 Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어와 동일 @@ -1791,19 +2155,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + 메시지 Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + 생산성 @@ -1811,270 +2178,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + 수량 Character - + AI-generated, needs review by native speaker; delete this comment afterwards + 문자 Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 선택 Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + 절대 도망치지 않음 Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + 성장 없음 Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상 Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + 이후 제거 Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 트리거 Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + CPU 트리거 First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + 첫 방문 텍스트 Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + 다음 방문 텍스트 Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + 완료 텍스트 Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + 퀘스트 반복 Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + 시간 제한 UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + 깃발 불가 - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + 오브젝트를 배치할 수 없습니다 - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵에는 성배 오브젝트가 하나만 존재할 수 있습니다. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (%1의 서브모드) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + 모드 '%1'%2는 맵에 있는 오브젝트에 필요합니다. +맵 -> 일반 설정에서 해당 모드를 필수 모드로 추가하세요. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + 사용자 지정 주문: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 주문 - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본값 Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + 퀘스트: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 요일: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 경과 일수: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 레벨: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 경험치: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 마나 포인트: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 마나 비율: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 기술: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 보조 기술: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 클래스: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상 메시지: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 마나 차이: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + 이동 포인트: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 이동 비율: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + 시전 주문: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 보너스: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + 건설된 건물: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + 금지된 건물: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 이벤트: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + 필수: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + 가능: @@ -2082,32 +2507,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + 임무 목표 Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + 요일 Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + 경과 일수 Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 레벨 Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 경험치 Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 포인트 @@ -2117,7 +2548,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅/몬스터 처치 @@ -2127,87 +2559,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 기술 Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + 공격 Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + 방어 Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문력 Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + 지식 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기술 Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 클래스 Players - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 None - + AI-generated, needs review by native speaker; delete this comment afterwards + 없음 Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Day %1 @@ -2215,7 +2664,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상 @@ -2223,7 +2673,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 @@ -2231,90 +2682,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + 방문 모드 Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + 선택 모드 On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + 선택 시 텍스트 Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + 거부 가능 Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + 매개변수 초기화 Period - + AI-generated, needs review by native speaker; delete this comment afterwards + 기간 days - + AI-generated, needs review by native speaker; delete this comment afterwards + Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + 방문자 초기화 Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상 초기화 Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + 창 유형 Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 정보 Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상이 주어질 때 표시할 메시지 Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상 Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 레벨 Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 경험치 Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 포인트 @@ -2327,166 +2795,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + 오버플로우 Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + 이동력 Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + 오브젝트 제거 Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 기술 Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + 공격 Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + 방어 Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문력 Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + 지식 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기술 Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + 보너스 Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + 지속 시간 Type - + AI-generated, needs review by native speaker; delete this comment afterwards + 유형 Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + 시전 Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 모험 맵 주문 시전 Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + 마법 학교 레벨 Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + 제한자 Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + 요일 Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + 경과 일수 Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 클래스 Players - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + 없음 - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Day %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 보상 %1 @@ -2494,27 +2992,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + 선술집 소문 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + 새 소문 @@ -2523,287 +3026,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 속성 General - + AI-generated, needs review by native speaker; delete this comment afterwards + 일반 Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + 지역 이름 Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + 지역 색상 Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 이름 Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 파일 Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + 가져오기... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + 내보내기... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 난이도 Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + 전제 조건 Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + 지역 우클릭 텍스트 Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + 서문/후문 Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + 서문 Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + 활성화됨 Video - + AI-generated, needs review by native speaker; delete this comment afterwards + 비디오 Music - + AI-generated, needs review by native speaker; delete this comment afterwards + 음악 Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + 음성 Text - + AI-generated, needs review by native speaker; delete this comment afterwards + 텍스트 Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + 후문 Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + 연결 Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + 연결된 영웅 유지 Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + 경험치 Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 기술 Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + 보조 기술 Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 All - + AI-generated, needs review by native speaker; delete this comment afterwards + 전체 None - + AI-generated, needs review by native speaker; delete this comment afterwards + 없음 Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + 연결된 아티팩트 Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + 시작 Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + 시작 옵션은 다음과 같습니다 Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + 시작 보너스 옵션 Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 연결 옵션 Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + 시작 영웅 옵션 Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + 보너스 Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 위치 Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + 시작 보너스 옵션 Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 연결/시작 영웅 Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + 편집... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + 최강 Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + 생성됨 Random - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 No map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 없음 Player - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 열기 All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + 모든 지원되는 맵 (*.vmap *.h3m);;VCMI 맵(*.vmap);;HoMM3 맵(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + 오류 Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + 파일을 열 수 없습니다. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 저장 VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI 맵 (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 맵 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + 출처 시나리오 Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 @@ -2811,12 +3369,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + 시나리오 속성 Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + 보너스 유형 선택 @@ -2824,55 +3384,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + 건물 Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문서 Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 기술 - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 보조 기술 - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 @@ -2882,118 +3450,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + 수령인 Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 유형 Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + 수량 Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 공격 기술 Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + 방어 기술 Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문력 Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + 지식 Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + 숙련도 Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 유형 Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + 시작 보너스 편집 - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + 최강 - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + 생성됨 - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + 일반 (%1 및 %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + 희귀 (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 최강 영웅 - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 생성된 영웅 - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 영웅 - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %2를 위한 %1 주문 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %3를 위한 %1 %2 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %2를 위한 %1 아티팩트 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %2를 위한 %1 주문서 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + %5를 위한 기본 기술 (공격: %1, 방어: %2, 주문력: %3, 지식: %4) @@ -3001,77 +3592,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + 시간 제한 이벤트 Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 이름 Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 메시지 텍스트 입력 affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + 인간에 영향 affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + AI에 영향 Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + 최초 발생일 Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + 반복 간격 (0 = 반복 없음) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + 영향 받는 플레이어 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 type - + AI-generated, needs review by native speaker; delete this comment afterwards + 종류 qty - + AI-generated, needs review by native speaker; delete this comment afterwards + 수량 Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + 삭제할 오브젝트 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 @@ -3079,42 +3685,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + 건물 Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + 모두 건설 Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + 모두 철거 Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + 모두 활성화 Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + 모두 비활성화 Type - + AI-generated, needs review by native speaker; delete this comment afterwards + 종류 Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + 활성화됨 Built - + AI-generated, needs review by native speaker; delete this comment afterwards + 건설됨 @@ -3122,77 +3736,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 이벤트 General - + AI-generated, needs review by native speaker; delete this comment afterwards + 일반 Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 이름 Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + 이벤트 메시지 텍스트 입력 Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + 최초 발생일 Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + 반복 간격 (0 = 반복 없음) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + 영향 받는 플레이어 affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + 인간에 영향 affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + AI에 영향 Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + 건물 Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 OK - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 레벨 %1 / 생물 레벨 %1 업그레이드 Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 일 %1 - %2 @@ -3200,7 +3829,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 일 %1 - %2 @@ -3208,32 +3838,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 이벤트 Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + 시간 제한 이벤트 Add - + AI-generated, needs review by native speaker; delete this comment afterwards + 추가 Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + 제거 Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 일 %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + 새 이벤트 @@ -3241,17 +3877,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문 사용자 정의 Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 1 @@ -3260,7 +3899,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + 마법사 길드에 나타날 수 있는 주문 @@ -3269,27 +3909,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + 마법사 길드에 반드시 나타나는 주문 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + 레벨 5 @@ -3297,43 +3942,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 번역 Language - + AI-generated, needs review by native speaker; delete this comment afterwards + 언어 Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + 지원됨 String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + 문자열 ID Text - + AI-generated, needs review by native speaker; delete this comment afterwards + 텍스트 Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + 번역 제거 Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + 기본 언어는 제거할 수 없습니다 All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + 이 언어에 대한 모든 기존 텍스트 레코드가 제거됩니다. 계속하시겠습니까? @@ -3341,117 +3994,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 유효성 검사 결과 - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵이 로드되지 않았습니다 - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 %1에 허용된 진영이 없습니다 - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + 이 맵을 플레이할 수 있는 플레이어가 없습니다 - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵은 한 명의 플레이어만 허용하며 시작할 수 없습니다 - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + 이 맵은 인간 플레이어가 플레이할 수 없습니다 - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + 오브젝트 %1이(가) 비활성 플레이어 %2에 할당되어 있습니다 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문서 %1에 인스턴스가 할당되어 있지 않아 제거해야 합니다 - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 %1은(는) 맵 설정에서 금지되어 있습니다 - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 %1에 도시와 영웅이 할당되어 있지 않습니다 + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + 감옥 %1은 중립이어야 합니다 + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + 소유 가능한 오브젝트 %1은 플래그 불가이지만 중립 또는 플레이어 소유여야 합니다 + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 %1에는 소유자가 있어야 합니다 - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 %1은 맵 설정에서 금지되어 있습니다 - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 %1이 맵에 중복되어 있습니다 - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 %1의 유형이 비어 있어 제거해야 합니다 - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + 주문서 %1은 맵 설정에서 금지되어 있습니다 - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 %1에는 시작 도시가 없습니다 - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 이름이 지정되지 않았습니다 - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 설명이 지정되지 않았습니다 - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + 맵이 유효하며 문제가 없습니다 - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + 검증 중 예외 발생: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + 검증 중 알 수 없는 예외 발생 @@ -3459,77 +4135,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + 승리 메시지 Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + 인간 플레이어만 Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + 표준 승리 허용 Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + 매개변수 - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + 특별 승리 없음 - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 점령 - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + 생물 고용 - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + 자원 축적 - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + 건물 건설 - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + 도시 점령 - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + 영웅 처치 - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + 아티팩트 운반 - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + 몬스터 처치 + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + 모든 도시 @@ -3537,67 +4228,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + 새 맵 생성 Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + 맵 크기 Height - + AI-generated, needs review by native speaker; delete this comment afterwards + 높이 Width - + AI-generated, needs review by native speaker; delete this comment afterwards + 너비 XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 맵 Players - + AI-generated, needs review by native speaker; delete this comment afterwards + 플레이어 S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3605,172 +4309,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + 인간 팀 Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + 컴퓨터 팀 Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + 표준 크기 Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + 사용자 지정 크기 Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + 지하 Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + 인간 Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + 컴퓨터 Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + 몬스터 강도 Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + 약함 Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + 보통 Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + 강함 Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + 수분 함량 None - + AI-generated, needs review by native speaker; delete this comment afterwards + 없음 Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + 도로 Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + 자갈 Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + 자갈돌 Template - + AI-generated, needs review by native speaker; delete this comment afterwards + 템플릿 Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + 사용자 지정 시드 Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + 무작위 맵 생성 OK - + AI-generated, needs review by native speaker; delete this comment afterwards + 확인 Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + 취소 No template - + AI-generated, needs review by native speaker; delete this comment afterwards + 템플릿 없음 No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + 지정된 매개변수에 맞는 템플릿이 없습니다. 무작위 맵을 생성할 수 없습니다. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + RMG 실패 [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [기본값] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + 열 맵의 파일 경로. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + 원본 H3 아카이브를 별도의 폴더에 추출합니다. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + 추출된 아카이브에서 TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 및 Un44를 개별 PNG로 분할합니다. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + 추출된 아카이브에서 Images 폴더에 있는 단일 이미지(.pcx)를 PNG로 변환합니다. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + 분할/변환된 파일에 대해 원본 파일을 삭제합니다. diff --git a/mapeditor/translation/norwegian.ts b/mapeditor/translation/norwegian.ts index e396ce0bf..039893616 100644 --- a/mapeditor/translation/norwegian.ts +++ b/mapeditor/translation/norwegian.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Hærinnstillinger Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Bred formasjon Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Tett formasjon @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstand Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Utstyr hvor: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Avbryt @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI kampanjeredigerer File - + AI-generated, needs review by native speaker; delete this comment afterwards + Fil Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Rediger View - + AI-generated, needs review by native speaker; delete this comment afterwards + Vis Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Verktøylinje Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Åpne Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre New - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre som... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjeegenskaper Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioegenskaper Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Vis full bakgrunn Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioredigerer Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Bekreftelse Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Ulagrede endringer vil gå tapt, er du sikker? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Åpne kart All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Alle støttede kampanjer (*.vcmp *.h3c);;VCMI-kampanjer(*.vcmp);;HoMM3-kampanjer(*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre kampanje VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjer (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjeegenskaper General - + AI-generated, needs review by native speaker; delete this comment afterwards + Generelt Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjenavn Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjebeskrivelse Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Forfatter Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Forfatterkontakt (f.eks. e-post) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjens opprettelsesdato Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjeversjon Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musikk Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioets vanskelighetsgrad kan velges av brukeren Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Regioner Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Regionforhåndsinnstillinger Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Bakgrunn Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Suffiks Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Prefiks Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Fargesuffiks lengde Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Diverse Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Laster bakgrunnsbilde Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Videokantbilde Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Introvideo Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Utrovideo Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Egendefinert Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Infix @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Etikettposisjon X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Etikettposisjon Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Færre scenarier New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny regionoppsett støtter færre scenarier enn før. Noen vil bli fjernet. Fortsette? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Skjema Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidfestede hendelser Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny hendelse @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Skjema Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartnavn Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartbeskrivelse Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Forfatter Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Forfatterkontakt (f.eks. e-post) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartopprettelsestid Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartversjon Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Begrens maksimal heltenivå Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Vanskelighetsgrad @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Genererer kart @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Spor Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstand @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Helteferdigheter @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekstetikett Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Ferdighet Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilpass ferdigheter @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilpass trylleformularer Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Skjema Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Nederlagsmelding 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 dager uten by Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametere No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen spesialtap Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Mist slott Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Mist helt Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiden er utløpt Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Dager uten by MainWindow - + VCMI Map Editor VCMI-kartredigeringsprogram File - + AI-generated, needs review by native speaker; delete this comment afterwards + Fil Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Åpne nylige Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Kart Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Rediger View - + AI-generated, needs review by native speaker; delete this comment afterwards + Vis Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Verktøylinje Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Minikart Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartobjektvisning Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Utforsker Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Inspektør Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Egenskap Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Verdi Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Verktøy Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Maling Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Terreng Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Veier Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Elver Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Forhåndsvisning Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Åpne Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Mer... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre som... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjeredigerer - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Vis underjordisk Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Passasje Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Klipp ut Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Kopier Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Lim inn Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Fyll Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Fyller utvalget med hindringer Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Rutenett Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Generelt Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttittel og beskrivelse Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillerinnstillinger Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Angre Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjør om Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Slett Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Nøytral Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Valider Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Oppdater utseende Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenskap hindringer Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Eksporter som... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Oversettelser Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m-konverter Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c-konverter Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås objekter på kartet for å unngå unødvendige endringer Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås opp Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås opp alle objekter på kartet Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Zoom inn Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Zoom ut Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Nullstill zoom Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Bekreftelse - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Ulagrede endringer vil gå tapt, er du sikker? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Modifikasjoner kreves + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunne ikke åpne kart - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Åpne kart - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Alle støttede kart (*.vmap *.h3m);;VCMI-kart(*.vmap);;HoMM3-kart(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Nylig åpnete filer - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartvalidering - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartet har kritiske problemer og vil sannsynligvis ikke være spillbart. Åpne Validator fra Kart-menyen for å se funnene - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartet har noen feil. Åpne Validator fra Kart-menyen for å se funnene - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunne ikke lagre kart - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre kart - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kart (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Type - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Byer - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Objekter - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Helter - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurser - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Banker - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Boliger - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Bakker - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Teleportere - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Gruver + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Utløsere + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Monstre + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Oppdrag + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Wog-objekter + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Hindringer + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Annet - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Problem med lasting av modifikasjoner - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Kritisk feil under lasting av modifikasjoner. Deaktiver ugyldige mods og start på nytt. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Vis overflate - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen objekter valgt - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Denne handlingen kan ikke angres. Vil du fortsette? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Det oppsto feil. %1 objekter ble ikke oppdatert - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre som bilde - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg kart å konvertere - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kart (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg mappe for å lagre konverterte kart - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Operasjon fullført - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Vellykket konvertering av %1 kart - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunne ikke konvertere kartet. Avbryter operasjonen - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg kampanje å konvertere - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kampanjer (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg måldokument - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjer (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Helt %1 kan ikke opprettes som NØYTRAL. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Manglende påkrevd modifikasjon + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Vil du gjøre det nå? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Denne gjenstandens modifikasjon er obligatorisk for at kartet skal være gyldig. @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartinnstillinger General - + AI-generated, needs review by native speaker; delete this comment afterwards + Generelt Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifikasjoner Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Hendelser Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Seier Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Tap Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidfestet Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Rykter Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Ferdigheter Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Helter Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Kan ikke plassere objekt @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Melding @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Skjema Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Obligatoriske modifikasjoner for å spille dette kartet Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifikasjonsnavn Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versjon Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Automatisk tildeling Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Angi nødvendige modifikasjoner basert på objektene plassert på kartet. Denne metoden kan skape problemer hvis du har tilpassede belønninger, garnisoner osv. fra modifikasjoner Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartobjektmodifikasjoner Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Angi alle modifikasjoner med spillinnhold som obligatoriske Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Modifikasjoner med fullt innhold @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Menneske/CPU CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Kun CPU Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Lag Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Hovedby Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Farge @@ -1452,27 +1755,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilfeldig fraksjon Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Generer helt ved hovedby (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (standard) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen lag Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller-ID: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Velg spiller + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Helt kan ikke opprettes som NØYTRAL + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Bytt til en av de tilgjengelige spillerne: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Snarvei: %1 @@ -1480,12 +1815,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillerinnstillinger Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillere @@ -1495,7 +1832,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1503,7 +1841,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Portrett @@ -1514,167 +1853,198 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Nybegynner + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Viderekommen + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekspert - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard sekundære ferdigheter: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundære ferdigheter: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Medgjørlig Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Vennlig Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Aggressiv Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Fiendtlig Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Voldsom No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen patrulje POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + MAKTNIVÅ HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + HELTETYPE Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltklasse Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Portrett Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Ferdigheter Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - + %n rute(r) + %n rute(r) Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygninger Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Hendelser Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurs Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstandsbelønning Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Oppdrag Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Identifikator ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + InstansNavn IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + ErStatisk neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + nøytral Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Hær @@ -1687,31 +2057,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Eier Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Samme som by Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjernbare enheter Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Plassholdertype Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Maktnivå @@ -1719,67 +2094,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Helte-type Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Erfaring MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + MANN FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + KVINNE Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Kjønn Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Navn Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Biografi Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Patruljeradius Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Bynavn Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Samme som spiller @@ -1792,19 +2178,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Melding Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformular Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Produktivitet @@ -1812,270 +2201,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Mengde Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Karakter Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg by Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Flykter aldri Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Vokser ikke Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Belønning Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern etter Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Menneskelig utløsning Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + CPU-utløsning First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekst ved første besøk Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekst ved neste besøk Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Fullført tekst Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenta oppdrag Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidsbegrensning UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + KAN IKKE FLAGGES - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Kan ikke plassere objekt - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Det kan kun være én gral på kartet. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (under-modifikasjon av %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Modifikasjonen '%1'%2 er nødvendig for et objekt på kartet. +Legg den til i kartets påkrevde modifikasjoner under Kart→Generelle innstillinger. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Egendefinerte trylleformularer: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard trylleformularer - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Oppdrag: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ukedag: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dager gått: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltenivå: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Helteerfaring: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mana-poeng: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mana-prosent: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Primære ferdigheter: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurser: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundære ferdigheter: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Enheter: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Helter: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltklasser: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillere: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Belønninger: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Belønningsmelding: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mana-differanse: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Bevegelsespunkter: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bevegelsesprosent: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformular brukt: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonuser: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygde bygninger: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Forbudte bygninger: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Byhendelser: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Påkrevd: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Mulig: @@ -2083,32 +2530,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Oppdragsmål Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ukedag Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Dager gått Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltenivå Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Helteerfaring Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Tryllepunkter @@ -2118,7 +2571,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Drep helt/monster @@ -2128,87 +2582,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Primære ferdigheter Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Angrep Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Forsvar Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Tryllekraft Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunnskap Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurser Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Ferdigheter Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Enheter Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Helter Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltklasser Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillere None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 @@ -2216,7 +2687,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Belønninger @@ -2224,7 +2696,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til @@ -2232,90 +2705,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Besøksmodus Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg modus On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekst ved valg Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Kan avslås Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilbakestill parametere Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Periode days - + AI-generated, needs review by native speaker; delete this comment afterwards + dager Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilbakestill besøkende Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilbakestill belønninger Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Vindutype Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Hendelsesinfo Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Melding som vises ved tildeling av denne belønningen Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Belønning Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltenivå Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Helteerfaring Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Tryllepunkter @@ -2328,166 +2818,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Overflyt Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Bevegelse Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern objekt Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Primære ferdigheter Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Angrep Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Forsvar Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Tryllekraft Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunnskap Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurser Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Ferdigheter Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Enheter Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonuser Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Varighet Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Type Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Verdi Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Kast Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Kast en eventyrkart-trylleformular Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformular Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Magiskole-nivå Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Begrensning Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ukedag Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Dager gått Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Helter Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Heltklasser Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillere - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Belønning %1 @@ -2495,27 +3015,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Skjema Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Vertshusrykter Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny rykte @@ -2524,287 +3049,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioegenskaper General - + AI-generated, needs review by native speaker; delete this comment afterwards + Generelt Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Regionnavn Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Regionsfarge Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarionavn Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartfil Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importer... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Eksporter... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard vanskelighetsgrad Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Forutsetninger Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Høyreklikktekst for region Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog/Epilog Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktivert Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musikk Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Stemme Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekst Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilog Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Overgang Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Overgangshelter beholder Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Erfaring Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Primære ferdigheter Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundære ferdigheter Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstander All - + AI-generated, needs review by native speaker; delete this comment afterwards + Alle None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Overgangsgjenstander Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Start Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Startalternativer er Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Startbonusvalg Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Helteovergangsalternativer Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Startheltealternativer Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillerposisjon Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Startbonusvalg Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Overgang / Starthelt Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Rediger... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Sterkest Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generert Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilfeldig No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Intet kart Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Åpne kart All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Alle støttede kart (*.vmap *.h3m);;VCMI-kart(*.vmap);;HoMM3-kart(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Feil Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunne ikke åpne filen. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Lagre kart VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kart (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kart (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Kilde-scenario Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Helt @@ -2812,12 +3392,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioegenskaper Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Velg en bonustype @@ -2825,55 +3407,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformular Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Enhet - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygning Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstand Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularrull Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Primær ferdighet - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundær ferdighet - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurs @@ -2883,118 +3473,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Mottaker Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Enhetstype Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Mengde Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Angrepsferdighet Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Forsvarsferdighet Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Tryllekraft Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunnskap Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesterskap Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurstype Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Rediger startbonus - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Sterkest - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generert - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilfeldig - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + vanlig (%1 og %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + sjeldne (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + sterkeste helt - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + generert helt - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + tilfeldig helt - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 trylleformular for %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 for %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 gjenstand for %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 trylleformularrull for %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Primær ferdighet (Angrep: %1, Forsvar: %2, Trylle: %3, Kunnskap: %4) for %5 @@ -3002,77 +3615,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidfestet hendelse Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Hendelsesnavn Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Skriv inn hendelsesmeldingstekst affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + påvirker mennesker affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + påvirker AI Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag for første forekomst Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenta etter (0 = ingen gjentakelse) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Påvirkede spillere Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurser type - + AI-generated, needs review by native speaker; delete this comment afterwards + type qty - + AI-generated, needs review by native speaker; delete this comment afterwards + ant Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Objekter som skal slettes Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -3080,42 +3708,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygninger Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygg alle Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Riv alle Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktiver alle Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Deaktiver alle Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Type Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktivert Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygd @@ -3123,77 +3759,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Byhendelse General - + AI-generated, needs review by native speaker; delete this comment afterwards + Generelt Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Hendelsesnavn Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Skriv inn hendelsesmeldingstekst Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag for første forekomst Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenta etter (0 = ingen gjentakelse) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Påvirkede spillere affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + påvirker mennesker affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + påvirker AI Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ressurser Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygninger Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Enheter OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Enhetsnivå %1 / Enhetsnivå %1 oppgradering Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - %2 @@ -3201,7 +3852,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - %2 @@ -3209,32 +3861,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Byhendelser Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidfestede hendelser Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Legg til Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny hendelse @@ -3242,17 +3900,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularer Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilpass trylleformularer Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 1 @@ -3261,7 +3922,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformular som kan vises i magigilde @@ -3270,27 +3932,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformular som må vises i magigilde Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 5 @@ -3298,43 +3965,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartoversettelser Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Språk Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Støttet String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Streng-ID Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekst Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Fjern oversettelse Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Standardspråk kan ikke fjernes All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Alle eksisterende tekstoppføringer for dette språket vil bli fjernet. Fortsette? @@ -3342,117 +4017,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartvalideringsresultater - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartet er ikke lastet - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen fraksjoner tillatt for spiller %1 - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen spillere tillatt å spille dette kartet - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartet er tillatt for én spiller og kan ikke startes - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen menneskelige spillere tillatt å spille dette kartet - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Objekt %1 er tildelt til en ikke-spillbar spiller %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularrull %1 har ikke en instans tilordnet og må fjernes - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Gjenstand %1 er forbudt av kartinnstillingene - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller %1 har ingen byer og helter tildelt + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Fengsel %1 må være NØYTRAL + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Eieobjekt %1 kan IKKE FLAGGES men må ha NØYTRAL eller spiller som eier + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Helt %1 må ha en eier - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Helt %1 er forbudt av kartinnstillingene - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Helt %1 finnes i duplikat på kartet - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Helt %1 har en tom type og må fjernes - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Trylleformularrull %1 er forbudt av kartinnstillingene - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Spiller %1 har ingen startby - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartnavn er ikke angitt - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartbeskrivelse er ikke angitt - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Kartet er gyldig og har ingen problemer. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Unntak oppstod under validering: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Ukjent unntak oppstod under validering @@ -3460,77 +4158,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Skjema Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Seiersmelding Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Kun for menneskelige spillere Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Tillat standardseier Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametere - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen spesialseier - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Erverv gjenstand - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Rekrutter enheter - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Akkumuler ressurser - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Bygg bygning - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Erverv by - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Nedkjemp helt - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Transporter gjenstand - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Drep monster + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Enhver by @@ -3538,67 +4251,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Opprett nytt kart Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartstørrelse Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Høyde Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Bredde XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilfeldig kart Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spillere S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3606,172 +4332,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Tilfeldig Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Menneskelige lag Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Datamaskinlag Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Standardstørrelse Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Egendefinert størrelse Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Underjordisk Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Mennesker Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Datamaskiner Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Monsterstyrke Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Svak Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Normal Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Sterk Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Vanninnhold None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Øyer Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Veier Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Jord Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Grus Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Brostein Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Mal Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Egendefinert frø Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Generer tilfeldig kart OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Avbryt No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen mal No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen mal for angitte parametere. Tilfeldig kart kan ikke genereres. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + RMG-feil [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [standard] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Filbane til kartet som skal åpnes. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Pakk ut originale H3-arkiver til en egen mappe. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + Fra et utpakket arkiv deler den opp TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 og Un44 til individuelle PNG-filer. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + Fra et utpakket arkiv konverterer den enkeltbilder (funnet i Images-mappen) fra .pcx til .png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Slett originalfiler for de som ble delt eller konvertert. diff --git a/mapeditor/translation/polish.ts b/mapeditor/translation/polish.ts index 48a5d3e3f..2d04f39f6 100644 --- a/mapeditor/translation/polish.ts +++ b/mapeditor/translation/polish.ts @@ -49,105 +49,105 @@ VCMI Campaign Editor - + Edytor Kampanii VCMI File - Plik + Plik Edit - Edycja + Edycja View - Widok + Widok Toolbar - Przybornik + Przybornik Open - Otwórz + Otwórz Save - Zapisz + Zapisz New - Nowy + Nowy Save as... - Zapisz jako... + Zapisz jako... Ctrl+Shift+S - Ctrl+Shift+S + Ctrl+Shift+S Campaign Properties - + Właściwości kampanii Scenario Properties - + Właściwości scenariusza Show full background - + Pokaż pełne tło Scenario editor - + Edytor scenariusza Confirmation - Potwierdzenie + Potwierdzenie Unsaved changes will be lost, are you sure? - Niezapisane zmiany zostaną utracone, jesteś pewny? + Niezapisane zmiany zostaną utracone, jesteś pewny? Open map - Otwórz mapę + Otwórz mapę All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + Wszystkie obsługiwane kampanie (*.vcmp *.h3c);;Kampanie VCMI (*.vcmp);;Kampanie HoMM3 (*.h3c) Save campaign - + Zapisz kampanię VCMI campaigns (*.vcmp) - Kampanie VCMI (*.vcmp) + Kampanie VCMI (*.vcmp) @@ -156,158 +156,158 @@ Campaign Properties - + Właściwości kampanii General - Ogólne + Ogólne Campaign name - + Nazwa kampanii Campaign description - + Opis kampanii Author - Autor + Autor Author contact (e.g. e-mail) - + Kontakt z autorem (np. e-mail) Campaign creation date - + Data utworzenia kampanii Campaign version - + Wersja kampanii Music - + Muzyka Scenario difficulty is user selectable - + Poziom trudności scenariusza wybierany przez gracza Regions - + Regiony Regions Preset - + Zestaw regionów Background - + Tło Suffix - + Przyrostek Prefix - + Prefiks Color suffix length - + Długość przyrostka koloru Add - Dodaj + Dodaj Remove - Usuń + Usuń Misc - + Różne Loading background image - + Wczytywanie obrazu tła Video rim image - + Obraz ramki wideo Intro video - + Wideo wprowadzające Outro video - + Wideo końcowe Custom - + Niestandardowe Infix - + Wstawka X - + X Y - + Y Label Pos X - + Pozycja etykiety X Label Pos Y - + Pozycja etykiety Y Fewer Scenarios - + Mniej scenariuszy New Region setup supports fewer scenarios than before. Some will removed. Continue? - + Nowe ustawienie regionów obsługuje mniej scenariuszy niż wcześniej. Niektóre zostaną usunięte. Kontynuować? @@ -553,7 +553,7 @@ MainWindow - + VCMI Map Editor Edytor map VCMI @@ -661,7 +661,7 @@ Ctrl+O - + Ctrl+O @@ -676,7 +676,7 @@ Ctrl+S - + Ctrl+S @@ -686,7 +686,7 @@ Ctrl+N - + Ctrl+N @@ -702,20 +702,20 @@ Campaign editor - + Edytor kampanii - - + + View underground Pokaż podziemia Ctrl+U - + Ctrl+U @@ -725,7 +725,7 @@ Ctrl+Shift+P - + Ctrl+Shift+P @@ -735,7 +735,7 @@ Ctrl+X - + Ctrl+X @@ -745,7 +745,7 @@ Ctrl+C - + Ctrl+C @@ -755,7 +755,7 @@ Ctrl+V - + Ctrl+V @@ -775,7 +775,7 @@ Ctrl+G - + Ctrl+G @@ -790,7 +790,7 @@ Ctrl+Enter - + Ctrl+Enter @@ -800,7 +800,7 @@ Ctrl+P - + Ctrl+P @@ -811,7 +811,7 @@ Ctrl+Z - + Ctrl+Z @@ -821,7 +821,7 @@ Ctrl+Y - + Ctrl+Y @@ -831,7 +831,7 @@ Del - + Del @@ -841,7 +841,7 @@ Ctrl+0 - + Ctrl+0 @@ -851,13 +851,13 @@ Ctrl+Shift+V - + Ctrl+Shift+V - - - + + + Update appearance Aktualizuj wygląd @@ -874,7 +874,7 @@ Ctrl+1 - + Ctrl+1 @@ -884,7 +884,7 @@ Ctrl+2 - + Ctrl+2 @@ -894,7 +894,7 @@ Ctrl+3 - + Ctrl+3 @@ -904,7 +904,7 @@ Ctrl+4 - + Ctrl+4 @@ -914,7 +914,7 @@ Ctrl+5 - + Ctrl+5 @@ -924,7 +924,7 @@ Ctrl+6 - + Ctrl+6 @@ -934,7 +934,7 @@ Ctrl+7 - + Ctrl+7 @@ -944,7 +944,7 @@ Ctrl+8 - + Ctrl+8 @@ -954,7 +954,7 @@ Ctrl+E - + Ctrl+E @@ -975,7 +975,7 @@ Ctrl+Shift+M - + Ctrl+Shift+M @@ -986,7 +986,7 @@ Ctrl+Shift+C - + Ctrl+Shift+C @@ -1026,7 +1026,7 @@ Ctrl++ - + Ctrl++ @@ -1049,242 +1049,270 @@ Ctrl+Shift+= - + Confirmation Potwierdzenie - + Unsaved changes will be lost, are you sure? Niezapisane zmiany zostaną utracone, jesteś pewny? - + Mods are required Wymagane są mody - + Failed to open map Nie udało się otworzyć mapy - + Open map Otwórz mapę - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) - + Recently Opened Files Ostatnio otwierane pliki - + Map validation Walidacja mapy - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found Mapa ma krytyczne problemy i prawdopodobnie nie będzie grywalna. Otwórz Walidator z menu Mapy, aby zobaczyć znalezione problemy. - + Map has some errors. Open Validator from the Map menu to see issues found Mapa zawiera błędy. Otwórz Walidator z menu Mapy, aby zobaczyć znalezione problemy. - + Failed to save map Nie udało się zapisać mapy - + Save map Zapisz mapę - + VCMI maps (*.vmap) Mapy VCMI (*.vmap) - + Type Typ - + Towns Miasta - + Objects - + Obiekty - + Heroes Bohaterowie - + Artifacts Artefakty - + Resources Zasoby - + Banks Banki - + Dwellings Siedliska - + Grounds Tereny - + Teleports Teleporty - + Mines Kopalnie - + Triggers Wyzwalacze - + Monsters Potwory - + Quests Zadania - + Wog Objects Obiekty WOG - + Obstacles Przeszkody - + Other Inne - + Mods loading problem Problem z ładowaniem modów - + Critical error during Mods loading. Disable invalid mods and restart. Krytyczny błąd podczas ładowania modów. Wyłącz nieprawidłowe mody i uruchom ponownie. - - + + View surface Pokaż powierzchnię - + No objects selected Brak wybranych obiektów - + This operation is irreversible. Do you want to continue? Ta operacja jest nieodwracalna. Czy chcesz kontynuować? - + Errors occurred. %1 objects were not updated Wystąpiły błędy. %1 obiektów nie zostało zaktualizowanych - + Save to image Zapisz jako obraz - + Select maps to convert Wybierz mapy do konwersji - + HoMM3 maps(*.h3m) Mapy HoMM3(*.h3m) - + Choose directory to save converted maps Wybierz folder do zapisu skonwertowanych map - + Operation completed Operacja zakończona - + Successfully converted %1 maps Pomyślnie skonwertowano %1 map - + Failed to convert the map. Abort operation Nieudana konwersja mapy. Przerywanie operacji - + Select campaign to convert Wybierz kampanię do konwersji - + HoMM3 campaigns (*.h3c) Kampanie HoMM3 (*.h3c) - + Select destination file Wybierz plik docelowy - + VCMI campaigns (*.vcmp) Kampanie VCMI (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + Bohater %1 nie może zostać utworzony jako NEUTRALNY + + + + Missing Required Mod + Brakujący wymagany mod + + + + + +Do you want to do that now ? + + + +Czy chcesz to zrobić teraz? + + + + This object's mod is mandatory for map to remain valid. + Mod tego obiektu jest wymagany dla zachowania poprawności mapy. + + MapSettings @@ -1475,6 +1503,29 @@ ID gracza: %1 + + PlayerSelectionDialog + + + Select Player + Wybierz gracza + + + + Hero cannot be created as NEUTRAL + Bohater nie może być utworzony jako NEUTRALNY + + + + Switch to one of the available players: + Przełącz na jednego z dostępnych graczy: + + + + Shortcut: %1 + Skrót: %1 + + PlayerSettings @@ -1520,27 +1571,27 @@ QObject - + Beginner Początkujący - + Advanced Zaawansowany - + Expert Ekspert - + Default secondary skills: Domyślne umiejętności drugorzędne: - + Secondary skills: Umiejętności drugorzędne: @@ -1898,34 +1949,42 @@ NIEFLAGOWALNY - + Can't place object Nie można umieścić obiektu - + There can only be one grail object on the map. Na mapie może znajdować się tylko jeden Graal. - - Hero %1 cannot be created as NEUTRAL. - Bohater %1 nie może zostać utworzony jako NEUTRALNY + + (submod of %1) + (submod %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + Mod „%1”%2 jest wymagany przez obiekt na mapie. +Dodaj go do wymaganych modów w Ustawieniach ogólnych mapy. + + + + Custom Spells: Wybrane czary: - - + + Default Spells Domyślne czary - + Default Domyślny @@ -1946,13 +2005,13 @@ - + Hero Level: %1 Poziom bohatera: %1 - + Hero Experience: %1 Doświadczenie bohatera: %1 @@ -1963,43 +2022,43 @@ - + Mana Percentage: %1 Procent many: %1 - + Primary Skills: %1/%2/%3/%4 Umiejętności podstawowe: %1/%2/%3/%4 - + Resources: %1 Surowce: %1 - + Artifacts: %1 Artefakty: %1 - + Spells: %1 Czary: %1 - + Secondary Skills: %1 Umiejętności drugorzędne: %1 - + Creatures: %1 Stworzenia: %1 @@ -2019,37 +2078,37 @@ Gracze: %1 - + Rewards: Nagrody: - + Reward Message: %1 Wiadomość o nagrodzie: %1 - + Mana Diff: %1 Różnica many: %1 - + Move Points: %1 Punkty ruchu: %1 - + Move Percentage: %1 Procent ruchu: %1 - + Spell Cast: %1 (%2) Rzucony czar: %1 (%2) - + Bonuses: %1 Premie: %1 @@ -2069,12 +2128,12 @@ Wydarzenia w mieście: - + Required: Wymagane: - + Possible: Możliwe: @@ -2475,18 +2534,18 @@ Gracze - + None Brak - + Day %1 Dzień %1 - - + + Reward %1 Nagroda %1 @@ -2525,287 +2584,287 @@ Scenario Properties - + Właściwości scenariusza General - Ogólne + Ogólne Region name - + Nazwa regionu Region color - + Kolor regionu Scenario name - + Nazwa scenariusza Map file - + Plik mapy Import... - + Importuj... Export... - + Eksportuj... Remove - Usuń + Usuń Default difficulty - + Domyślny poziom trudności Prerequisites - + Wymagania wstępne Region right-click text - + Tekst po kliknięciu PPM na region Prologue/Epilogue - + Prolog/Epilog Prologue - + Prolog Enabled - Włączony + Włączony Video - + Wideo Music - + Muzyka Voice - + Głos Text - Tekst + Tekst Epilogue - + Epilog Crossover - + Przeniesienie Crossover heroes retain - + Przeniesieni bohaterowie zachowują Experience - Doświadczenie + Doświadczenie Primary skills - Umiejętności podstawowe + Umiejętności podstawowe Secondary skills - + Umiejętności dodatkowe Spells - Zaklęcia + Zaklęcia Artifacts - Artefakty + Artefakty All - + Wszystko None - Brak + Brak Crossover artifacts - + Przenoszone artefakty Starting - + Początkowe Starting options are - + Opcje początkowe to Starting bonus options - + Opcje początkowego bonusu Hero crossover options - + Opcje przeniesienia bohatera Starting hero options - + Opcje początkowego bohatera Bonus - + Bonus Player position - + Pozycja gracza Starting bonus option - + Opcja początkowego bonusu Crossover/ Starting hero - + Przeniesiony/początkowy bohater Add... - + Dodaj... Edit... - + Edytuj... Strongest - + Najsilniejszy Generated - + Wygenerowany Random - Losowo + Losowo No map - + Brak mapy Player - Gracz + Gracz Open map - Otwórz mapę + Otwórz mapę All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) + Wszystkie wspierane mapy (*.vmap *.h3m);;Mapy VCMI(*.vmap);;Mapy HoMM3(*.h3m) Error - + Błąd Could not open the file. - + Nie udało się otworzyć pliku. Save map - Zapisz mapę + Zapisz mapę VCMI maps (*.vmap); - + Mapy VCMI (*.vmap); HoMM3 maps (*.h3m); - + Mapy HoMM3 (*.h3m); Source scenario - + Źródłowy scenariusz Hero - + Bohater @@ -2813,12 +2872,12 @@ Scenario Properties - + Właściwości scenariusza Select a bonus type - + Wybierz typ bonusu @@ -2826,55 +2885,55 @@ Spell - Zaklęcie + Zaklęcie Creature - + Stworzenie - + Building - + Budynek Artifact - Artefakt + Artefakt Spell scroll - + Zwoje z czarem Primary skill - + Umiejętność podstawowa - + Secondary skill - + Umiejętność dodatkowa - + Resource - Zasób + Zasób @@ -2884,118 +2943,118 @@ Recipient - + Odbiorca Creature type - + Typ stworzenia Quantity - + Ilość Attack skill - + Umiejętność ataku Defense skill - + Umiejętność obrony Spell power - Moc + Moc Knowledge - Wiedza + Wiedza Mastery - + Poziom Resource type - + Typ zasobu Edit Starting Bonus - + Edytuj bonus początkowy - + Strongest - + Najsilniejszy - + Generated - + Wygenerowany - + Random - Losowo + Losowo - + Common (%1 and %2) - + Wspólny (%1 i %2) - + Rare (%1, %2, %3, %4) - + Rzadki (%1, %2, %3, %4) - + strongest hero - + najsłynniejszy bohater - + generated hero - + wygenerowany bohater - + random hero - + losowy bohater - + %1 spell for %2 - + czar %1 dla %2 - + %1 %2 for %3 - + %1 %2 dla %3 - + %1 artifact for %2 - + artefakt %1 dla %2 - + %1 spell scroll for %2 - + zwój z czarem %1 dla %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + Umiejętność podstawowa (Atak: %1, Obrona: %2, Magia: %3, Wiedza: %4) dla %5 @@ -3346,112 +3405,112 @@ Wynik sprawdzenia mapy - + Map is not loaded Mapa nie została wczytana - + No factions allowed for player %1 Brak dozwolonych frakcji dla gracza %1 - + No players allowed to play this map Żaden gracz nie jest dozwolony do rozegrania tej mapy - + Map is allowed for one player and cannot be started Mapa jest dozwolona dla jednego gracza i nie może być rozpoczęta - + No human players allowed to play this map Żaden gracz ludzki nie został dozwolony by rozegrać tą mapę - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - Obiekt z armią %1 jest nie do oflagowania, lecz musi mieć być oznaczony jako neutralny lub przynależeć do gracza - - - + Object %1 is assigned to non-playable player %2 Obiekt %1 został przypisany do niegrywalnego gracza %2 - + Spell scroll %1 doesn't have instance assigned and must be removed Zaklęcie ze zwoju %1 nie posiada przypisanego obiektu i musi zostać usunięte - + Artifact %1 is prohibited by map settings Artefakt %1 jest zabroniony w ustawieniach mapy - + Player %1 has no towns and heroes assigned Gracz %1 nie posiada żadnych miast i bohaterów - + Prison %1 must be a NEUTRAL Więzienie %1 musi być neutralne - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + Obiekt możliwy do przejęcia %1 jest NIEOZNACZALNY, ale musi mieć właściciela NEUTRALNEGO lub gracza + + + Hero %1 must have an owner Bohater %1 musi mieć właściciela - + Hero %1 is prohibited by map settings Bohater %1 jest zabroniony przez ustawienia mapy - + Hero %1 has duplicate on map Bohater %1 posiada duplikat na mapie - + Hero %1 has an empty type and must be removed Bohater %1 jest pustego typu i musi zostać usunięty - + Spell scroll %1 is prohibited by map settings Zwój z zaklęciem %1 jest zabroniony przez ustawienia mapy - + Player %1 doesn't have any starting town Gracz %1 nie ma żadnego startowego miasta - + Map name is not specified Nazwa mapy nie została ustawiona - + Map description is not specified Opis mapy nie został ustawiony - - Map contains object from mod "%1", but doesn't require it - Mapa zawiera obiekt z modyfikacji %1 ale nie wymaga tej modyfikacji + + The map is valid and has no issues. + Mapa jest poprawna i nie zawiera błędów. - + Exception occurs during validation: %1 Wystąpił wyjątek podczas walidacji: %1 - + Unknown exception occurs during validation Wystąpił nieznany wyjątek podczas walidacji @@ -3484,52 +3543,52 @@ Parametry - + No special victory Bez specjalnych warunków zwycięstwa - + Capture artifact Zdobądź artefakt - + Hire creatures Zdobądź stworzenia - + Accumulate resources Zbierz zasoby - + Construct building Zbuduj budynek - + Capture town Zdobądź miasto - + Defeat hero Pokonaj bohatera - + Transport artifact Przenieś artefakt - + Kill monster Zabij potwora - + Any town Dowolne miasto @@ -3750,27 +3809,27 @@ main - + Filepath of the map to open. Lokalizacja pliku mapy do otworzenia. - + Extract original H3 archives into a separate folder. Wyodrębnij oryginalne archiwa H3 do osobnego folderu. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Z wyodrębnionego archiwum, rozdzielenie TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 i Un44 do poszczególnych plików PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Z wyodrębnionego archiwum, konwersja pojedynczych obrazków (znalezionych w folderze Images) z .pcx do .png. - + Delete original files, for the ones split / converted. Usuń oryginalne pliki, dla już rozdzielonych / skonwertowanych. diff --git a/mapeditor/translation/portuguese.ts b/mapeditor/translation/portuguese.ts index 3f610cd7e..795359dbf 100644 --- a/mapeditor/translation/portuguese.ts +++ b/mapeditor/translation/portuguese.ts @@ -553,7 +553,7 @@ MainWindow - + VCMI Map Editor Editor de Mapas do VCMI @@ -707,8 +707,8 @@ - - + + View underground Visualizar subterrâneo @@ -855,9 +855,9 @@ - - - + + + Update appearance Atualizar aparência @@ -1049,242 +1049,273 @@ Ctrl+Shift+= - + Confirmation Confirmação - + Unsaved changes will be lost, are you sure? As alterações não salvas serão perdidas, tem certeza? - + Mods are required Mods são necessários - + Failed to open map Falha ao abrir o mapa - + Open map Abrir mapa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Todos os mapas suportados (*.vmap *.h3m);;Mapas do VCMI (*.vmap);;Mapas do HoMM3 (*.h3m) - + Recently Opened Files Arquivos Abertos Recentemente - + Map validation Validação do mapa - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found O mapa tem problemas críticos e provavelmente não será jogável. Abra o Validador no menu Mapa para ver os problemas encontrados. - + Map has some errors. Open Validator from the Map menu to see issues found O mapa tem alguns erros. Abra o Validador no menu Mapa para ver os problemas encontrados. - + Failed to save map Falha ao salvar o mapa - + Save map Salvar mapa - + VCMI maps (*.vmap) Mapas do VCMI (*.vmap) - + Type Tipo - + Towns Cidades - + Objects Objetos - + Heroes Heróis - + Artifacts Artefatos - + Resources Recursos - + Banks Bancos - + Dwellings Moradias - + Grounds Terrenos - + Teleports Teleportes - + Mines Minas - + Triggers Gatilhos - + Monsters Monstros - + Quests Missões - + Wog Objects Objetos Wog - + Obstacles Obstáculos - + Other Outro - + Mods loading problem Problema ao carregar mods - + Critical error during Mods loading. Disable invalid mods and restart. Erro crítico durante o carregamento dos Mods. Desative os mods inválidos e reinicie. - - + + View surface Visualizar superfície - + No objects selected Nenhum objeto selecionado - + This operation is irreversible. Do you want to continue? Esta operação é irreversível. Deseja continuar? - + Errors occurred. %1 objects were not updated Ocorreram erros. %1 objetos não foram atualizados - + Save to image Salvar como imagem - + Select maps to convert Selecionar mapas para converter - + HoMM3 maps(*.h3m) Mapas do HoMM3 (*.h3m) - + Choose directory to save converted maps Escolha o diretório para salvar os mapas convertidos - + Operation completed Operação completa - + Successfully converted %1 maps %1 mapas foram convertidos com sucesso - + Failed to convert the map. Abort operation Falha ao converter o mapa. Abortar operação - + Select campaign to convert Selecionar campanha para converter - + HoMM3 campaigns (*.h3c) Campanhas HoMM3 (*.h3c) - + Select destination file Selecionar arquivo de destino - + VCMI campaigns (*.vcmp) Campanhas VCMI (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + O herói %1 não pode ser criado como NEUTRO. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Mod obrigatório ausente + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Você quer fazer isso agora? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + O mod deste objeto é obrigatório para que o mapa permaneça válido. + + MapSettings @@ -1475,6 +1506,33 @@ ID do Jogador: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Selecionar jogador + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Herói não pode ser criado como NEUTRO + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Mude para um dos jogadores disponíveis: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Atalho: %1 + + PlayerSettings @@ -1520,27 +1578,27 @@ QObject - + Beginner Iniciante - + Advanced Avançado - + Expert Experiente - + Default secondary skills: Habilidades secundárias padrão: - + Secondary skills: Habilidades secundárias: @@ -1897,34 +1955,44 @@ INMARCÁVEL - + Can't place object Não é possível colocar o objeto - + There can only be one grail object on the map. Só pode haver um objeto Graal no mapa. - - Hero %1 cannot be created as NEUTRAL. - O herói %1 não pode ser criado como NEUTRO. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (submod de %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + O mod '%1'%2 é necessário para um objeto no mapa. +Adicione-o aos mods obrigatórios do mapa em Mapa->Configurações gerais. + + + + Custom Spells: Feitiços personalizados: - - + + Default Spells Feitiços padrão - + Default Padrão @@ -1945,13 +2013,13 @@ - + Hero Level: %1 Nível do Herói: %1 - + Hero Experience: %1 Experiência do Herói: %1 @@ -1962,43 +2030,43 @@ - + Mana Percentage: %1 Porcentagem de Mana: %1 - + Primary Skills: %1/%2/%3/%4 Habilidades Primárias: %1/%2/%3/%4 - + Resources: %1 Recursos: %1 - + Artifacts: %1 Artefatos: %1 - + Spells: %1 Feitiços: %1 - + Secondary Skills: %1 Habilidades Secundárias: %1 - + Creatures: %1 Criaturas: %1 @@ -2018,37 +2086,37 @@ Jogadores: %1 - + Rewards: Recompensas: - + Reward Message: %1 Mensagem de Recompensa: %1 - + Mana Diff: %1 Diferença de Mana: %1 - + Move Points: %1 Pontos de Movimento: %1 - + Move Percentage: %1 Porcentagem de Movimento: %1 - + Spell Cast: %1 (%2) Feitiço Lançado: %1 (%2) - + Bonuses: %1 Bônus: %1 @@ -2068,12 +2136,12 @@ Eventos da Cidade: - + Required: Requerido: - + Possible: Possível: @@ -2474,18 +2542,18 @@ Jogadores - + None Nenhum - + Day %1 Dia %1 - - + + Reward %1 Recompensa %1 @@ -2837,7 +2905,7 @@ - + Building Construção @@ -2864,14 +2932,14 @@ - + Secondary skill Habilidade secundária - + Resource Recurso @@ -2932,67 +3000,67 @@ Editar Bônus Inicial - + Strongest Mais forte - + Generated Gerado - + Random Aleatório - + Common (%1 and %2) Comum (%1 e %2) - + Rare (%1, %2, %3, %4) Raro (%1, %2, %3, %4) - + strongest hero herói mais forte - + generated hero herói gerado - + random hero herói aleatório - + %1 spell for %2 Feitiço %1 para %2 - + %1 %2 for %3 %1 %2 para %3 - + %1 artifact for %2 Artefato %1 para %2 - + %1 spell scroll for %2 Pergaminho de feitiço %1 para %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 Habilidade primária (Ataque: %1, Defesa: %2, Poder Mágico: %3, Conhecimento: %4) para %5 @@ -3345,112 +3413,114 @@ Resultados da validação do mapa - + Map is not loaded O mapa não está carregado - + No factions allowed for player %1 Nenhuma facção permitida para o jogador %1 - + No players allowed to play this map Nenhum jogador permitido para jogar este mapa - + Map is allowed for one player and cannot be started O mapa é permitido para um jogador e não pode ser iniciado - + No human players allowed to play this map Nenhum jogador humano permitido para jogar este mapa - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - A instância protegida %1 não tem bandeira mas precisa ser definida como neutra ou pertencente a um dos jogadores - - - + Object %1 is assigned to non-playable player %2 O objeto %1 está atribuído ao jogador não jogável %2 - + Spell scroll %1 doesn't have instance assigned and must be removed O pergaminho de feitiço %1 não tem uma instância atribuída e deve ser removido - + Artifact %1 is prohibited by map settings O artefato %1 é proibido pelas configurações do mapa - + Player %1 has no towns and heroes assigned O jogador %1 não tem cidades e heróis atribuídos - + Prison %1 must be a NEUTRAL A prisão %1 deve set NEUTRA - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + O objeto possuído %1 não pode ser MARCADO, mas deve ter NEUTRO ou jogador como dono + + + Hero %1 must have an owner O herói %1 deve ter um proprietário - + Hero %1 is prohibited by map settings O herói %1 é proibido pelas configurações do mapa - + Hero %1 has duplicate on map O herói %1 possui duplicata no mapa - + Hero %1 has an empty type and must be removed O herói %1 possui um tipo vazio e deve set removido - + Spell scroll %1 is prohibited by map settings O pergaminho mágico %1 é proibido pelas configurações do mapa - + Player %1 doesn't have any starting town O jogador %1 não possui nenhuma cidade inicial - + Map name is not specified O nome do mapa não está especificado - + Map description is not specified A descrição do mapa não está especificada - - Map contains object from mod "%1", but doesn't require it - O mapa contém objeto do mod "%1", mas não o requer + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + O mapa é válido e não possui problemas. - + Exception occurs during validation: %1 Ocorreu uma exceção durante a validação: %1 - + Unknown exception occurs during validation Ocorreu uma exceção desconhecida durante a validação @@ -3483,52 +3553,52 @@ Parâmetros - + No special victory Nenhuma vitória especial - + Capture artifact Capturar artefato - + Hire creatures Contratar criaturas - + Accumulate resources Acumular recursos - + Construct building Construir edifício - + Capture town Capturar cidade - + Defeat hero Derrotar herói - + Transport artifact Transportar artefato - + Kill monster Matar monstro - + Any town Qualquer cidade @@ -3749,27 +3819,27 @@ main - + Filepath of the map to open. Caminho do arquivo do mapa a ser aberto. - + Extract original H3 archives into a separate folder. Extrair arquivos originais H3 para uma pasta separada. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. De um arquivo extraído, divide TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 e Un44 em PNGs individuais. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. De um arquivo extraído, converte imagens únicas (encontradas na pasta Imagens) de .pcx para png. - + Delete original files, for the ones split / converted. Excluir arquivos originais, para os divididos / convertidos. diff --git a/mapeditor/translation/romanian.ts b/mapeditor/translation/romanian.ts index 751da322b..dc69567e9 100644 --- a/mapeditor/translation/romanian.ts +++ b/mapeditor/translation/romanian.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Setări armată Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Formație largă Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Formație strânsă @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Echipează unde: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Anulează @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor de campanii VCMI File - + AI-generated, needs review by native speaker; delete this comment afterwards + Fișier Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Editare View - + AI-generated, needs review by native speaker; delete this comment afterwards + Vizualizare Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Bară de unelte Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Deschide Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează New - + AI-generated, needs review by native speaker; delete this comment afterwards + Nou Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează ca... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietăți campanie Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietăți scenariu Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Afișează fundal complet Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor de scenarii Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Confirmare Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Modificările nesalvate vor fi pierdute, ești sigur? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Deschide hartă All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Toate campaniile suportate (*.vcmp *.h3c);;Campanii VCMI (*.vcmp);;Campanii HoMM3 (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează campania VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Campanii VCMI (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietăți campanie General - + AI-generated, needs review by native speaker; delete this comment afterwards + General Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume campanie Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Descriere campanie Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Autor Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Contact autor (ex. e-mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Data creării campaniei Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versiune campanie Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Muzică Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Dificultatea scenariului este selectabilă de utilizator Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Regiuni Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Presetare regiuni Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Fundal Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Sufix Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Prefix Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Lungime sufix culoare Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Diverse Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Se încarcă imaginea de fundal Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Imagine cadru video Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video de introducere Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video de încheiere Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Personalizat Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Infix @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Poziție etichetă X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Poziție etichetă Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Mai puține scenarii New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Configurarea noii regiuni suportă mai puține scenarii decât înainte. Unele vor fi eliminate. Continuă? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formular Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Evenimente temporizate Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Eveniment nou @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formular Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume hartă Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Descriere hartă Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Autor Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Contact autor (ex. email) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Data creării hărții Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versiune hartă Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Limitează nivelul maxim al eroilor Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Dificultate @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Se generează harta @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Slot Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități erou @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Etichetă text Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilitate Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Personalizează abilități @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Personalizează vrăji Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formular Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj de înfrângere 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 zile fără oraș Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametri No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Fără pierdere specială Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Pierderea castelului Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Pierderea eroului Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Timp expirat Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Zile fără oraș MainWindow - + VCMI Map Editor Editor de hărți VCMI File - + AI-generated, needs review by native speaker; delete this comment afterwards + Fișier Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Deschide recente Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Hartă Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Editare View - + AI-generated, needs review by native speaker; delete this comment afterwards + Vizualizare Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Bară de unelte Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Minihartă Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Vizualizare obiecte hartă Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Navigator Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Inspector Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietate Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Valoare Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Unelte Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Pictură Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Terenuri Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Drumuri Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Râuri Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Previzualizare Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Deschide Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Mai mult... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Nou Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează ca... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor de campanii - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Vezi subteran Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Trecere Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Taie Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Copiază Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Lipește Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Umple Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Umple selecția cu obstacole Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Grilă Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + General Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Titlu și descriere hartă Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Setări jucători Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Anulează Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Refă Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Neutru Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Validează Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Actualizează apariția Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Recreează obstacolele Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exportă ca... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Traduceri Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Convertor h3m Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Convertor h3c Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Blochează Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Blochează obiectele pe hartă pentru a evita modificările inutile Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Deblochează Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Deblochează toate obiectele de pe hartă Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Mărește Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Micșorează Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Resetare zoom Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Confirmare - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Modificările nesalvate vor fi pierdute, ești sigur? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Sunt necesare moduri + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu s-a putut deschide harta - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Deschide hartă - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Toate hărțile suportate (*.vmap *.h3m);;Hărți VCMI(*.vmap);;Hărți HoMM3(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Fișiere deschise recent - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Validare hartă - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Harta are probleme critice și cel mai probabil nu va fi jucabilă. Deschide Validatorul din meniul Hartă pentru a vedea problemele găsite - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Harta are unele erori. Deschide Validatorul din meniul Hartă pentru a vedea problemele găsite - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu s-a putut salva harta - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează hartă - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + Hărți VCMI (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Orașe - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Obiecte - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Eroi - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Resurse - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Bănci - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Locuințe - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Terenuri - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Teleportați - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Mine + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Declanșatori + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Monștri + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Misiuni + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Obiecte WoG + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Obstacole + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Altele - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Problemă la încărcarea modurilor - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroare critică în timpul încărcării modurilor. Dezactivează modurile invalide și repornește. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Vezi suprafața - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciun obiect selectat - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Această operațiune este ireversibilă. Vrei să continui? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Au apărut erori. %1 obiecte nu au fost actualizate - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează ca imagine - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Selectează hărțile de convertit - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Hărți HoMM3 (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Alege directorul pentru a salva hărțile convertite - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Operațiune finalizată - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 hărți convertite cu succes - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Conversia hărții a eșuat. Se oprește operațiunea - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Selectează campania de convertit - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Campanii HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Selectează fișierul de destinație - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Campanii VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Eroul %1 nu poate fi creat ca NEUTRU. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Mod necesar lipsă + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Vrei să faci asta acum? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Modul acestui obiect este obligatoriu pentru ca harta să rămână validă. @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Setări hartă General - + AI-generated, needs review by native speaker; delete this comment afterwards + General Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Moduri Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Evenimente Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Victorie Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Înfrângere Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Cronometru Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Zvonuri Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroi Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu se poate plasa obiectul @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formular Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Moduri obligatorii pentru a juca această hartă Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume mod Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versiune Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Atribuire automată Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Setează modurile necesare pe baza obiectelor plasate pe hartă. Această metodă poate cauza probleme dacă ai personalizat recompense, garnizoane etc. din moduri Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Moduri ale obiectelor din hartă Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Setează toate modurile care conțin conținut de joc ca fiind obligatorii Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Moduri cu conținut complet @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Om/CPU CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Numai CPU Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Echipă Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Oraș principal Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Culoare @@ -1452,12 +1755,14 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Facțiune aleatorie Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Generea @@ -1475,17 +1780,46 @@ + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Selectează jucătorul + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Eroul nu poate fi creat ca NEUTRU + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Schimbă cu unul dintre jucătorii disponibili: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Scurtătură: %1 + + PlayerSettings Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Setări jucător Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători @@ -1495,7 +1829,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1503,7 +1838,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Portret @@ -1514,168 +1850,199 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Implicit QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Începător + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Avansat + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Expert - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități secundare implicite: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități secundare: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Docil Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Prietenos Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Agresiv Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Ostil Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Sălbatic No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Fără patrulare POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + RANG PUTERE HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + TIP EROU Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Clasă erou Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Portret Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - - + %n pătrățel(e) + %n pătrățel(e) + %n pătrățel(e) Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Clădiri Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Evenimente Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Resursă Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Recompensă artefact Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Misiune Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Identificator ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + NumeInstanță IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + EsteStatic neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + neutru Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Armată @@ -1688,31 +2055,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietar Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + La fel ca orașul Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Unități eliminabile Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip substituent Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Rang putere @@ -1720,67 +2092,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip erou Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Experiență MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + MASCULIN FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + FEMININ Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Gen Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Biografie Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Rază de patrulare Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Numele orașului Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + La fel ca jucătorul @@ -1793,19 +2176,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Vraja Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Productivitate @@ -1813,270 +2199,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Cantitate Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Caracter Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Selectează orașul Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu fuge niciodată Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu se dezvoltă Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Recompensă Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină după Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Declanșator uman Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Declanșator CPU First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text la prima vizită Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text la următoarea vizită Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text completat Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Repetă misiunea Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Limită de timp UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + NEETICHETABIL - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu se poate plasa obiectul - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Poate exista un singur obiect cu potir pe hartă. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (submodul din %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Modul '%1'%2 este necesar de un obiect de pe hartă. +Adaugă-l în modurile necesare ale hărții din Hartă->Setări generale. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji personalizate: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji implicite - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Implicit Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Misiune: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua săptămânii: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Zile trecute: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel erou: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Experiență erou: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Puncte de mană: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Procentaj mană: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități primare: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurse: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități secundare: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Creaturi: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroi: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Clase de eroi: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Recompense: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj recompensă: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Diferență mană: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Puncte de mișcare: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Procentaj mișcare: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrajă folosită: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonusuri: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Clădiri construite: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Clădiri interzise: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Evenimente în oraș: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Necesare: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Posibile: @@ -2084,32 +2528,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Obiectivul misiunii Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua săptămânii Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Zile trecute Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivelul eroului Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Experiența eroului Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Puncte de vrajă @@ -2119,7 +2569,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Ucide erou/monstru @@ -2129,87 +2580,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități primare Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Atac Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Apărare Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Putere magică Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Cunoaștere Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurse Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Creaturi Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroi Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Clase de eroi Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători None - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciunul Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua %1 @@ -2217,7 +2685,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Recompense @@ -2225,7 +2694,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă @@ -2233,90 +2703,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod vizitare Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod selectare On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text la selectare Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Poate refuza Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Resetează parametrii Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Perioadă days - + AI-generated, needs review by native speaker; delete this comment afterwards + zile Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Resetează vizitatorii Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Resetează recompensele Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip fereastră Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Informații eveniment Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj afișat la oferirea acestei recompense Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Recompensă Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel erou Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Experiență erou Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Puncte de vrajă @@ -2329,166 +2816,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Depășire Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Mișcare Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină obiectul Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități primare Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Atac Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Apărare Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Putere magică Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Cunoaștere Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurse Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Creaturi Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonusuri Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Durată Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Valoare Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Lansează Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Lansează o vrajă pe harta aventurii Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrajă Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivelul școlii de magie Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Limitator Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua săptămânii Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Zile trecute Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroi Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Clase de eroi Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciunul - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Recompensă %1 @@ -2496,27 +3013,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formular Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Zvonuri din taverne Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Zvon nou @@ -2525,287 +3047,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietăți scenariu General - + AI-generated, needs review by native speaker; delete this comment afterwards + General Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume regiune Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Culoare regiune Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume scenariu Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Fișier hartă Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importă... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exportă... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Dificultate implicită Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Cerințe preliminare Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text clic-dreapta regiune Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog/Epilog Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Activat Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Muzică Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Voce Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilog Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Continuitate Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Păstrează eroii în continuitate Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Experiență Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități primare Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilități secundare Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte All - + AI-generated, needs review by native speaker; delete this comment afterwards + Toate None - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciunul Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacte în continuitate Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Început Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Opțiuni de început sunt Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opțiuni bonus de început Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opțiuni erou în continuitate Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opțiuni erou de început Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Poziția jucătorului Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Opțiune bonus de început Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Continuitate/ Erou de început Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Editează... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Cel mai puternic Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generat Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Aleatoriu No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Fără hartă Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucător Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Deschide hartă All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Toate hărțile suportate (*.vmap *.h3m);;Hărți VCMI(*.vmap);;Hărți HoMM3(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroare Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu s-a putut deschide fișierul. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Salvează hartă VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Hărți VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Hărți HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenariu sursă Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Erou @@ -2813,12 +3390,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Proprietăți scenariu Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Selectează un tip de bonus @@ -2826,55 +3405,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrajă Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Creatură - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Clădire Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefact Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Pergament cu vrajă Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilitate primară - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilitate secundară - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Resursă @@ -2884,118 +3471,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Destinatar Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip creatură Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Cantitate Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilitate atac Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilitate apărare Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Putere magică Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Cunoaștere Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Măiestrie Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip resursă Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Editează bonus de început - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Cel mai puternic - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generat - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Aleatoriu - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Comun (%1 și %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Rar (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + eroul cel mai puternic - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + erou generat - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + erou aleatoriu - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 vrajă pentru %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 pentru %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 artefact pentru %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 pergament cu vrajă pentru %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Abilitate primară (Atac: %1, Apărare: %2, Magie: %3, Cunoaștere: %4) pentru %5 @@ -3003,77 +3613,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Eveniment temporizat Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume eveniment Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Scrie textul mesajului evenimentului affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + afectează jucătorul uman affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + afectează AI Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua primei apariții Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Repetă după (0 = fără repetare) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători afectați Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurse type - + AI-generated, needs review by native speaker; delete this comment afterwards + tip qty - + AI-generated, needs review by native speaker; delete this comment afterwards + cant. Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Obiecte de șters Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -3081,42 +3706,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Clădiri Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Construiește tot Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Demolează tot Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Activează tot Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Dezactivează tot Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tip Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Activat Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Construit @@ -3124,77 +3757,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Eveniment al orașului General - + AI-generated, needs review by native speaker; delete this comment afterwards + General Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nume eveniment Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Scrie textul mesajului evenimentului Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua primei apariții Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Repetă după (0 = fără repetare) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători afectați affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + afectează jucătorul uman affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + afectează AI Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurse Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Clădiri Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Creaturi OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel creatură %1 / Nivel creatură %1 Îmbunătățit Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua %1 - %2 @@ -3202,7 +3850,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua %1 - %2 @@ -3210,32 +3859,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Evenimente oraș Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Evenimente temporizate Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Adaugă Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Elimină Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziua %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Eveniment nou @@ -3243,17 +3898,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Vrăji Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Personalizează vrăji Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 1 @@ -3262,7 +3920,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Vraja poate apărea în ghilda magilor @@ -3271,27 +3930,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Vraja trebuie să apară în ghilda magilor Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivel 5 @@ -3299,43 +3963,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Traduceri hartă Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Limbă Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Suportat String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID șir Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge traducerea Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Limba implicită nu poate fi ștearsă All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Toate înregistrările de text existente pentru această limbă vor fi șterse. Continui? @@ -3343,117 +4015,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Rezultate validare hartă - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Harta nu este încărcată - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nicio facțiune permisă pentru jucătorul %1 - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciun jucător nu are voie să joace această hartă - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Harta este permisă pentru un singur jucător și nu poate fi pornită - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciun jucător uman nu are voie să joace această hartă - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Obiectul %1 este atribuit unui jucător care nu poate juca, %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Pergamentul cu vrajă %1 nu are instanță alocată și trebuie eliminat - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefactul %1 este interzis de setările hărții - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucătorul %1 nu are orașe sau eroi alocați + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Închisoarea %1 trebuie să fie NEUTRĂ + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Obiectul deținut %1 nu poate fi marcat, dar trebuie să aibă proprietar NEUTRU sau un jucător + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Eroul %1 trebuie să aibă un proprietar - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroul %1 este interzis de setările hărții - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroul %1 are un duplicat pe hartă - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroul %1 nu are tip specificat și trebuie eliminat - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Pergamentul cu vrajă %1 este interzis de setările hărții - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucătorul %1 nu are niciun oraș de pornire - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Numele hărții nu este specificat - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Descrierea hărții nu este specificată - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Harta este validă și nu are probleme - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + A apărut o excepție în timpul validării: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + A apărut o excepție necunoscută în timpul validării @@ -3461,77 +4156,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formular Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj de victorie Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Numai pentru jucători umani Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Permite victorie standard Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametri - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Fără victorie specială - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Capturează artefactul - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Angajează creaturi - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Acumulează resurse - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Construiește clădire - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Capturează oraș - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Învinge erou - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Transportă artefact - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Ucide monstru + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Orice oraș @@ -3539,67 +4249,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Creează hartă nouă Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Dimensiune hartă Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Înălțime Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Lățime XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Hartă aleatorie Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Jucători S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3607,172 +4330,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Aleatoriu Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Echipe umane Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Echipe computer Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Dimensiune standard Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Dimensiune personalizată Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Subteran Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Oameni Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Computere Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Puterea monștrilor Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Slabă Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Normală Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Puternică Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Conținut de apă None - + AI-generated, needs review by native speaker; delete this comment afterwards + Niciunul Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Insule Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Drumuri Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Pământ Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Pietriș Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Pavaj Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Șablon Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Sămânță personalizată Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Generează hartă aleatorie OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Anulează No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Fără șablon No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Nu există șablon pentru parametrii specificați. Harta aleatorie nu poate fi generată. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + Eroare RMG [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [implicit] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Calea fișierului hărții de deschis. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Extrage arhivele originale H3 într-un folder separat. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + Dintr-o arhivă extrasă, separă TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 și Un44 în fișiere PNG individuale. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + Dintr-o arhivă extrasă, convertește imaginile unice (din folderul Images) din .pcx în png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Șterge fișierele originale, pentru cele separate / convertite. diff --git a/mapeditor/translation/russian.ts b/mapeditor/translation/russian.ts index 9e4e70c91..fe5685d1e 100644 --- a/mapeditor/translation/russian.ts +++ b/mapeditor/translation/russian.ts @@ -49,7 +49,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор кампаний VCMI @@ -100,24 +101,28 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства кампании Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства сценария Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Показать полный фон Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор сценариев @@ -137,17 +142,20 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Все поддерживаемые кампании (*.vcmp *.h3c);;Кампании VCMI (*.vcmp);;Кампании HoMM3 (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Сохранить кампанию VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампании VCMI (*.vcmp) @@ -156,7 +164,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства кампании @@ -166,12 +175,14 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Название кампании Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Описание кампании @@ -181,58 +192,69 @@ Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Контакт автора (например, e-mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Дата создания кампании Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версия кампании Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музыка Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Сложность сценария выбирается игроком Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Регионы Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Шаблон регионов Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Фон Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Суффикс Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Префикс Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Длина цветного суффикса @@ -247,37 +269,44 @@ Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Разное Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Загрузка фонового изображения Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Изображение рамки видео Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Вступительное видео Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Заключительное видео Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Пользовательский Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Инфикс @@ -292,22 +321,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиция метки X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиция метки Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Меньше сценариев New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Новая настройка региона поддерживает меньше сценариев, чем раньше. Некоторые будут удалены. Продолжить? @@ -553,7 +586,7 @@ MainWindow - + VCMI Map Editor Редактор карт VCMI @@ -661,7 +694,8 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O @@ -676,7 +710,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -686,7 +721,8 @@ Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N @@ -702,20 +738,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор кампаний - - + + View underground Вид на подземелье Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +763,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P @@ -735,7 +774,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +785,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +796,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +817,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +833,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter @@ -800,7 +844,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +856,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +867,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +878,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del @@ -841,7 +889,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +900,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance Обновить вид @@ -874,7 +924,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +935,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +946,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +957,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +968,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +979,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +990,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1001,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,7 +1012,8 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E @@ -975,7 +1034,8 @@ Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M @@ -986,7 +1046,8 @@ Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C @@ -1026,7 +1087,8 @@ Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ @@ -1049,240 +1111,283 @@ Ctrl+Shift+= - + Confirmation Подтверждение - + Unsaved changes will be lost, are you sure? Несохранённые изменения будут потеряны. Вы уверены? - - - Mods are required - - - Failed to open map - + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Требуются моды - + + Failed to open map + AI-generated, needs review by native speaker; delete this comment afterwards + Не удалось открыть карту + + + Open map Открыть карту - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Все поддерживаемые карты (*.vmap *.h3m);;Карты VCMI (*.vmap);;Карты Героев III (*.h3m) - + Recently Opened Files Недавно открытые файлы - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Проверка карты - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Карта содержит критические ошибки и, скорее всего, будет непригодна для игры. Откройте Валидатор в меню Карта, чтобы просмотреть найденные проблемы - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Карта содержит ошибки. Откройте Валидатор в меню Карта, чтобы просмотреть найденные проблемы - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Не удалось сохранить карту - + Save map Сохранить карту - + VCMI maps (*.vmap) Карты VCMI (*.vmap) - + Type Тип - + Towns Города - + Objects Объекты - + Heroes Герои - + Artifacts Артефакты - + Resources Ресурсы - + Banks Банки - + Dwellings Жилища - + Grounds Покрытия - + Teleports Телепорты - + Mines Шахты - + Triggers Триггеры - + Monsters Монстры - + Quests Квесты - + Wog Objects Объекты WoG - + Obstacles Препятствия - + Other Прочее - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Проблема загрузки модов - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Критическая ошибка при загрузке модов. Отключите неверные моды и перезапустите. - - + + View surface Вид на поверхность - + No objects selected Объекты не выбраны - + This operation is irreversible. Do you want to continue? Эта операция необратима. Хотите продолжить? - + Errors occurred. %1 objects were not updated Произошли ошибки. %1 объектов не было обновлено - + Save to image Сохранить как изображение - + Select maps to convert Выберите карты для конвертации - + HoMM3 maps(*.h3m) Карты HoMM3 (*.h3m) - + Choose directory to save converted maps Выберите каталог для сохранения конвертированных карт - + Operation completed Операция завершена - + Successfully converted %1 maps Успешно конвертировано %1 карт - + Failed to convert the map. Abort operation Не удалось конвертировать карту. Операция прервана - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Выберите кампанию для конвертации - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампании HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Выберите файл назначения - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампании VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + Герой %1 не может быть создан как НЕЙТРАЛЬНЫЙ. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Отсутствует обязательный мод + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Хотите сделать это сейчас? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Мод этого объекта обязателен, чтобы карта оставалась допустимой. @@ -1475,6 +1580,33 @@ Игрок: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Выберите игрока + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Герой не может быть создан как НЕЙТРАЛЬНЫЙ + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Переключитесь на одного из доступных игроков: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Ярлык: %1 + + PlayerSettings @@ -1520,29 +1652,31 @@ QObject - + Beginner Новичок - + Advanced Опытный - + Expert Эксперт - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Навыки по умолчанию: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторичные навыки: @@ -1578,17 +1712,20 @@ POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + РАНГ СИЛЫ HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + ТИП ГЕРОЯ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Класс героя @@ -1609,10 +1746,11 @@ %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - - + %n клетка(и) + %n клетка(и) + %n клетка(и) @@ -1628,42 +1766,50 @@ Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурс Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Награда — артефакт Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Задание Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Идентификатор ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + Имя экземпляра IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + Статичный @@ -1675,7 +1821,8 @@ Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Армия @@ -1688,31 +1835,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Владелец Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Как у города Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Удаляемые отряды Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип заполнителя Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Ранг силы @@ -1720,43 +1872,50 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип героя Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Опыт MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + МУЖСКОЙ FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ЖЕНСКИЙ Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Пол Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Имя Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Биография @@ -1768,19 +1927,22 @@ Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Радиус патруля Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Название города Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Как у игрока @@ -1805,7 +1967,8 @@ Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Производительность @@ -1813,29 +1976,34 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Количество Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонаж Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Выбрать город Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Никогда не убегает Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Не растёт @@ -1847,50 +2015,58 @@ Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Удалить после Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Триггер игрока Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Триггер ИИ First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при первом визите Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при следующем визите Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при завершении Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Повторное задание Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Ограничение по времени @@ -1898,185 +2074,225 @@ НЕФЛАГУЕМЫЙ - + Can't place object Невозможно разместить объект - + There can only be one grail object on the map. На карте может быть только один Грааль. - - Hero %1 cannot be created as NEUTRAL. - Герой %1 не может быть создан как НЕЙТРАЛЬНЫЙ. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (подмод %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Мод '%1'%2 требуется объектом на карте. +Добавьте его в список требуемых модов в Карта -> Общие настройки. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Пользовательские заклинания: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания по умолчанию - + Default По умолчанию Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Задание: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + День недели: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Прошло дней: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Уровень героя: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Опыт героя: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Очки маны: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Процент маны: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Основные навыки: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурсы: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакты: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинания: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторичные навыки: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Существа: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Герои: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Классы героев: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Игроки: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Награды: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Сообщение о награде: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Разница маны: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Очки передвижения: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Процент передвижения: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Заклинание применено: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонусы: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Построенные здания: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Запрещённые здания: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + События в городе: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Обязательные: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Возможные: @@ -2475,18 +2691,18 @@ Игроки - + None Нет - + Day %1 День %1 - - + + Reward %1 Награда %1 @@ -2525,7 +2741,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства сценария @@ -2535,32 +2752,38 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Название региона Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Цвет региона Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Название сценария Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл карты Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Импорт... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Экспорт... @@ -2571,27 +2794,32 @@ Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Сложность по умолчанию Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Предпосылки Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при правом клике по региону Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пролог/Эпилог Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пролог @@ -2603,19 +2831,22 @@ Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Видео Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музыка Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Озвучка @@ -2626,22 +2857,26 @@ Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Эпилог Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Переход Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Герои перехода сохраняются Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Опыт @@ -2651,7 +2886,8 @@ Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторичные навыки @@ -2666,7 +2902,8 @@ All - + AI-generated, needs review by native speaker; delete this comment afterwards + Все @@ -2676,74 +2913,88 @@ Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакты перехода Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Начальные Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Начальные параметры: Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Начальные бонусы Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Параметры перехода героев Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Начальные параметры героя Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонус Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиция игрока Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Параметр начального бонуса Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой перехода/Начальный герой Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Добавить... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Изменить... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Сильнейший Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Сгенерированный @@ -2753,7 +3004,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Нет карты @@ -2774,13 +3026,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Ошибка Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Не удалось открыть файл. @@ -2790,22 +3044,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Карты VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Карты HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Исходный сценарий Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой @@ -2813,12 +3071,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Свойства сценария Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Выберите тип бонуса @@ -2832,15 +3092,17 @@ Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Существо - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Здание @@ -2853,28 +3115,32 @@ Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Свиток заклинания Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Основной навык - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторичный навык - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурс @@ -2884,28 +3150,33 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Получатель Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип существа Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Количество Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Навык атаки Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Навык защиты @@ -2920,82 +3191,97 @@ Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Мастерство Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип ресурса Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Изменить начальный бонус - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Сильнейший - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Сгенерированный - + Random Случайно - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Общий (%1 и %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Редкий (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + сильнейший герой - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + сгенерированный герой - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + случайный герой - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 заклинание для %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 для %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 артефакт для %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 свиток заклинания для %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Основной навык (Атака: %1, Защита: %2, Магия: %3, Знания: %4) для %5 @@ -3346,112 +3632,114 @@ Результаты проверки карты - + Map is not loaded Карта не загружена - + No factions allowed for player %1 Нет доступных фракций для игрока %1 - + No players allowed to play this map Эта карта не позволяет играть ни одному игроку - + Map is allowed for one player and cannot be started Карта предназначена для одного игрока и не может быть запущена - + No human players allowed to play this map Эта карта не позволяет играть человеку - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - Бронированный объект %1 НЕФЛАГУЕМЫЙ, но должен иметь НЕЙТРАЛЬНОГО или игрового владельца - - - + Object %1 is assigned to non-playable player %2 Объект %1 назначен неиграбельному игроку %2 - + Spell scroll %1 doesn't have instance assigned and must be removed Свиток заклинания %1 не имеет назначения и должен быть удалён - + Artifact %1 is prohibited by map settings Артефакт %1 запрещён настройками карты - + Player %1 has no towns and heroes assigned Игрок %1 не имеет городов и героев - + Prison %1 must be a NEUTRAL Тюрьма %1 должна быть НЕЙТРАЛЬНОЙ - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Объект %1 не может быть отмечен флагом, но должен принадлежать НЕЙТРАЛУ или игроку + + + Hero %1 must have an owner Герой %1 должен иметь владельца - + Hero %1 is prohibited by map settings Герой %1 запрещён настройками карты - + Hero %1 has duplicate on map Герой %1 дублируется на карте - + Hero %1 has an empty type and must be removed Герой %1 имеет пустой тип и должен быть удалён - + Spell scroll %1 is prohibited by map settings Свиток заклинания %1 запрещён настройками карты - + Player %1 doesn't have any starting town Игрок %1 не имеет стартового города - + Map name is not specified Имя карты не указано - + Map description is not specified Описание карты не указано - - Map contains object from mod "%1", but doesn't require it - Карта содержит объект из мода "%1", но не требует его + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Карта корректна и не содержит ошибок. - + Exception occurs during validation: %1 Произошла ошибка при проверке: %1 - + Unknown exception occurs during validation Произошла неизвестная ошибка при проверке @@ -3484,54 +3772,55 @@ Параметры - + No special victory Нет специальной победы - + Capture artifact Взять артефакт - + Hire creatures Нанять существ - + Accumulate resources Собрать ресурсы - + Construct building Построить - + Capture town Захватить город - + Defeat hero Победить героя - + Transport artifact Переместить артефакт - + Kill monster Убить монстра - + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Любой город @@ -3622,27 +3911,32 @@ Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартный размер Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Пользовательский размер Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Подземелье Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Люди Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Компьютеры @@ -3744,33 +4038,34 @@ [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [по умолчанию] main - + Filepath of the map to open. Путь к файлу карты для открытия. - + Extract original H3 archives into a separate folder. Распаковать архивы оригинальных Героев III в отдельную папку. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Разделение в распакованном архиве TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 и Un44 на отдельные PNG. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Преобразование в расспакованном архиве изображений .pcx в .png. - + Delete original files, for the ones split / converted. Удалить оригиналы для преобразованных файлов. diff --git a/mapeditor/translation/spanish.ts b/mapeditor/translation/spanish.ts index 8cb5364c2..1091ef13f 100644 --- a/mapeditor/translation/spanish.ts +++ b/mapeditor/translation/spanish.ts @@ -49,7 +49,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor de Campañas VCMI @@ -100,24 +101,28 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propiedades de la campaña Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propiedades del escenario Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Mostrar fondo completo Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor de escenarios @@ -137,12 +142,14 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Todas las campañas soportadas (*.vcmp *.h3c);;Campañas VCMI (*.vcmp);;Campañas HoMM3 (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Guardar campaña @@ -156,7 +163,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propiedades de la campaña @@ -166,12 +174,14 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nombre de la campaña Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Descripción de la campaña @@ -181,58 +191,69 @@ Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Contacto del autor (ej. correo electrónico) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Fecha de creación de la campaña Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Versión de la campaña Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Música Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Dificultad del escenario seleccionable por el usuario Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Regiones Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Preajuste de regiones Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Fondo Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Sufijo Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Prefijo Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Longitud del sufijo de color @@ -247,37 +268,44 @@ Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Varios Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Cargando imagen de fondo Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Imagen del borde del video Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video de introducción Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video de cierre Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Personalizado Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Infijo @@ -292,22 +320,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Posición de la etiqueta X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Posición de la etiqueta Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Menos escenarios New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + La nueva configuración de la región admite menos escenarios que antes. Algunos serán eliminados. ¿Continuar? @@ -553,7 +585,7 @@ MainWindow - + VCMI Map Editor Editor de Mapas de VCMI @@ -661,7 +693,8 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O @@ -676,7 +709,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -686,7 +720,8 @@ Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N @@ -702,20 +737,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Editor de campañas - - + + View underground Ver subterráneo Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +762,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P @@ -735,7 +773,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +784,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +795,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +816,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +832,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter @@ -800,7 +843,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +855,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +866,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +877,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del @@ -841,7 +888,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +899,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance Actualizar apariencia @@ -874,7 +923,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +934,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +945,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +956,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +967,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +978,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +989,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1000,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,7 +1011,8 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E @@ -975,7 +1033,8 @@ Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M @@ -986,7 +1045,8 @@ Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C @@ -1026,7 +1086,8 @@ Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ @@ -1049,242 +1110,273 @@ Ctrl+Shift+= - + Confirmation Confirmación - + Unsaved changes will be lost, are you sure? Los cambios no guardados se perderán. Está usted seguro ? - + Mods are required Se requieren mods - + Failed to open map Error al abrir el mapa - + Open map Abrir mapa - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Todos los mapas soportados (*.vmap *.h3m);;Mapas VCMI (*.vmap);;Mapas HoMM3 (*.h3m) - + Recently Opened Files Archivos abiertos recientemente - + Map validation Validación del mapa - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found El mapa tiene problemas críticos y probablemente no será jugable. Abre el Validador en el menú de Mapa para ver los problemas encontrados - + Map has some errors. Open Validator from the Map menu to see issues found El mapa tiene algunos errores. Abre el Validador en el menú de Mapa para ver los problemas encontrados - + Failed to save map Error al guardar el mapa - + Save map Guardar mapa - + VCMI maps (*.vmap) Mapas VCMI (*.vmap) - + Type Tipo - + Towns Ciudades - + Objects Objetos - + Heroes Héroes - + Artifacts Artefactos - + Resources Recursos - + Banks Bancos - + Dwellings Viviendas - + Grounds Terrenos - + Teleports Teletransportes - + Mines Minas - + Triggers Disparadores - + Monsters Monstruos - + Quests Misiones - + Wog Objects Objetos de WoG - + Obstacles Obstáculos - + Other Otros - + Mods loading problem Problema al cargar mods - + Critical error during Mods loading. Disable invalid mods and restart. Error crítico al cargar mods. Desactiva los mods no válidos y reinicia. - - + + View surface Ver superficie - + No objects selected No se han seleccionado objetos - + This operation is irreversible. Do you want to continue? Esta operación es irreversible. ¿Quieres continuar? - + Errors occurred. %1 objects were not updated Se produjeron errores. %1 objetos no fueron actualizados - + Save to image Guardar como imagen - + Select maps to convert Seleccionar mapas para convertir - + HoMM3 maps(*.h3m) Mapas HoMM3 (*.h3m) - + Choose directory to save converted maps Elegir directorio para guardar los mapas convertidos - + Operation completed Operación completada - + Successfully converted %1 maps %1 mapas convertidos exitosamente - + Failed to convert the map. Abort operation Error al convertir el mapa. Operación abortada - + Select campaign to convert Seleccionar campaña para convertir - + HoMM3 campaigns (*.h3c) Campañas HoMM3 (*.h3c) - + Select destination file Seleccionar archivo de destino - + VCMI campaigns (*.vcmp) Campañas VCMI (*.vcmp) + + MapController + + + Hero %1 cannot be created as NEUTRAL. + El héroe %1 no puede ser creado como NEUTRAL. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Falta un mod requerido + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +¿Quieres hacerlo ahora? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + El mod de este objeto es obligatorio para que el mapa siga siendo válido. + + MapSettings @@ -1475,6 +1567,33 @@ ID de jugador: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Seleccionar jugador + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + No se puede crear un héroe como NEUTRAL + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Cambia a uno de los jugadores disponibles: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Acceso directo: %1 + + PlayerSettings @@ -1520,27 +1639,27 @@ QObject - + Beginner Principiante - + Advanced Avanzado - + Expert Experto - + Default secondary skills: Habilidades secundarias predeterminadas: - + Secondary skills: Habilidades secundarias: @@ -1897,34 +2016,44 @@ INCAPTURABLE - + Can't place object No se puede colocar objeto - + There can only be one grail object on the map. Solo puede haber un objeto de Grial en el mapa. - - Hero %1 cannot be created as NEUTRAL. - El héroe %1 no puede ser creado como NEUTRAL. + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (submod de %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + El mod '%1'%2 es requerido por un objeto en el mapa. +Agrégalo a los mods requeridos del mapa en Mapa->Configuración general. + + + + Custom Spells: Hechizos personalizados: - - + + Default Spells Hechizos predeterminados - + Default Por defecto @@ -1945,13 +2074,13 @@ - + Hero Level: %1 Nivel del héroe: %1 - + Hero Experience: %1 Experiencia del héroe: %1 @@ -1962,43 +2091,43 @@ - + Mana Percentage: %1 Porcentaje de maná: %1 - + Primary Skills: %1/%2/%3/%4 Habilidades primarias: %1/%2/%3/%4 - + Resources: %1 Recursos: %1 - + Artifacts: %1 Artefactos: %1 - + Spells: %1 Hechizos: %1 - + Secondary Skills: %1 Habilidades secundarias: %1 - + Creatures: %1 Criaturas: %1 @@ -2018,37 +2147,37 @@ Jugadores: %1 - + Rewards: Recompensas: - + Reward Message: %1 Mensaje de recompensa: %1 - + Mana Diff: %1 Diferencia de maná: %1 - + Move Points: %1 Puntos de movimiento: %1 - + Move Percentage: %1 Porcentaje de movimiento: %1 - + Spell Cast: %1 (%2) Hechizo lanzado: %1 (%2) - + Bonuses: %1 Bonificaciones: %1 @@ -2068,12 +2197,12 @@ Eventos de ciudad: - + Required: Requeridos: - + Possible: Posibles: @@ -2474,18 +2603,18 @@ Jugadores - + None Ninguno - + Day %1 Día %1 - - + + Reward %1 Recompensa %1 @@ -2524,7 +2653,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propiedades del escenario @@ -2534,32 +2664,38 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nombre de la región Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Color de la región Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Nombre del escenario Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Archivo del mapa Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importar... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exportar... @@ -2570,27 +2706,32 @@ Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Dificultad predeterminada Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Requisitos previos Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Texto al hacer clic derecho en la región Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prólogo/Epílogo Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prólogo @@ -2602,19 +2743,22 @@ Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Música Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Voz @@ -2625,17 +2769,20 @@ Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epílogo Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Crossover Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Héroes del crossover retenidos @@ -2650,7 +2797,8 @@ Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Habilidades secundarias @@ -2665,7 +2813,8 @@ All - + AI-generated, needs review by native speaker; delete this comment afterwards + Todos @@ -2675,74 +2824,88 @@ Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefactos de crossover Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Inicial Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Las opciones iniciales son Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opciones de bonificación inicial Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opciones de héroe crossover Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Opciones de héroe inicial Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonificación Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Posición del jugador Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Opción de bonificación inicial Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Crossover/Héroe inicial Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Agregar... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Editar... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Más fuerte Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generado @@ -2752,7 +2915,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Sin mapa @@ -2773,13 +2937,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Error Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + No se pudo abrir el archivo. @@ -2789,22 +2955,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Mapas VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Mapas HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Escenario fuente Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Héroe @@ -2812,12 +2982,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Propiedades del escenario Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Seleccionar tipo de bonificación @@ -2831,15 +3003,17 @@ Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Criatura - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Edificio @@ -2852,26 +3026,29 @@ Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Pergamino de hechizo Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Habilidad primaria - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Habilidad secundaria - + Resource Recurso @@ -2883,28 +3060,33 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Destinatario Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tipo de criatura Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Cantidad Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Habilidad de ataque Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Habilidad de defensa @@ -2919,82 +3101,97 @@ Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Maestría Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tipo de recurso Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Editar bonificación inicial - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Más fuerte - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Generado - + Random Aleatorio - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Común (%1 y %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Raro (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + héroe más fuerte - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + héroe generado - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + héroe aleatorio - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Hechizo %1 para %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 para %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefacto %1 para %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Pergamino de hechizo %1 para %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Habilidad primaria (Ataque: %1, Defensa: %2, Hechizo: %3, Conocimiento: %4) para %5 @@ -3345,112 +3542,114 @@ Resultados de la validación del mapa - + Map is not loaded No se ha cargado ningún mapa - + No factions allowed for player %1 No hay facciones permitidas para el jugador %1 - + No players allowed to play this map No hay jugadores autorizados a jugar en este mapa - + Map is allowed for one player and cannot be started El mapa está autorizado para un jugador y no se puede iniciar - + No human players allowed to play this map Ningún jugador humano puede jugar en este mapa - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - La instancia protegida %1 NOSEPUEDEMARCAR, pero debe tener un propietario NEUTRAL o jugador - - - + Object %1 is assigned to non-playable player %2 El artículo %1 está asignado al jugador no jugable %2 - + Spell scroll %1 doesn't have instance assigned and must be removed El pergamino de hechizo %1 no tiene instancia asignada y debe ser eliminado - + Artifact %1 is prohibited by map settings El artefacto %1 está prohibido por la configuración del mapa - + Player %1 has no towns and heroes assigned El jugador %1 no tiene ciudades ni héroes asignados - + Prison %1 must be a NEUTRAL %1 prisión debe ser NEUTRA - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + El objeto poseíble %1 no se puede marcar pero debe tener un propietario NEUTRAL o jugador + + + Hero %1 must have an owner El héroe %1 debe tener un propietario - + Hero %1 is prohibited by map settings El héroe %1 está prohibido por la configuración del mapa - + Hero %1 has duplicate on map El héroe %1 tiene un duplicado en el mapa - + Hero %1 has an empty type and must be removed El héroe %1 tiene un tipo vacío y debe eliminarse - + Spell scroll %1 is prohibited by map settings %1 desplazamiento de hechizos está prohibido por la configuración del mapa - + Player %1 doesn't have any starting town El jugador %1 no tiene ciudad inicial - + Map name is not specified No se especifica el nombre del mapa - + Map description is not specified No se especifica la descripción del mapa - - Map contains object from mod "%1", but doesn't require it - El mapa contiene un objeto del mod "%1", pero no lo requiere + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + El mapa es válido y no tiene problemas. - + Exception occurs during validation: %1 Se produce una excepción durante la validación: %1 - + Unknown exception occurs during validation Se produce una excepción desconocida durante la validación @@ -3483,52 +3682,52 @@ Parámetros - + No special victory Sin victoria especial - + Capture artifact Capturar artefacto - + Hire creatures Contratar criaturas - + Accumulate resources Acumular recursos - + Construct building Construir edificio - + Capture town Capturar ciudad - + Defeat hero Derrotar héroe - + Transport artifact Transportar artefacto - + Kill monster Matar monstruo - + Any town Cualquier ciudad @@ -3749,27 +3948,27 @@ main - + Filepath of the map to open. Ruta del archivo del mapa a abrir. - + Extract original H3 archives into a separate folder. Extraer archivos originales de H3 en una carpeta separada. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Desde un archivo extraído, separa TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 y Un44 en imágenes PNG individuales. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Desde un archivo extraído, convierte imágenes individuales (encontradas en la carpeta Imágenes) de .pcx a png. - + Delete original files, for the ones split / converted. Eliminar archivos originales, por los que se han separado / convertido. diff --git a/mapeditor/translation/swedish.ts b/mapeditor/translation/swedish.ts index e057b1463..486d70558 100644 --- a/mapeditor/translation/swedish.ts +++ b/mapeditor/translation/swedish.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Arméinställningar Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Bred formation Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Trång formation @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakt Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Utrusta var: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Avbryt @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI Kampanjredigerare File - + AI-generated, needs review by native speaker; delete this comment afterwards + Fil Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Redigera View - + AI-generated, needs review by native speaker; delete this comment afterwards + Visa Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Verktygsfält Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Öppna Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara New - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara som... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjegenskaper Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioegenskaper Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Visa full bakgrund Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarioredigerare Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Bekräftelse Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Osparade ändringar kommer gå förlorade, är du säker? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Öppna karta All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Alla stödda kampanjer (*.vcmp *.h3c);;VCMI-kampanjer (*.vcmp);;HoMM3-kampanjer (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara kampanj VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjer (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjegenskaper General - + AI-generated, needs review by native speaker; delete this comment afterwards + Allmänt Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjnamn Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjbeskrivning Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Författare Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Författarkontakt (t.ex. e-post) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Skapandedatum för kampanjen Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjversion Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musik Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenariesvårighet kan väljas av användaren Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Regioner Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Regionförinställning Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Bakgrund Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Suffix Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Prefix Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Färgsuffixlängd Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Övrigt Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Laddar bakgrundsbild Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Videoram-bild Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Introvideo Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Outrovideo Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassad Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Infogning @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Etikett Pos X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Etikett Pos Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Färre scenarier New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Den nya regionsinställningen stöder färre scenarier än tidigare. Vissa kommer tas bort. Fortsätta? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formulär Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidsinställda händelser Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny händelse @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formulär Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartnamn Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartbeskrivning Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Författare Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Författarkontakt (t.ex. e-post) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartskapandetid Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartversion Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Begränsa maximal hjältenivå Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Svårighet @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Genererar karta @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Slot Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakt @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältefärdigheter @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Textetikett Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Färdighet Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassa färdigheter @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassa besvärjelser Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formulär Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Förlustmeddelande 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 dagar utan stad Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametrar No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen särskild förlust Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Förlora slott Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Förlora hjälte Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiden har gått ut Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Dagar utan stad MainWindow - + VCMI Map Editor VCMI kartredigerare File - + AI-generated, needs review by native speaker; delete this comment afterwards + Fil Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Öppna senaste Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Karta Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Redigera View - + AI-generated, needs review by native speaker; delete this comment afterwards + Visa Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Verktygsfält Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Minikarta Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartobjektvy Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Bläddrare Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + Inspektör Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Egenskap Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Värde Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Verktyg Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Målning Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Terränger Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Vägar Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Floder Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Förhandsgranska Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Öppna Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Mer... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara som... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanjredigerare - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Visa underjord Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Passera Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Klipp ut Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Kopiera Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Klistra in Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Fyll Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Fyller markeringen med hinder Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Rutnät Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Allmänt Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Karttitel och beskrivning Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelarinställningar Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Ångra Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Gör om Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Radera Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Neutral Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Validera Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Uppdatera utseende Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Återskapa hinder Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exportera som... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Översättningar Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m-omvandlare Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c-omvandlare Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås objekt på kartan för att undvika onödiga ändringar Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås upp Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Lås upp alla objekt på kartan Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Zooma in Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Zooma ut Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Återställ zoom Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Bekräftelse - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Osparade ändringar kommer att gå förlorade, är du säker? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Moddar krävs + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Det gick inte att öppna kartan - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Öppna karta - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Alla stödda kartor (*.vmap *.h3m);;VCMI-kartor (*.vmap);;HoMM3-kartor (*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Senast öppnade filer - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartvalidering - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan har kritiska problem och kommer troligen inte att kunna spelas. Öppna validatorn från Kart-menyn för att se upptäckta problem - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan har några fel. Öppna validatorn från Kart-menyn för att se upptäckta problem - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Det gick inte att spara kartan - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara karta - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kartor (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Typ - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Städer - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Objekt - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältar - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Resurser - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Banker - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Boningshus - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Marktyper - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Teleportörer - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Gruvor + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Utlösare + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Monster + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Uppdrag + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + WoG-objekt + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Hinder + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Annat - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Problem med att ladda moddar - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Kritiskt fel under modd-laddning. Inaktivera ogiltiga moddar och starta om. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Visa yta - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Inga objekt valda - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Denna åtgärd kan inte ångras. Vill du fortsätta? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Fel inträffade. %1 objekt uppdaterades inte - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara som bild - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj kartor att konvertera - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kartor (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj katalog för att spara konverterade kartor - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Åtgärd slutförd - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Lyckades konvertera %1 kartor - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Det gick inte att konvertera kartan. Avbryter åtgärden - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj kampanj att konvertera - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kampanjer (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj destinationsfil - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kampanjer (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte %1 kan inte skapas som NEUTRAL. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Saknad nödvändig mod + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Vill du göra det nu? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Denna mod är nödvändig för objektet och kartan för att vara giltig. @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartinställningar General - + AI-generated, needs review by native speaker; delete this comment afterwards + Allmänt Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Moddar Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Händelser Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Seger Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Förlust Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidsinställd Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Rykten Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Förmågor Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältar Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Kan inte placera objekt @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Meddelande @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formulär Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Obligatoriska moddar för att spela denna karta Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Modnamn Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Version Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Automatisk tilldelning Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Ställ in obligatoriska moddar baserat på objekt som placeras på kartan. Denna metod kan orsaka problem om du har anpassade belöningar, garnisoner etc. från moddar Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartobjektmoddar Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Ställ in alla moddar med spelinnehåll som obligatoriska Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Moddar med fullständigt innehåll @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + Människa/CPU CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Endast CPU Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Lag Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Huvudstad Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Färg @@ -1452,27 +1755,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Slumpad fraktion Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Generera hjälte vid huvudstad (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (standard) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Inget lag Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelar-ID: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Välj spelare + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte kan inte skapas som NEUTRAL + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Byt till en av de tillgängliga spelarna: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Genväg: %1 @@ -1480,12 +1815,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelarinställningar Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare @@ -1495,7 +1832,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -1503,7 +1841,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Porträtt @@ -1514,167 +1853,198 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Nybörjare + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Avancerad + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Expert - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard sekundära färdigheter: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundära färdigheter: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Vänlig Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Vänskaplig Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Aggressiv Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Fientlig Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Vild No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen patrull POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + STYRKERANKNING HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + HJÄLTETYP Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteklass Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Porträtt Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Färdigheter Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - + %n ruta(r) + %n ruta(r) Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Byggnader Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Händelser Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurs Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefaktbelöning Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Uppdrag Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Identifierare ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + InstansNamn IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + ÄrStatisk neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + neutral Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Armé @@ -1687,31 +2057,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Ägare Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Samma som stad Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Borttagbara enheter Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Platshållartyp Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Styrkerankning @@ -1719,67 +2094,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältetyp Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Erfarenhet MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + MAN FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + KVINNA Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Kön Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Namn Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Biografi Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Patrullradie Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Stadsnamn Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Samma som spelare @@ -1792,19 +2178,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Meddelande Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Produktivitet @@ -1812,270 +2201,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Mängd Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Karaktär Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj stad Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Flyr aldrig Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Växer inte Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Belöning Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort efter Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Mänsklig utlösare Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + AI-utlösare First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text vid första besöket Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text vid nästa besök Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text efter slutförande Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Upprepa uppdrag Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidsgräns UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + KAN INTE FLAGGAS - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Kan inte placera objekt - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Det kan bara finnas ett graalobjekt på kartan. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (undermodul till %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Modulen '%1'%2 krävs av ett objekt på kartan. +Lägg till den i kartans obligatoriska moduler i Karta->Allmänna inställningar. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassade besvärjelser: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Standardbesvärjelser - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Uppdrag: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Veckodag: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dagar passerade: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältenivå: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteerfarenhet: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Manapoäng: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Manaprocent: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Primära färdigheter: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurser: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundära färdigheter: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelser: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältar: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteklasser: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Belöningar: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Belöningsmeddelande: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Manaskillnad: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Rörelsepoäng: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Rörelseprocent: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse kastad: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonusar: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Byggda byggnader: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Förbjudna byggnader: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Stadshändelser: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Krävs: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Möjligt: @@ -2083,32 +2530,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Uppdragsmål Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Veckodag Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Dagar passerade Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältenivå Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteerfarenhet Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelsepoäng @@ -2118,7 +2571,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Döda hjälte/monster @@ -2128,87 +2582,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Primära färdigheter Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Attack Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Försvar Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelsekraft Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunskap Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurser Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Färdigheter Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelser Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältar Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteklasser Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 @@ -2216,7 +2687,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Belöningar @@ -2224,7 +2696,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till @@ -2232,90 +2705,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Besöksläge Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj läge On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text vid val Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Kan vägra Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Återställ parametrar Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Period days - + AI-generated, needs review by native speaker; delete this comment afterwards + dagar Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Återställ besökare Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Återställ belöningar Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Fönstertyp Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Händelseinformation Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Meddelande som visas när denna belöning ges Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Belöning Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältenivå Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteerfarenhet Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelsepoäng @@ -2328,166 +2818,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Överflöd Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Rörelse Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort objekt Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Primära färdigheter Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Attack Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Försvar Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelsekraft Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunskap Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurser Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Färdigheter Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelser Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonusar Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Varaktighet Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Typ Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Värde Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Kasta Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Kasta en äventyrskartbesvärjelse Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå för magiskola Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Begränsare Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Veckodag Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Dagar passerade Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjältar Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälteklasser Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Belöning %1 @@ -2495,27 +3015,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formulär Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Taverna rykten Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Nytt rykte @@ -2524,287 +3049,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarieegenskaper General - + AI-generated, needs review by native speaker; delete this comment afterwards + Allmänt Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Regionsnamn Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Regionsfärg Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarienamn Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartfil Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Importera... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Exportera... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Standard svårighetsgrad Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Förutsättningar Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Regions högerklickstext Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog/Epilog Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktiverad Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Musik Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Röst Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilog Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Övergång Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Övergångshjältar behåller Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Erfarenhet Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Primära färdigheter Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundära färdigheter Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakter All - + AI-generated, needs review by native speaker; delete this comment afterwards + Alla None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Övergångsartefakter Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Startar Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Startalternativ är Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Alternativ för startbonus Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Alternativ för hjälteövergång Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Alternativ för starthjälte Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelarposition Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Startbonusalternativ Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Övergång / starthjälte Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Redigera... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Starkast Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Genererad Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Slumpmässig No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen karta Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Öppna karta All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Alla stödda kartor (*.vmap *.h3m);;VCMI-kartor(*.vmap);;HoMM3-kartor(*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Fel Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunde inte öppna filen. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Spara karta VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI-kartor (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3-kartor (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Källscenario Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte @@ -2812,12 +3392,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Scenarieegenskaper Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Välj en bonustyp @@ -2825,55 +3407,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelse - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Byggnad Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakt Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse-rulle Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Primär färdighet - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Sekundär färdighet - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurs @@ -2883,118 +3473,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Mottagare Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelesetyp Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Antal Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Anfallsfärdighet Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Försvarsfärdighet Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelsekraft Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kunskap Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Behärskning Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurstyp Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Redigera startbonus - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Starkast - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Genererad - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Slumpmässig - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Vanlig (%1 och %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Sällsynt (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + starkaste hjälten - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + genererad hjälte - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + slumpmässig hjälte - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 besvärjelse för %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 för %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 artefakt för %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 besvärjelse-rulle för %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Primär färdighet (Attack: %1, Försvar: %2, Magi: %3, Kunskap: %4) för %5 @@ -3002,77 +3615,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidsbestämd händelse Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Händelsenamn Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Skriv meddelandetext för händelsen affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + påverkar människa affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + påverkar AI Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Första förekomstdagen Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Upprepa efter (0 = ingen upprepning) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Påverkade spelare Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurser type - + AI-generated, needs review by native speaker; delete this comment afterwards + typ qty - + AI-generated, needs review by native speaker; delete this comment afterwards + antal Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Objekt att ta bort Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Ok @@ -3080,42 +3708,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Byggnader Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Bygg alla Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Riv alla Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktivera alla Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Inaktivera alla Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Typ Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktiverad Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Byggd @@ -3123,77 +3759,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Stadshändelse General - + AI-generated, needs review by native speaker; delete this comment afterwards + Allmänt Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Händelsenamn Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Skriv meddelandetext för händelsen Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Första förekomstdagen Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Upprepa efter (0 = ingen upprepning) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Påverkade spelare affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + påverkar människa affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + påverkar AI Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Resurser Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Byggnader Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelser OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Varelsenivå %1 / Varelsenivå %1 Uppgradering Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - %2 @@ -3201,7 +3852,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - %2 @@ -3209,32 +3861,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Stadshändelser Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Tidsbestämda händelser Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Lägg till Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Dag %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Ny händelse @@ -3242,17 +3900,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelser Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassa besvärjelser Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 1 @@ -3261,7 +3922,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse som kan dyka upp i magigillet @@ -3270,27 +3932,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse som måste dyka upp i magigillet Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nivå 5 @@ -3298,43 +3965,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartöversättningar Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Språk Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Stöds String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Sträng-ID Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Text Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort översättning Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Standardspråket kan inte tas bort All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Alla befintliga textrader för detta språk kommer att tas bort. Fortsätta? @@ -3342,117 +4017,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Resultat av kartvalidering - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan är inte laddad - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Inga fraktioner tillåtna för spelare %1 - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Inga spelare tillåtna att spela denna karta - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan tillåter bara en spelare och kan inte startas - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Inga mänskliga spelare tillåtna att spela denna karta - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Objekt %1 är tilldelat en icke spelbar spelare %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse-rulle %1 har ingen instans tilldelad och måste tas bort - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Artefakt %1 är förbjuden enligt kartinställningar - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare %1 har inga tilldelade städer eller hjältar + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Fängelse %1 måste vara NEUTRAL + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Ägandebart objekt %1 är OFLAGGBART men måste ha NEUTRAL eller spelare som ägare + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte %1 måste ha en ägare - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte %1 är förbjuden enligt kartinställningar - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte %1 finns dubbelt på kartan - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Hjälte %1 saknar typ och måste tas bort - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Besvärjelse-rulle %1 är förbjuden enligt kartinställningar - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare %1 har ingen startstad - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan saknar namn - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan saknar beskrivning - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Kartan är giltig och har inga problem. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Undantag inträffade under validering: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Okänt undantag inträffade under validering @@ -3460,77 +4158,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Formulär Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Segermeddelande Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Endast för mänskliga spelare Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Tillåt standardseger Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametrar - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen speciell seger - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Erövra artefakt - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Anställa varelser - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Samla resurser - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Bygg byggnad - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Erövra stad - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Besegra hjälte - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Transportera artefakt - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Döda monster + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Valfri stad @@ -3538,67 +4251,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Skapa ny karta Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Kartstorlek Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Höjd Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Bredd XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Slumpmässig karta Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Spelare S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3606,172 +4332,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Slumpmässig Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Mänskliga lag Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Datorlag Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Standardstorlek Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassad storlek Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Underjord Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Människor Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Datorer Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Monsterstyrka Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Svag Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Normal Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Stark Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Vatteninnehåll None - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Öar Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Vägar Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Jord Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Grus Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Stenläggning Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Mall Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Anpassat frö Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Generera slumpmässig karta OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + Avbryt No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen mall No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Ingen mall för angivna parametrar. Slumpmässig karta kan inte genereras. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + RMG-fel [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [standard] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Sökväg till kartan som ska öppnas. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Extrahera originalarkiv från H3 till separat mapp. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + Från ett extraherat arkiv: Dela upp TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 och Un44 till individuella PNG-filer. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + Från ett extraherat arkiv: Konvertera enskilda bilder (i Images-mappen) från .pcx till .png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Ta bort originalfilerna för de som delades upp/konverterades. diff --git a/mapeditor/translation/turkish.ts b/mapeditor/translation/turkish.ts index 453705996..71e8d0fcc 100644 --- a/mapeditor/translation/turkish.ts +++ b/mapeditor/translation/turkish.ts @@ -6,17 +6,20 @@ Army settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Ordu ayarları Wide formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Geniş formasyon Tight formation - + AI-generated, needs review by native speaker; delete this comment afterwards + Sıkı formasyon @@ -25,22 +28,26 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekipman Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Takılacak yer: Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaydet Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + İptal @@ -49,105 +56,125 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI Kampanya Editörü File - + AI-generated, needs review by native speaker; delete this comment afterwards + Dosya Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Düzenle View - + AI-generated, needs review by native speaker; delete this comment afterwards + Görünüm Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Araç çubuğu Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaydet New - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Farklı kaydet... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya Özellikleri Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Senaryo Özellikleri Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Tam arka planı göster Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Senaryo editörü Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Onay Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaydedilmemiş değişiklikler kaybolacak, emin misiniz? Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritayı aç All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tüm desteklenen kampanyalar (*.vcmp *.h3c);;VCMI kampanyaları (*.vcmp);;HoMM3 kampanyaları (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanyayı kaydet VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI kampanyaları (*.vcmp) @@ -156,128 +183,153 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya Özellikleri General - + AI-generated, needs review by native speaker; delete this comment afterwards + Genel Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya adı Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya açıklaması Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Yazar Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Yazar iletişim (ör. e-posta) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya oluşturma tarihi Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya versiyonu Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Müzik Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Senaryo zorluğu kullanıcı tarafından seçilebilir Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Bölgeler Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Bölge ön ayarı Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Arka plan Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Sonek Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Önek Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Renkli sonek uzunluğu Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Çeşitli Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Arka plan resmi yükleniyor Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Video kenarlık resmi Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Giriş videosu Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Çıkış videosu Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Özel Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + İnfiks @@ -292,22 +344,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Etiket X konumu Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Etiket Y konumu Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Daha az senaryo New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni bölge ayarı önceye göre daha az senaryoyu destekliyor. Bazıları kaldırılacak. Devam edilsin mi? @@ -315,27 +371,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Form Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Zamanlı olaylar Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni olay @@ -343,47 +404,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Form Map name - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita adı Map description - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita açıklaması Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Yazar Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Yazar iletişim (ör. e-posta) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita oluşturulma zamanı Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita versiyonu Limit maximum heroes level - + AI-generated, needs review by native speaker; delete this comment afterwards + Maksimum kahraman seviyesi sınırı Difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Zorluk @@ -391,7 +461,8 @@ Generating map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita oluşturuluyor @@ -399,27 +470,32 @@ Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Yuvası Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekipman @@ -427,7 +503,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman yetenekleri @@ -435,32 +512,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Etiket Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Yetenek Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Yetenekleri özelleştir @@ -468,37 +551,44 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüleri özelleştir Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 5 @@ -506,783 +596,967 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Form Defeat message - + AI-generated, needs review by native speaker; delete this comment afterwards + Yenilgi mesajı 7 days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + 7 gün boyunca şehir yok Parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametreler No special loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Özel bir kayıp yok Lose castle - + AI-generated, needs review by native speaker; delete this comment afterwards + Kale kaybı Lose hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman kaybı Time expired - + AI-generated, needs review by native speaker; delete this comment afterwards + Süre doldu Days without town - + AI-generated, needs review by native speaker; delete this comment afterwards + Günlerce şehir olmadan MainWindow - + VCMI Map Editor VCMI harita düzenleyicisi File - + AI-generated, needs review by native speaker; delete this comment afterwards + Dosya Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Son açılanlar Map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita Edit - + AI-generated, needs review by native speaker; delete this comment afterwards + Düzenle View - + AI-generated, needs review by native speaker; delete this comment afterwards + Görünüm Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu Toolbar - + AI-generated, needs review by native speaker; delete this comment afterwards + Araç çubuğu Minimap - + AI-generated, needs review by native speaker; delete this comment afterwards + Mini harita Map Objects View - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita Nesne Görünümü Browser - + AI-generated, needs review by native speaker; delete this comment afterwards + Tarayıcı Inspector - + AI-generated, needs review by native speaker; delete this comment afterwards + İnceleyici Property - + AI-generated, needs review by native speaker; delete this comment afterwards + Özellik Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Değer Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Araçlar Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Boya Terrains - + AI-generated, needs review by native speaker; delete this comment afterwards + Araziler Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Yollar Rivers - + AI-generated, needs review by native speaker; delete this comment afterwards + Nehirler Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Önizleme Open - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Daha fazla... Save - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaydet Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S New - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Farklı kaydet... Ctrl+Shift+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+S Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Kampanya editörü - - + + View underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeraltını göster Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U Pass - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçiş Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P Cut - + AI-generated, needs review by native speaker; delete this comment afterwards + Kes Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X Copy - + AI-generated, needs review by native speaker; delete this comment afterwards + Kopyala Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C Paste - + AI-generated, needs review by native speaker; delete this comment afterwards + Yapıştır Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V Fill - + AI-generated, needs review by native speaker; delete this comment afterwards + Doldur Fills the selection with obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Seçimi engellerle doldurur Grid - + AI-generated, needs review by native speaker; delete this comment afterwards + Izgara Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G General - + AI-generated, needs review by native speaker; delete this comment afterwards + Genel Map title and description - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita başlığı ve açıklaması Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter Players settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu ayarları Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P Undo - + AI-generated, needs review by native speaker; delete this comment afterwards + Geri al Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z Redo - + AI-generated, needs review by native speaker; delete this comment afterwards + Yinele Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y Erase - + AI-generated, needs review by native speaker; delete this comment afterwards + Sil Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del Neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + Tarafsız Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 Validate - + AI-generated, needs review by native speaker; delete this comment afterwards + Doğrula Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance - + AI-generated, needs review by native speaker; delete this comment afterwards + Görünümü güncelle Recreate obstacles - + AI-generated, needs review by native speaker; delete this comment afterwards + Engelleri yeniden oluştur Player 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 1 Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 Player 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 2 Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 Player 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 3 Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 Player 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 4 Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 Player 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 5 Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 Player 6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 6 Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 Player 7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 7 Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 Player 8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu 8 Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 Export as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Dışa aktar... Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Çeviriler Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3m dönüştürücü Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + h3c dönüştürücü Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Kilitle Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritadaki nesneleri yanlışlıkla değişiklik yapılmasını önlemek için kilitle Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Kilidi kaldır Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Kilidi Aç Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritadaki tüm nesnelerin kilidini aç Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Yakınlaştır Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Uzaklaştır Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Yakınlaştırmayı sıfırla Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Onay - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaydedilmemiş değişiklikler kaybolacak, emin misiniz? + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Modlar gerekli + + + Failed to open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita açılamadı - + Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita aç - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tüm desteklenen haritalar (*.vmap *.h3m);;VCMI haritaları(*.vmap);;HoMM3 haritaları(*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Son açılan dosyalar - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita doğrulama - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita kritik sorunlar içeriyor ve büyük ihtimalle oynanamaz. Tespit edilen hataları görmek için Harita menüsünden Doğrulayıcıyı açın - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritada bazı hatalar var. Tespit edilen hataları görmek için Harita menüsünden Doğrulayıcıyı açın - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita kaydedilemedi - + Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritayı kaydet - + VCMI maps (*.vmap) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI haritaları (*.vmap) - + Type - - - - - Towns - - - - - Objects - - - - - Heroes - - - - - Artifacts - - - - - Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tür - Banks - + Towns + AI-generated, needs review by native speaker; delete this comment afterwards + Şehirler - Dwellings - + Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Nesneler - Grounds - + Heroes + AI-generated, needs review by native speaker; delete this comment afterwards + Kahramanlar - Teleports - + Artifacts + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynaklar - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Bankalar - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Yerleşimler - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Zeminler - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Işınlanmalar - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Madenler + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Tetikleyiciler + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Canavarlar + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Görevler + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Wog Nesneleri + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Engeller + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Diğer - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod yükleme hatası - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Modlar yüklenirken kritik bir hata oluştu. Geçersiz modları devre dışı bırakıp yeniden başlatın. - - + + View surface - + AI-generated, needs review by native speaker; delete this comment afterwards + Yüzeyi göster - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Hiçbir nesne seçilmedi - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Bu işlem geri alınamaz. Devam etmek istiyor musunuz? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Hatalar oluştu. %1 nesne güncellenemedi - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Görüntü olarak kaydet - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Dönüştürülecek haritaları seç - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 haritaları (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Dönüştürülmüş haritaların kaydedileceği dizini seçin - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + İşlem tamamlandı - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 harita başarıyla dönüştürüldü - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita dönüştürülemedi. İşlem iptal edildi - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Dönüştürülecek kampanyayı seç - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 kampanyaları (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Hedef dosyayı seç - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI kampanyaları (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + %1 kahramanı NEUTRAL olarak oluşturulamaz. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Gerekli mod eksik + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Bunu şimdi yapmak ister misiniz? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Bu nesnenin mod'u haritanın geçerli kalması için zorunludur. @@ -1290,67 +1564,80 @@ Map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita ayarları General - + AI-generated, needs review by native speaker; delete this comment afterwards + Genel Mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Modlar Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Olaylar Victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Zafer Loss - + AI-generated, needs review by native speaker; delete this comment afterwards + Yenilgi Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Zamana bağlı Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Söylentiler Abilities - + AI-generated, needs review by native speaker; delete this comment afterwards + Yetenekler Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahramanlar Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Tamam @@ -1358,7 +1645,8 @@ Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Nesne yerleştirilemiyor @@ -1366,7 +1654,8 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj @@ -1374,47 +1663,56 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Form Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Bu haritayı oynamak için gerekli modlar Mod name - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod adı Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Sürüm Automatic assignment - + AI-generated, needs review by native speaker; delete this comment afterwards + Otomatik atama Set required mods based on objects placed on the map. This method may cause problems if you have customized rewards, garrisons, etc from mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritaya yerleştirilen nesnelere göre gerekli modları ayarla. Bu yöntem, modlardan özelleştirilmiş ödüller, garnizonlar vb. varsa sorunlara neden olabilir. Map objects mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita nesnesi modları Set all mods having a game content as mandatory - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyun içeriği içeren tüm modları zorunlu olarak ayarla Full content mods - + AI-generated, needs review by native speaker; delete this comment afterwards + Tam içerikli modlar @@ -1422,27 +1720,32 @@ Human/CPU - + AI-generated, needs review by native speaker; delete this comment afterwards + İnsan/YZ CPU only - + AI-generated, needs review by native speaker; delete this comment afterwards + Sadece YZ Team - + AI-generated, needs review by native speaker; delete this comment afterwards + Takım Main town - + AI-generated, needs review by native speaker; delete this comment afterwards + Ana şehir Color - + AI-generated, needs review by native speaker; delete this comment afterwards + Renk @@ -1452,27 +1755,59 @@ Random faction - + AI-generated, needs review by native speaker; delete this comment afterwards + Rastgele fraksiyon Generate hero at main - + AI-generated, needs review by native speaker; delete this comment afterwards + Ana şehirde kahraman oluştur (default) - + AI-generated, needs review by native speaker; delete this comment afterwards + (varsayılan) No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Takım yok Player ID: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu Kimliği: %1 + + + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu Seç + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman NEUTRAL olarak oluşturulamaz + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Mevcut oyunculardan birine geçin: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Kısayol: %1 @@ -1480,12 +1815,14 @@ Player settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu ayarları Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncular @@ -1495,7 +1832,8 @@ Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Tamam @@ -1503,7 +1841,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Portre @@ -1514,96 +1853,114 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Varsayılan QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni başlayan + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Gelişmiş + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Usta - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Varsayılan ikincil yetenekler: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + İkincil yetenekler: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Uysal Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Dostça Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Agresif Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Düşmanca Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Vahşi No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Devriye yok POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + GÜÇ SIRALAMASI HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + KAHRAMAN TÜRÜ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman sınıfı Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Portre Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Yetenekler Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar @@ -1616,64 +1973,76 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Binalar Events - + AI-generated, needs review by native speaker; delete this comment afterwards + Olaylar Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynak Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekipman ödülü Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Görev Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Tanımlayıcı ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Kimlik (ID) SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + Alt Kimlik (SubID) InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + Örnek Adı IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + Statik mi neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + tarafsız Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Ordu @@ -1686,31 +2055,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Sahibi Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Şehirle aynı Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldırılabilir birimler Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Yer tutucu türü Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Güç sıralaması @@ -1718,67 +2092,78 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman türü Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Deneyim MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ERKEK FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + KADIN Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Cinsiyet Name - + AI-generated, needs review by native speaker; delete this comment afterwards + İsim Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Biyografi Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Devriye yarıçapı Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Şehir adı Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu ile aynı @@ -1791,19 +2176,22 @@ Message - + AI-generated, needs review by native speaker; delete this comment afterwards + Mesaj Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Üretkenlik @@ -1811,270 +2199,328 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Miktar Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Karakter Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Şehir seç Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Asla kaçmaz Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyümez Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödül Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Sonra kaldır Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + İnsan tetikleyicisi Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + YZ tetikleyicisi First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + İlk ziyaret metni Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Sonraki ziyaret metni Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Tamamlandığında gösterilen metin Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Görevi tekrar et Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Zaman sınırı UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + BAYRAKLANAMAZ - + Can't place object - + AI-generated, needs review by native speaker; delete this comment afterwards + Nesne yerleştirilemiyor - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritada yalnızca bir kutsal emanet (grail) nesnesi olabilir. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (%1 modunun alt modülü) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Haritadaki bir nesne tarafından '%1'%2 modu gereklidir. +Harita → Genel ayarlar kısmından gerekli modlar listesine ekleyin. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Özel Büyüler: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Varsayılan Büyüler - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Varsayılan Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Görev: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Haftanın Günü: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçen Gün: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman Seviyesi: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman Deneyimi: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mana Puanı: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mana Yüzdesi: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Birincil Yetenekler: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynaklar: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + İkincil Yetenekler: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratıklar: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahramanlar: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman Sınıfları: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncular: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödüller: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödül Mesajı: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Mana Farkı: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Hareket Puanı: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Hareket Yüzdesi: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü Kullanımı: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonuslar: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + İnşa edilmiş binalar: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Yasaklı binalar: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Şehir Olayları: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Gerekli: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Olası: @@ -2082,32 +2528,38 @@ Mission goal - + AI-generated, needs review by native speaker; delete this comment afterwards + Görev hedefi Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Haftanın günü Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçen gün sayısı Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman seviyesi Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman deneyimi Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü puanı @@ -2117,7 +2569,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman/yaratık öldür @@ -2127,87 +2580,104 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Birincil yetenekler Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Saldırı Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Savunma Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü gücü Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Bilgi Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynaklar Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Yetenekler Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratıklar Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahramanlar Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman sınıfları Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncular None - + AI-generated, needs review by native speaker; delete this comment afterwards + Yok Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Gün %1 @@ -2215,7 +2685,8 @@ Rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödüller @@ -2223,7 +2694,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle @@ -2231,90 +2703,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziyaret modu Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Seçim modu On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Seçim sırasında metin Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Reddedebilir Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametreleri sıfırla Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Süre days - + AI-generated, needs review by native speaker; delete this comment afterwards + gün Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Ziyaretçileri sıfırla Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödülleri sıfırla Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Pencere türü Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Olay bilgisi Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Bu ödül verildiğinde gösterilecek mesaj Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödül Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman seviyesi Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman deneyimi Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü puanı @@ -2327,166 +2816,196 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Taşma Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Hareket Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Nesneyi kaldır Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Birincil yetenekler Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Saldırı Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Savunma Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü gücü Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Bilgi Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynaklar Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Yetenekler Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratıklar Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonuslar Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Süre Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tür Value - + AI-generated, needs review by native speaker; delete this comment afterwards + Değer Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü yap Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Macera haritası büyüsü yap Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü okulu seviyesi Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Sınırlandırıcı Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Haftanın günü Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçen gün sayısı Heroes - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahramanlar Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman sınıfları Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncular - + None - + AI-generated, needs review by native speaker; delete this comment afterwards + Yok - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Gün %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ödül %1 @@ -2494,27 +3013,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Form Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Meyhane dedikoduları Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni dedikodu @@ -2523,287 +3047,342 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Senaryo Özellikleri General - + AI-generated, needs review by native speaker; delete this comment afterwards + Genel Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Bölge adı Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Bölge rengi Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Senaryo adı Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita dosyası Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + İçe aktar... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Dışa aktar... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Varsayılan zorluk Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Ön koşullar Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Bölge sağ tıklama metni Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog/Epilog Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Prolog Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkin Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Müzik Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Ses Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Metin Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Epilog Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçiş Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçiş yapan kahramanlar korunsun Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Deneyim Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Birincil yetenekler Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + İkincil yetenekler Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Eşyalar All - + AI-generated, needs review by native speaker; delete this comment afterwards + Tümü None - + AI-generated, needs review by native speaker; delete this comment afterwards + Hiçbiri Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Geçiş yapan eşyalar Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Başlangıç Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Başlangıç seçenekleri Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Başlangıç bonusu seçenekleri Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman aktarım seçenekleri Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Başlangıç kahramanı seçenekleri Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Bonus Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu konumu Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Başlangıç bonusu seçeneği Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Aktarım / Başlangıç kahramanı Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Düzenle... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + En güçlü Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Oluşturulmuş Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Rastgele No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita yok Player - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu Open map - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita aç All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tüm desteklenen haritalar (*.vmap *.h3m);;VCMI haritaları (*.vmap);;HoMM3 haritaları (*.h3m) Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Hata Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Dosya açılamadı. Save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Haritayı kaydet VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + VCMI haritaları (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + HoMM3 haritaları (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynak senaryo Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman @@ -2811,12 +3390,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Senaryo Özellikleri Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Bir bonus türü seçin @@ -2824,55 +3405,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratık - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Bina Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Eser Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü parşömeni Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Birincil beceri - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + İkincil beceri - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynak @@ -2882,118 +3471,141 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Alıcı Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratık türü Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Miktar Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Saldırı becerisi Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Savunma becerisi Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü gücü Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Bilgi Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Ustalık Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynak türü Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Başlangıç Bonusunu Düzenle - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + En güçlü - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Oluşturulmuş - + Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Rastgele - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaygın (%1 ve %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Nadir (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + en güçlü kahraman - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + oluşturulmuş kahraman - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + rastgele kahraman - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %2 için %1 büyüsü - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %3 için %1 %2 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %2 için %1 eseri - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %2 için %1 büyü parşömeni - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + %5 için Birincil beceri (Saldırı: %1, Savunma: %2, Büyü: %3, Bilgi: %4) @@ -3001,77 +3613,92 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Zamanlı etkinlik Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkinlik adı Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkinlik mesaj metni yazın affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + insanları etkiler affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + Yapay zekayı etkiler Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + İlk gerçekleşme günü Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekrar aralığı (0 = tekrar yok) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkilenen oyuncular Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynaklar type - + AI-generated, needs review by native speaker; delete this comment afterwards + tür qty - + AI-generated, needs review by native speaker; delete this comment afterwards + miktar Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Silinecek nesneler Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Ok - + AI-generated, needs review by native speaker; delete this comment afterwards + Tamam @@ -3079,42 +3706,50 @@ Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Binalar Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Hepsini inşa et Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Hepsini yık Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Hepsini etkinleştir Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Hepsini devre dışı bırak Type - + AI-generated, needs review by native speaker; delete this comment afterwards + Tür Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkin Built - + AI-generated, needs review by native speaker; delete this comment afterwards + İnşa edilmiş @@ -3122,77 +3757,92 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Şehir etkinliği General - + AI-generated, needs review by native speaker; delete this comment afterwards + Genel Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkinlik adı Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkinlik mesaj metni yazın Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + İlk gerçekleşme günü Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tekrar aralığı (0 = tekrar yok) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Etkilenen oyuncular affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + insanları etkiler affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + Yapay zekayı etkiler Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynaklar Buildings - + AI-generated, needs review by native speaker; delete this comment afterwards + Binalar Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratıklar OK - + AI-generated, needs review by native speaker; delete this comment afterwards + Tamam Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratık seviyesi %1 / Yaratık seviyesi %1 Yükseltme Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Gün %1 - %2 @@ -3200,7 +3850,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Gün %1 - %2 @@ -3208,32 +3859,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Şehir etkinlikleri Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Zamanlı etkinlikler Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Ekle Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldır Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Gün %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni etkinlik @@ -3241,17 +3898,20 @@ Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüler Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyüleri özelleştir Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 1 @@ -3260,7 +3920,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü loncasında çıkabilecek büyü @@ -3269,27 +3930,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü loncasında çıkması gereken büyü Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Seviye 5 @@ -3297,43 +3963,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita çevirileri Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Dil Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Destekleniyor String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Dize Kimliği Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Metin Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Çeviriyi kaldır Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Varsayılan dil kaldırılamaz All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Bu dile ait tüm mevcut metin kayıtları silinecek. Devam edilsin mi? @@ -3341,117 +4015,140 @@ Map validation results - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita doğrulama sonuçları - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita yüklenmedi - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu %1 için fraksiyon izni yok - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Bu haritayı oynayacak oyuncu yok - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita sadece bir oyuncuya izin veriyor ve başlatılamaz - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Bu haritayı oynayacak insan oyuncusu yok - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Nesne %1 oynanamaz oyuncu %2'ye atanmış - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü parşömeni %1'in atanmış örneği yok ve kaldırılmalı - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Eser %1 harita ayarları tarafından yasaklanmış - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu %1'in atanmış şehir ve kahramanı yok + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Zindan %1 tarafsız olmalı + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Sahiplenilebilir nesne %1 işaretlenemez ama tarafsız ya da oyuncuya ait olmalı + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman %1 bir sahibe sahip olmalı - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman %1 harita ayarları tarafından yasaklanmış - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman %1 haritada yinelenmiş - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Kahraman %1 türü boş ve kaldırılmalı - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Büyü parşömeni %1 harita ayarları tarafından yasaklanmış - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncu %1'in hiç başlangıç şehri yok - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita adı belirtilmemiş - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita açıklaması belirtilmemiş - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Harita geçerli ve sorunsuz. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Doğrulama sırasında istisna oluştu: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Doğrulama sırasında bilinmeyen istisna oluştu @@ -3459,77 +4156,92 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Form Victory message - + AI-generated, needs review by native speaker; delete this comment afterwards + Zafer mesajı Only for human players - + AI-generated, needs review by native speaker; delete this comment afterwards + Yalnızca insan oyuncular için Allow standard victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Standart zafere izin ver Parameters - - - - - No special victory - + AI-generated, needs review by native speaker; delete this comment afterwards + Parametreler - Capture artifact - + No special victory + AI-generated, needs review by native speaker; delete this comment afterwards + Özel zafer yok - Hire creatures - + Capture artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Eseri ele geçir - Accumulate resources - + Hire creatures + AI-generated, needs review by native speaker; delete this comment afterwards + Yaratık kirala - Construct building - + Accumulate resources + AI-generated, needs review by native speaker; delete this comment afterwards + Kaynak biriktir - Capture town - + Construct building + AI-generated, needs review by native speaker; delete this comment afterwards + Bina inşa et - Defeat hero - + Capture town + AI-generated, needs review by native speaker; delete this comment afterwards + Şehir ele geçir - Transport artifact - + Defeat hero + AI-generated, needs review by native speaker; delete this comment afterwards + Kahramanı yen - Kill monster - + Transport artifact + AI-generated, needs review by native speaker; delete this comment afterwards + Eseri taşı - + + Kill monster + AI-generated, needs review by native speaker; delete this comment afterwards + Canavarı öldür + + + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Herhangi bir şehir @@ -3537,67 +4249,80 @@ Create new map - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeni harita oluştur Map size - + AI-generated, needs review by native speaker; delete this comment afterwards + Harita boyutu Height - + AI-generated, needs review by native speaker; delete this comment afterwards + Yükseklik Width - + AI-generated, needs review by native speaker; delete this comment afterwards + Genişlik XL (144x144) - + AI-generated, needs review by native speaker; delete this comment afterwards + XL (144x144) Random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Rastgele harita Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Oyuncular S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3605,172 +4330,205 @@ Random - + AI-generated, needs review by native speaker; delete this comment afterwards + Rastgele Human teams - + AI-generated, needs review by native speaker; delete this comment afterwards + İnsan takımları Computer teams - + AI-generated, needs review by native speaker; delete this comment afterwards + Bilgisayar takımları Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Standart boyut Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Özel boyut Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Yeraltı Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + İnsanlar Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Bilgisayarlar Monster strength - + AI-generated, needs review by native speaker; delete this comment afterwards + Canavar gücü Weak - + AI-generated, needs review by native speaker; delete this comment afterwards + Zayıf Normal - + AI-generated, needs review by native speaker; delete this comment afterwards + Normal Strong - + AI-generated, needs review by native speaker; delete this comment afterwards + Güçlü Water content - + AI-generated, needs review by native speaker; delete this comment afterwards + Su içeriği None - + AI-generated, needs review by native speaker; delete this comment afterwards + Hiçbiri Islands - + AI-generated, needs review by native speaker; delete this comment afterwards + Adalar Roads - + AI-generated, needs review by native speaker; delete this comment afterwards + Yollar Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Toprak Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Çakıl Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Kaldırım taşı Template - + AI-generated, needs review by native speaker; delete this comment afterwards + Şablon Custom seed - + AI-generated, needs review by native speaker; delete this comment afterwards + Özel tohum Generate random map - + AI-generated, needs review by native speaker; delete this comment afterwards + Rastgele harita oluştur OK - + AI-generated, needs review by native speaker; delete this comment afterwards + Tamam Cancel - + AI-generated, needs review by native speaker; delete this comment afterwards + İptal No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Şablon yok No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Belirtilen parametreler için şablon yok. Rastgele harita oluşturulamaz. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + RMG hatası [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [varsayılan] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Açılacak haritanın dosya yolu. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Orijinal H3 arşivlerini ayrı bir klasöre çıkar. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + Çıkarılan arşivden, TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 ve Un44'ü ayrı PNG'lere ayırır. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + Çıkarılan arşivden, Görseller klasöründe bulunan tekli resimleri .pcx'ten png'ye dönüştürür. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Bölünmüş / dönüştürülmüş dosyaların orijinallerini sil. diff --git a/mapeditor/translation/ukrainian.ts b/mapeditor/translation/ukrainian.ts index 4870aee73..03ff88a5b 100644 --- a/mapeditor/translation/ukrainian.ts +++ b/mapeditor/translation/ukrainian.ts @@ -49,7 +49,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор кампаній VCMI @@ -100,34 +101,40 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Властивості кампанії Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Властивості сценарію Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Показати повний фон Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор сценарію Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Підтвердження Unsaved changes will be lost, are you sure? - + AI-generated, needs review by native speaker; delete this comment afterwards + Незбережені зміни буде втрачено, ви впевнені? @@ -137,17 +144,20 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Всі підтримувані кампанії (*.vcmp *.h3c);;Кампанії VCMI (*.vcmp);;Кампанії HoMM3 (*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Зберегти кампанію VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампанії VCMI (*.vcmp) @@ -156,7 +166,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Властивості кампанії @@ -166,12 +177,14 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва кампанії Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Опис кампанії @@ -181,58 +194,69 @@ Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Контакт автора (наприклад, e‑mail) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Дата створення кампанії Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Версія кампанії Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музика Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Вибір складності сценарію доступний користувачу Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Регіони Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Набір регіонів Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Фон Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Суфікс Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Префікс Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Довжина кольорового суфіксу @@ -247,37 +271,44 @@ Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Різне Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Завантаження фонового зображення Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Зображення рамки відео Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Вступне відео Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Фінальне відео Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Користувацьке Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Інфікс @@ -292,22 +323,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиція мітки X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиція мітки Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Менше сценаріїв New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Налаштування нового регіону підтримує менше сценаріїв, ніж раніше. Деякі будуть видалені. Продовжити? @@ -435,7 +470,8 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Текстова мітка @@ -553,7 +589,7 @@ MainWindow - + VCMI Map Editor Редактор мап VCMI @@ -661,7 +697,8 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O @@ -676,7 +713,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -686,7 +724,8 @@ Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N @@ -702,20 +741,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Редактор кампанії - - + + View underground Дивитись підземелля Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +766,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P @@ -735,7 +777,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +788,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +799,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +820,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +836,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter @@ -800,7 +847,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +859,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +870,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +881,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del @@ -841,7 +892,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +903,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance Оновити вигляд @@ -874,7 +927,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +938,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +949,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +960,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +971,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +982,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +993,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1004,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,7 +1015,8 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E @@ -964,325 +1026,413 @@ Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + конвертер h3m Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + конвертер h3c Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Заблокувати Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Заблокувати об’єкти на карті, щоб уникнути небажаних змін Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Розблокувати Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Розблокувати всі об’єкти на карті Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Збільшити Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Зменшити Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Скидання масштабу Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation - + AI-generated, needs review by native speaker; delete this comment afterwards + Підтвердження - + Unsaved changes will be lost, are you sure? - - - - - Mods are required - + AI-generated, needs review by native speaker; delete this comment afterwards + Незбережені зміни буде втрачено, ви впевнені? - Failed to open map - + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Необхідні моди - + + Failed to open map + AI-generated, needs review by native speaker; delete this comment afterwards + Не вдалося відкрити карту + + + Open map Відкрити мапу - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Всі підтримувані мапи (*.vmap *.h3m);;Мапи VCMI (*.vmap);;Мапи HoMM3 (*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Останні файли - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Валідація карти - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + На карті знайдено критичні помилки і, ймовірно, вона не буде придатна для гри. Відкрийте Валідатор у меню Карта, щоб побачити знайдені проблеми - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + На карті знайдено деякі помилки. Відкрийте Валідатор у меню Карта, щоб побачити знайдені проблеми - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Не вдалося зберегти карту - + Save map Зберегти мапу - + VCMI maps (*.vmap) Мапи VCMI - + Type Тип - + Towns - + AI-generated, needs review by native speaker; delete this comment afterwards + Міста - + Objects - + AI-generated, needs review by native speaker; delete this comment afterwards + Об’єкти - + Heroes Герої - + Artifacts Артефакти - - - Resources - - - - - Banks - - - - - Dwellings - - - - - Grounds - - - - - Teleports - - - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Банки - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Житла - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Місцевості - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Телепорти - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Шахти + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Тригери + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Монстри + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Квести + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Wog‑об’єкти + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Перешкоди + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Інше - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Проблема з завантаженням модів - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Критична помилка під час завантаження модів. Вимкніть невірні моди та перезапустіть. - - + + View surface Дивитись поверхню - + No objects selected - + AI-generated, needs review by native speaker; delete this comment afterwards + Об’єкти не вибрані - + This operation is irreversible. Do you want to continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Ця операція незворотна. Продовжити? - + Errors occurred. %1 objects were not updated - + AI-generated, needs review by native speaker; delete this comment afterwards + Сталися помилки. %1 об’єкт(ів) не було оновлено - + Save to image - + AI-generated, needs review by native speaker; delete this comment afterwards + Зберегти як зображення - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Виберіть карти для конвертації - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Карти HoMM3 (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Виберіть каталог для збереження конвертованих карт - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Операція завершена - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Успішно конвертовано %1 карту(и) - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Не вдалося конвертувати карту. Аварійне завершення операції - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Виберіть кампанію для конвертації - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампанії HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Виберіть файл призначення - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Кампанії VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 не може бути створений як НЕЙТРАЛЬНИЙ. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Відсутній необхідний мод + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Бажаєте зробити це зараз? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Мод цього об’єкта обов’язковий для того, щоб карта залишалася дійсною. @@ -1379,7 +1529,8 @@ Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Обов’язкові моди для гри на цій карті @@ -1467,7 +1618,8 @@ No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Без команди @@ -1475,6 +1627,33 @@ Гравець %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Виберіть гравця + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Герой не може бути створений як НЕЙТРАЛЬНИЙ + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Переключитися на одного з доступних гравців: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Комбінація: %1 + + PlayerSettings @@ -1503,7 +1682,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Портрет @@ -1514,86 +1694,102 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + За замовчуванням QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Новачок + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Просунутий + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Експерт - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Початкові вторинні навички: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторинні навички: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Сумісний Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Дружній Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Агресивний Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Ворожий Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Жорстокий No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Без патрулювання POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + РАНГ СИЛИ HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + ТИП ГЕРОЯ Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Клас героя Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Портрет @@ -1609,10 +1805,11 @@ %n tile(s) + AI-generated, needs review by native speaker; delete this comment afterwards - - - + %n клітинка + %n клітинки + %n клітинок @@ -1628,54 +1825,64 @@ Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурс Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Нагорода — артефакт Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Квест Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Ідентифікатор ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + InstanceName IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + IsStatic neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + нейтральний Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Армія @@ -1688,31 +1895,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Власник Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Як у міста Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Видаляємі юніти Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип-заповнювач Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Ранг сили @@ -1720,43 +1932,50 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип героя Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвід MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ЧОЛОВІК FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + ЖІНКА Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Стать Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Ім'я Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Біографія @@ -1768,19 +1987,22 @@ Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Радіус патруля Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва міста Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Як у гравця @@ -1799,13 +2021,15 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Продуктивність @@ -1813,270 +2037,327 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Кількість Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Персонаж Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Вибрати місто Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Ніколи не тікає Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Не розмножується Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Нагорода Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Видалити після Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Тригер гравця Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Тригер ІІ First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при першому візиті Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при наступному візиті Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при виконанні Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Повторюваний квест Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Обмеження за часом UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + НЕПРАПОРОПОСТАВНИЙ - + Can't place object Неможливо розмістити об'єкт - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + На карті може бути лише один Грааль. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (субмод моду %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Мод '%1'%2 є обов'язковим для об'єкта на карті. +Додайте його до списку обов'язкових модів у Карта → Загальні налаштування. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Користувацькі закляття: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття за замовчуванням - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Типово Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Квест: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + День тижня: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Минуло днів: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Рівень героя: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвід героя: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Очки мани: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Відсоток мани: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Основні навички: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторинні навички: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Істоти: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Герої: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Класи героїв: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравці: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Нагороди: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Повідомлення про нагороду: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Різниця мани: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Очки руху: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Відсоток руху: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття застосовано: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонуси: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Побудовані будівлі: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Заборонені будівлі: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Події міста: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Необхідні: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Можливі: @@ -2089,27 +2370,32 @@ Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + День тижня Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Минуло днів Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Рівень героя Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвід героя Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Очки заклять @@ -2119,7 +2405,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Вбити героя/монстра @@ -2129,32 +2416,38 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Основні навички Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Атака Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Захист Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Сила заклять Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Знання Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси @@ -2209,7 +2502,8 @@ Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + День %1 @@ -2238,85 +2532,101 @@ Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Режим візиту Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Режим вибору On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст при виборі Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Можна відмовитися Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Скинути параметри Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Період days - + AI-generated, needs review by native speaker; delete this comment afterwards + днів Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Скинути відвідувачів Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Скинути нагороди Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип вікна Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Інформація про подію Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Повідомлення, яке буде показано при наданні цієї нагороди Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Нагорода Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Рівень героя Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвід героя Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Очки заклять @@ -2329,53 +2639,62 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Переповнення Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Переміщення Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Видалити об'єкт Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Основні навички Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Атака Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Захист Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Сила заклять Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Знання Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси @@ -2404,13 +2723,15 @@ Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонуси Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Тривалість @@ -2427,37 +2748,44 @@ Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Застосувати Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Застосувати закляття пригодницької карти Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Рівень школи магії Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Обмежувач Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + День тижня Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Минуло днів @@ -2472,23 +2800,26 @@ Players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравці - + None Відсутня - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + День %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Нагорода %1 @@ -2496,12 +2827,14 @@ Form - Form + AI-generated, needs review by native speaker; delete this comment afterwards + Форма Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Чутки в таверні @@ -2516,7 +2849,8 @@ New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Нова чутка @@ -2525,7 +2859,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Властивості сценарію @@ -2535,32 +2870,38 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва регіону Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Колір регіону Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва сценарію Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Файл карти Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Імпортувати... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Експортувати... @@ -2571,87 +2912,103 @@ Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Складність за замовчуванням Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Передумови Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст правої кнопки миші по регіону Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пролог / Епілог Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Пролог Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Увімкнено Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Відео Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Музика Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Голос Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Епілог Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Перенесення Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Зберігати при перенесенні героя: Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Досвід Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Основні навички Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторинні навички @@ -2666,84 +3023,100 @@ All - + AI-generated, needs review by native speaker; delete this comment afterwards + Усі None - + AI-generated, needs review by native speaker; delete this comment afterwards + Жодні Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакти при перенесенні Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Початкові Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Початкові параметри: Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Початкові бонуси Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Опції перенесення героя Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Опції початкового героя Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Бонус Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Позиція гравця Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Опція початкового бонусу Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Перенесений / Початковий герой Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Додати... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Редагувати... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Найсильніший Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Згенерований @@ -2753,7 +3126,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Немає карти @@ -2774,13 +3148,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Помилка Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Не вдалося відкрити файл. @@ -2790,22 +3166,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Карти VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Карти HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Початковий сценарій Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой @@ -2813,12 +3193,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Властивості сценарію Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Виберіть тип бонусу @@ -2826,21 +3208,24 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Істота - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Будівля @@ -2853,28 +3238,32 @@ Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Сувій закляття Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Основна навичка - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Вторинна навичка - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурс @@ -2884,118 +3273,140 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Одержувач Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип істоти Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Кількість Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Навичка атаки Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Навичка захисту Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Сила заклять Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Знання Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Майстерність Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Тип ресурсу Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Редагування початкового бонусу - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Найсильніший - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Згенерований - + Random Випадково - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Поширені (%1 та %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Рідкісні (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + найсильніший герой - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + згенерований герой - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + випадковий герой - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 закляття для %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 для %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 артефакт для %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 сувій закляття для %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Основна навичка (Атака: %1, Захист: %2, Магія: %3, Знання: %4) для %5 @@ -3003,62 +3414,74 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Подія за часом Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва події Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Введіть текст повідомлення події affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + впливає на гравця affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + впливає на ІІ Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + День першого спрацьовування Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Повторювати через (0 = не повторювати) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравці, на яких впливає Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси type - + AI-generated, needs review by native speaker; delete this comment afterwards + тип qty - + AI-generated, needs review by native speaker; delete this comment afterwards + кільк. Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Об'єкти для видалення @@ -3086,22 +3509,26 @@ Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Побудувати все Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Знести все Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Увімкнути все Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Вимкнути все @@ -3111,12 +3538,14 @@ Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Увімкнено Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Побудовано @@ -3124,7 +3553,8 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Подія міста @@ -3134,42 +3564,50 @@ Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва події Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Введіть текст повідомлення події Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + День першого спрацьовування Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Повторювати через (0 = не повторювати) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравці, на яких впливає affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + впливає на гравця affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + впливає на ІІ Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Ресурси @@ -3184,17 +3622,20 @@ OK - + AI-generated, needs review by native speaker; delete this comment afterwards + Гаразд Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Рівень істоти %1 / Покращення рівня істоти %1 Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + День %1 - %2 @@ -3202,7 +3643,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + День %1 - %2 @@ -3210,7 +3652,8 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Події міста @@ -3230,7 +3673,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + День %1 - %2 @@ -3262,7 +3706,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття, яке може з’явитися у гільдії магів @@ -3271,7 +3716,8 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Закляття, яке обов’язково має бути у гільдії магів @@ -3299,43 +3745,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Переклади карти Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Мова Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Підтримується String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + Ідентифікатор рядка Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Текст Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Видалити переклад Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Мову за замовчуванням не можна видалити All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Усі наявні текстові записи для цієї мови буде видалено. Продовжити? @@ -3346,114 +3800,136 @@ Результати валідації карти - + Map is not loaded - + AI-generated, needs review by native speaker; delete this comment afterwards + Карту не завантажено - + No factions allowed for player %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравцю %1 не дозволено жодної фракції - + No players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Жодному гравцю не дозволено грати на цій карті - + Map is allowed for one player and cannot be started - + AI-generated, needs review by native speaker; delete this comment afterwards + Карта дозволена лише для одного гравця і не може бути запущена - + No human players allowed to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Жодному людському гравцю не дозволено грати на цій карті - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - - - - + Object %1 is assigned to non-playable player %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Об'єкт %1 призначено недоступному для гри гравцю %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Сувій закляття %1 не має призначеного екземпляру й має бути видалений - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Артефакт %1 заборонено у налаштуваннях карти - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравець %1 не має міст і героїв + + + + Prison %1 must be a NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Тюрма %1 має бути НЕЙТРАЛЬНОЮ + + + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Придатний до володіння об'єкт %1 є НЕПРАПОРОПОСТАВНИМ, але має мати НЕЙТРАЛЬНОГО або ігрового власника + + + + Hero %1 must have an owner + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 має мати власника - Prison %1 must be a NEUTRAL - - - - - Hero %1 must have an owner - - - - Hero %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Героя %1 заборонено у налаштуваннях карти - + Hero %1 has duplicate on map - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 дублюється на карті - + Hero %1 has an empty type and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Герой %1 має порожній тип і має бути видалений - + Spell scroll %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Сувій закляття %1 заборонено у налаштуваннях карти - + Player %1 doesn't have any starting town - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравець %1 не має жодного стартового міста - + Map name is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Назва карти не вказана - + Map description is not specified - + AI-generated, needs review by native speaker; delete this comment afterwards + Опис карти не вказаний - - Map contains object from mod "%1", but doesn't require it - + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Карта дійсна і не має проблем. - + Exception occurs during validation: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Під час перевірки сталася помилка: %1 - + Unknown exception occurs during validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Невідома помилка під час перевірки @@ -3461,7 +3937,8 @@ Form - Form + AI-generated, needs review by native speaker; delete this comment afterwards + Форма @@ -3484,54 +3961,56 @@ Параметри - + No special victory Немає особливої перемоги - + Capture artifact Отримати артефакт - + Hire creatures Найняти істот - + Accumulate resources Накопичити ресурси - + Construct building Побудувати будівлю - + Capture town Захопити місто - + Defeat hero Перемогти героя - + Transport artifact Доставити артефакт - + Kill monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Вбити монстра - + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Будь-яке місто @@ -3574,32 +4053,38 @@ S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3622,27 +4107,32 @@ Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Стандартний розмір Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Користувацький розмір Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Підземелля Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Люди Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Комп'ютери @@ -3688,17 +4178,20 @@ Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Ґрунт Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Гравій Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Бруківка @@ -3719,7 +4212,8 @@ OK - + AI-generated, needs review by native speaker; delete this comment afterwards + Гаразд @@ -3729,50 +4223,59 @@ No template - + AI-generated, needs review by native speaker; delete this comment afterwards + Шаблон відсутній No template for parameters specified. Random map cannot be generated. - + AI-generated, needs review by native speaker; delete this comment afterwards + Немає шаблону для вказаних параметрів. Неможливо згенерувати випадкову карту. RMG failure - + AI-generated, needs review by native speaker; delete this comment afterwards + Помилка генерації випадкової карти [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [типово] main - + Filepath of the map to open. - - - - - Extract original H3 archives into a separate folder. - + AI-generated, needs review by native speaker; delete this comment afterwards + Шлях до файлу карти, яку слід відкрити. - From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. - + Extract original H3 archives into a separate folder. + AI-generated, needs review by native speaker; delete this comment afterwards + Розпакувати оригінальні архіви H3 у окрему папку. - From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. + AI-generated, needs review by native speaker; delete this comment afterwards + З розпакованого архіву розділяє TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 та Un44 на окремі PNG'шки. + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. + AI-generated, needs review by native speaker; delete this comment afterwards + З розпакованого архіву конвертує окремі зображення (з папки Images) з .pcx у .png. + + + Delete original files, for the ones split / converted. - + AI-generated, needs review by native speaker; delete this comment afterwards + Видалити оригінальні файли для тих, які були розділені або конвертовані. diff --git a/mapeditor/translation/vietnamese.ts b/mapeditor/translation/vietnamese.ts index 87a0ba690..6c052d42b 100644 --- a/mapeditor/translation/vietnamese.ts +++ b/mapeditor/translation/vietnamese.ts @@ -25,12 +25,14 @@ Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Di vật Equip where: - + AI-generated, needs review by native speaker; delete this comment afterwards + Trang bị ở đâu: @@ -49,7 +51,8 @@ VCMI Campaign Editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Trình chỉnh sửa chiến dịch VCMI @@ -89,7 +92,8 @@ Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lưu thành... @@ -100,24 +104,28 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Thuộc tính chiến dịch Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Thuộc tính kịch bản Show full background - + AI-generated, needs review by native speaker; delete this comment afterwards + Hiển thị toàn bộ nền Scenario editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Trình chỉnh sửa kịch bản @@ -137,17 +145,20 @@ All supported campaigns (*.vcmp *.h3c);;VCMI campaigns(*.vcmp);;HoMM3 campaigns(*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Tất cả chiến dịch được hỗ trợ (*.vcmp *.h3c);;Chiến dịch VCMI(*.vcmp);;Chiến dịch HoMM3(*.h3c) Save campaign - + AI-generated, needs review by native speaker; delete this comment afterwards + Lưu chiến dịch VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Chiến dịch VCMI (*.vcmp) @@ -156,7 +167,8 @@ Campaign Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Thuộc tính chiến dịch @@ -166,118 +178,141 @@ Campaign name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên chiến dịch Campaign description - + AI-generated, needs review by native speaker; delete this comment afterwards + Mô tả chiến dịch Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Tác giả Author contact (e.g. e-mail) - + AI-generated, needs review by native speaker; delete this comment afterwards + Liên hệ tác giả (ví dụ: email) Campaign creation date - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày tạo chiến dịch Campaign version - + AI-generated, needs review by native speaker; delete this comment afterwards + Phiên bản chiến dịch Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhạc nền Scenario difficulty is user selectable - + AI-generated, needs review by native speaker; delete this comment afterwards + Người chơi có thể chọn độ khó kịch bản Regions - + AI-generated, needs review by native speaker; delete this comment afterwards + Khu vực Regions Preset - + AI-generated, needs review by native speaker; delete this comment afterwards + Thiết lập sẵn khu vực Background - + AI-generated, needs review by native speaker; delete this comment afterwards + Hình nền Suffix - + AI-generated, needs review by native speaker; delete this comment afterwards + Hậu tố Prefix - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiền tố Color suffix length - + AI-generated, needs review by native speaker; delete this comment afterwards + Độ dài hậu tố màu Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá Misc - + AI-generated, needs review by native speaker; delete this comment afterwards + Khác Loading background image - + AI-generated, needs review by native speaker; delete this comment afterwards + Đang tải hình nền Video rim image - + AI-generated, needs review by native speaker; delete this comment afterwards + Hình viền video Intro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video mở đầu Outro video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video kết thúc Custom - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chỉnh Infix - + AI-generated, needs review by native speaker; delete this comment afterwards + Chèn giữa @@ -292,22 +327,26 @@ Label Pos X - + AI-generated, needs review by native speaker; delete this comment afterwards + Vị trí nhãn X Label Pos Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Vị trí nhãn Y Fewer Scenarios - + AI-generated, needs review by native speaker; delete this comment afterwards + Ít kịch bản hơn New Region setup supports fewer scenarios than before. Some will removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Thiết lập khu vực mới hỗ trợ ít kịch bản hơn trước. Một số sẽ bị xoá. Tiếp tục? @@ -315,27 +354,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Biểu mẫu Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện theo thời gian Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện mới @@ -343,7 +387,8 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Biểu mẫu @@ -358,22 +403,26 @@ Author - + AI-generated, needs review by native speaker; delete this comment afterwards + Tác giả Author contact (e.g. email) - + AI-generated, needs review by native speaker; delete this comment afterwards + Liên hệ tác giả (ví dụ: email) Map Creation Time - + AI-generated, needs review by native speaker; delete this comment afterwards + Thời gian tạo bản đồ Map Version - + AI-generated, needs review by native speaker; delete this comment afterwards + Phiên bản bản đồ @@ -404,22 +453,26 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá Slot - + AI-generated, needs review by native speaker; delete this comment afterwards + Ô Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Di vật @@ -427,7 +480,8 @@ Hero skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng anh hùng @@ -435,32 +489,38 @@ TextLabel - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhãn văn bản Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá Skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng Level - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp độ Customize skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuỳ chỉnh kỹ năng @@ -473,32 +533,38 @@ Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuỳ chỉnh phép thuật Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 1 Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 5 @@ -506,7 +572,8 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Biểu mẫu @@ -553,7 +620,7 @@ MainWindow - + VCMI Map Editor Bộ tạo bản đồ VCMI @@ -640,7 +707,8 @@ Ctrl+O - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+O @@ -650,7 +718,8 @@ Ctrl+S - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+S @@ -660,38 +729,45 @@ Tools - + AI-generated, needs review by native speaker; delete this comment afterwards + Công cụ Open Recent - + AI-generated, needs review by native speaker; delete this comment afterwards + Mở gần đây Painting - + AI-generated, needs review by native speaker; delete this comment afterwards + Vẽ Preview - + AI-generated, needs review by native speaker; delete this comment afterwards + Xem trước More... - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm... Ctrl+N - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+N Save as... - + AI-generated, needs review by native speaker; delete this comment afterwards + Lưu thành... @@ -702,20 +778,22 @@ Campaign editor - + AI-generated, needs review by native speaker; delete this comment afterwards + Trình chỉnh sửa chiến dịch - - + + View underground Xem hang ngầm Ctrl+U - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+U @@ -725,7 +803,8 @@ Ctrl+Shift+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+P @@ -735,7 +814,8 @@ Ctrl+X - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+X @@ -745,7 +825,8 @@ Ctrl+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+C @@ -755,7 +836,8 @@ Ctrl+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+V @@ -775,7 +857,8 @@ Ctrl+G - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+G @@ -790,7 +873,8 @@ Ctrl+Enter - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Enter @@ -800,7 +884,8 @@ Ctrl+P - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+P @@ -811,7 +896,8 @@ Ctrl+Z - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Z @@ -821,7 +907,8 @@ Ctrl+Y - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Y @@ -831,7 +918,8 @@ Del - + AI-generated, needs review by native speaker; delete this comment afterwards + Del @@ -841,7 +929,8 @@ Ctrl+0 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+0 @@ -851,13 +940,14 @@ Ctrl+Shift+V - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+V - - - + + + Update appearance Cập nhật hiện thị @@ -874,7 +964,8 @@ Ctrl+1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+1 @@ -884,7 +975,8 @@ Ctrl+2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+2 @@ -894,7 +986,8 @@ Ctrl+3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+3 @@ -904,7 +997,8 @@ Ctrl+4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+4 @@ -914,7 +1008,8 @@ Ctrl+5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+5 @@ -924,7 +1019,8 @@ Ctrl+6 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+6 @@ -934,7 +1030,8 @@ Ctrl+7 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+7 @@ -944,7 +1041,8 @@ Ctrl+8 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+8 @@ -954,335 +1052,419 @@ Ctrl+E - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+E Translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản dịch Ctrl+T - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+T h3m converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Trình chuyển đổi h3m Ctrl+Shift+M - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+M h3c converter - + AI-generated, needs review by native speaker; delete this comment afterwards + Trình chuyển đổi h3c Ctrl+Shift+C - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+C Lock - + AI-generated, needs review by native speaker; delete this comment afterwards + Khoá Lock objects on map to avoid unnecessary changes - + AI-generated, needs review by native speaker; delete this comment afterwards + Khoá đối tượng trên bản đồ để tránh thay đổi không mong muốn Ctrl+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+L Unlock - + AI-generated, needs review by native speaker; delete this comment afterwards + Mở khoá Unlock all objects on the map - + AI-generated, needs review by native speaker; delete this comment afterwards + Mở khoá tất cả đối tượng trên bản đồ Ctrl+Shift+L - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+L Zoom in - + AI-generated, needs review by native speaker; delete this comment afterwards + Phóng to Ctrl++ - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl++ Zoom out - + AI-generated, needs review by native speaker; delete this comment afterwards + Thu nhỏ Ctrl+- - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+- Zoom reset - + AI-generated, needs review by native speaker; delete this comment afterwards + Đặt lại thu phóng Ctrl+Shift+= - + AI-generated, needs review by native speaker; delete this comment afterwards + Ctrl+Shift+= - + Confirmation Xác nhận - + Unsaved changes will be lost, are you sure? Thay đổi chưa lưu sẽ bị mất, bạn có chắc chắn? - - - Mods are required - - - Failed to open map - + Mods are required + AI-generated, needs review by native speaker; delete this comment afterwards + Cần có các mod - + + Failed to open map + AI-generated, needs review by native speaker; delete this comment afterwards + Không mở được bản đồ + + + Open map Mở bản đồ - + All supported maps (*.vmap *.h3m);;VCMI maps(*.vmap);;HoMM3 maps(*.h3m) Tất cả bản đồ hỗ trợ (*.vmap *.h3m);;Bản đồ VCMI (*.vmap);;Bản đồ HoMM3 (*.h3m) - + Recently Opened Files - + AI-generated, needs review by native speaker; delete this comment afterwards + Tệp đã mở gần đây - + Map validation - + AI-generated, needs review by native speaker; delete this comment afterwards + Xác minh bản đồ - + Map has critical problems and most probably will not be playable. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản đồ có lỗi nghiêm trọng và rất có thể sẽ không thể chơi được. Mở Trình xác minh từ menu Bản đồ để xem lỗi. - + Map has some errors. Open Validator from the Map menu to see issues found - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản đồ có một số lỗi. Mở Trình xác minh từ menu Bản đồ để xem lỗi. - + Failed to save map - + AI-generated, needs review by native speaker; delete this comment afterwards + Lưu bản đồ thất bại - + Save map Lưu bản đồ - + VCMI maps (*.vmap) Bản đồ VCMI (*.vmap) - + Type Loại - + Towns - + AI-generated, needs review by native speaker; delete this comment afterwards + Thành phố - + Objects - + AI-generated, needs review by native speaker; delete this comment afterwards + Đối tượng - + Heroes Tướng - + Artifacts Vật phẩm - - - Resources - - - - - Banks - - - - - Dwellings - - - - - Grounds - - - - - Teleports - - - Mines - + Resources + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên - Triggers - + Banks + AI-generated, needs review by native speaker; delete this comment afterwards + Ngân hàng - Monsters - + Dwellings + AI-generated, needs review by native speaker; delete this comment afterwards + Nơi cư trú - Quests - + Grounds + AI-generated, needs review by native speaker; delete this comment afterwards + Địa hình - Wog Objects - + Teleports + AI-generated, needs review by native speaker; delete this comment afterwards + Dịch chuyển - Obstacles - + Mines + AI-generated, needs review by native speaker; delete this comment afterwards + Mỏ + Triggers + AI-generated, needs review by native speaker; delete this comment afterwards + Kích hoạt + + + + Monsters + AI-generated, needs review by native speaker; delete this comment afterwards + Quái vật + + + + Quests + AI-generated, needs review by native speaker; delete this comment afterwards + Nhiệm vụ + + + + Wog Objects + AI-generated, needs review by native speaker; delete this comment afterwards + Đối tượng WoG + + + + Obstacles + AI-generated, needs review by native speaker; delete this comment afterwards + Chướng ngại vật + + + Other - + AI-generated, needs review by native speaker; delete this comment afterwards + Khác - + Mods loading problem - + AI-generated, needs review by native speaker; delete this comment afterwards + Lỗi tải mod - + Critical error during Mods loading. Disable invalid mods and restart. - + AI-generated, needs review by native speaker; delete this comment afterwards + Lỗi nghiêm trọng khi tải mod. Vô hiệu hóa các mod không hợp lệ và khởi động lại. - - + + View surface Xem bề mặt - + No objects selected Không mục tiêu được chọn - + This operation is irreversible. Do you want to continue? Thao tác này không thể đảo ngược. Bạn muốn tiếp tục? - + Errors occurred. %1 objects were not updated Xảy ra lỗi. %1 mục tiêu không được cập nhật - + Save to image Lưu thành ảnh - + Select maps to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn bản đồ để chuyển đổi - + HoMM3 maps(*.h3m) - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản đồ HoMM3 (*.h3m) - + Choose directory to save converted maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn thư mục để lưu bản đồ đã chuyển đổi - + Operation completed - + AI-generated, needs review by native speaker; delete this comment afterwards + Hoàn tất thao tác - + Successfully converted %1 maps - + AI-generated, needs review by native speaker; delete this comment afterwards + Đã chuyển đổi thành công %1 bản đồ - + Failed to convert the map. Abort operation - + AI-generated, needs review by native speaker; delete this comment afterwards + Không thể chuyển đổi bản đồ. Huỷ thao tác - + Select campaign to convert - + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn chiến dịch để chuyển đổi - + HoMM3 campaigns (*.h3c) - + AI-generated, needs review by native speaker; delete this comment afterwards + Chiến dịch HoMM3 (*.h3c) - + Select destination file - + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn tệp đích - + VCMI campaigns (*.vcmp) - + AI-generated, needs review by native speaker; delete this comment afterwards + Chiến dịch VCMI (*.vcmp) + + + + MapController + + + Hero %1 cannot be created as NEUTRAL. + AI-generated, needs review by native speaker; delete this comment afterwards + Không thể tạo anh hùng %1 là TRUNG LẬP. + + + + Missing Required Mod + AI-generated, needs review by native speaker; delete this comment afterwards + Thiếu mod cần thiết + + + + + +Do you want to do that now ? +AI-generated, needs review by native speaker; delete this comment afterwards + + + +Bạn có muốn làm điều đó ngay bây giờ không? + + + + This object's mod is mandatory for map to remain valid. + AI-generated, needs review by native speaker; delete this comment afterwards + Mod của đối tượng này là bắt buộc để bản đồ hợp lệ. @@ -1320,12 +1502,14 @@ Timed - + AI-generated, needs review by native speaker; delete this comment afterwards + Theo thời gian Rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Tin đồn @@ -1374,12 +1558,14 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Biểu mẫu Mandatory mods to play this map - + AI-generated, needs review by native speaker; delete this comment afterwards + Mod bắt buộc để chơi bản đồ này @@ -1467,7 +1653,8 @@ No team - + AI-generated, needs review by native speaker; delete this comment afterwards + Không đội @@ -1475,6 +1662,33 @@ ID người chơi: %1 + + PlayerSelectionDialog + + + Select Player + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn người chơi + + + + Hero cannot be created as NEUTRAL + AI-generated, needs review by native speaker; delete this comment afterwards + Không thể tạo anh hùng là TRUNG LẬP + + + + Switch to one of the available players: + AI-generated, needs review by native speaker; delete this comment afterwards + Chuyển sang một trong những người chơi khả dụng: + + + + Shortcut: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Phím tắt: %1 + + PlayerSettings @@ -1503,7 +1717,8 @@ Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Chân dung @@ -1514,91 +1729,108 @@ Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Mặc định QObject - - - Beginner - - - - - Advanced - - + Beginner + AI-generated, needs review by native speaker; delete this comment afterwards + Người mới + + + + Advanced + AI-generated, needs review by native speaker; delete this comment afterwards + Trình độ + + + Expert - + AI-generated, needs review by native speaker; delete this comment afterwards + Chuyên gia - + Default secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng phụ mặc định: - + Secondary skills: - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng phụ: Compliant - + AI-generated, needs review by native speaker; delete this comment afterwards + Tuân thủ Friendly - + AI-generated, needs review by native speaker; delete this comment afterwards + Thân thiện Aggressive - + AI-generated, needs review by native speaker; delete this comment afterwards + Hung hãn Hostile - + AI-generated, needs review by native speaker; delete this comment afterwards + Thù địch Savage - + AI-generated, needs review by native speaker; delete this comment afterwards + Tàn bạo No patrol - + AI-generated, needs review by native speaker; delete this comment afterwards + Không tuần tra POWER RANK - + AI-generated, needs review by native speaker; delete this comment afterwards + XẾP HẠNG SỨC MẠNH HERO TYPE - + AI-generated, needs review by native speaker; delete this comment afterwards + LOẠI ANH HÙNG Hero class - + AI-generated, needs review by native speaker; delete this comment afterwards + Lớp anh hùng Portrait - + AI-generated, needs review by native speaker; delete this comment afterwards + Chân dung Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng @@ -1626,54 +1858,64 @@ Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên Artifact reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Phần thưởng di vật Quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhiệm vụ Identifier - + AI-generated, needs review by native speaker; delete this comment afterwards + Định danh ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID SubID - + AI-generated, needs review by native speaker; delete this comment afterwards + SubID InstanceName - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên thể hiện IsStatic - + AI-generated, needs review by native speaker; delete this comment afterwards + Tĩnh neutral - + AI-generated, needs review by native speaker; delete this comment afterwards + trung lập Army - + AI-generated, needs review by native speaker; delete this comment afterwards + Quân đội @@ -1686,31 +1928,36 @@ Owner - + AI-generated, needs review by native speaker; delete this comment afterwards + Chủ sở hữu Same as town - + AI-generated, needs review by native speaker; delete this comment afterwards + Giống như thành phố Removable units - + AI-generated, needs review by native speaker; delete this comment afterwards + Đơn vị có thể gỡ bỏ Placeholder type - + AI-generated, needs review by native speaker; delete this comment afterwards + Loại trình giữ chỗ Power rank - + AI-generated, needs review by native speaker; delete this comment afterwards + Xếp hạng sức mạnh @@ -1718,43 +1965,50 @@ Hero type - + AI-generated, needs review by native speaker; delete this comment afterwards + Loại anh hùng Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kinh nghiệm MALE - + AI-generated, needs review by native speaker; delete this comment afterwards + NAM FEMALE - + AI-generated, needs review by native speaker; delete this comment afterwards + NỮ Gender - + AI-generated, needs review by native speaker; delete this comment afterwards + Giới tính Name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên Biography - + AI-generated, needs review by native speaker; delete this comment afterwards + Tiểu sử @@ -1766,19 +2020,22 @@ Patrol radius - + AI-generated, needs review by native speaker; delete this comment afterwards + Bán kính tuần tra Town name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên thành phố Same as player - + AI-generated, needs review by native speaker; delete this comment afterwards + Giống như người chơi @@ -1797,13 +2054,15 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép thuật Productivity - + AI-generated, needs review by native speaker; delete this comment afterwards + Năng suất @@ -1811,270 +2070,327 @@ Amount - + AI-generated, needs review by native speaker; delete this comment afterwards + Số lượng Character - + AI-generated, needs review by native speaker; delete this comment afterwards + Ký tự Select town - + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn thành phố Never flees - + AI-generated, needs review by native speaker; delete this comment afterwards + Không bao giờ bỏ chạy Not growing - + AI-generated, needs review by native speaker; delete this comment afterwards + Không tăng trưởng Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Phần thưởng Remove after - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá sau Human trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Kích hoạt bởi người chơi Cpu trigger - + AI-generated, needs review by native speaker; delete this comment afterwards + Kích hoạt bởi AI First visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản lần ghé đầu tiên Next visit text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản lần ghé tiếp theo Completed text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản hoàn thành Repeat quest - + AI-generated, needs review by native speaker; delete this comment afterwards + Lặp lại nhiệm vụ Time limit - + AI-generated, needs review by native speaker; delete this comment afterwards + Giới hạn thời gian UNFLAGGABLE - + AI-generated, needs review by native speaker; delete this comment afterwards + KHÔNG GẮN CỜ - + Can't place object Không thể đặt vật thể - + There can only be one grail object on the map. - + AI-generated, needs review by native speaker; delete this comment afterwards + Chỉ có thể có một vật phẩm chén thánh trên bản đồ. - - Hero %1 cannot be created as NEUTRAL. - + + (submod of %1) + AI-generated, needs review by native speaker; delete this comment afterwards + (mod con của %1) - - + + The mod '%1'%2, is required by an object on the map. +Add it to the map's required mods in Map->General settings. + should be consistent with Map->General menu entry translation + AI-generated, needs review by native speaker; delete this comment afterwards + Mod '%1'%2 là bắt buộc bởi một đối tượng trên bản đồ. +Thêm nó vào danh sách mod yêu cầu trong Bản đồ → Thiết lập chung. + + + + Custom Spells: - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép thuật tùy chỉnh: - - + + Default Spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép thuật mặc định - + Default - + AI-generated, needs review by native speaker; delete this comment afterwards + Mặc định Quest: - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhiệm vụ: Day of Week: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày trong tuần: %1 Days Passed: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Số ngày trôi qua: %1 - + Hero Level: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp độ anh hùng: %1 - + Hero Experience: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kinh nghiệm anh hùng: %1 Mana Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Điểm năng lượng: %1 - + Mana Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Tỷ lệ năng lượng: %1 - + Primary Skills: %1/%2/%3/%4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng chính: %1/%2/%3/%4 - + Resources: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên: %1 - + Artifacts: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Di vật: %1 - + Spells: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép thuật: %1 - + Secondary Skills: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng phụ: %1 - + Creatures: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Sinh vật: %1 Heroes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Anh hùng: %1 Hero Classes: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Lớp anh hùng: %1 Players: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Người chơi: %1 - + Rewards: - + AI-generated, needs review by native speaker; delete this comment afterwards + Phần thưởng: - + Reward Message: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Tin nhắn phần thưởng: %1 - + Mana Diff: %1 - - - - - Move Points: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Khác biệt mana: %1 + Move Points: %1 + AI-generated, needs review by native speaker; delete this comment afterwards + Điểm di chuyển: %1 + + + Move Percentage: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Tỷ lệ di chuyển: %1 - + Spell Cast: %1 (%2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép đã sử dụng: %1 (%2) - + Bonuses: %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Thưởng: %1 Built buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Các công trình đã xây: Forbidden buildings: - + AI-generated, needs review by native speaker; delete this comment afterwards + Các công trình bị cấm: Town Events: - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện thành phố: - + Required: - + AI-generated, needs review by native speaker; delete this comment afterwards + Yêu cầu: - + Possible: - + AI-generated, needs review by native speaker; delete this comment afterwards + Có thể: @@ -2087,27 +2403,32 @@ Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày trong tuần Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Số ngày đã qua Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp độ anh hùng Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kinh nghiệm anh hùng Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Điểm phép thuật @@ -2117,7 +2438,8 @@ Kill hero/monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Giết anh hùng/quái vật @@ -2127,32 +2449,38 @@ Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng chính Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Tấn công Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Phòng thủ Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Sức mạnh phép thuật Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kiến thức Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên @@ -2167,22 +2495,26 @@ Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Sinh vật Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá @@ -2192,7 +2524,8 @@ Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Lớp anh hùng @@ -2207,7 +2540,8 @@ Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày %1 @@ -2223,7 +2557,8 @@ Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm @@ -2231,90 +2566,107 @@ Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá Visit mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Chế độ ghé thăm Select mode - + AI-generated, needs review by native speaker; delete this comment afterwards + Chế độ chọn On select text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản khi chọn Can refuse - + AI-generated, needs review by native speaker; delete this comment afterwards + Có thể từ chối Reset parameters - + AI-generated, needs review by native speaker; delete this comment afterwards + Đặt lại thông số Period - + AI-generated, needs review by native speaker; delete this comment afterwards + Chu kỳ days - + AI-generated, needs review by native speaker; delete this comment afterwards + ngày Reset visitors - + AI-generated, needs review by native speaker; delete this comment afterwards + Đặt lại người ghé thăm Reset rewards - + AI-generated, needs review by native speaker; delete this comment afterwards + Đặt lại phần thưởng Window type - + AI-generated, needs review by native speaker; delete this comment afterwards + Loại cửa sổ Event info - + AI-generated, needs review by native speaker; delete this comment afterwards + Thông tin sự kiện Message to be displayed on granting of this reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Thông điệp hiển thị khi nhận phần thưởng này Reward - + AI-generated, needs review by native speaker; delete this comment afterwards + Phần thưởng Hero level - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp độ anh hùng Hero experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kinh nghiệm anh hùng Spell points - + AI-generated, needs review by native speaker; delete this comment afterwards + Điểm phép thuật @@ -2327,53 +2679,62 @@ Overflow - + AI-generated, needs review by native speaker; delete this comment afterwards + Tràn số Movement - + AI-generated, needs review by native speaker; delete this comment afterwards + Di chuyển Remove object - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá đối tượng Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng chính Attack - + AI-generated, needs review by native speaker; delete this comment afterwards + Tấn công Defence - + AI-generated, needs review by native speaker; delete this comment afterwards + Phòng thủ Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Sức mạnh phép thuật Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kiến thức Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên @@ -2391,24 +2752,28 @@ Skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Sinh vật Bonuses - + AI-generated, needs review by native speaker; delete this comment afterwards + Thưởng Duration - + AI-generated, needs review by native speaker; delete this comment afterwards + Thời lượng @@ -2425,37 +2790,44 @@ Cast - + AI-generated, needs review by native speaker; delete this comment afterwards + Thi triển Cast an adventure map spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Thi triển phép trên bản đồ phiêu lưu Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép thuật Magic school level - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp trường phép Limiter - + AI-generated, needs review by native speaker; delete this comment afterwards + Bộ giới hạn Day of week - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày trong tuần Days passed - + AI-generated, needs review by native speaker; delete this comment afterwards + Số ngày đã qua @@ -2465,7 +2837,8 @@ Hero classes - + AI-generated, needs review by native speaker; delete this comment afterwards + Lớp anh hùng @@ -2473,20 +2846,22 @@ Người chơi - + None Không - + Day %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày %1 - - + + Reward %1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Phần thưởng %1 @@ -2494,27 +2869,32 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Biểu mẫu Tavern rumors - + AI-generated, needs review by native speaker; delete this comment afterwards + Tin đồn trong quán rượu Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá New rumor - + AI-generated, needs review by native speaker; delete this comment afterwards + Tin đồn mới @@ -2523,7 +2903,8 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Thuộc tính kịch bản @@ -2533,123 +2914,146 @@ Region name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên khu vực Region color - + AI-generated, needs review by native speaker; delete this comment afterwards + Màu khu vực Scenario name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên kịch bản Map file - + AI-generated, needs review by native speaker; delete this comment afterwards + Tệp bản đồ Import... - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhập... Export... - + AI-generated, needs review by native speaker; delete this comment afterwards + Xuất... Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá Default difficulty - + AI-generated, needs review by native speaker; delete this comment afterwards + Độ khó mặc định Prerequisites - + AI-generated, needs review by native speaker; delete this comment afterwards + Yêu cầu trước Region right-click text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản khi nhấp chuột phải khu vực Prologue/Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Mở đầu/Kết thúc Prologue - + AI-generated, needs review by native speaker; delete this comment afterwards + Mở đầu Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Đã bật Video - + AI-generated, needs review by native speaker; delete this comment afterwards + Video Music - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhạc Voice - + AI-generated, needs review by native speaker; delete this comment afterwards + Giọng nói Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản Epilogue - + AI-generated, needs review by native speaker; delete this comment afterwards + Kết thúc Crossover - + AI-generated, needs review by native speaker; delete this comment afterwards + Chuyển tiếp Crossover heroes retain - + AI-generated, needs review by native speaker; delete this comment afterwards + Giữ lại anh hùng chuyển tiếp Experience - + AI-generated, needs review by native speaker; delete this comment afterwards + Kinh nghiệm Primary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng chính Secondary skills - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng phụ @@ -2664,7 +3068,8 @@ All - + AI-generated, needs review by native speaker; delete this comment afterwards + Tất cả @@ -2674,74 +3079,88 @@ Crossover artifacts - + AI-generated, needs review by native speaker; delete this comment afterwards + Di vật chuyển tiếp Starting - + AI-generated, needs review by native speaker; delete this comment afterwards + Khởi đầu Starting options are - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chọn khởi đầu là Starting bonus options - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chọn phần thưởng khởi đầu Hero crossover options - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chọn anh hùng chuyển tiếp Starting hero options - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chọn anh hùng khởi đầu Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Phần thưởng Player position - + AI-generated, needs review by native speaker; delete this comment afterwards + Vị trí người chơi Starting bonus option - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chọn phần thưởng khởi đầu Crossover/ Starting hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Anh hùng khởi đầu/Chuyển tiếp Add... - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm... Edit... - + AI-generated, needs review by native speaker; delete this comment afterwards + Chỉnh sửa... Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Mạnh nhất Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Tạo ngẫu nhiên @@ -2751,7 +3170,8 @@ No map - + AI-generated, needs review by native speaker; delete this comment afterwards + Không có bản đồ @@ -2772,13 +3192,15 @@ Error - + AI-generated, needs review by native speaker; delete this comment afterwards + Lỗi Could not open the file. - + AI-generated, needs review by native speaker; delete this comment afterwards + Không thể mở tệp. @@ -2788,22 +3210,26 @@ VCMI maps (*.vmap); - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản đồ VCMI (*.vmap); HoMM3 maps (*.h3m); - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản đồ HoMM3 (*.h3m); Source scenario - + AI-generated, needs review by native speaker; delete this comment afterwards + Kịch bản nguồn Hero - + AI-generated, needs review by native speaker; delete this comment afterwards + Anh hùng @@ -2811,12 +3237,14 @@ Scenario Properties - + AI-generated, needs review by native speaker; delete this comment afterwards + Thuộc tính kịch bản Select a bonus type - + AI-generated, needs review by native speaker; delete this comment afterwards + Chọn loại phần thưởng @@ -2824,55 +3252,63 @@ Spell - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép thuật Creature - + AI-generated, needs review by native speaker; delete this comment afterwards + Sinh vật - + Building - + AI-generated, needs review by native speaker; delete this comment afterwards + Công trình Artifact - + AI-generated, needs review by native speaker; delete this comment afterwards + Di vật Spell scroll - + AI-generated, needs review by native speaker; delete this comment afterwards + Cuộn phép Primary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng chính - + Secondary skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng phụ - + Resource - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên @@ -2882,118 +3318,140 @@ Recipient - + AI-generated, needs review by native speaker; delete this comment afterwards + Người nhận Creature type - + AI-generated, needs review by native speaker; delete this comment afterwards + Loại sinh vật Quantity - + AI-generated, needs review by native speaker; delete this comment afterwards + Số lượng Attack skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng tấn công Defense skill - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng phòng thủ Spell power - + AI-generated, needs review by native speaker; delete this comment afterwards + Sức mạnh phép thuật Knowledge - + AI-generated, needs review by native speaker; delete this comment afterwards + Kiến thức Mastery - + AI-generated, needs review by native speaker; delete this comment afterwards + Thành thạo Resource type - + AI-generated, needs review by native speaker; delete this comment afterwards + Loại tài nguyên Edit Starting Bonus - + AI-generated, needs review by native speaker; delete this comment afterwards + Chỉnh sửa phần thưởng khởi đầu - + Strongest - + AI-generated, needs review by native speaker; delete this comment afterwards + Mạnh nhất - + Generated - + AI-generated, needs review by native speaker; delete this comment afterwards + Tạo ngẫu nhiên - + Random Ngẫu nhiên - + Common (%1 and %2) - + AI-generated, needs review by native speaker; delete this comment afterwards + Phổ biến (%1 và %2) - + Rare (%1, %2, %3, %4) - + AI-generated, needs review by native speaker; delete this comment afterwards + Hiếm (%1, %2, %3, %4) - + strongest hero - + AI-generated, needs review by native speaker; delete this comment afterwards + anh hùng mạnh nhất - + generated hero - + AI-generated, needs review by native speaker; delete this comment afterwards + anh hùng được tạo - + random hero - + AI-generated, needs review by native speaker; delete this comment afterwards + anh hùng ngẫu nhiên - + %1 spell for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + phép %1 cho %2 - + %1 %2 for %3 - + AI-generated, needs review by native speaker; delete this comment afterwards + %1 %2 cho %3 - + %1 artifact for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + di vật %1 cho %2 - + %1 spell scroll for %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + cuộn phép %1 cho %2 - + Primary skill (Attack: %1, Defense: %2, Spell: %3, Knowledge: %4) for %5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Kỹ năng chính (Tấn công: %1, Phòng thủ: %2, Phép: %3, Kiến thức: %4) cho %5 @@ -3001,72 +3459,86 @@ Timed event - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện theo thời gian Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên sự kiện Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhập nội dung thông báo sự kiện affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + ảnh hưởng đến người chơi affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + ảnh hưởng đến AI Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày xuất hiện đầu tiên Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Lặp lại sau (0 = không lặp lại) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Người chơi bị ảnh hưởng Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên type - + AI-generated, needs review by native speaker; delete this comment afterwards + loại qty - + AI-generated, needs review by native speaker; delete this comment afterwards + số lượng Objects to delete - + AI-generated, needs review by native speaker; delete this comment afterwards + Đối tượng cần xoá Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá @@ -3084,22 +3556,26 @@ Build all - + AI-generated, needs review by native speaker; delete this comment afterwards + Xây tất cả Demolish all - + AI-generated, needs review by native speaker; delete this comment afterwards + Phá huỷ tất cả Enable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Bật tất cả Disable all - + AI-generated, needs review by native speaker; delete this comment afterwards + Tắt tất cả @@ -3109,12 +3585,14 @@ Enabled - + AI-generated, needs review by native speaker; delete this comment afterwards + Đã bật Built - + AI-generated, needs review by native speaker; delete this comment afterwards + Đã xây @@ -3122,7 +3600,8 @@ Town event - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện thành phố @@ -3132,42 +3611,50 @@ Event name - + AI-generated, needs review by native speaker; delete this comment afterwards + Tên sự kiện Type event message text - + AI-generated, needs review by native speaker; delete this comment afterwards + Nhập nội dung thông báo sự kiện Day of first occurrence - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày xuất hiện đầu tiên Repeat after (0 = no repeat) - + AI-generated, needs review by native speaker; delete this comment afterwards + Lặp lại sau (0 = không lặp lại) Affected players - + AI-generated, needs review by native speaker; delete this comment afterwards + Người chơi bị ảnh hưởng affects human - + AI-generated, needs review by native speaker; delete this comment afterwards + ảnh hưởng đến người chơi affects AI - + AI-generated, needs review by native speaker; delete this comment afterwards + ảnh hưởng đến AI Resources - + AI-generated, needs review by native speaker; delete this comment afterwards + Tài nguyên @@ -3177,22 +3664,26 @@ Creatures - + AI-generated, needs review by native speaker; delete this comment afterwards + Sinh vật OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK Creature level %1 / Creature level %1 Upgrade - + AI-generated, needs review by native speaker; delete this comment afterwards + Sinh vật cấp %1 / Sinh vật cấp %1 nâng cấp Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày %1 - %2 @@ -3200,7 +3691,8 @@ Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày %1 - %2 @@ -3208,32 +3700,38 @@ Town events - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện thành phố Timed events - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện theo thời gian Add - + AI-generated, needs review by native speaker; delete this comment afterwards + Thêm Remove - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá Day %1 - %2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngày %1 - %2 New event - + AI-generated, needs review by native speaker; delete this comment afterwards + Sự kiện mới @@ -3246,12 +3744,14 @@ Customize spells - + AI-generated, needs review by native speaker; delete this comment afterwards + Tùy chỉnh phép thuật Level 1 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 1 @@ -3260,7 +3760,8 @@ Spell that may appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép có thể xuất hiện trong hội pháp sư @@ -3269,27 +3770,32 @@ Spell that must appear in mage guild - + AI-generated, needs review by native speaker; delete this comment afterwards + Phép phải xuất hiện trong hội pháp sư Level 2 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 2 Level 3 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 3 Level 4 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 4 Level 5 - + AI-generated, needs review by native speaker; delete this comment afterwards + Cấp 5 @@ -3297,43 +3803,51 @@ Map translations - + AI-generated, needs review by native speaker; delete this comment afterwards + Bản dịch bản đồ Language - + AI-generated, needs review by native speaker; delete this comment afterwards + Ngôn ngữ Supported - + AI-generated, needs review by native speaker; delete this comment afterwards + Được hỗ trợ String ID - + AI-generated, needs review by native speaker; delete this comment afterwards + ID chuỗi Text - + AI-generated, needs review by native speaker; delete this comment afterwards + Văn bản Remove translation - + AI-generated, needs review by native speaker; delete this comment afterwards + Xoá bản dịch Default language cannot be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Không thể xoá ngôn ngữ mặc định All existing text records for this language will be removed. Continue? - + AI-generated, needs review by native speaker; delete this comment afterwards + Tất cả văn bản hiện có cho ngôn ngữ này sẽ bị xoá. Tiếp tục? @@ -3344,112 +3858,117 @@ Kết quả kiểm định bản đồ - + Map is not loaded Bản đồ không thể tải - + No factions allowed for player %1 Không có tộc được phép cho người chơi %1 - + No players allowed to play this map Không có người chơi được phép chơi bản đồ này - + Map is allowed for one player and cannot be started Bản đồ cho phép 1 người chơi nhưng không thể bắt đầu - + No human players allowed to play this map Không có người nào được phép chơi bản đồ này - - Armored instance %1 is UNFLAGGABLE but must have NEUTRAL or player owner - Thực thể %1 không gắn cờ nhưng phải có quái trung lập hoặc người chơi sở hữu - - - + Object %1 is assigned to non-playable player %2 Vật thể %1 được gán cho người không thể chơi %2 - + Spell scroll %1 doesn't have instance assigned and must be removed - + AI-generated, needs review by native speaker; delete this comment afterwards + Cuộn phép %1 không có phiên bản cụ thể và phải bị xoá - + Artifact %1 is prohibited by map settings - + AI-generated, needs review by native speaker; delete this comment afterwards + Di vật %1 bị cấm bởi cài đặt bản đồ - + Player %1 has no towns and heroes assigned - + AI-generated, needs review by native speaker; delete this comment afterwards + Người chơi %1 không có thành phố và anh hùng được chỉ định - + Prison %1 must be a NEUTRAL Nhà giam %1 phải trung lập - + + Ownable object %1 is UNFLAGGABLE but must have NEUTRAL or player owner + AI-generated, needs review by native speaker; delete this comment afterwards + Đối tượng có thể sở hữu %1 là KHÔNG GẮN CỜ nhưng phải có chủ sở hữu là TRUNG LẬP hoặc người chơi + + + Hero %1 must have an owner Tướng %1 phải có chủ - + Hero %1 is prohibited by map settings Tướng %1 bị cấm bởi bản đồ - + Hero %1 has duplicate on map Tướng %1 bị trùng trên bản đồ - + Hero %1 has an empty type and must be removed Tướng %1 có kiểu rỗng và phải được xóa - + Spell scroll %1 is prohibited by map settings Cuộn phép %1 bị cấm bởi bản đồ - + Player %1 doesn't have any starting town Người chơi %1 không có thành khởi đầu nào - + Map name is not specified Tên bản đồ không có - + Map description is not specified Mô tả bản đồ không có - - Map contains object from mod "%1", but doesn't require it - Bản đồ chứa đối tượng từ bản mở rộng "%1", nhưng bản mở rộng đó không được yêu cầu + + The map is valid and has no issues. + AI-generated, needs review by native speaker; delete this comment afterwards + Bản đồ hợp lệ và không có vấn đề nào. - + Exception occurs during validation: %1 Ngoại lệ xuất hiện trong quá trình phê chuẩn: %1 - + Unknown exception occurs during validation Ngoại lệ chưa biết xuất hiện trong quá trình phê chuẩn: %1 @@ -3459,7 +3978,8 @@ Form - + AI-generated, needs review by native speaker; delete this comment afterwards + Biểu mẫu @@ -3482,54 +4002,56 @@ Tham số - + No special victory Không có chiến thắng đặc biệt - + Capture artifact Đoạt vật phẩm - + Hire creatures Thuê quái - + Accumulate resources Cộng dồn tài nguyên - + Construct building Xây công trình - + Capture town Đoạt thành - + Defeat hero Đánh bại tướng - + Transport artifact Vận chuyển vật phẩm - + Kill monster - + AI-generated, needs review by native speaker; delete this comment afterwards + Giết quái vật - + Any town - + AI-generated, needs review by native speaker; delete this comment afterwards + Bất kỳ thành phố nào @@ -3572,32 +4094,38 @@ S (36x36) - + AI-generated, needs review by native speaker; delete this comment afterwards + S (36x36) M (72x72) - + AI-generated, needs review by native speaker; delete this comment afterwards + M (72x72) L (108x108) - + AI-generated, needs review by native speaker; delete this comment afterwards + L (108x108) H (180x180) - + AI-generated, needs review by native speaker; delete this comment afterwards + H (180x180) XH (216x216) - + AI-generated, needs review by native speaker; delete this comment afterwards + XH (216x216) G (252x252) - + AI-generated, needs review by native speaker; delete this comment afterwards + G (252x252) @@ -3620,27 +4148,32 @@ Standard size - + AI-generated, needs review by native speaker; delete this comment afterwards + Kích thước tiêu chuẩn Custom size - + AI-generated, needs review by native speaker; delete this comment afterwards + Kích thước tùy chỉnh Underground - + AI-generated, needs review by native speaker; delete this comment afterwards + Tầng hầm Humans - + AI-generated, needs review by native speaker; delete this comment afterwards + Người chơi Computers - + AI-generated, needs review by native speaker; delete this comment afterwards + Máy tính @@ -3686,17 +4219,20 @@ Dirt - + AI-generated, needs review by native speaker; delete this comment afterwards + Đất bùn Gravel - + AI-generated, needs review by native speaker; delete this comment afterwards + Sỏi Cobblestone - + AI-generated, needs review by native speaker; delete this comment afterwards + Đá lát @@ -3717,7 +4253,8 @@ OK - + AI-generated, needs review by native speaker; delete this comment afterwards + OK @@ -3742,33 +4279,34 @@ [default] - + AI-generated, needs review by native speaker; delete this comment afterwards + [mặc định] main - + Filepath of the map to open. Đường dẫn bản đồ - + Extract original H3 archives into a separate folder. Giải nén dữ liệu H3 gốc vào 1 thư mục riêng. - + From an extracted archive, it Splits TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 and Un44 into individual PNG's. Từ dữ liệu giải nén, chia TwCrPort, CPRSMALL, FlagPort, ITPA, ITPt, Un32 và Un44 thành những hình PNG riêng lẻ. - + From an extracted archive, Converts single Images (found in Images folder) from .pcx to png. Từ dữ liệu giải nén, chuyển đổi các hình đơn (được tìm thấy trong thư mục Images) từ .pcx sang .png. - + Delete original files, for the ones split / converted. Xóa các tập tin gốc đã được phân chia / chuyển đổi. diff --git a/mapeditor/windownewmap.cpp b/mapeditor/windownewmap.cpp index 44cda87c6..22c6683f2 100644 --- a/mapeditor/windownewmap.cpp +++ b/mapeditor/windownewmap.cpp @@ -275,6 +275,8 @@ void WindowNewMap::on_okButton_clicked() saveUserSettings(); std::unique_ptr nmap; + auto & mapController = static_cast(parent())->controller; + if(ui->randomMapCheck->isChecked()) { //verify map template @@ -290,7 +292,7 @@ void WindowNewMap::on_okButton_clicked() if(ui->checkSeed->isChecked() && ui->lineSeed->value() != 0) seed = ui->lineSeed->value(); - CMapGenerator generator(mapGenOptions, nullptr, seed); + CMapGenerator generator(mapGenOptions, mapController.getCallback(), seed); auto progressBarWnd = new GeneratorProgress(generator, this); progressBarWnd->show(); @@ -312,8 +314,8 @@ void WindowNewMap::on_okButton_clicked() } nmap->mods = MapController::modAssessmentMap(*nmap); - static_cast(parent())->controller.setMap(std::move(nmap)); - static_cast(parent())->initializeMap(true); + mapController.setMap(std::move(nmap)); + static_cast(parent())->initializeMap(true); close(); } @@ -512,4 +514,4 @@ void WindowNewMap::on_sizeCustomRadio_toggled(bool checked) ui->sizeGroup2->setEnabled(true); } updateTemplateList(); -} \ No newline at end of file +} diff --git a/scripting/lua/api/BonusSystem.cpp b/scripting/lua/api/BonusSystem.cpp index 0822e41bc..2a998646c 100644 --- a/scripting/lua/api/BonusSystem.cpp +++ b/scripting/lua/api/BonusSystem.cpp @@ -187,7 +187,6 @@ static void publishMap(lua_State * L, const std::map> & map) void BonusProxy::adjustStaticTable(lua_State * L) const { - publishMap(L, bonusNameMap); publishMap(L, bonusValueMap); publishMap(L, bonusSourceMap); publishMap(L, bonusDurationMap); diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index c8f600859..a515b4ff2 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -654,6 +654,19 @@ void CGameHandler::onNewTurn() addStatistics(*statistics); // write at end of turn } + const auto & currentDaySelector = [day = gameState().day+1](const Bonus * bonus) + { + if (bonus->additionalInfo[0] <= 0) + return true; + if ((day % bonus->additionalInfo[0]) == 0) + return true; + return false; + }; + + const auto & fullMapScoutingSelector = Selector::type()(BonusType::FULL_MAP_SCOUTING).And(currentDaySelector); + const auto & fullMapDarknessSelector = Selector::type()(BonusType::FULL_MAP_DARKNESS).And(currentDaySelector); + const auto & darknessSelector = Selector::type()(BonusType::DARKNESS).And(currentDaySelector); + for (const auto & townID : gameState().getMap().getAllTowns()) { const auto * t = gameState().getTown(townID); @@ -661,25 +674,27 @@ void CGameHandler::onNewTurn() // Skyship, probably easier to handle same as Veil of darkness // do it every new day before veils - if(t->hasBuilt(BuildingID::GRAIL) - && player.isValidPlayer() - && t->getTown()->buildings.at(BuildingID::GRAIL)->height == CBuilding::HEIGHT_SKYSHIP) - { - changeFogOfWar(t->getSightCenter(), t->getSightRadius(), player, ETileVisibility::REVEALED); - } + if(t->hasBonus(fullMapScoutingSelector) && player.isValidPlayer()) + changeFogOfWar(t->getSightCenter(), GameConstants::FULL_MAP_RANGE, player, ETileVisibility::REVEALED); } - for (const auto & townID : gameState().getMap().getAllTowns()) + for (const auto & object : gameState().getMap().getObjects()) { - const auto * t = gameState().getTown(townID); - if(t->hasBonusOfType(BonusType::DARKNESS)) + if(!object->hasBonus(darknessSelector) && !object->hasBonus(fullMapDarknessSelector)) + continue; + + for(const auto & player : gameState().players) { - for(const auto & player : gameState().players) - { - if (gameInfo().getPlayerStatus(player.first) == EPlayerStatus::INGAME && - gameInfo().getPlayerRelations(player.first, t->tempOwner) == PlayerRelations::ENEMIES) - changeFogOfWar(t->getSightCenter(), t->valOfBonuses(BonusType::DARKNESS), player.first, ETileVisibility::HIDDEN); - } + if (gameInfo().getPlayerStatus(player.first) != EPlayerStatus::INGAME) + continue; + + if (gameInfo().getPlayerRelations(player.first, object->getOwner()) != PlayerRelations::ENEMIES) + continue; + + if (object->hasBonus(fullMapDarknessSelector)) + changeFogOfWar(object->getSightCenter(), GameConstants::FULL_MAP_RANGE, player.first, ETileVisibility::HIDDEN); + else + changeFogOfWar(object->getSightCenter(), object->valOfBonuses(darknessSelector), player.first, ETileVisibility::HIDDEN); } } @@ -2533,33 +2548,6 @@ void CGameHandler::moveArmy(const CArmedInstance *src, const CArmedInstance *dst } } -bool CGameHandler::swapGarrisonOnSiege(ObjectInstanceID tid) -{ - const CGTownInstance * town = gameInfo().getTown(tid); - - if(!town->getGarrisonHero() == !town->getVisitingHero()) - return false; - - SetHeroesInTown intown; - intown.tid = tid; - - if(town->getGarrisonHero()) //garrison -> vising - { - intown.garrison = ObjectInstanceID(); - intown.visiting = town->getGarrisonHero()->id; - } - else //visiting -> garrison - { - if(town->armedGarrison()) - town->mergeGarrisonOnSiege(*this); - - intown.visiting = ObjectInstanceID(); - intown.garrison = town->getVisitingHero()->id; - } - sendAndApply(intown); - return true; -} - bool CGameHandler::garrisonSwap(ObjectInstanceID tid) { const CGTownInstance * town = gameInfo().getTown(tid); @@ -3239,11 +3227,10 @@ bool CGameHandler::transformInUndead(const IMarket *market, const CGHeroInstance //resulting creature - bone dragons or skeletons CreatureID resCreature = CreatureID::SKELETON; - if ((s.hasBonusOfType(BonusType::DRAGON_NATURE) - && !(s.hasBonusOfType(BonusType::UNDEAD))) - || (s.getCreatureID() == CreatureID::HYDRA) - || (s.getCreatureID() == CreatureID::CHAOS_HYDRA)) - resCreature = CreatureID::BONE_DRAGON; + auto customTargerBonus = s.getBonusesOfType(BonusType::SKELETON_TRANSFORMER_TARGET); + if (!customTargerBonus->empty()) + resCreature = customTargerBonus->front()->subtype.as(); + changeStackType(StackLocation(army->id, slot), resCreature.toCreature()); return true; } @@ -4146,7 +4133,6 @@ void CGameHandler::changeFogOfWar(const std::unordered_set &tiles, PlayerC if (mode == ETileVisibility::HIDDEN) { // do not hide tiles observed by owned objects. May lead to disastrous AI problems - // FIXME: this leads to a bug - shroud of darkness from Necropolis does can not override Skyship from Tower std::unordered_set observedTiles; const auto * p = gameInfo().getPlayerState(player); for (const auto * obj : p->getOwnedObjects()) diff --git a/server/CGameHandler.h b/server/CGameHandler.h index 3b01d0b71..318c65a06 100644 --- a/server/CGameHandler.h +++ b/server/CGameHandler.h @@ -224,7 +224,6 @@ public: //void lootArtifacts (TArtHolder source, TArtHolder dest, std::vector &arts); //after battle - move al arts to winer bool buySecSkill( const IMarket *m, const CGHeroInstance *h, SecondarySkill skill); bool garrisonSwap(ObjectInstanceID tid); - bool swapGarrisonOnSiege(ObjectInstanceID tid) override; bool upgradeCreature( ObjectInstanceID objid, SlotID pos, CreatureID upgID ); bool recruitCreatures(ObjectInstanceID objid, ObjectInstanceID dst, CreatureID crid, int32_t cram, int32_t level, PlayerColor player); bool buildStructure(ObjectInstanceID tid, BuildingID bid, bool force=false);//force - for events: no cost, no checkings diff --git a/server/CVCMIServer.cpp b/server/CVCMIServer.cpp index d51aa955c..802b5007b 100644 --- a/server/CVCMIServer.cpp +++ b/server/CVCMIServer.cpp @@ -832,12 +832,16 @@ void CVCMIServer::setCampaignBonus(int bonusId) campaignBonus = bonusId; const CampaignScenario & scenario = si->campState->scenario(campaignMap); - const std::vector & bonDescs = scenario.travelOptions.bonusesToChoose; - if(bonDescs[bonusId].type == CampaignBonusType::HERO || bonDescs[bonusId].type == CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO) + const CampaignBonus & bonus = scenario.travelOptions.bonusesToChoose.at(bonusId); + if(bonus.getType() == CampaignBonusType::HERO || bonus.getType() == CampaignBonusType::HEROES_FROM_PREVIOUS_SCENARIO) { + PlayerColor startingPlayer = bonus.getType() == CampaignBonusType::HERO ? + bonus.getValue().startingPlayer : + bonus.getValue().startingPlayer; + for(auto & elem : si->playerInfos) { - if(elem.first == PlayerColor(bonDescs[bonusId].info1)) + if(elem.first == startingPlayer) setPlayerConnectedId(elem.second, 1); else setPlayerConnectedId(elem.second, PlayerSettings::PLAYER_AI); diff --git a/server/battles/BattleActionProcessor.cpp b/server/battles/BattleActionProcessor.cpp index 763e3adea..8aff0418c 100644 --- a/server/battles/BattleActionProcessor.cpp +++ b/server/battles/BattleActionProcessor.cpp @@ -1341,7 +1341,7 @@ void BattleActionProcessor::handleAfterAttackCasting(const CBattleInfoCallback & if(!defender->alive()) return; - if(attacker->hasBonusOfType(BonusType::TRANSMUTATION) && defender->isLiving()) //transmutation mechanics, similar to WoG werewolf ability + if(attacker->hasBonusOfType(BonusType::TRANSMUTATION) && defender->isLiving() && !defender->hasBonusOfType(BonusType::TRANSMUTATION_IMMUNITY)) //transmutation mechanics, similar to WoG werewolf ability { int chanceToTrigger = attacker->valOfBonuses(BonusType::TRANSMUTATION); if (!gameHandler->randomizer->rollCombatAbility(ownerArmy, chanceToTrigger)) diff --git a/server/battles/BattleActionProcessor.h b/server/battles/BattleActionProcessor.h index 2d4a8c80b..b819da051 100644 --- a/server/battles/BattleActionProcessor.h +++ b/server/battles/BattleActionProcessor.h @@ -19,7 +19,7 @@ class CBattleInfoCallback; class BattleHex; class CStack; class PlayerColor; -enum class BonusType : uint8_t; +enum class BonusType : uint16_t; namespace battle { diff --git a/server/battles/BattleFlowProcessor.cpp b/server/battles/BattleFlowProcessor.cpp index 237690175..cdd36f660 100644 --- a/server/battles/BattleFlowProcessor.cpp +++ b/server/battles/BattleFlowProcessor.cpp @@ -279,7 +279,7 @@ const CStack * BattleFlowProcessor::getNextStack(const CBattleInfoCallback & bat BattleTriggerEffect bte; bte.battleID = battle.getBattle()->getBattleID(); bte.stackID = stack->unitId(); - bte.effect = vstd::to_underlying(BonusType::HP_REGENERATION); + bte.effect = BonusType::HP_REGENERATION; const int32_t lostHealth = stack->getMaxHealth() - stack->getFirstHPleft(); if(stack->hasBonusOfType(BonusType::HP_REGENERATION)) @@ -529,7 +529,7 @@ bool BattleFlowProcessor::rollGoodMorale(const CBattleInfoCallback & battle, con BattleTriggerEffect bte; bte.battleID = battle.getBattle()->getBattleID(); bte.stackID = next->unitId(); - bte.effect = vstd::to_underlying(BonusType::MORALE); + bte.effect = BonusType::MORALE; bte.val = 1; bte.additionalInfo = 0; gameHandler->sendAndApply(bte); //play animation @@ -667,7 +667,7 @@ void BattleFlowProcessor::stackTurnTrigger(const CBattleInfoCallback & battle, c BattleTriggerEffect bte; bte.battleID = battle.getBattle()->getBattleID(); bte.stackID = st->unitId(); - bte.effect = -1; + bte.effect = BonusType::NONE; bte.val = 0; bte.additionalInfo = 0; if (st->alive()) @@ -710,7 +710,7 @@ void BattleFlowProcessor::stackTurnTrigger(const CBattleInfoCallback & battle, c bte.val = std::max (b->val - 10, -(st->valOfBonuses(BonusType::POISON))); if (bte.val < b->val) //(negative) poison effect increases - update it { - bte.effect = vstd::to_underlying(BonusType::POISON); + bte.effect = BonusType::POISON; gameHandler->sendAndApply(bte); } } @@ -724,28 +724,21 @@ void BattleFlowProcessor::stackTurnTrigger(const CBattleInfoCallback & battle, c vstd::amin(manaDrained, opponentHero->mana); if(manaDrained) { - bte.effect = vstd::to_underlying(BonusType::MANA_DRAIN); + bte.effect = BonusType::MANA_DRAIN; bte.val = manaDrained; bte.additionalInfo = opponentHero->id.getNum(); //for sanity gameHandler->sendAndApply(bte); } } } - if (st->isLiving() && !st->hasBonusOfType(BonusType::FEARLESS)) + if (st->hasBonusOfType(BonusType::FEARFUL)) { + int chance = st->valOfBonuses(BonusType::FEARFUL); ObjectInstanceID opponentArmyID = battle.battleGetArmyObject(battle.otherSide(st->unitSide()))->id; - bool fearsomeCreature = false; - for (const CStack * stack : battle.battleGetAllStacks(true)) + + if (gameHandler->randomizer->rollCombatAbility(opponentArmyID, chance)) { - if (battle.battleMatchOwner(st, stack) && stack->alive() && stack->hasBonusOfType(BonusType::FEAR)) - { - fearsomeCreature = true; - break; - } - } - if (fearsomeCreature && gameHandler->randomizer->rollCombatAbility(opponentArmyID, 10)) //fixed 10% - { - bte.effect = vstd::to_underlying(BonusType::FEAR); + bte.effect = BonusType::FEARFUL; gameHandler->sendAndApply(bte); } } diff --git a/server/battles/BattleProcessor.cpp b/server/battles/BattleProcessor.cpp index a3e46d9b1..42956382f 100644 --- a/server/battles/BattleProcessor.cpp +++ b/server/battles/BattleProcessor.cpp @@ -78,6 +78,7 @@ void BattleProcessor::restartBattle(const BattleID & battleID, const CArmedInsta SetMana restoreInitialMana; restoreInitialMana.val = lastBattleQuery->initialHeroMana[i]; restoreInitialMana.hid = heroes[i]->id; + restoreInitialMana.mode = ChangeValueMode::ABSOLUTE; gameHandler->sendAndApply(restoreInitialMana); } } diff --git a/server/battles/BattleResultProcessor.cpp b/server/battles/BattleResultProcessor.cpp index fdfc5bb33..84c1eddb3 100644 --- a/server/battles/BattleResultProcessor.cpp +++ b/server/battles/BattleResultProcessor.cpp @@ -322,14 +322,6 @@ void BattleResultProcessor::endBattleConfirm(const CBattleInfoCallback & battle) const auto winnerHero = battle.battleGetFightingHero(finishingBattle->winnerSide); const auto loserHero = battle.battleGetFightingHero(CBattleInfoEssentials::otherSide(finishingBattle->winnerSide)); - if(battleResult->winner == BattleSide::DEFENDER - && winnerHero - && winnerHero->getVisitedTown() - && !winnerHero->isGarrisoned() - && winnerHero->getVisitedTown()->getGarrisonHero() == winnerHero) - { - gameHandler->swapGarrisonOnSiege(winnerHero->getVisitedTown()->id); //return defending visitor from garrison to its rightful place - } //give exp if(!finishingBattle->isDraw() && battleResult->exp[finishingBattle->winnerSide]) { @@ -546,9 +538,6 @@ void BattleResultProcessor::battleFinalize(const BattleID & battleID, const Batt resultsApplied.loser = finishingBattle->loser; gameHandler->sendAndApply(resultsApplied); - //handle victory/loss of engaged players - gameHandler->checkVictoryLossConditions({finishingBattle->loser, finishingBattle->victor}); - // Remove beaten hero if(loserHero) { @@ -564,6 +553,9 @@ void BattleResultProcessor::battleFinalize(const BattleID & battleID, const Batt gameHandler->heroPool->onHeroEscaped(finishingBattle->victor, winnerHero); } + //handle victory/loss of engaged players + gameHandler->checkVictoryLossConditions({finishingBattle->loser, finishingBattle->victor}); + if (result.result == EBattleResult::SURRENDER) { gameHandler->statistics->accumulatedValues[finishingBattle->loser].numHeroSurrendered++; diff --git a/test/mock/mock_IGameEventCallback.h b/test/mock/mock_IGameEventCallback.h index 3b7d0cdce..d9707d738 100644 --- a/test/mock/mock_IGameEventCallback.h +++ b/test/mock/mock_IGameEventCallback.h @@ -72,7 +72,6 @@ public: void startBattle(const CArmedInstance *army1, const CArmedInstance *army2, int3 tile, const CGHeroInstance *hero1, const CGHeroInstance *hero2, const BattleLayout & layout, const CGTownInstance *town) override {} //use hero=nullptr for no hero void startBattle(const CArmedInstance *army1, const CArmedInstance *army2) override {} bool moveHero(ObjectInstanceID hid, int3 dst, EMovementMode movementMode, bool transit, PlayerColor asker) override {return false;} - bool swapGarrisonOnSiege(ObjectInstanceID tid) override {return false;} void giveHeroBonus(GiveBonus * bonus) override {} void setMovePoints(SetMovePoints * smp) override {} void setMovePoints(ObjectInstanceID hid, int val, ChangeValueMode mode) override {};