feedback5: merge feedback4 (3af5b84) — PRs #186 / #134 / #185 / #24 / #183 ported to the split layout (terrainInfo / TERRAIN_TIPS into a new ui/gameLogic/terrain.js re-exported by the gameLogic.js barrel, closesOnFieldPress into ui/gameLogic/shortcuts.js, the rest in place; 42 strings through t(), #183's 设置 too); golden unchanged
Ported by hand: - public/js/ui/gameLogic.js is a re-export shim on feedback5: #185's TERRAIN_TIPS / terrainInfo went into the new public/js/ui/gameLogic/terrain.js (the barrel gains one re-export line); closesOnFieldPress 'terrain' into ui/gameLogic/shortcuts.js. - i18n (docs/I18N.md): every new user-visible string goes through t() with an English entry in public/i18n/en.json (42, after the 补位 strings): the terrain names / tags / fact table are N_() and translated where terrainInfo hands them out, the mechanism lines are msgids with their numbers as params (a line with an optional half is two whole msgids, the list joins use an array param), the card's 地形机制 / 这一格 titles in ui/detailPanel.js. Official EN terms where the EN client has them (stage_table tileInfo: Active Originium, Mire, Exhaust Grille, Deep Water Zone, Incursion Point, Protection Objective, Tunnel Entry / Exit, High Ground; Camouflage). The Chinese output is byte-identical to feedback4's terrainInfo on all 5187 tiles of the 13 stages and on synthetic stages. - public/js/screens/game.js (MatchScreen still lives there): the import keeps feedback5's names plus terrainInfo / fieldTile; the terrain stage is the one view.setStage gets, so it includes feedback5's fieldStage — a 联防 field is played on its own map (GitHub #41), and a tap there explains that map's tile, not the round stage's. The tileClick handler and render/app.js emitTileClick / ui/fallbackField.js auto-merged in place. terrainInfo reads the stage only, so a 补位 / 自选 board explains its tiles the same way (their pieces only change a piece's art and name). - public/js/ui/detailPanel.js: the terrain branch of resolveDetail before feedback5's stand-in / 自选 helpers. - public/js/screens/title.js (#183): feedback5's LangToggle / t() imports plus GIcon / SettingsModal; the gear button's aria-label / title are t('设置') (en.json already has "Settings"). - tools/fetch-assets.mjs / tools/assets/downloader.mjs: --add-only (keepExisting, the font skip) beside #24's --asset-source / SP_ASSET_SOURCE and the shared MirrorPolicy; feedback5's extraOperators / moduleTypes and the voice plan unchanged. - data/assets.json: feedback5's manifest plus #134's audio.sfx.battle.leak (after heal, the plan order); stats files 6993 → 6994 and bytes +23 240 as measured on feedback4; the hash recomputed with the generator's contentHash (c01aa739a2d3 → 6a547fc5c937). A field-wise JSON diff against feedback5 shows only those four fields. - docs: DESIGN §24 intro and §24.5 / §24.6 as on feedback4 (the rest of DESIGN.md is feedback5's); ASSETS.md, DEPLOY.md, PLAYING.md auto-merged. - Auto-merged and checked: audio.js (the sim still emits ['leak', id], server/sim/battle/deploy.js), render/style.js, textures.js, tiles.js, board3d/materials.js, boardArt.js, tools/assets/*, tools/setup.mjs, extract.py, the tests. Checks: the PRs' unit tests (audio 22, gameLogic 44, terrain-detail 1, originium-art 4, boardart 15, board3d-extract 9, asset-network 21, fetch-assets-shrink 4), i18n 9 / i18n-data 8 / i18n-server 4, client-static 313, docs-consistency 24, kits_layout 6 pass; lint 0 errors (no new warnings), check:imports, typecheck; golden: all 283 scenarios match, nothing regenerated.
This commit is contained in:
commit
7059528c47
40 files changed
+1944
-97
No files matched your search
@@ -880,6 +880,48 @@
|
||||
"{name}的替补": "Stand-in for {name}",
|
||||
"未持有{name}:由替补干员 {standIn} 上场(盟约、特质、阶级与价格不变)": "{name} not owned: the stand-in {standIn} takes the field (Alliances, Attribute, tier and price unchanged)",
|
||||
"未持有的干员由官方指定的替补干员上场:商店、整备区、作战区与结算都显示替补干员(模型、技能、天赋、攻击范围),盟约、特质、阶级、价格与合成仍按原干员。预设干员无论是否持有都由本人上场,不在此列。": "An Operator you do not own takes the field as its official stand-in: the shop, the Bench, the battlefield and the results show the stand-in (model, skills, talents, attack range), while Alliances, Attribute, tier, price and promotion follow the original Operator. Preset Operators always take the field themselves, owned or not, and are not listed.",
|
||||
"活性源石": "Active Originium",
|
||||
"特殊地形": "Special Terrain",
|
||||
"攻击力 +{atk}%": "ATK +{atk}%",
|
||||
"攻击速度 +{aspd}": "ASPD +{aspd}",
|
||||
"部署于其上的我方单位、经过的敌方单位,每秒受到 {dmg} 点真实伤害(无来源)": "Friendly units deployed on it and enemies passing over it take {dmg} True damage per second (sourceless)",
|
||||
"在其上的我方单位与经过的敌方单位持续受到伤害": "Friendly units on it and enemies passing over it take damage over time",
|
||||
"同时获得:{mods}": "They also gain: {mods}",
|
||||
"效果持续 {sec} 秒;离开地块后仍然保留,再次接触会重新计时": "The effect lasts {sec} {sec|second|seconds}; it stays after leaving the tile, and touching it again restarts the timer",
|
||||
"沼泽": "Mire",
|
||||
"留在沼泽里的单位每 {sec} 秒获得 1 层「陷入沼泽」:攻击速度 {aspd},敌方单位还有移动速度 {move}": "Units staying in the Mire gain 1 stack of Mired every {sec} {sec|second|seconds}: ASPD {aspd}, and for enemies also Movement Speed {move}",
|
||||
"留在沼泽里的单位每 {sec} 秒获得 1 层「陷入沼泽」:攻击速度 {aspd}": "Units staying in the Mire gain 1 stack of Mired every {sec} {sec|second|seconds}: ASPD {aspd}",
|
||||
"重量 ≥ {heavy} 的敌人一次获得 2 层": "Enemies with weight ≥ {heavy} gain 2 stacks at a time",
|
||||
"最多 {max} 层;离开沼泽后解除": "Up to {max} {max|stack|stacks}; removed on leaving the Mire",
|
||||
"排气格栅": "Exhaust Grille",
|
||||
"站在排气格栅上的干员不会被敌方的远程攻击选中(效果相当于隐匿)": "An Operator on an Exhaust Grille is not targeted by enemy ranged attacks (the same effect as Camouflage)",
|
||||
"但挡住敌人的干员仍会被它攻击到": "An Operator blocking an enemy can still be attacked by that enemy",
|
||||
"深水区": "Deep Water Zone",
|
||||
"敌人每秒受到 {dmg} 点伤害": "Enemies take {dmg} damage per second",
|
||||
"攻击速度 {aspd}、移动速度 ×{move}": "ASPD {aspd}, Movement Speed ×{move}",
|
||||
"攻击速度 {aspd}": "ASPD {aspd}",
|
||||
"移动速度 ×{move}": "Movement Speed ×{move}",
|
||||
"溺水伤害属于无来源伤害(不吃干员的增伤、穿透与装备加成),也不归类为环境伤害": "Drowning damage is sourceless (no Operator damage bonus, penetration or Equipment bonus applies to it) and does not count as environmental damage",
|
||||
"拒绝部署(特制水上平台可以让这一格变得可部署)": "Refuses deployment (a special water platform makes this tile deployable)",
|
||||
"红门": "Red Gate",
|
||||
"敌方入口": "Incursion Point",
|
||||
"敌方单位从这里出场": "Enemy units enter the battlefield here",
|
||||
"蓝门": "Blue Gate",
|
||||
"保护目标": "Protection Objective",
|
||||
"敌人走进这里会扣你的目标生命值(LP),一回合至多 10 点": "An enemy entering here costs you LP, at most 10 per round",
|
||||
"传送入口": "Tunnel Entry",
|
||||
"敌人走到这里会从场上消失": "Enemies reaching this tile vanish from the battlefield",
|
||||
"传送出口": "Tunnel Exit",
|
||||
"消失的敌人会从这里重新出现": "Vanished enemies reappear here",
|
||||
"可部署": "Deployable",
|
||||
"仅近战位可部署": "Melee deployment only",
|
||||
"仅远程位可部署": "Ranged deployment only",
|
||||
"不可部署": "Not deployable",
|
||||
"高台": "High Ground",
|
||||
"只有空中单位能通过": "Only aerial units can pass",
|
||||
"地面单位可通过": "Ground units can pass",
|
||||
"地形机制": "Terrain Mechanics",
|
||||
"这一格": "This Tile",
|
||||
"全部清空": "Clear All",
|
||||
"清空全部 {n} 个自选名额?": "Clear all {n} Custom Squad {n|slot|slots}?",
|
||||
"文件过大,请选择「导出」下载的自选编队文件": "The file is too large. Choose a Custom Squad file downloaded with \"Export\".",
|
||||
|
||||
Reference in new issue
Block a user