diff --git a/docs/AI-Scripting-and-Mapping.md b/docs/AI-Scripting-and-Mapping.md index 34597e3f09..03ecd5b357 100644 --- a/docs/AI-Scripting-and-Mapping.md +++ b/docs/AI-Scripting-and-Mapping.md @@ -6,8 +6,8 @@ This page describes all AI scripting and mapping related additions and changes i - Script action `Move to cell` now obeys YR cell calculation now. Using `1000 * Y + X` as its cell value. (was `128 * Y + X` as it's a RA1 leftover) - The game now can reads waypoints ranges in [0, 2147483647]. (was [0,701]) -- Map trigger action `41 Play Animation At...` can now create 'non-inert' animations which can play sounds, deal damage and apply `TiberiumChainReaction` if a parameter is set (needs [following changes to `fadata.ini`](Whats-New.md#for-map-editor-final-alert-2). -- Map trigger action `125 Build At...` can now play buildup anim and becomes singleplayer-AI-repairable optionally (needs [following changes to `fadata.ini`](Whats-New.md#for-map-editor-final-alert-2). +- Map trigger action `41 Play Animation At...` can now create 'non-inert' animations which can play sounds, deal damage and apply `TiberiumChainReaction` if a parameter is set (needs [following changes to `fadata.ini`](Whats-New.md#for-map-editor-final-alert-2)). +- Map trigger action `125 Build At...` can now play buildup anim and becomes singleplayer-AI-repairable optionally (needs [following changes to `fadata.ini`](Whats-New.md#for-map-editor-final-alert-2)). - Both Global Variables (`VariableNames` in `rulesmd.ini`) and Local Variables (`VariableNames` in map) are now unlimited. - Script action `Deploy` now has vehicles with `DeploysInto` searching for free space to deploy at if failing to do so at initial location, instead of simply getting stuck. - Teams spawned by trigger action 7,80,107 can use IFV and opentopped logic normally. `InitialPayload` logic from Ares is not supported yet. diff --git a/docs/Fixed-or-Improved-Logics.md b/docs/Fixed-or-Improved-Logics.md index 5606546923..1165249436 100644 --- a/docs/Fixed-or-Improved-Logics.md +++ b/docs/Fixed-or-Improved-Logics.md @@ -18,7 +18,7 @@ This page describes all ingame logics that are fixed or improved in Phobos witho - Fixed building and defense tab hotkeys not enabling the placement mode after `Cannot build here.` triggered and the placement mode cancelled. - Fixed buildings with `UndeployInto` playing `EVA_NewRallypointEstablished` on undeploying. - Fixed buildings with `Naval=yes` ignoring `WaterBound=no` to be forced to place onto water. -- Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` > `AllowParallelAIQueues=no` is set. +- Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` -> `AllowParallelAIQueues=no` is set. - Fixed laser drawing code to allow for thicker lasers in house color draw mode. - Fixed `DeathWeapon` not detonating properly. - Some settings are still ignored like `PreImpactAnim` *(Ares feature)*, this might change in future. @@ -127,7 +127,7 @@ This page describes all ingame logics that are fixed or improved in Phobos witho - Fixed `DeployToFire` not recalculating firer's position on land if it cannot currently deploy. - `Arcing=true` projectile elevation inaccuracy can now be fixed by setting `Arcing.AllowElevationInaccuracy=false`. - Wall overlays are now drawn with the custom palette defined in `Palette` in `artmd.ini` if possible. -- `Secondary` will now be used against walls if `Primary` weapon Warhead has `Wall=false`, `Secondary` has `Wall=true` and the firer does not have `NoSecondaryWeaponFallback` set to true. +- If `[CombatDamage]`->`AllowWeaponSelectAgainstWalls` is set to true, `Secondary` will now be used against walls if `Primary` weapon Warhead has `Wall=false`, `Secondary` has `Wall=true` and the firer does not have `NoSecondaryWeaponFallback` set to true. - Setting `ReloadInTransport` to true on units with `Ammo` will allow the ammo to be reloaded according to `Reload` or `EmptyReload` timers even while the unit is inside a transport. - It is now possible to enable `Verses` and `PercentAtMax` to be applied on negative damage by setting `ApplyModifiersOnNegativeDamage` to true on the Warhead. - Attached animations on flying units now have their layer updated immediately after the parent unit, if on same layer they always draw above the parent. @@ -1681,7 +1681,7 @@ DropPod.AtmosphereEntry = ; anim, default to [AudioVisual]->AtmosphereEntry DropPod.GroundAnim = ; 2 anims, default to [General]->DropPod DropPod.AirImage = ; SHP file, the pod's shape, default to POD DropPod.Height = ; int, default to [General]->DropPodHeight -DropPod.Puff = ; anim, default to [General]->DropPodPuff +DropPod.Puff = ; anim, default to [AudioVisual]->DropPodPuff DropPod.Speed = ; int, default to [General]->DropPodSpeed DropPod.Trailer = ; anim, default to [General]->DropPodTrailer, which by default is SMOKEY DropPod.Trailer.Attached = ; boolean, default to no @@ -1689,3 +1689,7 @@ DropPod.Trailer.SpawnDelay = ; int, number of frames between each spawn of Drop DropPod.Weapon = ; weapon, default to [General]->DropPodWeapon DropPod.Weapon.HitLandOnly = ; boolean, default to no ``` + +```{note} +`[General]` -> `DropPodTrailer`is [Ares features](https://ares-developers.github.io/Ares-docs/new/droppod.html). +``` diff --git a/docs/Whats-New.md b/docs/Whats-New.md index db80641369..c8c77310d2 100644 --- a/docs/Whats-New.md +++ b/docs/Whats-New.md @@ -21,6 +21,7 @@ You can use the migration utility (can be found on [Phobos supplementaries repo] #### From post-0.3 devbuilds +- Selecting weapons other than primary against walls based on `Wall=true` on Warhead etc. now requires `[CombatDamage]`->`AllowWeaponSelectAgainstWalls` to be set to true first. - Lunar theater tileset parsing unhardcoding is now only applied if `lunarmd.ini` has `[General]` -> `ApplyLunarFixes` set to true. - `Units.DisableRepairCost` was changed to `Units.UseRepairCost` (note inverted expected value) as it no longer has discrete default value and affects `Hospital=true` buildings, infantry do not have repair cost by default. - Critical hit animations created by `Crit.AnimOnAffectedTargets=true` Warheads no longer default to `AnimList.PickRandom` if `Crit.AnimList.PickRandom` is not set. @@ -439,7 +440,7 @@ New: - Revenge weapon (by Starkku) - AttachEffect types with new features like custom tint and weapon range modifier (by Starkku) - Force shield effect sync on deploy & vs. organic targets effect customization to complement the Iron Curtain ones (by Starkku) -- Map trigger action 41 (Play animation at waypoint) now uses additional parameter to determine if animation can play sound, deal damage etc. (by Starkku) +- Map trigger action `41 Play Animation At...` now uses additional parameter to determine if animation can play sound, deal damage etc. (by Starkku) - Allow restricting how many times per frame a single radiation site can damage a building (by Starkku) - Allow explicitly setting the superweapons AI uses for Chronoshift script actions (by Starkku) - Allow customizing Aircraft weapon strafing regardless of `ROT` and `Strafing.Shots` values beyond 5 (by Trsdy) @@ -787,7 +788,7 @@ Vanilla fixes: - Fixed the bug when reading a map which puts `Preview(Pack)` after `Map` lead to the game fail to draw the preview (by secsome) - Fixed the bug that GameModeOptions are not correctly saved (by secsome) - Fixed the bug that AITriggerTypes do not recognize building upgrades (by Uranusian) -- Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` > `AllowParallelAIQueues=no` is set (by FS-21) +- Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` -> `AllowParallelAIQueues=no` is set (by FS-21) - Fixed the bug when occupied building's `MuzzleFlashX` is drawn on the center of the building when `X` goes past 10 (by Otamaa) - Fixed jumpjet units that are `Crashable` not crashing to ground properly if destroyed while being pulled by a `Locomotor` warhead (by Starkku) - Fixed aircraft & jumpjet units not being affected by speed modifiers (by Starkku) diff --git a/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po b/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po index c31b47a359..17b4027eb4 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po +++ b/docs/locale/zh_CN/LC_MESSAGES/AI-Scripting-and-Mapping.po @@ -46,7 +46,7 @@ msgstr "路径点的范围由[0,701]扩展到[0, 2147483647]。" msgid "" "Map trigger action `125 Build At...` can now play buildup anim optionally" " (needs [following changes to `fadata.ini`](Whats-New.md#for-map-editor-" -"final-alert-2)." +"final-alert-2))." msgstr "地图触发动作`125 将建筑建造于...`现在可以设置是否播放建造动画(需要[下述设置](Whats-New.md#for-map-editor-final-alert-2))。" #: ../AI-Scripting-and-Mapping.md:10 diff --git a/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po b/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po index 3af2df7225..f50dabc991 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po +++ b/docs/locale/zh_CN/LC_MESSAGES/Fixed-or-Improved-Logics.po @@ -92,9 +92,9 @@ msgstr "修复了`Naval=yes`会无视`WaterBound=no`强制将建筑限制在水 #: ../Fixed-or-Improved-Logics.md:17 msgid "" -"Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` > " +"Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` -> " "`AllowParallelAIQueues=no` is set." -msgstr "修复了AI的飞机停机坪在Ares标签`[GlobalControls]` > `AllowParallelAIQueues=no`时有bug的问题。" +msgstr "修复了AI的飞机停机坪在Ares标签`[GlobalControls]` -> `AllowParallelAIQueues=no`时有bug的问题。" #: ../Fixed-or-Improved-Logics.md:18 msgid "" @@ -216,10 +216,10 @@ msgstr "路径点上限由702增加至2147483647。" msgid "" "Map trigger action `125 Build At...` can now play buildup anim optionally" " (needs [following changes to `fadata.ini`](Whats-New.md#for-map-editor-" -"final-alert-2)." +"final-alert-2))." msgstr "" -"地图触发动作`125将建筑建造于...`现在可选是否播放建造动画 (需要[自行修改`fadata.ini`](Whats-New.md#for-" -"map-editor-final-alert-2)。" +"地图触发动作`125将建筑建造于...`现在可选是否播放建造动画 (需要[自行修改`fadata.ini`](Whats-New.md#for-" +"map-editor-final-alert-2))。" #: ../Fixed-or-Improved-Logics.md:41 msgid "" diff --git a/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po b/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po index ecc4d6136c..30d3879ad8 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po +++ b/docs/locale/zh_CN/LC_MESSAGES/Whats-New.po @@ -621,9 +621,9 @@ msgstr "修复了AITriggerTypes不能正确识别建筑升级的问题 (by Uranu #: ../Whats-New.md:341 msgid "" -"Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` > " +"Fixed AI Aircraft docks bug when Ares tag `[GlobalControls]` -> " "`AllowParallelAIQueues=no` is set (by FS-21)" -msgstr "修复了AI停机坪bug当`[GlobalControls]` > `AllowParallelAIQueues=no`时 (by FS-21)" +msgstr "修复了AI停机坪bug当`[GlobalControls]` -> `AllowParallelAIQueues=no`时 (by FS-21)" #: ../Whats-New.md:342 msgid "" diff --git a/docs/locale/zh_CN/LC_MESSAGES/index.po b/docs/locale/zh_CN/LC_MESSAGES/index.po index 85ab96d486..a18ad24932 100644 --- a/docs/locale/zh_CN/LC_MESSAGES/index.po +++ b/docs/locale/zh_CN/LC_MESSAGES/index.po @@ -1,459 +1,543 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2021, The Phobos Contributors -# This file is distributed under the same license as the Phobos package. -# FIRST AUTHOR , 2021. -# -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Phobos \n" +"Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-08-01 11:42+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2025-02-07 10:03+0800\n" +"PO-Revision-Date: 2025-02-07 13:02+0800\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: zh\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" +"X-Generator: Poedit 3.5\n" +"X-Poedit-Basepath: .\n" -#: ../index.md:1 +#: ../../index.md:1 msgid "General Info" msgstr "概况" -#: ../index.md:1 +#: ../../index.md:1 msgid "What's New" -msgstr "新东西" +msgstr "最新消息" -#: ../index.md:1 +#: ../../index.md:1 msgid "Contributing" msgstr "贡献" -#: ../../README.md:76 ../index.md:1 +#: ../../README.md:90 ../../index.md:1 msgid "Credits" -msgstr "工作人员名单表" +msgstr "鸣谢" -#: ../index.md:1 +#: ../../index.md:1 msgid "License" msgstr "许可证" -#: ../index.md:1 +#: ../../index.md:1 msgid "Project Info" msgstr "项目信息" -#: ../index.md:11 +#: ../../index.md:11 msgid "New / Enhanced Logics" msgstr "新增或增强的逻辑" -#: ../index.md:11 +#: ../../index.md:11 msgid "Fixed / Improved Logics" msgstr "修复或改进的逻辑" -# :../index.md:11 -#: ../index.md:11 +#: ../../index.md:11 msgid "AI Scripting and Mapping" msgstr "触发和动作脚本" -#: ../index.md:11 +#: ../../index.md:11 msgid "User Interface" -msgstr "用户界面" +msgstr "用户界面特性" -#: ../index.md:11 +#: ../../index.md:11 msgid "Miscellanous" -msgstr "杂项" +msgstr "杂项内容" -#: ../index.md:11 +#: ../../index.md:11 msgid "Extension Documentation" -msgstr "扩展说明书" +msgstr "扩展文档" -#: ../../README.md:1 +#: ../../README.md:2 msgid "![Phobos YR Engine Extension](logo.png)" msgstr "" -#: ../../README.md:1 +#: ../../README.md:2 msgid "Phobos YR Engine Extension" -msgstr "火卫一尤里的复仇引擎扩展" +msgstr "火卫一——尤里的复仇引擎扩展" -#: ../../README.md:3 +#: ../../README.md:4 msgid "" "[![Github All Releases](https://img.shields.io/github/downloads/Phobos-" -"developers/Phobos/total.svg)](https://github.com/Phobos-" -"developers/Phobos/releases) [![Docs " -"status](https://readthedocs.org/projects/phobos/badge/?version=latest)](https://phobos.readthedocs.io/en/latest/?badge=latest)" -" [![Workflow](https://img.shields.io/github/workflow/status/Phobos-" -"developers/Phobos/Nightly%20Build.svg)](https://github.com/Phobos-" +"developers/Phobos/total.svg)](https://github.com/Phobos-developers/Phobos/" +"releases) [![Docs status](https://readthedocs.org/projects/phobos/badge/?" +"version=latest)](https://phobos.readthedocs.io/en/latest/?badge=latest) [!" +"[Workflow](https://img.shields.io/github/actions/workflow/status/Phobos-" +"developers/Phobos/nightly.yml?branch=develop)](https://github.com/Phobos-" "developers/Phobos/actions) [![EditorConfig](https://github.com/Phobos-" -"developers/Phobos/workflows/EditorConfig/badge.svg)](https://github.com" -"/Phobos-developers/Phobos/actions?query=workflow%3AEditorConfig) " -"[![license](https://img.shields.io/github/license/Phobos-" -"developers/Phobos.svg)](https://www.gnu.org/licenses/lgpl-3.0.en.html)" +"developers/Phobos/workflows/EditorConfig/badge.svg)](https://github.com/" +"Phobos-developers/Phobos/actions?query=workflow%3AEditorConfig) [![license]" +"(https://img.shields.io/github/license/Phobos-developers/Phobos.svg)]" +"(https://www.gnu.org/licenses/lgpl-3.0.en.html)" msgstr "" - -#: ../../README.md:3 +"[![Github 所有发布版本](https://img.shields.io/github/downloads/Phobos-" +"developers/Phobos/total.svg)](https://github.com/Phobos-developers/Phobos/" +"releases) [![文档状态](https://readthedocs.org/projects/phobos/badge/?" +"version=latest)](https://phobos.readthedocs.io/en/latest/?badge=latest) [![工" +"作流程](https://img.shields.io/github/actions/workflow/status/Phobos-" +"developers/Phobos/nightly.yml?branch=develop)](https://github.com/Phobos-" +"developers/Phobos/actions) [![编辑器配置](https://github.com/Phobos-" +"developers/Phobos/workflows/EditorConfig/badge.svg)](https://github.com/" +"Phobos-developers/Phobos/actions?query=workflow%3AEditorConfig) [![许可证]" +"(https://img.shields.io/github/license/Phobos-developers/Phobos.svg)]" +"(https://www.gnu.org/licenses/lgpl-3.0.en.html)" + +#: ../../README.md:4 msgid "Github All Releases" -msgstr "" +msgstr "GitHub 所有发布版本" -#: ../../README.md:3 +#: ../../README.md:4 msgid "Docs status" -msgstr "" +msgstr "文档状态" -#: ../../README.md:3 +#: ../../README.md:4 msgid "Workflow" -msgstr "" +msgstr "工作流程" -#: ../../README.md:3 +#: ../../README.md:4 msgid "EditorConfig" -msgstr "" +msgstr "编辑器配置" -#: ../../README.md:3 +#: ../../README.md:4 msgid "license" +msgstr "许可证" + +#: ../../README.md:10 +msgid "" +"**Warning** The project is currently not maintained actively enough and thus " +"we are looking for active maintainers at the moment. Please message us [in " +"Discord channel](https://discord.gg/sZeMzz6qVg) (or PM Kerbiter directly)." msgstr "" +"**警告** 项目目前的维护工作不够积极,因此我们正在寻找积极的维护者。请在 " +"[Discord 频道](https://discord.gg/sZeMzz6qVg) 留言给我们(或直接 PM " +"Kerbiter)。" -#: ../../README.md:9 +#: ../../README.md:13 msgid "Phobos" msgstr "火卫一" -#: ../../README.md:10 +#: ../../README.md:15 msgid "" -"...is a community engine extension project providing a set of new " -"features and fixes for Yuri's Revenge based on [modified " -"YRpp](https://github.com/Metadorius/YRpp) and " -"[Syringe](https://github.com/Ares-Developers/Syringe) to allow injecting " -"code. It's meant to accompany [Ares](https://github.com/Ares-" -"Developers/Ares) rather than replace it, thus it won't introduce " +"...is a community engine extension project providing a set of new features " +"and fixes for Yuri's Revenge based on [modified YRpp](https://github.com/" +"Metadorius/YRpp) and [Syringe](https://github.com/Ares-Developers/Syringe) " +"to allow injecting code. It's meant to accompany [Ares](https://github.com/" +"Ares-Developers/Ares) rather than replace it, thus it won't introduce " "incompatibilities." msgstr "" -"...(Phobos,福波斯)是一个还在开发中的基于[自定义 " -"YRpp](https://github.com/Metadorius/YRpp)与[注射器](https://github.com/Ares-" -"Developers/Syringe)的社区项目,旨在为尤里的复仇提供一些新功能或修复bug。这意味着它可以与[战神 " -"(Ares,火星,阿瑞斯)](https://github.com/Ares-" -"Developers/Ares)平台共同使用,而非替代,也因此并不会产生不兼容性。" +"...社区引擎扩展项目,基于[修改后的 YRpp](https://github.com/Metadorius/YRpp)" +"与[Syringe](https://github.com/Ares-Developers/Syringe)为《尤里的复仇》提供一" +"系列新功能和Bug修复。它旨在与[Ares](https://github.com/Ares-Developers/Ares)" +"引擎配套使用,而非取而代之,因此不会带来不兼容问题。" -#: ../../README.md:12 +#: ../../README.md:17 msgid "" -"While Phobos is independent of Ares and does NOT require Ares " -"specifically to function, Phobos complements some of the features found " -"in Ares and vice versa." -msgstr "尽管火卫一独立于/不需要Ares平台即可生效,火卫一仍完善了一些Ares中的功能,反之亦然。" +"While Phobos is independent of Ares and does NOT require Ares specifically " +"to function, Phobos complements some of the features found in Ares and vice " +"versa." +msgstr "" +"虽然火卫一独立于Ares并且不需要Ares即可运行,但火卫一补充了Ares的一些功能,反" +"之亦然。" -#: ../../README.md:14 +#: ../../README.md:19 +msgid "Community" +msgstr "社区" + +#: ../../README.md:22 +msgid "" +"As the project is international and English is currently studied the most " +"commonly as a second language, it's the main project language. We do not " +"limit the creation of language-specific community groups though, because we " +"understand that many may not know English as well as their native language " +"and/or may have trouble accessing Discord." +msgstr "" +"由于该项目是国际性的,而英语是目前最常用的第二语言,因此英语是该项目的主要语" +"言。 但我们并不限制创建特定语言的社区群组,因为我们知道很多人的英语可能不如母" +"语好,而且/或者在访问 Discord 时可能会遇到困难。" + +#: ../../README.md:24 msgid "" -"You can discuss the project at a dedicated [channel on C&C Mod " -"Haven](https://discord.gg/sZeMzz6qVg)." -msgstr "你可以在Discord的[C&C Mod Haven](https://discord.gg/sZeMzz6qVg)服务器中的特定频道讨论此平台。" +"**[🌐 International Discord channel on C&C Mod Haven](https://discord.gg/" +"sZeMzz6qVg)**" +msgstr "" +"**[🌐C&C Mod Haven 的国际 Discord频道](https://discord.gg/sZeMzz6qVg)**" -#: ../../README.md:16 +#: ../../README.md:25 +msgid "" +"[🇨🇳 Chinese QQ Phobos group / Phobos 中文用户QQ群 (630590659)](http://qm.qq." +"com/cgi-bin/qm/qr?_wv=1027&k=f_h7TZoVX_8--" +"ZedVFBMmjRrLBIzjMKJ&authKey=QfNyW4DZUFqL3ZKzGL5PgLUWTnISj0myWn4WGtPPQmi3F%2FP3vfnuBd3YjLFk%2BU94&noverify=0&group_code=630590659)" +msgstr "" +"[Phobos 中文用户QQ群 (630590659)](http://qm.qq.com/cgi-bin/qm/qr?" +"_wv=1027&k=f_h7TZoVX_8--" +"ZedVFBMmjRrLBIzjMKJ&authKey=QfNyW4DZUFqL3ZKzGL5PgLUWTnISj0myWn4WGtPPQmi3F%2FP3vfnuBd3YjLFk%2BU94&noverify=0&group_code=630590659)" + +#: ../../README.md:27 msgid "Downloads" msgstr "下载" -#: ../../README.md:19 +#: ../../README.md:30 msgid "You can choose one of the following:" -msgstr "你可以选择以下方式:" +msgstr "你可以选择下列方式" -#: ../../README.md:20 +#: ../../README.md:31 msgid "" -"[Latest stable branch build](https://github.com/Phobos-" -"developers/Phobos/releases/latest) (most bug-free release but very slow " -"on new features)" +"[Latest stable branch build](https://github.com/Phobos-developers/Phobos/" +"releases/latest) (most bug-free release but very slow on new features)" msgstr "" -"[最新的稳定分支版本](https://github.com/Phobos-developers/Phobos/releases/latest) " -"(Bug最少的发布版,但新功能缓慢)" +"[最新的稳定发布版本](https://github.com/Phobos-developers/Phobos/releases/" +"latest) (Bug最少的版本,但功能更新上非常缓慢)" -#: ../../README.md:21 +#: ../../README.md:32 msgid "" -"[Latest development branch builds](https://github.com/Phobos-" -"developers/Phobos/releases) (a bit less bug-free releases, devbuilds get " -"new features when they are finished)" +"[Latest development branch builds](https://github.com/Phobos-developers/" +"Phobos/releases) (a bit less bug-free releases, devbuilds get new features " +"when they are finished)" msgstr "" "[最新的开发分支版本](https://github.com/Phobos-developers/Phobos/releases) " -"(Bug较少的开发版本,拥有完成后的新功能)" +"(Bug相对较少的版本,开发构建会在新功能**完成后**立即更新)" -#: ../../README.md:22 +#: ../../README.md:33 msgid "" -"[Latest development branch nightly](https://nightly.link/Phobos-" -"developers/Phobos/blob/develop/.github/workflows/nightly.yml) (added " -"unreleased features that will be in next devbuild)" +"[Latest development branch nightly](https://nightly.link/Phobos-developers/" +"Phobos/blob/develop/.github/workflows/nightly.yml) (added unreleased " +"features that will be in next devbuild)" msgstr "" -"[最新的开发分支生成](https://nightly.link/Phobos-" -"developers/Phobos/blob/develop/.github/workflows/nightly.yml) " -"(有许多会在下一个开发版本中加入的未发布功能)" +"[最新的每夜构建版本](https://nightly.link/Phobos-developers/Phobos/blob/" +"develop/.github/workflows/nightly.yml) (添加了尚未发布的功能,这些功能将在下" +"一个开发分支版本中推出)" -#: ../../README.md:23 +#: ../../README.md:34 msgid "" "Individual new feature nightly builds for testing can be found in [pull " "requests](https://github.com/Phobos-developers/Phobos/pulls)" -msgstr "独立的新逻辑可以在其对应的[拉取请求](https://github.com/Phobos-developers/Phobos/pulls)中找到" +msgstr "" +"用于测试单个新功能的每夜构建可在[拉取请求](https://github.com/Phobos-" +"developers/Phobos/pulls)中找到" -#: ../../README.md:25 +#: ../../README.md:36 msgid "Note on nightly builds" -msgstr "每日生成须知" +msgstr "关于每夜构建版本的说明" -#: ../../README.md:27 +#: ../../README.md:38 msgid "" -"Last two listed versions are bleeding edge (don't redistribute them " -"outside of testing!) and have build information (commit and branch/tag) " -"in them which is displayed ingame and can't be turned off. You can get a " -"build for development branch (link above) any up-to-date pull request via" -" an automatic bot comment that would appear in it and would contain the " -"most recent successfully compiled version of Phobos for that feature " -"branch. Please note that the build is produced *only if the PR has no " -"merge conflicts*. Alternatively, you can get an artifact manually from " -"GitHub Actions runs. You can get an artifact for a specific commit which " -"is built automatically with a GitHub Actions workflow, just press on a " -"green tick, open the workflow, find and download the build artifact. This" -" is limited to authorized users only." -msgstr "" -"上列后两个版本是最最前沿的(因此不要在测试之外使用它们!)并且其中包含生成信息(提交和分支/标签),这些信息在游戏中常驻显示并且无法关闭。你可以通过任何最新的拉取请求中的自动注释获取其开发分支生成(上面的链接),该注释将包含该功能分支的最新成功编译的火卫一版本。此外,你也可以从" -" GitHub Actions 运行手动获取工件。你可以获得通过 GitHub Actions " -"工作流自动生成的特定提交的工件,只需点击绿色勾,打开工作流,找到并下载生成工件,仅限注册用户。" - -#: ../../README.md:29 +"Last two listed versions are bleeding edge (don't redistribute them outside " +"of testing!) and have build information (commit and branch/tag) in them " +"which is displayed ingame and can't be turned off. You can get a build for " +"development branch (link above) any up-to-date pull request via an automatic " +"bot comment that would appear in it and would contain the most recent " +"successfully compiled version of Phobos for that feature branch. Please note " +"that the build is produced *only if the PR has no merge conflicts*. " +"Alternatively, you can get an artifact manually from GitHub Actions runs. " +"You can get an artifact for a specific commit which is built automatically " +"with a GitHub Actions workflow, just press on a green tick, open the " +"workflow, find and download the build artifact. This is limited to " +"authorized users only." +msgstr "" +"后两个版本是前瞻版本(不要在测试之外重新分发它们!),并且在游戏中显示了版本" +"构建信息(提交和分支/标签),无法关闭。你可以通过自动机器人的评论获取任何最新" +"拉取请求的开发分支版本(上面的链接),这些评论会出现在对应页面中,并包含该分" +"支最新一次成功编译的 Phobos 版本。此外,你可以手动从 GitHub Actions 运行中获" +"取工件。你可以获取一个通过 GitHub Actions 工作流自动构建的特定提交的工件,只" +"需要点击绿色对钩,打开工作流,找到并下载工件。这仅限于注册用户。" + +#: ../../README.md:40 msgid "Installation and Usage" -msgstr "安装与使用" +msgstr "安装和使用" -#: ../../README.md:32 +#: ../../README.md:43 msgid "" -"If you don't have Syringe installed into your mod already, you can " -"download it together with the [latest Ares " -"package](https://launchpad.net/ares/+download). To install simply drop " -"`Syringe.exe` into your game folder (where your `gamemd.exe` is located)." -" It's highly recommended to **install Ares** too to get full Phobos " -"feature set, just drop all the files from the archive except " -"documentation folder into your game folder." -msgstr "如果你的mod尚未安装注射器,可以与[最新版的Ares包](https://launchpad.net/ares/+download)一同下载。只需将`Syringe.exe`拖入游戏根目录(即`gamemd.exe`所在的目录)。十分推荐**安装Ares**以得到完整的火卫一功能集,只需要把刚刚下载的文件中除了说明书以外的所有东西拖入游戏根目录即可。" +"If you don't have Syringe installed into your mod already, you can download " +"it together with the [latest Ares package](https://launchpad.net/ares/" +"+download). To install simply drop `Syringe.exe` into your game folder " +"(where your `gamemd.exe` is located). It's highly recommended to **install " +"Ares** too to get full Phobos feature set, just drop all the files from the " +"archive except documentation folder into your game folder." +msgstr "" +"如果您的 mod 中还没有安装 Syringe,可以连同[最新版Ares软件包](https://" +"launchpad.net/ares/+download)一同下载。安装时,只需将`Syringe.exe`拖入游戏根" +"目录(即您的`gamemd.exe`所在的位置)。强烈建议同时**安装 Ares** 以获得完整的 " +"Phobos 功能体验,只需将压缩包中除`Documentation`目录之外的所有文件放入游戏根" +"目录即可。" -#: ../../README.md:33 +#: ../../README.md:44 msgid "" -"Obtain a Phobos \"package\" (official builds can be found on [releases " -"page](https://github.com/Phobos-developers/Phobos/releases); read below " -"to learn how to get nightly builds). You should end up with two files: " -"`Phobos.dll` and `Phobos.pdb`." -msgstr "获得一个火卫一“包”(官方版本可以在发布页面上找到;阅读下面的内容以了解如何获得每日生成)。你应该会得到两个文件:`Phobos.dll`和`Phobos.pdb`。" +"Obtain a Phobos \"package\" (official builds can be found on [releases page]" +"(https://github.com/Phobos-developers/Phobos/releases); read below to learn " +"how to get nightly builds). You should end up with two files: `Phobos.dll` " +"and `Phobos.pdb`." +msgstr "" +"获取 Phobos “软件包”(可在[发布页面](https://github.com/Phobos-developers/" +"Phobos/releases)找到官方构建版;阅读下文了解如何获取每夜构建版本)。最终会生" +"成两个文件:`Phobos.dll`和`Phobos.pdb`。" -#: ../../README.md:34 -msgid "Place those files in the game folder (where your `gamemd.exe` is located)." -msgstr "将这些文件放置在游戏根目录中。" +#: ../../README.md:45 +msgid "" +"Place those files in the game folder (where your `gamemd.exe` is located)." +msgstr "将这些文件放入游戏根目录(即您的`gamemd.exe`所在的位置)。" -#: ../../README.md:35 +#: ../../README.md:46 msgid "" -"To launch the game with Phobos (and all other installed Syringe-" -"compatible engine extensions including Ares) you need to execute " -"`Syringe.exe \"gamemd.exe\" [command line arguments for gamemd.exe]` in " -"command line (omit arguments if you don't need any). `RunAres.bat` from " -"Ares package does the same so you may use that as well." +"To launch the game with Phobos (and all other installed Syringe-compatible " +"engine extensions including Ares) you need to execute `Syringe.exe \"gamemd." +"exe\" [command line arguments for gamemd.exe]` in command line (omit " +"arguments if you don't need any). `RunAres.bat` from Ares package does the " +"same so you may use that as well." msgstr "" -"要使用火卫一(及所有其他已安装的Syringe兼容引擎扩展,包括 Ares)启动游戏,您需要在命令行中执行`Syringe.exe " -"\"gamemd.exe\" " -"[gamemd.exe的命令行参数]`(如果不需要,请省略参数)。Ares包中的`RunAres.bat`执行相同的操作,因此也可以直接使用它。" +"要使用 Phobos(以及所有其他已安装且兼容的 Syringe 拓展引擎,包括 Ares)启动游" +"戏,你需要在命令行中执行 `Syringe.exe \"gamemd.exe\" [gamemd.exe 的命令行参" +"数]`(如果不需要参数,请省略)。Ares 软件包中的`RunAres.bat`也有相同的功能," +"因此也可以使用。" -#: ../../README.md:37 +#: ../../README.md:48 msgid "" "If you already use Ares in your mod, you just need to drop Phobos files " -"mentioned above in your game folder, Syringe will load Phobos " -"automatically. This also applies to mods using XNA client with Syringe; " -"if your mod doesn't use Syringe and Ares (or you just haven't set up the " -"client) yet we recommend to use [CnCNet client mod base by " -"Starkku](https://github.com/Starkku/cncnet-client-mod-base) which is " -"compatible with Ares and Phobos out of the box." +"mentioned above in your game folder, Syringe will load Phobos automatically. " +"This also applies to mods using XNA client with Syringe; if your mod doesn't " +"use Syringe and Ares (or you just haven't set up the client) yet we " +"recommend to use [CnCNet client mod base by Starkku](https://github.com/" +"Starkku/cncnet-client-mod-base) which is compatible with Ares and Phobos out " +"of the box." msgstr "" -"如果你的mod已经使用了Ares,那么直接将上文提到的火卫一文件拖入游戏根目录即可,注射器会自动载入火卫一。这也适用于使用XNA客户端和注射器的mod;如果你的mod没有使用注射器和Ares(或者只是尚未设置客户端),我们建议您使用" -" [Starkku的CnCNet客户端mod基础](https://github.com/Starkku/cncnet-client-mod-" -"base),它开箱即用且与Ares和火卫一兼容。" +"如果您已经在 mod 中使用了 Ares,只需将上述 Phobos 文件放到游戏根目录中," +"Syringe 就会自动加载 Phobos。这也适用于使用 XNA 客户端和 Syringe 的 mod;如果" +"您的 mod 尚未使用 Syringe 和 Ares(或者您尚未设置客户端),我们建议您使用 " +"[Starkku 的 CnCNet 客户端 mod 基底](https://github.com/Starkku/cncnet-client-" +"mod-base),它与 Ares 和 Phobos 兼容并且开袋即食。" -#: ../../README.md:39 +#: ../../README.md:50 msgid "" "Additional files and tools that you may need are located at [Phobos " -"supplementaries repo](https://github.com/Phobos-" -"developers/PhobosSupplementaries)." +"supplementaries repo](https://github.com/Phobos-developers/" +"PhobosSupplementaries)." msgstr "" -"可能会用到的其他的文件与工具在[火卫一组件库](https://github.com/Phobos-" -"developers/PhobosSupplementaries)中。" +"您可能用到的其他文件与工具位于 [Phobos 补充资源库](https://github.com/Phobos-" +"developers/PhobosSupplementaries)。" -#: ../../README.md:41 +#: ../../README.md:52 msgid "" "By default Phobos doesn't do any very noticeable changes except a few " "bugfixes. To learn how to use Phobos features head over to official " "documentation." -msgstr "默认情况下,除了一些错误修正外,火卫一不会做任何非常明显的变化。要了解如何使用火卫一功能,请访问官方说明书。" +msgstr "" +"在默认情况下 Phobos 不会做任何非常明显的更改,除了一些错误修复。要了解如何使" +"用 Phobos 功能,请访问官方文档。" -#: ../../README.md:43 +#: ../../README.md:54 msgid "Documentation" -msgstr "说明书" +msgstr "文档" -#: ../../README.md:46 +#: ../../README.md:57 msgid "" -"[Official docs](https://phobos.readthedocs.io) (also available in " -"[Chinese](https://phobos.readthedocs.io/zh_CN/latest))" +"[Official docs](https://phobos.readthedocs.io) (also available in [Chinese]" +"(https://phobos.readthedocs.io/zh_CN/latest))" msgstr "" -"[官方说明书](https://phobos.readthedocs.io/zh_CN/latest) " -"(也支持[英文](https://phobos.readthedocs.io))" +"[官方文档](https://phobos.readthedocs.io/zh_CN/latest) (也支持 [英文]" +"(https://phobos.readthedocs.io))" -#: ../../README.md:48 +#: ../../README.md:59 msgid "" -"You can switch between versions (displays latest develop nightly version " -"by default) in the bottom left corner, as well as download a PDF version." -msgstr "您可以在左下角进行版本间(默认显示最新的开发分支生成)的切换,也可以下载PDF版本。" +"You can switch between versions (displays latest develop nightly version by " +"default) in the bottom left corner, as well as download a PDF version." +msgstr "" +"您可以在左下角切换版本(默认显示最新开发的每夜构建版本),也可以下载 PDF 版" +"本。" -#: ../../README.md:50 +#: ../../README.md:61 msgid "" -"The documentation is split by a few major categories, each represented " -"with a page on the sidebar. Each page has its contents grouped into " -"multiple subcategories, be it buildings, technotypes, infantries, " -"superweapons or something else." -msgstr "本说明书分为几个主要大类,分别列在侧边栏上,每类一页。每页中的内容分为一些子类,如建筑,科技类型,步兵,超级武器等等。" +"The documentation is split by a few major categories, each represented with " +"a page on the sidebar. Each page has its contents grouped into multiple " +"subcategories, be it buildings, technotypes, infantries, superweapons or " +"something else." +msgstr "" +"文档分为几个大类,每类在侧边栏上都有一个页面。每个页面的内容又分为多个子类" +"别,包括建筑、科技类型、步兵、超级武器或其他。" -#: ../../README.md:52 +#: ../../README.md:63 msgid "How to read code snippets" msgstr "如何阅读代码片段" -#: ../../README.md:65 +#: ../../README.md:79 msgid "Building manually" msgstr "手动生成" -#: ../../README.md:68 +#: ../../README.md:82 msgid "" -"Install **Visual Studio** (2019 is recommended, 2017 is minimum) with the" -" dependencies listed in `.vsconfig` (it will prompt you to install " -"missing dependences when you open the project, or you can run VS " -"installer and import the config). If you prefer to use **Visual Studio " -"Code** you may install **VS Build Tools** with the dependencies from " -"`.vsconfig` instead. Not using a code editor or IDE and building via " -"**command line scripts** included with the project is also an option." +"Install **Visual Studio** (2022 is recommended, 2019 is minimum) with the " +"dependencies listed in `.vsconfig` (it will prompt you to install missing " +"dependences when you open the project, or you can run VS installer and " +"import the config). If you prefer to use **Visual Studio Code** you may " +"install **VS Build Tools** with the dependencies from `.vsconfig` instead. " +"Not using a code editor or IDE and building via **command line scripts** " +"included with the project is also an option." msgstr "" -"使用`.vsconfig`中列出的依赖项安装**Visual " -"Studio**(建议2019,最低为2017)(打开项目时会提示安装缺少的依赖项,也可以运行VS安装程序并导入配置)。如果你更喜欢使用**Visual" -" Studio Code**,也可以使用`.vsconfig`中的内容安装**VS Build " -"Tools**。你也可以不使用任何代码编辑器或IDE,并通过项目中包含的命令行脚本进行构建。" +"使用`.vsconfig`中列出的依赖项安装 **Visual Studio** (建议安装2022版,最低安" +"装2019版)(打开项目时会提示安装缺失的依赖项,也可以运行 VS 安装程序并导入配" +"置)。如果您更喜欢使用 **Visual Studio Code**,也可以使用`.vsconfig`中的依赖" +"项安装 **VS Build Tools**。也可以不使用代码编辑器或集成开发环境而通过项目中包" +"含的 **命令行脚本** 进行构建。" -#: ../../README.md:69 +#: ../../README.md:83 msgid "" "Clone this repo recursively via your favorite git client (that will also " "clone YRpp)." -msgstr "通过你最喜欢的git客户端递归克隆此库(这也将自动克隆YRpp)。" +msgstr "通过您最喜欢的 git 客户端递归克隆该仓库(也会同时克隆 YRpp)。" -#: ../../README.md:70 +#: ../../README.md:84 msgid "To build the extension:" -msgstr "生成扩展:" +msgstr "对于构建扩展:" -#: ../../README.md:71 +#: ../../README.md:85 msgid "" -"in Visual Studio: open the solution file in VS and build it (`Debug` " -"build config is recommended);" -msgstr "在Visual Studio中:打开解决方案然后生成(推荐使用`Debug`生成配置);" +"in Visual Studio: open the solution file in VS and build it (`Debug` build " +"config is recommended);" +msgstr "" +"在 Visual Studio 中:在 VS 中打开解决方案文件并构建(建议使用`Debug`构建配" +"置;" -#: ../../README.md:72 +#: ../../README.md:86 msgid "" "in VSCode: open the project folder and hit `Run Build Task...` (`Ctrl + " "Shift + B`);" -msgstr "在VSCode中:打开项目文件夹然后点击`运行生成任务`(`Ctrl + Shift + B`);" +msgstr "在 VSCode 中:打开项目目录,点击`运行构建任务…`(`Ctrl+Shift+B`);" -#: ../../README.md:73 +#: ../../README.md:87 msgid "barebones: run `scripts/build_debug.bat`." msgstr "其他:运行`scripts/build_debug.bat`。" -#: ../../README.md:74 +#: ../../README.md:88 msgid "" -"Upon build completion the resulting `Phobos.dll` and `Phobos.pdb` would " -"be placed in the subfolder identical to the name of the buildconfig " -"executed." -msgstr "生成完成后,生成的`Phobos.dll`和`Phobos.pdb`将放置在与执行的构建配置名称相同的子文件夹中。" +"Upon build completion the resulting `Phobos.dll` and `Phobos.pdb` would be " +"placed in the subfolder identical to the name of the buildconfig executed." +msgstr "" +"构建完成后,生成的`Phobos.dll`和`Phobos.pdb`将被放置在与执行的构建配置名称相" +"同的子目录中。" -#: ../../README.md:79 +#: ../../README.md:93 msgid "Developers" msgstr "开发者" -#: ../../README.md:80 -msgid "**Belonit (Gluk-v48)** - project author (retired)" -msgstr "**Belonit (Gluk-v48)** - 项目作者(已退出)" +#: ../../README.md:94 +msgid "**Belonit (Gluk-v48)** - project author" +msgstr "**Belonit (Gluk-v48)** - 项目作者" -#: ../../README.md:81 +#: ../../README.md:95 msgid "" -"**Kerbiter (Metadorius)** - project co-author, current maintainer " -"([Patreon](http://patreon.com/kerbiter))" +"**Kerbiter (Metadorius)** - project co-author, BDFL, maintainer ([Patreon]" +"(https://www.patreon.com/kerbiter), PM me for PayPal to avoid fees)" msgstr "" -"**Kerbiter (Metadorius)** - " -"项目合作作者,当前维护人员([Patreon](http://patreon.com/kerbiter))" +"**Kerbiter (Metadorius)** - 项目共同者,BDFL,维护者([Patreon](https://www." +"patreon.com/kerbiter))" -#: ../../README.md:82 +#: ../../README.md:96 msgid "" -"**Uranusian (Thrifinesma)** - developer, CN community ambassador " -"([Patreon](https://www.patreon.com/uranusian), " -"[AliPay](http://tiebapic.baidu.com/forum/w%3D580/sign=4b04b953307f9e2f70351d002f31e962/b3f89909b3de9c823bd7f23a7b81800a18d84371.jpg))" +"**Starkku** - co-maintainer, developer ([Patreon](https://www.patreon.com/" +"Starkku))" msgstr "" -"**Uranusian (Thrifinesma)** - " -"开发者,中国社区大使([Patreon](https://www.patreon.com/uranusian), " -"[AliPay](http://tiebapic.baidu.com/forum/w%3D580/sign=4b04b953307f9e2f70351d002f31e962/b3f89909b3de9c823bd7f23a7b81800a18d84371.jpg))" +"**Starkku** - 共同维护者,开发者([Patreon](https://www.patreon.com/" +"Starkku))" -#: ../../README.md:83 +#: ../../README.md:97 +msgid "**Uranusian (Thrifinesma)** - developer, CN community ambassador" +msgstr "**Uranusian (Thrifinesma)** - 开发者,中国社区大使" + +#: ../../README.md:98 msgid "**secsome (SEC-SOME)** - developer" msgstr "**secsome (SEC-SOME)** - 开发者" -#: ../../README.md:84 +#: ../../README.md:99 msgid "" -"**Otamaa (Fahroni, BoredEXE)** - developer " -"([PayPal](https://paypal.me/GeneralOtama))" +"**Otamaa (Fahroni, BoredEXE)** - developer ([PayPal](https://paypal.me/" +"GeneralOtama))" msgstr "" -"**Otamaa (Fahroni, BoredEXE)** - 开发者 " -"([PayPal](https://paypal.me/GeneralOtama))" +"**Otamaa (Fahroni, BoredEXE)** - 开发者([PayPal](https://paypal.me/" +"GeneralOtama))" -#: ../../README.md:85 +#: ../../README.md:100 msgid "**FS-21** - developer" msgstr "**FS-21** - 开发者" -#: ../../README.md:86 -msgid "**Starkku** - developer" -msgstr "**Starkku** - 开发者" +#: ../../README.md:101 +msgid "**Morton (MortonPL)** - co-maintainer, developer" +msgstr "**Morton (MortonPL)** - 共同维护者,开发者" -#: ../../README.md:87 -msgid "**Morton (MortonPL)** - developer" -msgstr "**Morton (MortonPL)** - 开发者" +#: ../../README.md:102 +msgid "**Trsdy (chaserli)** - co-maintainer, developer" +msgstr "**Trsdy (chaserli)** - 共同维护者,开发者" -#: ../../README.md:89 +#: ../../README.md:104 msgid "For all contributions see [full credits list](CREDITS.md)." -msgstr "对于全部的贡献请见[完整的工作人员名单表](CREDITS.md)。" +msgstr "所有贡献者名单参见[完整致谢列表](CREDITS.md)." -#: ../../README.md:91 +#: ../../README.md:106 msgid "" -"Thanks to everyone who uses Phobos, tests changes and reports bugs! You " -"can show your appreciation and help project by displaying the logo " -"(monochrome version can be found [here](https://github.com/Phobos-" -"developers/Phobos/blob/develop/logo-mono.png)) in your client/launcher " -"(make it open Phobos GitHub page for extra fanciness), linking to Phobos " -"repository, contributing or donating to us via the links above." +"Thanks to everyone who uses Phobos, tests changes and reports bugs! You can " +"show your appreciation and help project by displaying the logo (monochrome " +"version can be found [here](https://github.com/Phobos-developers/Phobos/blob/" +"develop/logo-mono.png)) in your client/launcher (make it open Phobos GitHub " +"page for extra fanciness), linking to Phobos repository, contributing or " +"donating to us via the links above." msgstr "" -"感谢每一个使用火卫一,测试更新与反馈bug的人!你可以通过在客户端/启动器中显示logo(可以在[此处](https://github.com" -"/Phobos-developers/Phobos/blob/develop/logo-" -"mono.png))找到单色版本),链接火卫一库,以及通过上述链接贡献或对我们捐款来表达你对我们的赞赏和帮助。" +"感谢所有使用 Phobos、测试更改和报告Bug的人! 您可以在您的客户端/启动器中展示" +"我们的 Logo(单色版本可在 [此处](https://github.com/Phobos-developers/Phobos/" +"blob/develop/logo-mono.png))来表达您的感谢并助力项目(可以让它能够点击打开 " +"Phobos GitHub 页面以显得更豪华),或者通过链接到 Phobos 的仓库、通过上方的链" +"接向我们贡献代码或捐赠。" -#: ../../README.md:93 +#: ../../README.md:108 msgid "Legal and License" -msgstr "法律许可证" +msgstr "法律与许可证" -#: ../../README.md:96 +#: ../../README.md:111 msgid "" -"[![LGPL " -"v3](https://www.gnu.org/graphics/lgplv3-147x51.png)](https://opensource.org/licenses/LGPL-3.0)" +"[![LGPL v3](https://www.gnu.org/graphics/lgplv3-147x51.png)](https://" +"opensource.org/licenses/LGPL-3.0)" msgstr "" -#: ../../README.md:96 +#: ../../README.md:111 msgid "LGPL v3" msgstr "" -#: ../../README.md:98 +#: ../../README.md:113 msgid "" "The Phobos project is an unofficial open-source community collaboration " "project to extend the Red Alert 2 Yuri's Revenge engine for modding and " "compatibility purposes." -msgstr "火卫一项目是一个非官方的开源社区合作项目,为了扩展红色警戒2尤里的复仇引擎以制作模组或兼容。" +msgstr "" +"Phobos 项目是一个非官方的开源社区合作项目,旨在扩展《红色警戒2尤里的复仇》引" +"擎以用于修改与兼容。" -#: ../../README.md:100 +#: ../../README.md:115 msgid "" -"This project has no direct affiliation with Electronic Arts Inc. Command " -"& Conquer, Command & Conquer Red Alert 2, Command & Conquer Yuri's " -"Revenge are registered trademarks of Electronic Arts Inc. All Rights " -"Reserved." -msgstr "本项目与美国艺电公司没有直接隶属关系,命令与征服,命令与征服:红色警戒2,命令与征服:尤里的复仇是美国艺电公司的注册商标,美国艺电公司保有所有权利。" - -#~ msgid "Phobos YR Engine Extension" -#~ msgstr "火卫一尤里的复仇引擎扩展" +"As a modification, the project complies with [EA C&C modding guidelines]" +"(https://www.ea.com/games/command-and-conquer/command-and-conquer-remastered/" +"modding-faq); should there be conflict between the project's license and " +"modding guidelines - the rules imposed by guidelines shall take precedence " +"(for example, the project should not be commercial or used to make money)." +msgstr "" +"作为修改,该项目符合[EA C&C 修改指南](https://www.ea.com/games/command-and-" +"conquer/command-and-conquer-remastered/modding-faq);如果项目许可与修改指南之" +"间存在冲突,则以指南中的规则为准(例如,该项目不应用于商业用途或用于盈利)。" +#: ../../README.md:117 +msgid "" +"This project has no direct affiliation with Electronic Arts Inc. Command & " +"Conquer, Command & Conquer Red Alert 2, Command & Conquer Yuri's Revenge are " +"registered trademarks of Electronic Arts Inc. All Rights Reserved." +msgstr "" +"本项目与艺电公司(Electronic Arts Inc.)没有任何直接关联。“Command & " +"Conquer”、“Command & Conquer Red Alert 2” 和 “Command & Conquer Yuri's " +"Revenge”均为艺电公司的注册商标。版权所有。" diff --git a/src/Ext/Building/Hooks.cpp b/src/Ext/Building/Hooks.cpp index 30c0a3fcc3..9e19e5477e 100644 --- a/src/Ext/Building/Hooks.cpp +++ b/src/Ext/Building/Hooks.cpp @@ -601,7 +601,24 @@ DEFINE_HOOK(0x6A9789, StripClass_DrawStrip_NoGreyCameo, 0x6) GET(TechnoTypeClass* const, pType, EBX); GET_STACK(bool, clicked, STACK_OFFSET(0x48C, -0x475)); - return (!RulesExt::Global()->BuildingProductionQueue && pType->WhatAmI() == AbstractType::BuildingType && clicked) ? SkipGameCode : ContinueCheck; + if (!RulesExt::Global()->BuildingProductionQueue) + { + if (pType->WhatAmI() == AbstractType::BuildingType && clicked) + return SkipGameCode; + } + else if (const auto pBuildingType = abstract_cast(pType)) + { + if (const auto pFactory = HouseClass::CurrentPlayer->GetPrimaryFactory(AbstractType::BuildingType, pType->Naval, pBuildingType->BuildCat)) + { + if (const auto pProduct = abstract_cast(pFactory->Object)) + { + if (pFactory->IsDone() && pProduct->Type != pType && ((pProduct->Type->BuildCat != BuildCat::Combat) ^ (pBuildingType->BuildCat == BuildCat::Combat))) + return SkipGameCode; + } + } + } + + return ContinueCheck; } DEFINE_HOOK(0x6AA88D, StripClass_RecheckCameo_FindFactoryDehardCode, 0x6) diff --git a/src/Ext/Rules/Body.cpp b/src/Ext/Rules/Body.cpp index 3e8a538406..fccb225b16 100644 --- a/src/Ext/Rules/Body.cpp +++ b/src/Ext/Rules/Body.cpp @@ -156,6 +156,7 @@ void RulesExt::ExtData::LoadBeforeTypeData(RulesClass* pThis, CCINIClass* pINI) this->ForceShield_KeptOnDeploy.Read(exINI, GameStrings::CombatDamage, "ForceShield.KeptOnDeploy"); this->ForceShield_EffectOnOrganics.Read(exINI, GameStrings::CombatDamage, "ForceShield.EffectOnOrganics"); this->ForceShield_KillOrganicsWarhead.Read(exINI, GameStrings::CombatDamage, "ForceShield.KillOrganicsWarhead"); + this->AllowWeaponSelectAgainstWalls.Read(exINI, GameStrings::CombatDamage, "AllowWeaponSelectAgainstWalls"); this->IronCurtain_ExtraTintIntensity.Read(exINI, GameStrings::AudioVisual, "IronCurtain.ExtraTintIntensity"); this->ForceShield_ExtraTintIntensity.Read(exINI, GameStrings::AudioVisual, "ForceShield.ExtraTintIntensity"); @@ -351,6 +352,7 @@ void RulesExt::ExtData::Serialize(T& Stm) .Process(this->ForceShield_KillOrganicsWarhead) .Process(this->IronCurtain_ExtraTintIntensity) .Process(this->ForceShield_ExtraTintIntensity) + .Process(this->AllowWeaponSelectAgainstWalls) .Process(this->ColorAddUse8BitRGB) .Process(this->ROF_RandomDelay) .Process(this->ToolTip_Background_Color) diff --git a/src/Ext/Rules/Body.h b/src/Ext/Rules/Body.h index 54eb558bbb..a84fdd31a0 100644 --- a/src/Ext/Rules/Body.h +++ b/src/Ext/Rules/Body.h @@ -117,6 +117,8 @@ class RulesExt Valueable ForceShield_EffectOnOrganics; Nullable ForceShield_KillOrganicsWarhead; + Valueable AllowWeaponSelectAgainstWalls; + Valueable IronCurtain_ExtraTintIntensity; Valueable ForceShield_ExtraTintIntensity; Valueable ColorAddUse8BitRGB; @@ -248,6 +250,7 @@ class RulesExt , ForceShield_KillOrganicsWarhead { } , IronCurtain_ExtraTintIntensity { 0.0 } , ForceShield_ExtraTintIntensity { 0.0 } + , AllowWeaponSelectAgainstWalls { false } , ColorAddUse8BitRGB { false } , ROF_RandomDelay { { 0 ,2 } } , ToolTip_Background_Color { { 0, 0, 0 } } diff --git a/src/Ext/Sidebar/Body.cpp b/src/Ext/Sidebar/Body.cpp index 1de4289841..9ae1c3e308 100644 --- a/src/Ext/Sidebar/Body.cpp +++ b/src/Ext/Sidebar/Body.cpp @@ -29,7 +29,7 @@ bool __stdcall SidebarExt::AresTabCameo_RemoveCameo(BuildType* pItem) { const auto pFactory = pTechnoType->FindFactory(true, false, false, pCurrent); - if (pFactory && pFactory->Owner->CanBuild(pTechnoType, false, true) != CanBuildResult::Unbuildable) + if (pFactory && pCurrent->CanBuild(pTechnoType, false, true) != CanBuildResult::Unbuildable) return false; } else @@ -40,34 +40,75 @@ bool __stdcall SidebarExt::AresTabCameo_RemoveCameo(BuildType* pItem) return false; } + // The following sections have been modified + auto buildCat = BuildCat::DontCare; + + if (pItem->ItemType == AbstractType::BuildingType || pItem->ItemType == AbstractType::Building) + { + buildCat = static_cast(pTechnoType)->BuildCat; + const auto pDisplay = DisplayClass::Instance(); + pDisplay->SetActiveFoundation(nullptr); + pDisplay->CurrentBuilding = nullptr; + pDisplay->CurrentBuildingType = nullptr; + pDisplay->CurrentBuildingOwnerArrayIndex = -1; + } + + // AbandonAll contains Abandon, if the factory cannot be found, it will also cannot be found when respont to this event. + // The original version added two events, I think it's to solve the problem of BuildCat::Combat because of the hardcode. + // Here make correction to the hardcoded BuildCat::DontCare. + if (pTechnoType && pCurrent->GetPrimaryFactory(pItem->ItemType, pTechnoType->Naval, buildCat)) + { + const EventClass event + ( + pCurrent->ArrayIndex, + EventType::AbandonAll, + static_cast(pItem->ItemType), + pItem->ItemIndex, + pTechnoType->Naval + ); + EventClass::AddEvent(event); + } + + // The original code is as follows +/* if (pItem->CurrentFactory) { - EventClass event = EventClass(pCurrent->ArrayIndex, EventType::Abandon, static_cast(pItem->ItemType), pItem->ItemIndex, pTechnoType && pTechnoType->Naval); + const EventClass event + ( + pCurrent->ArrayIndex, + EventType::Abandon, + static_cast(pItem->ItemType), + pItem->ItemIndex, + pTechnoType && pTechnoType->Naval + ); EventClass::AddEvent(event); } + auto buildCat = BuildCat::DontCare; + if (pItem->ItemType == AbstractType::BuildingType || pItem->ItemType == AbstractType::Building) { + buildCat = static_cast(pTechnoType)->BuildCat; + DisplayClass::Instance->SetActiveFoundation(nullptr); DisplayClass::Instance->CurrentBuilding = nullptr; DisplayClass::Instance->CurrentBuildingType = nullptr; DisplayClass::Instance->CurrentBuildingOwnerArrayIndex = -1; - DisplayClass::Instance->SetActiveFoundation(nullptr); } - if (pTechnoType) + // Here make correction to the hardcoded BuildCat::DontCare. + if (pTechnoType && pCurrent->GetPrimaryFactory(pItem->ItemType, pTechnoType->Naval, buildCat)) { - const auto absType = pTechnoType->WhatAmI(); - - // Here we make correction to the hardcoded BuildCat::DontCare - const auto buildCat = absType == AbstractType::BuildingType ? static_cast(pTechnoType)->BuildCat : BuildCat::DontCare; - - if (pCurrent->GetPrimaryFactory(absType, pTechnoType->Naval, buildCat)) - { - EventClass event = EventClass(pCurrent->ArrayIndex, EventType::AbandonAll, static_cast(pItem->ItemType), pItem->ItemIndex, pTechnoType->Naval); - EventClass::AddEvent(event); - } + const EventClass event + ( + pCurrent->ArrayIndex, + EventType::AbandonAll, + static_cast(pItem->ItemType), + pItem->ItemIndex, + pTechnoType->Naval + ); + EventClass::AddEvent(event); } - +*/ return true; } diff --git a/src/Ext/Techno/WeaponHelpers.cpp b/src/Ext/Techno/WeaponHelpers.cpp index 5310fdf18c..9c02e9b9a9 100644 --- a/src/Ext/Techno/WeaponHelpers.cpp +++ b/src/Ext/Techno/WeaponHelpers.cpp @@ -172,7 +172,7 @@ int TechnoExt::GetWeaponIndexAgainstWall(TechnoClass* pThis, OverlayTypeClass* p int weaponIndex = -1; auto pWeapon = TechnoExt::GetCurrentWeapon(pThis, weaponIndex); - if ((pTechnoType->TurretCount > 0 && !pTechnoType->IsGattling) || !pWallOverlayType || !pWallOverlayType->Wall) + if ((pTechnoType->TurretCount > 0 && !pTechnoType->IsGattling) || !pWallOverlayType || !pWallOverlayType->Wall || !RulesExt::Global()->AllowWeaponSelectAgainstWalls) return weaponIndex; else if (weaponIndex == -1) return 0; @@ -187,8 +187,8 @@ int TechnoExt::GetWeaponIndexAgainstWall(TechnoClass* pThis, OverlayTypeClass* p pWeaponExt = WeaponTypeExt::ExtMap.Find(pWeapon); bool aeForbidsSecondary = pWeaponExt && pWeaponExt->AttachEffect_CheckOnFirer && !pWeaponExt->HasRequiredAttachedEffects(pThis, pThis); - if (pWeapon && (pWeapon->Warhead->Wall || (pWeapon->Warhead->Wood && pWallOverlayType->Armor == Armor::Wood) - && (!TechnoTypeExt::ExtMap.Find(pTechnoType)->NoSecondaryWeaponFallback || aeForbidsPrimary)) && !aeForbidsSecondary) + if (pWeapon && (pWeapon->Warhead->Wall || (pWeapon->Warhead->Wood && pWallOverlayType->Armor == Armor::Wood)) + && (!TechnoTypeExt::ExtMap.Find(pTechnoType)->NoSecondaryWeaponFallback || aeForbidsPrimary) && !aeForbidsSecondary) { return weaponIndexSec; } diff --git a/src/Ext/WarheadType/Body.cpp b/src/Ext/WarheadType/Body.cpp index 5a5e2febef..2ca998dbb8 100644 --- a/src/Ext/WarheadType/Body.cpp +++ b/src/Ext/WarheadType/Body.cpp @@ -218,7 +218,7 @@ void WarheadTypeExt::ExtData::LoadFromINIFile(CCINIClass* const pINI) this->Shield_SelfHealing_Rate_InMinutes.Read(exINI, pSection, "Shield.SelfHealing.Rate"); this->Shield_SelfHealing_Rate = (int)(this->Shield_SelfHealing_Rate_InMinutes * 900); this->Shield_SelfHealing_RestartInCombat.Read(exINI, pSection, "Shield.SelfHealing.RestartInCombat"); - this->Shield_SelfHealing_RestartInCombat.Read(exINI, pSection, "Shield.SelfHealing.RestartInCombatDelay"); + this->Shield_SelfHealing_RestartInCombatDelay.Read(exINI, pSection, "Shield.SelfHealing.RestartInCombatDelay"); this->Shield_SelfHealing_RestartTimer.Read(exINI, pSection, "Shield.SelfHealing.RestartTimer"); this->Shield_AttachTypes.Read(exINI, pSection, "Shield.AttachTypes"); this->Shield_RemoveTypes.Read(exINI, pSection, "Shield.RemoveTypes");