From 0db4ff1421eb1f730879d2605538abb8852f9fc9 Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Wed, 12 Aug 2026 07:46:05 +0200 Subject: [PATCH 1/8] fix(save-editor): hide the Magic Circle attribute the game derives MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The attribute list carried MagicianLevel as "Magic Circle" — the exact name the Skills list already uses for the same thing, in the same tab. Only one of the two did anything: the game re-derives the attribute from the skill's GameplayEffect class when the save is loaded, so a value typed into the attribute field never survives. Proven in game: a save whose effect class said circle 6 while MagicianLevel still said -1 let the hero use a circle 4 rune, and rune usability is stated against MagicianLevel. MagicianLevel therefore joins the four Critical_* attributes in heroHiddenAttributeIds, for the same reason they are there. It stays editable in the All-data browser. Co-Authored-By: Claude Opus 5 --- apps/save-editor/CHANGELOG.md | 3 +++ .../editor/domain/hero_attributes.dart | 12 +++++++++- .../editor/domain/hero_attributes_test.dart | 22 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/apps/save-editor/CHANGELOG.md b/apps/save-editor/CHANGELOG.md index db547070b..9f51f4a18 100644 --- a/apps/save-editor/CHANGELOG.md +++ b/apps/save-editor/CHANGELOG.md @@ -22,6 +22,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Fixed +- The attribute list offered a second "Magic Circle", identically named to the + one under Skills but without any effect in the game. It is gone; the circle is + set under Skills. - Version 1.2.1 said an NPC's position cannot be changed because the game restores it from the level. That was wrong. - Removing an item from a list and then editing another item in the same list diff --git a/apps/save-editor/lib/features/editor/domain/hero_attributes.dart b/apps/save-editor/lib/features/editor/domain/hero_attributes.dart index 8b2719f00..f99d551da 100644 --- a/apps/save-editor/lib/features/editor/domain/hero_attributes.dart +++ b/apps/save-editor/lib/features/editor/domain/hero_attributes.dart @@ -54,7 +54,6 @@ const heroCoreAttributeOrder = [ 'Level', 'Experience', 'SkillPoints', - 'MagicianLevel', ]; // The per-weapon critical-hit values used to have their own "Kampffertigkeiten" @@ -67,11 +66,22 @@ const heroCombatAttributes = []; /// Attribute ids hidden from the curated hero/NPC attribute view (the game /// derives these from the learned skills, so editing them by hand is /// misleading). They remain reachable in the All-data property browser. +/// +/// Each one is the attribute a `GE_Skill_*` class raises, and the game +/// re-derives it from that class when the savegame is loaded: a save edited so +/// that only the Magic Circle CLASS said circle 6 — while MagicianLevel still +/// said -1 — let the hero use a circle 4 rune in game, and rune usability is +/// stated against MagicianLevel. So the value written here never survives the +/// load, and the skill's own control (Talente) is the only one that works. const heroHiddenAttributeIds = { 'Critical_Fists', 'Critical_OneHand', 'Critical_TwoHand', 'Critical_Orc', + // Magic Circle. Its label collided with the Talente row's, so the Attribute + // tab showed two identical "Magischer Kreis" controls, only one of which did + // anything. + 'MagicianLevel', }; const heroResistanceAttributes = [ diff --git a/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart b/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart index 024a4b896..35bccba28 100644 --- a/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart +++ b/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart @@ -88,10 +88,32 @@ void main() { expect(heroAttributeGroup('Critical_OneHand'), HeroAttributeGroup.advanced); expect(heroAttributeGroup('Resistance_Fire'), HeroAttributeGroup.resistances); expect(heroAttributeGroup('PickPocketing'), HeroAttributeGroup.thieving); + expect(heroAttributeGroup('MagicianLevel'), HeroAttributeGroup.advanced); expect(heroAttributeGroup('Swampweed'), HeroAttributeGroup.advanced); expect(heroAttributeGroup('SomeFutureAttribute'), HeroAttributeGroup.advanced); }); + test('drops attributes the game derives from a learned skill', () { + // The game re-derives each of these from the skill's GameplayEffect class + // when the save is loaded, so a hand-edited value never survives — proven in + // game for the Magic Circle: a save whose class said circle 6 while + // MagicianLevel still said -1 let the hero use a circle 4 rune. Offering + // them here would be a control that silently does nothing, and MagicianLevel + // carried the same label as the Talente row on top of that. + final attributes = parseHeroAttributes([ + _heroHit('/Script/G1R.AttributeSet_Mana', 'MagicianLevel', 'BaseValue', '0'), + _heroHit('/Script/G1R.AttributeSet_Mana', 'MagicianLevel', 'CurrentValue', '6'), + _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_OneHand', 'BaseValue', '0'), + _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_Fists', 'BaseValue', '0'), + _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_TwoHand', 'BaseValue', '0'), + _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_Orc', 'BaseValue', '0'), + _heroHit('/Script/G1R.AttributeSet_Mana', 'MaxMana', 'BaseValue', '35'), + ]); + + // Only the one attribute the game does NOT derive from a skill survives. + expect(attributes.map((a) => a.id), ['MaxMana']); + }); + test('sorts core attributes in display order before unknown ones', () { final attributes = parseHeroAttributes([ _heroHit('/Script/G1R.AttributeSet_Strength', 'Strength', 'BaseValue', '10'), From 8df9e48f19b33a672f22f7c03e694bcdd824e8bf Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Wed, 12 Aug 2026 07:55:57 +0200 Subject: [PATCH 2/8] fix(save-editor): hide the derived attributes in the fallback editor too MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the typed attribute search fails or comes back empty, the hero pane falls back to the legacy private-player editor, which listed every row the core's summary carries — without consulting heroHiddenAttributeIds. The core includes MagicianLevel in that summary, so on this path the two identically named Magic Circle controls were still both there, the ineffective one included. The four Critical_* ids never surfaced the problem because the core's private-player summary does not carry them at all. Co-Authored-By: Claude Opus 5 --- .../lib/features/editor/ui/attribute_detail.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/save-editor/lib/features/editor/ui/attribute_detail.dart b/apps/save-editor/lib/features/editor/ui/attribute_detail.dart index 36979c446..5f5106d62 100644 --- a/apps/save-editor/lib/features/editor/ui/attribute_detail.dart +++ b/apps/save-editor/lib/features/editor/ui/attribute_detail.dart @@ -16,7 +16,7 @@ import 'package:goresave/providers/data_providers.dart'; import '../domain/editor_notifier.dart'; import '../domain/hero_attributes.dart' - show AttributeLabelResolver, TypedValueEdit; + show AttributeLabelResolver, TypedValueEdit, heroHiddenAttributeIds; /// Reverse a stored per-NPC attribute registry entry back into the panel's /// [NpcTypedEdit] drafts so [NpcAttributesPanel] can resume from them on a @@ -400,6 +400,12 @@ class _PrivatePlayerAttributesEditor extends StatelessWidget { final compact = constraints.maxWidth < 620; return Column( children: player.attributes + // The typed view hides the attributes the game re-derives + // from a learned skill; this fallback shows the same hero, so + // it must hide them too. The core's summary carries + // MagicianLevel, which would otherwise reappear here as a + // second, ineffective "Magic Circle" beside the skill's own. + .where((a) => !heroHiddenAttributeIds.contains(a.id)) .map( (attribute) => _PrivatePlayerAttributeRow( attribute: attribute, From 27434a58577f1082e5cecd149f7a5b460eb711a2 Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Fri, 14 Aug 2026 11:42:01 +0200 Subject: [PATCH 3/8] feat(save-editor): group the attribute list and explain every value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The advanced attributes were one long list of raw engine ids with machine-generated labels — "Fill ratio (AttributeSet_Thirst)", "Critical level (%)" — that told a player nothing, and several of them do nothing at all. Grouped into Combat & movement, Diving, Sleep & rest and Intoxication, with the leftovers still under Advanced. A group's sidebar entry only appears when the hero actually carries its attributes. Every remaining value now has a real name and a tooltip on that name saying what it does in the game, in all twelve languages. Both live in one ICU select message per locale, so the whole table is two keys. Ids that exist in several attribute sets are addressed by a composite key (`Health_RecoveryRatePerHourOfSleep`), which is what lets the Health and Mana sleep rates carry different wording — and what retires the "(AttributeSet_X)" suffix the rows used to grow. The separator is an underscore because ICU rejects a dot in a select arm. Dropped from the curated view, because the game does not act on them: Toughness and its three curve coefficients (encumbrance was cut, and carrying is unlimited), and the sixteen hunger/thirst/fatigue values of the survival mode that cannot be switched on. All stay editable in the All-data browser. See docs/reference/survival-mode.md. Co-Authored-By: Claude Opus 5 --- apps/save-editor/CHANGELOG.md | 7 + .../editor/domain/hero_attributes.dart | 190 ++++++++++++-- .../editor/domain/npc_attributes.dart | 4 +- .../features/editor/ui/attribute_detail.dart | 34 ++- .../features/editor/ui/hero_stats_card.dart | 61 ++++- .../editor/ui/npc_attributes_panel.dart | 35 ++- apps/save-editor/lib/l10n/app_de.arb | 6 +- apps/save-editor/lib/l10n/app_en.arb | 7 +- apps/save-editor/lib/l10n/app_es.arb | 6 +- apps/save-editor/lib/l10n/app_fr.arb | 6 +- apps/save-editor/lib/l10n/app_it.arb | 6 +- apps/save-editor/lib/l10n/app_ja.arb | 6 +- .../lib/l10n/app_localizations.dart | 26 +- .../lib/l10n/app_localizations_de.dart | 118 ++++++--- .../lib/l10n/app_localizations_en.dart | 108 +++++--- .../lib/l10n/app_localizations_es.dart | 119 ++++++--- .../lib/l10n/app_localizations_fr.dart | 122 ++++++--- .../lib/l10n/app_localizations_it.dart | 116 ++++++--- .../lib/l10n/app_localizations_ja.dart | 97 +++++--- .../lib/l10n/app_localizations_pl.dart | 116 ++++++--- .../lib/l10n/app_localizations_pt.dart | 234 +++++++++++++----- .../lib/l10n/app_localizations_ru.dart | 118 ++++++--- .../lib/l10n/app_localizations_zh.dart | 186 +++++++++----- apps/save-editor/lib/l10n/app_pl.arb | 6 +- apps/save-editor/lib/l10n/app_pt.arb | 6 +- apps/save-editor/lib/l10n/app_pt_BR.arb | 6 +- apps/save-editor/lib/l10n/app_ru.arb | 6 +- apps/save-editor/lib/l10n/app_zh.arb | 6 +- apps/save-editor/lib/l10n/app_zh_Hans.arb | 6 +- apps/save-editor/lib/loc/attribute_loc.dart | 30 ++- .../editor/domain/hero_attributes_test.dart | 153 ++++++++++-- .../editor/ui/hero_stats_card_test.dart | 9 +- .../editor/ui/npc_attributes_panel_test.dart | 7 +- .../test/l10n_arb_coverage_test.dart | 37 ++- .../test/loc/attribute_loc_test.dart | 38 ++- 35 files changed, 1539 insertions(+), 499 deletions(-) diff --git a/apps/save-editor/CHANGELOG.md b/apps/save-editor/CHANGELOG.md index 9f51f4a18..2b007d1d6 100644 --- a/apps/save-editor/CHANGELOG.md +++ b/apps/save-editor/CHANGELOG.md @@ -17,6 +17,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Changed +- The advanced attributes are sorted into Combat & movement, Diving, Sleep & + rest and Intoxication instead of one long list, every value has a proper name + in your language, and hovering a name explains what it does in the game. +- Values the game never acts on are gone from the attribute list: Toughness, + which no longer limits what you can carry, and hunger, thirst and fatigue, + which belong to a survival mode that cannot be switched on. They stay + editable under All data. - Saving is much faster: a save with eight changed values took eleven seconds and now takes one. diff --git a/apps/save-editor/lib/features/editor/domain/hero_attributes.dart b/apps/save-editor/lib/features/editor/domain/hero_attributes.dart index f99d551da..c9ec70a02 100644 --- a/apps/save-editor/lib/features/editor/domain/hero_attributes.dart +++ b/apps/save-editor/lib/features/editor/domain/hero_attributes.dart @@ -42,7 +42,43 @@ class HeroAttribute { final double? currentValue; } -enum HeroAttributeGroup { core, combat, resistances, thieving, advanced } +enum HeroAttributeGroup { + core, + combat, + resistances, + thieving, + diving, + sleep, + intoxication, + advanced, +} + +/// The key an attribute is addressed by throughout the curated view: its plain +/// id, or `_` when that id exists in more than one set. +/// +/// The separator is an underscore, not a dot, because these keys are also the +/// arm names of the ICU `select` messages that carry the labels and tooltips, +/// and ICU rejects a dot there. +/// +/// Four ids are shared between sets — `FillRatio`, `FillRatioPeriod` and +/// `MaxThresholdIndex` across Hunger/Thirst/Fatigue, and +/// `RecoveryRatePerHourOfSleep` across Health/Mana/Fatigue. They mean something +/// different in each, so grouping and labelling both need the set. Everything +/// else stays keyed by the bare id, which keeps the label table and the group +/// lists readable. +String heroAttributeKey(String id, [String? setClass]) { + if (!_setQualifiedIds.contains(id)) return id; + final set = setClass?.split('.').last ?? ''; + if (!set.startsWith('AttributeSet_')) return id; + return '${set.substring('AttributeSet_'.length)}_$id'; +} + +const _setQualifiedIds = { + 'FillRatio', + 'FillRatioPeriod', + 'MaxThresholdIndex', + 'RecoveryRatePerHourOfSleep', +}; const heroCoreAttributeOrder = [ 'Health', @@ -56,12 +92,60 @@ const heroCoreAttributeOrder = [ 'SkillPoints', ]; -// The per-weapon critical-hit values used to have their own "Kampffertigkeiten" -// group; they are now hidden from the curated attribute view entirely (see -// [heroHiddenAttributeIds]) — still editable via the All-data browser. This -// list stays empty so the combat group machinery keeps compiling but never -// surfaces. -const heroCombatAttributes = []; +/// Combat and movement. The per-weapon critical-hit values that used to live +/// here are hidden now (see [heroHiddenAttributeIds]); what remains is the +/// poise system plus the two global factors. +/// +/// `SuperArmor` is the stagger pool: a hit subtracts its super-armour damage +/// and only staggers the hero once the pool is empty, so a higher value means +/// fewer interruptions. Its maximum is `20 + 3 x Level` plus whatever the worn +/// armour adds, which is why base and current differ in a real save. +const heroCombatAttributes = [ + 'SuperArmor', + 'MaxSuperArmor', + 'DamageMultiplier', + 'SpeedModifier', +]; + +/// Breath and diving. `Oxygen` is literally seconds of air: the swim ability +/// subtracts `OxygenDepletionRate` (always 1) every second under water and +/// kills the hero at zero, and the Diving skill raises the capacity from 45 to +/// 150 while tripling the surface recovery. +const heroDivingAttributes = [ + 'Oxygen', + 'MaxOxygen', + 'OxygenDepletionRate', + 'OxygenRecoveryRate', + 'CriticalLevelPercent', +]; + +/// Sleeping in a bed. `SleepTime` is the budget of restful hours behind the +/// game's "Sleep for:" slider — hours beyond it are the ones the game marks +/// "No resting bonus" — and it refills by `SleepTimeRecoveryAmount` every +/// `SleepTimeRecoveryPeriod`. The three per-hour recovery rates say what an +/// hour of sleep restores, which is why they belong here rather than with the +/// pools they act on. +const heroSleepAttributes = [ + 'SleepTime', + 'MaxSleepTime', + 'SleepTimeRecoveryAmount', + 'SleepTimeRecoveryPeriod', + 'MaxRestTime', + 'Health_RecoveryRatePerHourOfSleep', + 'Mana_RecoveryRatePerHourOfSleep', +]; + +/// Booze and swampweed. Both run the same machine: a consumable adds points, +/// the level falls into one of three tiers that trade attributes against each +/// other, and the value decays by its depletion rate until sober. +const heroIntoxicationAttributes = [ + 'Alcohol', + 'MaxAlcohol', + 'AlcoholDepletionRate', + 'Swampweed', + 'MaxSwampweed', + 'SwampweedDepletionRate', +]; /// Attribute ids hidden from the curated hero/NPC attribute view (the game /// derives these from the learned skills, so editing them by hand is @@ -82,6 +166,37 @@ const heroHiddenAttributeIds = { // tab showed two identical "Magischer Kreis" controls, only one of which did // anything. 'MagicianLevel', + ..._heroUnusedAttributeIds, +}; + +/// Attributes the shipped game carries but never acts on — encumbrance, which +/// was designed and then left out: nothing in the script layer reads +/// `Toughness`, and carrying capacity is unlimited in play. The game still +/// SHOWS Toughness on its own character screen (`ui_attribute_toughness`), but +/// the number drives nothing, and A/B/C are the coefficients of the curve that +/// was meant to compute it — they do not reproduce the values the game actually +/// stores under any simple polynomial. +const _heroUnusedAttributeIds = { + 'Toughness', + 'ToughnessA', + 'ToughnessB', + 'ToughnessC', + // Hunger, thirst and fatigue: the game's optional Survival mode, which never + // became reachable. Measured in game on 2026-08-13 with a UE4SS probe: + // GetSurvivalModeState() was forced to true BEFORE the hero loaded, the six + // need abilities are granted, the attribute sets are present, and Hunger sat + // at 900/1000 — the harshest stage, which owes -15% Strength and 1 HP per + // second. Strength stayed 30.0 and health stayed 71.0 for a minute. The + // abilities never activate, so every one of these values is inert. + 'Hunger', 'MaxHunger', + 'Thirst', 'MaxThirst', + 'Fatigue', 'MaxFatigue', + // These three exist ONLY in the Hunger/Thirst/Fatigue sets, so hiding them by + // bare id is exact. + 'FillRatio', 'FillRatioPeriod', 'MaxThresholdIndex', + // This one also exists on Health and Mana, where it is real — so it has to be + // hidden by its set-qualified key, not by id. + 'Fatigue_RecoveryRatePerHourOfSleep', }; const heroResistanceAttributes = [ @@ -101,16 +216,36 @@ const heroThievingAttributes = [ 'PickPocketing', ]; -HeroAttributeGroup heroAttributeGroup(String id) { - if (heroCoreAttributeOrder.contains(id)) return HeroAttributeGroup.core; - if (heroCombatAttributes.contains(id)) return HeroAttributeGroup.combat; - if (heroResistanceAttributes.contains(id)) { - return HeroAttributeGroup.resistances; +/// The group an attribute belongs to. [setClass] disambiguates the handful of +/// ids that exist in several attribute sets; without it those fall back to +/// their bare id, which no group claims, so they land in `advanced`. +/// Whether an attribute is hidden from the curated view. [setClass] matters for +/// the ids that exist in several sets: `RecoveryRatePerHourOfSleep` is inert on +/// Fatigue but real on Health and Mana. +bool heroAttributeHidden(String id, [String? setClass]) => + heroHiddenAttributeIds.contains(id) || + heroHiddenAttributeIds.contains(heroAttributeKey(id, setClass)); + +HeroAttributeGroup heroAttributeGroup(String id, [String? setClass]) { + final key = heroAttributeKey(id, setClass); + for (final entry in _groupOrders.entries) { + if (entry.value.contains(key)) return entry.key; } - if (heroThievingAttributes.contains(id)) return HeroAttributeGroup.thieving; return HeroAttributeGroup.advanced; } +/// Every group's ordered member list, in sidebar order. `advanced` is absent on +/// purpose: it is the catch-all for anything unlisted. +const _groupOrders = >{ + HeroAttributeGroup.core: heroCoreAttributeOrder, + HeroAttributeGroup.combat: heroCombatAttributes, + HeroAttributeGroup.resistances: heroResistanceAttributes, + HeroAttributeGroup.thieving: heroThievingAttributes, + HeroAttributeGroup.diving: heroDivingAttributes, + HeroAttributeGroup.sleep: heroSleepAttributes, + HeroAttributeGroup.intoxication: heroIntoxicationAttributes, +}; + /// Display label for an attribute id. SkillPoints are Gothic's learn points, /// which is what players actually look for. String heroAttributeLabel(String id) { @@ -122,19 +257,15 @@ String heroAttributeLabel(String id) { /// groups. Shared by the player's [parseHeroAttributes] sort and the NPC /// attribute panel so NPC rows order identically to the player's within a /// group (and unlisted/advanced ids fall to the end). Exposes [_groupRank]. -int heroAttributeRank(String id) => _groupRank(id); - -int _groupRank(String id) { - final group = heroAttributeGroup(id); - final order = switch (group) { - HeroAttributeGroup.core => heroCoreAttributeOrder, - HeroAttributeGroup.combat => heroCombatAttributes, - HeroAttributeGroup.resistances => heroResistanceAttributes, - HeroAttributeGroup.thieving => heroThievingAttributes, - HeroAttributeGroup.advanced => null, - }; +int heroAttributeRank(String id, [String? setClass]) => + _groupRank(id, setClass); + +int _groupRank(String id, [String? setClass]) { + final key = heroAttributeKey(id, setClass); + final group = heroAttributeGroup(id, setClass); + final order = _groupOrders[group]; if (order == null) return 1 << 20; - return (group.index << 12) + order.indexOf(id); + return (group.index << 12) + order.indexOf(key); } /// Fold typed search hits into hero attributes. Only editable FloatProperty @@ -156,7 +287,6 @@ List parseHeroAttributes(List hits) { final idSegment = path[path.length - 2]; if (!idSegment.startsWith('{') || !idSegment.endsWith('}')) continue; final id = idSegment.substring(1, idSegment.length - 1); - if (heroHiddenAttributeIds.contains(id)) continue; final setIndex = path.indexOf('AttributeSetsByClass'); var setClass = ''; if (setIndex >= 0 && setIndex + 1 < path.length) { @@ -165,6 +295,9 @@ List parseHeroAttributes(List hits) { setClass = seg.substring(1, seg.length - 1); } } + // Needs the set: `RecoveryRatePerHourOfSleep` is inert on Fatigue but real + // on Health and Mana, so the bare id cannot decide this. + if (heroAttributeHidden(id, setClass)) continue; final prefix = path.sublist(0, path.length - 1).join(' '); final builder = byPrefix.putIfAbsent( prefix, @@ -181,7 +314,10 @@ List parseHeroAttributes(List hits) { } final attributes = byPrefix.values.map((b) => b.build()).toList() ..sort((a, b) { - final rank = _groupRank(a.id).compareTo(_groupRank(b.id)); + final rank = _groupRank( + a.id, + a.setClass, + ).compareTo(_groupRank(b.id, b.setClass)); if (rank != 0) return rank; final byId = a.id.compareTo(b.id); if (byId != 0) return byId; diff --git a/apps/save-editor/lib/features/editor/domain/npc_attributes.dart b/apps/save-editor/lib/features/editor/domain/npc_attributes.dart index 28491f7e3..b778340e2 100644 --- a/apps/save-editor/lib/features/editor/domain/npc_attributes.dart +++ b/apps/save-editor/lib/features/editor/domain/npc_attributes.dart @@ -1,4 +1,4 @@ -import 'hero_attributes.dart' show heroHiddenAttributeIds; +import 'hero_attributes.dart' show heroAttributeHidden; /// One pending `private.typed.setValue` edit produced by the NPC attribute /// editor. Mirrors [TypedValueEdit] in hero_attributes.dart but kept local so @@ -65,7 +65,7 @@ class NpcAttributesResult { .map((m) => NpcAttributeRow.fromJson(m.cast())) // Hide the per-weapon critical values from the curated view (same as // the player); they stay editable in the All-data browser. - .where((row) => !heroHiddenAttributeIds.contains(row.key)) + .where((row) => !heroAttributeHidden(row.key)) .toList(growable: false), ); } diff --git a/apps/save-editor/lib/features/editor/ui/attribute_detail.dart b/apps/save-editor/lib/features/editor/ui/attribute_detail.dart index 5f5106d62..78c316989 100644 --- a/apps/save-editor/lib/features/editor/ui/attribute_detail.dart +++ b/apps/save-editor/lib/features/editor/ui/attribute_detail.dart @@ -16,7 +16,7 @@ import 'package:goresave/providers/data_providers.dart'; import '../domain/editor_notifier.dart'; import '../domain/hero_attributes.dart' - show AttributeLabelResolver, TypedValueEdit, heroHiddenAttributeIds; + show AttributeLabelResolver, TypedValueEdit, heroAttributeHidden; /// Reverse a stored per-NPC attribute registry entry back into the panel's /// [NpcTypedEdit] drafts so [NpcAttributesPanel] can resume from them on a @@ -108,6 +108,8 @@ class AttributeDetail extends ConsumerWidget { setClass: setClass, l10n: l10n, ); + String attributeTooltipFor(String id, String? setClass) => + attributeTooltip(id, setClass: setClass, l10n: l10n); if (selected.isPlayer) { final body = _PrivatePanel( @@ -119,6 +121,7 @@ class AttributeDetail extends ConsumerWidget { editable: editable, lockedBody: l10n.playerLockedBody, attributeLabel: attributeLabel, + attributeTooltip: attributeTooltipFor, ); if (!showActorHeader) return body; // Player → a shared header ("Player", no GlobalId) above the EXISTING @@ -194,6 +197,7 @@ class AttributeDetail extends ConsumerWidget { showRoster: false, ), attributeLabel: attributeLabel, + attributeTooltip: attributeTooltipFor, initialPending: () => _npcAttributeDraftsFromPending( notifier.pendingEditFor(pendingKey), ), @@ -250,6 +254,7 @@ class _PrivatePanel extends StatelessWidget { required this.editable, required this.lockedBody, required this.attributeLabel, + required this.attributeTooltip, }); final IconData icon; @@ -260,6 +265,7 @@ class _PrivatePanel extends StatelessWidget { final bool editable; final String lockedBody; final AttributeLabelResolver attributeLabel; + final AttributeLabelResolver attributeTooltip; /// The legacy attributes editor, flattened: the whole tab body sits inside /// ONE main card now, so the section renders bare (no inner Card). @@ -270,6 +276,7 @@ class _PrivatePanel extends StatelessWidget { editable: editable, reloadKey: inspection, attributeLabel: attributeLabel, + attributeTooltip: attributeTooltip, ); } @@ -334,6 +341,7 @@ class _PrivatePanel extends StatelessWidget { reloadKey: inspection, ), attributeLabel: attributeLabel, + attributeTooltip: attributeTooltip, ), ); } @@ -365,6 +373,7 @@ class _PrivatePlayerAttributesEditor extends StatelessWidget { required this.player, required this.notifier, required this.attributeLabel, + required this.attributeTooltip, this.editable = true, this.reloadKey, }); @@ -372,6 +381,7 @@ class _PrivatePlayerAttributesEditor extends StatelessWidget { final PrivatePlayerSummary player; final EditorNotifier notifier; final AttributeLabelResolver attributeLabel; + final AttributeLabelResolver attributeTooltip; final bool editable; final Object? reloadKey; @@ -405,11 +415,12 @@ class _PrivatePlayerAttributesEditor extends StatelessWidget { // it must hide them too. The core's summary carries // MagicianLevel, which would otherwise reappear here as a // second, ineffective "Magic Circle" beside the skill's own. - .where((a) => !heroHiddenAttributeIds.contains(a.id)) + .where((a) => !heroAttributeHidden(a.id)) .map( (attribute) => _PrivatePlayerAttributeRow( attribute: attribute, label: attributeLabel(attribute.id, null), + tooltip: attributeTooltip(attribute.id, null), notifier: notifier, editable: editable, compact: compact, @@ -429,6 +440,7 @@ class _PrivatePlayerAttributeRow extends StatefulWidget { const _PrivatePlayerAttributeRow({ required this.attribute, required this.label, + this.tooltip = '', required this.notifier, required this.editable, required this.compact, @@ -437,6 +449,9 @@ class _PrivatePlayerAttributeRow extends StatefulWidget { final PrivatePlayerAttribute attribute; final String label; + + /// One sentence on what this value does in the game. Empty = no tooltip. + final String tooltip; final EditorNotifier notifier; final bool editable; final bool compact; @@ -506,6 +521,14 @@ class _PrivatePlayerAttributeRowState Widget build(BuildContext context) { final l10n = AppLocalizations.of(context); final name = widget.label; + // Same affordance as the typed rows: the label explains what the value does. + Widget named() { + final text = Text(name, style: Theme.of(context).textTheme.labelLarge); + return widget.tooltip.isEmpty + ? text + : Tooltip(message: widget.tooltip, child: text); + } + final baseField = TextField( key: ValueKey('legacy-attribute:${widget.attribute.id}:base'), controller: _baseController, @@ -525,17 +548,14 @@ class _PrivatePlayerAttributeRowState onChanged: (_) => _updatePending(), decoration: InputDecoration(labelText: l10n.attributeCurrentValue), ); - final label = SizedBox( - width: 116, - child: Text(name, style: Theme.of(context).textTheme.labelLarge), - ); + final label = SizedBox(width: 116, child: named()); if (widget.compact) { return Padding( padding: const EdgeInsets.symmetric(vertical: 6), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - Text(name, style: Theme.of(context).textTheme.labelLarge), + named(), const SizedBox(height: 6), baseField, const SizedBox(height: 6), diff --git a/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart b/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart index 5e035039e..32e671add 100644 --- a/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart +++ b/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart @@ -11,7 +11,16 @@ import 'grouped_attribute_sidebar.dart'; /// The player's transform used to be a sixth entry here. It now lives in the /// Charaktere → Position sub-tab (PositionDetail), its ONLY home: two mounted /// copies would both drive the single 'transform' pending key. -enum _SidebarEntry { core, combat, resistances, thieving, advanced } +enum _SidebarEntry { + core, + combat, + resistances, + thieving, + diving, + sleep, + intoxication, + advanced, +} /// Grouped editors for every hero gameplay attribute. Data arrives through /// [load] (typed property search) and leaves through [onPendingChanged] @@ -35,6 +44,7 @@ class HeroStatsCard extends StatefulWidget { this.fallback, this.skillsSection, this.attributeLabel, + this.attributeTooltip, }); final Future Function() load; @@ -71,6 +81,9 @@ class HeroStatsCard extends StatefulWidget { /// without a localization catalog via [heroAttributeLabel]. final AttributeLabelResolver? attributeLabel; + /// Resolves an attribute to a one-sentence explanation for its label tooltip. + final AttributeLabelResolver? attributeTooltip; + @override State createState() => _HeroStatsCardState(); } @@ -160,7 +173,10 @@ class _HeroStatsCardState extends State { final byGroup = >{}; for (final attribute in attributes) { byGroup - .putIfAbsent(heroAttributeGroup(attribute.id), () => []) + .putIfAbsent( + heroAttributeGroup(attribute.id, attribute.setClass), + () => [], + ) .add(attribute); } return byGroup; @@ -373,6 +389,9 @@ class _HeroStatsCardState extends State { _SidebarEntry.combat => HeroAttributeGroup.combat, _SidebarEntry.resistances => HeroAttributeGroup.resistances, _SidebarEntry.thieving => HeroAttributeGroup.thieving, + _SidebarEntry.diving => HeroAttributeGroup.diving, + _SidebarEntry.sleep => HeroAttributeGroup.sleep, + _SidebarEntry.intoxication => HeroAttributeGroup.intoxication, _SidebarEntry.advanced => HeroAttributeGroup.advanced, }; } @@ -387,6 +406,9 @@ class _HeroStatsCardState extends State { _SidebarEntry.combat => l10n.heroGroupCombatSkills, _SidebarEntry.resistances => l10n.heroGroupResistances, _SidebarEntry.thieving => l10n.heroGroupSkills, + _SidebarEntry.diving => l10n.heroGroupDiving, + _SidebarEntry.sleep => l10n.heroGroupSleep, + _SidebarEntry.intoxication => l10n.heroGroupIntoxication, _SidebarEntry.advanced => l10n.heroGroupAdvanced, }; } @@ -397,23 +419,24 @@ class _HeroStatsCardState extends State { _SidebarEntry.combat => Icons.shield_outlined, _SidebarEntry.resistances => Icons.security_outlined, _SidebarEntry.thieving => Icons.military_tech_outlined, + _SidebarEntry.diving => Icons.scuba_diving_outlined, + _SidebarEntry.sleep => Icons.bedtime_outlined, + _SidebarEntry.intoxication => Icons.local_bar_outlined, _SidebarEntry.advanced => Icons.tune, }; } Widget _row(HeroAttribute attribute) { - final duplicate = _attributes.where((a) => a.id == attribute.id).length > 1; - var label = _displayLabel(attribute); - if (duplicate) { - final setName = attribute.setClass.split('.').last; - label = '$label ($setName)'; - } + final label = _displayLabel(attribute); + final tooltip = + widget.attributeTooltip?.call(attribute.id, attribute.setClass) ?? ''; return _HeroAttributeRow( // Record key compares reloadKey by its own equality (identity for // SaveInspection, which has no == override), not by toString(), so a // fresh SaveInspection instance always causes a new row to be built // rather than reusing stale field state from the previous load. key: ValueKey((widget.reloadKey, attribute.setClass, attribute.id)), + tooltip: tooltip, attribute: attribute, label: label, editable: widget.editable, @@ -436,6 +459,7 @@ class _HeroAttributeRow extends StatefulWidget { super.key, required this.attribute, required this.label, + this.tooltip = '', required this.editable, required this.onBaseChanged, required this.onCurrentChanged, @@ -445,6 +469,9 @@ class _HeroAttributeRow extends StatefulWidget { final HeroAttribute attribute; final String label; + + /// One sentence on what this value does in the game. Empty = no tooltip. + final String tooltip; final bool editable; final ValueChanged onBaseChanged; final ValueChanged onCurrentChanged; @@ -523,10 +550,20 @@ class _HeroAttributeRowState extends State<_HeroAttributeRow> { labelText: AppLocalizations.of(context).attributeCurrentValue, ), ); - final rowLabel = Text( - widget.label, - style: Theme.of(context).textTheme.labelLarge, - ); + // The label carries the explanation of what the value does in the + // game; rows we have nothing to say about stay plain text. + final Widget rowLabel = widget.tooltip.isEmpty + ? Text( + widget.label, + style: Theme.of(context).textTheme.labelLarge, + ) + : Tooltip( + message: widget.tooltip, + child: Text( + widget.label, + style: Theme.of(context).textTheme.labelLarge, + ), + ); if (compact) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, diff --git a/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart b/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart index 17a19d158..f4f3133d7 100644 --- a/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart +++ b/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart @@ -88,6 +88,7 @@ class NpcAttributesPanel extends StatefulWidget { this.initialPending, this.skillsSection, this.attributeLabel, + this.attributeTooltip, }); final Future Function() load; @@ -126,6 +127,9 @@ class NpcAttributesPanel extends StatefulWidget { /// available. final AttributeLabelResolver? attributeLabel; + /// Resolves an attribute to a one-sentence explanation for its label tooltip. + final AttributeLabelResolver? attributeTooltip; + @override State createState() => _NpcAttributesPanelState(); } @@ -156,6 +160,9 @@ class _NpcAttributesPanelState extends State { HeroAttributeGroup.resistances => l10n.heroGroupResistances, // NPC thieving group is repurposed to host the skills editor. HeroAttributeGroup.thieving => l10n.heroGroupSkills, + HeroAttributeGroup.diving => l10n.heroGroupDiving, + HeroAttributeGroup.sleep => l10n.heroGroupSleep, + HeroAttributeGroup.intoxication => l10n.heroGroupIntoxication, HeroAttributeGroup.advanced => l10n.heroGroupAdvanced, }; @@ -164,6 +171,9 @@ class _NpcAttributesPanelState extends State { HeroAttributeGroup.combat => Icons.shield_outlined, HeroAttributeGroup.resistances => Icons.security_outlined, HeroAttributeGroup.thieving => Icons.military_tech_outlined, + HeroAttributeGroup.diving => Icons.scuba_diving_outlined, + HeroAttributeGroup.sleep => Icons.bedtime_outlined, + HeroAttributeGroup.intoxication => Icons.local_bar_outlined, HeroAttributeGroup.advanced => Icons.tune, }; @@ -425,6 +435,9 @@ class _NpcAttributesPanelState extends State { key: ValueKey((widget.reloadKey, a.key, a.basePath)), attribute: a, label: _displayLabel(a), + tooltip: + widget.attributeTooltip?.call(a.key, _setClassFromPaths(a)) ?? + '', editable: widget.editable, initialBaseText: _pending[_pathKey(a.basePath)], initialCurrentText: _pending[_pathKey(a.currentPath)], @@ -575,6 +588,7 @@ class _NpcAttributeRow extends StatefulWidget { super.key, required this.attribute, required this.label, + this.tooltip = '', required this.editable, required this.onBaseChanged, required this.onCurrentChanged, @@ -584,6 +598,9 @@ class _NpcAttributeRow extends StatefulWidget { final NpcAttributeRow attribute; final String label; + + /// One sentence on what this value does in the game. Empty = no tooltip. + final String tooltip; final bool editable; final ValueChanged onBaseChanged; final ValueChanged onCurrentChanged; @@ -651,10 +668,20 @@ class _NpcAttributeRowState extends State<_NpcAttributeRow> { labelText: AppLocalizations.of(context).attributeCurrentValue, ), ); - final rowLabel = Text( - widget.label, - style: Theme.of(context).textTheme.labelLarge, - ); + // The label carries the explanation of what the value does in the + // game; rows we have nothing to say about stay plain text. + final Widget rowLabel = widget.tooltip.isEmpty + ? Text( + widget.label, + style: Theme.of(context).textTheme.labelLarge, + ) + : Tooltip( + message: widget.tooltip, + child: Text( + widget.label, + style: Theme.of(context).textTheme.labelLarge, + ), + ); if (compact) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, diff --git a/apps/save-editor/lib/l10n/app_de.arb b/apps/save-editor/lib/l10n/app_de.arb index 614d62b6e..e101368ae 100644 --- a/apps/save-editor/lib/l10n/app_de.arb +++ b/apps/save-editor/lib/l10n/app_de.arb @@ -487,6 +487,9 @@ "heroGroupResistances": "Widerstände", "heroGroupThieving": "Diebeskunst", "heroGroupAdvanced": "Erweitert", + "heroGroupDiving": "Tauchen", + "heroGroupSleep": "Schlafen & Rasten", + "heroGroupIntoxication": "Rausch", "heroEntryHeroTransform": "Position", "attributeEmpty": "{name} ist leer — gib einen Wert ein oder stelle den ursprünglichen Wert wieder her, bevor du speicherst.", "attributeInvalidNumber": "Ungültige Zahl für {name}: „{text}“", @@ -573,7 +576,8 @@ "fallbackObjective": "Ziel", "fallbackItem": "Gegenstand", "attributeSkillPointsFallback": "Lernpunkte (LP)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Alkohol} AlcoholDepletionRate{Alkohol-Abbaurate} MaxAlcohol{Maximaler Alkoholwert} MaxSuperArmor{Maximale Superrüstung} SuperArmor{Superrüstung} Fatigue{Erschöpfung} FillRatio{Füllverhältnis} FillRatioPeriod{Zeitraum des Füllverhältnisses} MaxFatigue{Maximale Erschöpfung} MaxThresholdIndex{Maximaler Schwellenindex} RecoveryRatePerHourOfSleep{Erholung pro Schlafstunde} DamageMultiplier{Schadensmultiplikator} Toughness{Zähigkeit} ToughnessA{Zähigkeit A} ToughnessB{Zähigkeit B} ToughnessC{Zähigkeit C} XPExecutedBounty{EP-Belohnung für Hinrichtungen} XPKillOrDefeatBounty{EP-Belohnung für Tötungen oder Niederlagen} SpeedModifier{Geschwindigkeitsmodifikator} CriticalLevelPercent{Kritische Stufe (%)} MaxOxygen{Maximaler Sauerstoffwert} Oxygen{Sauerstoff} OxygenDepletionRate{Sauerstoff-Abbaurate} OxygenRecoveryRate{Sauerstoff-Erholungsrate} MaxRestTime{Maximale Ruhezeit} MaxSleepTime{Maximale Schlafzeit} SleepTime{Schlafzeit} SleepTimeRecoveryAmount{Schlafzeit-Erholungsmenge} SleepTimeRecoveryPeriod{Schlafzeit-Erholungsintervall} MaxSwampweed{Maximaler Sumpfkrautwert} Swampweed{Sumpfkraut} SwampweedDepletionRate{Sumpfkraut-Abbaurate} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Standfestigkeit} MaxSuperArmor{Max. Standfestigkeit} DamageMultiplier{Erlittener Schaden} SpeedModifier{Bewegungstempo} Oxygen{Atemluft} MaxOxygen{Max. Atemluft} OxygenDepletionRate{Luftverbrauch pro Sekunde} OxygenRecoveryRate{Lufterholung pro Sekunde} CriticalLevelPercent{Warnschwelle Atemluft} SleepTime{Erholsame Stunden übrig} MaxSleepTime{Max. erholsame Stunden} SleepTimeRecoveryAmount{Auffüllmenge} SleepTimeRecoveryPeriod{Auffüllintervall} MaxRestTime{Max. Zeit im Bett} Health_RecoveryRatePerHourOfSleep{Leben je Schlafstunde} Mana_RecoveryRatePerHourOfSleep{Mana je Schlafstunde} Alcohol{Alkoholpegel} MaxAlcohol{Max. Alkoholpegel} AlcoholDepletionRate{Ausnüchterungstempo} Swampweed{Sumpfkrautpegel} MaxSwampweed{Max. Sumpfkrautpegel} SwampweedDepletionRate{Abbautempo} XPExecutedBounty{EP fürs Hinrichten} XPKillOrDefeatBounty{EP fürs Töten} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Wie viel der Held einsteckt, bevor ihn ein Treffer aus dem Tritt bringt.} MaxSuperArmor{Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.} DamageMultiplier{Faktor auf den Schaden, den der Held nimmt — 1 ist normal, höher tut mehr weh.} SpeedModifier{Faktor darauf, wie schnell sich der Held bewegt — 1 ist normal.} Oxygen{Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt der Held.} MaxOxygen{Wie viele Sekunden der Held unter Wasser bleiben kann; das Talent Tauchen erhöht das.} OxygenDepletionRate{Wie viel Luft unter Wasser je Sekunde verbraucht wird.} OxygenRecoveryRate{Wie viel Luft nach dem Auftauchen je Sekunde zurückkommt.} CriticalLevelPercent{Anteil der Restluft, ab dem das Spiel vor dem Ertrinken warnt.} SleepTime{Schlafstunden, die noch etwas bringen; darüber hinaus gibt es keine Regeneration.} MaxSleepTime{Das größte Guthaben an erholsamen Stunden.} SleepTimeRecoveryAmount{Erholsame Stunden, die bei jeder Auffüllung zurückkommen.} SleepTimeRecoveryPeriod{Wie lange es dauert, bis das Guthaben wieder aufgefüllt wird.} MaxRestTime{Die längste Zeit, die am Stück im Bett verbracht werden kann.} Health_RecoveryRatePerHourOfSleep{Anteil der maximalen Lebenspunkte, der je geschlafener Stunde zurückkommt.} Mana_RecoveryRatePerHourOfSleep{Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.} Alcohol{Wie betrunken der Held ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.} MaxAlcohol{Der höchste Alkoholpegel, den der Held erreichen kann.} AlcoholDepletionRate{Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.} Swampweed{Wie berauscht der Held ist; die höheren Stufen verschieben seine Werte.} MaxSwampweed{Der höchste Sumpfkrautpegel, den der Held erreichen kann.} SwampweedDepletionRate{Wie schnell der Sumpfkrautrausch nachlässt.} XPExecutedBounty{Erfahrung, die das Hinrichten dieser Figur einbringt.} XPKillOrDefeatBounty{Erfahrung, die das Töten oder Besiegen dieser Figur einbringt.} other{?}}", "knowledgeTypeVoiceLine": "Sprachzeile", "knowledgeTypeOther": "Sonstiges", "armorUpgradeUpper": "Oben", diff --git a/apps/save-editor/lib/l10n/app_en.arb b/apps/save-editor/lib/l10n/app_en.arb index f994aabcd..f663aea09 100644 --- a/apps/save-editor/lib/l10n/app_en.arb +++ b/apps/save-editor/lib/l10n/app_en.arb @@ -842,6 +842,9 @@ "heroGroupResistances": "Resistances", "heroGroupThieving": "Thieving", "heroGroupAdvanced": "Advanced", + "heroGroupDiving": "Diving", + "heroGroupSleep": "Sleep & rest", + "heroGroupIntoxication": "Intoxication", "heroEntryHeroTransform": "Position", "attributeEmpty": "{name} is empty — enter a value or restore the original before saving.", "@attributeEmpty": { @@ -999,8 +1002,10 @@ "fallbackObjective": "Objective", "fallbackItem": "Item", "attributeSkillPointsFallback": "Skill points (LP)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Alcohol} AlcoholDepletionRate{Alcohol depletion rate} MaxAlcohol{Maximum alcohol} MaxSuperArmor{Maximum super armor} SuperArmor{Super armor} Fatigue{Fatigue} FillRatio{Fill ratio} FillRatioPeriod{Fill ratio period} MaxFatigue{Maximum fatigue} MaxThresholdIndex{Maximum threshold index} RecoveryRatePerHourOfSleep{Recovery per hour of sleep} DamageMultiplier{Damage multiplier} Toughness{Toughness} ToughnessA{Toughness A} ToughnessB{Toughness B} ToughnessC{Toughness C} XPExecutedBounty{Execution XP reward} XPKillOrDefeatBounty{Kill or defeat XP reward} SpeedModifier{Speed modifier} CriticalLevelPercent{Critical level (%)} MaxOxygen{Maximum oxygen} Oxygen{Oxygen} OxygenDepletionRate{Oxygen depletion rate} OxygenRecoveryRate{Oxygen recovery rate} MaxRestTime{Maximum rest time} MaxSleepTime{Maximum sleep time} SleepTime{Sleep time} SleepTimeRecoveryAmount{Sleep recovery amount} SleepTimeRecoveryPeriod{Sleep recovery period} MaxSwampweed{Maximum swampweed} Swampweed{Swampweed} SwampweedDepletionRate{Swampweed depletion rate} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for executing} XPKillOrDefeatBounty{XP for killing} other{{fallback}}}", "@attributeManualFallbackLabel": {"placeholders": {"attributeId": {"type": "String"}, "fallback": {"type": "String"}}}, + "attributeManualTooltip": "{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience awarded to whoever executes this character.} XPKillOrDefeatBounty{Experience awarded to whoever kills or defeats this character.} other{?}}", + "@attributeManualTooltip": {"placeholders": {"attributeId": {"type": "String"}}}, "knowledgeTypeVoiceLine": "Voice line", "knowledgeTypeOther": "Other", "armorUpgradeUpper": "Upper", diff --git a/apps/save-editor/lib/l10n/app_es.arb b/apps/save-editor/lib/l10n/app_es.arb index 39e88f995..8241f18cd 100644 --- a/apps/save-editor/lib/l10n/app_es.arb +++ b/apps/save-editor/lib/l10n/app_es.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Resistencias", "heroGroupThieving": "Robo", "heroGroupAdvanced": "Avanzado", + "heroGroupDiving": "Buceo", + "heroGroupSleep": "Sueño y descanso", + "heroGroupIntoxication": "Embriaguez", "heroEntryHeroTransform": "Posición", "attributeEmpty": "{name} está vacío: introduce un valor o restaura el original antes de guardar.", "attributeInvalidNumber": "Número no válido para {name}: «{text}»", @@ -573,7 +576,8 @@ "fallbackObjective": "Objetivo", "fallbackItem": "Objeto", "attributeSkillPointsFallback": "Puntos de aprendizaje (PA)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Alcohol} AlcoholDepletionRate{Tasa de reducción de alcohol} MaxAlcohol{Nivel máximo de alcohol} MaxSuperArmor{Superarmadura máxima} SuperArmor{Superarmadura} Fatigue{Fatiga} FillRatio{Proporción de llenado} FillRatioPeriod{Periodo de llenado} MaxFatigue{Fatiga máxima} MaxThresholdIndex{Índice de umbral máximo} RecoveryRatePerHourOfSleep{Recuperación por hora de sueño} DamageMultiplier{Multiplicador de daño} Toughness{Tenacidad} ToughnessA{Tenacidad A} ToughnessB{Tenacidad B} ToughnessC{Tenacidad C} XPExecutedBounty{Recompensa de EXP por ejecución} XPKillOrDefeatBounty{Recompensa de EXP por muerte o derrota} SpeedModifier{Modificador de velocidad} CriticalLevelPercent{Nivel crítico (%)} MaxOxygen{Oxígeno máximo} Oxygen{Oxígeno} OxygenDepletionRate{Tasa de consumo de oxígeno} OxygenRecoveryRate{Tasa de recuperación de oxígeno} MaxRestTime{Tiempo máximo de descanso} MaxSleepTime{Tiempo máximo de sueño} SleepTime{Tiempo de sueño} SleepTimeRecoveryAmount{Cantidad recuperada durante el sueño} SleepTimeRecoveryPeriod{Intervalo de recuperación durante el sueño} MaxSwampweed{Cantidad máxima de hierba de pantano} Swampweed{Hierba de pantano} SwampweedDepletionRate{Tasa de consumo de hierba de pantano} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Aplomo} MaxSuperArmor{Aplomo máx.} DamageMultiplier{Daño recibido} SpeedModifier{Velocidad de movimiento} Oxygen{Aire} MaxOxygen{Aire máx.} OxygenDepletionRate{Aire gastado por segundo} OxygenRecoveryRate{Aire recuperado por seg.} CriticalLevelPercent{Aviso de falta de aire} SleepTime{Horas reparadoras rest.} MaxSleepTime{Máx. horas reparadoras} SleepTimeRecoveryAmount{Horas que se recuperan} SleepTimeRecoveryPeriod{Intervalo de recarga} MaxRestTime{Máx. tiempo en la cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sueño} Mana_RecoveryRatePerHourOfSleep{Maná por hora de sueño} Alcohol{Nivel de alcohol} MaxAlcohol{Nivel de alcohol máx.} AlcoholDepletionRate{Velocidad para despejarse} Swampweed{Nivel de hierba de pantano} MaxSwampweed{Máx. hierba de pantano} SwampweedDepletionRate{Velocidad del bajón} XPExecutedBounty{EXP por ejecutar} XPKillOrDefeatBounty{EXP por matar} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Cuánto castigo aguanta el héroe antes de que un golpe lo haga tambalearse.} MaxSuperArmor{La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.} DamageMultiplier{Factor que se aplica al daño que recibe el héroe: 1 es lo normal, y cuanto más alto, más duele.} SpeedModifier{Factor sobre lo rápido que se mueve el héroe: 1 es lo normal.} Oxygen{Segundos de aire que quedan bajo el agua; al llegar a cero el héroe se ahoga.} MaxOxygen{Cuántos segundos puede aguantar el héroe bajo el agua; la habilidad Buceo lo aumenta.} OxygenDepletionRate{Aire que se consume cada segundo bajo el agua.} OxygenRecoveryRate{Aire que se recupera cada segundo al salir a la superficie.} CriticalLevelPercent{Porcentaje de aire restante con el que el juego avisa del peligro de ahogarse.} SleepTime{Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.} MaxSleepTime{El mayor número de horas reparadoras que puede acumular el héroe.} SleepTimeRecoveryAmount{Horas reparadoras que se devuelven cada vez que se rellena la reserva.} SleepTimeRecoveryPeriod{Cuánto tarda la reserva de horas reparadoras en volver a llenarse.} MaxRestTime{El tiempo más largo que el juego permite pasar en la cama de una sola vez.} Health_RecoveryRatePerHourOfSleep{Porcentaje de la vida máxima que se recupera por cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Porcentaje del maná máximo que se recupera por cada hora dormida.} Alcohol{Lo borracho que está el héroe; los niveles altos cambian destreza y maná por fuerza.} MaxAlcohol{El nivel de alcohol más alto que puede alcanzar el héroe.} AlcoholDepletionRate{Con qué rapidez baja el nivel de alcohol hacia la sobriedad.} Swampweed{Lo colocado que está el héroe; los niveles altos le mueven los atributos.} MaxSwampweed{El nivel de hierba de pantano más alto que puede alcanzar el héroe.} SwampweedDepletionRate{Con qué rapidez se pasa el efecto de la hierba de pantano.} XPExecutedBounty{Experiencia que recibe quien ejecuta a este personaje.} XPKillOrDefeatBounty{Experiencia que recibe quien mata o derrota a este personaje.} other{?}}", "knowledgeTypeVoiceLine": "Línea de voz", "knowledgeTypeOther": "Otro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_fr.arb b/apps/save-editor/lib/l10n/app_fr.arb index 203a820bc..d0c4ccb6c 100644 --- a/apps/save-editor/lib/l10n/app_fr.arb +++ b/apps/save-editor/lib/l10n/app_fr.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Résistances", "heroGroupThieving": "Vol", "heroGroupAdvanced": "Avancé", + "heroGroupDiving": "Plongée", + "heroGroupSleep": "Sommeil et repos", + "heroGroupIntoxication": "Ivresse", "heroEntryHeroTransform": "Position", "attributeEmpty": "{name} est vide — saisissez une valeur ou restaurez la valeur d'origine avant d'enregistrer.", "attributeInvalidNumber": "Nombre invalide pour {name} : « {text} »", @@ -573,7 +576,8 @@ "fallbackObjective": "Objectif", "fallbackItem": "Objet", "attributeSkillPointsFallback": "Points d’apprentissage (PA)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Alcool} AlcoholDepletionRate{Taux d’élimination de l’alcool} MaxAlcohol{Niveau maximal d’alcool} MaxSuperArmor{Super-armure maximale} SuperArmor{Super-armure} Fatigue{Fatigue} FillRatio{Taux de remplissage} FillRatioPeriod{Période de remplissage} MaxFatigue{Fatigue maximale} MaxThresholdIndex{Indice de seuil maximal} RecoveryRatePerHourOfSleep{Récupération par heure de sommeil} DamageMultiplier{Multiplicateur de dégâts} Toughness{Robustesse} ToughnessA{Robustesse A} ToughnessB{Robustesse B} ToughnessC{Robustesse C} XPExecutedBounty{Récompense d’EXP pour une exécution} XPKillOrDefeatBounty{Récompense d’EXP pour une élimination ou une défaite} SpeedModifier{Modificateur de vitesse} CriticalLevelPercent{Niveau critique (%)} MaxOxygen{Oxygène maximal} Oxygen{Oxygène} OxygenDepletionRate{Taux d’épuisement de l’oxygène} OxygenRecoveryRate{Taux de récupération de l’oxygène} MaxRestTime{Temps de repos maximal} MaxSleepTime{Temps de sommeil maximal} SleepTime{Temps de sommeil} SleepTimeRecoveryAmount{Quantité récupérée pendant le sommeil} SleepTimeRecoveryPeriod{Intervalle de récupération pendant le sommeil} MaxSwampweed{Quantité maximale d’herbe des marais} Swampweed{Herbe des marais} SwampweedDepletionRate{Taux d’épuisement de l’herbe des marais} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Stabilité} MaxSuperArmor{Stabilité max.} DamageMultiplier{Dégâts subis} SpeedModifier{Vitesse de déplacement} Oxygen{Souffle} MaxOxygen{Souffle max.} OxygenDepletionRate{Air consommé par seconde} OxygenRecoveryRate{Air récupéré par seconde} CriticalLevelPercent{Seuil d'alerte du souffle} SleepTime{Heures de repos restantes} MaxSleepTime{Heures de repos max.} SleepTimeRecoveryAmount{Heures de repos rendues} SleepTimeRecoveryPeriod{Intervalle de recharge} MaxRestTime{Temps max. au lit} Health_RecoveryRatePerHourOfSleep{Vie par heure de sommeil} Mana_RecoveryRatePerHourOfSleep{Mana par heure de sommeil} Alcohol{Taux d'alcool} MaxAlcohol{Taux d'alcool max.} AlcoholDepletionRate{Vitesse de dégrisement} Swampweed{Niveau d'herbe des marais} MaxSwampweed{Herbe des marais max.} SwampweedDepletionRate{Vitesse de dissipation} XPExecutedBounty{XP pour l'exécution} XPKillOrDefeatBounty{XP pour la mise à mort} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Ce que le héros encaisse avant qu'un coup ne le déséquilibre.} MaxSuperArmor{La réserve complète de stabilité ; elle augmente avec le niveau et avec l'armure portée.} DamageMultiplier{Facteur appliqué aux dégâts que subit le héros — 1 est la normale, plus haut fait plus mal.} SpeedModifier{Facteur appliqué à la vitesse de déplacement du héros — 1 est la normale.} Oxygen{Secondes d'air qu'il reste sous l'eau ; à zéro, le héros se noie.} MaxOxygen{Combien de secondes le héros peut rester sous l'eau ; le talent Plongée augmente cette durée.} OxygenDepletionRate{Air consommé chaque seconde sous l'eau.} OxygenRecoveryRate{Air qui revient chaque seconde une fois de retour à la surface.} CriticalLevelPercent{Part d'air restant à partir de laquelle le jeu prévient du risque de noyade.} SleepTime{Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n'accorde plus de récupération.} MaxSleepTime{La plus grande réserve d'heures de repos que le héros peut avoir.} SleepTimeRecoveryAmount{Heures de repos qui reviennent à chaque recharge.} SleepTimeRecoveryPeriod{Le temps qu'il faut pour que la réserve d'heures de repos se remplisse à nouveau.} MaxRestTime{La plus longue durée que le héros peut passer au lit d'une traite.} Health_RecoveryRatePerHourOfSleep{Part des points de vie maximum rendue pour chaque heure de sommeil.} Mana_RecoveryRatePerHourOfSleep{Part du mana maximum rendue pour chaque heure de sommeil.} Alcohol{À quel point le héros est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.} MaxAlcohol{Le taux d'alcool le plus élevé que le héros peut atteindre.} AlcoholDepletionRate{À quelle vitesse le taux d'alcool redescend vers la sobriété.} Swampweed{À quel point le héros plane ; aux paliers élevés, ses caractéristiques sont chamboulées.} MaxSwampweed{Le niveau d'herbe des marais le plus élevé que le héros peut atteindre.} SwampweedDepletionRate{À quelle vitesse l'effet de l'herbe des marais se dissipe.} XPExecutedBounty{Expérience accordée à celui qui exécute ce personnage.} XPKillOrDefeatBounty{Expérience accordée à celui qui tue ou vainc ce personnage.} other{?}}", "knowledgeTypeVoiceLine": "Réplique vocale", "knowledgeTypeOther": "Autre", "armorUpgradeUpper": "Haut", diff --git a/apps/save-editor/lib/l10n/app_it.arb b/apps/save-editor/lib/l10n/app_it.arb index a92b6738e..f7c6fa289 100644 --- a/apps/save-editor/lib/l10n/app_it.arb +++ b/apps/save-editor/lib/l10n/app_it.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Resistenze", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avanzate", + "heroGroupDiving": "Immersione", + "heroGroupSleep": "Sonno e riposo", + "heroGroupIntoxication": "Ebbrezza", "heroEntryHeroTransform": "Posizione", "attributeEmpty": "{name} è vuoto — inserisci un valore o ripristina quello originale prima di salvare.", "attributeInvalidNumber": "Numero non valido per {name}: «{text}»", @@ -573,7 +576,8 @@ "fallbackObjective": "Obiettivo", "fallbackItem": "Oggetto", "attributeSkillPointsFallback": "Punti apprendimento (PA)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Alcol} AlcoholDepletionRate{Tasso di smaltimento dell’alcol} MaxAlcohol{Livello massimo di alcol} MaxSuperArmor{Super armatura massima} SuperArmor{Super armatura} Fatigue{Fatica} FillRatio{Rapporto di riempimento} FillRatioPeriod{Periodo di riempimento} MaxFatigue{Fatica massima} MaxThresholdIndex{Indice soglia massimo} RecoveryRatePerHourOfSleep{Recupero per ora di sonno} DamageMultiplier{Moltiplicatore danni} Toughness{Tenacia} ToughnessA{Tenacia A} ToughnessB{Tenacia B} ToughnessC{Tenacia C} XPExecutedBounty{Ricompensa PE per esecuzione} XPKillOrDefeatBounty{Ricompensa PE per uccisione o sconfitta} SpeedModifier{Modificatore velocità} CriticalLevelPercent{Livello critico (%)} MaxOxygen{Ossigeno massimo} Oxygen{Ossigeno} OxygenDepletionRate{Tasso di consumo dell’ossigeno} OxygenRecoveryRate{Tasso di recupero dell’ossigeno} MaxRestTime{Tempo massimo di riposo} MaxSleepTime{Tempo massimo di sonno} SleepTime{Tempo di sonno} SleepTimeRecoveryAmount{Quantità recuperata durante il sonno} SleepTimeRecoveryPeriod{Intervallo di recupero durante il sonno} MaxSwampweed{Quantità massima di erba palustre} Swampweed{Erba palustre} SwampweedDepletionRate{Tasso di consumo dell’erba palustre} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Equilibrio} MaxSuperArmor{Equilibrio max.} DamageMultiplier{Danno subito} SpeedModifier{Velocità di movimento} Oxygen{Fiato} MaxOxygen{Fiato max.} OxygenDepletionRate{Fiato consumato al secondo} OxygenRecoveryRate{Fiato recuperato al secondo} CriticalLevelPercent{Avviso di fiato basso} SleepTime{Ore di riposo rimaste} MaxSleepTime{Ore di riposo max.} SleepTimeRecoveryAmount{Ore di riposo recuperate} SleepTimeRecoveryPeriod{Intervallo di ricarica} MaxRestTime{Tempo max. a letto} Health_RecoveryRatePerHourOfSleep{Vita per ora di sonno} Mana_RecoveryRatePerHourOfSleep{Mana per ora di sonno} Alcohol{Livello di alcol} MaxAlcohol{Livello di alcol max.} AlcoholDepletionRate{Smaltimento dell'alcol} Swampweed{Livello di erba palustre} MaxSwampweed{Erba palustre max.} SwampweedDepletionRate{Smaltimento dell'erba} XPExecutedBounty{PE per l'esecuzione} XPKillOrDefeatBounty{PE per l'uccisione} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto incassa l'eroe prima che un colpo lo faccia barcollare.} MaxSuperArmor{La riserva completa di equilibrio; cresce con il livello e con l'armatura indossata.} DamageMultiplier{Fattore applicato al danno che l'eroe subisce: 1 è normale, valori più alti fanno più male.} SpeedModifier{Fattore sulla velocità con cui l'eroe si muove: 1 è normale.} Oxygen{Secondi d'aria rimasti sott'acqua; a zero l'eroe annega.} MaxOxygen{Per quanti secondi l'eroe può restare sott'acqua; l'abilità Immersione lo aumenta.} OxygenDepletionRate{Aria consumata ogni secondo sott'acqua.} OxygenRecoveryRate{Aria che torna ogni secondo dopo essere riemersi.} CriticalLevelPercent{Percentuale d'aria residua alla quale il gioco avverte del pericolo di annegamento.} SleepTime{Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.} MaxSleepTime{La riserva massima di ore di riposo che l'eroe può accumulare.} SleepTimeRecoveryAmount{Ore di riposo che tornano a ogni ricarica.} SleepTimeRecoveryPeriod{Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.} MaxRestTime{Il tempo più lungo che si può passare a letto in una volta sola.} Health_RecoveryRatePerHourOfSleep{Quota della vita massima che torna per ogni ora dormita.} Mana_RecoveryRatePerHourOfSleep{Quota del mana massimo che torna per ogni ora dormita.} Alcohol{Quanto è ubriaco l'eroe; ai livelli più alti scambia destrezza e mana con forza.} MaxAlcohol{Il livello di alcol più alto che l'eroe può raggiungere.} AlcoholDepletionRate{Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.} Swampweed{Quanto è sballato l'eroe; ai livelli più alti i suoi valori si spostano.} MaxSwampweed{Il livello di erba palustre più alto che l'eroe può raggiungere.} SwampweedDepletionRate{Quanto in fretta svanisce lo sballo da erba palustre.} XPExecutedBounty{Esperienza che ottiene chi giustizia questo personaggio.} XPKillOrDefeatBounty{Esperienza che ottiene chi uccide o sconfigge questo personaggio.} other{?}}", "knowledgeTypeVoiceLine": "Battuta vocale", "knowledgeTypeOther": "Altro", "armorUpgradeUpper": "Superiore", diff --git a/apps/save-editor/lib/l10n/app_ja.arb b/apps/save-editor/lib/l10n/app_ja.arb index c3f89b7d9..0017c4d26 100644 --- a/apps/save-editor/lib/l10n/app_ja.arb +++ b/apps/save-editor/lib/l10n/app_ja.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "耐性", "heroGroupThieving": "盗み", "heroGroupAdvanced": "詳細設定", + "heroGroupDiving": "潜水", + "heroGroupSleep": "睡眠と休息", + "heroGroupIntoxication": "酩酊", "heroEntryHeroTransform": "位置", "attributeEmpty": "{name} が空です — 値を入力するか、保存前に元の値を復元してください。", "attributeInvalidNumber": "{name} の数値が無効です: 「{text}」", @@ -573,7 +576,8 @@ "fallbackObjective": "目標", "fallbackItem": "アイテム", "attributeSkillPointsFallback": "スキルポイント(LP)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{アルコール} AlcoholDepletionRate{アルコール減少速度} MaxAlcohol{最大アルコール値} MaxSuperArmor{最大スーパーアーマー} SuperArmor{スーパーアーマー} Fatigue{疲労} FillRatio{充填率} FillRatioPeriod{充填周期} MaxFatigue{最大疲労} MaxThresholdIndex{最大しきい値インデックス} RecoveryRatePerHourOfSleep{睡眠1時間あたりの回復量} DamageMultiplier{ダメージ倍率} Toughness{強靭度} ToughnessA{強靭度 A} ToughnessB{強靭度 B} ToughnessC{強靭度 C} XPExecutedBounty{処刑時のXP報酬} XPKillOrDefeatBounty{撃破時のXP報酬} SpeedModifier{速度補正} CriticalLevelPercent{クリティカルレベル(%)} MaxOxygen{最大酸素量} Oxygen{酸素} OxygenDepletionRate{酸素消費速度} OxygenRecoveryRate{酸素回復速度} MaxRestTime{最大休息時間} MaxSleepTime{最大睡眠時間} SleepTime{睡眠時間} SleepTimeRecoveryAmount{睡眠回復量} SleepTimeRecoveryPeriod{睡眠回復周期} MaxSwampweed{最大沼地草量} Swampweed{沼地草} SwampweedDepletionRate{沼地草消費速度} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{強靭度} MaxSuperArmor{最大強靭度} DamageMultiplier{被ダメージ倍率} SpeedModifier{移動速度} Oxygen{息} MaxOxygen{息の最大値} OxygenDepletionRate{息の消費(毎秒)} OxygenRecoveryRate{息の回復(毎秒)} CriticalLevelPercent{息切れの警告} SleepTime{残りの快眠時間} MaxSleepTime{最大の快眠時間} SleepTimeRecoveryAmount{快眠時間の回復量} SleepTimeRecoveryPeriod{補充の間隔} MaxRestTime{ベッドにいられる最大時間} Health_RecoveryRatePerHourOfSleep{睡眠1時間あたりの体力} Mana_RecoveryRatePerHourOfSleep{睡眠1時間あたりのマナ} Alcohol{酔いの度合い} MaxAlcohol{酔いの最大値} AlcoholDepletionRate{酔いが覚める速さ} Swampweed{沼地草の酔い} MaxSwampweed{沼地草の酔いの最大値} SwampweedDepletionRate{酔いが抜ける速さ} XPExecutedBounty{処刑で得る経験値} XPKillOrDefeatBounty{撃破で得る経験値} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{一撃で怯まされるまでに、ヒーローがどれだけ攻撃に耐えられるか。} MaxSuperArmor{強靭度の総量で、レベルと身に着けた鎧に応じて増える。} DamageMultiplier{ヒーローが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。} SpeedModifier{ヒーローの移動の速さにかかる倍率で、1が標準。} Oxygen{水中に残っている息の秒数で、ゼロになると溺れる。} MaxOxygen{水中にいられる秒数で、潜水スキルを上げると伸びる。} OxygenDepletionRate{水中で1秒ごとに減っていく息の量。} OxygenRecoveryRate{水面に上がってから1秒ごとに戻る息の量。} CriticalLevelPercent{残りの息がこの割合まで減ると、溺れる危険を知らせる。} SleepTime{まだ回復につながる睡眠時間で、これを超えて眠っても回復はない。} MaxSleepTime{ためておける快眠時間の上限。} SleepTimeRecoveryAmount{補充のたびに戻ってくる快眠時間。} SleepTimeRecoveryPeriod{快眠時間が次に補充されるまでにかかる時間。} MaxRestTime{一度に続けてベッドで過ごせる最長の時間。} Health_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大体力の割合。} Mana_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大マナの割合。} Alcohol{どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。} MaxAlcohol{ヒーローが到達できる酔いの度合いの上限。} AlcoholDepletionRate{酔いがどれだけ早く覚めていくか。} Swampweed{どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。} MaxSwampweed{ヒーローが到達できる沼地草の酔いの上限。} SwampweedDepletionRate{沼地草の酔いがどれだけ早く抜けるか。} XPExecutedBounty{このキャラクターを処刑した者が得る経験値。} XPKillOrDefeatBounty{このキャラクターを倒すか打ち負かした者が得る経験値。} other{?}}", "knowledgeTypeVoiceLine": "ボイスライン", "knowledgeTypeOther": "その他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/l10n/app_localizations.dart b/apps/save-editor/lib/l10n/app_localizations.dart index 1ff30a236..a944ea1cb 100644 --- a/apps/save-editor/lib/l10n/app_localizations.dart +++ b/apps/save-editor/lib/l10n/app_localizations.dart @@ -2960,6 +2960,24 @@ abstract class AppLocalizations { /// **'Advanced'** String get heroGroupAdvanced; + /// No description provided for @heroGroupDiving. + /// + /// In en, this message translates to: + /// **'Diving'** + String get heroGroupDiving; + + /// No description provided for @heroGroupSleep. + /// + /// In en, this message translates to: + /// **'Sleep & rest'** + String get heroGroupSleep; + + /// No description provided for @heroGroupIntoxication. + /// + /// In en, this message translates to: + /// **'Intoxication'** + String get heroGroupIntoxication; + /// No description provided for @heroEntryHeroTransform. /// /// In en, this message translates to: @@ -3479,9 +3497,15 @@ abstract class AppLocalizations { /// No description provided for @attributeManualFallbackLabel. /// /// In en, this message translates to: - /// **'{attributeId, select, Alcohol{Alcohol} AlcoholDepletionRate{Alcohol depletion rate} MaxAlcohol{Maximum alcohol} MaxSuperArmor{Maximum super armor} SuperArmor{Super armor} Fatigue{Fatigue} FillRatio{Fill ratio} FillRatioPeriod{Fill ratio period} MaxFatigue{Maximum fatigue} MaxThresholdIndex{Maximum threshold index} RecoveryRatePerHourOfSleep{Recovery per hour of sleep} DamageMultiplier{Damage multiplier} Toughness{Toughness} ToughnessA{Toughness A} ToughnessB{Toughness B} ToughnessC{Toughness C} XPExecutedBounty{Execution XP reward} XPKillOrDefeatBounty{Kill or defeat XP reward} SpeedModifier{Speed modifier} CriticalLevelPercent{Critical level (%)} MaxOxygen{Maximum oxygen} Oxygen{Oxygen} OxygenDepletionRate{Oxygen depletion rate} OxygenRecoveryRate{Oxygen recovery rate} MaxRestTime{Maximum rest time} MaxSleepTime{Maximum sleep time} SleepTime{Sleep time} SleepTimeRecoveryAmount{Sleep recovery amount} SleepTimeRecoveryPeriod{Sleep recovery period} MaxSwampweed{Maximum swampweed} Swampweed{Swampweed} SwampweedDepletionRate{Swampweed depletion rate} other{{fallback}}}'** + /// **'{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for executing} XPKillOrDefeatBounty{XP for killing} other{{fallback}}}'** String attributeManualFallbackLabel(String attributeId, String fallback); + /// No description provided for @attributeManualTooltip. + /// + /// In en, this message translates to: + /// **'{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience awarded to whoever executes this character.} XPKillOrDefeatBounty{Experience awarded to whoever kills or defeats this character.} other{?}}'** + String attributeManualTooltip(String attributeId); + /// No description provided for @knowledgeTypeVoiceLine. /// /// In en, this message translates to: diff --git a/apps/save-editor/lib/l10n/app_localizations_de.dart b/apps/save-editor/lib/l10n/app_localizations_de.dart index ba2515714..9823d2edb 100644 --- a/apps/save-editor/lib/l10n/app_localizations_de.dart +++ b/apps/save-editor/lib/l10n/app_localizations_de.dart @@ -1676,6 +1676,15 @@ class AppLocalizationsDe extends AppLocalizations { @override String get heroGroupAdvanced => 'Erweitert'; + @override + String get heroGroupDiving => 'Tauchen'; + + @override + String get heroGroupSleep => 'Schlafen & Rasten'; + + @override + String get heroGroupIntoxication => 'Rausch'; + @override String get heroEntryHeroTransform => 'Position'; @@ -1962,43 +1971,88 @@ class AppLocalizationsDe extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Alkohol', - 'AlcoholDepletionRate': 'Alkohol-Abbaurate', - 'MaxAlcohol': 'Maximaler Alkoholwert', - 'MaxSuperArmor': 'Maximale Superrüstung', - 'SuperArmor': 'Superrüstung', - 'Fatigue': 'Erschöpfung', - 'FillRatio': 'Füllverhältnis', - 'FillRatioPeriod': 'Zeitraum des Füllverhältnisses', - 'MaxFatigue': 'Maximale Erschöpfung', - 'MaxThresholdIndex': 'Maximaler Schwellenindex', - 'RecoveryRatePerHourOfSleep': 'Erholung pro Schlafstunde', - 'DamageMultiplier': 'Schadensmultiplikator', - 'Toughness': 'Zähigkeit', - 'ToughnessA': 'Zähigkeit A', - 'ToughnessB': 'Zähigkeit B', - 'ToughnessC': 'Zähigkeit C', - 'XPExecutedBounty': 'EP-Belohnung für Hinrichtungen', - 'XPKillOrDefeatBounty': 'EP-Belohnung für Tötungen oder Niederlagen', - 'SpeedModifier': 'Geschwindigkeitsmodifikator', - 'CriticalLevelPercent': 'Kritische Stufe (%)', - 'MaxOxygen': 'Maximaler Sauerstoffwert', - 'Oxygen': 'Sauerstoff', - 'OxygenDepletionRate': 'Sauerstoff-Abbaurate', - 'OxygenRecoveryRate': 'Sauerstoff-Erholungsrate', - 'MaxRestTime': 'Maximale Ruhezeit', - 'MaxSleepTime': 'Maximale Schlafzeit', - 'SleepTime': 'Schlafzeit', - 'SleepTimeRecoveryAmount': 'Schlafzeit-Erholungsmenge', - 'SleepTimeRecoveryPeriod': 'Schlafzeit-Erholungsintervall', - 'MaxSwampweed': 'Maximaler Sumpfkrautwert', - 'Swampweed': 'Sumpfkraut', - 'SwampweedDepletionRate': 'Sumpfkraut-Abbaurate', + 'SuperArmor': 'Standfestigkeit', + 'MaxSuperArmor': 'Max. Standfestigkeit', + 'DamageMultiplier': 'Erlittener Schaden', + 'SpeedModifier': 'Bewegungstempo', + 'Oxygen': 'Atemluft', + 'MaxOxygen': 'Max. Atemluft', + 'OxygenDepletionRate': 'Luftverbrauch pro Sekunde', + 'OxygenRecoveryRate': 'Lufterholung pro Sekunde', + 'CriticalLevelPercent': 'Warnschwelle Atemluft', + 'SleepTime': 'Erholsame Stunden übrig', + 'MaxSleepTime': 'Max. erholsame Stunden', + 'SleepTimeRecoveryAmount': 'Auffüllmenge', + 'SleepTimeRecoveryPeriod': 'Auffüllintervall', + 'MaxRestTime': 'Max. Zeit im Bett', + 'Health_RecoveryRatePerHourOfSleep': 'Leben je Schlafstunde', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana je Schlafstunde', + 'Alcohol': 'Alkoholpegel', + 'MaxAlcohol': 'Max. Alkoholpegel', + 'AlcoholDepletionRate': 'Ausnüchterungstempo', + 'Swampweed': 'Sumpfkrautpegel', + 'MaxSwampweed': 'Max. Sumpfkrautpegel', + 'SwampweedDepletionRate': 'Abbautempo', + 'XPExecutedBounty': 'EP fürs Hinrichten', + 'XPKillOrDefeatBounty': 'EP fürs Töten', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'Wie viel der Held einsteckt, bevor ihn ein Treffer aus dem Tritt bringt.', + 'MaxSuperArmor': + 'Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.', + 'DamageMultiplier': + 'Faktor auf den Schaden, den der Held nimmt — 1 ist normal, höher tut mehr weh.', + 'SpeedModifier': + 'Faktor darauf, wie schnell sich der Held bewegt — 1 ist normal.', + 'Oxygen': + 'Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt der Held.', + 'MaxOxygen': + 'Wie viele Sekunden der Held unter Wasser bleiben kann; das Talent Tauchen erhöht das.', + 'OxygenDepletionRate': + 'Wie viel Luft unter Wasser je Sekunde verbraucht wird.', + 'OxygenRecoveryRate': + 'Wie viel Luft nach dem Auftauchen je Sekunde zurückkommt.', + 'CriticalLevelPercent': + 'Anteil der Restluft, ab dem das Spiel vor dem Ertrinken warnt.', + 'SleepTime': + 'Schlafstunden, die noch etwas bringen; darüber hinaus gibt es keine Regeneration.', + 'MaxSleepTime': 'Das größte Guthaben an erholsamen Stunden.', + 'SleepTimeRecoveryAmount': + 'Erholsame Stunden, die bei jeder Auffüllung zurückkommen.', + 'SleepTimeRecoveryPeriod': + 'Wie lange es dauert, bis das Guthaben wieder aufgefüllt wird.', + 'MaxRestTime': + 'Die längste Zeit, die am Stück im Bett verbracht werden kann.', + 'Health_RecoveryRatePerHourOfSleep': + 'Anteil der maximalen Lebenspunkte, der je geschlafener Stunde zurückkommt.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.', + 'Alcohol': + 'Wie betrunken der Held ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.', + 'MaxAlcohol': 'Der höchste Alkoholpegel, den der Held erreichen kann.', + 'AlcoholDepletionRate': + 'Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.', + 'Swampweed': + 'Wie berauscht der Held ist; die höheren Stufen verschieben seine Werte.', + 'MaxSwampweed': + 'Der höchste Sumpfkrautpegel, den der Held erreichen kann.', + 'SwampweedDepletionRate': 'Wie schnell der Sumpfkrautrausch nachlässt.', + 'XPExecutedBounty': + 'Erfahrung, die das Hinrichten dieser Figur einbringt.', + 'XPKillOrDefeatBounty': + 'Erfahrung, die das Töten oder Besiegen dieser Figur einbringt.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Sprachzeile'; diff --git a/apps/save-editor/lib/l10n/app_localizations_en.dart b/apps/save-editor/lib/l10n/app_localizations_en.dart index be2667bb5..86712b774 100644 --- a/apps/save-editor/lib/l10n/app_localizations_en.dart +++ b/apps/save-editor/lib/l10n/app_localizations_en.dart @@ -1665,6 +1665,15 @@ class AppLocalizationsEn extends AppLocalizations { @override String get heroGroupAdvanced => 'Advanced'; + @override + String get heroGroupDiving => 'Diving'; + + @override + String get heroGroupSleep => 'Sleep & rest'; + + @override + String get heroGroupIntoxication => 'Intoxication'; + @override String get heroEntryHeroTransform => 'Position'; @@ -1950,43 +1959,82 @@ class AppLocalizationsEn extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Alcohol', - 'AlcoholDepletionRate': 'Alcohol depletion rate', + 'SuperArmor': 'Poise', + 'MaxSuperArmor': 'Maximum poise', + 'DamageMultiplier': 'Damage taken', + 'SpeedModifier': 'Movement speed', + 'Oxygen': 'Breath', + 'MaxOxygen': 'Maximum breath', + 'OxygenDepletionRate': 'Breath used per second', + 'OxygenRecoveryRate': 'Breath regained per second', + 'CriticalLevelPercent': 'Low-breath warning', + 'SleepTime': 'Restful hours left', + 'MaxSleepTime': 'Maximum restful hours', + 'SleepTimeRecoveryAmount': 'Restful hours regained', + 'SleepTimeRecoveryPeriod': 'Refill interval', + 'MaxRestTime': 'Maximum time in bed', + 'Health_RecoveryRatePerHourOfSleep': 'Health per hour of sleep', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana per hour of sleep', + 'Alcohol': 'Alcohol level', 'MaxAlcohol': 'Maximum alcohol', - 'MaxSuperArmor': 'Maximum super armor', - 'SuperArmor': 'Super armor', - 'Fatigue': 'Fatigue', - 'FillRatio': 'Fill ratio', - 'FillRatioPeriod': 'Fill ratio period', - 'MaxFatigue': 'Maximum fatigue', - 'MaxThresholdIndex': 'Maximum threshold index', - 'RecoveryRatePerHourOfSleep': 'Recovery per hour of sleep', - 'DamageMultiplier': 'Damage multiplier', - 'Toughness': 'Toughness', - 'ToughnessA': 'Toughness A', - 'ToughnessB': 'Toughness B', - 'ToughnessC': 'Toughness C', - 'XPExecutedBounty': 'Execution XP reward', - 'XPKillOrDefeatBounty': 'Kill or defeat XP reward', - 'SpeedModifier': 'Speed modifier', - 'CriticalLevelPercent': 'Critical level (%)', - 'MaxOxygen': 'Maximum oxygen', - 'Oxygen': 'Oxygen', - 'OxygenDepletionRate': 'Oxygen depletion rate', - 'OxygenRecoveryRate': 'Oxygen recovery rate', - 'MaxRestTime': 'Maximum rest time', - 'MaxSleepTime': 'Maximum sleep time', - 'SleepTime': 'Sleep time', - 'SleepTimeRecoveryAmount': 'Sleep recovery amount', - 'SleepTimeRecoveryPeriod': 'Sleep recovery period', + 'AlcoholDepletionRate': 'Sobering speed', + 'Swampweed': 'Swampweed level', 'MaxSwampweed': 'Maximum swampweed', - 'Swampweed': 'Swampweed', - 'SwampweedDepletionRate': 'Swampweed depletion rate', + 'SwampweedDepletionRate': 'Wear-off speed', + 'XPExecutedBounty': 'XP for executing', + 'XPKillOrDefeatBounty': 'XP for killing', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'How much punishment the hero absorbs before a hit staggers him.', + 'MaxSuperArmor': + 'The full poise pool; it grows with character level and with worn armour.', + 'DamageMultiplier': + 'Factor applied to the damage the hero takes — 1 is normal, higher hurts more.', + 'SpeedModifier': 'Factor on how fast the hero moves — 1 is normal.', + 'Oxygen': 'Seconds of air left under water; at zero the hero drowns.', + 'MaxOxygen': + 'How many seconds the hero can stay under water; the Diving skill raises it.', + 'OxygenDepletionRate': 'Air used up each second while submerged.', + 'OxygenRecoveryRate': 'Air that comes back each second after surfacing.', + 'CriticalLevelPercent': + 'Share of remaining air at which the game warns of drowning.', + 'SleepTime': + 'Hours of sleep that still restore something; beyond them the game grants no resting bonus.', + 'MaxSleepTime': 'The largest budget of restful hours the hero can hold.', + 'SleepTimeRecoveryAmount': + 'Restful hours added back each time the budget refills.', + 'SleepTimeRecoveryPeriod': + 'How long it takes before the budget of restful hours refills again.', + 'MaxRestTime': 'The longest single stay in bed the game allows.', + 'Health_RecoveryRatePerHourOfSleep': + 'Share of maximum health restored for every hour slept.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Share of maximum mana restored for every hour slept.', + 'Alcohol': + 'How drunk the hero is; the higher tiers trade dexterity and mana for strength.', + 'MaxAlcohol': 'The highest alcohol level the hero can reach.', + 'AlcoholDepletionRate': + 'How quickly the alcohol level falls back towards sober.', + 'Swampweed': + 'How stoned the hero is; the higher tiers shift his attributes around.', + 'MaxSwampweed': 'The highest swampweed level the hero can reach.', + 'SwampweedDepletionRate': 'How quickly the swampweed high wears off.', + 'XPExecutedBounty': + 'Experience awarded to whoever executes this character.', + 'XPKillOrDefeatBounty': + 'Experience awarded to whoever kills or defeats this character.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Voice line'; diff --git a/apps/save-editor/lib/l10n/app_localizations_es.dart b/apps/save-editor/lib/l10n/app_localizations_es.dart index ba1c0a7f7..7b84bbd51 100644 --- a/apps/save-editor/lib/l10n/app_localizations_es.dart +++ b/apps/save-editor/lib/l10n/app_localizations_es.dart @@ -1676,6 +1676,15 @@ class AppLocalizationsEs extends AppLocalizations { @override String get heroGroupAdvanced => 'Avanzado'; + @override + String get heroGroupDiving => 'Buceo'; + + @override + String get heroGroupSleep => 'Sueño y descanso'; + + @override + String get heroGroupIntoxication => 'Embriaguez'; + @override String get heroEntryHeroTransform => 'Posición'; @@ -1961,43 +1970,89 @@ class AppLocalizationsEs extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Alcohol', - 'AlcoholDepletionRate': 'Tasa de reducción de alcohol', - 'MaxAlcohol': 'Nivel máximo de alcohol', - 'MaxSuperArmor': 'Superarmadura máxima', - 'SuperArmor': 'Superarmadura', - 'Fatigue': 'Fatiga', - 'FillRatio': 'Proporción de llenado', - 'FillRatioPeriod': 'Periodo de llenado', - 'MaxFatigue': 'Fatiga máxima', - 'MaxThresholdIndex': 'Índice de umbral máximo', - 'RecoveryRatePerHourOfSleep': 'Recuperación por hora de sueño', - 'DamageMultiplier': 'Multiplicador de daño', - 'Toughness': 'Tenacidad', - 'ToughnessA': 'Tenacidad A', - 'ToughnessB': 'Tenacidad B', - 'ToughnessC': 'Tenacidad C', - 'XPExecutedBounty': 'Recompensa de EXP por ejecución', - 'XPKillOrDefeatBounty': 'Recompensa de EXP por muerte o derrota', - 'SpeedModifier': 'Modificador de velocidad', - 'CriticalLevelPercent': 'Nivel crítico (%)', - 'MaxOxygen': 'Oxígeno máximo', - 'Oxygen': 'Oxígeno', - 'OxygenDepletionRate': 'Tasa de consumo de oxígeno', - 'OxygenRecoveryRate': 'Tasa de recuperación de oxígeno', - 'MaxRestTime': 'Tiempo máximo de descanso', - 'MaxSleepTime': 'Tiempo máximo de sueño', - 'SleepTime': 'Tiempo de sueño', - 'SleepTimeRecoveryAmount': 'Cantidad recuperada durante el sueño', - 'SleepTimeRecoveryPeriod': 'Intervalo de recuperación durante el sueño', - 'MaxSwampweed': 'Cantidad máxima de hierba de pantano', - 'Swampweed': 'Hierba de pantano', - 'SwampweedDepletionRate': 'Tasa de consumo de hierba de pantano', + 'SuperArmor': 'Aplomo', + 'MaxSuperArmor': 'Aplomo máx.', + 'DamageMultiplier': 'Daño recibido', + 'SpeedModifier': 'Velocidad de movimiento', + 'Oxygen': 'Aire', + 'MaxOxygen': 'Aire máx.', + 'OxygenDepletionRate': 'Aire gastado por segundo', + 'OxygenRecoveryRate': 'Aire recuperado por seg.', + 'CriticalLevelPercent': 'Aviso de falta de aire', + 'SleepTime': 'Horas reparadoras rest.', + 'MaxSleepTime': 'Máx. horas reparadoras', + 'SleepTimeRecoveryAmount': 'Horas que se recuperan', + 'SleepTimeRecoveryPeriod': 'Intervalo de recarga', + 'MaxRestTime': 'Máx. tiempo en la cama', + 'Health_RecoveryRatePerHourOfSleep': 'Vida por hora de sueño', + 'Mana_RecoveryRatePerHourOfSleep': 'Maná por hora de sueño', + 'Alcohol': 'Nivel de alcohol', + 'MaxAlcohol': 'Nivel de alcohol máx.', + 'AlcoholDepletionRate': 'Velocidad para despejarse', + 'Swampweed': 'Nivel de hierba de pantano', + 'MaxSwampweed': 'Máx. hierba de pantano', + 'SwampweedDepletionRate': 'Velocidad del bajón', + 'XPExecutedBounty': 'EXP por ejecutar', + 'XPKillOrDefeatBounty': 'EXP por matar', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'Cuánto castigo aguanta el héroe antes de que un golpe lo haga tambalearse.', + 'MaxSuperArmor': + 'La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.', + 'DamageMultiplier': + 'Factor que se aplica al daño que recibe el héroe: 1 es lo normal, y cuanto más alto, más duele.', + 'SpeedModifier': + 'Factor sobre lo rápido que se mueve el héroe: 1 es lo normal.', + 'Oxygen': + 'Segundos de aire que quedan bajo el agua; al llegar a cero el héroe se ahoga.', + 'MaxOxygen': + 'Cuántos segundos puede aguantar el héroe bajo el agua; la habilidad Buceo lo aumenta.', + 'OxygenDepletionRate': 'Aire que se consume cada segundo bajo el agua.', + 'OxygenRecoveryRate': + 'Aire que se recupera cada segundo al salir a la superficie.', + 'CriticalLevelPercent': + 'Porcentaje de aire restante con el que el juego avisa del peligro de ahogarse.', + 'SleepTime': + 'Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.', + 'MaxSleepTime': + 'El mayor número de horas reparadoras que puede acumular el héroe.', + 'SleepTimeRecoveryAmount': + 'Horas reparadoras que se devuelven cada vez que se rellena la reserva.', + 'SleepTimeRecoveryPeriod': + 'Cuánto tarda la reserva de horas reparadoras en volver a llenarse.', + 'MaxRestTime': + 'El tiempo más largo que el juego permite pasar en la cama de una sola vez.', + 'Health_RecoveryRatePerHourOfSleep': + 'Porcentaje de la vida máxima que se recupera por cada hora dormida.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Porcentaje del maná máximo que se recupera por cada hora dormida.', + 'Alcohol': + 'Lo borracho que está el héroe; los niveles altos cambian destreza y maná por fuerza.', + 'MaxAlcohol': 'El nivel de alcohol más alto que puede alcanzar el héroe.', + 'AlcoholDepletionRate': + 'Con qué rapidez baja el nivel de alcohol hacia la sobriedad.', + 'Swampweed': + 'Lo colocado que está el héroe; los niveles altos le mueven los atributos.', + 'MaxSwampweed': + 'El nivel de hierba de pantano más alto que puede alcanzar el héroe.', + 'SwampweedDepletionRate': + 'Con qué rapidez se pasa el efecto de la hierba de pantano.', + 'XPExecutedBounty': + 'Experiencia que recibe quien ejecuta a este personaje.', + 'XPKillOrDefeatBounty': + 'Experiencia que recibe quien mata o derrota a este personaje.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Línea de voz'; diff --git a/apps/save-editor/lib/l10n/app_localizations_fr.dart b/apps/save-editor/lib/l10n/app_localizations_fr.dart index 09d84bdcc..3e3812e52 100644 --- a/apps/save-editor/lib/l10n/app_localizations_fr.dart +++ b/apps/save-editor/lib/l10n/app_localizations_fr.dart @@ -1685,6 +1685,15 @@ class AppLocalizationsFr extends AppLocalizations { @override String get heroGroupAdvanced => 'Avancé'; + @override + String get heroGroupDiving => 'Plongée'; + + @override + String get heroGroupSleep => 'Sommeil et repos'; + + @override + String get heroGroupIntoxication => 'Ivresse'; + @override String get heroEntryHeroTransform => 'Position'; @@ -1973,45 +1982,90 @@ class AppLocalizationsFr extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Alcool', - 'AlcoholDepletionRate': 'Taux d’élimination de l’alcool', - 'MaxAlcohol': 'Niveau maximal d’alcool', - 'MaxSuperArmor': 'Super-armure maximale', - 'SuperArmor': 'Super-armure', - 'Fatigue': 'Fatigue', - 'FillRatio': 'Taux de remplissage', - 'FillRatioPeriod': 'Période de remplissage', - 'MaxFatigue': 'Fatigue maximale', - 'MaxThresholdIndex': 'Indice de seuil maximal', - 'RecoveryRatePerHourOfSleep': 'Récupération par heure de sommeil', - 'DamageMultiplier': 'Multiplicateur de dégâts', - 'Toughness': 'Robustesse', - 'ToughnessA': 'Robustesse A', - 'ToughnessB': 'Robustesse B', - 'ToughnessC': 'Robustesse C', - 'XPExecutedBounty': 'Récompense d’EXP pour une exécution', - 'XPKillOrDefeatBounty': - 'Récompense d’EXP pour une élimination ou une défaite', - 'SpeedModifier': 'Modificateur de vitesse', - 'CriticalLevelPercent': 'Niveau critique (%)', - 'MaxOxygen': 'Oxygène maximal', - 'Oxygen': 'Oxygène', - 'OxygenDepletionRate': 'Taux d’épuisement de l’oxygène', - 'OxygenRecoveryRate': 'Taux de récupération de l’oxygène', - 'MaxRestTime': 'Temps de repos maximal', - 'MaxSleepTime': 'Temps de sommeil maximal', - 'SleepTime': 'Temps de sommeil', - 'SleepTimeRecoveryAmount': 'Quantité récupérée pendant le sommeil', - 'SleepTimeRecoveryPeriod': - 'Intervalle de récupération pendant le sommeil', - 'MaxSwampweed': 'Quantité maximale d’herbe des marais', - 'Swampweed': 'Herbe des marais', - 'SwampweedDepletionRate': 'Taux d’épuisement de l’herbe des marais', + 'SuperArmor': 'Stabilité', + 'MaxSuperArmor': 'Stabilité max.', + 'DamageMultiplier': 'Dégâts subis', + 'SpeedModifier': 'Vitesse de déplacement', + 'Oxygen': 'Souffle', + 'MaxOxygen': 'Souffle max.', + 'OxygenDepletionRate': 'Air consommé par seconde', + 'OxygenRecoveryRate': 'Air récupéré par seconde', + 'CriticalLevelPercent': 'Seuil d\'alerte du souffle', + 'SleepTime': 'Heures de repos restantes', + 'MaxSleepTime': 'Heures de repos max.', + 'SleepTimeRecoveryAmount': 'Heures de repos rendues', + 'SleepTimeRecoveryPeriod': 'Intervalle de recharge', + 'MaxRestTime': 'Temps max. au lit', + 'Health_RecoveryRatePerHourOfSleep': 'Vie par heure de sommeil', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana par heure de sommeil', + 'Alcohol': 'Taux d\'alcool', + 'MaxAlcohol': 'Taux d\'alcool max.', + 'AlcoholDepletionRate': 'Vitesse de dégrisement', + 'Swampweed': 'Niveau d\'herbe des marais', + 'MaxSwampweed': 'Herbe des marais max.', + 'SwampweedDepletionRate': 'Vitesse de dissipation', + 'XPExecutedBounty': 'XP pour l\'exécution', + 'XPKillOrDefeatBounty': 'XP pour la mise à mort', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'Ce que le héros encaisse avant qu\'un coup ne le déséquilibre.', + 'MaxSuperArmor': + 'La réserve complète de stabilité ; elle augmente avec le niveau et avec l\'armure portée.', + 'DamageMultiplier': + 'Facteur appliqué aux dégâts que subit le héros — 1 est la normale, plus haut fait plus mal.', + 'SpeedModifier': + 'Facteur appliqué à la vitesse de déplacement du héros — 1 est la normale.', + 'Oxygen': + 'Secondes d\'air qu\'il reste sous l\'eau ; à zéro, le héros se noie.', + 'MaxOxygen': + 'Combien de secondes le héros peut rester sous l\'eau ; le talent Plongée augmente cette durée.', + 'OxygenDepletionRate': 'Air consommé chaque seconde sous l\'eau.', + 'OxygenRecoveryRate': + 'Air qui revient chaque seconde une fois de retour à la surface.', + 'CriticalLevelPercent': + 'Part d\'air restant à partir de laquelle le jeu prévient du risque de noyade.', + 'SleepTime': + 'Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n\'accorde plus de récupération.', + 'MaxSleepTime': + 'La plus grande réserve d\'heures de repos que le héros peut avoir.', + 'SleepTimeRecoveryAmount': + 'Heures de repos qui reviennent à chaque recharge.', + 'SleepTimeRecoveryPeriod': + 'Le temps qu\'il faut pour que la réserve d\'heures de repos se remplisse à nouveau.', + 'MaxRestTime': + 'La plus longue durée que le héros peut passer au lit d\'une traite.', + 'Health_RecoveryRatePerHourOfSleep': + 'Part des points de vie maximum rendue pour chaque heure de sommeil.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Part du mana maximum rendue pour chaque heure de sommeil.', + 'Alcohol': + 'À quel point le héros est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.', + 'MaxAlcohol': + 'Le taux d\'alcool le plus élevé que le héros peut atteindre.', + 'AlcoholDepletionRate': + 'À quelle vitesse le taux d\'alcool redescend vers la sobriété.', + 'Swampweed': + 'À quel point le héros plane ; aux paliers élevés, ses caractéristiques sont chamboulées.', + 'MaxSwampweed': + 'Le niveau d\'herbe des marais le plus élevé que le héros peut atteindre.', + 'SwampweedDepletionRate': + 'À quelle vitesse l\'effet de l\'herbe des marais se dissipe.', + 'XPExecutedBounty': + 'Expérience accordée à celui qui exécute ce personnage.', + 'XPKillOrDefeatBounty': + 'Expérience accordée à celui qui tue ou vainc ce personnage.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Réplique vocale'; diff --git a/apps/save-editor/lib/l10n/app_localizations_it.dart b/apps/save-editor/lib/l10n/app_localizations_it.dart index 13627f1da..6987d6dc7 100644 --- a/apps/save-editor/lib/l10n/app_localizations_it.dart +++ b/apps/save-editor/lib/l10n/app_localizations_it.dart @@ -1681,6 +1681,15 @@ class AppLocalizationsIt extends AppLocalizations { @override String get heroGroupAdvanced => 'Avanzate'; + @override + String get heroGroupDiving => 'Immersione'; + + @override + String get heroGroupSleep => 'Sonno e riposo'; + + @override + String get heroGroupIntoxication => 'Ebbrezza'; + @override String get heroEntryHeroTransform => 'Posizione'; @@ -1966,43 +1975,86 @@ class AppLocalizationsIt extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Alcol', - 'AlcoholDepletionRate': 'Tasso di smaltimento dell’alcol', - 'MaxAlcohol': 'Livello massimo di alcol', - 'MaxSuperArmor': 'Super armatura massima', - 'SuperArmor': 'Super armatura', - 'Fatigue': 'Fatica', - 'FillRatio': 'Rapporto di riempimento', - 'FillRatioPeriod': 'Periodo di riempimento', - 'MaxFatigue': 'Fatica massima', - 'MaxThresholdIndex': 'Indice soglia massimo', - 'RecoveryRatePerHourOfSleep': 'Recupero per ora di sonno', - 'DamageMultiplier': 'Moltiplicatore danni', - 'Toughness': 'Tenacia', - 'ToughnessA': 'Tenacia A', - 'ToughnessB': 'Tenacia B', - 'ToughnessC': 'Tenacia C', - 'XPExecutedBounty': 'Ricompensa PE per esecuzione', - 'XPKillOrDefeatBounty': 'Ricompensa PE per uccisione o sconfitta', - 'SpeedModifier': 'Modificatore velocità', - 'CriticalLevelPercent': 'Livello critico (%)', - 'MaxOxygen': 'Ossigeno massimo', - 'Oxygen': 'Ossigeno', - 'OxygenDepletionRate': 'Tasso di consumo dell’ossigeno', - 'OxygenRecoveryRate': 'Tasso di recupero dell’ossigeno', - 'MaxRestTime': 'Tempo massimo di riposo', - 'MaxSleepTime': 'Tempo massimo di sonno', - 'SleepTime': 'Tempo di sonno', - 'SleepTimeRecoveryAmount': 'Quantità recuperata durante il sonno', - 'SleepTimeRecoveryPeriod': 'Intervallo di recupero durante il sonno', - 'MaxSwampweed': 'Quantità massima di erba palustre', - 'Swampweed': 'Erba palustre', - 'SwampweedDepletionRate': 'Tasso di consumo dell’erba palustre', + 'SuperArmor': 'Equilibrio', + 'MaxSuperArmor': 'Equilibrio max.', + 'DamageMultiplier': 'Danno subito', + 'SpeedModifier': 'Velocità di movimento', + 'Oxygen': 'Fiato', + 'MaxOxygen': 'Fiato max.', + 'OxygenDepletionRate': 'Fiato consumato al secondo', + 'OxygenRecoveryRate': 'Fiato recuperato al secondo', + 'CriticalLevelPercent': 'Avviso di fiato basso', + 'SleepTime': 'Ore di riposo rimaste', + 'MaxSleepTime': 'Ore di riposo max.', + 'SleepTimeRecoveryAmount': 'Ore di riposo recuperate', + 'SleepTimeRecoveryPeriod': 'Intervallo di ricarica', + 'MaxRestTime': 'Tempo max. a letto', + 'Health_RecoveryRatePerHourOfSleep': 'Vita per ora di sonno', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana per ora di sonno', + 'Alcohol': 'Livello di alcol', + 'MaxAlcohol': 'Livello di alcol max.', + 'AlcoholDepletionRate': 'Smaltimento dell\'alcol', + 'Swampweed': 'Livello di erba palustre', + 'MaxSwampweed': 'Erba palustre max.', + 'SwampweedDepletionRate': 'Smaltimento dell\'erba', + 'XPExecutedBounty': 'PE per l\'esecuzione', + 'XPKillOrDefeatBounty': 'PE per l\'uccisione', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'Quanto incassa l\'eroe prima che un colpo lo faccia barcollare.', + 'MaxSuperArmor': + 'La riserva completa di equilibrio; cresce con il livello e con l\'armatura indossata.', + 'DamageMultiplier': + 'Fattore applicato al danno che l\'eroe subisce: 1 è normale, valori più alti fanno più male.', + 'SpeedModifier': + 'Fattore sulla velocità con cui l\'eroe si muove: 1 è normale.', + 'Oxygen': 'Secondi d\'aria rimasti sott\'acqua; a zero l\'eroe annega.', + 'MaxOxygen': + 'Per quanti secondi l\'eroe può restare sott\'acqua; l\'abilità Immersione lo aumenta.', + 'OxygenDepletionRate': 'Aria consumata ogni secondo sott\'acqua.', + 'OxygenRecoveryRate': 'Aria che torna ogni secondo dopo essere riemersi.', + 'CriticalLevelPercent': + 'Percentuale d\'aria residua alla quale il gioco avverte del pericolo di annegamento.', + 'SleepTime': + 'Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.', + 'MaxSleepTime': + 'La riserva massima di ore di riposo che l\'eroe può accumulare.', + 'SleepTimeRecoveryAmount': 'Ore di riposo che tornano a ogni ricarica.', + 'SleepTimeRecoveryPeriod': + 'Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.', + 'MaxRestTime': + 'Il tempo più lungo che si può passare a letto in una volta sola.', + 'Health_RecoveryRatePerHourOfSleep': + 'Quota della vita massima che torna per ogni ora dormita.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Quota del mana massimo che torna per ogni ora dormita.', + 'Alcohol': + 'Quanto è ubriaco l\'eroe; ai livelli più alti scambia destrezza e mana con forza.', + 'MaxAlcohol': 'Il livello di alcol più alto che l\'eroe può raggiungere.', + 'AlcoholDepletionRate': + 'Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.', + 'Swampweed': + 'Quanto è sballato l\'eroe; ai livelli più alti i suoi valori si spostano.', + 'MaxSwampweed': + 'Il livello di erba palustre più alto che l\'eroe può raggiungere.', + 'SwampweedDepletionRate': + 'Quanto in fretta svanisce lo sballo da erba palustre.', + 'XPExecutedBounty': + 'Esperienza che ottiene chi giustizia questo personaggio.', + 'XPKillOrDefeatBounty': + 'Esperienza che ottiene chi uccide o sconfigge questo personaggio.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Battuta vocale'; diff --git a/apps/save-editor/lib/l10n/app_localizations_ja.dart b/apps/save-editor/lib/l10n/app_localizations_ja.dart index ef05fe7fb..65a8b3d1d 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ja.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ja.dart @@ -1630,6 +1630,15 @@ class AppLocalizationsJa extends AppLocalizations { @override String get heroGroupAdvanced => '詳細設定'; + @override + String get heroGroupDiving => '潜水'; + + @override + String get heroGroupSleep => '睡眠と休息'; + + @override + String get heroGroupIntoxication => '酩酊'; + @override String get heroEntryHeroTransform => '位置'; @@ -1910,43 +1919,67 @@ class AppLocalizationsJa extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'アルコール', - 'AlcoholDepletionRate': 'アルコール減少速度', - 'MaxAlcohol': '最大アルコール値', - 'MaxSuperArmor': '最大スーパーアーマー', - 'SuperArmor': 'スーパーアーマー', - 'Fatigue': '疲労', - 'FillRatio': '充填率', - 'FillRatioPeriod': '充填周期', - 'MaxFatigue': '最大疲労', - 'MaxThresholdIndex': '最大しきい値インデックス', - 'RecoveryRatePerHourOfSleep': '睡眠1時間あたりの回復量', - 'DamageMultiplier': 'ダメージ倍率', - 'Toughness': '強靭度', - 'ToughnessA': '強靭度 A', - 'ToughnessB': '強靭度 B', - 'ToughnessC': '強靭度 C', - 'XPExecutedBounty': '処刑時のXP報酬', - 'XPKillOrDefeatBounty': '撃破時のXP報酬', - 'SpeedModifier': '速度補正', - 'CriticalLevelPercent': 'クリティカルレベル(%)', - 'MaxOxygen': '最大酸素量', - 'Oxygen': '酸素', - 'OxygenDepletionRate': '酸素消費速度', - 'OxygenRecoveryRate': '酸素回復速度', - 'MaxRestTime': '最大休息時間', - 'MaxSleepTime': '最大睡眠時間', - 'SleepTime': '睡眠時間', - 'SleepTimeRecoveryAmount': '睡眠回復量', - 'SleepTimeRecoveryPeriod': '睡眠回復周期', - 'MaxSwampweed': '最大沼地草量', - 'Swampweed': '沼地草', - 'SwampweedDepletionRate': '沼地草消費速度', + 'SuperArmor': '強靭度', + 'MaxSuperArmor': '最大強靭度', + 'DamageMultiplier': '被ダメージ倍率', + 'SpeedModifier': '移動速度', + 'Oxygen': '息', + 'MaxOxygen': '息の最大値', + 'OxygenDepletionRate': '息の消費(毎秒)', + 'OxygenRecoveryRate': '息の回復(毎秒)', + 'CriticalLevelPercent': '息切れの警告', + 'SleepTime': '残りの快眠時間', + 'MaxSleepTime': '最大の快眠時間', + 'SleepTimeRecoveryAmount': '快眠時間の回復量', + 'SleepTimeRecoveryPeriod': '補充の間隔', + 'MaxRestTime': 'ベッドにいられる最大時間', + 'Health_RecoveryRatePerHourOfSleep': '睡眠1時間あたりの体力', + 'Mana_RecoveryRatePerHourOfSleep': '睡眠1時間あたりのマナ', + 'Alcohol': '酔いの度合い', + 'MaxAlcohol': '酔いの最大値', + 'AlcoholDepletionRate': '酔いが覚める速さ', + 'Swampweed': '沼地草の酔い', + 'MaxSwampweed': '沼地草の酔いの最大値', + 'SwampweedDepletionRate': '酔いが抜ける速さ', + 'XPExecutedBounty': '処刑で得る経験値', + 'XPKillOrDefeatBounty': '撃破で得る経験値', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': '一撃で怯まされるまでに、ヒーローがどれだけ攻撃に耐えられるか。', + 'MaxSuperArmor': '強靭度の総量で、レベルと身に着けた鎧に応じて増える。', + 'DamageMultiplier': 'ヒーローが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。', + 'SpeedModifier': 'ヒーローの移動の速さにかかる倍率で、1が標準。', + 'Oxygen': '水中に残っている息の秒数で、ゼロになると溺れる。', + 'MaxOxygen': '水中にいられる秒数で、潜水スキルを上げると伸びる。', + 'OxygenDepletionRate': '水中で1秒ごとに減っていく息の量。', + 'OxygenRecoveryRate': '水面に上がってから1秒ごとに戻る息の量。', + 'CriticalLevelPercent': '残りの息がこの割合まで減ると、溺れる危険を知らせる。', + 'SleepTime': 'まだ回復につながる睡眠時間で、これを超えて眠っても回復はない。', + 'MaxSleepTime': 'ためておける快眠時間の上限。', + 'SleepTimeRecoveryAmount': '補充のたびに戻ってくる快眠時間。', + 'SleepTimeRecoveryPeriod': '快眠時間が次に補充されるまでにかかる時間。', + 'MaxRestTime': '一度に続けてベッドで過ごせる最長の時間。', + 'Health_RecoveryRatePerHourOfSleep': '1時間眠るごとに戻る最大体力の割合。', + 'Mana_RecoveryRatePerHourOfSleep': '1時間眠るごとに戻る最大マナの割合。', + 'Alcohol': 'どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。', + 'MaxAlcohol': 'ヒーローが到達できる酔いの度合いの上限。', + 'AlcoholDepletionRate': '酔いがどれだけ早く覚めていくか。', + 'Swampweed': 'どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。', + 'MaxSwampweed': 'ヒーローが到達できる沼地草の酔いの上限。', + 'SwampweedDepletionRate': '沼地草の酔いがどれだけ早く抜けるか。', + 'XPExecutedBounty': 'このキャラクターを処刑した者が得る経験値。', + 'XPKillOrDefeatBounty': 'このキャラクターを倒すか打ち負かした者が得る経験値。', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'ボイスライン'; diff --git a/apps/save-editor/lib/l10n/app_localizations_pl.dart b/apps/save-editor/lib/l10n/app_localizations_pl.dart index 155b846a8..d16dd051b 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pl.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pl.dart @@ -1692,6 +1692,15 @@ class AppLocalizationsPl extends AppLocalizations { @override String get heroGroupAdvanced => 'Zaawansowane'; + @override + String get heroGroupDiving => 'Nurkowanie'; + + @override + String get heroGroupSleep => 'Sen i odpoczynek'; + + @override + String get heroGroupIntoxication => 'Odurzenie'; + @override String get heroEntryHeroTransform => 'Pozycja'; @@ -1977,43 +1986,86 @@ class AppLocalizationsPl extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Alkohol', - 'AlcoholDepletionRate': 'Tempo spadku poziomu alkoholu', - 'MaxAlcohol': 'Maksymalny poziom alkoholu', - 'MaxSuperArmor': 'Maksymalny superpancerz', - 'SuperArmor': 'Superpancerz', - 'Fatigue': 'Zmęczenie', - 'FillRatio': 'Stopień napełnienia', - 'FillRatioPeriod': 'Okres napełniania', - 'MaxFatigue': 'Maksymalne zmęczenie', - 'MaxThresholdIndex': 'Maksymalny indeks progu', - 'RecoveryRatePerHourOfSleep': 'Regeneracja na godzinę snu', - 'DamageMultiplier': 'Mnożnik obrażeń', - 'Toughness': 'Wytrzymałość', - 'ToughnessA': 'Wytrzymałość A', - 'ToughnessB': 'Wytrzymałość B', - 'ToughnessC': 'Wytrzymałość C', - 'XPExecutedBounty': 'Nagroda PD za egzekucję', - 'XPKillOrDefeatBounty': 'Nagroda PD za zabicie lub pokonanie', - 'SpeedModifier': 'Modyfikator prędkości', - 'CriticalLevelPercent': 'Poziom krytyczny (%)', - 'MaxOxygen': 'Maksymalny poziom tlenu', - 'Oxygen': 'Tlen', - 'OxygenDepletionRate': 'Tempo zużycia tlenu', - 'OxygenRecoveryRate': 'Tempo regeneracji tlenu', - 'MaxRestTime': 'Maksymalny czas odpoczynku', - 'MaxSleepTime': 'Maksymalny czas snu', - 'SleepTime': 'Czas snu', - 'SleepTimeRecoveryAmount': 'Wartość regeneracji podczas snu', - 'SleepTimeRecoveryPeriod': 'Okres regeneracji podczas snu', - 'MaxSwampweed': 'Maksymalny poziom bagiennego ziela', - 'Swampweed': 'Bagienne ziele', - 'SwampweedDepletionRate': 'Tempo zużycia bagiennego ziela', + 'SuperArmor': 'Równowaga', + 'MaxSuperArmor': 'Maks. równowaga', + 'DamageMultiplier': 'Otrzymywane obrażenia', + 'SpeedModifier': 'Szybkość ruchu', + 'Oxygen': 'Powietrze', + 'MaxOxygen': 'Maks. powietrze', + 'OxygenDepletionRate': 'Zużycie powietrza na sekundę', + 'OxygenRecoveryRate': 'Odzysk powietrza na sekundę', + 'CriticalLevelPercent': 'Ostrzeżenie o powietrzu', + 'SleepTime': 'Pozostałe godziny odpoczynku', + 'MaxSleepTime': 'Maks. godziny odpoczynku', + 'SleepTimeRecoveryAmount': 'Wielkość uzupełnienia', + 'SleepTimeRecoveryPeriod': 'Czas do uzupełnienia', + 'MaxRestTime': 'Maks. czas w łóżku', + 'Health_RecoveryRatePerHourOfSleep': 'Życie na godzinę snu', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana na godzinę snu', + 'Alcohol': 'Poziom alkoholu', + 'MaxAlcohol': 'Maks. poziom alkoholu', + 'AlcoholDepletionRate': 'Tempo trzeźwienia', + 'Swampweed': 'Poziom bagiennego ziela', + 'MaxSwampweed': 'Maks. bagienne ziele', + 'SwampweedDepletionRate': 'Tempo mijania odurzenia', + 'XPExecutedBounty': 'PD za dobicie', + 'XPKillOrDefeatBounty': 'PD za zabicie', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': 'Ile bohater zniesie, zanim cios wytrąci go z równowagi.', + 'MaxSuperArmor': + 'Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.', + 'DamageMultiplier': + 'Mnożnik obrażeń, które przyjmuje bohater – 1 to wartość normalna, wyższa boli bardziej.', + 'SpeedModifier': + 'Mnożnik tempa poruszania się bohatera – 1 to wartość normalna.', + 'Oxygen': + 'Sekundy powietrza pozostałe pod wodą; przy zerze bohater tonie.', + 'MaxOxygen': + 'Ile sekund bohater wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.', + 'OxygenDepletionRate': 'Ile powietrza ubywa co sekundę pod wodą.', + 'OxygenRecoveryRate': 'Ile powietrza wraca co sekundę po wynurzeniu.', + 'CriticalLevelPercent': + 'Ile powietrza musi zostać, by gra ostrzegła przed utonięciem.', + 'SleepTime': + 'Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.', + 'MaxSleepTime': + 'Największy zapas godzin odpoczynku, jaki bohater może mieć.', + 'SleepTimeRecoveryAmount': + 'Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.', + 'SleepTimeRecoveryPeriod': + 'Ile czasu mija, zanim zapas godzin odpoczynku uzupełni się na nowo.', + 'MaxRestTime': + 'Najdłuższy pojedynczy odpoczynek w łóżku, na jaki pozwala gra.', + 'Health_RecoveryRatePerHourOfSleep': + 'Część maksymalnego życia, która wraca za każdą przespaną godzinę.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Część maksymalnej many, która wraca za każdą przespaną godzinę.', + 'Alcohol': + 'Jak bardzo bohater jest pijany; na wyższych stopniach zamienia zręczność i manę na siłę.', + 'MaxAlcohol': 'Najwyższy poziom alkoholu, jaki bohater może osiągnąć.', + 'AlcoholDepletionRate': + 'Jak szybko poziom alkoholu spada z powrotem do trzeźwości.', + 'Swampweed': + 'Jak bardzo bohater jest odurzony; wyższe stopnie przestawiają jego atrybuty.', + 'MaxSwampweed': + 'Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.', + 'SwampweedDepletionRate': 'Jak szybko mija odurzenie bagiennym zielem.', + 'XPExecutedBounty': + 'Doświadczenie, jakie dostaje ten, kto dobije tę postać.', + 'XPKillOrDefeatBounty': + 'Doświadczenie, jakie dostaje ten, kto zabije lub pokona tę postać.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Kwestia głosowa'; diff --git a/apps/save-editor/lib/l10n/app_localizations_pt.dart b/apps/save-editor/lib/l10n/app_localizations_pt.dart index e156d5a2d..1c6471632 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pt.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pt.dart @@ -1676,6 +1676,15 @@ class AppLocalizationsPt extends AppLocalizations { @override String get heroGroupAdvanced => 'Avançado'; + @override + String get heroGroupDiving => 'Mergulho'; + + @override + String get heroGroupSleep => 'Sono e descanso'; + + @override + String get heroGroupIntoxication => 'Embriaguez'; + @override String get heroEntryHeroTransform => 'Posição'; @@ -1962,43 +1971,87 @@ class AppLocalizationsPt extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Álcool', - 'AlcoholDepletionRate': 'Taxa de redução do álcool', - 'MaxAlcohol': 'Nível máximo de álcool', - 'MaxSuperArmor': 'Superarmadura máxima', - 'SuperArmor': 'Superarmadura', - 'Fatigue': 'Fadiga', - 'FillRatio': 'Proporção de preenchimento', - 'FillRatioPeriod': 'Período de preenchimento', - 'MaxFatigue': 'Fadiga máxima', - 'MaxThresholdIndex': 'Índice máximo de limiar', - 'RecoveryRatePerHourOfSleep': 'Recuperação por hora de sono', - 'DamageMultiplier': 'Multiplicador de dano', - 'Toughness': 'Tenacidade', - 'ToughnessA': 'Tenacidade A', - 'ToughnessB': 'Tenacidade B', - 'ToughnessC': 'Tenacidade C', - 'XPExecutedBounty': 'Recompensa de XP por execução', - 'XPKillOrDefeatBounty': 'Recompensa de XP por morte ou derrota', - 'SpeedModifier': 'Modificador de velocidade', - 'CriticalLevelPercent': 'Nível crítico (%)', - 'MaxOxygen': 'Oxigênio máximo', - 'Oxygen': 'Oxigênio', - 'OxygenDepletionRate': 'Taxa de consumo de oxigênio', - 'OxygenRecoveryRate': 'Taxa de recuperação de oxigênio', - 'MaxRestTime': 'Tempo máximo de descanso', - 'MaxSleepTime': 'Tempo máximo de sono', - 'SleepTime': 'Tempo de sono', - 'SleepTimeRecoveryAmount': 'Quantidade recuperada durante o sono', - 'SleepTimeRecoveryPeriod': 'Intervalo de recuperação durante o sono', - 'MaxSwampweed': 'Quantidade máxima de erva do pântano', - 'Swampweed': 'Erva do pântano', - 'SwampweedDepletionRate': 'Taxa de consumo de erva do pântano', + 'SuperArmor': 'Firmeza', + 'MaxSuperArmor': 'Firmeza máx.', + 'DamageMultiplier': 'Dano recebido', + 'SpeedModifier': 'Velocidade de movimento', + 'Oxygen': 'Fôlego', + 'MaxOxygen': 'Fôlego máx.', + 'OxygenDepletionRate': 'Fôlego gasto por segundo', + 'OxygenRecoveryRate': 'Fôlego ganho por segundo', + 'CriticalLevelPercent': 'Aviso de fôlego baixo', + 'SleepTime': 'Horas de descanso restantes', + 'MaxSleepTime': 'Máx. de horas de descanso', + 'SleepTimeRecoveryAmount': 'Horas de descanso repostas', + 'SleepTimeRecoveryPeriod': 'Intervalo de reposição', + 'MaxRestTime': 'Tempo máx. na cama', + 'Health_RecoveryRatePerHourOfSleep': 'Vida por hora de sono', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana por hora de sono', + 'Alcohol': 'Nível de álcool', + 'MaxAlcohol': 'Nível máx. de álcool', + 'AlcoholDepletionRate': 'Rapidez para ficar sóbrio', + 'Swampweed': 'Nível de erva do pântano', + 'MaxSwampweed': 'Máx. de erva do pântano', + 'SwampweedDepletionRate': 'Rapidez para o efeito passar', + 'XPExecutedBounty': 'XP por execução', + 'XPKillOrDefeatBounty': 'XP por matar', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.', + 'MaxSuperArmor': + 'A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.', + 'DamageMultiplier': + 'Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.', + 'SpeedModifier': + 'Fator sobre a rapidez com que o herói se move — 1 é o normal.', + 'Oxygen': + 'Segundos de ar que restam debaixo d\'água; ao chegar a zero, o herói se afoga.', + 'MaxOxygen': + 'Quantos segundos o herói consegue ficar debaixo d\'água; a habilidade Mergulho aumenta isso.', + 'OxygenDepletionRate': 'Ar consumido a cada segundo debaixo d\'água.', + 'OxygenRecoveryRate': 'Ar que volta a cada segundo depois de emergir.', + 'CriticalLevelPercent': + 'Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.', + 'SleepTime': + 'Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.', + 'MaxSleepTime': + 'O maior estoque de horas de descanso que o herói pode acumular.', + 'SleepTimeRecoveryAmount': + 'Horas de descanso que voltam a cada reposição do estoque.', + 'SleepTimeRecoveryPeriod': + 'Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.', + 'MaxRestTime': 'O maior tempo seguido na cama que o jogo permite.', + 'Health_RecoveryRatePerHourOfSleep': + 'Parcela da vida máxima recuperada a cada hora dormida.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Parcela do mana máximo recuperada a cada hora dormida.', + 'Alcohol': + 'O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.', + 'MaxAlcohol': 'O maior nível de álcool que o herói pode atingir.', + 'AlcoholDepletionRate': + 'Com que rapidez o nível de álcool cai de volta rumo à sobriedade.', + 'Swampweed': + 'O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.', + 'MaxSwampweed': + 'O maior nível de erva do pântano que o herói pode atingir.', + 'SwampweedDepletionRate': + 'Com que rapidez o barato da erva do pântano vai passando.', + 'XPExecutedBounty': + 'Experiência concedida a quem executa este personagem.', + 'XPKillOrDefeatBounty': + 'Experiência concedida a quem mata ou derrota este personagem.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Linha de voz'; @@ -4459,6 +4512,15 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String get heroGroupAdvanced => 'Avançado'; + @override + String get heroGroupDiving => 'Mergulho'; + + @override + String get heroGroupSleep => 'Sono e descanso'; + + @override + String get heroGroupIntoxication => 'Embriaguez'; + @override String get heroEntryHeroTransform => 'Posição'; @@ -4745,43 +4807,87 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Álcool', - 'AlcoholDepletionRate': 'Taxa de redução do álcool', - 'MaxAlcohol': 'Nível máximo de álcool', - 'MaxSuperArmor': 'Superarmadura máxima', - 'SuperArmor': 'Superarmadura', - 'Fatigue': 'Fadiga', - 'FillRatio': 'Proporção de preenchimento', - 'FillRatioPeriod': 'Período de preenchimento', - 'MaxFatigue': 'Fadiga máxima', - 'MaxThresholdIndex': 'Índice máximo de limiar', - 'RecoveryRatePerHourOfSleep': 'Recuperação por hora de sono', - 'DamageMultiplier': 'Multiplicador de dano', - 'Toughness': 'Tenacidade', - 'ToughnessA': 'Tenacidade A', - 'ToughnessB': 'Tenacidade B', - 'ToughnessC': 'Tenacidade C', - 'XPExecutedBounty': 'Recompensa de XP por execução', - 'XPKillOrDefeatBounty': 'Recompensa de XP por morte ou derrota', - 'SpeedModifier': 'Modificador de velocidade', - 'CriticalLevelPercent': 'Nível crítico (%)', - 'MaxOxygen': 'Oxigênio máximo', - 'Oxygen': 'Oxigênio', - 'OxygenDepletionRate': 'Taxa de consumo de oxigênio', - 'OxygenRecoveryRate': 'Taxa de recuperação de oxigênio', - 'MaxRestTime': 'Tempo máximo de descanso', - 'MaxSleepTime': 'Tempo máximo de sono', - 'SleepTime': 'Tempo de sono', - 'SleepTimeRecoveryAmount': 'Quantidade recuperada durante o sono', - 'SleepTimeRecoveryPeriod': 'Intervalo de recuperação durante o sono', - 'MaxSwampweed': 'Quantidade máxima de erva do pântano', - 'Swampweed': 'Erva do pântano', - 'SwampweedDepletionRate': 'Taxa de consumo de erva do pântano', + 'SuperArmor': 'Firmeza', + 'MaxSuperArmor': 'Firmeza máx.', + 'DamageMultiplier': 'Dano recebido', + 'SpeedModifier': 'Velocidade de movimento', + 'Oxygen': 'Fôlego', + 'MaxOxygen': 'Fôlego máx.', + 'OxygenDepletionRate': 'Fôlego gasto por segundo', + 'OxygenRecoveryRate': 'Fôlego ganho por segundo', + 'CriticalLevelPercent': 'Aviso de fôlego baixo', + 'SleepTime': 'Horas de descanso restantes', + 'MaxSleepTime': 'Máx. de horas de descanso', + 'SleepTimeRecoveryAmount': 'Horas de descanso repostas', + 'SleepTimeRecoveryPeriod': 'Intervalo de reposição', + 'MaxRestTime': 'Tempo máx. na cama', + 'Health_RecoveryRatePerHourOfSleep': 'Vida por hora de sono', + 'Mana_RecoveryRatePerHourOfSleep': 'Mana por hora de sono', + 'Alcohol': 'Nível de álcool', + 'MaxAlcohol': 'Nível máx. de álcool', + 'AlcoholDepletionRate': 'Rapidez para ficar sóbrio', + 'Swampweed': 'Nível de erva do pântano', + 'MaxSwampweed': 'Máx. de erva do pântano', + 'SwampweedDepletionRate': 'Rapidez para o efeito passar', + 'XPExecutedBounty': 'XP por execução', + 'XPKillOrDefeatBounty': 'XP por matar', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': + 'Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.', + 'MaxSuperArmor': + 'A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.', + 'DamageMultiplier': + 'Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.', + 'SpeedModifier': + 'Fator sobre a rapidez com que o herói se move — 1 é o normal.', + 'Oxygen': + 'Segundos de ar que restam debaixo d\'água; ao chegar a zero, o herói se afoga.', + 'MaxOxygen': + 'Quantos segundos o herói consegue ficar debaixo d\'água; a habilidade Mergulho aumenta isso.', + 'OxygenDepletionRate': 'Ar consumido a cada segundo debaixo d\'água.', + 'OxygenRecoveryRate': 'Ar que volta a cada segundo depois de emergir.', + 'CriticalLevelPercent': + 'Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.', + 'SleepTime': + 'Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.', + 'MaxSleepTime': + 'O maior estoque de horas de descanso que o herói pode acumular.', + 'SleepTimeRecoveryAmount': + 'Horas de descanso que voltam a cada reposição do estoque.', + 'SleepTimeRecoveryPeriod': + 'Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.', + 'MaxRestTime': 'O maior tempo seguido na cama que o jogo permite.', + 'Health_RecoveryRatePerHourOfSleep': + 'Parcela da vida máxima recuperada a cada hora dormida.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Parcela do mana máximo recuperada a cada hora dormida.', + 'Alcohol': + 'O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.', + 'MaxAlcohol': 'O maior nível de álcool que o herói pode atingir.', + 'AlcoholDepletionRate': + 'Com que rapidez o nível de álcool cai de volta rumo à sobriedade.', + 'Swampweed': + 'O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.', + 'MaxSwampweed': + 'O maior nível de erva do pântano que o herói pode atingir.', + 'SwampweedDepletionRate': + 'Com que rapidez o barato da erva do pântano vai passando.', + 'XPExecutedBounty': + 'Experiência concedida a quem executa este personagem.', + 'XPKillOrDefeatBounty': + 'Experiência concedida a quem mata ou derrota este personagem.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Linha de voz'; diff --git a/apps/save-editor/lib/l10n/app_localizations_ru.dart b/apps/save-editor/lib/l10n/app_localizations_ru.dart index e82006e75..abd37f046 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ru.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ru.dart @@ -1686,6 +1686,15 @@ class AppLocalizationsRu extends AppLocalizations { @override String get heroGroupAdvanced => 'Дополнительно'; + @override + String get heroGroupDiving => 'Ныряние'; + + @override + String get heroGroupSleep => 'Сон и отдых'; + + @override + String get heroGroupIntoxication => 'Опьянение'; + @override String get heroEntryHeroTransform => 'Позиция'; @@ -1971,43 +1980,90 @@ class AppLocalizationsRu extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': 'Алкоголь', - 'AlcoholDepletionRate': 'Скорость выведения алкоголя', - 'MaxAlcohol': 'Максимальный уровень алкоголя', - 'MaxSuperArmor': 'Максимальная суперброня', - 'SuperArmor': 'Суперброня', - 'Fatigue': 'Усталость', - 'FillRatio': 'Коэффициент заполнения', - 'FillRatioPeriod': 'Период заполнения', - 'MaxFatigue': 'Максимальная усталость', - 'MaxThresholdIndex': 'Максимальный индекс порога', - 'RecoveryRatePerHourOfSleep': 'Восстановление за час сна', - 'DamageMultiplier': 'Множитель урона', - 'Toughness': 'Стойкость', - 'ToughnessA': 'Стойкость A', - 'ToughnessB': 'Стойкость B', - 'ToughnessC': 'Стойкость C', + 'SuperArmor': 'Стойкость', + 'MaxSuperArmor': 'Макс. стойкость', + 'DamageMultiplier': 'Получаемый урон', + 'SpeedModifier': 'Скорость передвижения', + 'Oxygen': 'Запас воздуха', + 'MaxOxygen': 'Макс. запас воздуха', + 'OxygenDepletionRate': 'Расход воздуха в секунду', + 'OxygenRecoveryRate': 'Возврат воздуха в секунду', + 'CriticalLevelPercent': 'Порог нехватки воздуха', + 'SleepTime': 'Полезные часы сна', + 'MaxSleepTime': 'Макс. полезные часы сна', + 'SleepTimeRecoveryAmount': 'Возврат полезных часов', + 'SleepTimeRecoveryPeriod': 'Интервал восполнения', + 'MaxRestTime': 'Макс. время в кровати', + 'Health_RecoveryRatePerHourOfSleep': 'Здоровье за час сна', + 'Mana_RecoveryRatePerHourOfSleep': 'Мана за час сна', + 'Alcohol': 'Уровень опьянения', + 'MaxAlcohol': 'Макс. опьянение', + 'AlcoholDepletionRate': 'Скорость отрезвления', + 'Swampweed': 'Уровень болотника', + 'MaxSwampweed': 'Макс. уровень болотника', + 'SwampweedDepletionRate': 'Скорость выветривания', 'XPExecutedBounty': 'Опыт за казнь', - 'XPKillOrDefeatBounty': 'Опыт за убийство или победу', - 'SpeedModifier': 'Модификатор скорости', - 'CriticalLevelPercent': 'Критический уровень (%)', - 'MaxOxygen': 'Максимальный запас кислорода', - 'Oxygen': 'Кислород', - 'OxygenDepletionRate': 'Скорость расхода кислорода', - 'OxygenRecoveryRate': 'Скорость восстановления кислорода', - 'MaxRestTime': 'Максимальное время отдыха', - 'MaxSleepTime': 'Максимальное время сна', - 'SleepTime': 'Время сна', - 'SleepTimeRecoveryAmount': 'Объём восстановления во сне', - 'SleepTimeRecoveryPeriod': 'Период восстановления во сне', - 'MaxSwampweed': 'Максимальный запас болотника', - 'Swampweed': 'Болотник', - 'SwampweedDepletionRate': 'Скорость расхода болотника', + 'XPKillOrDefeatBounty': 'Опыт за убийство', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': 'Сколько герой выдерживает, прежде чем удар его пошатнёт.', + 'MaxSuperArmor': + 'Полный запас стойкости; он растёт с уровнем и с надетой бронёй.', + 'DamageMultiplier': + 'Множитель урона, который получает герой: 1 — как обычно, больше — больнее.', + 'SpeedModifier': + 'Множитель того, как быстро герой двигается: 1 — как обычно.', + 'Oxygen': + 'Сколько секунд воздуха осталось под водой; на нуле герой тонет.', + 'MaxOxygen': + 'Сколько секунд герой может пробыть под водой; навык Ныряние это повышает.', + 'OxygenDepletionRate': + 'Сколько воздуха расходуется под водой каждую секунду.', + 'OxygenRecoveryRate': + 'Сколько воздуха возвращается каждую секунду после всплытия.', + 'CriticalLevelPercent': + 'Доля оставшегося воздуха, при которой игра предупреждает об угрозе утонуть.', + 'SleepTime': + 'Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.', + 'MaxSleepTime': + 'Наибольший запас полезных часов сна, который может держать герой.', + 'SleepTimeRecoveryAmount': + 'Сколько полезных часов сна возвращается при каждом восполнении.', + 'SleepTimeRecoveryPeriod': + 'Сколько времени проходит, прежде чем запас полезных часов сна восполнится снова.', + 'MaxRestTime': + 'Самое долгое пребывание в кровати за один раз, которое допускает игра.', + 'Health_RecoveryRatePerHourOfSleep': + 'Доля максимального здоровья, которая возвращается за каждый час сна.', + 'Mana_RecoveryRatePerHourOfSleep': + 'Доля максимальной маны, которая возвращается за каждый час сна.', + 'Alcohol': + 'Насколько герой пьян; высокие ступени меняют ловкость и ману на силу.', + 'MaxAlcohol': + 'Самый высокий уровень опьянения, которого может достичь герой.', + 'AlcoholDepletionRate': + 'Насколько быстро уровень опьянения падает обратно к трезвости.', + 'Swampweed': + 'Насколько герой одурманен; высокие ступени сдвигают его характеристики.', + 'MaxSwampweed': + 'Самый высокий уровень болотника, которого может достичь герой.', + 'SwampweedDepletionRate': + 'Насколько быстро проходит дурман от болотника.', + 'XPExecutedBounty': + 'Опыт, который получает тот, кто казнит этого персонажа.', + 'XPKillOrDefeatBounty': + 'Опыт, который получает тот, кто убьёт или победит этого персонажа.', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => 'Озвученная реплика'; diff --git a/apps/save-editor/lib/l10n/app_localizations_zh.dart b/apps/save-editor/lib/l10n/app_localizations_zh.dart index 920d73a90..1187bf309 100644 --- a/apps/save-editor/lib/l10n/app_localizations_zh.dart +++ b/apps/save-editor/lib/l10n/app_localizations_zh.dart @@ -1605,6 +1605,15 @@ class AppLocalizationsZh extends AppLocalizations { @override String get heroGroupAdvanced => '高级'; + @override + String get heroGroupDiving => '潜水'; + + @override + String get heroGroupSleep => '睡眠与休息'; + + @override + String get heroGroupIntoxication => '醉酒'; + @override String get heroEntryHeroTransform => '位置'; @@ -1883,43 +1892,67 @@ class AppLocalizationsZh extends AppLocalizations { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': '酒精值', - 'AlcoholDepletionRate': '酒精消退速率', - 'MaxAlcohol': '最大酒精值', - 'MaxSuperArmor': '最大霸体值', 'SuperArmor': '霸体值', - 'Fatigue': '疲劳值', - 'FillRatio': '填充比例', - 'FillRatioPeriod': '填充周期', - 'MaxFatigue': '最大疲劳值', - 'MaxThresholdIndex': '最大阈值索引', - 'RecoveryRatePerHourOfSleep': '每小时睡眠恢复量', - 'DamageMultiplier': '伤害倍率', - 'Toughness': '韧性', - 'ToughnessA': '韧性 A', - 'ToughnessB': '韧性 B', - 'ToughnessC': '韧性 C', - 'XPExecutedBounty': '处决经验奖励', - 'XPKillOrDefeatBounty': '击杀或击败经验奖励', - 'SpeedModifier': '速度修正', - 'CriticalLevelPercent': '临界等级(%)', - 'MaxOxygen': '最大氧气量', + 'MaxSuperArmor': '最大霸体值', + 'DamageMultiplier': '受到的伤害', + 'SpeedModifier': '移动速度', 'Oxygen': '氧气量', - 'OxygenDepletionRate': '氧气消耗速率', - 'OxygenRecoveryRate': '氧气恢复速率', - 'MaxRestTime': '最大休息时间', - 'MaxSleepTime': '最大睡眠时间', - 'SleepTime': '睡眠时间', - 'SleepTimeRecoveryAmount': '睡眠恢复量', - 'SleepTimeRecoveryPeriod': '睡眠恢复周期', - 'MaxSwampweed': '最大沼泽草量', - 'Swampweed': '沼泽草', - 'SwampweedDepletionRate': '沼泽草消耗速率', + 'MaxOxygen': '最大氧气量', + 'OxygenDepletionRate': '每秒氧气消耗', + 'OxygenRecoveryRate': '每秒氧气恢复', + 'CriticalLevelPercent': '缺氧警告阈值', + 'SleepTime': '剩余有效睡眠', + 'MaxSleepTime': '最大有效睡眠', + 'SleepTimeRecoveryAmount': '有效睡眠回补量', + 'SleepTimeRecoveryPeriod': '回补间隔', + 'MaxRestTime': '最长卧床时间', + 'Health_RecoveryRatePerHourOfSleep': '每小时睡眠回复生命', + 'Mana_RecoveryRatePerHourOfSleep': '每小时睡眠回复法力', + 'Alcohol': '酒精值', + 'MaxAlcohol': '最大酒精值', + 'AlcoholDepletionRate': '醒酒速度', + 'Swampweed': '沼泽草值', + 'MaxSwampweed': '最大沼泽草值', + 'SwampweedDepletionRate': '药性消退速度', + 'XPExecutedBounty': '处决获得的经验', + 'XPKillOrDefeatBounty': '击杀获得的经验', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': '主角在被一击打得踉跄之前还能扛下多少打击。', + 'MaxSuperArmor': '霸体值的上限,会随着等级提升和所穿的护甲一起增长。', + 'DamageMultiplier': '作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。', + 'SpeedModifier': '主角移动快慢的系数——1 为正常。', + 'Oxygen': '水下剩余的呼吸秒数,归零时主角就会淹死。', + 'MaxOxygen': '主角能在水下待多少秒,潜水技能可以提高这个上限。', + 'OxygenDepletionRate': '潜在水下时每秒消耗掉的空气量。', + 'OxygenRecoveryRate': '浮出水面后每秒回来的空气量。', + 'CriticalLevelPercent': '剩余空气低到这个比例时,游戏就会发出溺水警告。', + 'SleepTime': '还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。', + 'MaxSleepTime': '主角能攒下的有效睡眠时间上限。', + 'SleepTimeRecoveryAmount': '每次补充时重新加回来的有效睡眠小时数。', + 'SleepTimeRecoveryPeriod': '有效睡眠时间隔多久才会重新补满。', + 'MaxRestTime': '游戏允许一次躺在床上的最长时间。', + 'Health_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大生命值比例。', + 'Mana_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大法力值比例。', + 'Alcohol': '主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。', + 'MaxAlcohol': '主角能达到的最高酒精值。', + 'AlcoholDepletionRate': '酒精值往清醒方向回落得有多快。', + 'Swampweed': '主角嗨到什么程度,较高的档位会让他的属性此消彼长。', + 'MaxSwampweed': '主角能达到的最高沼泽草值。', + 'SwampweedDepletionRate': '沼泽草带来的迷幻劲头消退得有多快。', + 'XPExecutedBounty': '处决这名角色的人能拿到的经验值。', + 'XPKillOrDefeatBounty': '杀死或击败这名角色的人能拿到的经验值。', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => '语音台词'; @@ -4290,6 +4323,15 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { @override String get heroGroupAdvanced => '高级'; + @override + String get heroGroupDiving => '潜水'; + + @override + String get heroGroupSleep => '睡眠与休息'; + + @override + String get heroGroupIntoxication => '醉酒'; + @override String get heroEntryHeroTransform => '位置'; @@ -4568,43 +4610,67 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { @override String attributeManualFallbackLabel(String attributeId, String fallback) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'Alcohol': '酒精值', - 'AlcoholDepletionRate': '酒精消退速率', - 'MaxAlcohol': '最大酒精值', - 'MaxSuperArmor': '最大霸体值', 'SuperArmor': '霸体值', - 'Fatigue': '疲劳值', - 'FillRatio': '填充比例', - 'FillRatioPeriod': '填充周期', - 'MaxFatigue': '最大疲劳值', - 'MaxThresholdIndex': '最大阈值索引', - 'RecoveryRatePerHourOfSleep': '每小时睡眠恢复量', - 'DamageMultiplier': '伤害倍率', - 'Toughness': '韧性', - 'ToughnessA': '韧性 A', - 'ToughnessB': '韧性 B', - 'ToughnessC': '韧性 C', - 'XPExecutedBounty': '处决经验奖励', - 'XPKillOrDefeatBounty': '击杀或击败经验奖励', - 'SpeedModifier': '速度修正', - 'CriticalLevelPercent': '临界等级(%)', - 'MaxOxygen': '最大氧气量', + 'MaxSuperArmor': '最大霸体值', + 'DamageMultiplier': '受到的伤害', + 'SpeedModifier': '移动速度', 'Oxygen': '氧气量', - 'OxygenDepletionRate': '氧气消耗速率', - 'OxygenRecoveryRate': '氧气恢复速率', - 'MaxRestTime': '最大休息时间', - 'MaxSleepTime': '最大睡眠时间', - 'SleepTime': '睡眠时间', - 'SleepTimeRecoveryAmount': '睡眠恢复量', - 'SleepTimeRecoveryPeriod': '睡眠恢复周期', - 'MaxSwampweed': '最大沼泽草量', - 'Swampweed': '沼泽草', - 'SwampweedDepletionRate': '沼泽草消耗速率', + 'MaxOxygen': '最大氧气量', + 'OxygenDepletionRate': '每秒氧气消耗', + 'OxygenRecoveryRate': '每秒氧气恢复', + 'CriticalLevelPercent': '缺氧警告阈值', + 'SleepTime': '剩余有效睡眠', + 'MaxSleepTime': '最大有效睡眠', + 'SleepTimeRecoveryAmount': '有效睡眠回补量', + 'SleepTimeRecoveryPeriod': '回补间隔', + 'MaxRestTime': '最长卧床时间', + 'Health_RecoveryRatePerHourOfSleep': '每小时睡眠回复生命', + 'Mana_RecoveryRatePerHourOfSleep': '每小时睡眠回复法力', + 'Alcohol': '酒精值', + 'MaxAlcohol': '最大酒精值', + 'AlcoholDepletionRate': '醒酒速度', + 'Swampweed': '沼泽草值', + 'MaxSwampweed': '最大沼泽草值', + 'SwampweedDepletionRate': '药性消退速度', + 'XPExecutedBounty': '处决获得的经验', + 'XPKillOrDefeatBounty': '击杀获得的经验', 'other': '$fallback', }); return '$_temp0'; } + @override + String attributeManualTooltip(String attributeId) { + String _temp0 = intl.Intl.selectLogic(attributeId, { + 'SuperArmor': '主角在被一击打得踉跄之前还能扛下多少打击。', + 'MaxSuperArmor': '霸体值的上限,会随着等级提升和所穿的护甲一起增长。', + 'DamageMultiplier': '作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。', + 'SpeedModifier': '主角移动快慢的系数——1 为正常。', + 'Oxygen': '水下剩余的呼吸秒数,归零时主角就会淹死。', + 'MaxOxygen': '主角能在水下待多少秒,潜水技能可以提高这个上限。', + 'OxygenDepletionRate': '潜在水下时每秒消耗掉的空气量。', + 'OxygenRecoveryRate': '浮出水面后每秒回来的空气量。', + 'CriticalLevelPercent': '剩余空气低到这个比例时,游戏就会发出溺水警告。', + 'SleepTime': '还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。', + 'MaxSleepTime': '主角能攒下的有效睡眠时间上限。', + 'SleepTimeRecoveryAmount': '每次补充时重新加回来的有效睡眠小时数。', + 'SleepTimeRecoveryPeriod': '有效睡眠时间隔多久才会重新补满。', + 'MaxRestTime': '游戏允许一次躺在床上的最长时间。', + 'Health_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大生命值比例。', + 'Mana_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大法力值比例。', + 'Alcohol': '主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。', + 'MaxAlcohol': '主角能达到的最高酒精值。', + 'AlcoholDepletionRate': '酒精值往清醒方向回落得有多快。', + 'Swampweed': '主角嗨到什么程度,较高的档位会让他的属性此消彼长。', + 'MaxSwampweed': '主角能达到的最高沼泽草值。', + 'SwampweedDepletionRate': '沼泽草带来的迷幻劲头消退得有多快。', + 'XPExecutedBounty': '处决这名角色的人能拿到的经验值。', + 'XPKillOrDefeatBounty': '杀死或击败这名角色的人能拿到的经验值。', + 'other': '?', + }); + return '$_temp0'; + } + @override String get knowledgeTypeVoiceLine => '语音台词'; diff --git a/apps/save-editor/lib/l10n/app_pl.arb b/apps/save-editor/lib/l10n/app_pl.arb index 3a1cd9977..2a9b039fb 100644 --- a/apps/save-editor/lib/l10n/app_pl.arb +++ b/apps/save-editor/lib/l10n/app_pl.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Odporności", "heroGroupThieving": "Złodziejstwo", "heroGroupAdvanced": "Zaawansowane", + "heroGroupDiving": "Nurkowanie", + "heroGroupSleep": "Sen i odpoczynek", + "heroGroupIntoxication": "Odurzenie", "heroEntryHeroTransform": "Pozycja", "attributeEmpty": "{name} jest puste — wpisz wartość lub przywróć oryginał przed zapisem.", "attributeInvalidNumber": "Nieprawidłowa liczba dla {name}: „{text}”", @@ -573,7 +576,8 @@ "fallbackObjective": "Cel", "fallbackItem": "Przedmiot", "attributeSkillPointsFallback": "Punkty nauki (PN)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Alkohol} AlcoholDepletionRate{Tempo spadku poziomu alkoholu} MaxAlcohol{Maksymalny poziom alkoholu} MaxSuperArmor{Maksymalny superpancerz} SuperArmor{Superpancerz} Fatigue{Zmęczenie} FillRatio{Stopień napełnienia} FillRatioPeriod{Okres napełniania} MaxFatigue{Maksymalne zmęczenie} MaxThresholdIndex{Maksymalny indeks progu} RecoveryRatePerHourOfSleep{Regeneracja na godzinę snu} DamageMultiplier{Mnożnik obrażeń} Toughness{Wytrzymałość} ToughnessA{Wytrzymałość A} ToughnessB{Wytrzymałość B} ToughnessC{Wytrzymałość C} XPExecutedBounty{Nagroda PD za egzekucję} XPKillOrDefeatBounty{Nagroda PD za zabicie lub pokonanie} SpeedModifier{Modyfikator prędkości} CriticalLevelPercent{Poziom krytyczny (%)} MaxOxygen{Maksymalny poziom tlenu} Oxygen{Tlen} OxygenDepletionRate{Tempo zużycia tlenu} OxygenRecoveryRate{Tempo regeneracji tlenu} MaxRestTime{Maksymalny czas odpoczynku} MaxSleepTime{Maksymalny czas snu} SleepTime{Czas snu} SleepTimeRecoveryAmount{Wartość regeneracji podczas snu} SleepTimeRecoveryPeriod{Okres regeneracji podczas snu} MaxSwampweed{Maksymalny poziom bagiennego ziela} Swampweed{Bagienne ziele} SwampweedDepletionRate{Tempo zużycia bagiennego ziela} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Równowaga} MaxSuperArmor{Maks. równowaga} DamageMultiplier{Otrzymywane obrażenia} SpeedModifier{Szybkość ruchu} Oxygen{Powietrze} MaxOxygen{Maks. powietrze} OxygenDepletionRate{Zużycie powietrza na sekundę} OxygenRecoveryRate{Odzysk powietrza na sekundę} CriticalLevelPercent{Ostrzeżenie o powietrzu} SleepTime{Pozostałe godziny odpoczynku} MaxSleepTime{Maks. godziny odpoczynku} SleepTimeRecoveryAmount{Wielkość uzupełnienia} SleepTimeRecoveryPeriod{Czas do uzupełnienia} MaxRestTime{Maks. czas w łóżku} Health_RecoveryRatePerHourOfSleep{Życie na godzinę snu} Mana_RecoveryRatePerHourOfSleep{Mana na godzinę snu} Alcohol{Poziom alkoholu} MaxAlcohol{Maks. poziom alkoholu} AlcoholDepletionRate{Tempo trzeźwienia} Swampweed{Poziom bagiennego ziela} MaxSwampweed{Maks. bagienne ziele} SwampweedDepletionRate{Tempo mijania odurzenia} XPExecutedBounty{PD za dobicie} XPKillOrDefeatBounty{PD za zabicie} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Ile bohater zniesie, zanim cios wytrąci go z równowagi.} MaxSuperArmor{Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.} DamageMultiplier{Mnożnik obrażeń, które przyjmuje bohater – 1 to wartość normalna, wyższa boli bardziej.} SpeedModifier{Mnożnik tempa poruszania się bohatera – 1 to wartość normalna.} Oxygen{Sekundy powietrza pozostałe pod wodą; przy zerze bohater tonie.} MaxOxygen{Ile sekund bohater wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.} OxygenDepletionRate{Ile powietrza ubywa co sekundę pod wodą.} OxygenRecoveryRate{Ile powietrza wraca co sekundę po wynurzeniu.} CriticalLevelPercent{Ile powietrza musi zostać, by gra ostrzegła przed utonięciem.} SleepTime{Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.} MaxSleepTime{Największy zapas godzin odpoczynku, jaki bohater może mieć.} SleepTimeRecoveryAmount{Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.} SleepTimeRecoveryPeriod{Ile czasu mija, zanim zapas godzin odpoczynku uzupełni się na nowo.} MaxRestTime{Najdłuższy pojedynczy odpoczynek w łóżku, na jaki pozwala gra.} Health_RecoveryRatePerHourOfSleep{Część maksymalnego życia, która wraca za każdą przespaną godzinę.} Mana_RecoveryRatePerHourOfSleep{Część maksymalnej many, która wraca za każdą przespaną godzinę.} Alcohol{Jak bardzo bohater jest pijany; na wyższych stopniach zamienia zręczność i manę na siłę.} MaxAlcohol{Najwyższy poziom alkoholu, jaki bohater może osiągnąć.} AlcoholDepletionRate{Jak szybko poziom alkoholu spada z powrotem do trzeźwości.} Swampweed{Jak bardzo bohater jest odurzony; wyższe stopnie przestawiają jego atrybuty.} MaxSwampweed{Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.} SwampweedDepletionRate{Jak szybko mija odurzenie bagiennym zielem.} XPExecutedBounty{Doświadczenie, jakie dostaje ten, kto dobije tę postać.} XPKillOrDefeatBounty{Doświadczenie, jakie dostaje ten, kto zabije lub pokona tę postać.} other{?}}", "knowledgeTypeVoiceLine": "Kwestia głosowa", "knowledgeTypeOther": "Inne", "armorUpgradeUpper": "Góra", diff --git a/apps/save-editor/lib/l10n/app_pt.arb b/apps/save-editor/lib/l10n/app_pt.arb index 99ceaaf9f..f3873bd08 100644 --- a/apps/save-editor/lib/l10n/app_pt.arb +++ b/apps/save-editor/lib/l10n/app_pt.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Resistências", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avançado", + "heroGroupDiving": "Mergulho", + "heroGroupSleep": "Sono e descanso", + "heroGroupIntoxication": "Embriaguez", "heroEntryHeroTransform": "Posição", "attributeEmpty": "{name} está vazio — insira um valor ou restaure o original antes de salvar.", "attributeInvalidNumber": "Número inválido para {name}: \"{text}\"", @@ -573,7 +576,8 @@ "fallbackObjective": "Objetivo", "fallbackItem": "Item", "attributeSkillPointsFallback": "Pontos de aprendizado (PA)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Álcool} AlcoholDepletionRate{Taxa de redução do álcool} MaxAlcohol{Nível máximo de álcool} MaxSuperArmor{Superarmadura máxima} SuperArmor{Superarmadura} Fatigue{Fadiga} FillRatio{Proporção de preenchimento} FillRatioPeriod{Período de preenchimento} MaxFatigue{Fadiga máxima} MaxThresholdIndex{Índice máximo de limiar} RecoveryRatePerHourOfSleep{Recuperação por hora de sono} DamageMultiplier{Multiplicador de dano} Toughness{Tenacidade} ToughnessA{Tenacidade A} ToughnessB{Tenacidade B} ToughnessC{Tenacidade C} XPExecutedBounty{Recompensa de XP por execução} XPKillOrDefeatBounty{Recompensa de XP por morte ou derrota} SpeedModifier{Modificador de velocidade} CriticalLevelPercent{Nível crítico (%)} MaxOxygen{Oxigênio máximo} Oxygen{Oxigênio} OxygenDepletionRate{Taxa de consumo de oxigênio} OxygenRecoveryRate{Taxa de recuperação de oxigênio} MaxRestTime{Tempo máximo de descanso} MaxSleepTime{Tempo máximo de sono} SleepTime{Tempo de sono} SleepTimeRecoveryAmount{Quantidade recuperada durante o sono} SleepTimeRecoveryPeriod{Intervalo de recuperação durante o sono} MaxSwampweed{Quantidade máxima de erva do pântano} Swampweed{Erva do pântano} SwampweedDepletionRate{Taxa de consumo de erva do pântano} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por execução} XPKillOrDefeatBounty{XP por matar} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência concedida a quem executa este personagem.} XPKillOrDefeatBounty{Experiência concedida a quem mata ou derrota este personagem.} other{?}}", "knowledgeTypeVoiceLine": "Linha de voz", "knowledgeTypeOther": "Outro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_pt_BR.arb b/apps/save-editor/lib/l10n/app_pt_BR.arb index 44b19523e..f0ddf4d79 100644 --- a/apps/save-editor/lib/l10n/app_pt_BR.arb +++ b/apps/save-editor/lib/l10n/app_pt_BR.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Resistências", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avançado", + "heroGroupDiving": "Mergulho", + "heroGroupSleep": "Sono e descanso", + "heroGroupIntoxication": "Embriaguez", "heroEntryHeroTransform": "Posição", "attributeEmpty": "{name} está vazio — insira um valor ou restaure o original antes de salvar.", "attributeInvalidNumber": "Número inválido para {name}: \"{text}\"", @@ -573,7 +576,8 @@ "fallbackObjective": "Objetivo", "fallbackItem": "Item", "attributeSkillPointsFallback": "Pontos de aprendizado (PA)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Álcool} AlcoholDepletionRate{Taxa de redução do álcool} MaxAlcohol{Nível máximo de álcool} MaxSuperArmor{Superarmadura máxima} SuperArmor{Superarmadura} Fatigue{Fadiga} FillRatio{Proporção de preenchimento} FillRatioPeriod{Período de preenchimento} MaxFatigue{Fadiga máxima} MaxThresholdIndex{Índice máximo de limiar} RecoveryRatePerHourOfSleep{Recuperação por hora de sono} DamageMultiplier{Multiplicador de dano} Toughness{Tenacidade} ToughnessA{Tenacidade A} ToughnessB{Tenacidade B} ToughnessC{Tenacidade C} XPExecutedBounty{Recompensa de XP por execução} XPKillOrDefeatBounty{Recompensa de XP por morte ou derrota} SpeedModifier{Modificador de velocidade} CriticalLevelPercent{Nível crítico (%)} MaxOxygen{Oxigênio máximo} Oxygen{Oxigênio} OxygenDepletionRate{Taxa de consumo de oxigênio} OxygenRecoveryRate{Taxa de recuperação de oxigênio} MaxRestTime{Tempo máximo de descanso} MaxSleepTime{Tempo máximo de sono} SleepTime{Tempo de sono} SleepTimeRecoveryAmount{Quantidade recuperada durante o sono} SleepTimeRecoveryPeriod{Intervalo de recuperação durante o sono} MaxSwampweed{Quantidade máxima de erva do pântano} Swampweed{Erva do pântano} SwampweedDepletionRate{Taxa de consumo de erva do pântano} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por execução} XPKillOrDefeatBounty{XP por matar} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência concedida a quem executa este personagem.} XPKillOrDefeatBounty{Experiência concedida a quem mata ou derrota este personagem.} other{?}}", "knowledgeTypeVoiceLine": "Linha de voz", "knowledgeTypeOther": "Outro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_ru.arb b/apps/save-editor/lib/l10n/app_ru.arb index 293a35d7b..9637fe7f5 100644 --- a/apps/save-editor/lib/l10n/app_ru.arb +++ b/apps/save-editor/lib/l10n/app_ru.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "Сопротивления", "heroGroupThieving": "Воровство", "heroGroupAdvanced": "Дополнительно", + "heroGroupDiving": "Ныряние", + "heroGroupSleep": "Сон и отдых", + "heroGroupIntoxication": "Опьянение", "heroEntryHeroTransform": "Позиция", "attributeEmpty": "{name} не заполнено — введите значение или восстановите исходное перед сохранением.", "attributeInvalidNumber": "Недопустимое число для {name}: «{text}»", @@ -573,7 +576,8 @@ "fallbackObjective": "Цель", "fallbackItem": "Предмет", "attributeSkillPointsFallback": "Очки обучения (LP)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{Алкоголь} AlcoholDepletionRate{Скорость выведения алкоголя} MaxAlcohol{Максимальный уровень алкоголя} MaxSuperArmor{Максимальная суперброня} SuperArmor{Суперброня} Fatigue{Усталость} FillRatio{Коэффициент заполнения} FillRatioPeriod{Период заполнения} MaxFatigue{Максимальная усталость} MaxThresholdIndex{Максимальный индекс порога} RecoveryRatePerHourOfSleep{Восстановление за час сна} DamageMultiplier{Множитель урона} Toughness{Стойкость} ToughnessA{Стойкость A} ToughnessB{Стойкость B} ToughnessC{Стойкость C} XPExecutedBounty{Опыт за казнь} XPKillOrDefeatBounty{Опыт за убийство или победу} SpeedModifier{Модификатор скорости} CriticalLevelPercent{Критический уровень (%)} MaxOxygen{Максимальный запас кислорода} Oxygen{Кислород} OxygenDepletionRate{Скорость расхода кислорода} OxygenRecoveryRate{Скорость восстановления кислорода} MaxRestTime{Максимальное время отдыха} MaxSleepTime{Максимальное время сна} SleepTime{Время сна} SleepTimeRecoveryAmount{Объём восстановления во сне} SleepTimeRecoveryPeriod{Период восстановления во сне} MaxSwampweed{Максимальный запас болотника} Swampweed{Болотник} SwampweedDepletionRate{Скорость расхода болотника} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Стойкость} MaxSuperArmor{Макс. стойкость} DamageMultiplier{Получаемый урон} SpeedModifier{Скорость передвижения} Oxygen{Запас воздуха} MaxOxygen{Макс. запас воздуха} OxygenDepletionRate{Расход воздуха в секунду} OxygenRecoveryRate{Возврат воздуха в секунду} CriticalLevelPercent{Порог нехватки воздуха} SleepTime{Полезные часы сна} MaxSleepTime{Макс. полезные часы сна} SleepTimeRecoveryAmount{Возврат полезных часов} SleepTimeRecoveryPeriod{Интервал восполнения} MaxRestTime{Макс. время в кровати} Health_RecoveryRatePerHourOfSleep{Здоровье за час сна} Mana_RecoveryRatePerHourOfSleep{Мана за час сна} Alcohol{Уровень опьянения} MaxAlcohol{Макс. опьянение} AlcoholDepletionRate{Скорость отрезвления} Swampweed{Уровень болотника} MaxSwampweed{Макс. уровень болотника} SwampweedDepletionRate{Скорость выветривания} XPExecutedBounty{Опыт за казнь} XPKillOrDefeatBounty{Опыт за убийство} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Сколько герой выдерживает, прежде чем удар его пошатнёт.} MaxSuperArmor{Полный запас стойкости; он растёт с уровнем и с надетой бронёй.} DamageMultiplier{Множитель урона, который получает герой: 1 — как обычно, больше — больнее.} SpeedModifier{Множитель того, как быстро герой двигается: 1 — как обычно.} Oxygen{Сколько секунд воздуха осталось под водой; на нуле герой тонет.} MaxOxygen{Сколько секунд герой может пробыть под водой; навык Ныряние это повышает.} OxygenDepletionRate{Сколько воздуха расходуется под водой каждую секунду.} OxygenRecoveryRate{Сколько воздуха возвращается каждую секунду после всплытия.} CriticalLevelPercent{Доля оставшегося воздуха, при которой игра предупреждает об угрозе утонуть.} SleepTime{Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.} MaxSleepTime{Наибольший запас полезных часов сна, который может держать герой.} SleepTimeRecoveryAmount{Сколько полезных часов сна возвращается при каждом восполнении.} SleepTimeRecoveryPeriod{Сколько времени проходит, прежде чем запас полезных часов сна восполнится снова.} MaxRestTime{Самое долгое пребывание в кровати за один раз, которое допускает игра.} Health_RecoveryRatePerHourOfSleep{Доля максимального здоровья, которая возвращается за каждый час сна.} Mana_RecoveryRatePerHourOfSleep{Доля максимальной маны, которая возвращается за каждый час сна.} Alcohol{Насколько герой пьян; высокие ступени меняют ловкость и ману на силу.} MaxAlcohol{Самый высокий уровень опьянения, которого может достичь герой.} AlcoholDepletionRate{Насколько быстро уровень опьянения падает обратно к трезвости.} Swampweed{Насколько герой одурманен; высокие ступени сдвигают его характеристики.} MaxSwampweed{Самый высокий уровень болотника, которого может достичь герой.} SwampweedDepletionRate{Насколько быстро проходит дурман от болотника.} XPExecutedBounty{Опыт, который получает тот, кто казнит этого персонажа.} XPKillOrDefeatBounty{Опыт, который получает тот, кто убьёт или победит этого персонажа.} other{?}}", "knowledgeTypeVoiceLine": "Озвученная реплика", "knowledgeTypeOther": "Другое", "armorUpgradeUpper": "Верх", diff --git a/apps/save-editor/lib/l10n/app_zh.arb b/apps/save-editor/lib/l10n/app_zh.arb index 90aec8554..c56ad9631 100644 --- a/apps/save-editor/lib/l10n/app_zh.arb +++ b/apps/save-editor/lib/l10n/app_zh.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "抗性", "heroGroupThieving": "盗窃", "heroGroupAdvanced": "高级", + "heroGroupDiving": "潜水", + "heroGroupSleep": "睡眠与休息", + "heroGroupIntoxication": "醉酒", "heroEntryHeroTransform": "位置", "attributeEmpty": "{name} 为空 — 请输入一个值,或在保存前恢复原始值。", "attributeInvalidNumber": "{name} 的数字无效:“{text}”", @@ -573,7 +576,8 @@ "fallbackObjective": "目标", "fallbackItem": "物品", "attributeSkillPointsFallback": "学习点数(LP)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{酒精值} AlcoholDepletionRate{酒精消退速率} MaxAlcohol{最大酒精值} MaxSuperArmor{最大霸体值} SuperArmor{霸体值} Fatigue{疲劳值} FillRatio{填充比例} FillRatioPeriod{填充周期} MaxFatigue{最大疲劳值} MaxThresholdIndex{最大阈值索引} RecoveryRatePerHourOfSleep{每小时睡眠恢复量} DamageMultiplier{伤害倍率} Toughness{韧性} ToughnessA{韧性 A} ToughnessB{韧性 B} ToughnessC{韧性 C} XPExecutedBounty{处决经验奖励} XPKillOrDefeatBounty{击杀或击败经验奖励} SpeedModifier{速度修正} CriticalLevelPercent{临界等级(%)} MaxOxygen{最大氧气量} Oxygen{氧气量} OxygenDepletionRate{氧气消耗速率} OxygenRecoveryRate{氧气恢复速率} MaxRestTime{最大休息时间} MaxSleepTime{最大睡眠时间} SleepTime{睡眠时间} SleepTimeRecoveryAmount{睡眠恢复量} SleepTimeRecoveryPeriod{睡眠恢复周期} MaxSwampweed{最大沼泽草量} Swampweed{沼泽草} SwampweedDepletionRate{沼泽草消耗速率} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{处决获得的经验} XPKillOrDefeatBounty{击杀获得的经验} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{处决这名角色的人能拿到的经验值。} XPKillOrDefeatBounty{杀死或击败这名角色的人能拿到的经验值。} other{?}}", "knowledgeTypeVoiceLine": "语音台词", "knowledgeTypeOther": "其他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/l10n/app_zh_Hans.arb b/apps/save-editor/lib/l10n/app_zh_Hans.arb index c8a77a6c5..f8f9676f0 100644 --- a/apps/save-editor/lib/l10n/app_zh_Hans.arb +++ b/apps/save-editor/lib/l10n/app_zh_Hans.arb @@ -452,6 +452,9 @@ "heroGroupResistances": "抗性", "heroGroupThieving": "盗窃", "heroGroupAdvanced": "高级", + "heroGroupDiving": "潜水", + "heroGroupSleep": "睡眠与休息", + "heroGroupIntoxication": "醉酒", "heroEntryHeroTransform": "位置", "attributeEmpty": "{name} 为空 — 请输入一个值,或在保存前恢复原始值。", "attributeInvalidNumber": "{name} 的数字无效:“{text}”", @@ -573,7 +576,8 @@ "fallbackObjective": "目标", "fallbackItem": "物品", "attributeSkillPointsFallback": "学习点数(LP)", - "attributeManualFallbackLabel": "{attributeId, select, Alcohol{酒精值} AlcoholDepletionRate{酒精消退速率} MaxAlcohol{最大酒精值} MaxSuperArmor{最大霸体值} SuperArmor{霸体值} Fatigue{疲劳值} FillRatio{填充比例} FillRatioPeriod{填充周期} MaxFatigue{最大疲劳值} MaxThresholdIndex{最大阈值索引} RecoveryRatePerHourOfSleep{每小时睡眠恢复量} DamageMultiplier{伤害倍率} Toughness{韧性} ToughnessA{韧性 A} ToughnessB{韧性 B} ToughnessC{韧性 C} XPExecutedBounty{处决经验奖励} XPKillOrDefeatBounty{击杀或击败经验奖励} SpeedModifier{速度修正} CriticalLevelPercent{临界等级(%)} MaxOxygen{最大氧气量} Oxygen{氧气量} OxygenDepletionRate{氧气消耗速率} OxygenRecoveryRate{氧气恢复速率} MaxRestTime{最大休息时间} MaxSleepTime{最大睡眠时间} SleepTime{睡眠时间} SleepTimeRecoveryAmount{睡眠恢复量} SleepTimeRecoveryPeriod{睡眠恢复周期} MaxSwampweed{最大沼泽草量} Swampweed{沼泽草} SwampweedDepletionRate{沼泽草消耗速率} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{处决获得的经验} XPKillOrDefeatBounty{击杀获得的经验} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{处决这名角色的人能拿到的经验值。} XPKillOrDefeatBounty{杀死或击败这名角色的人能拿到的经验值。} other{?}}", "knowledgeTypeVoiceLine": "语音台词", "knowledgeTypeOther": "其他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/loc/attribute_loc.dart b/apps/save-editor/lib/loc/attribute_loc.dart index d09dca394..3e6da50fe 100644 --- a/apps/save-editor/lib/loc/attribute_loc.dart +++ b/apps/save-editor/lib/loc/attribute_loc.dart @@ -1,3 +1,5 @@ +import 'package:goresave/features/editor/domain/hero_attributes.dart' + show heroAttributeKey; import 'package:goresave/l10n/app_localizations.dart'; import 'game_lang.dart'; @@ -16,7 +18,7 @@ String localizedAttributeName( String? setClass, AppLocalizations? l10n, }) { - final fallback = readableAttributeName(attributeId, l10n); + final fallback = readableAttributeName(attributeId, l10n, setClass); if (catalog.isEmpty || attributeId.trim().isEmpty) return fallback; final id = _catalogPart(attributeId); @@ -64,7 +66,11 @@ String localizedAttributeName( /// Human-friendly fallback for attributes absent from the loc catalog. /// Technical ids remain stable in the underlying edit paths; only their label /// is prettified here (`DamageMultiplier` -> `Damage multiplier`). -String readableAttributeName(String attributeId, [AppLocalizations? l10n]) { +String readableAttributeName( + String attributeId, [ + AppLocalizations? l10n, + String? setClass, +]) { final trimmed = attributeId.trim(); if (trimmed.isEmpty) return attributeId; if (trimmed == 'SkillPoints') { @@ -83,7 +89,25 @@ String readableAttributeName(String attributeId, [AppLocalizations? l10n]) { text = text.replaceAll(RegExp(r'\s+'), ' ').trim(); if (text.isEmpty) return trimmed; final readable = '${text[0].toUpperCase()}${text.substring(1).toLowerCase()}'; - return l10n?.attributeManualFallbackLabel(trimmed, readable) ?? readable; + // Keyed by the curated view's composite key, so an id that means something + // different per attribute set (RecoveryRatePerHourOfSleep on Health vs Mana) + // can carry its own wording. + final key = heroAttributeKey(trimmed, setClass); + return l10n?.attributeManualFallbackLabel(key, readable) ?? readable; +} + +/// One-sentence explanation of what an attribute does in the game, for the +/// tooltip on its label. Empty when we have nothing worth saying, in which case +/// the caller shows no tooltip at all. +String attributeTooltip( + String attributeId, { + String? setClass, + AppLocalizations? l10n, +}) { + if (l10n == null) return ''; + final key = heroAttributeKey(attributeId.trim(), setClass); + final text = l10n.attributeManualTooltip(key); + return text == '?' ? '' : text; } String? _attributeSetName(String? setClass) { diff --git a/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart b/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart index 35bccba28..a966c0293 100644 --- a/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart +++ b/apps/save-editor/test/features/editor/domain/hero_attributes_test.dart @@ -34,8 +34,18 @@ TypedPropertyHit _heroHit( void main() { test('pairs BaseValue and CurrentValue leaves into one attribute', () { final attributes = parseHeroAttributes([ - _heroHit('/Script/G1R.AttributeSet_Health', 'MaxHealth', 'BaseValue', '64'), - _heroHit('/Script/G1R.AttributeSet_Health', 'MaxHealth', 'CurrentValue', '64'), + _heroHit( + '/Script/G1R.AttributeSet_Health', + 'MaxHealth', + 'BaseValue', + '64', + ), + _heroHit( + '/Script/G1R.AttributeSet_Health', + 'MaxHealth', + 'CurrentValue', + '64', + ), ]); expect(attributes, hasLength(1)); @@ -51,10 +61,18 @@ void main() { test('keeps same-id attributes from different sets separate', () { final attributes = parseHeroAttributes([ - _heroHit('/Script/G1R.AttributeSet_Health', 'RecoveryRatePerHourOfSleep', - 'BaseValue', '0.125'), - _heroHit('/Script/G1R.AttributeSet_Mana', 'RecoveryRatePerHourOfSleep', - 'BaseValue', '-0.125'), + _heroHit( + '/Script/G1R.AttributeSet_Health', + 'RecoveryRatePerHourOfSleep', + 'BaseValue', + '0.125', + ), + _heroHit( + '/Script/G1R.AttributeSet_Mana', + 'RecoveryRatePerHourOfSleep', + 'BaseValue', + '-0.125', + ), ]); expect(attributes, hasLength(2)); @@ -71,10 +89,20 @@ void main() { ); final attributes = parseHeroAttributes([ nonHero, - _heroHit('/Script/G1R.AttributeSet_Health', 'Health', 'BaseValue', '35', - editable: false), - _heroHit('/Script/G1R.AttributeSet_Health', 'Health', 'CurrentValue', '35', - type: 'StrProperty'), + _heroHit( + '/Script/G1R.AttributeSet_Health', + 'Health', + 'BaseValue', + '35', + editable: false, + ), + _heroHit( + '/Script/G1R.AttributeSet_Health', + 'Health', + 'CurrentValue', + '35', + type: 'StrProperty', + ), ]); expect(attributes, isEmpty); @@ -86,11 +114,47 @@ void main() { // The per-weapon crit values are hidden from the curated view now; the // classifier still buckets any leftover into advanced. expect(heroAttributeGroup('Critical_OneHand'), HeroAttributeGroup.advanced); - expect(heroAttributeGroup('Resistance_Fire'), HeroAttributeGroup.resistances); + expect( + heroAttributeGroup('Resistance_Fire'), + HeroAttributeGroup.resistances, + ); expect(heroAttributeGroup('PickPocketing'), HeroAttributeGroup.thieving); expect(heroAttributeGroup('MagicianLevel'), HeroAttributeGroup.advanced); - expect(heroAttributeGroup('Swampweed'), HeroAttributeGroup.advanced); - expect(heroAttributeGroup('SomeFutureAttribute'), HeroAttributeGroup.advanced); + expect(heroAttributeGroup('Swampweed'), HeroAttributeGroup.intoxication); + expect(heroAttributeGroup('Oxygen'), HeroAttributeGroup.diving); + expect(heroAttributeGroup('SleepTime'), HeroAttributeGroup.sleep); + expect(heroAttributeGroup('SpeedModifier'), HeroAttributeGroup.combat); + // Same id, different set: real when sleep restores health or mana, inert on + // Fatigue (which belongs to the unreachable Survival mode and is hidden). + expect( + heroAttributeGroup( + 'RecoveryRatePerHourOfSleep', + '/Script/G1R.AttributeSet_Health', + ), + HeroAttributeGroup.sleep, + ); + expect( + heroAttributeHidden( + 'RecoveryRatePerHourOfSleep', + '/Script/G1R.AttributeSet_Fatigue', + ), + isTrue, + ); + expect( + heroAttributeHidden( + 'RecoveryRatePerHourOfSleep', + '/Script/G1R.AttributeSet_Mana', + ), + isFalse, + ); + // The whole Survival trio is hidden: the abilities never activate. + for (final id in ['Hunger', 'Thirst', 'Fatigue', 'FillRatio']) { + expect(heroAttributeHidden(id), isTrue, reason: id); + } + expect( + heroAttributeGroup('SomeFutureAttribute'), + HeroAttributeGroup.advanced, + ); }); test('drops attributes the game derives from a learned skill', () { @@ -101,12 +165,42 @@ void main() { // them here would be a control that silently does nothing, and MagicianLevel // carried the same label as the Talente row on top of that. final attributes = parseHeroAttributes([ - _heroHit('/Script/G1R.AttributeSet_Mana', 'MagicianLevel', 'BaseValue', '0'), - _heroHit('/Script/G1R.AttributeSet_Mana', 'MagicianLevel', 'CurrentValue', '6'), - _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_OneHand', 'BaseValue', '0'), - _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_Fists', 'BaseValue', '0'), - _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_TwoHand', 'BaseValue', '0'), - _heroHit('/Script/G1R.AttributeSet_Strength', 'Critical_Orc', 'BaseValue', '0'), + _heroHit( + '/Script/G1R.AttributeSet_Mana', + 'MagicianLevel', + 'BaseValue', + '0', + ), + _heroHit( + '/Script/G1R.AttributeSet_Mana', + 'MagicianLevel', + 'CurrentValue', + '6', + ), + _heroHit( + '/Script/G1R.AttributeSet_Strength', + 'Critical_OneHand', + 'BaseValue', + '0', + ), + _heroHit( + '/Script/G1R.AttributeSet_Strength', + 'Critical_Fists', + 'BaseValue', + '0', + ), + _heroHit( + '/Script/G1R.AttributeSet_Strength', + 'Critical_TwoHand', + 'BaseValue', + '0', + ), + _heroHit( + '/Script/G1R.AttributeSet_Strength', + 'Critical_Orc', + 'BaseValue', + '0', + ), _heroHit('/Script/G1R.AttributeSet_Mana', 'MaxMana', 'BaseValue', '35'), ]); @@ -116,13 +210,26 @@ void main() { test('sorts core attributes in display order before unknown ones', () { final attributes = parseHeroAttributes([ - _heroHit('/Script/G1R.AttributeSet_Strength', 'Strength', 'BaseValue', '10'), - _heroHit('/Script/G1R.AttributeSet_Health', 'MaxHealth', 'BaseValue', '64'), + _heroHit( + '/Script/G1R.AttributeSet_Strength', + 'Strength', + 'BaseValue', + '10', + ), + _heroHit( + '/Script/G1R.AttributeSet_Health', + 'MaxHealth', + 'BaseValue', + '64', + ), _heroHit('/Script/G1R.AttributeSet_Health', 'Health', 'BaseValue', '35'), ]); - expect(attributes.map((a) => a.id).toList(), - ['Health', 'MaxHealth', 'Strength']); + expect(attributes.map((a) => a.id).toList(), [ + 'Health', + 'MaxHealth', + 'Strength', + ]); }); test('labels SkillPoints as learn points', () { diff --git a/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart b/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart index f35dc9717..a67c1e6c8 100644 --- a/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart +++ b/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart @@ -60,6 +60,7 @@ Finder _heroBaseField(String id) { 'MaxHealth' => '/Script/G1R.AttributeSet_Health', 'Resistance_Fire' => '/Script/G1R.AttributeSet_Resistance', 'Swampweed' => '/Script/G1R.AttributeSet_Drugs', + 'XPKillOrDefeatBounty' => '/Script/G1R.AttributeSet_LevelProgression', _ => throw ArgumentError.value(id, 'id'), }; return find.byKey(ValueKey('hero-attribute:$setClass:$id:base')); @@ -238,7 +239,11 @@ void main() { _card( load: () async => HeroAttributesResult( attributes: [ - _attribute('Swampweed', '/Script/G1R.AttributeSet_Drugs', 0), + _attribute( + 'XPKillOrDefeatBounty', + '/Script/G1R.AttributeSet_LevelProgression', + 0, + ), ], ), ), @@ -249,7 +254,7 @@ void main() { // Sidebar entry exists (may appear in sidebar AND card header). expect(find.text('Advanced'), findsWidgets); // Default: only group, so it's selected — row is immediately visible. - expect(_heroBaseField('Swampweed'), findsOneWidget); + expect(_heroBaseField('XPKillOrDefeatBounty'), findsOneWidget); // No ExpansionTile needed. expect(find.byType(ExpansionTile), findsNothing); }); diff --git a/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart b/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart index ee0b6645d..e695935eb 100644 --- a/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart +++ b/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart @@ -191,8 +191,9 @@ void main() { await tester.pumpWidget( _wrap( _panel( - load: () async => - NpcAttributesResult(attributes: [_row('DamageMultiplier', 1, 1)]), + load: () async => NpcAttributesResult( + attributes: [_row('XPKillOrDefeatBounty', 1, 1)], + ), ), ), ); @@ -201,7 +202,7 @@ void main() { // Only group present is Advanced (the catch-all), so it's selected and // its row is immediately visible. expect(find.text('Advanced'), findsWidgets); - expect(_npcBaseField('DamageMultiplier'), findsOneWidget); + expect(_npcBaseField('XPKillOrDefeatBounty'), findsOneWidget); }); testWidgets('Thieving-only attributes produce NO Thieving group for NPCs', ( diff --git a/apps/save-editor/test/l10n_arb_coverage_test.dart b/apps/save-editor/test/l10n_arb_coverage_test.dart index fa3deaa73..02ade1c4c 100644 --- a/apps/save-editor/test/l10n_arb_coverage_test.dart +++ b/apps/save-editor/test/l10n_arb_coverage_test.dart @@ -100,39 +100,34 @@ void main() { }); test('every locale covers all known advanced attribute fallbacks', () { + // Every value the curated attribute view can show. The Survival trio + // (hunger/thirst/fatigue) and the Toughness quartet are deliberately + // absent — they are hidden, see docs/reference/survival-mode.md. const advancedAttributeIds = { - 'Alcohol', - 'AlcoholDepletionRate', - 'MaxAlcohol', - 'MaxSuperArmor', 'SuperArmor', - 'Fatigue', - 'FillRatio', - 'FillRatioPeriod', - 'MaxFatigue', - 'MaxThresholdIndex', - 'RecoveryRatePerHourOfSleep', + 'MaxSuperArmor', 'DamageMultiplier', - 'Toughness', - 'ToughnessA', - 'ToughnessB', - 'ToughnessC', - 'XPExecutedBounty', - 'XPKillOrDefeatBounty', 'SpeedModifier', - 'CriticalLevelPercent', - 'MaxOxygen', 'Oxygen', + 'MaxOxygen', 'OxygenDepletionRate', 'OxygenRecoveryRate', - 'MaxRestTime', - 'MaxSleepTime', + 'CriticalLevelPercent', 'SleepTime', + 'MaxSleepTime', 'SleepTimeRecoveryAmount', 'SleepTimeRecoveryPeriod', - 'MaxSwampweed', + 'MaxRestTime', + 'Health_RecoveryRatePerHourOfSleep', + 'Mana_RecoveryRatePerHourOfSleep', + 'Alcohol', + 'MaxAlcohol', + 'AlcoholDepletionRate', 'Swampweed', + 'MaxSwampweed', 'SwampweedDepletionRate', + 'XPExecutedBounty', + 'XPKillOrDefeatBounty', }; final localeFiles = l10nDirectory.listSync().whereType().where( (file) => RegExp(r'app_[\w]+\.arb$').hasMatch(file.path), diff --git a/apps/save-editor/test/loc/attribute_loc_test.dart b/apps/save-editor/test/loc/attribute_loc_test.dart index 5573960dd..16cf9a532 100644 --- a/apps/save-editor/test/loc/attribute_loc_test.dart +++ b/apps/save-editor/test/loc/attribute_loc_test.dart @@ -72,15 +72,47 @@ void main() { 'DamageMultiplier', l10n: AppLocalizationsDe(), ), - 'Schadensmultiplikator', + 'Erlittener Schaden', ); + // Set-qualified: the same id means something different per attribute set, + // so the label has to follow the set, not the bare id. + expect( + localizedAttributeName( + const {}, + gameLangByCode('de'), + 'RecoveryRatePerHourOfSleep', + setClass: '/Script/G1R.AttributeSet_Health', + l10n: AppLocalizationsDe(), + ), + 'Leben je Schlafstunde', + ); + expect( + localizedAttributeName( + const {}, + gameLangByCode('de'), + 'RecoveryRatePerHourOfSleep', + setClass: '/Script/G1R.AttributeSet_Mana', + l10n: AppLocalizationsDe(), + ), + 'Mana je Schlafstunde', + ); + // The tooltip explains the value; unknown ids get none. + expect( + attributeTooltip( + 'Oxygen', + setClass: '/Script/G1R.AttributeSet_Oxygen', + l10n: AppLocalizationsDe(), + ), + startsWith('Verbleibende Sekunden Luft'), + ); + expect(attributeTooltip('SomeFutureAttribute', l10n: AppLocalizationsDe()), ''); expect( readableAttributeName('OxygenRecoveryRate', AppLocalizationsJa()), - '酸素回復速度', + '息の回復(毎秒)', ); expect( readableAttributeName('MaxSwampweed', AppLocalizationsZh()), - '最大沼泽草量', + '最大沼泽草值', ); }); From b9ee3af21b38178c8e61921124e00e6f9b5b8769 Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Fri, 14 Aug 2026 11:42:14 +0200 Subject: [PATCH 4/8] docs(reference): record the shipped-but-unreachable survival mode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gothic 1 Remake contains a complete hunger/thirst/fatigue system that no player can reach: the abilities are granted, the attribute sets are seeded, the per-stage effects are configured — and the difficulty UI row that would switch it on ships hidden behind m_IsShown = false, with the remaining gate in native code no script ever calls. Writing it down because the save editor now hides sixteen attributes on the strength of it. If a patch switches the mode on, that decision has to be revisited, and nobody should have to redo the investigation to know what those values meant. Covers what it is, why it does not run, what was measured in game, the three places the flag is stored (and the permadeath field sitting next to it), the full mechanics including a mis-wired thirst threshold, the inventory of hidden values, and the steps to re-enable the group. Registered in the reference index and in the MCP page table, so the server can serve it as gore://reference/survival-mode. Co-Authored-By: Claude Opus 5 --- crates/gore-mcp/src/guide/pages.rs | 1 + docs/reference/README.md | 1 + docs/reference/survival-mode.md | 196 +++++++++++++++++++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 docs/reference/survival-mode.md diff --git a/crates/gore-mcp/src/guide/pages.rs b/crates/gore-mcp/src/guide/pages.rs index e2de37c36..eb6d90b32 100644 --- a/crates/gore-mcp/src/guide/pages.rs +++ b/crates/gore-mcp/src/guide/pages.rs @@ -63,6 +63,7 @@ pages! { Reference / "studio-authoring" => "reference/studio-authoring.md", Reference / "studio-voice" => "reference/studio-voice.md", Reference / "studio-project-archive" => "reference/studio-project-archive.md", + Reference / "survival-mode" => "reference/survival-mode.md", } #[cfg(test)] diff --git a/docs/reference/README.md b/docs/reference/README.md index 0987de0b1..c4ee603a5 100644 --- a/docs/reference/README.md +++ b/docs/reference/README.md @@ -20,6 +20,7 @@ are changing GORE itself and need to know what a boundary guarantees. | [Mod Studio NPC and quest authoring internals](studio-authoring.md) | The offline logical-clone proof, the native archetype catalog, the revision-3 draft transaction, and the quest publication contract. | | [Mod Studio voice authoring internals](studio-voice.md) | Installed target resolution, the all-or-nothing sealed build, and the publication and failure boundaries. | | [Mod Studio project snapshot internals](studio-project-archive.md) | Snapshot V2 archive format, reachable closure, determinism, the import security model, wire limits, and stable failure codes. | +| [Survival mode](survival-mode.md) | The shipped-but-unreachable hunger/thirst/fatigue system: why it never activates, the measurement that proved it, its full mechanics, and every attribute the save editor therefore hides. | These pages stay in the repository. They are **not** shipped in the release zip and are not rendered by `gore guide html` — but `gore.exe` does embed them, so diff --git a/docs/reference/survival-mode.md b/docs/reference/survival-mode.md new file mode 100644 index 000000000..df83ecc75 --- /dev/null +++ b/docs/reference/survival-mode.md @@ -0,0 +1,196 @@ +# Survival mode + +Gothic 1 Remake ships a complete hunger / thirst / fatigue system that no player +can reach. This page records what it is, why it does not run, exactly what was +measured, and every value the save editor therefore hides — so that if a patch +ever switches it on, turning the editor back on is a small, informed change +rather than a fresh investigation. + +Everything below was established offline from the AngelScript cache and the game +localization, then confirmed in the running game with a UE4SS probe on +2026-08-13 against Steam build changelist 171864. + +## What it is + +The game's own localization describes it: + +| Key | English | +|---|---| +| `ui_difficulty_survivaltooltip` | Adds hunger, thirst and fatigue as additional survival mechanics. | +| `ui_profile_survival` | Survival | + +There is no `ui_difficulty_survivallabel`, and no localized name or icon exists +for any of the three needs anywhere in the 43,851-key catalog or in the IoStore +texture index. The player-facing surface was never finished. + +## Why it does not run + +The system is built and wired, right up to the last step: + +- **The abilities are granted.** `UCommonPlayerDefinition::__InitDefaults` sets + `m_AbilitiesEffect = UGE_Player_Definition`, and that effect's + `__InitDefaults` makes 88 `AddAbility` calls — entries 76–81 are + `UGA_FatigueHourlyEffect`, `UGA_FatigueDebuffs`, `UGA_ThirstDebuffs`, + `UGA_ThirstHourlyEffect`, `UGA_HungerDebuffs`, `UGA_HungerHourlyEffect`. The + grant parameters are byte-identical to those of `UGA_Swim_Human`, which + demonstrably runs. +- **The attribute sets are seeded.** The same function sets + `Max{Hunger,Thirst,Fatigue}` = 1000, `FillRatio` = 12, `FillRatioPeriod` = 1, + `MaxThresholdIndex` = 4 (Fatigue additionally + `RecoveryRatePerHourOfSleep` = −0.125). +- **The abilities are fully configured**, including the per-threshold effect + lists. +- **The UI row is deliberately hidden.** Of 7,308 AngelScript modules, exactly + one mentions survival: `UI/UISettingsConfiguration.as`, which declares + `USettingObject_Bool_SurvivalSettings_AS` whose entire generated + `__InitDefaults` writes `false` into the inherited native `bool m_IsShown`. +- **The gate is native.** `UDifficultyManagerSubsystem::GetSurvivalModeState()` + and `SetSurvivalModeState(bool)` are native, and no AngelScript module ever + calls either. The ability base classes + `UGameplayAbilityNeedHourlyEffectBase` and `UGameplayAbilityNeedDebuffsBase` + are native-only; no `.as` file defines a body. + +### What was measured + +A UE4SS Lua probe forced the runtime state true **before** the hero existed, then +read the hero's attributes for a minute: + +``` +set survival (tick): false -> true <- 21:08:49, still at the main menu +=== hero found (save loaded) === <- 21:09:03 +on-load: survival=true pc=y pawn=y state=y asc=y + Hunger = 900.0 / 1000.0 + Thirst = 0.0 / 1000.0 + Fatigue = 0.0 / 1000.0 + Strength=30.0 MaxMana=35.0 Speed=4.0 Health=71.0 +watch: (unchanged after 30 s and after 60 s) +``` + +`Hunger` at 900/1000 is threshold stage 4, which owes −15 % Strength and 1 HP per +second. Strength stayed at 30.0 and Health stayed at 71.0. **The abilities never +activate**, even with the state true, the abilities granted and the attribute +sets present. + +The most likely reason is authored, not gated: `m_ActivationSkillTag` (on the +debuff bases) and `m_HourlyAbilityTag` (the only member the hourly base adds over +the plain passive hourly base) are **never assigned by anything in the entire +cache**. If the native activation path consults either, an empty tag would keep +the system silent forever. That cannot be distinguished from a deliberate gate +without reversing `G1R-Win64-Shipping.exe`. + +### The flag lives in three places, none of which helps + +| Location | Note | +|---|---| +| `PersistentDataList.sav` → `m_Profiles[i].m_Survival` | The authoritative profile copy. Setting it survives a game run — the game rewrites the file and keeps the value — but it is **not** plumbed into the subsystem: `GetSurvivalModeState()` still read `false`. | +| `.sav` → `m_Profile.m_Survival` | A write-only snapshot taken at save time, demonstrably stale (it lists deleted slots). Editable, but inert. | +| `.sav` header → `FSaveDataPayload::m_SurvivalMode` | Uncompressed header field, around byte 1190. Not touched by the editor. | + +**Danger:** `m_PermanentDeath` sits immediately beside `m_Survival` in +`FProfileData` (0x60 vs 0x61) and in the save header between +`m_PermaDeathGameOver` and `m_FakeSloppyCombos`. An off-by-one offset patch turns +on permadeath, which the game states cannot be reversed. Address these by name, +never by a hardcoded offset. + +Survival is a per-profile setting, and in this game a new game always means a new +profile — so there is no "start a fresh run with the flag already set" path +either: the profile is created by the game with the flag false, and no UI can +change it. + +## The mechanics, for when it does get switched on + +Each need runs two passive abilities: an *HourlyEffect* that adds `FillRatio` +points every `FillRatioPeriod` in-game hours, and a *Debuffs* ability that maps +the fill level onto a threshold index `0..MaxThresholdIndex` and applies that +stage's effects. Stage **0 is a bonus**, stage 1 is deliberately empty (no key 1 +in any map), stages 2–4 are penalties. + +| Stage | Hunger | Thirst | Fatigue | +|---|---|---|---| +| 0 | +5 % Toughness | +5 % MaxMana | +5 % SpeedModifier | +| 2 | −5 % Toughness, −5 % Strength | −10 % MaxMana | −5 % MaxMana, MaxHealth, Toughness | +| 3 | −10 % both | −15 % MaxMana | −10 % MaxMana/MaxHealth, −5 % Toughness, −5 % Speed | +| 4 | −15 % both | −20 % MaxMana | −15 % MaxMana/MaxHealth, −10 % Toughness, −5 % Speed | + +Stage 4 additionally applies `UGE_Debuff_Threshold_4_PassiveHealthDecrease` +— an infinite effect with period 1.0 s draining 1 Health — **per need**, so all +three at stage 4 is 3 HP/s. Thirst also drains mana periodically: 1 per 9 s at +stage 2, per 6 s at 3, per 3 s at 4. + +Each stage's effects carry a per-need tag (`Debuff_Hunger` / `Debuff_Thirst` / +`Debuff_Fatigue`) which is also the ability's `m_DebuffTagToClear`; that is how +moving between stages removes the previous stage. A separate +`UGE_RefreshAttributes` re-clamps Mana and Health after the Max-percentages +change. + +**Shipped data bug:** the Thirst threshold map is mis-wired. Key 3 carries both +`Threshold_2_PassiveManaDecrease` and `Threshold_3_PassiveManaDecrease` (two +stacking drains, ≈0.28 mana/s) while key 2 gets no mana drain at all. Hunger and +Fatigue are clean, so this is a copy-paste slip, not a design choice. + +**Clearing a need:** Hunger and Thirst only go down through consumables +(`UGE_Item_ReduceHunger_Insta` / `UGE_Item_ReduceThirst_Insta`, SetByCaller +magnitude supplied by the item) — sleeping does nothing for them, as neither +attribute set has a sleep-recovery member. Fatigue only goes down through sleep, +at 12.5 % of `MaxFatigue` per hour, so eight hours resets 1000 to 0. + +**Timing**, assuming equal bands (the fill-level → index mapping is native and +unread): 12 points per in-game hour against 1000 means the opening bonus expires +around 16.7 in-game hours, the first penalty lands near 33 h, and the health +drain near 67 h. + +## What the save editor hides, and why + +All sixteen values below are removed from the curated attribute view by +`_heroUnusedAttributeIds` in +`apps/save-editor/lib/features/editor/domain/hero_attributes.dart`. They remain +editable in the All-data property browser — the editor hides what cannot work, +it does not refuse access to the bytes. + +| Attribute set | Value | Meaning | +|---|---|---| +| `AttributeSet_Hunger` | `Hunger` | Current hunger, 0…1000. | +| | `MaxHunger` | Cap, 1000. | +| | `FillRatio` | Points gained per tick, 12. | +| | `FillRatioPeriod` | In-game hours per tick, 1. | +| | `MaxThresholdIndex` | Number of penalty stages, 4. | +| `AttributeSet_Thirst` | `Thirst`, `MaxThirst`, `FillRatio`, `FillRatioPeriod`, `MaxThresholdIndex` | Same shape, same values. | +| `AttributeSet_Fatigue` | `Fatigue`, `MaxFatigue`, `FillRatio`, `FillRatioPeriod`, `MaxThresholdIndex` | Same shape, same values. | +| | `RecoveryRatePerHourOfSleep` | −0.125: fraction of max removed per hour slept. | + +Two subtleties the code has to respect: + +- `FillRatio`, `FillRatioPeriod` and `MaxThresholdIndex` exist **only** in these + three sets, so hiding them by bare id is exact. +- `RecoveryRatePerHourOfSleep` also exists on `AttributeSet_Health` and + `AttributeSet_Mana`, where it is real and shown under *Sleep & rest*. It is + therefore hidden by its **set-qualified** key `Fatigue_RecoveryRatePerHourOfSleep` + (see `heroAttributeKey` / `heroAttributeHidden`), never by id. + +Not hidden, despite sitting next to this system: + +- `SpeedModifier` (`AttributeSet_Movement`) — the fatigue debuff is its only + in-play writer, but the value itself is live: a hand-set 4.0 was confirmed in + game to survive save/load and to actually move the hero faster. It stays, under + *Combat & movement*. +- `Toughness` and `ToughnessA/B/C` are hidden too, but for a different reason — + encumbrance was cut. See the comment on `_heroUnusedAttributeIds`. + +## If a patch ever ships it + +1. Verify with a probe before changing anything: force + `SetSurvivalModeState(true)`, set `Hunger` to 900 on a copied save, load, and + watch Strength and Health. Stage 4 is unmistakable — that is exactly the test + recorded above, and it is cheap to repeat. +2. If the abilities activate, delete the sixteen entries from + `_heroUnusedAttributeIds` and restore the `survival` group: a + `HeroAttributeGroup.survival` member, its ordered list, a `_SidebarEntry`, + the `_entryToGroup` / `_entryLabel` / `_entryIcon` arms in both + `hero_stats_card.dart` and `npc_attributes_panel.dart`, and a + `heroGroupSurvival` message in all twelve `.arb` files. The group machinery + already tolerates absent attributes — a sidebar entry only appears when its + group has rows, so a hero without the Hunger/Thirst sets simply will not see + it. +3. Note that `AttributeSet_Hunger` and `AttributeSet_Thirst` are absent from + saves made before build changelist 171261 and present from that build on, + independent of the flag. `AttributeSet_Fatigue` is present in all of them. From 564b68dc7673f5ce6daf900e62f4439a06c9f444 Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Fri, 14 Aug 2026 11:57:24 +0200 Subject: [PATCH 5/8] fix(save-editor): tell the two experience bounties apart, rename the combat group "XP for executing" and "XP for killing" were nearly the same sentence twice, and neither said what the difference is. Gothic has a non-lethal defeat state: an opponent can be beaten down and left unconscious rather than killed, and finishing off someone who already lies defeated is a separate act the game even tracks as its own crime severity. So the pair is now "XP for defeating" (bringing the character down at all, dead or merely unconscious) against "XP for finishing off" (killing it while it lies defeated), with tooltips that name both outcomes. The combat group was called "Combat skills", which reads as the game's one-handed/two-handed/bow skills. It holds poise, damage taken and movement speed instead, so it is "Combat and movement" now, and the message key follows the meaning. Both across all twelve languages, each translated with its language's established term for a downed opponent and for the finishing blow. Co-Authored-By: Claude Opus 5 --- .../features/editor/ui/hero_stats_card.dart | 2 +- .../editor/ui/npc_attributes_panel.dart | 2 +- apps/save-editor/lib/l10n/app_de.arb | 6 +++--- apps/save-editor/lib/l10n/app_en.arb | 6 +++--- apps/save-editor/lib/l10n/app_es.arb | 6 +++--- apps/save-editor/lib/l10n/app_fr.arb | 6 +++--- apps/save-editor/lib/l10n/app_it.arb | 6 +++--- apps/save-editor/lib/l10n/app_ja.arb | 6 +++--- .../lib/l10n/app_localizations.dart | 10 +++++----- .../lib/l10n/app_localizations_de.dart | 10 +++++----- .../lib/l10n/app_localizations_en.dart | 10 +++++----- .../lib/l10n/app_localizations_es.dart | 10 +++++----- .../lib/l10n/app_localizations_fr.dart | 10 +++++----- .../lib/l10n/app_localizations_it.dart | 10 +++++----- .../lib/l10n/app_localizations_ja.dart | 9 +++++---- .../lib/l10n/app_localizations_pl.dart | 10 +++++----- .../lib/l10n/app_localizations_pt.dart | 20 +++++++++---------- .../lib/l10n/app_localizations_ru.dart | 10 +++++----- .../lib/l10n/app_localizations_zh.dart | 20 +++++++++---------- apps/save-editor/lib/l10n/app_pl.arb | 6 +++--- apps/save-editor/lib/l10n/app_pt.arb | 6 +++--- apps/save-editor/lib/l10n/app_pt_BR.arb | 6 +++--- apps/save-editor/lib/l10n/app_ru.arb | 6 +++--- apps/save-editor/lib/l10n/app_zh.arb | 6 +++--- apps/save-editor/lib/l10n/app_zh_Hans.arb | 6 +++--- 25 files changed, 103 insertions(+), 102 deletions(-) diff --git a/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart b/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart index 32e671add..061181c89 100644 --- a/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart +++ b/apps/save-editor/lib/features/editor/ui/hero_stats_card.dart @@ -403,7 +403,7 @@ class _HeroStatsCardState extends State { String _entryLabel(AppLocalizations l10n, _SidebarEntry entry) { return switch (entry) { _SidebarEntry.core => l10n.heroGroupMainStats, - _SidebarEntry.combat => l10n.heroGroupCombatSkills, + _SidebarEntry.combat => l10n.heroGroupCombatMovement, _SidebarEntry.resistances => l10n.heroGroupResistances, _SidebarEntry.thieving => l10n.heroGroupSkills, _SidebarEntry.diving => l10n.heroGroupDiving, diff --git a/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart b/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart index f4f3133d7..f87e3f2da 100644 --- a/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart +++ b/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart @@ -156,7 +156,7 @@ class _NpcAttributesPanelState extends State { String _groupTitle(AppLocalizations l10n, HeroAttributeGroup g) => switch (g) { HeroAttributeGroup.core => l10n.heroGroupMainStats, - HeroAttributeGroup.combat => l10n.heroGroupCombatSkills, + HeroAttributeGroup.combat => l10n.heroGroupCombatMovement, HeroAttributeGroup.resistances => l10n.heroGroupResistances, // NPC thieving group is repurposed to host the skills editor. HeroAttributeGroup.thieving => l10n.heroGroupSkills, diff --git a/apps/save-editor/lib/l10n/app_de.arb b/apps/save-editor/lib/l10n/app_de.arb index e101368ae..310eb974c 100644 --- a/apps/save-editor/lib/l10n/app_de.arb +++ b/apps/save-editor/lib/l10n/app_de.arb @@ -483,7 +483,7 @@ "noKnowledgeEntriesAvailableToAdd": "Keine Wissenseinträge zum Hinzufügen verfügbar", "noEntriesMatch": "Keine passenden Einträge", "heroGroupMainStats": "Hauptwerte", - "heroGroupCombatSkills": "Kampffertigkeiten", + "heroGroupCombatMovement": "Kampf und Bewegung", "heroGroupResistances": "Widerstände", "heroGroupThieving": "Diebeskunst", "heroGroupAdvanced": "Erweitert", @@ -576,8 +576,8 @@ "fallbackObjective": "Ziel", "fallbackItem": "Gegenstand", "attributeSkillPointsFallback": "Lernpunkte (LP)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Standfestigkeit} MaxSuperArmor{Max. Standfestigkeit} DamageMultiplier{Erlittener Schaden} SpeedModifier{Bewegungstempo} Oxygen{Atemluft} MaxOxygen{Max. Atemluft} OxygenDepletionRate{Luftverbrauch pro Sekunde} OxygenRecoveryRate{Lufterholung pro Sekunde} CriticalLevelPercent{Warnschwelle Atemluft} SleepTime{Erholsame Stunden übrig} MaxSleepTime{Max. erholsame Stunden} SleepTimeRecoveryAmount{Auffüllmenge} SleepTimeRecoveryPeriod{Auffüllintervall} MaxRestTime{Max. Zeit im Bett} Health_RecoveryRatePerHourOfSleep{Leben je Schlafstunde} Mana_RecoveryRatePerHourOfSleep{Mana je Schlafstunde} Alcohol{Alkoholpegel} MaxAlcohol{Max. Alkoholpegel} AlcoholDepletionRate{Ausnüchterungstempo} Swampweed{Sumpfkrautpegel} MaxSwampweed{Max. Sumpfkrautpegel} SwampweedDepletionRate{Abbautempo} XPExecutedBounty{EP fürs Hinrichten} XPKillOrDefeatBounty{EP fürs Töten} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Wie viel der Held einsteckt, bevor ihn ein Treffer aus dem Tritt bringt.} MaxSuperArmor{Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.} DamageMultiplier{Faktor auf den Schaden, den der Held nimmt — 1 ist normal, höher tut mehr weh.} SpeedModifier{Faktor darauf, wie schnell sich der Held bewegt — 1 ist normal.} Oxygen{Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt der Held.} MaxOxygen{Wie viele Sekunden der Held unter Wasser bleiben kann; das Talent Tauchen erhöht das.} OxygenDepletionRate{Wie viel Luft unter Wasser je Sekunde verbraucht wird.} OxygenRecoveryRate{Wie viel Luft nach dem Auftauchen je Sekunde zurückkommt.} CriticalLevelPercent{Anteil der Restluft, ab dem das Spiel vor dem Ertrinken warnt.} SleepTime{Schlafstunden, die noch etwas bringen; darüber hinaus gibt es keine Regeneration.} MaxSleepTime{Das größte Guthaben an erholsamen Stunden.} SleepTimeRecoveryAmount{Erholsame Stunden, die bei jeder Auffüllung zurückkommen.} SleepTimeRecoveryPeriod{Wie lange es dauert, bis das Guthaben wieder aufgefüllt wird.} MaxRestTime{Die längste Zeit, die am Stück im Bett verbracht werden kann.} Health_RecoveryRatePerHourOfSleep{Anteil der maximalen Lebenspunkte, der je geschlafener Stunde zurückkommt.} Mana_RecoveryRatePerHourOfSleep{Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.} Alcohol{Wie betrunken der Held ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.} MaxAlcohol{Der höchste Alkoholpegel, den der Held erreichen kann.} AlcoholDepletionRate{Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.} Swampweed{Wie berauscht der Held ist; die höheren Stufen verschieben seine Werte.} MaxSwampweed{Der höchste Sumpfkrautpegel, den der Held erreichen kann.} SwampweedDepletionRate{Wie schnell der Sumpfkrautrausch nachlässt.} XPExecutedBounty{Erfahrung, die das Hinrichten dieser Figur einbringt.} XPKillOrDefeatBounty{Erfahrung, die das Töten oder Besiegen dieser Figur einbringt.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Standfestigkeit} MaxSuperArmor{Max. Standfestigkeit} DamageMultiplier{Erlittener Schaden} SpeedModifier{Bewegungstempo} Oxygen{Atemluft} MaxOxygen{Max. Atemluft} OxygenDepletionRate{Luftverbrauch pro Sekunde} OxygenRecoveryRate{Lufterholung pro Sekunde} CriticalLevelPercent{Warnschwelle Atemluft} SleepTime{Erholsame Stunden übrig} MaxSleepTime{Max. erholsame Stunden} SleepTimeRecoveryAmount{Auffüllmenge} SleepTimeRecoveryPeriod{Auffüllintervall} MaxRestTime{Max. Zeit im Bett} Health_RecoveryRatePerHourOfSleep{Leben je Schlafstunde} Mana_RecoveryRatePerHourOfSleep{Mana je Schlafstunde} Alcohol{Alkoholpegel} MaxAlcohol{Max. Alkoholpegel} AlcoholDepletionRate{Ausnüchterungstempo} Swampweed{Sumpfkrautpegel} MaxSwampweed{Max. Sumpfkrautpegel} SwampweedDepletionRate{Abbautempo} XPExecutedBounty{EP fürs Töten am Boden} XPKillOrDefeatBounty{EP fürs Besiegen} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Wie viel der Held einsteckt, bevor ihn ein Treffer aus dem Tritt bringt.} MaxSuperArmor{Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.} DamageMultiplier{Faktor auf den Schaden, den der Held nimmt — 1 ist normal, höher tut mehr weh.} SpeedModifier{Faktor darauf, wie schnell sich der Held bewegt — 1 ist normal.} Oxygen{Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt der Held.} MaxOxygen{Wie viele Sekunden der Held unter Wasser bleiben kann; das Talent Tauchen erhöht das.} OxygenDepletionRate{Wie viel Luft unter Wasser je Sekunde verbraucht wird.} OxygenRecoveryRate{Wie viel Luft nach dem Auftauchen je Sekunde zurückkommt.} CriticalLevelPercent{Anteil der Restluft, ab dem das Spiel vor dem Ertrinken warnt.} SleepTime{Schlafstunden, die noch etwas bringen; darüber hinaus gibt es keine Regeneration.} MaxSleepTime{Das größte Guthaben an erholsamen Stunden.} SleepTimeRecoveryAmount{Erholsame Stunden, die bei jeder Auffüllung zurückkommen.} SleepTimeRecoveryPeriod{Wie lange es dauert, bis das Guthaben wieder aufgefüllt wird.} MaxRestTime{Die längste Zeit, die am Stück im Bett verbracht werden kann.} Health_RecoveryRatePerHourOfSleep{Anteil der maximalen Lebenspunkte, der je geschlafener Stunde zurückkommt.} Mana_RecoveryRatePerHourOfSleep{Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.} Alcohol{Wie betrunken der Held ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.} MaxAlcohol{Der höchste Alkoholpegel, den der Held erreichen kann.} AlcoholDepletionRate{Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.} Swampweed{Wie berauscht der Held ist; die höheren Stufen verschieben seine Werte.} MaxSwampweed{Der höchste Sumpfkrautpegel, den der Held erreichen kann.} SwampweedDepletionRate{Wie schnell der Sumpfkrautrausch nachlässt.} XPExecutedBounty{Erfahrung dafür, diese Figur zu töten, während sie bereits besiegt am Boden liegt.} XPKillOrDefeatBounty{Erfahrung dafür, diese Figur niederzustrecken, ob sie dabei stirbt oder nur bewusstlos liegen bleibt.} other{?}}", "knowledgeTypeVoiceLine": "Sprachzeile", "knowledgeTypeOther": "Sonstiges", "armorUpgradeUpper": "Oben", diff --git a/apps/save-editor/lib/l10n/app_en.arb b/apps/save-editor/lib/l10n/app_en.arb index f663aea09..61558f04a 100644 --- a/apps/save-editor/lib/l10n/app_en.arb +++ b/apps/save-editor/lib/l10n/app_en.arb @@ -838,7 +838,7 @@ "noKnowledgeEntriesAvailableToAdd": "No knowledge entries available to add", "noEntriesMatch": "No entries match", "heroGroupMainStats": "Main stats", - "heroGroupCombatSkills": "Combat skills", + "heroGroupCombatMovement": "Combat and movement", "heroGroupResistances": "Resistances", "heroGroupThieving": "Thieving", "heroGroupAdvanced": "Advanced", @@ -1002,9 +1002,9 @@ "fallbackObjective": "Objective", "fallbackItem": "Item", "attributeSkillPointsFallback": "Skill points (LP)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for executing} XPKillOrDefeatBounty{XP for killing} other{{fallback}}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for finishing off} XPKillOrDefeatBounty{XP for defeating} other{{fallback}}}", "@attributeManualFallbackLabel": {"placeholders": {"attributeId": {"type": "String"}, "fallback": {"type": "String"}}}, - "attributeManualTooltip": "{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience awarded to whoever executes this character.} XPKillOrDefeatBounty{Experience awarded to whoever kills or defeats this character.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience for killing this character while it already lies defeated on the ground.} XPKillOrDefeatBounty{Experience for bringing this character down, whether it dies or is only beaten unconscious.} other{?}}", "@attributeManualTooltip": {"placeholders": {"attributeId": {"type": "String"}}}, "knowledgeTypeVoiceLine": "Voice line", "knowledgeTypeOther": "Other", diff --git a/apps/save-editor/lib/l10n/app_es.arb b/apps/save-editor/lib/l10n/app_es.arb index 8241f18cd..c327db605 100644 --- a/apps/save-editor/lib/l10n/app_es.arb +++ b/apps/save-editor/lib/l10n/app_es.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "No hay entradas de conocimiento disponibles para añadir", "noEntriesMatch": "Ninguna entrada coincide", "heroGroupMainStats": "Estadísticas principales", - "heroGroupCombatSkills": "Habilidades de combate", + "heroGroupCombatMovement": "Combate y movimiento", "heroGroupResistances": "Resistencias", "heroGroupThieving": "Robo", "heroGroupAdvanced": "Avanzado", @@ -576,8 +576,8 @@ "fallbackObjective": "Objetivo", "fallbackItem": "Objeto", "attributeSkillPointsFallback": "Puntos de aprendizaje (PA)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Aplomo} MaxSuperArmor{Aplomo máx.} DamageMultiplier{Daño recibido} SpeedModifier{Velocidad de movimiento} Oxygen{Aire} MaxOxygen{Aire máx.} OxygenDepletionRate{Aire gastado por segundo} OxygenRecoveryRate{Aire recuperado por seg.} CriticalLevelPercent{Aviso de falta de aire} SleepTime{Horas reparadoras rest.} MaxSleepTime{Máx. horas reparadoras} SleepTimeRecoveryAmount{Horas que se recuperan} SleepTimeRecoveryPeriod{Intervalo de recarga} MaxRestTime{Máx. tiempo en la cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sueño} Mana_RecoveryRatePerHourOfSleep{Maná por hora de sueño} Alcohol{Nivel de alcohol} MaxAlcohol{Nivel de alcohol máx.} AlcoholDepletionRate{Velocidad para despejarse} Swampweed{Nivel de hierba de pantano} MaxSwampweed{Máx. hierba de pantano} SwampweedDepletionRate{Velocidad del bajón} XPExecutedBounty{EXP por ejecutar} XPKillOrDefeatBounty{EXP por matar} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Cuánto castigo aguanta el héroe antes de que un golpe lo haga tambalearse.} MaxSuperArmor{La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.} DamageMultiplier{Factor que se aplica al daño que recibe el héroe: 1 es lo normal, y cuanto más alto, más duele.} SpeedModifier{Factor sobre lo rápido que se mueve el héroe: 1 es lo normal.} Oxygen{Segundos de aire que quedan bajo el agua; al llegar a cero el héroe se ahoga.} MaxOxygen{Cuántos segundos puede aguantar el héroe bajo el agua; la habilidad Buceo lo aumenta.} OxygenDepletionRate{Aire que se consume cada segundo bajo el agua.} OxygenRecoveryRate{Aire que se recupera cada segundo al salir a la superficie.} CriticalLevelPercent{Porcentaje de aire restante con el que el juego avisa del peligro de ahogarse.} SleepTime{Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.} MaxSleepTime{El mayor número de horas reparadoras que puede acumular el héroe.} SleepTimeRecoveryAmount{Horas reparadoras que se devuelven cada vez que se rellena la reserva.} SleepTimeRecoveryPeriod{Cuánto tarda la reserva de horas reparadoras en volver a llenarse.} MaxRestTime{El tiempo más largo que el juego permite pasar en la cama de una sola vez.} Health_RecoveryRatePerHourOfSleep{Porcentaje de la vida máxima que se recupera por cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Porcentaje del maná máximo que se recupera por cada hora dormida.} Alcohol{Lo borracho que está el héroe; los niveles altos cambian destreza y maná por fuerza.} MaxAlcohol{El nivel de alcohol más alto que puede alcanzar el héroe.} AlcoholDepletionRate{Con qué rapidez baja el nivel de alcohol hacia la sobriedad.} Swampweed{Lo colocado que está el héroe; los niveles altos le mueven los atributos.} MaxSwampweed{El nivel de hierba de pantano más alto que puede alcanzar el héroe.} SwampweedDepletionRate{Con qué rapidez se pasa el efecto de la hierba de pantano.} XPExecutedBounty{Experiencia que recibe quien ejecuta a este personaje.} XPKillOrDefeatBounty{Experiencia que recibe quien mata o derrota a este personaje.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Aplomo} MaxSuperArmor{Aplomo máx.} DamageMultiplier{Daño recibido} SpeedModifier{Velocidad de movimiento} Oxygen{Aire} MaxOxygen{Aire máx.} OxygenDepletionRate{Aire gastado por segundo} OxygenRecoveryRate{Aire recuperado por seg.} CriticalLevelPercent{Aviso de falta de aire} SleepTime{Horas reparadoras rest.} MaxSleepTime{Máx. horas reparadoras} SleepTimeRecoveryAmount{Horas que se recuperan} SleepTimeRecoveryPeriod{Intervalo de recarga} MaxRestTime{Máx. tiempo en la cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sueño} Mana_RecoveryRatePerHourOfSleep{Maná por hora de sueño} Alcohol{Nivel de alcohol} MaxAlcohol{Nivel de alcohol máx.} AlcoholDepletionRate{Velocidad para despejarse} Swampweed{Nivel de hierba de pantano} MaxSwampweed{Máx. hierba de pantano} SwampweedDepletionRate{Velocidad del bajón} XPExecutedBounty{EXP por rematar en el suelo} XPKillOrDefeatBounty{EXP por derrotar} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Cuánto castigo aguanta el héroe antes de que un golpe lo haga tambalearse.} MaxSuperArmor{La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.} DamageMultiplier{Factor que se aplica al daño que recibe el héroe: 1 es lo normal, y cuanto más alto, más duele.} SpeedModifier{Factor sobre lo rápido que se mueve el héroe: 1 es lo normal.} Oxygen{Segundos de aire que quedan bajo el agua; al llegar a cero el héroe se ahoga.} MaxOxygen{Cuántos segundos puede aguantar el héroe bajo el agua; la habilidad Buceo lo aumenta.} OxygenDepletionRate{Aire que se consume cada segundo bajo el agua.} OxygenRecoveryRate{Aire que se recupera cada segundo al salir a la superficie.} CriticalLevelPercent{Porcentaje de aire restante con el que el juego avisa del peligro de ahogarse.} SleepTime{Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.} MaxSleepTime{El mayor número de horas reparadoras que puede acumular el héroe.} SleepTimeRecoveryAmount{Horas reparadoras que se devuelven cada vez que se rellena la reserva.} SleepTimeRecoveryPeriod{Cuánto tarda la reserva de horas reparadoras en volver a llenarse.} MaxRestTime{El tiempo más largo que el juego permite pasar en la cama de una sola vez.} Health_RecoveryRatePerHourOfSleep{Porcentaje de la vida máxima que se recupera por cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Porcentaje del maná máximo que se recupera por cada hora dormida.} Alcohol{Lo borracho que está el héroe; los niveles altos cambian destreza y maná por fuerza.} MaxAlcohol{El nivel de alcohol más alto que puede alcanzar el héroe.} AlcoholDepletionRate{Con qué rapidez baja el nivel de alcohol hacia la sobriedad.} Swampweed{Lo colocado que está el héroe; los niveles altos le mueven los atributos.} MaxSwampweed{El nivel de hierba de pantano más alto que puede alcanzar el héroe.} SwampweedDepletionRate{Con qué rapidez se pasa el efecto de la hierba de pantano.} XPExecutedBounty{Experiencia por matar a este personaje cuando ya yace derrotado en el suelo.} XPKillOrDefeatBounty{Experiencia por derribar a este personaje, tanto si muere como si solo queda inconsciente.} other{?}}", "knowledgeTypeVoiceLine": "Línea de voz", "knowledgeTypeOther": "Otro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_fr.arb b/apps/save-editor/lib/l10n/app_fr.arb index d0c4ccb6c..452484a9b 100644 --- a/apps/save-editor/lib/l10n/app_fr.arb +++ b/apps/save-editor/lib/l10n/app_fr.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Aucune entrée de connaissance disponible à ajouter", "noEntriesMatch": "Aucune entrée correspondante", "heroGroupMainStats": "Statistiques principales", - "heroGroupCombatSkills": "Compétences de combat", + "heroGroupCombatMovement": "Combat et déplacement", "heroGroupResistances": "Résistances", "heroGroupThieving": "Vol", "heroGroupAdvanced": "Avancé", @@ -576,8 +576,8 @@ "fallbackObjective": "Objectif", "fallbackItem": "Objet", "attributeSkillPointsFallback": "Points d’apprentissage (PA)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Stabilité} MaxSuperArmor{Stabilité max.} DamageMultiplier{Dégâts subis} SpeedModifier{Vitesse de déplacement} Oxygen{Souffle} MaxOxygen{Souffle max.} OxygenDepletionRate{Air consommé par seconde} OxygenRecoveryRate{Air récupéré par seconde} CriticalLevelPercent{Seuil d'alerte du souffle} SleepTime{Heures de repos restantes} MaxSleepTime{Heures de repos max.} SleepTimeRecoveryAmount{Heures de repos rendues} SleepTimeRecoveryPeriod{Intervalle de recharge} MaxRestTime{Temps max. au lit} Health_RecoveryRatePerHourOfSleep{Vie par heure de sommeil} Mana_RecoveryRatePerHourOfSleep{Mana par heure de sommeil} Alcohol{Taux d'alcool} MaxAlcohol{Taux d'alcool max.} AlcoholDepletionRate{Vitesse de dégrisement} Swampweed{Niveau d'herbe des marais} MaxSwampweed{Herbe des marais max.} SwampweedDepletionRate{Vitesse de dissipation} XPExecutedBounty{XP pour l'exécution} XPKillOrDefeatBounty{XP pour la mise à mort} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Ce que le héros encaisse avant qu'un coup ne le déséquilibre.} MaxSuperArmor{La réserve complète de stabilité ; elle augmente avec le niveau et avec l'armure portée.} DamageMultiplier{Facteur appliqué aux dégâts que subit le héros — 1 est la normale, plus haut fait plus mal.} SpeedModifier{Facteur appliqué à la vitesse de déplacement du héros — 1 est la normale.} Oxygen{Secondes d'air qu'il reste sous l'eau ; à zéro, le héros se noie.} MaxOxygen{Combien de secondes le héros peut rester sous l'eau ; le talent Plongée augmente cette durée.} OxygenDepletionRate{Air consommé chaque seconde sous l'eau.} OxygenRecoveryRate{Air qui revient chaque seconde une fois de retour à la surface.} CriticalLevelPercent{Part d'air restant à partir de laquelle le jeu prévient du risque de noyade.} SleepTime{Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n'accorde plus de récupération.} MaxSleepTime{La plus grande réserve d'heures de repos que le héros peut avoir.} SleepTimeRecoveryAmount{Heures de repos qui reviennent à chaque recharge.} SleepTimeRecoveryPeriod{Le temps qu'il faut pour que la réserve d'heures de repos se remplisse à nouveau.} MaxRestTime{La plus longue durée que le héros peut passer au lit d'une traite.} Health_RecoveryRatePerHourOfSleep{Part des points de vie maximum rendue pour chaque heure de sommeil.} Mana_RecoveryRatePerHourOfSleep{Part du mana maximum rendue pour chaque heure de sommeil.} Alcohol{À quel point le héros est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.} MaxAlcohol{Le taux d'alcool le plus élevé que le héros peut atteindre.} AlcoholDepletionRate{À quelle vitesse le taux d'alcool redescend vers la sobriété.} Swampweed{À quel point le héros plane ; aux paliers élevés, ses caractéristiques sont chamboulées.} MaxSwampweed{Le niveau d'herbe des marais le plus élevé que le héros peut atteindre.} SwampweedDepletionRate{À quelle vitesse l'effet de l'herbe des marais se dissipe.} XPExecutedBounty{Expérience accordée à celui qui exécute ce personnage.} XPKillOrDefeatBounty{Expérience accordée à celui qui tue ou vainc ce personnage.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Stabilité} MaxSuperArmor{Stabilité max.} DamageMultiplier{Dégâts subis} SpeedModifier{Vitesse de déplacement} Oxygen{Souffle} MaxOxygen{Souffle max.} OxygenDepletionRate{Air consommé par seconde} OxygenRecoveryRate{Air récupéré par seconde} CriticalLevelPercent{Seuil d'alerte du souffle} SleepTime{Heures de repos restantes} MaxSleepTime{Heures de repos max.} SleepTimeRecoveryAmount{Heures de repos rendues} SleepTimeRecoveryPeriod{Intervalle de recharge} MaxRestTime{Temps max. au lit} Health_RecoveryRatePerHourOfSleep{Vie par heure de sommeil} Mana_RecoveryRatePerHourOfSleep{Mana par heure de sommeil} Alcohol{Taux d'alcool} MaxAlcohol{Taux d'alcool max.} AlcoholDepletionRate{Vitesse de dégrisement} Swampweed{Niveau d'herbe des marais} MaxSwampweed{Herbe des marais max.} SwampweedDepletionRate{Vitesse de dissipation} XPExecutedBounty{XP pour le coup de grâce} XPKillOrDefeatBounty{XP pour vaincre} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Ce que le héros encaisse avant qu'un coup ne le déséquilibre.} MaxSuperArmor{La réserve complète de stabilité ; elle augmente avec le niveau et avec l'armure portée.} DamageMultiplier{Facteur appliqué aux dégâts que subit le héros — 1 est la normale, plus haut fait plus mal.} SpeedModifier{Facteur appliqué à la vitesse de déplacement du héros — 1 est la normale.} Oxygen{Secondes d'air qu'il reste sous l'eau ; à zéro, le héros se noie.} MaxOxygen{Combien de secondes le héros peut rester sous l'eau ; le talent Plongée augmente cette durée.} OxygenDepletionRate{Air consommé chaque seconde sous l'eau.} OxygenRecoveryRate{Air qui revient chaque seconde une fois de retour à la surface.} CriticalLevelPercent{Part d'air restant à partir de laquelle le jeu prévient du risque de noyade.} SleepTime{Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n'accorde plus de récupération.} MaxSleepTime{La plus grande réserve d'heures de repos que le héros peut avoir.} SleepTimeRecoveryAmount{Heures de repos qui reviennent à chaque recharge.} SleepTimeRecoveryPeriod{Le temps qu'il faut pour que la réserve d'heures de repos se remplisse à nouveau.} MaxRestTime{La plus longue durée que le héros peut passer au lit d'une traite.} Health_RecoveryRatePerHourOfSleep{Part des points de vie maximum rendue pour chaque heure de sommeil.} Mana_RecoveryRatePerHourOfSleep{Part du mana maximum rendue pour chaque heure de sommeil.} Alcohol{À quel point le héros est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.} MaxAlcohol{Le taux d'alcool le plus élevé que le héros peut atteindre.} AlcoholDepletionRate{À quelle vitesse le taux d'alcool redescend vers la sobriété.} Swampweed{À quel point le héros plane ; aux paliers élevés, ses caractéristiques sont chamboulées.} MaxSwampweed{Le niveau d'herbe des marais le plus élevé que le héros peut atteindre.} SwampweedDepletionRate{À quelle vitesse l'effet de l'herbe des marais se dissipe.} XPExecutedBounty{Expérience obtenue en achevant ce personnage alors qu'il est déjà vaincu, à terre.} XPKillOrDefeatBounty{Expérience obtenue en mettant ce personnage à terre, qu'il en meure ou qu'il reste seulement assommé.} other{?}}", "knowledgeTypeVoiceLine": "Réplique vocale", "knowledgeTypeOther": "Autre", "armorUpgradeUpper": "Haut", diff --git a/apps/save-editor/lib/l10n/app_it.arb b/apps/save-editor/lib/l10n/app_it.arb index f7c6fa289..b7f75be6a 100644 --- a/apps/save-editor/lib/l10n/app_it.arb +++ b/apps/save-editor/lib/l10n/app_it.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Nessuna voce di conoscenza disponibile da aggiungere", "noEntriesMatch": "Nessuna voce corrispondente", "heroGroupMainStats": "Statistiche principali", - "heroGroupCombatSkills": "Abilità di combattimento", + "heroGroupCombatMovement": "Combattimento e movimento", "heroGroupResistances": "Resistenze", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avanzate", @@ -576,8 +576,8 @@ "fallbackObjective": "Obiettivo", "fallbackItem": "Oggetto", "attributeSkillPointsFallback": "Punti apprendimento (PA)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Equilibrio} MaxSuperArmor{Equilibrio max.} DamageMultiplier{Danno subito} SpeedModifier{Velocità di movimento} Oxygen{Fiato} MaxOxygen{Fiato max.} OxygenDepletionRate{Fiato consumato al secondo} OxygenRecoveryRate{Fiato recuperato al secondo} CriticalLevelPercent{Avviso di fiato basso} SleepTime{Ore di riposo rimaste} MaxSleepTime{Ore di riposo max.} SleepTimeRecoveryAmount{Ore di riposo recuperate} SleepTimeRecoveryPeriod{Intervallo di ricarica} MaxRestTime{Tempo max. a letto} Health_RecoveryRatePerHourOfSleep{Vita per ora di sonno} Mana_RecoveryRatePerHourOfSleep{Mana per ora di sonno} Alcohol{Livello di alcol} MaxAlcohol{Livello di alcol max.} AlcoholDepletionRate{Smaltimento dell'alcol} Swampweed{Livello di erba palustre} MaxSwampweed{Erba palustre max.} SwampweedDepletionRate{Smaltimento dell'erba} XPExecutedBounty{PE per l'esecuzione} XPKillOrDefeatBounty{PE per l'uccisione} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto incassa l'eroe prima che un colpo lo faccia barcollare.} MaxSuperArmor{La riserva completa di equilibrio; cresce con il livello e con l'armatura indossata.} DamageMultiplier{Fattore applicato al danno che l'eroe subisce: 1 è normale, valori più alti fanno più male.} SpeedModifier{Fattore sulla velocità con cui l'eroe si muove: 1 è normale.} Oxygen{Secondi d'aria rimasti sott'acqua; a zero l'eroe annega.} MaxOxygen{Per quanti secondi l'eroe può restare sott'acqua; l'abilità Immersione lo aumenta.} OxygenDepletionRate{Aria consumata ogni secondo sott'acqua.} OxygenRecoveryRate{Aria che torna ogni secondo dopo essere riemersi.} CriticalLevelPercent{Percentuale d'aria residua alla quale il gioco avverte del pericolo di annegamento.} SleepTime{Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.} MaxSleepTime{La riserva massima di ore di riposo che l'eroe può accumulare.} SleepTimeRecoveryAmount{Ore di riposo che tornano a ogni ricarica.} SleepTimeRecoveryPeriod{Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.} MaxRestTime{Il tempo più lungo che si può passare a letto in una volta sola.} Health_RecoveryRatePerHourOfSleep{Quota della vita massima che torna per ogni ora dormita.} Mana_RecoveryRatePerHourOfSleep{Quota del mana massimo che torna per ogni ora dormita.} Alcohol{Quanto è ubriaco l'eroe; ai livelli più alti scambia destrezza e mana con forza.} MaxAlcohol{Il livello di alcol più alto che l'eroe può raggiungere.} AlcoholDepletionRate{Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.} Swampweed{Quanto è sballato l'eroe; ai livelli più alti i suoi valori si spostano.} MaxSwampweed{Il livello di erba palustre più alto che l'eroe può raggiungere.} SwampweedDepletionRate{Quanto in fretta svanisce lo sballo da erba palustre.} XPExecutedBounty{Esperienza che ottiene chi giustizia questo personaggio.} XPKillOrDefeatBounty{Esperienza che ottiene chi uccide o sconfigge questo personaggio.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Equilibrio} MaxSuperArmor{Equilibrio max.} DamageMultiplier{Danno subito} SpeedModifier{Velocità di movimento} Oxygen{Fiato} MaxOxygen{Fiato max.} OxygenDepletionRate{Fiato consumato al secondo} OxygenRecoveryRate{Fiato recuperato al secondo} CriticalLevelPercent{Avviso di fiato basso} SleepTime{Ore di riposo rimaste} MaxSleepTime{Ore di riposo max.} SleepTimeRecoveryAmount{Ore di riposo recuperate} SleepTimeRecoveryPeriod{Intervallo di ricarica} MaxRestTime{Tempo max. a letto} Health_RecoveryRatePerHourOfSleep{Vita per ora di sonno} Mana_RecoveryRatePerHourOfSleep{Mana per ora di sonno} Alcohol{Livello di alcol} MaxAlcohol{Livello di alcol max.} AlcoholDepletionRate{Smaltimento dell'alcol} Swampweed{Livello di erba palustre} MaxSwampweed{Erba palustre max.} SwampweedDepletionRate{Smaltimento dell'erba} XPExecutedBounty{PE per il colpo di grazia} XPKillOrDefeatBounty{PE per sconfiggere} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto incassa l'eroe prima che un colpo lo faccia barcollare.} MaxSuperArmor{La riserva completa di equilibrio; cresce con il livello e con l'armatura indossata.} DamageMultiplier{Fattore applicato al danno che l'eroe subisce: 1 è normale, valori più alti fanno più male.} SpeedModifier{Fattore sulla velocità con cui l'eroe si muove: 1 è normale.} Oxygen{Secondi d'aria rimasti sott'acqua; a zero l'eroe annega.} MaxOxygen{Per quanti secondi l'eroe può restare sott'acqua; l'abilità Immersione lo aumenta.} OxygenDepletionRate{Aria consumata ogni secondo sott'acqua.} OxygenRecoveryRate{Aria che torna ogni secondo dopo essere riemersi.} CriticalLevelPercent{Percentuale d'aria residua alla quale il gioco avverte del pericolo di annegamento.} SleepTime{Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.} MaxSleepTime{La riserva massima di ore di riposo che l'eroe può accumulare.} SleepTimeRecoveryAmount{Ore di riposo che tornano a ogni ricarica.} SleepTimeRecoveryPeriod{Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.} MaxRestTime{Il tempo più lungo che si può passare a letto in una volta sola.} Health_RecoveryRatePerHourOfSleep{Quota della vita massima che torna per ogni ora dormita.} Mana_RecoveryRatePerHourOfSleep{Quota del mana massimo che torna per ogni ora dormita.} Alcohol{Quanto è ubriaco l'eroe; ai livelli più alti scambia destrezza e mana con forza.} MaxAlcohol{Il livello di alcol più alto che l'eroe può raggiungere.} AlcoholDepletionRate{Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.} Swampweed{Quanto è sballato l'eroe; ai livelli più alti i suoi valori si spostano.} MaxSwampweed{Il livello di erba palustre più alto che l'eroe può raggiungere.} SwampweedDepletionRate{Quanto in fretta svanisce lo sballo da erba palustre.} XPExecutedBounty{Esperienza per uccidere questo personaggio mentre giace già sconfitto a terra.} XPKillOrDefeatBounty{Esperienza per abbattere questo personaggio, che muoia o resti soltanto privo di sensi.} other{?}}", "knowledgeTypeVoiceLine": "Battuta vocale", "knowledgeTypeOther": "Altro", "armorUpgradeUpper": "Superiore", diff --git a/apps/save-editor/lib/l10n/app_ja.arb b/apps/save-editor/lib/l10n/app_ja.arb index 0017c4d26..752f94fa8 100644 --- a/apps/save-editor/lib/l10n/app_ja.arb +++ b/apps/save-editor/lib/l10n/app_ja.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "追加できる知識エントリがありません", "noEntriesMatch": "一致するエントリがありません", "heroGroupMainStats": "主要ステータス", - "heroGroupCombatSkills": "戦闘スキル", + "heroGroupCombatMovement": "戦闘と移動", "heroGroupResistances": "耐性", "heroGroupThieving": "盗み", "heroGroupAdvanced": "詳細設定", @@ -576,8 +576,8 @@ "fallbackObjective": "目標", "fallbackItem": "アイテム", "attributeSkillPointsFallback": "スキルポイント(LP)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{強靭度} MaxSuperArmor{最大強靭度} DamageMultiplier{被ダメージ倍率} SpeedModifier{移動速度} Oxygen{息} MaxOxygen{息の最大値} OxygenDepletionRate{息の消費(毎秒)} OxygenRecoveryRate{息の回復(毎秒)} CriticalLevelPercent{息切れの警告} SleepTime{残りの快眠時間} MaxSleepTime{最大の快眠時間} SleepTimeRecoveryAmount{快眠時間の回復量} SleepTimeRecoveryPeriod{補充の間隔} MaxRestTime{ベッドにいられる最大時間} Health_RecoveryRatePerHourOfSleep{睡眠1時間あたりの体力} Mana_RecoveryRatePerHourOfSleep{睡眠1時間あたりのマナ} Alcohol{酔いの度合い} MaxAlcohol{酔いの最大値} AlcoholDepletionRate{酔いが覚める速さ} Swampweed{沼地草の酔い} MaxSwampweed{沼地草の酔いの最大値} SwampweedDepletionRate{酔いが抜ける速さ} XPExecutedBounty{処刑で得る経験値} XPKillOrDefeatBounty{撃破で得る経験値} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{一撃で怯まされるまでに、ヒーローがどれだけ攻撃に耐えられるか。} MaxSuperArmor{強靭度の総量で、レベルと身に着けた鎧に応じて増える。} DamageMultiplier{ヒーローが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。} SpeedModifier{ヒーローの移動の速さにかかる倍率で、1が標準。} Oxygen{水中に残っている息の秒数で、ゼロになると溺れる。} MaxOxygen{水中にいられる秒数で、潜水スキルを上げると伸びる。} OxygenDepletionRate{水中で1秒ごとに減っていく息の量。} OxygenRecoveryRate{水面に上がってから1秒ごとに戻る息の量。} CriticalLevelPercent{残りの息がこの割合まで減ると、溺れる危険を知らせる。} SleepTime{まだ回復につながる睡眠時間で、これを超えて眠っても回復はない。} MaxSleepTime{ためておける快眠時間の上限。} SleepTimeRecoveryAmount{補充のたびに戻ってくる快眠時間。} SleepTimeRecoveryPeriod{快眠時間が次に補充されるまでにかかる時間。} MaxRestTime{一度に続けてベッドで過ごせる最長の時間。} Health_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大体力の割合。} Mana_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大マナの割合。} Alcohol{どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。} MaxAlcohol{ヒーローが到達できる酔いの度合いの上限。} AlcoholDepletionRate{酔いがどれだけ早く覚めていくか。} Swampweed{どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。} MaxSwampweed{ヒーローが到達できる沼地草の酔いの上限。} SwampweedDepletionRate{沼地草の酔いがどれだけ早く抜けるか。} XPExecutedBounty{このキャラクターを処刑した者が得る経験値。} XPKillOrDefeatBounty{このキャラクターを倒すか打ち負かした者が得る経験値。} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{強靭度} MaxSuperArmor{最大強靭度} DamageMultiplier{被ダメージ倍率} SpeedModifier{移動速度} Oxygen{息} MaxOxygen{息の最大値} OxygenDepletionRate{息の消費(毎秒)} OxygenRecoveryRate{息の回復(毎秒)} CriticalLevelPercent{息切れの警告} SleepTime{残りの快眠時間} MaxSleepTime{最大の快眠時間} SleepTimeRecoveryAmount{快眠時間の回復量} SleepTimeRecoveryPeriod{補充の間隔} MaxRestTime{ベッドにいられる最大時間} Health_RecoveryRatePerHourOfSleep{睡眠1時間あたりの体力} Mana_RecoveryRatePerHourOfSleep{睡眠1時間あたりのマナ} Alcohol{酔いの度合い} MaxAlcohol{酔いの最大値} AlcoholDepletionRate{酔いが覚める速さ} Swampweed{沼地草の酔い} MaxSwampweed{沼地草の酔いの最大値} SwampweedDepletionRate{酔いが抜ける速さ} XPExecutedBounty{とどめで得る経験値} XPKillOrDefeatBounty{撃破で得る経験値} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{一撃で怯まされるまでに、ヒーローがどれだけ攻撃に耐えられるか。} MaxSuperArmor{強靭度の総量で、レベルと身に着けた鎧に応じて増える。} DamageMultiplier{ヒーローが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。} SpeedModifier{ヒーローの移動の速さにかかる倍率で、1が標準。} Oxygen{水中に残っている息の秒数で、ゼロになると溺れる。} MaxOxygen{水中にいられる秒数で、潜水スキルを上げると伸びる。} OxygenDepletionRate{水中で1秒ごとに減っていく息の量。} OxygenRecoveryRate{水面に上がってから1秒ごとに戻る息の量。} CriticalLevelPercent{残りの息がこの割合まで減ると、溺れる危険を知らせる。} SleepTime{まだ回復につながる睡眠時間で、これを超えて眠っても回復はない。} MaxSleepTime{ためておける快眠時間の上限。} SleepTimeRecoveryAmount{補充のたびに戻ってくる快眠時間。} SleepTimeRecoveryPeriod{快眠時間が次に補充されるまでにかかる時間。} MaxRestTime{一度に続けてベッドで過ごせる最長の時間。} Health_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大体力の割合。} Mana_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大マナの割合。} Alcohol{どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。} MaxAlcohol{ヒーローが到達できる酔いの度合いの上限。} AlcoholDepletionRate{酔いがどれだけ早く覚めていくか。} Swampweed{どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。} MaxSwampweed{ヒーローが到達できる沼地草の酔いの上限。} SwampweedDepletionRate{沼地草の酔いがどれだけ早く抜けるか。} XPExecutedBounty{すでに倒れて動けないこのキャラクターに、とどめを刺して得られる経験値。} XPKillOrDefeatBounty{このキャラクターを打ち倒したときに得られる経験値で、そのまま死んでも気絶して倒れただけでも入る。} other{?}}", "knowledgeTypeVoiceLine": "ボイスライン", "knowledgeTypeOther": "その他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/l10n/app_localizations.dart b/apps/save-editor/lib/l10n/app_localizations.dart index a944ea1cb..f5f4ecef1 100644 --- a/apps/save-editor/lib/l10n/app_localizations.dart +++ b/apps/save-editor/lib/l10n/app_localizations.dart @@ -2936,11 +2936,11 @@ abstract class AppLocalizations { /// **'Main stats'** String get heroGroupMainStats; - /// No description provided for @heroGroupCombatSkills. + /// No description provided for @heroGroupCombatMovement. /// /// In en, this message translates to: - /// **'Combat skills'** - String get heroGroupCombatSkills; + /// **'Combat and movement'** + String get heroGroupCombatMovement; /// No description provided for @heroGroupResistances. /// @@ -3497,13 +3497,13 @@ abstract class AppLocalizations { /// No description provided for @attributeManualFallbackLabel. /// /// In en, this message translates to: - /// **'{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for executing} XPKillOrDefeatBounty{XP for killing} other{{fallback}}}'** + /// **'{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for finishing off} XPKillOrDefeatBounty{XP for defeating} other{{fallback}}}'** String attributeManualFallbackLabel(String attributeId, String fallback); /// No description provided for @attributeManualTooltip. /// /// In en, this message translates to: - /// **'{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience awarded to whoever executes this character.} XPKillOrDefeatBounty{Experience awarded to whoever kills or defeats this character.} other{?}}'** + /// **'{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience for killing this character while it already lies defeated on the ground.} XPKillOrDefeatBounty{Experience for bringing this character down, whether it dies or is only beaten unconscious.} other{?}}'** String attributeManualTooltip(String attributeId); /// No description provided for @knowledgeTypeVoiceLine. diff --git a/apps/save-editor/lib/l10n/app_localizations_de.dart b/apps/save-editor/lib/l10n/app_localizations_de.dart index 9823d2edb..6e5c1618a 100644 --- a/apps/save-editor/lib/l10n/app_localizations_de.dart +++ b/apps/save-editor/lib/l10n/app_localizations_de.dart @@ -1665,7 +1665,7 @@ class AppLocalizationsDe extends AppLocalizations { String get heroGroupMainStats => 'Hauptwerte'; @override - String get heroGroupCombatSkills => 'Kampffertigkeiten'; + String get heroGroupCombatMovement => 'Kampf und Bewegung'; @override String get heroGroupResistances => 'Widerstände'; @@ -1993,8 +1993,8 @@ class AppLocalizationsDe extends AppLocalizations { 'Swampweed': 'Sumpfkrautpegel', 'MaxSwampweed': 'Max. Sumpfkrautpegel', 'SwampweedDepletionRate': 'Abbautempo', - 'XPExecutedBounty': 'EP fürs Hinrichten', - 'XPKillOrDefeatBounty': 'EP fürs Töten', + 'XPExecutedBounty': 'EP fürs Töten am Boden', + 'XPKillOrDefeatBounty': 'EP fürs Besiegen', 'other': '$fallback', }); return '$_temp0'; @@ -2045,9 +2045,9 @@ class AppLocalizationsDe extends AppLocalizations { 'Der höchste Sumpfkrautpegel, den der Held erreichen kann.', 'SwampweedDepletionRate': 'Wie schnell der Sumpfkrautrausch nachlässt.', 'XPExecutedBounty': - 'Erfahrung, die das Hinrichten dieser Figur einbringt.', + 'Erfahrung dafür, diese Figur zu töten, während sie bereits besiegt am Boden liegt.', 'XPKillOrDefeatBounty': - 'Erfahrung, die das Töten oder Besiegen dieser Figur einbringt.', + 'Erfahrung dafür, diese Figur niederzustrecken, ob sie dabei stirbt oder nur bewusstlos liegen bleibt.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_en.dart b/apps/save-editor/lib/l10n/app_localizations_en.dart index 86712b774..4a70013ee 100644 --- a/apps/save-editor/lib/l10n/app_localizations_en.dart +++ b/apps/save-editor/lib/l10n/app_localizations_en.dart @@ -1654,7 +1654,7 @@ class AppLocalizationsEn extends AppLocalizations { String get heroGroupMainStats => 'Main stats'; @override - String get heroGroupCombatSkills => 'Combat skills'; + String get heroGroupCombatMovement => 'Combat and movement'; @override String get heroGroupResistances => 'Resistances'; @@ -1981,8 +1981,8 @@ class AppLocalizationsEn extends AppLocalizations { 'Swampweed': 'Swampweed level', 'MaxSwampweed': 'Maximum swampweed', 'SwampweedDepletionRate': 'Wear-off speed', - 'XPExecutedBounty': 'XP for executing', - 'XPKillOrDefeatBounty': 'XP for killing', + 'XPExecutedBounty': 'XP for finishing off', + 'XPKillOrDefeatBounty': 'XP for defeating', 'other': '$fallback', }); return '$_temp0'; @@ -2027,9 +2027,9 @@ class AppLocalizationsEn extends AppLocalizations { 'MaxSwampweed': 'The highest swampweed level the hero can reach.', 'SwampweedDepletionRate': 'How quickly the swampweed high wears off.', 'XPExecutedBounty': - 'Experience awarded to whoever executes this character.', + 'Experience for killing this character while it already lies defeated on the ground.', 'XPKillOrDefeatBounty': - 'Experience awarded to whoever kills or defeats this character.', + 'Experience for bringing this character down, whether it dies or is only beaten unconscious.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_es.dart b/apps/save-editor/lib/l10n/app_localizations_es.dart index 7b84bbd51..e194d801c 100644 --- a/apps/save-editor/lib/l10n/app_localizations_es.dart +++ b/apps/save-editor/lib/l10n/app_localizations_es.dart @@ -1665,7 +1665,7 @@ class AppLocalizationsEs extends AppLocalizations { String get heroGroupMainStats => 'Estadísticas principales'; @override - String get heroGroupCombatSkills => 'Habilidades de combate'; + String get heroGroupCombatMovement => 'Combate y movimiento'; @override String get heroGroupResistances => 'Resistencias'; @@ -1992,8 +1992,8 @@ class AppLocalizationsEs extends AppLocalizations { 'Swampweed': 'Nivel de hierba de pantano', 'MaxSwampweed': 'Máx. hierba de pantano', 'SwampweedDepletionRate': 'Velocidad del bajón', - 'XPExecutedBounty': 'EXP por ejecutar', - 'XPKillOrDefeatBounty': 'EXP por matar', + 'XPExecutedBounty': 'EXP por rematar en el suelo', + 'XPKillOrDefeatBounty': 'EXP por derrotar', 'other': '$fallback', }); return '$_temp0'; @@ -2045,9 +2045,9 @@ class AppLocalizationsEs extends AppLocalizations { 'SwampweedDepletionRate': 'Con qué rapidez se pasa el efecto de la hierba de pantano.', 'XPExecutedBounty': - 'Experiencia que recibe quien ejecuta a este personaje.', + 'Experiencia por matar a este personaje cuando ya yace derrotado en el suelo.', 'XPKillOrDefeatBounty': - 'Experiencia que recibe quien mata o derrota a este personaje.', + 'Experiencia por derribar a este personaje, tanto si muere como si solo queda inconsciente.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_fr.dart b/apps/save-editor/lib/l10n/app_localizations_fr.dart index 3e3812e52..0f63851d2 100644 --- a/apps/save-editor/lib/l10n/app_localizations_fr.dart +++ b/apps/save-editor/lib/l10n/app_localizations_fr.dart @@ -1674,7 +1674,7 @@ class AppLocalizationsFr extends AppLocalizations { String get heroGroupMainStats => 'Statistiques principales'; @override - String get heroGroupCombatSkills => 'Compétences de combat'; + String get heroGroupCombatMovement => 'Combat et déplacement'; @override String get heroGroupResistances => 'Résistances'; @@ -2004,8 +2004,8 @@ class AppLocalizationsFr extends AppLocalizations { 'Swampweed': 'Niveau d\'herbe des marais', 'MaxSwampweed': 'Herbe des marais max.', 'SwampweedDepletionRate': 'Vitesse de dissipation', - 'XPExecutedBounty': 'XP pour l\'exécution', - 'XPKillOrDefeatBounty': 'XP pour la mise à mort', + 'XPExecutedBounty': 'XP pour le coup de grâce', + 'XPKillOrDefeatBounty': 'XP pour vaincre', 'other': '$fallback', }); return '$_temp0'; @@ -2058,9 +2058,9 @@ class AppLocalizationsFr extends AppLocalizations { 'SwampweedDepletionRate': 'À quelle vitesse l\'effet de l\'herbe des marais se dissipe.', 'XPExecutedBounty': - 'Expérience accordée à celui qui exécute ce personnage.', + 'Expérience obtenue en achevant ce personnage alors qu\'il est déjà vaincu, à terre.', 'XPKillOrDefeatBounty': - 'Expérience accordée à celui qui tue ou vainc ce personnage.', + 'Expérience obtenue en mettant ce personnage à terre, qu\'il en meure ou qu\'il reste seulement assommé.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_it.dart b/apps/save-editor/lib/l10n/app_localizations_it.dart index 6987d6dc7..509ee1048 100644 --- a/apps/save-editor/lib/l10n/app_localizations_it.dart +++ b/apps/save-editor/lib/l10n/app_localizations_it.dart @@ -1670,7 +1670,7 @@ class AppLocalizationsIt extends AppLocalizations { String get heroGroupMainStats => 'Statistiche principali'; @override - String get heroGroupCombatSkills => 'Abilità di combattimento'; + String get heroGroupCombatMovement => 'Combattimento e movimento'; @override String get heroGroupResistances => 'Resistenze'; @@ -1997,8 +1997,8 @@ class AppLocalizationsIt extends AppLocalizations { 'Swampweed': 'Livello di erba palustre', 'MaxSwampweed': 'Erba palustre max.', 'SwampweedDepletionRate': 'Smaltimento dell\'erba', - 'XPExecutedBounty': 'PE per l\'esecuzione', - 'XPKillOrDefeatBounty': 'PE per l\'uccisione', + 'XPExecutedBounty': 'PE per il colpo di grazia', + 'XPKillOrDefeatBounty': 'PE per sconfiggere', 'other': '$fallback', }); return '$_temp0'; @@ -2047,9 +2047,9 @@ class AppLocalizationsIt extends AppLocalizations { 'SwampweedDepletionRate': 'Quanto in fretta svanisce lo sballo da erba palustre.', 'XPExecutedBounty': - 'Esperienza che ottiene chi giustizia questo personaggio.', + 'Esperienza per uccidere questo personaggio mentre giace già sconfitto a terra.', 'XPKillOrDefeatBounty': - 'Esperienza che ottiene chi uccide o sconfigge questo personaggio.', + 'Esperienza per abbattere questo personaggio, che muoia o resti soltanto privo di sensi.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_ja.dart b/apps/save-editor/lib/l10n/app_localizations_ja.dart index 65a8b3d1d..9af0df082 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ja.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ja.dart @@ -1619,7 +1619,7 @@ class AppLocalizationsJa extends AppLocalizations { String get heroGroupMainStats => '主要ステータス'; @override - String get heroGroupCombatSkills => '戦闘スキル'; + String get heroGroupCombatMovement => '戦闘と移動'; @override String get heroGroupResistances => '耐性'; @@ -1941,7 +1941,7 @@ class AppLocalizationsJa extends AppLocalizations { 'Swampweed': '沼地草の酔い', 'MaxSwampweed': '沼地草の酔いの最大値', 'SwampweedDepletionRate': '酔いが抜ける速さ', - 'XPExecutedBounty': '処刑で得る経験値', + 'XPExecutedBounty': 'とどめで得る経験値', 'XPKillOrDefeatBounty': '撃破で得る経験値', 'other': '$fallback', }); @@ -1973,8 +1973,9 @@ class AppLocalizationsJa extends AppLocalizations { 'Swampweed': 'どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。', 'MaxSwampweed': 'ヒーローが到達できる沼地草の酔いの上限。', 'SwampweedDepletionRate': '沼地草の酔いがどれだけ早く抜けるか。', - 'XPExecutedBounty': 'このキャラクターを処刑した者が得る経験値。', - 'XPKillOrDefeatBounty': 'このキャラクターを倒すか打ち負かした者が得る経験値。', + 'XPExecutedBounty': 'すでに倒れて動けないこのキャラクターに、とどめを刺して得られる経験値。', + 'XPKillOrDefeatBounty': + 'このキャラクターを打ち倒したときに得られる経験値で、そのまま死んでも気絶して倒れただけでも入る。', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_pl.dart b/apps/save-editor/lib/l10n/app_localizations_pl.dart index d16dd051b..dacd90fae 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pl.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pl.dart @@ -1681,7 +1681,7 @@ class AppLocalizationsPl extends AppLocalizations { String get heroGroupMainStats => 'Główne statystyki'; @override - String get heroGroupCombatSkills => 'Umiejętności bojowe'; + String get heroGroupCombatMovement => 'Walka i ruch'; @override String get heroGroupResistances => 'Odporności'; @@ -2008,8 +2008,8 @@ class AppLocalizationsPl extends AppLocalizations { 'Swampweed': 'Poziom bagiennego ziela', 'MaxSwampweed': 'Maks. bagienne ziele', 'SwampweedDepletionRate': 'Tempo mijania odurzenia', - 'XPExecutedBounty': 'PD za dobicie', - 'XPKillOrDefeatBounty': 'PD za zabicie', + 'XPExecutedBounty': 'PD za dobicie leżącego', + 'XPKillOrDefeatBounty': 'PD za pokonanie', 'other': '$fallback', }); return '$_temp0'; @@ -2058,9 +2058,9 @@ class AppLocalizationsPl extends AppLocalizations { 'Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.', 'SwampweedDepletionRate': 'Jak szybko mija odurzenie bagiennym zielem.', 'XPExecutedBounty': - 'Doświadczenie, jakie dostaje ten, kto dobije tę postać.', + 'Doświadczenie za dobicie tej postaci, gdy leży już pokonana na ziemi.', 'XPKillOrDefeatBounty': - 'Doświadczenie, jakie dostaje ten, kto zabije lub pokona tę postać.', + 'Doświadczenie za powalenie tej postaci, niezależnie od tego, czy zginie, czy tylko padnie nieprzytomna.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_pt.dart b/apps/save-editor/lib/l10n/app_localizations_pt.dart index 1c6471632..cfd03b90f 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pt.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pt.dart @@ -1665,7 +1665,7 @@ class AppLocalizationsPt extends AppLocalizations { String get heroGroupMainStats => 'Atributos principais'; @override - String get heroGroupCombatSkills => 'Habilidades de combate'; + String get heroGroupCombatMovement => 'Combate e movimento'; @override String get heroGroupResistances => 'Resistências'; @@ -1993,8 +1993,8 @@ class AppLocalizationsPt extends AppLocalizations { 'Swampweed': 'Nível de erva do pântano', 'MaxSwampweed': 'Máx. de erva do pântano', 'SwampweedDepletionRate': 'Rapidez para o efeito passar', - 'XPExecutedBounty': 'XP por execução', - 'XPKillOrDefeatBounty': 'XP por matar', + 'XPExecutedBounty': 'XP por matar o caído', + 'XPKillOrDefeatBounty': 'XP por derrotar', 'other': '$fallback', }); return '$_temp0'; @@ -2044,9 +2044,9 @@ class AppLocalizationsPt extends AppLocalizations { 'SwampweedDepletionRate': 'Com que rapidez o barato da erva do pântano vai passando.', 'XPExecutedBounty': - 'Experiência concedida a quem executa este personagem.', + 'Experiência por matar este personagem enquanto ele já está no chão, derrotado.', 'XPKillOrDefeatBounty': - 'Experiência concedida a quem mata ou derrota este personagem.', + 'Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.', 'other': '?', }); return '$_temp0'; @@ -4501,7 +4501,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get heroGroupMainStats => 'Atributos principais'; @override - String get heroGroupCombatSkills => 'Habilidades de combate'; + String get heroGroupCombatMovement => 'Combate e movimento'; @override String get heroGroupResistances => 'Resistências'; @@ -4829,8 +4829,8 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'Swampweed': 'Nível de erva do pântano', 'MaxSwampweed': 'Máx. de erva do pântano', 'SwampweedDepletionRate': 'Rapidez para o efeito passar', - 'XPExecutedBounty': 'XP por execução', - 'XPKillOrDefeatBounty': 'XP por matar', + 'XPExecutedBounty': 'XP por matar o caído', + 'XPKillOrDefeatBounty': 'XP por derrotar', 'other': '$fallback', }); return '$_temp0'; @@ -4880,9 +4880,9 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'SwampweedDepletionRate': 'Com que rapidez o barato da erva do pântano vai passando.', 'XPExecutedBounty': - 'Experiência concedida a quem executa este personagem.', + 'Experiência por matar este personagem enquanto ele já está no chão, derrotado.', 'XPKillOrDefeatBounty': - 'Experiência concedida a quem mata ou derrota este personagem.', + 'Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_ru.dart b/apps/save-editor/lib/l10n/app_localizations_ru.dart index abd37f046..99a4e16b6 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ru.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ru.dart @@ -1675,7 +1675,7 @@ class AppLocalizationsRu extends AppLocalizations { String get heroGroupMainStats => 'Основные характеристики'; @override - String get heroGroupCombatSkills => 'Боевые навыки'; + String get heroGroupCombatMovement => 'Бой и передвижение'; @override String get heroGroupResistances => 'Сопротивления'; @@ -2002,8 +2002,8 @@ class AppLocalizationsRu extends AppLocalizations { 'Swampweed': 'Уровень болотника', 'MaxSwampweed': 'Макс. уровень болотника', 'SwampweedDepletionRate': 'Скорость выветривания', - 'XPExecutedBounty': 'Опыт за казнь', - 'XPKillOrDefeatBounty': 'Опыт за убийство', + 'XPExecutedBounty': 'Опыт за добивание', + 'XPKillOrDefeatBounty': 'Опыт за победу', 'other': '$fallback', }); return '$_temp0'; @@ -2056,9 +2056,9 @@ class AppLocalizationsRu extends AppLocalizations { 'SwampweedDepletionRate': 'Насколько быстро проходит дурман от болотника.', 'XPExecutedBounty': - 'Опыт, который получает тот, кто казнит этого персонажа.', + 'Опыт за то, чтобы добить этого персонажа, пока он уже лежит поверженным на земле.', 'XPKillOrDefeatBounty': - 'Опыт, который получает тот, кто убьёт или победит этого персонажа.', + 'Опыт за то, чтобы одолеть этого персонажа: убить его или просто оставить лежать без сознания.', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_localizations_zh.dart b/apps/save-editor/lib/l10n/app_localizations_zh.dart index 1187bf309..5bad9cea3 100644 --- a/apps/save-editor/lib/l10n/app_localizations_zh.dart +++ b/apps/save-editor/lib/l10n/app_localizations_zh.dart @@ -1594,7 +1594,7 @@ class AppLocalizationsZh extends AppLocalizations { String get heroGroupMainStats => '主要属性'; @override - String get heroGroupCombatSkills => '战斗技能'; + String get heroGroupCombatMovement => '战斗与移动'; @override String get heroGroupResistances => '抗性'; @@ -1914,8 +1914,8 @@ class AppLocalizationsZh extends AppLocalizations { 'Swampweed': '沼泽草值', 'MaxSwampweed': '最大沼泽草值', 'SwampweedDepletionRate': '药性消退速度', - 'XPExecutedBounty': '处决获得的经验', - 'XPKillOrDefeatBounty': '击杀获得的经验', + 'XPExecutedBounty': '倒地处决获得的经验', + 'XPKillOrDefeatBounty': '击败获得的经验', 'other': '$fallback', }); return '$_temp0'; @@ -1946,8 +1946,8 @@ class AppLocalizationsZh extends AppLocalizations { 'Swampweed': '主角嗨到什么程度,较高的档位会让他的属性此消彼长。', 'MaxSwampweed': '主角能达到的最高沼泽草值。', 'SwampweedDepletionRate': '沼泽草带来的迷幻劲头消退得有多快。', - 'XPExecutedBounty': '处决这名角色的人能拿到的经验值。', - 'XPKillOrDefeatBounty': '杀死或击败这名角色的人能拿到的经验值。', + 'XPExecutedBounty': '在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。', + 'XPKillOrDefeatBounty': '把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。', 'other': '?', }); return '$_temp0'; @@ -4312,7 +4312,7 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { String get heroGroupMainStats => '主要属性'; @override - String get heroGroupCombatSkills => '战斗技能'; + String get heroGroupCombatMovement => '战斗与移动'; @override String get heroGroupResistances => '抗性'; @@ -4632,8 +4632,8 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { 'Swampweed': '沼泽草值', 'MaxSwampweed': '最大沼泽草值', 'SwampweedDepletionRate': '药性消退速度', - 'XPExecutedBounty': '处决获得的经验', - 'XPKillOrDefeatBounty': '击杀获得的经验', + 'XPExecutedBounty': '倒地处决获得的经验', + 'XPKillOrDefeatBounty': '击败获得的经验', 'other': '$fallback', }); return '$_temp0'; @@ -4664,8 +4664,8 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { 'Swampweed': '主角嗨到什么程度,较高的档位会让他的属性此消彼长。', 'MaxSwampweed': '主角能达到的最高沼泽草值。', 'SwampweedDepletionRate': '沼泽草带来的迷幻劲头消退得有多快。', - 'XPExecutedBounty': '处决这名角色的人能拿到的经验值。', - 'XPKillOrDefeatBounty': '杀死或击败这名角色的人能拿到的经验值。', + 'XPExecutedBounty': '在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。', + 'XPKillOrDefeatBounty': '把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。', 'other': '?', }); return '$_temp0'; diff --git a/apps/save-editor/lib/l10n/app_pl.arb b/apps/save-editor/lib/l10n/app_pl.arb index 2a9b039fb..63427e878 100644 --- a/apps/save-editor/lib/l10n/app_pl.arb +++ b/apps/save-editor/lib/l10n/app_pl.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Brak wpisów wiedzy do dodania", "noEntriesMatch": "Żaden wpis nie pasuje", "heroGroupMainStats": "Główne statystyki", - "heroGroupCombatSkills": "Umiejętności bojowe", + "heroGroupCombatMovement": "Walka i ruch", "heroGroupResistances": "Odporności", "heroGroupThieving": "Złodziejstwo", "heroGroupAdvanced": "Zaawansowane", @@ -576,8 +576,8 @@ "fallbackObjective": "Cel", "fallbackItem": "Przedmiot", "attributeSkillPointsFallback": "Punkty nauki (PN)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Równowaga} MaxSuperArmor{Maks. równowaga} DamageMultiplier{Otrzymywane obrażenia} SpeedModifier{Szybkość ruchu} Oxygen{Powietrze} MaxOxygen{Maks. powietrze} OxygenDepletionRate{Zużycie powietrza na sekundę} OxygenRecoveryRate{Odzysk powietrza na sekundę} CriticalLevelPercent{Ostrzeżenie o powietrzu} SleepTime{Pozostałe godziny odpoczynku} MaxSleepTime{Maks. godziny odpoczynku} SleepTimeRecoveryAmount{Wielkość uzupełnienia} SleepTimeRecoveryPeriod{Czas do uzupełnienia} MaxRestTime{Maks. czas w łóżku} Health_RecoveryRatePerHourOfSleep{Życie na godzinę snu} Mana_RecoveryRatePerHourOfSleep{Mana na godzinę snu} Alcohol{Poziom alkoholu} MaxAlcohol{Maks. poziom alkoholu} AlcoholDepletionRate{Tempo trzeźwienia} Swampweed{Poziom bagiennego ziela} MaxSwampweed{Maks. bagienne ziele} SwampweedDepletionRate{Tempo mijania odurzenia} XPExecutedBounty{PD za dobicie} XPKillOrDefeatBounty{PD za zabicie} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Ile bohater zniesie, zanim cios wytrąci go z równowagi.} MaxSuperArmor{Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.} DamageMultiplier{Mnożnik obrażeń, które przyjmuje bohater – 1 to wartość normalna, wyższa boli bardziej.} SpeedModifier{Mnożnik tempa poruszania się bohatera – 1 to wartość normalna.} Oxygen{Sekundy powietrza pozostałe pod wodą; przy zerze bohater tonie.} MaxOxygen{Ile sekund bohater wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.} OxygenDepletionRate{Ile powietrza ubywa co sekundę pod wodą.} OxygenRecoveryRate{Ile powietrza wraca co sekundę po wynurzeniu.} CriticalLevelPercent{Ile powietrza musi zostać, by gra ostrzegła przed utonięciem.} SleepTime{Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.} MaxSleepTime{Największy zapas godzin odpoczynku, jaki bohater może mieć.} SleepTimeRecoveryAmount{Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.} SleepTimeRecoveryPeriod{Ile czasu mija, zanim zapas godzin odpoczynku uzupełni się na nowo.} MaxRestTime{Najdłuższy pojedynczy odpoczynek w łóżku, na jaki pozwala gra.} Health_RecoveryRatePerHourOfSleep{Część maksymalnego życia, która wraca za każdą przespaną godzinę.} Mana_RecoveryRatePerHourOfSleep{Część maksymalnej many, która wraca za każdą przespaną godzinę.} Alcohol{Jak bardzo bohater jest pijany; na wyższych stopniach zamienia zręczność i manę na siłę.} MaxAlcohol{Najwyższy poziom alkoholu, jaki bohater może osiągnąć.} AlcoholDepletionRate{Jak szybko poziom alkoholu spada z powrotem do trzeźwości.} Swampweed{Jak bardzo bohater jest odurzony; wyższe stopnie przestawiają jego atrybuty.} MaxSwampweed{Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.} SwampweedDepletionRate{Jak szybko mija odurzenie bagiennym zielem.} XPExecutedBounty{Doświadczenie, jakie dostaje ten, kto dobije tę postać.} XPKillOrDefeatBounty{Doświadczenie, jakie dostaje ten, kto zabije lub pokona tę postać.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Równowaga} MaxSuperArmor{Maks. równowaga} DamageMultiplier{Otrzymywane obrażenia} SpeedModifier{Szybkość ruchu} Oxygen{Powietrze} MaxOxygen{Maks. powietrze} OxygenDepletionRate{Zużycie powietrza na sekundę} OxygenRecoveryRate{Odzysk powietrza na sekundę} CriticalLevelPercent{Ostrzeżenie o powietrzu} SleepTime{Pozostałe godziny odpoczynku} MaxSleepTime{Maks. godziny odpoczynku} SleepTimeRecoveryAmount{Wielkość uzupełnienia} SleepTimeRecoveryPeriod{Czas do uzupełnienia} MaxRestTime{Maks. czas w łóżku} Health_RecoveryRatePerHourOfSleep{Życie na godzinę snu} Mana_RecoveryRatePerHourOfSleep{Mana na godzinę snu} Alcohol{Poziom alkoholu} MaxAlcohol{Maks. poziom alkoholu} AlcoholDepletionRate{Tempo trzeźwienia} Swampweed{Poziom bagiennego ziela} MaxSwampweed{Maks. bagienne ziele} SwampweedDepletionRate{Tempo mijania odurzenia} XPExecutedBounty{PD za dobicie leżącego} XPKillOrDefeatBounty{PD za pokonanie} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Ile bohater zniesie, zanim cios wytrąci go z równowagi.} MaxSuperArmor{Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.} DamageMultiplier{Mnożnik obrażeń, które przyjmuje bohater – 1 to wartość normalna, wyższa boli bardziej.} SpeedModifier{Mnożnik tempa poruszania się bohatera – 1 to wartość normalna.} Oxygen{Sekundy powietrza pozostałe pod wodą; przy zerze bohater tonie.} MaxOxygen{Ile sekund bohater wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.} OxygenDepletionRate{Ile powietrza ubywa co sekundę pod wodą.} OxygenRecoveryRate{Ile powietrza wraca co sekundę po wynurzeniu.} CriticalLevelPercent{Ile powietrza musi zostać, by gra ostrzegła przed utonięciem.} SleepTime{Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.} MaxSleepTime{Największy zapas godzin odpoczynku, jaki bohater może mieć.} SleepTimeRecoveryAmount{Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.} SleepTimeRecoveryPeriod{Ile czasu mija, zanim zapas godzin odpoczynku uzupełni się na nowo.} MaxRestTime{Najdłuższy pojedynczy odpoczynek w łóżku, na jaki pozwala gra.} Health_RecoveryRatePerHourOfSleep{Część maksymalnego życia, która wraca za każdą przespaną godzinę.} Mana_RecoveryRatePerHourOfSleep{Część maksymalnej many, która wraca za każdą przespaną godzinę.} Alcohol{Jak bardzo bohater jest pijany; na wyższych stopniach zamienia zręczność i manę na siłę.} MaxAlcohol{Najwyższy poziom alkoholu, jaki bohater może osiągnąć.} AlcoholDepletionRate{Jak szybko poziom alkoholu spada z powrotem do trzeźwości.} Swampweed{Jak bardzo bohater jest odurzony; wyższe stopnie przestawiają jego atrybuty.} MaxSwampweed{Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.} SwampweedDepletionRate{Jak szybko mija odurzenie bagiennym zielem.} XPExecutedBounty{Doświadczenie za dobicie tej postaci, gdy leży już pokonana na ziemi.} XPKillOrDefeatBounty{Doświadczenie za powalenie tej postaci, niezależnie od tego, czy zginie, czy tylko padnie nieprzytomna.} other{?}}", "knowledgeTypeVoiceLine": "Kwestia głosowa", "knowledgeTypeOther": "Inne", "armorUpgradeUpper": "Góra", diff --git a/apps/save-editor/lib/l10n/app_pt.arb b/apps/save-editor/lib/l10n/app_pt.arb index f3873bd08..ed4013b34 100644 --- a/apps/save-editor/lib/l10n/app_pt.arb +++ b/apps/save-editor/lib/l10n/app_pt.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Nenhuma entrada de conhecimento disponível para adicionar", "noEntriesMatch": "Nenhuma entrada corresponde", "heroGroupMainStats": "Atributos principais", - "heroGroupCombatSkills": "Habilidades de combate", + "heroGroupCombatMovement": "Combate e movimento", "heroGroupResistances": "Resistências", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avançado", @@ -576,8 +576,8 @@ "fallbackObjective": "Objetivo", "fallbackItem": "Item", "attributeSkillPointsFallback": "Pontos de aprendizado (PA)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por execução} XPKillOrDefeatBounty{XP por matar} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência concedida a quem executa este personagem.} XPKillOrDefeatBounty{Experiência concedida a quem mata ou derrota este personagem.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por matar o caído} XPKillOrDefeatBounty{XP por derrotar} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência por matar este personagem enquanto ele já está no chão, derrotado.} XPKillOrDefeatBounty{Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.} other{?}}", "knowledgeTypeVoiceLine": "Linha de voz", "knowledgeTypeOther": "Outro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_pt_BR.arb b/apps/save-editor/lib/l10n/app_pt_BR.arb index f0ddf4d79..f9615f5ba 100644 --- a/apps/save-editor/lib/l10n/app_pt_BR.arb +++ b/apps/save-editor/lib/l10n/app_pt_BR.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Nenhuma entrada de conhecimento disponível para adicionar", "noEntriesMatch": "Nenhuma entrada corresponde", "heroGroupMainStats": "Atributos principais", - "heroGroupCombatSkills": "Habilidades de combate", + "heroGroupCombatMovement": "Combate e movimento", "heroGroupResistances": "Resistências", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avançado", @@ -576,8 +576,8 @@ "fallbackObjective": "Objetivo", "fallbackItem": "Item", "attributeSkillPointsFallback": "Pontos de aprendizado (PA)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por execução} XPKillOrDefeatBounty{XP por matar} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência concedida a quem executa este personagem.} XPKillOrDefeatBounty{Experiência concedida a quem mata ou derrota este personagem.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por matar o caído} XPKillOrDefeatBounty{XP por derrotar} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência por matar este personagem enquanto ele já está no chão, derrotado.} XPKillOrDefeatBounty{Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.} other{?}}", "knowledgeTypeVoiceLine": "Linha de voz", "knowledgeTypeOther": "Outro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_ru.arb b/apps/save-editor/lib/l10n/app_ru.arb index 9637fe7f5..a3307001c 100644 --- a/apps/save-editor/lib/l10n/app_ru.arb +++ b/apps/save-editor/lib/l10n/app_ru.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Нет записей знаний для добавления", "noEntriesMatch": "Нет подходящих записей", "heroGroupMainStats": "Основные характеристики", - "heroGroupCombatSkills": "Боевые навыки", + "heroGroupCombatMovement": "Бой и передвижение", "heroGroupResistances": "Сопротивления", "heroGroupThieving": "Воровство", "heroGroupAdvanced": "Дополнительно", @@ -576,8 +576,8 @@ "fallbackObjective": "Цель", "fallbackItem": "Предмет", "attributeSkillPointsFallback": "Очки обучения (LP)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Стойкость} MaxSuperArmor{Макс. стойкость} DamageMultiplier{Получаемый урон} SpeedModifier{Скорость передвижения} Oxygen{Запас воздуха} MaxOxygen{Макс. запас воздуха} OxygenDepletionRate{Расход воздуха в секунду} OxygenRecoveryRate{Возврат воздуха в секунду} CriticalLevelPercent{Порог нехватки воздуха} SleepTime{Полезные часы сна} MaxSleepTime{Макс. полезные часы сна} SleepTimeRecoveryAmount{Возврат полезных часов} SleepTimeRecoveryPeriod{Интервал восполнения} MaxRestTime{Макс. время в кровати} Health_RecoveryRatePerHourOfSleep{Здоровье за час сна} Mana_RecoveryRatePerHourOfSleep{Мана за час сна} Alcohol{Уровень опьянения} MaxAlcohol{Макс. опьянение} AlcoholDepletionRate{Скорость отрезвления} Swampweed{Уровень болотника} MaxSwampweed{Макс. уровень болотника} SwampweedDepletionRate{Скорость выветривания} XPExecutedBounty{Опыт за казнь} XPKillOrDefeatBounty{Опыт за убийство} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Сколько герой выдерживает, прежде чем удар его пошатнёт.} MaxSuperArmor{Полный запас стойкости; он растёт с уровнем и с надетой бронёй.} DamageMultiplier{Множитель урона, который получает герой: 1 — как обычно, больше — больнее.} SpeedModifier{Множитель того, как быстро герой двигается: 1 — как обычно.} Oxygen{Сколько секунд воздуха осталось под водой; на нуле герой тонет.} MaxOxygen{Сколько секунд герой может пробыть под водой; навык Ныряние это повышает.} OxygenDepletionRate{Сколько воздуха расходуется под водой каждую секунду.} OxygenRecoveryRate{Сколько воздуха возвращается каждую секунду после всплытия.} CriticalLevelPercent{Доля оставшегося воздуха, при которой игра предупреждает об угрозе утонуть.} SleepTime{Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.} MaxSleepTime{Наибольший запас полезных часов сна, который может держать герой.} SleepTimeRecoveryAmount{Сколько полезных часов сна возвращается при каждом восполнении.} SleepTimeRecoveryPeriod{Сколько времени проходит, прежде чем запас полезных часов сна восполнится снова.} MaxRestTime{Самое долгое пребывание в кровати за один раз, которое допускает игра.} Health_RecoveryRatePerHourOfSleep{Доля максимального здоровья, которая возвращается за каждый час сна.} Mana_RecoveryRatePerHourOfSleep{Доля максимальной маны, которая возвращается за каждый час сна.} Alcohol{Насколько герой пьян; высокие ступени меняют ловкость и ману на силу.} MaxAlcohol{Самый высокий уровень опьянения, которого может достичь герой.} AlcoholDepletionRate{Насколько быстро уровень опьянения падает обратно к трезвости.} Swampweed{Насколько герой одурманен; высокие ступени сдвигают его характеристики.} MaxSwampweed{Самый высокий уровень болотника, которого может достичь герой.} SwampweedDepletionRate{Насколько быстро проходит дурман от болотника.} XPExecutedBounty{Опыт, который получает тот, кто казнит этого персонажа.} XPKillOrDefeatBounty{Опыт, который получает тот, кто убьёт или победит этого персонажа.} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Стойкость} MaxSuperArmor{Макс. стойкость} DamageMultiplier{Получаемый урон} SpeedModifier{Скорость передвижения} Oxygen{Запас воздуха} MaxOxygen{Макс. запас воздуха} OxygenDepletionRate{Расход воздуха в секунду} OxygenRecoveryRate{Возврат воздуха в секунду} CriticalLevelPercent{Порог нехватки воздуха} SleepTime{Полезные часы сна} MaxSleepTime{Макс. полезные часы сна} SleepTimeRecoveryAmount{Возврат полезных часов} SleepTimeRecoveryPeriod{Интервал восполнения} MaxRestTime{Макс. время в кровати} Health_RecoveryRatePerHourOfSleep{Здоровье за час сна} Mana_RecoveryRatePerHourOfSleep{Мана за час сна} Alcohol{Уровень опьянения} MaxAlcohol{Макс. опьянение} AlcoholDepletionRate{Скорость отрезвления} Swampweed{Уровень болотника} MaxSwampweed{Макс. уровень болотника} SwampweedDepletionRate{Скорость выветривания} XPExecutedBounty{Опыт за добивание} XPKillOrDefeatBounty{Опыт за победу} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Сколько герой выдерживает, прежде чем удар его пошатнёт.} MaxSuperArmor{Полный запас стойкости; он растёт с уровнем и с надетой бронёй.} DamageMultiplier{Множитель урона, который получает герой: 1 — как обычно, больше — больнее.} SpeedModifier{Множитель того, как быстро герой двигается: 1 — как обычно.} Oxygen{Сколько секунд воздуха осталось под водой; на нуле герой тонет.} MaxOxygen{Сколько секунд герой может пробыть под водой; навык Ныряние это повышает.} OxygenDepletionRate{Сколько воздуха расходуется под водой каждую секунду.} OxygenRecoveryRate{Сколько воздуха возвращается каждую секунду после всплытия.} CriticalLevelPercent{Доля оставшегося воздуха, при которой игра предупреждает об угрозе утонуть.} SleepTime{Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.} MaxSleepTime{Наибольший запас полезных часов сна, который может держать герой.} SleepTimeRecoveryAmount{Сколько полезных часов сна возвращается при каждом восполнении.} SleepTimeRecoveryPeriod{Сколько времени проходит, прежде чем запас полезных часов сна восполнится снова.} MaxRestTime{Самое долгое пребывание в кровати за один раз, которое допускает игра.} Health_RecoveryRatePerHourOfSleep{Доля максимального здоровья, которая возвращается за каждый час сна.} Mana_RecoveryRatePerHourOfSleep{Доля максимальной маны, которая возвращается за каждый час сна.} Alcohol{Насколько герой пьян; высокие ступени меняют ловкость и ману на силу.} MaxAlcohol{Самый высокий уровень опьянения, которого может достичь герой.} AlcoholDepletionRate{Насколько быстро уровень опьянения падает обратно к трезвости.} Swampweed{Насколько герой одурманен; высокие ступени сдвигают его характеристики.} MaxSwampweed{Самый высокий уровень болотника, которого может достичь герой.} SwampweedDepletionRate{Насколько быстро проходит дурман от болотника.} XPExecutedBounty{Опыт за то, чтобы добить этого персонажа, пока он уже лежит поверженным на земле.} XPKillOrDefeatBounty{Опыт за то, чтобы одолеть этого персонажа: убить его или просто оставить лежать без сознания.} other{?}}", "knowledgeTypeVoiceLine": "Озвученная реплика", "knowledgeTypeOther": "Другое", "armorUpgradeUpper": "Верх", diff --git a/apps/save-editor/lib/l10n/app_zh.arb b/apps/save-editor/lib/l10n/app_zh.arb index c56ad9631..af0c4c66a 100644 --- a/apps/save-editor/lib/l10n/app_zh.arb +++ b/apps/save-editor/lib/l10n/app_zh.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "没有可添加的知识条目", "noEntriesMatch": "没有匹配的条目", "heroGroupMainStats": "主要属性", - "heroGroupCombatSkills": "战斗技能", + "heroGroupCombatMovement": "战斗与移动", "heroGroupResistances": "抗性", "heroGroupThieving": "盗窃", "heroGroupAdvanced": "高级", @@ -576,8 +576,8 @@ "fallbackObjective": "目标", "fallbackItem": "物品", "attributeSkillPointsFallback": "学习点数(LP)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{处决获得的经验} XPKillOrDefeatBounty{击杀获得的经验} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{处决这名角色的人能拿到的经验值。} XPKillOrDefeatBounty{杀死或击败这名角色的人能拿到的经验值。} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{倒地处决获得的经验} XPKillOrDefeatBounty{击败获得的经验} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。} XPKillOrDefeatBounty{把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。} other{?}}", "knowledgeTypeVoiceLine": "语音台词", "knowledgeTypeOther": "其他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/l10n/app_zh_Hans.arb b/apps/save-editor/lib/l10n/app_zh_Hans.arb index f8f9676f0..e29ed7ac4 100644 --- a/apps/save-editor/lib/l10n/app_zh_Hans.arb +++ b/apps/save-editor/lib/l10n/app_zh_Hans.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "没有可添加的知识条目", "noEntriesMatch": "没有匹配的条目", "heroGroupMainStats": "主要属性", - "heroGroupCombatSkills": "战斗技能", + "heroGroupCombatMovement": "战斗与移动", "heroGroupResistances": "抗性", "heroGroupThieving": "盗窃", "heroGroupAdvanced": "高级", @@ -576,8 +576,8 @@ "fallbackObjective": "目标", "fallbackItem": "物品", "attributeSkillPointsFallback": "学习点数(LP)", - "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{处决获得的经验} XPKillOrDefeatBounty{击杀获得的经验} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{处决这名角色的人能拿到的经验值。} XPKillOrDefeatBounty{杀死或击败这名角色的人能拿到的经验值。} other{?}}", + "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{倒地处决获得的经验} XPKillOrDefeatBounty{击败获得的经验} other{{fallback}}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。} XPKillOrDefeatBounty{把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。} other{?}}", "knowledgeTypeVoiceLine": "语音台词", "knowledgeTypeOther": "其他", "armorUpgradeUpper": "上部", From d02c8990b4ce351589e33dd97dc8a29c05aa75bb Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Fri, 14 Aug 2026 13:56:33 +0200 Subject: [PATCH 6/8] fix(save-editor): shorten the combat heading and let sidebar labels wrap "Combat and movement" was too wide for the sidebar. It reads "Combat / movement" now, in every language, which is the same information in fewer pixels. The sidebar tile truncated with an ellipsis at one line, so a heading that still does not fit lost its second word entirely. It wraps onto a second line instead; the ellipsis only applies beyond that. Co-Authored-By: Claude Opus 5 --- .../lib/features/editor/ui/grouped_attribute_sidebar.dart | 5 ++++- apps/save-editor/lib/l10n/app_de.arb | 2 +- apps/save-editor/lib/l10n/app_en.arb | 2 +- apps/save-editor/lib/l10n/app_es.arb | 2 +- apps/save-editor/lib/l10n/app_fr.arb | 2 +- apps/save-editor/lib/l10n/app_it.arb | 2 +- apps/save-editor/lib/l10n/app_ja.arb | 2 +- apps/save-editor/lib/l10n/app_localizations.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_de.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_en.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_es.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_fr.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_it.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_ja.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_pl.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_pt.dart | 4 ++-- apps/save-editor/lib/l10n/app_localizations_ru.dart | 2 +- apps/save-editor/lib/l10n/app_localizations_zh.dart | 4 ++-- apps/save-editor/lib/l10n/app_pl.arb | 2 +- apps/save-editor/lib/l10n/app_pt.arb | 2 +- apps/save-editor/lib/l10n/app_pt_BR.arb | 2 +- apps/save-editor/lib/l10n/app_ru.arb | 2 +- apps/save-editor/lib/l10n/app_zh.arb | 2 +- apps/save-editor/lib/l10n/app_zh_Hans.arb | 2 +- .../test/features/editor/ui/hero_stats_card_test.dart | 5 +++++ 25 files changed, 34 insertions(+), 26 deletions(-) diff --git a/apps/save-editor/lib/features/editor/ui/grouped_attribute_sidebar.dart b/apps/save-editor/lib/features/editor/ui/grouped_attribute_sidebar.dart index a27f66c10..60a2385b9 100644 --- a/apps/save-editor/lib/features/editor/ui/grouped_attribute_sidebar.dart +++ b/apps/save-editor/lib/features/editor/ui/grouped_attribute_sidebar.dart @@ -139,7 +139,10 @@ class _SidebarTile extends StatelessWidget { Expanded( child: Text( label, - maxLines: 1, + // A two-word heading like "Combat / movement" does not fit + // this sidebar in every language, so let it wrap rather + // than truncate; the ellipsis is the last resort. + maxLines: 2, overflow: TextOverflow.ellipsis, style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: selected ? scheme.primary : scheme.onSurface, diff --git a/apps/save-editor/lib/l10n/app_de.arb b/apps/save-editor/lib/l10n/app_de.arb index 310eb974c..caa876dd8 100644 --- a/apps/save-editor/lib/l10n/app_de.arb +++ b/apps/save-editor/lib/l10n/app_de.arb @@ -483,7 +483,7 @@ "noKnowledgeEntriesAvailableToAdd": "Keine Wissenseinträge zum Hinzufügen verfügbar", "noEntriesMatch": "Keine passenden Einträge", "heroGroupMainStats": "Hauptwerte", - "heroGroupCombatMovement": "Kampf und Bewegung", + "heroGroupCombatMovement": "Kampf / Bewegung", "heroGroupResistances": "Widerstände", "heroGroupThieving": "Diebeskunst", "heroGroupAdvanced": "Erweitert", diff --git a/apps/save-editor/lib/l10n/app_en.arb b/apps/save-editor/lib/l10n/app_en.arb index 61558f04a..cff0dff83 100644 --- a/apps/save-editor/lib/l10n/app_en.arb +++ b/apps/save-editor/lib/l10n/app_en.arb @@ -838,7 +838,7 @@ "noKnowledgeEntriesAvailableToAdd": "No knowledge entries available to add", "noEntriesMatch": "No entries match", "heroGroupMainStats": "Main stats", - "heroGroupCombatMovement": "Combat and movement", + "heroGroupCombatMovement": "Combat / movement", "heroGroupResistances": "Resistances", "heroGroupThieving": "Thieving", "heroGroupAdvanced": "Advanced", diff --git a/apps/save-editor/lib/l10n/app_es.arb b/apps/save-editor/lib/l10n/app_es.arb index c327db605..5a07bb5e9 100644 --- a/apps/save-editor/lib/l10n/app_es.arb +++ b/apps/save-editor/lib/l10n/app_es.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "No hay entradas de conocimiento disponibles para añadir", "noEntriesMatch": "Ninguna entrada coincide", "heroGroupMainStats": "Estadísticas principales", - "heroGroupCombatMovement": "Combate y movimiento", + "heroGroupCombatMovement": "Combate / movimiento", "heroGroupResistances": "Resistencias", "heroGroupThieving": "Robo", "heroGroupAdvanced": "Avanzado", diff --git a/apps/save-editor/lib/l10n/app_fr.arb b/apps/save-editor/lib/l10n/app_fr.arb index 452484a9b..8ab713aa9 100644 --- a/apps/save-editor/lib/l10n/app_fr.arb +++ b/apps/save-editor/lib/l10n/app_fr.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Aucune entrée de connaissance disponible à ajouter", "noEntriesMatch": "Aucune entrée correspondante", "heroGroupMainStats": "Statistiques principales", - "heroGroupCombatMovement": "Combat et déplacement", + "heroGroupCombatMovement": "Combat / déplacement", "heroGroupResistances": "Résistances", "heroGroupThieving": "Vol", "heroGroupAdvanced": "Avancé", diff --git a/apps/save-editor/lib/l10n/app_it.arb b/apps/save-editor/lib/l10n/app_it.arb index b7f75be6a..7fc886d66 100644 --- a/apps/save-editor/lib/l10n/app_it.arb +++ b/apps/save-editor/lib/l10n/app_it.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Nessuna voce di conoscenza disponibile da aggiungere", "noEntriesMatch": "Nessuna voce corrispondente", "heroGroupMainStats": "Statistiche principali", - "heroGroupCombatMovement": "Combattimento e movimento", + "heroGroupCombatMovement": "Combattimento / movimento", "heroGroupResistances": "Resistenze", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avanzate", diff --git a/apps/save-editor/lib/l10n/app_ja.arb b/apps/save-editor/lib/l10n/app_ja.arb index 752f94fa8..34e3546d3 100644 --- a/apps/save-editor/lib/l10n/app_ja.arb +++ b/apps/save-editor/lib/l10n/app_ja.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "追加できる知識エントリがありません", "noEntriesMatch": "一致するエントリがありません", "heroGroupMainStats": "主要ステータス", - "heroGroupCombatMovement": "戦闘と移動", + "heroGroupCombatMovement": "戦闘 / 移動", "heroGroupResistances": "耐性", "heroGroupThieving": "盗み", "heroGroupAdvanced": "詳細設定", diff --git a/apps/save-editor/lib/l10n/app_localizations.dart b/apps/save-editor/lib/l10n/app_localizations.dart index f5f4ecef1..201c0b43e 100644 --- a/apps/save-editor/lib/l10n/app_localizations.dart +++ b/apps/save-editor/lib/l10n/app_localizations.dart @@ -2939,7 +2939,7 @@ abstract class AppLocalizations { /// No description provided for @heroGroupCombatMovement. /// /// In en, this message translates to: - /// **'Combat and movement'** + /// **'Combat / movement'** String get heroGroupCombatMovement; /// No description provided for @heroGroupResistances. diff --git a/apps/save-editor/lib/l10n/app_localizations_de.dart b/apps/save-editor/lib/l10n/app_localizations_de.dart index 6e5c1618a..1e8a6adee 100644 --- a/apps/save-editor/lib/l10n/app_localizations_de.dart +++ b/apps/save-editor/lib/l10n/app_localizations_de.dart @@ -1665,7 +1665,7 @@ class AppLocalizationsDe extends AppLocalizations { String get heroGroupMainStats => 'Hauptwerte'; @override - String get heroGroupCombatMovement => 'Kampf und Bewegung'; + String get heroGroupCombatMovement => 'Kampf / Bewegung'; @override String get heroGroupResistances => 'Widerstände'; diff --git a/apps/save-editor/lib/l10n/app_localizations_en.dart b/apps/save-editor/lib/l10n/app_localizations_en.dart index 4a70013ee..c7bc3e508 100644 --- a/apps/save-editor/lib/l10n/app_localizations_en.dart +++ b/apps/save-editor/lib/l10n/app_localizations_en.dart @@ -1654,7 +1654,7 @@ class AppLocalizationsEn extends AppLocalizations { String get heroGroupMainStats => 'Main stats'; @override - String get heroGroupCombatMovement => 'Combat and movement'; + String get heroGroupCombatMovement => 'Combat / movement'; @override String get heroGroupResistances => 'Resistances'; diff --git a/apps/save-editor/lib/l10n/app_localizations_es.dart b/apps/save-editor/lib/l10n/app_localizations_es.dart index e194d801c..097d8121e 100644 --- a/apps/save-editor/lib/l10n/app_localizations_es.dart +++ b/apps/save-editor/lib/l10n/app_localizations_es.dart @@ -1665,7 +1665,7 @@ class AppLocalizationsEs extends AppLocalizations { String get heroGroupMainStats => 'Estadísticas principales'; @override - String get heroGroupCombatMovement => 'Combate y movimiento'; + String get heroGroupCombatMovement => 'Combate / movimiento'; @override String get heroGroupResistances => 'Resistencias'; diff --git a/apps/save-editor/lib/l10n/app_localizations_fr.dart b/apps/save-editor/lib/l10n/app_localizations_fr.dart index 0f63851d2..5a5fc700d 100644 --- a/apps/save-editor/lib/l10n/app_localizations_fr.dart +++ b/apps/save-editor/lib/l10n/app_localizations_fr.dart @@ -1674,7 +1674,7 @@ class AppLocalizationsFr extends AppLocalizations { String get heroGroupMainStats => 'Statistiques principales'; @override - String get heroGroupCombatMovement => 'Combat et déplacement'; + String get heroGroupCombatMovement => 'Combat / déplacement'; @override String get heroGroupResistances => 'Résistances'; diff --git a/apps/save-editor/lib/l10n/app_localizations_it.dart b/apps/save-editor/lib/l10n/app_localizations_it.dart index 509ee1048..e0aab2b37 100644 --- a/apps/save-editor/lib/l10n/app_localizations_it.dart +++ b/apps/save-editor/lib/l10n/app_localizations_it.dart @@ -1670,7 +1670,7 @@ class AppLocalizationsIt extends AppLocalizations { String get heroGroupMainStats => 'Statistiche principali'; @override - String get heroGroupCombatMovement => 'Combattimento e movimento'; + String get heroGroupCombatMovement => 'Combattimento / movimento'; @override String get heroGroupResistances => 'Resistenze'; diff --git a/apps/save-editor/lib/l10n/app_localizations_ja.dart b/apps/save-editor/lib/l10n/app_localizations_ja.dart index 9af0df082..e063280a4 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ja.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ja.dart @@ -1619,7 +1619,7 @@ class AppLocalizationsJa extends AppLocalizations { String get heroGroupMainStats => '主要ステータス'; @override - String get heroGroupCombatMovement => '戦闘と移動'; + String get heroGroupCombatMovement => '戦闘 / 移動'; @override String get heroGroupResistances => '耐性'; diff --git a/apps/save-editor/lib/l10n/app_localizations_pl.dart b/apps/save-editor/lib/l10n/app_localizations_pl.dart index dacd90fae..342d2172e 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pl.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pl.dart @@ -1681,7 +1681,7 @@ class AppLocalizationsPl extends AppLocalizations { String get heroGroupMainStats => 'Główne statystyki'; @override - String get heroGroupCombatMovement => 'Walka i ruch'; + String get heroGroupCombatMovement => 'Walka / ruch'; @override String get heroGroupResistances => 'Odporności'; diff --git a/apps/save-editor/lib/l10n/app_localizations_pt.dart b/apps/save-editor/lib/l10n/app_localizations_pt.dart index cfd03b90f..f0780819e 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pt.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pt.dart @@ -1665,7 +1665,7 @@ class AppLocalizationsPt extends AppLocalizations { String get heroGroupMainStats => 'Atributos principais'; @override - String get heroGroupCombatMovement => 'Combate e movimento'; + String get heroGroupCombatMovement => 'Combate / movimento'; @override String get heroGroupResistances => 'Resistências'; @@ -4501,7 +4501,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String get heroGroupMainStats => 'Atributos principais'; @override - String get heroGroupCombatMovement => 'Combate e movimento'; + String get heroGroupCombatMovement => 'Combate / movimento'; @override String get heroGroupResistances => 'Resistências'; diff --git a/apps/save-editor/lib/l10n/app_localizations_ru.dart b/apps/save-editor/lib/l10n/app_localizations_ru.dart index 99a4e16b6..480ea3353 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ru.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ru.dart @@ -1675,7 +1675,7 @@ class AppLocalizationsRu extends AppLocalizations { String get heroGroupMainStats => 'Основные характеристики'; @override - String get heroGroupCombatMovement => 'Бой и передвижение'; + String get heroGroupCombatMovement => 'Бой / передвижение'; @override String get heroGroupResistances => 'Сопротивления'; diff --git a/apps/save-editor/lib/l10n/app_localizations_zh.dart b/apps/save-editor/lib/l10n/app_localizations_zh.dart index 5bad9cea3..5d514dda9 100644 --- a/apps/save-editor/lib/l10n/app_localizations_zh.dart +++ b/apps/save-editor/lib/l10n/app_localizations_zh.dart @@ -1594,7 +1594,7 @@ class AppLocalizationsZh extends AppLocalizations { String get heroGroupMainStats => '主要属性'; @override - String get heroGroupCombatMovement => '战斗与移动'; + String get heroGroupCombatMovement => '战斗 / 移动'; @override String get heroGroupResistances => '抗性'; @@ -4312,7 +4312,7 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { String get heroGroupMainStats => '主要属性'; @override - String get heroGroupCombatMovement => '战斗与移动'; + String get heroGroupCombatMovement => '战斗 / 移动'; @override String get heroGroupResistances => '抗性'; diff --git a/apps/save-editor/lib/l10n/app_pl.arb b/apps/save-editor/lib/l10n/app_pl.arb index 63427e878..cc7a8858a 100644 --- a/apps/save-editor/lib/l10n/app_pl.arb +++ b/apps/save-editor/lib/l10n/app_pl.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Brak wpisów wiedzy do dodania", "noEntriesMatch": "Żaden wpis nie pasuje", "heroGroupMainStats": "Główne statystyki", - "heroGroupCombatMovement": "Walka i ruch", + "heroGroupCombatMovement": "Walka / ruch", "heroGroupResistances": "Odporności", "heroGroupThieving": "Złodziejstwo", "heroGroupAdvanced": "Zaawansowane", diff --git a/apps/save-editor/lib/l10n/app_pt.arb b/apps/save-editor/lib/l10n/app_pt.arb index ed4013b34..5543aa4ef 100644 --- a/apps/save-editor/lib/l10n/app_pt.arb +++ b/apps/save-editor/lib/l10n/app_pt.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Nenhuma entrada de conhecimento disponível para adicionar", "noEntriesMatch": "Nenhuma entrada corresponde", "heroGroupMainStats": "Atributos principais", - "heroGroupCombatMovement": "Combate e movimento", + "heroGroupCombatMovement": "Combate / movimento", "heroGroupResistances": "Resistências", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avançado", diff --git a/apps/save-editor/lib/l10n/app_pt_BR.arb b/apps/save-editor/lib/l10n/app_pt_BR.arb index f9615f5ba..17a19d330 100644 --- a/apps/save-editor/lib/l10n/app_pt_BR.arb +++ b/apps/save-editor/lib/l10n/app_pt_BR.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Nenhuma entrada de conhecimento disponível para adicionar", "noEntriesMatch": "Nenhuma entrada corresponde", "heroGroupMainStats": "Atributos principais", - "heroGroupCombatMovement": "Combate e movimento", + "heroGroupCombatMovement": "Combate / movimento", "heroGroupResistances": "Resistências", "heroGroupThieving": "Furto", "heroGroupAdvanced": "Avançado", diff --git a/apps/save-editor/lib/l10n/app_ru.arb b/apps/save-editor/lib/l10n/app_ru.arb index a3307001c..2a220565e 100644 --- a/apps/save-editor/lib/l10n/app_ru.arb +++ b/apps/save-editor/lib/l10n/app_ru.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "Нет записей знаний для добавления", "noEntriesMatch": "Нет подходящих записей", "heroGroupMainStats": "Основные характеристики", - "heroGroupCombatMovement": "Бой и передвижение", + "heroGroupCombatMovement": "Бой / передвижение", "heroGroupResistances": "Сопротивления", "heroGroupThieving": "Воровство", "heroGroupAdvanced": "Дополнительно", diff --git a/apps/save-editor/lib/l10n/app_zh.arb b/apps/save-editor/lib/l10n/app_zh.arb index af0c4c66a..ce8ef7320 100644 --- a/apps/save-editor/lib/l10n/app_zh.arb +++ b/apps/save-editor/lib/l10n/app_zh.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "没有可添加的知识条目", "noEntriesMatch": "没有匹配的条目", "heroGroupMainStats": "主要属性", - "heroGroupCombatMovement": "战斗与移动", + "heroGroupCombatMovement": "战斗 / 移动", "heroGroupResistances": "抗性", "heroGroupThieving": "盗窃", "heroGroupAdvanced": "高级", diff --git a/apps/save-editor/lib/l10n/app_zh_Hans.arb b/apps/save-editor/lib/l10n/app_zh_Hans.arb index e29ed7ac4..51fa9ade2 100644 --- a/apps/save-editor/lib/l10n/app_zh_Hans.arb +++ b/apps/save-editor/lib/l10n/app_zh_Hans.arb @@ -448,7 +448,7 @@ "noKnowledgeEntriesAvailableToAdd": "没有可添加的知识条目", "noEntriesMatch": "没有匹配的条目", "heroGroupMainStats": "主要属性", - "heroGroupCombatMovement": "战斗与移动", + "heroGroupCombatMovement": "战斗 / 移动", "heroGroupResistances": "抗性", "heroGroupThieving": "盗窃", "heroGroupAdvanced": "高级", diff --git a/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart b/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart index a67c1e6c8..24d6f12de 100644 --- a/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart +++ b/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart @@ -253,6 +253,11 @@ void main() { // Sidebar entry exists (may appear in sidebar AND card header). expect(find.text('Advanced'), findsWidgets); + + // A sidebar heading may be two words ("Combat / movement") and the sidebar + // is narrow, so the label wraps onto a second line rather than truncating. + final sidebarLabel = tester.widgetList(find.text('Advanced')).first; + expect(sidebarLabel.maxLines, 2); // Default: only group, so it's selected — row is immediately visible. expect(_heroBaseField('XPKillOrDefeatBounty'), findsOneWidget); // No ExpansionTile needed. From eb4bbf186af7fbb1573a18645f537c29a3e16d30 Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Mon, 17 Aug 2026 10:19:11 +0200 Subject: [PATCH 7/8] fix(save-editor): title-case the English sidebar headings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Combat / movement" and "Sleep & rest" read as sentence fragments next to the single-word headings. English UI headings take title case, so the second word is capitalised. "Main stats" is carried along for the same reason — it predates this work, but leaving it lower-case would have made the sidebar mix both conventions. Only English changes. German capitalises its nouns regardless, and the other locales use sentence case for headings on purpose. Co-Authored-By: Claude Opus 5 --- apps/save-editor/lib/l10n/app_en.arb | 6 +++--- apps/save-editor/lib/l10n/app_localizations.dart | 6 +++--- apps/save-editor/lib/l10n/app_localizations_en.dart | 6 +++--- .../test/features/editor/ui/hero_stats_card_test.dart | 6 +++--- .../test/features/editor/ui/npc_attributes_panel_test.dart | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/save-editor/lib/l10n/app_en.arb b/apps/save-editor/lib/l10n/app_en.arb index cff0dff83..43bdac35a 100644 --- a/apps/save-editor/lib/l10n/app_en.arb +++ b/apps/save-editor/lib/l10n/app_en.arb @@ -837,13 +837,13 @@ "searchEntries": "Search entries", "noKnowledgeEntriesAvailableToAdd": "No knowledge entries available to add", "noEntriesMatch": "No entries match", - "heroGroupMainStats": "Main stats", - "heroGroupCombatMovement": "Combat / movement", + "heroGroupMainStats": "Main Stats", + "heroGroupCombatMovement": "Combat / Movement", "heroGroupResistances": "Resistances", "heroGroupThieving": "Thieving", "heroGroupAdvanced": "Advanced", "heroGroupDiving": "Diving", - "heroGroupSleep": "Sleep & rest", + "heroGroupSleep": "Sleep & Rest", "heroGroupIntoxication": "Intoxication", "heroEntryHeroTransform": "Position", "attributeEmpty": "{name} is empty — enter a value or restore the original before saving.", diff --git a/apps/save-editor/lib/l10n/app_localizations.dart b/apps/save-editor/lib/l10n/app_localizations.dart index 201c0b43e..cb778657e 100644 --- a/apps/save-editor/lib/l10n/app_localizations.dart +++ b/apps/save-editor/lib/l10n/app_localizations.dart @@ -2933,13 +2933,13 @@ abstract class AppLocalizations { /// No description provided for @heroGroupMainStats. /// /// In en, this message translates to: - /// **'Main stats'** + /// **'Main Stats'** String get heroGroupMainStats; /// No description provided for @heroGroupCombatMovement. /// /// In en, this message translates to: - /// **'Combat / movement'** + /// **'Combat / Movement'** String get heroGroupCombatMovement; /// No description provided for @heroGroupResistances. @@ -2969,7 +2969,7 @@ abstract class AppLocalizations { /// No description provided for @heroGroupSleep. /// /// In en, this message translates to: - /// **'Sleep & rest'** + /// **'Sleep & Rest'** String get heroGroupSleep; /// No description provided for @heroGroupIntoxication. diff --git a/apps/save-editor/lib/l10n/app_localizations_en.dart b/apps/save-editor/lib/l10n/app_localizations_en.dart index c7bc3e508..074197fbd 100644 --- a/apps/save-editor/lib/l10n/app_localizations_en.dart +++ b/apps/save-editor/lib/l10n/app_localizations_en.dart @@ -1651,10 +1651,10 @@ class AppLocalizationsEn extends AppLocalizations { String get noEntriesMatch => 'No entries match'; @override - String get heroGroupMainStats => 'Main stats'; + String get heroGroupMainStats => 'Main Stats'; @override - String get heroGroupCombatMovement => 'Combat / movement'; + String get heroGroupCombatMovement => 'Combat / Movement'; @override String get heroGroupResistances => 'Resistances'; @@ -1669,7 +1669,7 @@ class AppLocalizationsEn extends AppLocalizations { String get heroGroupDiving => 'Diving'; @override - String get heroGroupSleep => 'Sleep & rest'; + String get heroGroupSleep => 'Sleep & Rest'; @override String get heroGroupIntoxication => 'Intoxication'; diff --git a/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart b/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart index 24d6f12de..224fd27a9 100644 --- a/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart +++ b/apps/save-editor/test/features/editor/ui/hero_stats_card_test.dart @@ -144,7 +144,7 @@ void main() { // Sidebar entries present for non-empty groups (may also appear in the // detail card header, so use findsWidgets not findsOneWidget). - expect(find.text('Main stats'), findsWidgets); + expect(find.text('Main Stats'), findsWidgets); expect(find.text('Resistances'), findsWidgets); // Entries absent for empty groups. expect(find.text('Thieving'), findsNothing); @@ -415,7 +415,7 @@ void main() { expect(lastEdits, hasLength(1)); // Switch back to Main stats. - await tester.tap(find.text('Main stats')); + await tester.tap(find.text('Main Stats')); await tester.pumpAndSettle(); // Pending edit '77' must be visible again. @@ -637,7 +637,7 @@ void main() { // Switch away and back: the editor must keep its unsaved draft — its // text backs a registered pending edit that would otherwise go stale. - await tester.tap(find.text('Main stats')); + await tester.tap(find.text('Main Stats')); await tester.pumpAndSettle(); await tester.tap(find.text('Skills')); await tester.pumpAndSettle(); diff --git a/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart b/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart index e695935eb..e171e8dc3 100644 --- a/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart +++ b/apps/save-editor/test/features/editor/ui/npc_attributes_panel_test.dart @@ -172,7 +172,7 @@ void main() { // Both group entries appear in the sidebar (Health → Main stats, // Resistance_Fire → Resistances). - expect(find.text('Main stats'), findsWidgets); + expect(find.text('Main Stats'), findsWidgets); expect(find.text('Resistances'), findsWidgets); // Default selection is Main stats — Health row is shown, Resistance is not. expect(_npcBaseField('Health'), findsOneWidget); @@ -223,7 +223,7 @@ void main() { await tester.pumpAndSettle(); // Main stats is present (Health), but Thieving never surfaces for NPCs. - expect(find.text('Main stats'), findsWidgets); + expect(find.text('Main Stats'), findsWidgets); expect(find.text('Thieving'), findsNothing); // The PickPocketing row is not reachable (its only group is gone). expect(_npcBaseField('PickPocketing'), findsNothing); @@ -287,7 +287,7 @@ void main() { await tester.pumpAndSettle(); // Main stats group is present and the Status row is shown. - expect(find.text('Main stats'), findsWidgets); + expect(find.text('Main Stats'), findsWidgets); expect(find.text('Status'), findsOneWidget); expect(find.text('alive'), findsOneWidget); }); From 679afce864b83f1e0d502f5e5b08e3bcaa67e89c Mon Sep 17 00:00:00 2001 From: Daniel Hoer Date: Mon, 17 Aug 2026 10:29:54 +0200 Subject: [PATCH 8/8] fix(save-editor): give NPC rows their attribute set and actor-neutral tooltips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two gaps in the curated view for NPCs, both from the set-qualified keys introduced with the grouping work. The NPC path never passed the attribute set into the shared policy, so heroAttributeHidden and heroAttributeGroup only ever saw the bare id. A Fatigue RecoveryRatePerHourOfSleep therefore stayed visible on an NPC although it is inert, and the real Health and Mana rates landed in Advanced instead of Sleep. The panel already recovered the set from the typed path for labels; that logic now lives on NpcAttributeRow itself, where the filter can reach it too, and grouping, ranking, labels and tooltips all take it. The tooltips described what "the hero" absorbs, takes or drinks, but the same strings render on an NPC row, where they claimed the wrong subject. Ten of them now name "this character" instead, in all twelve languages — including a French one whose English original never mentioned the hero at all. Co-Authored-By: Claude Opus 5 --- .../editor/domain/npc_attributes.dart | 25 +++++- .../editor/ui/npc_attributes_panel.dart | 25 ++---- apps/save-editor/lib/l10n/app_de.arb | 2 +- apps/save-editor/lib/l10n/app_en.arb | 2 +- apps/save-editor/lib/l10n/app_es.arb | 2 +- apps/save-editor/lib/l10n/app_fr.arb | 2 +- apps/save-editor/lib/l10n/app_it.arb | 2 +- apps/save-editor/lib/l10n/app_ja.arb | 2 +- .../lib/l10n/app_localizations.dart | 2 +- .../lib/l10n/app_localizations_de.dart | 18 ++-- .../lib/l10n/app_localizations_en.dart | 22 ++--- .../lib/l10n/app_localizations_es.dart | 21 ++--- .../lib/l10n/app_localizations_fr.dart | 22 ++--- .../lib/l10n/app_localizations_it.dart | 22 ++--- .../lib/l10n/app_localizations_ja.dart | 12 +-- .../lib/l10n/app_localizations_pl.dart | 20 ++--- .../lib/l10n/app_localizations_pt.dart | 40 ++++----- .../lib/l10n/app_localizations_ru.dart | 21 ++--- .../lib/l10n/app_localizations_zh.dart | 40 ++++----- apps/save-editor/lib/l10n/app_pl.arb | 2 +- apps/save-editor/lib/l10n/app_pt.arb | 2 +- apps/save-editor/lib/l10n/app_pt_BR.arb | 2 +- apps/save-editor/lib/l10n/app_ru.arb | 2 +- apps/save-editor/lib/l10n/app_zh.arb | 2 +- apps/save-editor/lib/l10n/app_zh_Hans.arb | 2 +- .../editor/domain/npc_attributes_test.dart | 85 +++++++++++++++++++ .../test/l10n_arb_coverage_test.dart | 28 ++++++ 27 files changed, 278 insertions(+), 149 deletions(-) create mode 100644 apps/save-editor/test/features/editor/domain/npc_attributes_test.dart diff --git a/apps/save-editor/lib/features/editor/domain/npc_attributes.dart b/apps/save-editor/lib/features/editor/domain/npc_attributes.dart index b778340e2..1870f09b1 100644 --- a/apps/save-editor/lib/features/editor/domain/npc_attributes.dart +++ b/apps/save-editor/lib/features/editor/domain/npc_attributes.dart @@ -37,6 +37,23 @@ class NpcAttributeRow { /// Attribute name (e.g. `Health`). Doubles as the row label. final String key; + + /// The owning `AttributeSet_*` class, recovered from the typed path. The core + /// does not send it as its own field, but every row's path carries it — and + /// without it the shared policy cannot tell a Fatigue + /// `RecoveryRatePerHourOfSleep` (inert) from the Health and Mana ones (real). + String? get setClass { + for (final path in [basePath, currentPath]) { + final index = path.indexOf('AttributeSetsByClass'); + if (index < 0 || index + 1 >= path.length) continue; + var value = path[index + 1].trim(); + if (value.startsWith('{') && value.endsWith('}')) { + value = value.substring(1, value.length - 1); + } + if (value.isNotEmpty) return value; + } + return null; + } final double base; final double current; @@ -63,9 +80,11 @@ class NpcAttributesResult { attributes: raw .whereType() .map((m) => NpcAttributeRow.fromJson(m.cast())) - // Hide the per-weapon critical values from the curated view (same as - // the player); they stay editable in the All-data browser. - .where((row) => !heroAttributeHidden(row.key)) + // Hide what the game derives or never reads, same as for the player; + // it all stays editable in the All-data browser. The set class has to + // come along: `RecoveryRatePerHourOfSleep` is hidden on Fatigue and + // kept on Health and Mana. + .where((row) => !heroAttributeHidden(row.key, row.setClass)) .toList(growable: false), ); } diff --git a/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart b/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart index f87e3f2da..3feb33660 100644 --- a/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart +++ b/apps/save-editor/lib/features/editor/ui/npc_attributes_panel.dart @@ -183,14 +183,18 @@ class _NpcAttributesPanelState extends State { final byGroup = >{}; for (final attribute in _attributes) { byGroup - .putIfAbsent(heroAttributeGroup(attribute.key), () => []) + .putIfAbsent( + heroAttributeGroup(attribute.key, attribute.setClass), + () => [], + ) .add(attribute); } for (final rows in byGroup.values) { rows.sort((a, b) { final rank = heroAttributeRank( a.key, - ).compareTo(heroAttributeRank(b.key)); + a.setClass, + ).compareTo(heroAttributeRank(b.key, b.setClass)); return rank != 0 ? rank : a.key.compareTo(b.key); }); } @@ -436,7 +440,7 @@ class _NpcAttributesPanelState extends State { attribute: a, label: _displayLabel(a), tooltip: - widget.attributeTooltip?.call(a.key, _setClassFromPaths(a)) ?? + widget.attributeTooltip?.call(a.key, a.setClass) ?? '', editable: widget.editable, initialBaseText: _pending[_pathKey(a.basePath)], @@ -472,23 +476,10 @@ class _NpcAttributesPanelState extends State { String _displayLabel(NpcAttributeRow attribute) => widget.attributeLabel?.call( attribute.key, - _setClassFromPaths(attribute), + attribute.setClass, ) ?? heroAttributeLabel(attribute.key); - String? _setClassFromPaths(NpcAttributeRow attribute) { - for (final path in [attribute.basePath, attribute.currentPath]) { - final index = path.indexOf('AttributeSetsByClass'); - if (index < 0 || index + 1 >= path.length) continue; - var value = path[index + 1].trim(); - if (value.startsWith('{') && value.endsWith('}')) { - value = value.substring(1, value.length - 1); - } - if (value.isNotEmpty) return value; - } - return null; - } - /// The NPC Status row shown as the FIRST entry of the core ("Hauptwerte") /// group detail: `Status ` on the left and a **Wiederbeleben** /// (Revive) action on the right. The HP readout was intentionally removed — diff --git a/apps/save-editor/lib/l10n/app_de.arb b/apps/save-editor/lib/l10n/app_de.arb index caa876dd8..d09e8184c 100644 --- a/apps/save-editor/lib/l10n/app_de.arb +++ b/apps/save-editor/lib/l10n/app_de.arb @@ -577,7 +577,7 @@ "fallbackItem": "Gegenstand", "attributeSkillPointsFallback": "Lernpunkte (LP)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Standfestigkeit} MaxSuperArmor{Max. Standfestigkeit} DamageMultiplier{Erlittener Schaden} SpeedModifier{Bewegungstempo} Oxygen{Atemluft} MaxOxygen{Max. Atemluft} OxygenDepletionRate{Luftverbrauch pro Sekunde} OxygenRecoveryRate{Lufterholung pro Sekunde} CriticalLevelPercent{Warnschwelle Atemluft} SleepTime{Erholsame Stunden übrig} MaxSleepTime{Max. erholsame Stunden} SleepTimeRecoveryAmount{Auffüllmenge} SleepTimeRecoveryPeriod{Auffüllintervall} MaxRestTime{Max. Zeit im Bett} Health_RecoveryRatePerHourOfSleep{Leben je Schlafstunde} Mana_RecoveryRatePerHourOfSleep{Mana je Schlafstunde} Alcohol{Alkoholpegel} MaxAlcohol{Max. Alkoholpegel} AlcoholDepletionRate{Ausnüchterungstempo} Swampweed{Sumpfkrautpegel} MaxSwampweed{Max. Sumpfkrautpegel} SwampweedDepletionRate{Abbautempo} XPExecutedBounty{EP fürs Töten am Boden} XPKillOrDefeatBounty{EP fürs Besiegen} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Wie viel der Held einsteckt, bevor ihn ein Treffer aus dem Tritt bringt.} MaxSuperArmor{Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.} DamageMultiplier{Faktor auf den Schaden, den der Held nimmt — 1 ist normal, höher tut mehr weh.} SpeedModifier{Faktor darauf, wie schnell sich der Held bewegt — 1 ist normal.} Oxygen{Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt der Held.} MaxOxygen{Wie viele Sekunden der Held unter Wasser bleiben kann; das Talent Tauchen erhöht das.} OxygenDepletionRate{Wie viel Luft unter Wasser je Sekunde verbraucht wird.} OxygenRecoveryRate{Wie viel Luft nach dem Auftauchen je Sekunde zurückkommt.} CriticalLevelPercent{Anteil der Restluft, ab dem das Spiel vor dem Ertrinken warnt.} SleepTime{Schlafstunden, die noch etwas bringen; darüber hinaus gibt es keine Regeneration.} MaxSleepTime{Das größte Guthaben an erholsamen Stunden.} SleepTimeRecoveryAmount{Erholsame Stunden, die bei jeder Auffüllung zurückkommen.} SleepTimeRecoveryPeriod{Wie lange es dauert, bis das Guthaben wieder aufgefüllt wird.} MaxRestTime{Die längste Zeit, die am Stück im Bett verbracht werden kann.} Health_RecoveryRatePerHourOfSleep{Anteil der maximalen Lebenspunkte, der je geschlafener Stunde zurückkommt.} Mana_RecoveryRatePerHourOfSleep{Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.} Alcohol{Wie betrunken der Held ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.} MaxAlcohol{Der höchste Alkoholpegel, den der Held erreichen kann.} AlcoholDepletionRate{Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.} Swampweed{Wie berauscht der Held ist; die höheren Stufen verschieben seine Werte.} MaxSwampweed{Der höchste Sumpfkrautpegel, den der Held erreichen kann.} SwampweedDepletionRate{Wie schnell der Sumpfkrautrausch nachlässt.} XPExecutedBounty{Erfahrung dafür, diese Figur zu töten, während sie bereits besiegt am Boden liegt.} XPKillOrDefeatBounty{Erfahrung dafür, diese Figur niederzustrecken, ob sie dabei stirbt oder nur bewusstlos liegen bleibt.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Wie viel diese Figur einsteckt, bevor sie ein Treffer aus dem Tritt bringt.} MaxSuperArmor{Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.} DamageMultiplier{Faktor auf den Schaden, den diese Figur nimmt — 1 ist normal, höher tut mehr weh.} SpeedModifier{Faktor darauf, wie schnell sich diese Figur bewegt — 1 ist normal.} Oxygen{Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt diese Figur.} MaxOxygen{Wie viele Sekunden diese Figur unter Wasser bleiben kann; das Talent Tauchen erhöht das.} OxygenDepletionRate{Wie viel Luft unter Wasser je Sekunde verbraucht wird.} OxygenRecoveryRate{Wie viel Luft nach dem Auftauchen je Sekunde zurückkommt.} CriticalLevelPercent{Anteil der Restluft, ab dem das Spiel vor dem Ertrinken warnt.} SleepTime{Schlafstunden, die noch etwas bringen; darüber hinaus gibt es keine Regeneration.} MaxSleepTime{Das größte Guthaben an erholsamen Stunden.} SleepTimeRecoveryAmount{Erholsame Stunden, die bei jeder Auffüllung zurückkommen.} SleepTimeRecoveryPeriod{Wie lange es dauert, bis das Guthaben wieder aufgefüllt wird.} MaxRestTime{Die längste Zeit, die am Stück im Bett verbracht werden kann.} Health_RecoveryRatePerHourOfSleep{Anteil der maximalen Lebenspunkte, der je geschlafener Stunde zurückkommt.} Mana_RecoveryRatePerHourOfSleep{Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.} Alcohol{Wie betrunken diese Figur ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.} MaxAlcohol{Der höchste Alkoholpegel, den diese Figur erreichen kann.} AlcoholDepletionRate{Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.} Swampweed{Wie berauscht diese Figur ist; die höheren Stufen verschieben ihre Werte.} MaxSwampweed{Der höchste Sumpfkrautpegel, den diese Figur erreichen kann.} SwampweedDepletionRate{Wie schnell der Sumpfkrautrausch nachlässt.} XPExecutedBounty{Erfahrung dafür, diese Figur zu töten, während sie bereits besiegt am Boden liegt.} XPKillOrDefeatBounty{Erfahrung dafür, diese Figur niederzustrecken, ob sie dabei stirbt oder nur bewusstlos liegen bleibt.} other{?}}", "knowledgeTypeVoiceLine": "Sprachzeile", "knowledgeTypeOther": "Sonstiges", "armorUpgradeUpper": "Oben", diff --git a/apps/save-editor/lib/l10n/app_en.arb b/apps/save-editor/lib/l10n/app_en.arb index 43bdac35a..98732f077 100644 --- a/apps/save-editor/lib/l10n/app_en.arb +++ b/apps/save-editor/lib/l10n/app_en.arb @@ -1004,7 +1004,7 @@ "attributeSkillPointsFallback": "Skill points (LP)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Poise} MaxSuperArmor{Maximum poise} DamageMultiplier{Damage taken} SpeedModifier{Movement speed} Oxygen{Breath} MaxOxygen{Maximum breath} OxygenDepletionRate{Breath used per second} OxygenRecoveryRate{Breath regained per second} CriticalLevelPercent{Low-breath warning} SleepTime{Restful hours left} MaxSleepTime{Maximum restful hours} SleepTimeRecoveryAmount{Restful hours regained} SleepTimeRecoveryPeriod{Refill interval} MaxRestTime{Maximum time in bed} Health_RecoveryRatePerHourOfSleep{Health per hour of sleep} Mana_RecoveryRatePerHourOfSleep{Mana per hour of sleep} Alcohol{Alcohol level} MaxAlcohol{Maximum alcohol} AlcoholDepletionRate{Sobering speed} Swampweed{Swampweed level} MaxSwampweed{Maximum swampweed} SwampweedDepletionRate{Wear-off speed} XPExecutedBounty{XP for finishing off} XPKillOrDefeatBounty{XP for defeating} other{{fallback}}}", "@attributeManualFallbackLabel": {"placeholders": {"attributeId": {"type": "String"}, "fallback": {"type": "String"}}}, - "attributeManualTooltip": "{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience for killing this character while it already lies defeated on the ground.} XPKillOrDefeatBounty{Experience for bringing this character down, whether it dies or is only beaten unconscious.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{How much punishment this character absorbs before a hit staggers them.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage this character takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast this character moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero this character drowns.} MaxOxygen{How many seconds this character can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours this character can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk this character is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level this character can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned this character is; the higher tiers shift their attributes around.} MaxSwampweed{The highest swampweed level this character can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience for killing this character while it already lies defeated on the ground.} XPKillOrDefeatBounty{Experience for bringing this character down, whether it dies or is only beaten unconscious.} other{?}}", "@attributeManualTooltip": {"placeholders": {"attributeId": {"type": "String"}}}, "knowledgeTypeVoiceLine": "Voice line", "knowledgeTypeOther": "Other", diff --git a/apps/save-editor/lib/l10n/app_es.arb b/apps/save-editor/lib/l10n/app_es.arb index 5a07bb5e9..6476851e8 100644 --- a/apps/save-editor/lib/l10n/app_es.arb +++ b/apps/save-editor/lib/l10n/app_es.arb @@ -577,7 +577,7 @@ "fallbackItem": "Objeto", "attributeSkillPointsFallback": "Puntos de aprendizaje (PA)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Aplomo} MaxSuperArmor{Aplomo máx.} DamageMultiplier{Daño recibido} SpeedModifier{Velocidad de movimiento} Oxygen{Aire} MaxOxygen{Aire máx.} OxygenDepletionRate{Aire gastado por segundo} OxygenRecoveryRate{Aire recuperado por seg.} CriticalLevelPercent{Aviso de falta de aire} SleepTime{Horas reparadoras rest.} MaxSleepTime{Máx. horas reparadoras} SleepTimeRecoveryAmount{Horas que se recuperan} SleepTimeRecoveryPeriod{Intervalo de recarga} MaxRestTime{Máx. tiempo en la cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sueño} Mana_RecoveryRatePerHourOfSleep{Maná por hora de sueño} Alcohol{Nivel de alcohol} MaxAlcohol{Nivel de alcohol máx.} AlcoholDepletionRate{Velocidad para despejarse} Swampweed{Nivel de hierba de pantano} MaxSwampweed{Máx. hierba de pantano} SwampweedDepletionRate{Velocidad del bajón} XPExecutedBounty{EXP por rematar en el suelo} XPKillOrDefeatBounty{EXP por derrotar} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Cuánto castigo aguanta el héroe antes de que un golpe lo haga tambalearse.} MaxSuperArmor{La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.} DamageMultiplier{Factor que se aplica al daño que recibe el héroe: 1 es lo normal, y cuanto más alto, más duele.} SpeedModifier{Factor sobre lo rápido que se mueve el héroe: 1 es lo normal.} Oxygen{Segundos de aire que quedan bajo el agua; al llegar a cero el héroe se ahoga.} MaxOxygen{Cuántos segundos puede aguantar el héroe bajo el agua; la habilidad Buceo lo aumenta.} OxygenDepletionRate{Aire que se consume cada segundo bajo el agua.} OxygenRecoveryRate{Aire que se recupera cada segundo al salir a la superficie.} CriticalLevelPercent{Porcentaje de aire restante con el que el juego avisa del peligro de ahogarse.} SleepTime{Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.} MaxSleepTime{El mayor número de horas reparadoras que puede acumular el héroe.} SleepTimeRecoveryAmount{Horas reparadoras que se devuelven cada vez que se rellena la reserva.} SleepTimeRecoveryPeriod{Cuánto tarda la reserva de horas reparadoras en volver a llenarse.} MaxRestTime{El tiempo más largo que el juego permite pasar en la cama de una sola vez.} Health_RecoveryRatePerHourOfSleep{Porcentaje de la vida máxima que se recupera por cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Porcentaje del maná máximo que se recupera por cada hora dormida.} Alcohol{Lo borracho que está el héroe; los niveles altos cambian destreza y maná por fuerza.} MaxAlcohol{El nivel de alcohol más alto que puede alcanzar el héroe.} AlcoholDepletionRate{Con qué rapidez baja el nivel de alcohol hacia la sobriedad.} Swampweed{Lo colocado que está el héroe; los niveles altos le mueven los atributos.} MaxSwampweed{El nivel de hierba de pantano más alto que puede alcanzar el héroe.} SwampweedDepletionRate{Con qué rapidez se pasa el efecto de la hierba de pantano.} XPExecutedBounty{Experiencia por matar a este personaje cuando ya yace derrotado en el suelo.} XPKillOrDefeatBounty{Experiencia por derribar a este personaje, tanto si muere como si solo queda inconsciente.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Cuánto castigo aguanta este personaje antes de que un golpe lo haga tambalearse.} MaxSuperArmor{La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.} DamageMultiplier{Factor que se aplica al daño que recibe este personaje: 1 es lo normal, y cuanto más alto, más duele.} SpeedModifier{Factor sobre lo rápido que se mueve este personaje: 1 es lo normal.} Oxygen{Segundos de aire que quedan bajo el agua; al llegar a cero este personaje se ahoga.} MaxOxygen{Cuántos segundos puede aguantar este personaje bajo el agua; la habilidad Buceo lo aumenta.} OxygenDepletionRate{Aire que se consume cada segundo bajo el agua.} OxygenRecoveryRate{Aire que se recupera cada segundo al salir a la superficie.} CriticalLevelPercent{Porcentaje de aire restante con el que el juego avisa del peligro de ahogarse.} SleepTime{Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.} MaxSleepTime{El mayor número de horas reparadoras que puede acumular este personaje.} SleepTimeRecoveryAmount{Horas reparadoras que se devuelven cada vez que se rellena la reserva.} SleepTimeRecoveryPeriod{Cuánto tarda la reserva de horas reparadoras en volver a llenarse.} MaxRestTime{El tiempo más largo que el juego permite pasar en la cama de una sola vez.} Health_RecoveryRatePerHourOfSleep{Porcentaje de la vida máxima que se recupera por cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Porcentaje del maná máximo que se recupera por cada hora dormida.} Alcohol{Lo borracho que está este personaje; los niveles altos cambian destreza y maná por fuerza.} MaxAlcohol{El nivel de alcohol más alto que puede alcanzar este personaje.} AlcoholDepletionRate{Con qué rapidez baja el nivel de alcohol hacia la sobriedad.} Swampweed{Lo colocado que está este personaje; los niveles altos le mueven los atributos.} MaxSwampweed{El nivel de hierba de pantano más alto que puede alcanzar este personaje.} SwampweedDepletionRate{Con qué rapidez se pasa el efecto de la hierba de pantano.} XPExecutedBounty{Experiencia por matar a este personaje cuando ya yace derrotado en el suelo.} XPKillOrDefeatBounty{Experiencia por derribar a este personaje, tanto si muere como si solo queda inconsciente.} other{?}}", "knowledgeTypeVoiceLine": "Línea de voz", "knowledgeTypeOther": "Otro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_fr.arb b/apps/save-editor/lib/l10n/app_fr.arb index 8ab713aa9..ef63f1730 100644 --- a/apps/save-editor/lib/l10n/app_fr.arb +++ b/apps/save-editor/lib/l10n/app_fr.arb @@ -577,7 +577,7 @@ "fallbackItem": "Objet", "attributeSkillPointsFallback": "Points d’apprentissage (PA)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Stabilité} MaxSuperArmor{Stabilité max.} DamageMultiplier{Dégâts subis} SpeedModifier{Vitesse de déplacement} Oxygen{Souffle} MaxOxygen{Souffle max.} OxygenDepletionRate{Air consommé par seconde} OxygenRecoveryRate{Air récupéré par seconde} CriticalLevelPercent{Seuil d'alerte du souffle} SleepTime{Heures de repos restantes} MaxSleepTime{Heures de repos max.} SleepTimeRecoveryAmount{Heures de repos rendues} SleepTimeRecoveryPeriod{Intervalle de recharge} MaxRestTime{Temps max. au lit} Health_RecoveryRatePerHourOfSleep{Vie par heure de sommeil} Mana_RecoveryRatePerHourOfSleep{Mana par heure de sommeil} Alcohol{Taux d'alcool} MaxAlcohol{Taux d'alcool max.} AlcoholDepletionRate{Vitesse de dégrisement} Swampweed{Niveau d'herbe des marais} MaxSwampweed{Herbe des marais max.} SwampweedDepletionRate{Vitesse de dissipation} XPExecutedBounty{XP pour le coup de grâce} XPKillOrDefeatBounty{XP pour vaincre} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Ce que le héros encaisse avant qu'un coup ne le déséquilibre.} MaxSuperArmor{La réserve complète de stabilité ; elle augmente avec le niveau et avec l'armure portée.} DamageMultiplier{Facteur appliqué aux dégâts que subit le héros — 1 est la normale, plus haut fait plus mal.} SpeedModifier{Facteur appliqué à la vitesse de déplacement du héros — 1 est la normale.} Oxygen{Secondes d'air qu'il reste sous l'eau ; à zéro, le héros se noie.} MaxOxygen{Combien de secondes le héros peut rester sous l'eau ; le talent Plongée augmente cette durée.} OxygenDepletionRate{Air consommé chaque seconde sous l'eau.} OxygenRecoveryRate{Air qui revient chaque seconde une fois de retour à la surface.} CriticalLevelPercent{Part d'air restant à partir de laquelle le jeu prévient du risque de noyade.} SleepTime{Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n'accorde plus de récupération.} MaxSleepTime{La plus grande réserve d'heures de repos que le héros peut avoir.} SleepTimeRecoveryAmount{Heures de repos qui reviennent à chaque recharge.} SleepTimeRecoveryPeriod{Le temps qu'il faut pour que la réserve d'heures de repos se remplisse à nouveau.} MaxRestTime{La plus longue durée que le héros peut passer au lit d'une traite.} Health_RecoveryRatePerHourOfSleep{Part des points de vie maximum rendue pour chaque heure de sommeil.} Mana_RecoveryRatePerHourOfSleep{Part du mana maximum rendue pour chaque heure de sommeil.} Alcohol{À quel point le héros est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.} MaxAlcohol{Le taux d'alcool le plus élevé que le héros peut atteindre.} AlcoholDepletionRate{À quelle vitesse le taux d'alcool redescend vers la sobriété.} Swampweed{À quel point le héros plane ; aux paliers élevés, ses caractéristiques sont chamboulées.} MaxSwampweed{Le niveau d'herbe des marais le plus élevé que le héros peut atteindre.} SwampweedDepletionRate{À quelle vitesse l'effet de l'herbe des marais se dissipe.} XPExecutedBounty{Expérience obtenue en achevant ce personnage alors qu'il est déjà vaincu, à terre.} XPKillOrDefeatBounty{Expérience obtenue en mettant ce personnage à terre, qu'il en meure ou qu'il reste seulement assommé.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Ce que ce personnage encaisse avant qu'un coup ne le déséquilibre.} MaxSuperArmor{La réserve complète de stabilité ; elle augmente avec le niveau et avec l'armure portée.} DamageMultiplier{Facteur appliqué aux dégâts que subit ce personnage — 1 est la normale, plus haut fait plus mal.} SpeedModifier{Facteur appliqué à la vitesse de déplacement de ce personnage — 1 est la normale.} Oxygen{Secondes d'air qu'il reste sous l'eau ; à zéro, ce personnage se noie.} MaxOxygen{Combien de secondes ce personnage peut rester sous l'eau ; le talent Plongée augmente cette durée.} OxygenDepletionRate{Air consommé chaque seconde sous l'eau.} OxygenRecoveryRate{Air qui revient chaque seconde une fois de retour à la surface.} CriticalLevelPercent{Part d'air restant à partir de laquelle le jeu prévient du risque de noyade.} SleepTime{Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n'accorde plus de récupération.} MaxSleepTime{La plus grande réserve d'heures de repos que ce personnage peut avoir.} SleepTimeRecoveryAmount{Heures de repos qui reviennent à chaque recharge.} SleepTimeRecoveryPeriod{Le temps qu'il faut pour que la réserve d'heures de repos se remplisse à nouveau.} MaxRestTime{La plus longue durée que le jeu autorise à passer au lit d'une traite.} Health_RecoveryRatePerHourOfSleep{Part des points de vie maximum rendue pour chaque heure de sommeil.} Mana_RecoveryRatePerHourOfSleep{Part du mana maximum rendue pour chaque heure de sommeil.} Alcohol{À quel point ce personnage est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.} MaxAlcohol{Le taux d'alcool le plus élevé que ce personnage peut atteindre.} AlcoholDepletionRate{À quelle vitesse le taux d'alcool redescend vers la sobriété.} Swampweed{À quel point ce personnage plane ; aux paliers élevés, ses caractéristiques sont chamboulées.} MaxSwampweed{Le niveau d'herbe des marais le plus élevé que ce personnage peut atteindre.} SwampweedDepletionRate{À quelle vitesse l'effet de l'herbe des marais se dissipe.} XPExecutedBounty{Expérience obtenue en achevant ce personnage alors qu'il est déjà vaincu, à terre.} XPKillOrDefeatBounty{Expérience obtenue en mettant ce personnage à terre, qu'il en meure ou qu'il reste seulement assommé.} other{?}}", "knowledgeTypeVoiceLine": "Réplique vocale", "knowledgeTypeOther": "Autre", "armorUpgradeUpper": "Haut", diff --git a/apps/save-editor/lib/l10n/app_it.arb b/apps/save-editor/lib/l10n/app_it.arb index 7fc886d66..234974270 100644 --- a/apps/save-editor/lib/l10n/app_it.arb +++ b/apps/save-editor/lib/l10n/app_it.arb @@ -577,7 +577,7 @@ "fallbackItem": "Oggetto", "attributeSkillPointsFallback": "Punti apprendimento (PA)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Equilibrio} MaxSuperArmor{Equilibrio max.} DamageMultiplier{Danno subito} SpeedModifier{Velocità di movimento} Oxygen{Fiato} MaxOxygen{Fiato max.} OxygenDepletionRate{Fiato consumato al secondo} OxygenRecoveryRate{Fiato recuperato al secondo} CriticalLevelPercent{Avviso di fiato basso} SleepTime{Ore di riposo rimaste} MaxSleepTime{Ore di riposo max.} SleepTimeRecoveryAmount{Ore di riposo recuperate} SleepTimeRecoveryPeriod{Intervallo di ricarica} MaxRestTime{Tempo max. a letto} Health_RecoveryRatePerHourOfSleep{Vita per ora di sonno} Mana_RecoveryRatePerHourOfSleep{Mana per ora di sonno} Alcohol{Livello di alcol} MaxAlcohol{Livello di alcol max.} AlcoholDepletionRate{Smaltimento dell'alcol} Swampweed{Livello di erba palustre} MaxSwampweed{Erba palustre max.} SwampweedDepletionRate{Smaltimento dell'erba} XPExecutedBounty{PE per il colpo di grazia} XPKillOrDefeatBounty{PE per sconfiggere} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto incassa l'eroe prima che un colpo lo faccia barcollare.} MaxSuperArmor{La riserva completa di equilibrio; cresce con il livello e con l'armatura indossata.} DamageMultiplier{Fattore applicato al danno che l'eroe subisce: 1 è normale, valori più alti fanno più male.} SpeedModifier{Fattore sulla velocità con cui l'eroe si muove: 1 è normale.} Oxygen{Secondi d'aria rimasti sott'acqua; a zero l'eroe annega.} MaxOxygen{Per quanti secondi l'eroe può restare sott'acqua; l'abilità Immersione lo aumenta.} OxygenDepletionRate{Aria consumata ogni secondo sott'acqua.} OxygenRecoveryRate{Aria che torna ogni secondo dopo essere riemersi.} CriticalLevelPercent{Percentuale d'aria residua alla quale il gioco avverte del pericolo di annegamento.} SleepTime{Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.} MaxSleepTime{La riserva massima di ore di riposo che l'eroe può accumulare.} SleepTimeRecoveryAmount{Ore di riposo che tornano a ogni ricarica.} SleepTimeRecoveryPeriod{Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.} MaxRestTime{Il tempo più lungo che si può passare a letto in una volta sola.} Health_RecoveryRatePerHourOfSleep{Quota della vita massima che torna per ogni ora dormita.} Mana_RecoveryRatePerHourOfSleep{Quota del mana massimo che torna per ogni ora dormita.} Alcohol{Quanto è ubriaco l'eroe; ai livelli più alti scambia destrezza e mana con forza.} MaxAlcohol{Il livello di alcol più alto che l'eroe può raggiungere.} AlcoholDepletionRate{Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.} Swampweed{Quanto è sballato l'eroe; ai livelli più alti i suoi valori si spostano.} MaxSwampweed{Il livello di erba palustre più alto che l'eroe può raggiungere.} SwampweedDepletionRate{Quanto in fretta svanisce lo sballo da erba palustre.} XPExecutedBounty{Esperienza per uccidere questo personaggio mentre giace già sconfitto a terra.} XPKillOrDefeatBounty{Esperienza per abbattere questo personaggio, che muoia o resti soltanto privo di sensi.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto incassa questo personaggio prima che un colpo lo faccia barcollare.} MaxSuperArmor{La riserva completa di equilibrio; cresce con il livello e con l'armatura indossata.} DamageMultiplier{Fattore applicato al danno che questo personaggio subisce: 1 è normale, valori più alti fanno più male.} SpeedModifier{Fattore sulla velocità con cui questo personaggio si muove: 1 è normale.} Oxygen{Secondi d'aria rimasti sott'acqua; a zero questo personaggio annega.} MaxOxygen{Per quanti secondi questo personaggio può restare sott'acqua; l'abilità Immersione lo aumenta.} OxygenDepletionRate{Aria consumata ogni secondo sott'acqua.} OxygenRecoveryRate{Aria che torna ogni secondo dopo essere riemersi.} CriticalLevelPercent{Percentuale d'aria residua alla quale il gioco avverte del pericolo di annegamento.} SleepTime{Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.} MaxSleepTime{La riserva massima di ore di riposo che questo personaggio può accumulare.} SleepTimeRecoveryAmount{Ore di riposo che tornano a ogni ricarica.} SleepTimeRecoveryPeriod{Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.} MaxRestTime{Il tempo più lungo che si può passare a letto in una volta sola.} Health_RecoveryRatePerHourOfSleep{Quota della vita massima che torna per ogni ora dormita.} Mana_RecoveryRatePerHourOfSleep{Quota del mana massimo che torna per ogni ora dormita.} Alcohol{Quanto è ubriaco questo personaggio; ai livelli più alti scambia destrezza e mana con forza.} MaxAlcohol{Il livello di alcol più alto che questo personaggio può raggiungere.} AlcoholDepletionRate{Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.} Swampweed{Quanto è sballato questo personaggio; ai livelli più alti i suoi valori si spostano.} MaxSwampweed{Il livello di erba palustre più alto che questo personaggio può raggiungere.} SwampweedDepletionRate{Quanto in fretta svanisce lo sballo da erba palustre.} XPExecutedBounty{Esperienza per uccidere questo personaggio mentre giace già sconfitto a terra.} XPKillOrDefeatBounty{Esperienza per abbattere questo personaggio, che muoia o resti soltanto privo di sensi.} other{?}}", "knowledgeTypeVoiceLine": "Battuta vocale", "knowledgeTypeOther": "Altro", "armorUpgradeUpper": "Superiore", diff --git a/apps/save-editor/lib/l10n/app_ja.arb b/apps/save-editor/lib/l10n/app_ja.arb index 34e3546d3..d81acb3a8 100644 --- a/apps/save-editor/lib/l10n/app_ja.arb +++ b/apps/save-editor/lib/l10n/app_ja.arb @@ -577,7 +577,7 @@ "fallbackItem": "アイテム", "attributeSkillPointsFallback": "スキルポイント(LP)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{強靭度} MaxSuperArmor{最大強靭度} DamageMultiplier{被ダメージ倍率} SpeedModifier{移動速度} Oxygen{息} MaxOxygen{息の最大値} OxygenDepletionRate{息の消費(毎秒)} OxygenRecoveryRate{息の回復(毎秒)} CriticalLevelPercent{息切れの警告} SleepTime{残りの快眠時間} MaxSleepTime{最大の快眠時間} SleepTimeRecoveryAmount{快眠時間の回復量} SleepTimeRecoveryPeriod{補充の間隔} MaxRestTime{ベッドにいられる最大時間} Health_RecoveryRatePerHourOfSleep{睡眠1時間あたりの体力} Mana_RecoveryRatePerHourOfSleep{睡眠1時間あたりのマナ} Alcohol{酔いの度合い} MaxAlcohol{酔いの最大値} AlcoholDepletionRate{酔いが覚める速さ} Swampweed{沼地草の酔い} MaxSwampweed{沼地草の酔いの最大値} SwampweedDepletionRate{酔いが抜ける速さ} XPExecutedBounty{とどめで得る経験値} XPKillOrDefeatBounty{撃破で得る経験値} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{一撃で怯まされるまでに、ヒーローがどれだけ攻撃に耐えられるか。} MaxSuperArmor{強靭度の総量で、レベルと身に着けた鎧に応じて増える。} DamageMultiplier{ヒーローが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。} SpeedModifier{ヒーローの移動の速さにかかる倍率で、1が標準。} Oxygen{水中に残っている息の秒数で、ゼロになると溺れる。} MaxOxygen{水中にいられる秒数で、潜水スキルを上げると伸びる。} OxygenDepletionRate{水中で1秒ごとに減っていく息の量。} OxygenRecoveryRate{水面に上がってから1秒ごとに戻る息の量。} CriticalLevelPercent{残りの息がこの割合まで減ると、溺れる危険を知らせる。} SleepTime{まだ回復につながる睡眠時間で、これを超えて眠っても回復はない。} MaxSleepTime{ためておける快眠時間の上限。} SleepTimeRecoveryAmount{補充のたびに戻ってくる快眠時間。} SleepTimeRecoveryPeriod{快眠時間が次に補充されるまでにかかる時間。} MaxRestTime{一度に続けてベッドで過ごせる最長の時間。} Health_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大体力の割合。} Mana_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大マナの割合。} Alcohol{どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。} MaxAlcohol{ヒーローが到達できる酔いの度合いの上限。} AlcoholDepletionRate{酔いがどれだけ早く覚めていくか。} Swampweed{どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。} MaxSwampweed{ヒーローが到達できる沼地草の酔いの上限。} SwampweedDepletionRate{沼地草の酔いがどれだけ早く抜けるか。} XPExecutedBounty{すでに倒れて動けないこのキャラクターに、とどめを刺して得られる経験値。} XPKillOrDefeatBounty{このキャラクターを打ち倒したときに得られる経験値で、そのまま死んでも気絶して倒れただけでも入る。} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{一撃で怯まされるまでに、このキャラクターがどれだけ攻撃に耐えられるか。} MaxSuperArmor{強靭度の総量で、レベルと身に着けた鎧に応じて増える。} DamageMultiplier{このキャラクターが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。} SpeedModifier{このキャラクターの移動の速さにかかる倍率で、1が標準。} Oxygen{水中に残っている息の秒数で、ゼロになると溺れる。} MaxOxygen{水中にいられる秒数で、潜水スキルを上げると伸びる。} OxygenDepletionRate{水中で1秒ごとに減っていく息の量。} OxygenRecoveryRate{水面に上がってから1秒ごとに戻る息の量。} CriticalLevelPercent{残りの息がこの割合まで減ると、溺れる危険を知らせる。} SleepTime{まだ回復につながる睡眠時間で、これを超えて眠っても回復はない。} MaxSleepTime{ためておける快眠時間の上限。} SleepTimeRecoveryAmount{補充のたびに戻ってくる快眠時間。} SleepTimeRecoveryPeriod{快眠時間が次に補充されるまでにかかる時間。} MaxRestTime{一度に続けてベッドで過ごせる最長の時間。} Health_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大体力の割合。} Mana_RecoveryRatePerHourOfSleep{1時間眠るごとに戻る最大マナの割合。} Alcohol{どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。} MaxAlcohol{このキャラクターが到達できる酔いの度合いの上限。} AlcoholDepletionRate{酔いがどれだけ早く覚めていくか。} Swampweed{どれだけ沼地草に酔っているかで、段階が上がるとこのキャラクターの能力値が入れ替わる。} MaxSwampweed{このキャラクターが到達できる沼地草の酔いの上限。} SwampweedDepletionRate{沼地草の酔いがどれだけ早く抜けるか。} XPExecutedBounty{すでに倒れて動けないこのキャラクターに、とどめを刺して得られる経験値。} XPKillOrDefeatBounty{このキャラクターを打ち倒したときに得られる経験値で、そのまま死んでも気絶して倒れただけでも入る。} other{?}}", "knowledgeTypeVoiceLine": "ボイスライン", "knowledgeTypeOther": "その他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/l10n/app_localizations.dart b/apps/save-editor/lib/l10n/app_localizations.dart index cb778657e..3e3c1c164 100644 --- a/apps/save-editor/lib/l10n/app_localizations.dart +++ b/apps/save-editor/lib/l10n/app_localizations.dart @@ -3503,7 +3503,7 @@ abstract class AppLocalizations { /// No description provided for @attributeManualTooltip. /// /// In en, this message translates to: - /// **'{attributeId, select, SuperArmor{How much punishment the hero absorbs before a hit staggers him.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage the hero takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast the hero moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero the hero drowns.} MaxOxygen{How many seconds the hero can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours the hero can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk the hero is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level the hero can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned the hero is; the higher tiers shift his attributes around.} MaxSwampweed{The highest swampweed level the hero can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience for killing this character while it already lies defeated on the ground.} XPKillOrDefeatBounty{Experience for bringing this character down, whether it dies or is only beaten unconscious.} other{?}}'** + /// **'{attributeId, select, SuperArmor{How much punishment this character absorbs before a hit staggers them.} MaxSuperArmor{The full poise pool; it grows with character level and with worn armour.} DamageMultiplier{Factor applied to the damage this character takes — 1 is normal, higher hurts more.} SpeedModifier{Factor on how fast this character moves — 1 is normal.} Oxygen{Seconds of air left under water; at zero this character drowns.} MaxOxygen{How many seconds this character can stay under water; the Diving skill raises it.} OxygenDepletionRate{Air used up each second while submerged.} OxygenRecoveryRate{Air that comes back each second after surfacing.} CriticalLevelPercent{Share of remaining air at which the game warns of drowning.} SleepTime{Hours of sleep that still restore something; beyond them the game grants no resting bonus.} MaxSleepTime{The largest budget of restful hours this character can hold.} SleepTimeRecoveryAmount{Restful hours added back each time the budget refills.} SleepTimeRecoveryPeriod{How long it takes before the budget of restful hours refills again.} MaxRestTime{The longest single stay in bed the game allows.} Health_RecoveryRatePerHourOfSleep{Share of maximum health restored for every hour slept.} Mana_RecoveryRatePerHourOfSleep{Share of maximum mana restored for every hour slept.} Alcohol{How drunk this character is; the higher tiers trade dexterity and mana for strength.} MaxAlcohol{The highest alcohol level this character can reach.} AlcoholDepletionRate{How quickly the alcohol level falls back towards sober.} Swampweed{How stoned this character is; the higher tiers shift their attributes around.} MaxSwampweed{The highest swampweed level this character can reach.} SwampweedDepletionRate{How quickly the swampweed high wears off.} XPExecutedBounty{Experience for killing this character while it already lies defeated on the ground.} XPKillOrDefeatBounty{Experience for bringing this character down, whether it dies or is only beaten unconscious.} other{?}}'** String attributeManualTooltip(String attributeId); /// No description provided for @knowledgeTypeVoiceLine. diff --git a/apps/save-editor/lib/l10n/app_localizations_de.dart b/apps/save-editor/lib/l10n/app_localizations_de.dart index 1e8a6adee..8959981a9 100644 --- a/apps/save-editor/lib/l10n/app_localizations_de.dart +++ b/apps/save-editor/lib/l10n/app_localizations_de.dart @@ -2004,17 +2004,17 @@ class AppLocalizationsDe extends AppLocalizations { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'Wie viel der Held einsteckt, bevor ihn ein Treffer aus dem Tritt bringt.', + 'Wie viel diese Figur einsteckt, bevor sie ein Treffer aus dem Tritt bringt.', 'MaxSuperArmor': 'Der volle Vorrat; er wächst mit der Stufe und mit der getragenen Rüstung.', 'DamageMultiplier': - 'Faktor auf den Schaden, den der Held nimmt — 1 ist normal, höher tut mehr weh.', + 'Faktor auf den Schaden, den diese Figur nimmt — 1 ist normal, höher tut mehr weh.', 'SpeedModifier': - 'Faktor darauf, wie schnell sich der Held bewegt — 1 ist normal.', + 'Faktor darauf, wie schnell sich diese Figur bewegt — 1 ist normal.', 'Oxygen': - 'Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt der Held.', + 'Verbleibende Sekunden Luft unter Wasser; bei null ertrinkt diese Figur.', 'MaxOxygen': - 'Wie viele Sekunden der Held unter Wasser bleiben kann; das Talent Tauchen erhöht das.', + 'Wie viele Sekunden diese Figur unter Wasser bleiben kann; das Talent Tauchen erhöht das.', 'OxygenDepletionRate': 'Wie viel Luft unter Wasser je Sekunde verbraucht wird.', 'OxygenRecoveryRate': @@ -2035,14 +2035,14 @@ class AppLocalizationsDe extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Anteil des maximalen Manas, der je geschlafener Stunde zurückkommt.', 'Alcohol': - 'Wie betrunken der Held ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.', - 'MaxAlcohol': 'Der höchste Alkoholpegel, den der Held erreichen kann.', + 'Wie betrunken diese Figur ist; die höheren Stufen tauschen Geschicklichkeit und Mana gegen Stärke.', + 'MaxAlcohol': 'Der höchste Alkoholpegel, den diese Figur erreichen kann.', 'AlcoholDepletionRate': 'Wie schnell der Alkoholpegel wieder Richtung nüchtern sinkt.', 'Swampweed': - 'Wie berauscht der Held ist; die höheren Stufen verschieben seine Werte.', + 'Wie berauscht diese Figur ist; die höheren Stufen verschieben ihre Werte.', 'MaxSwampweed': - 'Der höchste Sumpfkrautpegel, den der Held erreichen kann.', + 'Der höchste Sumpfkrautpegel, den diese Figur erreichen kann.', 'SwampweedDepletionRate': 'Wie schnell der Sumpfkrautrausch nachlässt.', 'XPExecutedBounty': 'Erfahrung dafür, diese Figur zu töten, während sie bereits besiegt am Boden liegt.', diff --git a/apps/save-editor/lib/l10n/app_localizations_en.dart b/apps/save-editor/lib/l10n/app_localizations_en.dart index 074197fbd..e0240600d 100644 --- a/apps/save-editor/lib/l10n/app_localizations_en.dart +++ b/apps/save-editor/lib/l10n/app_localizations_en.dart @@ -1992,22 +1992,24 @@ class AppLocalizationsEn extends AppLocalizations { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'How much punishment the hero absorbs before a hit staggers him.', + 'How much punishment this character absorbs before a hit staggers them.', 'MaxSuperArmor': 'The full poise pool; it grows with character level and with worn armour.', 'DamageMultiplier': - 'Factor applied to the damage the hero takes — 1 is normal, higher hurts more.', - 'SpeedModifier': 'Factor on how fast the hero moves — 1 is normal.', - 'Oxygen': 'Seconds of air left under water; at zero the hero drowns.', + 'Factor applied to the damage this character takes — 1 is normal, higher hurts more.', + 'SpeedModifier': 'Factor on how fast this character moves — 1 is normal.', + 'Oxygen': + 'Seconds of air left under water; at zero this character drowns.', 'MaxOxygen': - 'How many seconds the hero can stay under water; the Diving skill raises it.', + 'How many seconds this character can stay under water; the Diving skill raises it.', 'OxygenDepletionRate': 'Air used up each second while submerged.', 'OxygenRecoveryRate': 'Air that comes back each second after surfacing.', 'CriticalLevelPercent': 'Share of remaining air at which the game warns of drowning.', 'SleepTime': 'Hours of sleep that still restore something; beyond them the game grants no resting bonus.', - 'MaxSleepTime': 'The largest budget of restful hours the hero can hold.', + 'MaxSleepTime': + 'The largest budget of restful hours this character can hold.', 'SleepTimeRecoveryAmount': 'Restful hours added back each time the budget refills.', 'SleepTimeRecoveryPeriod': @@ -2018,13 +2020,13 @@ class AppLocalizationsEn extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Share of maximum mana restored for every hour slept.', 'Alcohol': - 'How drunk the hero is; the higher tiers trade dexterity and mana for strength.', - 'MaxAlcohol': 'The highest alcohol level the hero can reach.', + 'How drunk this character is; the higher tiers trade dexterity and mana for strength.', + 'MaxAlcohol': 'The highest alcohol level this character can reach.', 'AlcoholDepletionRate': 'How quickly the alcohol level falls back towards sober.', 'Swampweed': - 'How stoned the hero is; the higher tiers shift his attributes around.', - 'MaxSwampweed': 'The highest swampweed level the hero can reach.', + 'How stoned this character is; the higher tiers shift their attributes around.', + 'MaxSwampweed': 'The highest swampweed level this character can reach.', 'SwampweedDepletionRate': 'How quickly the swampweed high wears off.', 'XPExecutedBounty': 'Experience for killing this character while it already lies defeated on the ground.', diff --git a/apps/save-editor/lib/l10n/app_localizations_es.dart b/apps/save-editor/lib/l10n/app_localizations_es.dart index 097d8121e..722947e41 100644 --- a/apps/save-editor/lib/l10n/app_localizations_es.dart +++ b/apps/save-editor/lib/l10n/app_localizations_es.dart @@ -2003,17 +2003,17 @@ class AppLocalizationsEs extends AppLocalizations { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'Cuánto castigo aguanta el héroe antes de que un golpe lo haga tambalearse.', + 'Cuánto castigo aguanta este personaje antes de que un golpe lo haga tambalearse.', 'MaxSuperArmor': 'La reserva completa de aplomo; aumenta con el nivel y con la armadura que lleva puesta.', 'DamageMultiplier': - 'Factor que se aplica al daño que recibe el héroe: 1 es lo normal, y cuanto más alto, más duele.', + 'Factor que se aplica al daño que recibe este personaje: 1 es lo normal, y cuanto más alto, más duele.', 'SpeedModifier': - 'Factor sobre lo rápido que se mueve el héroe: 1 es lo normal.', + 'Factor sobre lo rápido que se mueve este personaje: 1 es lo normal.', 'Oxygen': - 'Segundos de aire que quedan bajo el agua; al llegar a cero el héroe se ahoga.', + 'Segundos de aire que quedan bajo el agua; al llegar a cero este personaje se ahoga.', 'MaxOxygen': - 'Cuántos segundos puede aguantar el héroe bajo el agua; la habilidad Buceo lo aumenta.', + 'Cuántos segundos puede aguantar este personaje bajo el agua; la habilidad Buceo lo aumenta.', 'OxygenDepletionRate': 'Aire que se consume cada segundo bajo el agua.', 'OxygenRecoveryRate': 'Aire que se recupera cada segundo al salir a la superficie.', @@ -2022,7 +2022,7 @@ class AppLocalizationsEs extends AppLocalizations { 'SleepTime': 'Horas de sueño que todavía aportan algo; a partir de ahí el juego no da ninguna recuperación.', 'MaxSleepTime': - 'El mayor número de horas reparadoras que puede acumular el héroe.', + 'El mayor número de horas reparadoras que puede acumular este personaje.', 'SleepTimeRecoveryAmount': 'Horas reparadoras que se devuelven cada vez que se rellena la reserva.', 'SleepTimeRecoveryPeriod': @@ -2034,14 +2034,15 @@ class AppLocalizationsEs extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Porcentaje del maná máximo que se recupera por cada hora dormida.', 'Alcohol': - 'Lo borracho que está el héroe; los niveles altos cambian destreza y maná por fuerza.', - 'MaxAlcohol': 'El nivel de alcohol más alto que puede alcanzar el héroe.', + 'Lo borracho que está este personaje; los niveles altos cambian destreza y maná por fuerza.', + 'MaxAlcohol': + 'El nivel de alcohol más alto que puede alcanzar este personaje.', 'AlcoholDepletionRate': 'Con qué rapidez baja el nivel de alcohol hacia la sobriedad.', 'Swampweed': - 'Lo colocado que está el héroe; los niveles altos le mueven los atributos.', + 'Lo colocado que está este personaje; los niveles altos le mueven los atributos.', 'MaxSwampweed': - 'El nivel de hierba de pantano más alto que puede alcanzar el héroe.', + 'El nivel de hierba de pantano más alto que puede alcanzar este personaje.', 'SwampweedDepletionRate': 'Con qué rapidez se pasa el efecto de la hierba de pantano.', 'XPExecutedBounty': diff --git a/apps/save-editor/lib/l10n/app_localizations_fr.dart b/apps/save-editor/lib/l10n/app_localizations_fr.dart index 5a5fc700d..4ce15b773 100644 --- a/apps/save-editor/lib/l10n/app_localizations_fr.dart +++ b/apps/save-editor/lib/l10n/app_localizations_fr.dart @@ -2015,17 +2015,17 @@ class AppLocalizationsFr extends AppLocalizations { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'Ce que le héros encaisse avant qu\'un coup ne le déséquilibre.', + 'Ce que ce personnage encaisse avant qu\'un coup ne le déséquilibre.', 'MaxSuperArmor': 'La réserve complète de stabilité ; elle augmente avec le niveau et avec l\'armure portée.', 'DamageMultiplier': - 'Facteur appliqué aux dégâts que subit le héros — 1 est la normale, plus haut fait plus mal.', + 'Facteur appliqué aux dégâts que subit ce personnage — 1 est la normale, plus haut fait plus mal.', 'SpeedModifier': - 'Facteur appliqué à la vitesse de déplacement du héros — 1 est la normale.', + 'Facteur appliqué à la vitesse de déplacement de ce personnage — 1 est la normale.', 'Oxygen': - 'Secondes d\'air qu\'il reste sous l\'eau ; à zéro, le héros se noie.', + 'Secondes d\'air qu\'il reste sous l\'eau ; à zéro, ce personnage se noie.', 'MaxOxygen': - 'Combien de secondes le héros peut rester sous l\'eau ; le talent Plongée augmente cette durée.', + 'Combien de secondes ce personnage peut rester sous l\'eau ; le talent Plongée augmente cette durée.', 'OxygenDepletionRate': 'Air consommé chaque seconde sous l\'eau.', 'OxygenRecoveryRate': 'Air qui revient chaque seconde une fois de retour à la surface.', @@ -2034,27 +2034,27 @@ class AppLocalizationsFr extends AppLocalizations { 'SleepTime': 'Heures de sommeil qui apportent encore quelque chose ; au-delà, le jeu n\'accorde plus de récupération.', 'MaxSleepTime': - 'La plus grande réserve d\'heures de repos que le héros peut avoir.', + 'La plus grande réserve d\'heures de repos que ce personnage peut avoir.', 'SleepTimeRecoveryAmount': 'Heures de repos qui reviennent à chaque recharge.', 'SleepTimeRecoveryPeriod': 'Le temps qu\'il faut pour que la réserve d\'heures de repos se remplisse à nouveau.', 'MaxRestTime': - 'La plus longue durée que le héros peut passer au lit d\'une traite.', + 'La plus longue durée que le jeu autorise à passer au lit d\'une traite.', 'Health_RecoveryRatePerHourOfSleep': 'Part des points de vie maximum rendue pour chaque heure de sommeil.', 'Mana_RecoveryRatePerHourOfSleep': 'Part du mana maximum rendue pour chaque heure de sommeil.', 'Alcohol': - 'À quel point le héros est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.', + 'À quel point ce personnage est ivre ; aux paliers élevés, il échange dextérité et mana contre de la force.', 'MaxAlcohol': - 'Le taux d\'alcool le plus élevé que le héros peut atteindre.', + 'Le taux d\'alcool le plus élevé que ce personnage peut atteindre.', 'AlcoholDepletionRate': 'À quelle vitesse le taux d\'alcool redescend vers la sobriété.', 'Swampweed': - 'À quel point le héros plane ; aux paliers élevés, ses caractéristiques sont chamboulées.', + 'À quel point ce personnage plane ; aux paliers élevés, ses caractéristiques sont chamboulées.', 'MaxSwampweed': - 'Le niveau d\'herbe des marais le plus élevé que le héros peut atteindre.', + 'Le niveau d\'herbe des marais le plus élevé que ce personnage peut atteindre.', 'SwampweedDepletionRate': 'À quelle vitesse l\'effet de l\'herbe des marais se dissipe.', 'XPExecutedBounty': diff --git a/apps/save-editor/lib/l10n/app_localizations_it.dart b/apps/save-editor/lib/l10n/app_localizations_it.dart index e0aab2b37..278112c49 100644 --- a/apps/save-editor/lib/l10n/app_localizations_it.dart +++ b/apps/save-editor/lib/l10n/app_localizations_it.dart @@ -2008,16 +2008,17 @@ class AppLocalizationsIt extends AppLocalizations { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'Quanto incassa l\'eroe prima che un colpo lo faccia barcollare.', + 'Quanto incassa questo personaggio prima che un colpo lo faccia barcollare.', 'MaxSuperArmor': 'La riserva completa di equilibrio; cresce con il livello e con l\'armatura indossata.', 'DamageMultiplier': - 'Fattore applicato al danno che l\'eroe subisce: 1 è normale, valori più alti fanno più male.', + 'Fattore applicato al danno che questo personaggio subisce: 1 è normale, valori più alti fanno più male.', 'SpeedModifier': - 'Fattore sulla velocità con cui l\'eroe si muove: 1 è normale.', - 'Oxygen': 'Secondi d\'aria rimasti sott\'acqua; a zero l\'eroe annega.', + 'Fattore sulla velocità con cui questo personaggio si muove: 1 è normale.', + 'Oxygen': + 'Secondi d\'aria rimasti sott\'acqua; a zero questo personaggio annega.', 'MaxOxygen': - 'Per quanti secondi l\'eroe può restare sott\'acqua; l\'abilità Immersione lo aumenta.', + 'Per quanti secondi questo personaggio può restare sott\'acqua; l\'abilità Immersione lo aumenta.', 'OxygenDepletionRate': 'Aria consumata ogni secondo sott\'acqua.', 'OxygenRecoveryRate': 'Aria che torna ogni secondo dopo essere riemersi.', 'CriticalLevelPercent': @@ -2025,7 +2026,7 @@ class AppLocalizationsIt extends AppLocalizations { 'SleepTime': 'Ore di sonno che danno ancora un beneficio; oltre quelle il gioco non concede più alcun recupero.', 'MaxSleepTime': - 'La riserva massima di ore di riposo che l\'eroe può accumulare.', + 'La riserva massima di ore di riposo che questo personaggio può accumulare.', 'SleepTimeRecoveryAmount': 'Ore di riposo che tornano a ogni ricarica.', 'SleepTimeRecoveryPeriod': 'Quanto tempo passa prima che la riserva di ore di riposo si ricarichi.', @@ -2036,14 +2037,15 @@ class AppLocalizationsIt extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Quota del mana massimo che torna per ogni ora dormita.', 'Alcohol': - 'Quanto è ubriaco l\'eroe; ai livelli più alti scambia destrezza e mana con forza.', - 'MaxAlcohol': 'Il livello di alcol più alto che l\'eroe può raggiungere.', + 'Quanto è ubriaco questo personaggio; ai livelli più alti scambia destrezza e mana con forza.', + 'MaxAlcohol': + 'Il livello di alcol più alto che questo personaggio può raggiungere.', 'AlcoholDepletionRate': 'Quanto in fretta il livello di alcol scende di nuovo verso la sobrietà.', 'Swampweed': - 'Quanto è sballato l\'eroe; ai livelli più alti i suoi valori si spostano.', + 'Quanto è sballato questo personaggio; ai livelli più alti i suoi valori si spostano.', 'MaxSwampweed': - 'Il livello di erba palustre più alto che l\'eroe può raggiungere.', + 'Il livello di erba palustre più alto che questo personaggio può raggiungere.', 'SwampweedDepletionRate': 'Quanto in fretta svanisce lo sballo da erba palustre.', 'XPExecutedBounty': diff --git a/apps/save-editor/lib/l10n/app_localizations_ja.dart b/apps/save-editor/lib/l10n/app_localizations_ja.dart index e063280a4..4f196283d 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ja.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ja.dart @@ -1951,10 +1951,10 @@ class AppLocalizationsJa extends AppLocalizations { @override String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'SuperArmor': '一撃で怯まされるまでに、ヒーローがどれだけ攻撃に耐えられるか。', + 'SuperArmor': '一撃で怯まされるまでに、このキャラクターがどれだけ攻撃に耐えられるか。', 'MaxSuperArmor': '強靭度の総量で、レベルと身に着けた鎧に応じて増える。', - 'DamageMultiplier': 'ヒーローが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。', - 'SpeedModifier': 'ヒーローの移動の速さにかかる倍率で、1が標準。', + 'DamageMultiplier': 'このキャラクターが受けるダメージにかかる倍率で、1が標準、大きいほど痛い。', + 'SpeedModifier': 'このキャラクターの移動の速さにかかる倍率で、1が標準。', 'Oxygen': '水中に残っている息の秒数で、ゼロになると溺れる。', 'MaxOxygen': '水中にいられる秒数で、潜水スキルを上げると伸びる。', 'OxygenDepletionRate': '水中で1秒ごとに減っていく息の量。', @@ -1968,10 +1968,10 @@ class AppLocalizationsJa extends AppLocalizations { 'Health_RecoveryRatePerHourOfSleep': '1時間眠るごとに戻る最大体力の割合。', 'Mana_RecoveryRatePerHourOfSleep': '1時間眠るごとに戻る最大マナの割合。', 'Alcohol': 'どれだけ酔っているかで、段階が上がるほど器用さとマナが下がり力が上がる。', - 'MaxAlcohol': 'ヒーローが到達できる酔いの度合いの上限。', + 'MaxAlcohol': 'このキャラクターが到達できる酔いの度合いの上限。', 'AlcoholDepletionRate': '酔いがどれだけ早く覚めていくか。', - 'Swampweed': 'どれだけ沼地草に酔っているかで、段階が上がるとヒーローの能力値が入れ替わる。', - 'MaxSwampweed': 'ヒーローが到達できる沼地草の酔いの上限。', + 'Swampweed': 'どれだけ沼地草に酔っているかで、段階が上がるとこのキャラクターの能力値が入れ替わる。', + 'MaxSwampweed': 'このキャラクターが到達できる沼地草の酔いの上限。', 'SwampweedDepletionRate': '沼地草の酔いがどれだけ早く抜けるか。', 'XPExecutedBounty': 'すでに倒れて動けないこのキャラクターに、とどめを刺して得られる経験値。', 'XPKillOrDefeatBounty': diff --git a/apps/save-editor/lib/l10n/app_localizations_pl.dart b/apps/save-editor/lib/l10n/app_localizations_pl.dart index 342d2172e..93d6f2b6d 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pl.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pl.dart @@ -2018,17 +2018,17 @@ class AppLocalizationsPl extends AppLocalizations { @override String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'SuperArmor': 'Ile bohater zniesie, zanim cios wytrąci go z równowagi.', + 'SuperArmor': 'Ile zniesie ta postać, zanim cios wytrąci ją z równowagi.', 'MaxSuperArmor': 'Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.', 'DamageMultiplier': - 'Mnożnik obrażeń, które przyjmuje bohater – 1 to wartość normalna, wyższa boli bardziej.', + 'Mnożnik obrażeń, które przyjmuje ta postać – 1 to wartość normalna, wyższa boli bardziej.', 'SpeedModifier': - 'Mnożnik tempa poruszania się bohatera – 1 to wartość normalna.', + 'Mnożnik tempa poruszania się tej postaci – 1 to wartość normalna.', 'Oxygen': - 'Sekundy powietrza pozostałe pod wodą; przy zerze bohater tonie.', + 'Sekundy powietrza pozostałe pod wodą; przy zerze ta postać tonie.', 'MaxOxygen': - 'Ile sekund bohater wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.', + 'Ile sekund ta postać wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.', 'OxygenDepletionRate': 'Ile powietrza ubywa co sekundę pod wodą.', 'OxygenRecoveryRate': 'Ile powietrza wraca co sekundę po wynurzeniu.', 'CriticalLevelPercent': @@ -2036,7 +2036,7 @@ class AppLocalizationsPl extends AppLocalizations { 'SleepTime': 'Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.', 'MaxSleepTime': - 'Największy zapas godzin odpoczynku, jaki bohater może mieć.', + 'Największy zapas godzin odpoczynku, jaki ta postać może mieć.', 'SleepTimeRecoveryAmount': 'Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.', 'SleepTimeRecoveryPeriod': @@ -2048,14 +2048,14 @@ class AppLocalizationsPl extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Część maksymalnej many, która wraca za każdą przespaną godzinę.', 'Alcohol': - 'Jak bardzo bohater jest pijany; na wyższych stopniach zamienia zręczność i manę na siłę.', - 'MaxAlcohol': 'Najwyższy poziom alkoholu, jaki bohater może osiągnąć.', + 'Jak bardzo ta postać jest pijana; na wyższych stopniach zamienia zręczność i manę na siłę.', + 'MaxAlcohol': 'Najwyższy poziom alkoholu, jaki ta postać może osiągnąć.', 'AlcoholDepletionRate': 'Jak szybko poziom alkoholu spada z powrotem do trzeźwości.', 'Swampweed': - 'Jak bardzo bohater jest odurzony; wyższe stopnie przestawiają jego atrybuty.', + 'Jak bardzo ta postać jest odurzona; wyższe stopnie przestawiają jej atrybuty.', 'MaxSwampweed': - 'Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.', + 'Najwyższy poziom bagiennego ziela, jaki ta postać może osiągnąć.', 'SwampweedDepletionRate': 'Jak szybko mija odurzenie bagiennym zielem.', 'XPExecutedBounty': 'Doświadczenie za dobicie tej postaci, gdy leży już pokonana na ziemi.', diff --git a/apps/save-editor/lib/l10n/app_localizations_pt.dart b/apps/save-editor/lib/l10n/app_localizations_pt.dart index f0780819e..8f5ccf0a6 100644 --- a/apps/save-editor/lib/l10n/app_localizations_pt.dart +++ b/apps/save-editor/lib/l10n/app_localizations_pt.dart @@ -2004,17 +2004,17 @@ class AppLocalizationsPt extends AppLocalizations { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.', + 'Quanto castigo este personagem aguenta antes de um golpe tirá-lo do equilíbrio.', 'MaxSuperArmor': 'A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.', 'DamageMultiplier': - 'Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.', + 'Fator aplicado ao dano que este personagem sofre — 1 é o normal, mais alto dói mais.', 'SpeedModifier': - 'Fator sobre a rapidez com que o herói se move — 1 é o normal.', + 'Fator sobre a rapidez com que este personagem se move — 1 é o normal.', 'Oxygen': - 'Segundos de ar que restam debaixo d\'água; ao chegar a zero, o herói se afoga.', + 'Segundos de ar que restam debaixo d\'água; ao chegar a zero, este personagem se afoga.', 'MaxOxygen': - 'Quantos segundos o herói consegue ficar debaixo d\'água; a habilidade Mergulho aumenta isso.', + 'Quantos segundos este personagem consegue ficar debaixo d\'água; a habilidade Mergulho aumenta isso.', 'OxygenDepletionRate': 'Ar consumido a cada segundo debaixo d\'água.', 'OxygenRecoveryRate': 'Ar que volta a cada segundo depois de emergir.', 'CriticalLevelPercent': @@ -2022,7 +2022,7 @@ class AppLocalizationsPt extends AppLocalizations { 'SleepTime': 'Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.', 'MaxSleepTime': - 'O maior estoque de horas de descanso que o herói pode acumular.', + 'O maior estoque de horas de descanso que este personagem pode acumular.', 'SleepTimeRecoveryAmount': 'Horas de descanso que voltam a cada reposição do estoque.', 'SleepTimeRecoveryPeriod': @@ -2033,14 +2033,14 @@ class AppLocalizationsPt extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Parcela do mana máximo recuperada a cada hora dormida.', 'Alcohol': - 'O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.', - 'MaxAlcohol': 'O maior nível de álcool que o herói pode atingir.', + 'O quão bêbado este personagem está; os níveis mais altos trocam destreza e mana por força.', + 'MaxAlcohol': 'O maior nível de álcool que este personagem pode atingir.', 'AlcoholDepletionRate': 'Com que rapidez o nível de álcool cai de volta rumo à sobriedade.', 'Swampweed': - 'O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.', + 'O quão chapado este personagem está; os níveis mais altos mexem nos atributos dele.', 'MaxSwampweed': - 'O maior nível de erva do pântano que o herói pode atingir.', + 'O maior nível de erva do pântano que este personagem pode atingir.', 'SwampweedDepletionRate': 'Com que rapidez o barato da erva do pântano vai passando.', 'XPExecutedBounty': @@ -4840,17 +4840,17 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { 'SuperArmor': - 'Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.', + 'Quanto castigo este personagem aguenta antes de um golpe tirá-lo do equilíbrio.', 'MaxSuperArmor': 'A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.', 'DamageMultiplier': - 'Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.', + 'Fator aplicado ao dano que este personagem sofre — 1 é o normal, mais alto dói mais.', 'SpeedModifier': - 'Fator sobre a rapidez com que o herói se move — 1 é o normal.', + 'Fator sobre a rapidez com que este personagem se move — 1 é o normal.', 'Oxygen': - 'Segundos de ar que restam debaixo d\'água; ao chegar a zero, o herói se afoga.', + 'Segundos de ar que restam debaixo d\'água; ao chegar a zero, este personagem se afoga.', 'MaxOxygen': - 'Quantos segundos o herói consegue ficar debaixo d\'água; a habilidade Mergulho aumenta isso.', + 'Quantos segundos este personagem consegue ficar debaixo d\'água; a habilidade Mergulho aumenta isso.', 'OxygenDepletionRate': 'Ar consumido a cada segundo debaixo d\'água.', 'OxygenRecoveryRate': 'Ar que volta a cada segundo depois de emergir.', 'CriticalLevelPercent': @@ -4858,7 +4858,7 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'SleepTime': 'Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.', 'MaxSleepTime': - 'O maior estoque de horas de descanso que o herói pode acumular.', + 'O maior estoque de horas de descanso que este personagem pode acumular.', 'SleepTimeRecoveryAmount': 'Horas de descanso que voltam a cada reposição do estoque.', 'SleepTimeRecoveryPeriod': @@ -4869,14 +4869,14 @@ class AppLocalizationsPtBr extends AppLocalizationsPt { 'Mana_RecoveryRatePerHourOfSleep': 'Parcela do mana máximo recuperada a cada hora dormida.', 'Alcohol': - 'O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.', - 'MaxAlcohol': 'O maior nível de álcool que o herói pode atingir.', + 'O quão bêbado este personagem está; os níveis mais altos trocam destreza e mana por força.', + 'MaxAlcohol': 'O maior nível de álcool que este personagem pode atingir.', 'AlcoholDepletionRate': 'Com que rapidez o nível de álcool cai de volta rumo à sobriedade.', 'Swampweed': - 'O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.', + 'O quão chapado este personagem está; os níveis mais altos mexem nos atributos dele.', 'MaxSwampweed': - 'O maior nível de erva do pântano que o herói pode atingir.', + 'O maior nível de erva do pântano que este personagem pode atingir.', 'SwampweedDepletionRate': 'Com que rapidez o barato da erva do pântano vai passando.', 'XPExecutedBounty': diff --git a/apps/save-editor/lib/l10n/app_localizations_ru.dart b/apps/save-editor/lib/l10n/app_localizations_ru.dart index 480ea3353..6c63ea5e7 100644 --- a/apps/save-editor/lib/l10n/app_localizations_ru.dart +++ b/apps/save-editor/lib/l10n/app_localizations_ru.dart @@ -2012,17 +2012,18 @@ class AppLocalizationsRu extends AppLocalizations { @override String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'SuperArmor': 'Сколько герой выдерживает, прежде чем удар его пошатнёт.', + 'SuperArmor': + 'Сколько выдерживает этот персонаж, прежде чем удар его пошатнёт.', 'MaxSuperArmor': 'Полный запас стойкости; он растёт с уровнем и с надетой бронёй.', 'DamageMultiplier': - 'Множитель урона, который получает герой: 1 — как обычно, больше — больнее.', + 'Множитель урона, который получает этот персонаж: 1 — как обычно, больше — больнее.', 'SpeedModifier': - 'Множитель того, как быстро герой двигается: 1 — как обычно.', + 'Множитель того, как быстро двигается этот персонаж: 1 — как обычно.', 'Oxygen': - 'Сколько секунд воздуха осталось под водой; на нуле герой тонет.', + 'Сколько секунд воздуха осталось под водой; на нуле этот персонаж тонет.', 'MaxOxygen': - 'Сколько секунд герой может пробыть под водой; навык Ныряние это повышает.', + 'Сколько секунд этот персонаж может пробыть под водой; навык Ныряние это повышает.', 'OxygenDepletionRate': 'Сколько воздуха расходуется под водой каждую секунду.', 'OxygenRecoveryRate': @@ -2032,7 +2033,7 @@ class AppLocalizationsRu extends AppLocalizations { 'SleepTime': 'Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.', 'MaxSleepTime': - 'Наибольший запас полезных часов сна, который может держать герой.', + 'Наибольший запас полезных часов сна, который может держать этот персонаж.', 'SleepTimeRecoveryAmount': 'Сколько полезных часов сна возвращается при каждом восполнении.', 'SleepTimeRecoveryPeriod': @@ -2044,15 +2045,15 @@ class AppLocalizationsRu extends AppLocalizations { 'Mana_RecoveryRatePerHourOfSleep': 'Доля максимальной маны, которая возвращается за каждый час сна.', 'Alcohol': - 'Насколько герой пьян; высокие ступени меняют ловкость и ману на силу.', + 'Насколько этот персонаж пьян; высокие ступени меняют ловкость и ману на силу.', 'MaxAlcohol': - 'Самый высокий уровень опьянения, которого может достичь герой.', + 'Самый высокий уровень опьянения, которого может достичь этот персонаж.', 'AlcoholDepletionRate': 'Насколько быстро уровень опьянения падает обратно к трезвости.', 'Swampweed': - 'Насколько герой одурманен; высокие ступени сдвигают его характеристики.', + 'Насколько этот персонаж одурманен; высокие ступени сдвигают его характеристики.', 'MaxSwampweed': - 'Самый высокий уровень болотника, которого может достичь герой.', + 'Самый высокий уровень болотника, которого может достичь этот персонаж.', 'SwampweedDepletionRate': 'Насколько быстро проходит дурман от болотника.', 'XPExecutedBounty': diff --git a/apps/save-editor/lib/l10n/app_localizations_zh.dart b/apps/save-editor/lib/l10n/app_localizations_zh.dart index 5d514dda9..4f2294043 100644 --- a/apps/save-editor/lib/l10n/app_localizations_zh.dart +++ b/apps/save-editor/lib/l10n/app_localizations_zh.dart @@ -1924,27 +1924,27 @@ class AppLocalizationsZh extends AppLocalizations { @override String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'SuperArmor': '主角在被一击打得踉跄之前还能扛下多少打击。', + 'SuperArmor': '该角色在被一击打得踉跄之前还能扛下多少打击。', 'MaxSuperArmor': '霸体值的上限,会随着等级提升和所穿的护甲一起增长。', - 'DamageMultiplier': '作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。', - 'SpeedModifier': '主角移动快慢的系数——1 为正常。', - 'Oxygen': '水下剩余的呼吸秒数,归零时主角就会淹死。', - 'MaxOxygen': '主角能在水下待多少秒,潜水技能可以提高这个上限。', + 'DamageMultiplier': '作用于该角色所受伤害的系数——1 为正常,数值越高越吃痛。', + 'SpeedModifier': '该角色移动快慢的系数——1 为正常。', + 'Oxygen': '水下剩余的呼吸秒数,归零时该角色就会淹死。', + 'MaxOxygen': '该角色能在水下待多少秒,潜水技能可以提高这个上限。', 'OxygenDepletionRate': '潜在水下时每秒消耗掉的空气量。', 'OxygenRecoveryRate': '浮出水面后每秒回来的空气量。', 'CriticalLevelPercent': '剩余空气低到这个比例时,游戏就会发出溺水警告。', 'SleepTime': '还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。', - 'MaxSleepTime': '主角能攒下的有效睡眠时间上限。', + 'MaxSleepTime': '该角色能攒下的有效睡眠时间上限。', 'SleepTimeRecoveryAmount': '每次补充时重新加回来的有效睡眠小时数。', 'SleepTimeRecoveryPeriod': '有效睡眠时间隔多久才会重新补满。', 'MaxRestTime': '游戏允许一次躺在床上的最长时间。', 'Health_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大生命值比例。', 'Mana_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大法力值比例。', - 'Alcohol': '主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。', - 'MaxAlcohol': '主角能达到的最高酒精值。', + 'Alcohol': '该角色醉到什么程度,较高的档位会拿敏捷和法力去换力量。', + 'MaxAlcohol': '该角色能达到的最高酒精值。', 'AlcoholDepletionRate': '酒精值往清醒方向回落得有多快。', - 'Swampweed': '主角嗨到什么程度,较高的档位会让他的属性此消彼长。', - 'MaxSwampweed': '主角能达到的最高沼泽草值。', + 'Swampweed': '该角色嗨到什么程度,较高的档位会让其属性此消彼长。', + 'MaxSwampweed': '该角色能达到的最高沼泽草值。', 'SwampweedDepletionRate': '沼泽草带来的迷幻劲头消退得有多快。', 'XPExecutedBounty': '在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。', 'XPKillOrDefeatBounty': '把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。', @@ -4642,27 +4642,27 @@ class AppLocalizationsZhHans extends AppLocalizationsZh { @override String attributeManualTooltip(String attributeId) { String _temp0 = intl.Intl.selectLogic(attributeId, { - 'SuperArmor': '主角在被一击打得踉跄之前还能扛下多少打击。', + 'SuperArmor': '该角色在被一击打得踉跄之前还能扛下多少打击。', 'MaxSuperArmor': '霸体值的上限,会随着等级提升和所穿的护甲一起增长。', - 'DamageMultiplier': '作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。', - 'SpeedModifier': '主角移动快慢的系数——1 为正常。', - 'Oxygen': '水下剩余的呼吸秒数,归零时主角就会淹死。', - 'MaxOxygen': '主角能在水下待多少秒,潜水技能可以提高这个上限。', + 'DamageMultiplier': '作用于该角色所受伤害的系数——1 为正常,数值越高越吃痛。', + 'SpeedModifier': '该角色移动快慢的系数——1 为正常。', + 'Oxygen': '水下剩余的呼吸秒数,归零时该角色就会淹死。', + 'MaxOxygen': '该角色能在水下待多少秒,潜水技能可以提高这个上限。', 'OxygenDepletionRate': '潜在水下时每秒消耗掉的空气量。', 'OxygenRecoveryRate': '浮出水面后每秒回来的空气量。', 'CriticalLevelPercent': '剩余空气低到这个比例时,游戏就会发出溺水警告。', 'SleepTime': '还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。', - 'MaxSleepTime': '主角能攒下的有效睡眠时间上限。', + 'MaxSleepTime': '该角色能攒下的有效睡眠时间上限。', 'SleepTimeRecoveryAmount': '每次补充时重新加回来的有效睡眠小时数。', 'SleepTimeRecoveryPeriod': '有效睡眠时间隔多久才会重新补满。', 'MaxRestTime': '游戏允许一次躺在床上的最长时间。', 'Health_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大生命值比例。', 'Mana_RecoveryRatePerHourOfSleep': '每睡一小时能恢复的最大法力值比例。', - 'Alcohol': '主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。', - 'MaxAlcohol': '主角能达到的最高酒精值。', + 'Alcohol': '该角色醉到什么程度,较高的档位会拿敏捷和法力去换力量。', + 'MaxAlcohol': '该角色能达到的最高酒精值。', 'AlcoholDepletionRate': '酒精值往清醒方向回落得有多快。', - 'Swampweed': '主角嗨到什么程度,较高的档位会让他的属性此消彼长。', - 'MaxSwampweed': '主角能达到的最高沼泽草值。', + 'Swampweed': '该角色嗨到什么程度,较高的档位会让其属性此消彼长。', + 'MaxSwampweed': '该角色能达到的最高沼泽草值。', 'SwampweedDepletionRate': '沼泽草带来的迷幻劲头消退得有多快。', 'XPExecutedBounty': '在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。', 'XPKillOrDefeatBounty': '把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。', diff --git a/apps/save-editor/lib/l10n/app_pl.arb b/apps/save-editor/lib/l10n/app_pl.arb index cc7a8858a..efa5b040e 100644 --- a/apps/save-editor/lib/l10n/app_pl.arb +++ b/apps/save-editor/lib/l10n/app_pl.arb @@ -577,7 +577,7 @@ "fallbackItem": "Przedmiot", "attributeSkillPointsFallback": "Punkty nauki (PN)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Równowaga} MaxSuperArmor{Maks. równowaga} DamageMultiplier{Otrzymywane obrażenia} SpeedModifier{Szybkość ruchu} Oxygen{Powietrze} MaxOxygen{Maks. powietrze} OxygenDepletionRate{Zużycie powietrza na sekundę} OxygenRecoveryRate{Odzysk powietrza na sekundę} CriticalLevelPercent{Ostrzeżenie o powietrzu} SleepTime{Pozostałe godziny odpoczynku} MaxSleepTime{Maks. godziny odpoczynku} SleepTimeRecoveryAmount{Wielkość uzupełnienia} SleepTimeRecoveryPeriod{Czas do uzupełnienia} MaxRestTime{Maks. czas w łóżku} Health_RecoveryRatePerHourOfSleep{Życie na godzinę snu} Mana_RecoveryRatePerHourOfSleep{Mana na godzinę snu} Alcohol{Poziom alkoholu} MaxAlcohol{Maks. poziom alkoholu} AlcoholDepletionRate{Tempo trzeźwienia} Swampweed{Poziom bagiennego ziela} MaxSwampweed{Maks. bagienne ziele} SwampweedDepletionRate{Tempo mijania odurzenia} XPExecutedBounty{PD za dobicie leżącego} XPKillOrDefeatBounty{PD za pokonanie} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Ile bohater zniesie, zanim cios wytrąci go z równowagi.} MaxSuperArmor{Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.} DamageMultiplier{Mnożnik obrażeń, które przyjmuje bohater – 1 to wartość normalna, wyższa boli bardziej.} SpeedModifier{Mnożnik tempa poruszania się bohatera – 1 to wartość normalna.} Oxygen{Sekundy powietrza pozostałe pod wodą; przy zerze bohater tonie.} MaxOxygen{Ile sekund bohater wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.} OxygenDepletionRate{Ile powietrza ubywa co sekundę pod wodą.} OxygenRecoveryRate{Ile powietrza wraca co sekundę po wynurzeniu.} CriticalLevelPercent{Ile powietrza musi zostać, by gra ostrzegła przed utonięciem.} SleepTime{Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.} MaxSleepTime{Największy zapas godzin odpoczynku, jaki bohater może mieć.} SleepTimeRecoveryAmount{Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.} SleepTimeRecoveryPeriod{Ile czasu mija, zanim zapas godzin odpoczynku uzupełni się na nowo.} MaxRestTime{Najdłuższy pojedynczy odpoczynek w łóżku, na jaki pozwala gra.} Health_RecoveryRatePerHourOfSleep{Część maksymalnego życia, która wraca za każdą przespaną godzinę.} Mana_RecoveryRatePerHourOfSleep{Część maksymalnej many, która wraca za każdą przespaną godzinę.} Alcohol{Jak bardzo bohater jest pijany; na wyższych stopniach zamienia zręczność i manę na siłę.} MaxAlcohol{Najwyższy poziom alkoholu, jaki bohater może osiągnąć.} AlcoholDepletionRate{Jak szybko poziom alkoholu spada z powrotem do trzeźwości.} Swampweed{Jak bardzo bohater jest odurzony; wyższe stopnie przestawiają jego atrybuty.} MaxSwampweed{Najwyższy poziom bagiennego ziela, jaki bohater może osiągnąć.} SwampweedDepletionRate{Jak szybko mija odurzenie bagiennym zielem.} XPExecutedBounty{Doświadczenie za dobicie tej postaci, gdy leży już pokonana na ziemi.} XPKillOrDefeatBounty{Doświadczenie za powalenie tej postaci, niezależnie od tego, czy zginie, czy tylko padnie nieprzytomna.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Ile zniesie ta postać, zanim cios wytrąci ją z równowagi.} MaxSuperArmor{Pełny zapas równowagi; rośnie z poziomem postaci i z noszoną zbroją.} DamageMultiplier{Mnożnik obrażeń, które przyjmuje ta postać – 1 to wartość normalna, wyższa boli bardziej.} SpeedModifier{Mnożnik tempa poruszania się tej postaci – 1 to wartość normalna.} Oxygen{Sekundy powietrza pozostałe pod wodą; przy zerze ta postać tonie.} MaxOxygen{Ile sekund ta postać wytrzyma pod wodą; umiejętność Nurkowanie to zwiększa.} OxygenDepletionRate{Ile powietrza ubywa co sekundę pod wodą.} OxygenRecoveryRate{Ile powietrza wraca co sekundę po wynurzeniu.} CriticalLevelPercent{Ile powietrza musi zostać, by gra ostrzegła przed utonięciem.} SleepTime{Godziny snu, które jeszcze coś dają; ponad ten limit odpoczynek nic już nie przywraca.} MaxSleepTime{Największy zapas godzin odpoczynku, jaki ta postać może mieć.} SleepTimeRecoveryAmount{Godziny odpoczynku, które wracają przy każdym uzupełnieniu zapasu.} SleepTimeRecoveryPeriod{Ile czasu mija, zanim zapas godzin odpoczynku uzupełni się na nowo.} MaxRestTime{Najdłuższy pojedynczy odpoczynek w łóżku, na jaki pozwala gra.} Health_RecoveryRatePerHourOfSleep{Część maksymalnego życia, która wraca za każdą przespaną godzinę.} Mana_RecoveryRatePerHourOfSleep{Część maksymalnej many, która wraca za każdą przespaną godzinę.} Alcohol{Jak bardzo ta postać jest pijana; na wyższych stopniach zamienia zręczność i manę na siłę.} MaxAlcohol{Najwyższy poziom alkoholu, jaki ta postać może osiągnąć.} AlcoholDepletionRate{Jak szybko poziom alkoholu spada z powrotem do trzeźwości.} Swampweed{Jak bardzo ta postać jest odurzona; wyższe stopnie przestawiają jej atrybuty.} MaxSwampweed{Najwyższy poziom bagiennego ziela, jaki ta postać może osiągnąć.} SwampweedDepletionRate{Jak szybko mija odurzenie bagiennym zielem.} XPExecutedBounty{Doświadczenie za dobicie tej postaci, gdy leży już pokonana na ziemi.} XPKillOrDefeatBounty{Doświadczenie za powalenie tej postaci, niezależnie od tego, czy zginie, czy tylko padnie nieprzytomna.} other{?}}", "knowledgeTypeVoiceLine": "Kwestia głosowa", "knowledgeTypeOther": "Inne", "armorUpgradeUpper": "Góra", diff --git a/apps/save-editor/lib/l10n/app_pt.arb b/apps/save-editor/lib/l10n/app_pt.arb index 5543aa4ef..8019566f9 100644 --- a/apps/save-editor/lib/l10n/app_pt.arb +++ b/apps/save-editor/lib/l10n/app_pt.arb @@ -577,7 +577,7 @@ "fallbackItem": "Item", "attributeSkillPointsFallback": "Pontos de aprendizado (PA)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por matar o caído} XPKillOrDefeatBounty{XP por derrotar} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência por matar este personagem enquanto ele já está no chão, derrotado.} XPKillOrDefeatBounty{Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo este personagem aguenta antes de um golpe tirá-lo do equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que este personagem sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que este personagem se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, este personagem se afoga.} MaxOxygen{Quantos segundos este personagem consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que este personagem pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado este personagem está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que este personagem pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado este personagem está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que este personagem pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência por matar este personagem enquanto ele já está no chão, derrotado.} XPKillOrDefeatBounty{Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.} other{?}}", "knowledgeTypeVoiceLine": "Linha de voz", "knowledgeTypeOther": "Outro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_pt_BR.arb b/apps/save-editor/lib/l10n/app_pt_BR.arb index 17a19d330..722b932cd 100644 --- a/apps/save-editor/lib/l10n/app_pt_BR.arb +++ b/apps/save-editor/lib/l10n/app_pt_BR.arb @@ -577,7 +577,7 @@ "fallbackItem": "Item", "attributeSkillPointsFallback": "Pontos de aprendizado (PA)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Firmeza} MaxSuperArmor{Firmeza máx.} DamageMultiplier{Dano recebido} SpeedModifier{Velocidade de movimento} Oxygen{Fôlego} MaxOxygen{Fôlego máx.} OxygenDepletionRate{Fôlego gasto por segundo} OxygenRecoveryRate{Fôlego ganho por segundo} CriticalLevelPercent{Aviso de fôlego baixo} SleepTime{Horas de descanso restantes} MaxSleepTime{Máx. de horas de descanso} SleepTimeRecoveryAmount{Horas de descanso repostas} SleepTimeRecoveryPeriod{Intervalo de reposição} MaxRestTime{Tempo máx. na cama} Health_RecoveryRatePerHourOfSleep{Vida por hora de sono} Mana_RecoveryRatePerHourOfSleep{Mana por hora de sono} Alcohol{Nível de álcool} MaxAlcohol{Nível máx. de álcool} AlcoholDepletionRate{Rapidez para ficar sóbrio} Swampweed{Nível de erva do pântano} MaxSwampweed{Máx. de erva do pântano} SwampweedDepletionRate{Rapidez para o efeito passar} XPExecutedBounty{XP por matar o caído} XPKillOrDefeatBounty{XP por derrotar} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo o herói aguenta antes de um golpe tirá-lo do sério equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que o herói sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que o herói se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, o herói se afoga.} MaxOxygen{Quantos segundos o herói consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que o herói pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado o herói está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que o herói pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado o herói está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que o herói pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência por matar este personagem enquanto ele já está no chão, derrotado.} XPKillOrDefeatBounty{Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Quanto castigo este personagem aguenta antes de um golpe tirá-lo do equilíbrio.} MaxSuperArmor{A reserva total de firmeza; ela cresce com o nível do personagem e com a armadura usada.} DamageMultiplier{Fator aplicado ao dano que este personagem sofre — 1 é o normal, mais alto dói mais.} SpeedModifier{Fator sobre a rapidez com que este personagem se move — 1 é o normal.} Oxygen{Segundos de ar que restam debaixo d'água; ao chegar a zero, este personagem se afoga.} MaxOxygen{Quantos segundos este personagem consegue ficar debaixo d'água; a habilidade Mergulho aumenta isso.} OxygenDepletionRate{Ar consumido a cada segundo debaixo d'água.} OxygenRecoveryRate{Ar que volta a cada segundo depois de emergir.} CriticalLevelPercent{Parcela de ar restante em que o jogo avisa sobre o risco de afogamento.} SleepTime{Horas de sono que ainda rendem algo; além delas, o jogo não dá mais nenhum bônus de descanso.} MaxSleepTime{O maior estoque de horas de descanso que este personagem pode acumular.} SleepTimeRecoveryAmount{Horas de descanso que voltam a cada reposição do estoque.} SleepTimeRecoveryPeriod{Quanto tempo leva até o estoque de horas de descanso ser reposto de novo.} MaxRestTime{O maior tempo seguido na cama que o jogo permite.} Health_RecoveryRatePerHourOfSleep{Parcela da vida máxima recuperada a cada hora dormida.} Mana_RecoveryRatePerHourOfSleep{Parcela do mana máximo recuperada a cada hora dormida.} Alcohol{O quão bêbado este personagem está; os níveis mais altos trocam destreza e mana por força.} MaxAlcohol{O maior nível de álcool que este personagem pode atingir.} AlcoholDepletionRate{Com que rapidez o nível de álcool cai de volta rumo à sobriedade.} Swampweed{O quão chapado este personagem está; os níveis mais altos mexem nos atributos dele.} MaxSwampweed{O maior nível de erva do pântano que este personagem pode atingir.} SwampweedDepletionRate{Com que rapidez o barato da erva do pântano vai passando.} XPExecutedBounty{Experiência por matar este personagem enquanto ele já está no chão, derrotado.} XPKillOrDefeatBounty{Experiência por derrubar este personagem, quer ele morra, quer apenas fique desacordado.} other{?}}", "knowledgeTypeVoiceLine": "Linha de voz", "knowledgeTypeOther": "Outro", "armorUpgradeUpper": "Superior", diff --git a/apps/save-editor/lib/l10n/app_ru.arb b/apps/save-editor/lib/l10n/app_ru.arb index 2a220565e..a1e06abfd 100644 --- a/apps/save-editor/lib/l10n/app_ru.arb +++ b/apps/save-editor/lib/l10n/app_ru.arb @@ -577,7 +577,7 @@ "fallbackItem": "Предмет", "attributeSkillPointsFallback": "Очки обучения (LP)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{Стойкость} MaxSuperArmor{Макс. стойкость} DamageMultiplier{Получаемый урон} SpeedModifier{Скорость передвижения} Oxygen{Запас воздуха} MaxOxygen{Макс. запас воздуха} OxygenDepletionRate{Расход воздуха в секунду} OxygenRecoveryRate{Возврат воздуха в секунду} CriticalLevelPercent{Порог нехватки воздуха} SleepTime{Полезные часы сна} MaxSleepTime{Макс. полезные часы сна} SleepTimeRecoveryAmount{Возврат полезных часов} SleepTimeRecoveryPeriod{Интервал восполнения} MaxRestTime{Макс. время в кровати} Health_RecoveryRatePerHourOfSleep{Здоровье за час сна} Mana_RecoveryRatePerHourOfSleep{Мана за час сна} Alcohol{Уровень опьянения} MaxAlcohol{Макс. опьянение} AlcoholDepletionRate{Скорость отрезвления} Swampweed{Уровень болотника} MaxSwampweed{Макс. уровень болотника} SwampweedDepletionRate{Скорость выветривания} XPExecutedBounty{Опыт за добивание} XPKillOrDefeatBounty{Опыт за победу} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{Сколько герой выдерживает, прежде чем удар его пошатнёт.} MaxSuperArmor{Полный запас стойкости; он растёт с уровнем и с надетой бронёй.} DamageMultiplier{Множитель урона, который получает герой: 1 — как обычно, больше — больнее.} SpeedModifier{Множитель того, как быстро герой двигается: 1 — как обычно.} Oxygen{Сколько секунд воздуха осталось под водой; на нуле герой тонет.} MaxOxygen{Сколько секунд герой может пробыть под водой; навык Ныряние это повышает.} OxygenDepletionRate{Сколько воздуха расходуется под водой каждую секунду.} OxygenRecoveryRate{Сколько воздуха возвращается каждую секунду после всплытия.} CriticalLevelPercent{Доля оставшегося воздуха, при которой игра предупреждает об угрозе утонуть.} SleepTime{Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.} MaxSleepTime{Наибольший запас полезных часов сна, который может держать герой.} SleepTimeRecoveryAmount{Сколько полезных часов сна возвращается при каждом восполнении.} SleepTimeRecoveryPeriod{Сколько времени проходит, прежде чем запас полезных часов сна восполнится снова.} MaxRestTime{Самое долгое пребывание в кровати за один раз, которое допускает игра.} Health_RecoveryRatePerHourOfSleep{Доля максимального здоровья, которая возвращается за каждый час сна.} Mana_RecoveryRatePerHourOfSleep{Доля максимальной маны, которая возвращается за каждый час сна.} Alcohol{Насколько герой пьян; высокие ступени меняют ловкость и ману на силу.} MaxAlcohol{Самый высокий уровень опьянения, которого может достичь герой.} AlcoholDepletionRate{Насколько быстро уровень опьянения падает обратно к трезвости.} Swampweed{Насколько герой одурманен; высокие ступени сдвигают его характеристики.} MaxSwampweed{Самый высокий уровень болотника, которого может достичь герой.} SwampweedDepletionRate{Насколько быстро проходит дурман от болотника.} XPExecutedBounty{Опыт за то, чтобы добить этого персонажа, пока он уже лежит поверженным на земле.} XPKillOrDefeatBounty{Опыт за то, чтобы одолеть этого персонажа: убить его или просто оставить лежать без сознания.} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{Сколько выдерживает этот персонаж, прежде чем удар его пошатнёт.} MaxSuperArmor{Полный запас стойкости; он растёт с уровнем и с надетой бронёй.} DamageMultiplier{Множитель урона, который получает этот персонаж: 1 — как обычно, больше — больнее.} SpeedModifier{Множитель того, как быстро двигается этот персонаж: 1 — как обычно.} Oxygen{Сколько секунд воздуха осталось под водой; на нуле этот персонаж тонет.} MaxOxygen{Сколько секунд этот персонаж может пробыть под водой; навык Ныряние это повышает.} OxygenDepletionRate{Сколько воздуха расходуется под водой каждую секунду.} OxygenRecoveryRate{Сколько воздуха возвращается каждую секунду после всплытия.} CriticalLevelPercent{Доля оставшегося воздуха, при которой игра предупреждает об угрозе утонуть.} SleepTime{Часы сна, которые ещё что-то дают; сверх них отдых уже ничего не восстанавливает.} MaxSleepTime{Наибольший запас полезных часов сна, который может держать этот персонаж.} SleepTimeRecoveryAmount{Сколько полезных часов сна возвращается при каждом восполнении.} SleepTimeRecoveryPeriod{Сколько времени проходит, прежде чем запас полезных часов сна восполнится снова.} MaxRestTime{Самое долгое пребывание в кровати за один раз, которое допускает игра.} Health_RecoveryRatePerHourOfSleep{Доля максимального здоровья, которая возвращается за каждый час сна.} Mana_RecoveryRatePerHourOfSleep{Доля максимальной маны, которая возвращается за каждый час сна.} Alcohol{Насколько этот персонаж пьян; высокие ступени меняют ловкость и ману на силу.} MaxAlcohol{Самый высокий уровень опьянения, которого может достичь этот персонаж.} AlcoholDepletionRate{Насколько быстро уровень опьянения падает обратно к трезвости.} Swampweed{Насколько этот персонаж одурманен; высокие ступени сдвигают его характеристики.} MaxSwampweed{Самый высокий уровень болотника, которого может достичь этот персонаж.} SwampweedDepletionRate{Насколько быстро проходит дурман от болотника.} XPExecutedBounty{Опыт за то, чтобы добить этого персонажа, пока он уже лежит поверженным на земле.} XPKillOrDefeatBounty{Опыт за то, чтобы одолеть этого персонажа: убить его или просто оставить лежать без сознания.} other{?}}", "knowledgeTypeVoiceLine": "Озвученная реплика", "knowledgeTypeOther": "Другое", "armorUpgradeUpper": "Верх", diff --git a/apps/save-editor/lib/l10n/app_zh.arb b/apps/save-editor/lib/l10n/app_zh.arb index ce8ef7320..233223dc5 100644 --- a/apps/save-editor/lib/l10n/app_zh.arb +++ b/apps/save-editor/lib/l10n/app_zh.arb @@ -577,7 +577,7 @@ "fallbackItem": "物品", "attributeSkillPointsFallback": "学习点数(LP)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{倒地处决获得的经验} XPKillOrDefeatBounty{击败获得的经验} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。} XPKillOrDefeatBounty{把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{该角色在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于该角色所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{该角色移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时该角色就会淹死。} MaxOxygen{该角色能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{该角色能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{该角色醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{该角色能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{该角色嗨到什么程度,较高的档位会让其属性此消彼长。} MaxSwampweed{该角色能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。} XPKillOrDefeatBounty{把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。} other{?}}", "knowledgeTypeVoiceLine": "语音台词", "knowledgeTypeOther": "其他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/lib/l10n/app_zh_Hans.arb b/apps/save-editor/lib/l10n/app_zh_Hans.arb index 51fa9ade2..31dffeaed 100644 --- a/apps/save-editor/lib/l10n/app_zh_Hans.arb +++ b/apps/save-editor/lib/l10n/app_zh_Hans.arb @@ -577,7 +577,7 @@ "fallbackItem": "物品", "attributeSkillPointsFallback": "学习点数(LP)", "attributeManualFallbackLabel": "{attributeId, select, SuperArmor{霸体值} MaxSuperArmor{最大霸体值} DamageMultiplier{受到的伤害} SpeedModifier{移动速度} Oxygen{氧气量} MaxOxygen{最大氧气量} OxygenDepletionRate{每秒氧气消耗} OxygenRecoveryRate{每秒氧气恢复} CriticalLevelPercent{缺氧警告阈值} SleepTime{剩余有效睡眠} MaxSleepTime{最大有效睡眠} SleepTimeRecoveryAmount{有效睡眠回补量} SleepTimeRecoveryPeriod{回补间隔} MaxRestTime{最长卧床时间} Health_RecoveryRatePerHourOfSleep{每小时睡眠回复生命} Mana_RecoveryRatePerHourOfSleep{每小时睡眠回复法力} Alcohol{酒精值} MaxAlcohol{最大酒精值} AlcoholDepletionRate{醒酒速度} Swampweed{沼泽草值} MaxSwampweed{最大沼泽草值} SwampweedDepletionRate{药性消退速度} XPExecutedBounty{倒地处决获得的经验} XPKillOrDefeatBounty{击败获得的经验} other{{fallback}}}", - "attributeManualTooltip": "{attributeId, select, SuperArmor{主角在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于主角所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{主角移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时主角就会淹死。} MaxOxygen{主角能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{主角能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{主角醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{主角能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{主角嗨到什么程度,较高的档位会让他的属性此消彼长。} MaxSwampweed{主角能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。} XPKillOrDefeatBounty{把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。} other{?}}", + "attributeManualTooltip": "{attributeId, select, SuperArmor{该角色在被一击打得踉跄之前还能扛下多少打击。} MaxSuperArmor{霸体值的上限,会随着等级提升和所穿的护甲一起增长。} DamageMultiplier{作用于该角色所受伤害的系数——1 为正常,数值越高越吃痛。} SpeedModifier{该角色移动快慢的系数——1 为正常。} Oxygen{水下剩余的呼吸秒数,归零时该角色就会淹死。} MaxOxygen{该角色能在水下待多少秒,潜水技能可以提高这个上限。} OxygenDepletionRate{潜在水下时每秒消耗掉的空气量。} OxygenRecoveryRate{浮出水面后每秒回来的空气量。} CriticalLevelPercent{剩余空气低到这个比例时,游戏就会发出溺水警告。} SleepTime{还能带来恢复的睡眠小时数,超出之后再睡游戏也不会给任何恢复。} MaxSleepTime{该角色能攒下的有效睡眠时间上限。} SleepTimeRecoveryAmount{每次补充时重新加回来的有效睡眠小时数。} SleepTimeRecoveryPeriod{有效睡眠时间隔多久才会重新补满。} MaxRestTime{游戏允许一次躺在床上的最长时间。} Health_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大生命值比例。} Mana_RecoveryRatePerHourOfSleep{每睡一小时能恢复的最大法力值比例。} Alcohol{该角色醉到什么程度,较高的档位会拿敏捷和法力去换力量。} MaxAlcohol{该角色能达到的最高酒精值。} AlcoholDepletionRate{酒精值往清醒方向回落得有多快。} Swampweed{该角色嗨到什么程度,较高的档位会让其属性此消彼长。} MaxSwampweed{该角色能达到的最高沼泽草值。} SwampweedDepletionRate{沼泽草带来的迷幻劲头消退得有多快。} XPExecutedBounty{在这名角色已经被打倒在地时再将其杀死,所能拿到的经验值。} XPKillOrDefeatBounty{把这名角色打倒时所能拿到的经验值,不管对方是当场毙命还是只被打晕在地。} other{?}}", "knowledgeTypeVoiceLine": "语音台词", "knowledgeTypeOther": "其他", "armorUpgradeUpper": "上部", diff --git a/apps/save-editor/test/features/editor/domain/npc_attributes_test.dart b/apps/save-editor/test/features/editor/domain/npc_attributes_test.dart new file mode 100644 index 000000000..6bcd3ea64 --- /dev/null +++ b/apps/save-editor/test/features/editor/domain/npc_attributes_test.dart @@ -0,0 +1,85 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:goresave/features/editor/domain/hero_attributes.dart'; +import 'package:goresave/features/editor/domain/npc_attributes.dart'; + +Map _row(String setClass, String id) { + final prefix = [ + 'm_GenericData', + '{CharacterStates}', + 'AnyCharacterType', + 'AttributesByGlobalId', + '{NPC-1}', + 'AttributeSetsByClass', + '{$setClass}', + 'Attributes', + '{$id}', + ]; + return { + 'key': id, + 'base': 1.0, + 'current': 1.0, + 'basePath': [...prefix, 'BaseValue'], + 'currentPath': [...prefix, 'CurrentValue'], + }; +} + +void main() { + test('recovers the attribute set class from the typed path', () { + final row = NpcAttributeRow.fromJson( + _row('/Script/G1R.AttributeSet_Fatigue', 'RecoveryRatePerHourOfSleep'), + ); + expect(row.setClass, '/Script/G1R.AttributeSet_Fatigue'); + }); + + test('setClass is null when the path carries no attribute set', () { + final row = NpcAttributeRow.fromJson({ + 'key': 'Health', + 'base': 1.0, + 'current': 1.0, + 'basePath': const ['m_GenericData', 'Whatever'], + 'currentPath': const [], + }); + expect(row.setClass, isNull); + }); + + test('an NPC hides the same derived and unused values the hero does', () { + // The set matters: RecoveryRatePerHourOfSleep is inert on Fatigue (the + // unreachable survival mode) but real on Health and Mana. Filtering by the + // bare id would have taken all three, or none. + final result = NpcAttributesResult.fromJson({ + 'attributes': [ + _row('/Script/G1R.AttributeSet_Fatigue', 'RecoveryRatePerHourOfSleep'), + _row('/Script/G1R.AttributeSet_Health', 'RecoveryRatePerHourOfSleep'), + _row('/Script/G1R.AttributeSet_Mana', 'RecoveryRatePerHourOfSleep'), + _row('/Script/G1R.AttributeSet_Hunger', 'Hunger'), + _row('/Script/G1R.AttributeSet_Strength', 'Critical_OneHand'), + _row('/Script/G1R.AttributeSet_LevelProgression', 'Toughness'), + _row('/Script/G1R.AttributeSet_Health', 'MaxHealth'), + ], + }); + + expect(result.attributes.map((a) => a.setClass?.split('.').last), [ + 'AttributeSet_Health', + 'AttributeSet_Mana', + 'AttributeSet_Health', + ]); + expect(result.attributes.map((a) => a.key), [ + 'RecoveryRatePerHourOfSleep', + 'RecoveryRatePerHourOfSleep', + 'MaxHealth', + ]); + }); + + test('the surviving sleep rates group with Sleep, not Advanced', () { + for (final set in ['AttributeSet_Health', 'AttributeSet_Mana']) { + final row = NpcAttributeRow.fromJson( + _row('/Script/G1R.$set', 'RecoveryRatePerHourOfSleep'), + ); + expect( + heroAttributeGroup(row.key, row.setClass), + HeroAttributeGroup.sleep, + reason: set, + ); + } + }); +} diff --git a/apps/save-editor/test/l10n_arb_coverage_test.dart b/apps/save-editor/test/l10n_arb_coverage_test.dart index 02ade1c4c..346fc76d6 100644 --- a/apps/save-editor/test/l10n_arb_coverage_test.dart +++ b/apps/save-editor/test/l10n_arb_coverage_test.dart @@ -146,6 +146,34 @@ void main() { } } }); + test('attribute tooltips name no particular actor', () { + // The same tooltip is shown for the player AND for a selected NPC, so a + // sentence about "the hero" would claim the wrong thing on an NPC row. + const heroWords = ['hero', 'Held', 'héroe', 'héros', 'eroe', 'bohater']; + final template = _readArb(templateFile); + final english = template['attributeManualTooltip'] as String; + for (final word in heroWords) { + expect( + english.toLowerCase(), + isNot(contains(word.toLowerCase())), + reason: 'attributeManualTooltip must not name the hero', + ); + } + final localeFiles = l10nDirectory.listSync().whereType().where( + (file) => RegExp(r'app_[\w]+\.arb$').hasMatch(file.path), + ); + for (final file in localeFiles) { + final text = (_readArb(file)['attributeManualTooltip'] as String) + .toLowerCase(); + for (final word in heroWords) { + expect( + text, + isNot(contains(word.toLowerCase())), + reason: '${file.path}:attributeManualTooltip names "$word"', + ); + } + } + }); } Map _readArb(File file) =>