docs(site): publish game rules (RU) and migrate off game/rules.txt #85
@@ -16,6 +16,12 @@ This repository hosts the Galaxy Game project.
|
|||||||
mirrored into `docs/FUNCTIONAL_ru.md` in the same patch (translate
|
mirrored into `docs/FUNCTIONAL_ru.md` in the same patch (translate
|
||||||
the changed paragraphs only, do not re-translate the whole file).
|
the changed paragraphs only, do not re-translate the whole file).
|
||||||
A full re-translation only happens on explicit owner request.
|
A full re-translation only happens on explicit owner request.
|
||||||
|
- `site/ru/rules.md` — the player-facing game rules (ported from the
|
||||||
|
former `game/rules.txt`). **Russian is authoritative here**, inverting
|
||||||
|
the usual English-first rule: the game's rules and lore are
|
||||||
|
Russian-native, so `site/ru/rules.md` leads and the English
|
||||||
|
`site/rules.md` is its mirror. Mirror point edits the same way as
|
||||||
|
`docs/FUNCTIONAL.md`, but RU → EN.
|
||||||
- `docs/TESTING.md` — testing layers (unit / integration), the
|
- `docs/TESTING.md` — testing layers (unit / integration), the
|
||||||
integration runbook, and the principles every test must follow
|
integration runbook, and the principles every test must follow
|
||||||
(no-op observability for testcontainers, `t.Fatal` on
|
(no-op observability for testcontainers, `t.Fatal` on
|
||||||
|
|||||||
-1462
File diff suppressed because it is too large
Load Diff
@@ -36,7 +36,10 @@ export default defineConfig({
|
|||||||
sidebar: [
|
sidebar: [
|
||||||
{
|
{
|
||||||
text: "Galaxy",
|
text: "Galaxy",
|
||||||
items: [{ text: "Overview", link: "/" }],
|
items: [
|
||||||
|
{ text: "Overview", link: "/" },
|
||||||
|
{ text: "Rules", link: "/rules" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -50,7 +53,10 @@ export default defineConfig({
|
|||||||
sidebar: [
|
sidebar: [
|
||||||
{
|
{
|
||||||
text: "Galaxy",
|
text: "Galaxy",
|
||||||
items: [{ text: "Обзор", link: "/ru/" }],
|
items: [
|
||||||
|
{ text: "Обзор", link: "/ru/" },
|
||||||
|
{ text: "Правила", link: "/ru/rules" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ under `/game/` (see `tools/dev-deploy/Caddyfile.dev`).
|
|||||||
- Add a page as Markdown and register it in the `sidebar` of each locale
|
- Add a page as Markdown and register it in the `sidebar` of each locale
|
||||||
in `.vitepress/config.ts`.
|
in `.vitepress/config.ts`.
|
||||||
- Localised content mirrors the English tree under `ru/`.
|
- Localised content mirrors the English tree under `ru/`.
|
||||||
|
- **Game rules** (`ru/rules.md`) are the one exception to English-first:
|
||||||
|
the Russian page is the authoritative source (ported from the former
|
||||||
|
`game/rules.txt`), and the English `rules.md` is its mirror/translation.
|
||||||
|
Keep the two in sync as with `FUNCTIONAL.md`/`FUNCTIONAL_ru.md`, but with
|
||||||
|
Russian leading.
|
||||||
- Math uses LaTeX: inline `$E = mc^2$`, block `$$ … $$`.
|
- Math uses LaTeX: inline `$E = mc^2$`, block `$$ … $$`.
|
||||||
- Link to the game with the root-relative `/game/` path so the build
|
- Link to the game with the root-relative `/game/` path so the build
|
||||||
stays domain-agnostic (no hard-coded host).
|
stays domain-agnostic (no hard-coded host).
|
||||||
|
|||||||
+8
-2
@@ -1,5 +1,11 @@
|
|||||||
# Galaxy
|
# Galaxy
|
||||||
|
|
||||||
A turn-based space strategy game.
|
A turn-based multiplayer strategy about the struggle for the galaxy.
|
||||||
|
|
||||||
[Play the game →](/game/){target="_self"}
|
You lead a race among the stars. Grow planets, research technologies, design and build your own ships, settle new worlds. Whom to fight and whom to befriend is up to you — and victory is not won by force of arms alone: votes, alliances, and diplomacy count for as much as guns.
|
||||||
|
|
||||||
|
Each turn the server resolves every player's orders at once, and the galaxy comes alive: planets are colonised, battles flare, a stream of diplomatic mail flows between races. Players are anonymous — so each race may hide an invented character, and here it is customary not only to count resources but to play a role.
|
||||||
|
|
||||||
|
To play, it is enough to send a few lines of orders per turn. The room for strategy, though, will last you a long time.
|
||||||
|
|
||||||
|
[Play →](/game/){target="_self"} · [Game rules →](/rules)
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@
|
|||||||
"preview": "vitepress preview"
|
"preview": "vitepress preview"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"markdown-it-mathjax3": "^5.2.0",
|
"markdown-it-mathjax3": "^4.3.2",
|
||||||
"vitepress": "^1.6.4"
|
"vitepress": "^1.6.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+299
-110
@@ -9,11 +9,11 @@ importers:
|
|||||||
.:
|
.:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
markdown-it-mathjax3:
|
markdown-it-mathjax3:
|
||||||
specifier: ^5.2.0
|
specifier: ^4.3.2
|
||||||
version: 5.2.0
|
version: 4.3.2
|
||||||
vitepress:
|
vitepress:
|
||||||
specifier: ^1.6.4
|
specifier: ^1.6.4
|
||||||
version: 1.6.4(@algolia/client-search@5.52.1)(markdown-it-mathjax3@5.2.0)(postcss@8.5.15)(search-insights@2.17.3)
|
version: 1.6.4(@algolia/client-search@5.52.1)(markdown-it-mathjax3@4.3.2)(postcss@8.5.15)(search-insights@2.17.3)
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@@ -418,62 +418,6 @@ packages:
|
|||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@se-oss/deasync-darwin-arm64@1.0.1':
|
|
||||||
resolution: {integrity: sha512-0YWmIDEGQfW3GGopmZHhfA6mamsG0HFKZhmBzHVyFiMKkJts8kpQwGbGrWlK8eOAoPCihOsG6tCotYR3p7HZaQ==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [darwin]
|
|
||||||
|
|
||||||
'@se-oss/deasync-darwin-x64@1.0.1':
|
|
||||||
resolution: {integrity: sha512-r3FRTLIXqGqOb1DjTLW3YhO/Dd1vA2qRLP0Ym3Wmk3yMv6c/nm15zg6UVoXbgBu8cjbvcsI/OfbHPdErmjMWsw==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [darwin]
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-arm64-gnu@1.0.1':
|
|
||||||
resolution: {integrity: sha512-657uRew7fZAx663Li03ilLV2lN09Dqb/NxawlDu8kKmboK1BLitHJRS+taiT5oFZqyIDrU45tlQKfCrW0p0sYA==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [linux]
|
|
||||||
libc: [glibc]
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-arm64-musl@1.0.1':
|
|
||||||
resolution: {integrity: sha512-IE3fIQPIJtko4lx9sRam+Zz0P4xbpAPJgDCHaz6k9cP1yUvVI179B4IZRnFx0GyjyQpm0KhHoIGHJc4KUmA81Q==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [linux]
|
|
||||||
libc: [musl]
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-x64-gnu@1.0.1':
|
|
||||||
resolution: {integrity: sha512-XQl7etZESGIjIraCyxfAey8ZTIJUB4dUFU3rPR/xLVn9bKpZGlJLIms0z3hoHX9mipO+Cqo53vK4IVm6A7U/ww==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [linux]
|
|
||||||
libc: [glibc]
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-x64-musl@1.0.1':
|
|
||||||
resolution: {integrity: sha512-vWgFAZlqImqMV6jhCWV7C9wcCS1eb1ajhlKduBRPfyUxxkoObe+EqTG2BKJAuafxp3/KS1aUsIMJma9mhwFvow==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [linux]
|
|
||||||
libc: [musl]
|
|
||||||
|
|
||||||
'@se-oss/deasync-win32-arm64-msvc@1.0.1':
|
|
||||||
resolution: {integrity: sha512-yk7lEE7Zd8GX7o6CuUbg3HnnmUhBx4tgfn5ff3eoq05CgBO6Z3ZtL4l+utAe1cxcFaXPhyvcgnHYyA4OF544tg==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [win32]
|
|
||||||
|
|
||||||
'@se-oss/deasync-win32-x64-msvc@1.0.1':
|
|
||||||
resolution: {integrity: sha512-ixizmuLGRPGyAesWUNWVzVOsvuunNb/qMqU8SmjfLR/vVgzdQEkSHFf+fkX9GXPN6FDv+DAz5uskTzhjUyCXFA==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [win32]
|
|
||||||
|
|
||||||
'@se-oss/deasync@1.0.1':
|
|
||||||
resolution: {integrity: sha512-Ha7P/xCNxOuH72BNdLRWs4TT8rsMMrERnHtfKWBeTWu+UFW9OBTrRgfZJOlbAAQFR0l4Q30cpAn8CuR7PXWcPg==}
|
|
||||||
engines: {node: '>= 10'}
|
|
||||||
|
|
||||||
'@shikijs/core@2.5.0':
|
'@shikijs/core@2.5.0':
|
||||||
resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==}
|
resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==}
|
||||||
|
|
||||||
@@ -620,13 +564,24 @@ packages:
|
|||||||
'@vueuse/shared@12.8.2':
|
'@vueuse/shared@12.8.2':
|
||||||
resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
|
resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
|
||||||
|
|
||||||
|
'@xmldom/xmldom@0.9.10':
|
||||||
|
resolution: {integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==}
|
||||||
|
engines: {node: '>=14.6'}
|
||||||
|
|
||||||
algoliasearch@5.52.1:
|
algoliasearch@5.52.1:
|
||||||
resolution: {integrity: sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg==}
|
resolution: {integrity: sha512-fHA8+kXTbjagw3jkLiaS7KKrH8qe2DyOsiUhGlN4cdT77PEsfqXZl7ewDk1hsg+pJnPlnE50XtLxjR91iJOpmg==}
|
||||||
engines: {node: '>= 14.0.0'}
|
engines: {node: '>= 14.0.0'}
|
||||||
|
|
||||||
|
ansi-colors@4.1.3:
|
||||||
|
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
birpc@2.9.0:
|
birpc@2.9.0:
|
||||||
resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
|
resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
|
||||||
|
|
||||||
|
boolbase@1.0.0:
|
||||||
|
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
|
||||||
|
|
||||||
ccount@2.0.1:
|
ccount@2.0.1:
|
||||||
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
|
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
|
||||||
|
|
||||||
@@ -636,13 +591,35 @@ packages:
|
|||||||
character-entities-legacy@3.0.0:
|
character-entities-legacy@3.0.0:
|
||||||
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
|
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
|
||||||
|
|
||||||
|
cheerio-select@1.6.0:
|
||||||
|
resolution: {integrity: sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==}
|
||||||
|
|
||||||
|
cheerio@1.0.0-rc.10:
|
||||||
|
resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==}
|
||||||
|
engines: {node: '>= 6'}
|
||||||
|
|
||||||
comma-separated-tokens@2.0.3:
|
comma-separated-tokens@2.0.3:
|
||||||
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
|
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
|
||||||
|
|
||||||
|
commander@13.1.0:
|
||||||
|
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
commander@6.2.1:
|
||||||
|
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
|
||||||
|
engines: {node: '>= 6'}
|
||||||
|
|
||||||
copy-anything@4.0.5:
|
copy-anything@4.0.5:
|
||||||
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
|
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
css-select@4.3.0:
|
||||||
|
resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==}
|
||||||
|
|
||||||
|
css-what@6.2.2:
|
||||||
|
resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
|
||||||
|
engines: {node: '>= 6'}
|
||||||
|
|
||||||
csstype@3.2.3:
|
csstype@3.2.3:
|
||||||
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
|
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
|
||||||
|
|
||||||
@@ -653,9 +630,29 @@ packages:
|
|||||||
devlop@1.1.0:
|
devlop@1.1.0:
|
||||||
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
||||||
|
|
||||||
|
dom-serializer@1.4.1:
|
||||||
|
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
|
||||||
|
|
||||||
|
domelementtype@2.3.0:
|
||||||
|
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
|
||||||
|
|
||||||
|
domhandler@3.3.0:
|
||||||
|
resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==}
|
||||||
|
engines: {node: '>= 4'}
|
||||||
|
|
||||||
|
domhandler@4.3.1:
|
||||||
|
resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
|
||||||
|
engines: {node: '>= 4'}
|
||||||
|
|
||||||
|
domutils@2.8.0:
|
||||||
|
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
|
||||||
|
|
||||||
emoji-regex-xs@1.0.0:
|
emoji-regex-xs@1.0.0:
|
||||||
resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
|
resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
|
||||||
|
|
||||||
|
entities@2.2.0:
|
||||||
|
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
|
||||||
|
|
||||||
entities@7.0.1:
|
entities@7.0.1:
|
||||||
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
|
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
|
||||||
engines: {node: '>=0.12'}
|
engines: {node: '>=0.12'}
|
||||||
@@ -665,6 +662,14 @@ packages:
|
|||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
escape-goat@3.0.0:
|
||||||
|
resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
|
esm@3.2.25:
|
||||||
|
resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==}
|
||||||
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
estree-walker@2.0.2:
|
estree-walker@2.0.2:
|
||||||
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
||||||
|
|
||||||
@@ -688,25 +693,43 @@ packages:
|
|||||||
html-void-elements@3.0.0:
|
html-void-elements@3.0.0:
|
||||||
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
|
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
|
||||||
|
|
||||||
|
htmlparser2@5.0.1:
|
||||||
|
resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==}
|
||||||
|
|
||||||
|
htmlparser2@6.1.0:
|
||||||
|
resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
|
||||||
|
|
||||||
is-what@5.5.0:
|
is-what@5.5.0:
|
||||||
resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
|
resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
juice@8.1.0:
|
||||||
|
resolution: {integrity: sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==}
|
||||||
|
engines: {node: '>=10.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
magic-string@0.30.21:
|
magic-string@0.30.21:
|
||||||
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
|
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
|
||||||
|
|
||||||
mark.js@8.11.1:
|
mark.js@8.11.1:
|
||||||
resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
|
resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
|
||||||
|
|
||||||
markdown-it-mathjax3@5.2.0:
|
markdown-it-mathjax3@4.3.2:
|
||||||
resolution: {integrity: sha512-R+XAy5/7vSGuhG9Z0/cJm6zKxOzStcScfSKVwoarh4nBra+v1KClvbALr/xFTEe9iQhwfQM4SJnO68LXL+btMA==}
|
resolution: {integrity: sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w==}
|
||||||
|
|
||||||
mathxyjax3@0.8.3:
|
mathjax-full@3.2.2:
|
||||||
resolution: {integrity: sha512-eXjFaiyQsTdVOeTFoFaFJ/r1FITpB1f9c5MW4FETfcoVV/+xa5SD9pS05AwugzL/gNuDtWXrTOSmoD2e0Du+UA==}
|
resolution: {integrity: sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==}
|
||||||
|
deprecated: Version 4 replaces this package with the scoped package @mathjax/src
|
||||||
|
|
||||||
mdast-util-to-hast@13.2.1:
|
mdast-util-to-hast@13.2.1:
|
||||||
resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
|
resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
|
||||||
|
|
||||||
|
mensch@0.3.4:
|
||||||
|
resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==}
|
||||||
|
|
||||||
|
mhchemparser@4.2.1:
|
||||||
|
resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==}
|
||||||
|
|
||||||
micromark-util-character@2.1.1:
|
micromark-util-character@2.1.1:
|
||||||
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
|
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
|
||||||
|
|
||||||
@@ -722,20 +745,46 @@ packages:
|
|||||||
micromark-util-types@2.0.2:
|
micromark-util-types@2.0.2:
|
||||||
resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
|
resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
|
||||||
|
|
||||||
|
mime@2.6.0:
|
||||||
|
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
|
||||||
|
engines: {node: '>=4.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
minisearch@7.2.0:
|
minisearch@7.2.0:
|
||||||
resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==}
|
resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==}
|
||||||
|
|
||||||
mitt@3.0.1:
|
mitt@3.0.1:
|
||||||
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
|
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
|
||||||
|
|
||||||
|
mj-context-menu@0.6.1:
|
||||||
|
resolution: {integrity: sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==}
|
||||||
|
|
||||||
nanoid@3.3.12:
|
nanoid@3.3.12:
|
||||||
resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
|
resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==}
|
||||||
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
node-fetch@2.7.0:
|
||||||
|
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
|
||||||
|
engines: {node: 4.x || >=6.0.0}
|
||||||
|
peerDependencies:
|
||||||
|
encoding: ^0.1.0
|
||||||
|
peerDependenciesMeta:
|
||||||
|
encoding:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
nth-check@2.1.1:
|
||||||
|
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
|
||||||
|
|
||||||
oniguruma-to-es@3.1.1:
|
oniguruma-to-es@3.1.1:
|
||||||
resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==}
|
resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==}
|
||||||
|
|
||||||
|
parse5-htmlparser2-tree-adapter@6.0.1:
|
||||||
|
resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
|
||||||
|
|
||||||
|
parse5@6.0.1:
|
||||||
|
resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
|
||||||
|
|
||||||
perfect-debounce@1.0.0:
|
perfect-debounce@1.0.0:
|
||||||
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
|
resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
|
||||||
|
|
||||||
@@ -775,6 +824,9 @@ packages:
|
|||||||
shiki@2.5.0:
|
shiki@2.5.0:
|
||||||
resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==}
|
resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==}
|
||||||
|
|
||||||
|
slick@1.12.2:
|
||||||
|
resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==}
|
||||||
|
|
||||||
source-map-js@1.2.1:
|
source-map-js@1.2.1:
|
||||||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
@@ -786,6 +838,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
|
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
speech-rule-engine@4.1.4:
|
||||||
|
resolution: {integrity: sha512-i/VCLG1fvRc95pMHRqG4aQNscv+9aIsqA2oI7ZQS51sTdUcDHYX6cpT8/tqZ+enjs1tKVwbRBWgxut9SWn+f9g==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
stringify-entities@4.0.4:
|
stringify-entities@4.0.4:
|
||||||
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
|
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
|
||||||
|
|
||||||
@@ -796,12 +852,14 @@ packages:
|
|||||||
tabbable@6.4.0:
|
tabbable@6.4.0:
|
||||||
resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==}
|
resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==}
|
||||||
|
|
||||||
|
tr46@0.0.3:
|
||||||
|
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
|
||||||
|
|
||||||
trim-lines@3.0.1:
|
trim-lines@3.0.1:
|
||||||
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
|
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
|
||||||
|
|
||||||
type-fest@4.41.0:
|
tslib@2.8.1:
|
||||||
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
|
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||||
engines: {node: '>=16'}
|
|
||||||
|
|
||||||
unist-util-is@6.0.1:
|
unist-util-is@6.0.1:
|
||||||
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
|
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
|
||||||
@@ -818,6 +876,10 @@ packages:
|
|||||||
unist-util-visit@5.1.0:
|
unist-util-visit@5.1.0:
|
||||||
resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
|
resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
|
||||||
|
|
||||||
|
valid-data-url@3.0.1:
|
||||||
|
resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
vfile-message@4.0.3:
|
vfile-message@4.0.3:
|
||||||
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
|
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
|
||||||
|
|
||||||
@@ -875,6 +937,19 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
web-resource-inliner@6.0.1:
|
||||||
|
resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==}
|
||||||
|
engines: {node: '>=10.0.0'}
|
||||||
|
|
||||||
|
webidl-conversions@3.0.1:
|
||||||
|
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||||
|
|
||||||
|
whatwg-url@5.0.0:
|
||||||
|
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
|
||||||
|
|
||||||
|
wicked-good-xpath@1.3.0:
|
||||||
|
resolution: {integrity: sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==}
|
||||||
|
|
||||||
zwitch@2.0.4:
|
zwitch@2.0.4:
|
||||||
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
||||||
|
|
||||||
@@ -1181,43 +1256,6 @@ snapshots:
|
|||||||
'@rollup/rollup-win32-x64-msvc@4.60.4':
|
'@rollup/rollup-win32-x64-msvc@4.60.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@se-oss/deasync-darwin-arm64@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-darwin-x64@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-arm64-gnu@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-arm64-musl@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-x64-gnu@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-linux-x64-musl@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-win32-arm64-msvc@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync-win32-x64-msvc@1.0.1':
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@se-oss/deasync@1.0.1':
|
|
||||||
dependencies:
|
|
||||||
type-fest: 4.41.0
|
|
||||||
optionalDependencies:
|
|
||||||
'@se-oss/deasync-darwin-arm64': 1.0.1
|
|
||||||
'@se-oss/deasync-darwin-x64': 1.0.1
|
|
||||||
'@se-oss/deasync-linux-arm64-gnu': 1.0.1
|
|
||||||
'@se-oss/deasync-linux-arm64-musl': 1.0.1
|
|
||||||
'@se-oss/deasync-linux-x64-gnu': 1.0.1
|
|
||||||
'@se-oss/deasync-linux-x64-musl': 1.0.1
|
|
||||||
'@se-oss/deasync-win32-arm64-msvc': 1.0.1
|
|
||||||
'@se-oss/deasync-win32-x64-msvc': 1.0.1
|
|
||||||
|
|
||||||
'@shikijs/core@2.5.0':
|
'@shikijs/core@2.5.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@shikijs/engine-javascript': 2.5.0
|
'@shikijs/engine-javascript': 2.5.0
|
||||||
@@ -1387,6 +1425,8 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
|
'@xmldom/xmldom@0.9.10': {}
|
||||||
|
|
||||||
algoliasearch@5.52.1:
|
algoliasearch@5.52.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@algolia/abtesting': 1.18.1
|
'@algolia/abtesting': 1.18.1
|
||||||
@@ -1404,20 +1444,56 @@ snapshots:
|
|||||||
'@algolia/requester-fetch': 5.52.1
|
'@algolia/requester-fetch': 5.52.1
|
||||||
'@algolia/requester-node-http': 5.52.1
|
'@algolia/requester-node-http': 5.52.1
|
||||||
|
|
||||||
|
ansi-colors@4.1.3: {}
|
||||||
|
|
||||||
birpc@2.9.0: {}
|
birpc@2.9.0: {}
|
||||||
|
|
||||||
|
boolbase@1.0.0: {}
|
||||||
|
|
||||||
ccount@2.0.1: {}
|
ccount@2.0.1: {}
|
||||||
|
|
||||||
character-entities-html4@2.1.0: {}
|
character-entities-html4@2.1.0: {}
|
||||||
|
|
||||||
character-entities-legacy@3.0.0: {}
|
character-entities-legacy@3.0.0: {}
|
||||||
|
|
||||||
|
cheerio-select@1.6.0:
|
||||||
|
dependencies:
|
||||||
|
css-select: 4.3.0
|
||||||
|
css-what: 6.2.2
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
domhandler: 4.3.1
|
||||||
|
domutils: 2.8.0
|
||||||
|
|
||||||
|
cheerio@1.0.0-rc.10:
|
||||||
|
dependencies:
|
||||||
|
cheerio-select: 1.6.0
|
||||||
|
dom-serializer: 1.4.1
|
||||||
|
domhandler: 4.3.1
|
||||||
|
htmlparser2: 6.1.0
|
||||||
|
parse5: 6.0.1
|
||||||
|
parse5-htmlparser2-tree-adapter: 6.0.1
|
||||||
|
tslib: 2.8.1
|
||||||
|
|
||||||
comma-separated-tokens@2.0.3: {}
|
comma-separated-tokens@2.0.3: {}
|
||||||
|
|
||||||
|
commander@13.1.0: {}
|
||||||
|
|
||||||
|
commander@6.2.1: {}
|
||||||
|
|
||||||
copy-anything@4.0.5:
|
copy-anything@4.0.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-what: 5.5.0
|
is-what: 5.5.0
|
||||||
|
|
||||||
|
css-select@4.3.0:
|
||||||
|
dependencies:
|
||||||
|
boolbase: 1.0.0
|
||||||
|
css-what: 6.2.2
|
||||||
|
domhandler: 4.3.1
|
||||||
|
domutils: 2.8.0
|
||||||
|
nth-check: 2.1.1
|
||||||
|
|
||||||
|
css-what@6.2.2: {}
|
||||||
|
|
||||||
csstype@3.2.3: {}
|
csstype@3.2.3: {}
|
||||||
|
|
||||||
dequal@2.0.3: {}
|
dequal@2.0.3: {}
|
||||||
@@ -1426,8 +1502,32 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
dequal: 2.0.3
|
dequal: 2.0.3
|
||||||
|
|
||||||
|
dom-serializer@1.4.1:
|
||||||
|
dependencies:
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
domhandler: 4.3.1
|
||||||
|
entities: 2.2.0
|
||||||
|
|
||||||
|
domelementtype@2.3.0: {}
|
||||||
|
|
||||||
|
domhandler@3.3.0:
|
||||||
|
dependencies:
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
|
||||||
|
domhandler@4.3.1:
|
||||||
|
dependencies:
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
|
||||||
|
domutils@2.8.0:
|
||||||
|
dependencies:
|
||||||
|
dom-serializer: 1.4.1
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
domhandler: 4.3.1
|
||||||
|
|
||||||
emoji-regex-xs@1.0.0: {}
|
emoji-regex-xs@1.0.0: {}
|
||||||
|
|
||||||
|
entities@2.2.0: {}
|
||||||
|
|
||||||
entities@7.0.1: {}
|
entities@7.0.1: {}
|
||||||
|
|
||||||
esbuild@0.21.5:
|
esbuild@0.21.5:
|
||||||
@@ -1456,6 +1556,10 @@ snapshots:
|
|||||||
'@esbuild/win32-ia32': 0.21.5
|
'@esbuild/win32-ia32': 0.21.5
|
||||||
'@esbuild/win32-x64': 0.21.5
|
'@esbuild/win32-x64': 0.21.5
|
||||||
|
|
||||||
|
escape-goat@3.0.0: {}
|
||||||
|
|
||||||
|
esm@3.2.25: {}
|
||||||
|
|
||||||
estree-walker@2.0.2: {}
|
estree-walker@2.0.2: {}
|
||||||
|
|
||||||
focus-trap@7.8.0:
|
focus-trap@7.8.0:
|
||||||
@@ -1487,20 +1591,51 @@ snapshots:
|
|||||||
|
|
||||||
html-void-elements@3.0.0: {}
|
html-void-elements@3.0.0: {}
|
||||||
|
|
||||||
|
htmlparser2@5.0.1:
|
||||||
|
dependencies:
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
domhandler: 3.3.0
|
||||||
|
domutils: 2.8.0
|
||||||
|
entities: 2.2.0
|
||||||
|
|
||||||
|
htmlparser2@6.1.0:
|
||||||
|
dependencies:
|
||||||
|
domelementtype: 2.3.0
|
||||||
|
domhandler: 4.3.1
|
||||||
|
domutils: 2.8.0
|
||||||
|
entities: 2.2.0
|
||||||
|
|
||||||
is-what@5.5.0: {}
|
is-what@5.5.0: {}
|
||||||
|
|
||||||
|
juice@8.1.0:
|
||||||
|
dependencies:
|
||||||
|
cheerio: 1.0.0-rc.10
|
||||||
|
commander: 6.2.1
|
||||||
|
mensch: 0.3.4
|
||||||
|
slick: 1.12.2
|
||||||
|
web-resource-inliner: 6.0.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
|
||||||
magic-string@0.30.21:
|
magic-string@0.30.21:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/sourcemap-codec': 1.5.5
|
'@jridgewell/sourcemap-codec': 1.5.5
|
||||||
|
|
||||||
mark.js@8.11.1: {}
|
mark.js@8.11.1: {}
|
||||||
|
|
||||||
markdown-it-mathjax3@5.2.0:
|
markdown-it-mathjax3@4.3.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@se-oss/deasync': 1.0.1
|
juice: 8.1.0
|
||||||
mathxyjax3: 0.8.3
|
mathjax-full: 3.2.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
|
||||||
mathxyjax3@0.8.3: {}
|
mathjax-full@3.2.2:
|
||||||
|
dependencies:
|
||||||
|
esm: 3.2.25
|
||||||
|
mhchemparser: 4.2.1
|
||||||
|
mj-context-menu: 0.6.1
|
||||||
|
speech-rule-engine: 4.1.4
|
||||||
|
|
||||||
mdast-util-to-hast@13.2.1:
|
mdast-util-to-hast@13.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1514,6 +1649,10 @@ snapshots:
|
|||||||
unist-util-visit: 5.1.0
|
unist-util-visit: 5.1.0
|
||||||
vfile: 6.0.3
|
vfile: 6.0.3
|
||||||
|
|
||||||
|
mensch@0.3.4: {}
|
||||||
|
|
||||||
|
mhchemparser@4.2.1: {}
|
||||||
|
|
||||||
micromark-util-character@2.1.1:
|
micromark-util-character@2.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
micromark-util-symbol: 2.0.1
|
micromark-util-symbol: 2.0.1
|
||||||
@@ -1531,18 +1670,36 @@ snapshots:
|
|||||||
|
|
||||||
micromark-util-types@2.0.2: {}
|
micromark-util-types@2.0.2: {}
|
||||||
|
|
||||||
|
mime@2.6.0: {}
|
||||||
|
|
||||||
minisearch@7.2.0: {}
|
minisearch@7.2.0: {}
|
||||||
|
|
||||||
mitt@3.0.1: {}
|
mitt@3.0.1: {}
|
||||||
|
|
||||||
|
mj-context-menu@0.6.1: {}
|
||||||
|
|
||||||
nanoid@3.3.12: {}
|
nanoid@3.3.12: {}
|
||||||
|
|
||||||
|
node-fetch@2.7.0:
|
||||||
|
dependencies:
|
||||||
|
whatwg-url: 5.0.0
|
||||||
|
|
||||||
|
nth-check@2.1.1:
|
||||||
|
dependencies:
|
||||||
|
boolbase: 1.0.0
|
||||||
|
|
||||||
oniguruma-to-es@3.1.1:
|
oniguruma-to-es@3.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
emoji-regex-xs: 1.0.0
|
emoji-regex-xs: 1.0.0
|
||||||
regex: 6.1.0
|
regex: 6.1.0
|
||||||
regex-recursion: 6.0.2
|
regex-recursion: 6.0.2
|
||||||
|
|
||||||
|
parse5-htmlparser2-tree-adapter@6.0.1:
|
||||||
|
dependencies:
|
||||||
|
parse5: 6.0.1
|
||||||
|
|
||||||
|
parse5@6.0.1: {}
|
||||||
|
|
||||||
perfect-debounce@1.0.0: {}
|
perfect-debounce@1.0.0: {}
|
||||||
|
|
||||||
picocolors@1.1.1: {}
|
picocolors@1.1.1: {}
|
||||||
@@ -1613,12 +1770,20 @@ snapshots:
|
|||||||
'@shikijs/vscode-textmate': 10.0.2
|
'@shikijs/vscode-textmate': 10.0.2
|
||||||
'@types/hast': 3.0.4
|
'@types/hast': 3.0.4
|
||||||
|
|
||||||
|
slick@1.12.2: {}
|
||||||
|
|
||||||
source-map-js@1.2.1: {}
|
source-map-js@1.2.1: {}
|
||||||
|
|
||||||
space-separated-tokens@2.0.2: {}
|
space-separated-tokens@2.0.2: {}
|
||||||
|
|
||||||
speakingurl@14.0.1: {}
|
speakingurl@14.0.1: {}
|
||||||
|
|
||||||
|
speech-rule-engine@4.1.4:
|
||||||
|
dependencies:
|
||||||
|
'@xmldom/xmldom': 0.9.10
|
||||||
|
commander: 13.1.0
|
||||||
|
wicked-good-xpath: 1.3.0
|
||||||
|
|
||||||
stringify-entities@4.0.4:
|
stringify-entities@4.0.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
character-entities-html4: 2.1.0
|
character-entities-html4: 2.1.0
|
||||||
@@ -1630,9 +1795,11 @@ snapshots:
|
|||||||
|
|
||||||
tabbable@6.4.0: {}
|
tabbable@6.4.0: {}
|
||||||
|
|
||||||
|
tr46@0.0.3: {}
|
||||||
|
|
||||||
trim-lines@3.0.1: {}
|
trim-lines@3.0.1: {}
|
||||||
|
|
||||||
type-fest@4.41.0: {}
|
tslib@2.8.1: {}
|
||||||
|
|
||||||
unist-util-is@6.0.1:
|
unist-util-is@6.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1657,6 +1824,8 @@ snapshots:
|
|||||||
unist-util-is: 6.0.1
|
unist-util-is: 6.0.1
|
||||||
unist-util-visit-parents: 6.0.2
|
unist-util-visit-parents: 6.0.2
|
||||||
|
|
||||||
|
valid-data-url@3.0.1: {}
|
||||||
|
|
||||||
vfile-message@4.0.3:
|
vfile-message@4.0.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/unist': 3.0.3
|
'@types/unist': 3.0.3
|
||||||
@@ -1675,7 +1844,7 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
|
|
||||||
vitepress@1.6.4(@algolia/client-search@5.52.1)(markdown-it-mathjax3@5.2.0)(postcss@8.5.15)(search-insights@2.17.3):
|
vitepress@1.6.4(@algolia/client-search@5.52.1)(markdown-it-mathjax3@4.3.2)(postcss@8.5.15)(search-insights@2.17.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@docsearch/css': 3.8.2
|
'@docsearch/css': 3.8.2
|
||||||
'@docsearch/js': 3.8.2(@algolia/client-search@5.52.1)(search-insights@2.17.3)
|
'@docsearch/js': 3.8.2(@algolia/client-search@5.52.1)(search-insights@2.17.3)
|
||||||
@@ -1696,7 +1865,7 @@ snapshots:
|
|||||||
vite: 5.4.21
|
vite: 5.4.21
|
||||||
vue: 3.5.34
|
vue: 3.5.34
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
markdown-it-mathjax3: 5.2.0
|
markdown-it-mathjax3: 4.3.2
|
||||||
postcss: 8.5.15
|
postcss: 8.5.15
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@algolia/client-search'
|
- '@algolia/client-search'
|
||||||
@@ -1733,4 +1902,24 @@ snapshots:
|
|||||||
'@vue/server-renderer': 3.5.34(vue@3.5.34)
|
'@vue/server-renderer': 3.5.34(vue@3.5.34)
|
||||||
'@vue/shared': 3.5.34
|
'@vue/shared': 3.5.34
|
||||||
|
|
||||||
|
web-resource-inliner@6.0.1:
|
||||||
|
dependencies:
|
||||||
|
ansi-colors: 4.1.3
|
||||||
|
escape-goat: 3.0.0
|
||||||
|
htmlparser2: 5.0.1
|
||||||
|
mime: 2.6.0
|
||||||
|
node-fetch: 2.7.0
|
||||||
|
valid-data-url: 3.0.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
|
||||||
|
webidl-conversions@3.0.1: {}
|
||||||
|
|
||||||
|
whatwg-url@5.0.0:
|
||||||
|
dependencies:
|
||||||
|
tr46: 0.0.3
|
||||||
|
webidl-conversions: 3.0.1
|
||||||
|
|
||||||
|
wicked-good-xpath@1.3.0: {}
|
||||||
|
|
||||||
zwitch@2.0.4: {}
|
zwitch@2.0.4: {}
|
||||||
|
|||||||
+8
-2
@@ -1,5 +1,11 @@
|
|||||||
# Galaxy
|
# Galaxy
|
||||||
|
|
||||||
Пошаговая космическая стратегия.
|
Пошаговая многопользовательская стратегия о борьбе за галактику.
|
||||||
|
|
||||||
[Играть →](/game/){target="_self"}
|
Вы — лидер расы среди звёзд. Развивайте планеты, исследуйте технологии, проектируйте и стройте собственные корабли, осваивайте новые миры. С кем воевать, а с кем дружить — решаете только вы, и победа достаётся не одной лишь силой оружия: голоса, союзы и дипломатия значат не меньше пушек.
|
||||||
|
|
||||||
|
Каждый ход сервер просчитывает приказы всех игроков разом, и галактика живёт своей жизнью: колонизируются планеты, вспыхивают сражения, между расами течёт поток дипломатической почты. Игроки анонимны — поэтому за каждой расой может стоять придуманный характер, и здесь принято не только считать ресурсы, но и отыгрывать свою роль.
|
||||||
|
|
||||||
|
Чтобы играть, достаточно отправлять несколько строк приказов за ход. А вот простора для стратегии хватит надолго.
|
||||||
|
|
||||||
|
[Играть →](/game/){target="_self"} · [Правила игры →](/ru/rules)
|
||||||
|
|||||||
@@ -0,0 +1,666 @@
|
|||||||
|
# «Галактика» (Galaxy Game)
|
||||||
|
|
||||||
|
Руководство игрока.
|
||||||
|
|
||||||
|
## Процесс игры {#turn-cycle}
|
||||||
|
|
||||||
|
Весь процесс игры разделен на ходы, которые в свою очередь можно разделить на два чередующихся процесса: "производство хода" и "ожидание производства нового хода". Считается, что "производство хода" процесс не требующий времени и условно происходящий мгновенно. В этот момент совершается само действие, т.е. выполняется процесс производства на планетах, происходят [сражения](#combat) флотов враждующих рас и [передвижение кораблей](#movement) от планеты к планете — полный порядок этих шагов описан в разделе [«Последовательность действий»](#turn-sequence).
|
||||||
|
|
||||||
|
Существует также понятие "состояние игры", которое соответствует текущему положению дел (в том числе, у кого сколько чего есть, кто что делает, какие корабли куда летят и т.п.). Состояние игры соответствует отчёту, который получает игрок сразу после производства очередного хода.
|
||||||
|
|
||||||
|
Производство хода происходит регулярно в заранее установленное время, известное всем участникам. Он заканчивается рассылкой всем участникам отчетов с информацией о состоянии их рас на этот ход. После чего начинается ожидание производства нового хода. Это процесс специально предназначен, чтобы игроки имели возможность обдумывать команды на будущий ход и тем самым изменять состояние игры.
|
||||||
|
|
||||||
|
Каждая из команд может лишь задать действие (например, тип производства на планете), но не приведёт к моментальному выполнения этого действия. Так, например, можно дать команду постройки корабля, но строиться сам корабль будет лишь во время выполнения очередного хода. Или можно дать приказ об отправке кораблей куда-либо, но полетят они лишь во время производства хода.
|
||||||
|
|
||||||
|
Когда приказ (последовательность команд) поступает на сервер, игрок получает уведомление о том, что его команды приняты к производству. Каждая команда из приказа проверяется на корректность и получает отдельное подтверждение. Игрок может послать любое количество приказов по своему усмотрению, однако, каждый новый приказ отменяет предыдущий. Таким образом, можно исправить неверно составленный приказ, но при этом необходимо повторить те команды, которые были отданы верно. К счастью, программа-клиент помогает игроку не запутаться в этом процессе и берёт на себя контроль за целостностью приказов.
|
||||||
|
|
||||||
|
Во время ожидания производства нового хода можно также производить дипломатическую переписку между расами. Все ходы нумеруются, чтобы удобнее было планировать свои действия.
|
||||||
|
|
||||||
|
Игра начинается с того, что происходит производство хода с номером ноль, во время которого, собственно, и создается сама галактика (в галактике размещаются планеты, участники получают свои развитые планеты и т.д.). После чего всем участникам рассылаются отчеты с информацией об их начальном состоянии. Получив такой отчет, каждый из участников должен внимательно его изучить и на его основе разработать (или скорректировать) план развития собственной расы. Важно отметить, что с момента рассылки отчетов за ход с номером N и вплоть до рассылки отчетов за ход с номером N+1 длится ход номер N (происходит ожидание производства нового хода с номером N+1).
|
||||||
|
|
||||||
|
Для более полного понимания приведем пример работы сервера:
|
||||||
|
|
||||||
|
- всем участникам рассылаются отчеты за ход с номером N (начался ход номер N);
|
||||||
|
|
||||||
|
- принимаются приказы, рассылаются подтверждения приказов в соответствии с полученными командами, распространяется дипломатическая почта, новости и т.п. (продолжается ход номер N - идет "ожидание производства нового хода");
|
||||||
|
|
||||||
|
- согласно расписанию, обозначенному при наборе в партию, сервер просчитывает новый ход с номером N+1 (происходит процесс производства хода);
|
||||||
|
|
||||||
|
- всем участникам рассылаются отчеты за ход с номером N+1 (начался ход номер N+1);
|
||||||
|
|
||||||
|
## Галактика {#galaxy}
|
||||||
|
|
||||||
|
Пространство Галактики, где разворачиваются действия, представляет собой поверхность тора, а визуально это просто квадрат у которого закольцованы противоположные стороны. Галактика содержит некоторое число звёздных систем. Несмотря на то, что любая звёздная система может содержать некоторое число планет и других небесных тел, в рамках игры такая детализация несущественна: при добыче ресурсов используется суммарные ресурсы всей звёздной системы, а организации полётов основана на перемещении между центрами масс в галактике.
|
||||||
|
|
||||||
|
Поэтому для простоты обозначения игра оперирует термином "планета", что на самом деле могло бы соответствовать понятию "звёздная система".
|
||||||
|
|
||||||
|
## Единицы измерений {#units}
|
||||||
|
|
||||||
|
Единицы измерений в игре соответствуют действительным. Расстония между планетами измеряются в световых годах. Размеры планет исчисляются в десятках километров в диаметре. Каждая единица населения обозначает 10 миллионов человек и каждая единица товаров, сырья и т.п. представляет собой 10 миллионов тонн. Каждый ход игры соответствует одному году жизни Галактики. В большинстве случаев вместо указания реальных единиц, удобнее пользоваться определением "единица измерения". Например: "5 единиц массы" или "10 единиц населения".
|
||||||
|
|
||||||
|
## Числовые величины {#precision}
|
||||||
|
|
||||||
|
Числа, используемые в командах и отчетах, представляются с точностью до трёх десятичных знаков после запятой. Сервер хранит числа и производит вычисления с большей точностью, округляя результаты лишь для представления игрокам в отчётах. Например, если в отчете стоит число 2.000, это может означать, что на самом деле число может колебаться от 1.9995 до 2.0004.
|
||||||
|
|
||||||
|
Исключение составляют технологические уровни кораблей — в отчётах они приводятся без такого округления (см. [«Технологии»](#tech)).
|
||||||
|
|
||||||
|
## Наименования {#names}
|
||||||
|
|
||||||
|
Произвольные наименования, выбираемые игроком, могут иметь классы кораблей, планеты, флоты и науки. Имена не могут быть длиннее 30 символов. Символы могут быть буквами алфавита, цифрами и спецсимволами '!@#$%^*-_=+~()[]{}'. Спецсимволы не могут находиться в начале или конце имени а так же повторяться более двух раза подряд.
|
||||||
|
|
||||||
|
Выбирая имя, игроку рекомендуется руководствоваться в первую очередь здравым смыслом и не злоупотреблять возможностью создавать нечитаемые имена. Хоть это напрямую и не запрещено, но такой способ коммуникации с внешним миром будет выглядеть не самым лучшим образом в глазах других участников, ведь многие выбранные игроком имена увидит вся галактика. Не следует использовать в наименованиях лексику, которая наносит грубые оскорбления кому-либо из игроков, а так же разжигает межнациональную или межконфессиональную рознь (разумеется, речь про реальный, не игровой мир). Администрация игры оставляет за собой право принимать меры, вплоть до исключения игрока с сервера, за злоупотребление наименованиями.
|
||||||
|
|
||||||
|
## Планеты {#planets}
|
||||||
|
|
||||||
|
Каждая из рас, начиная игру, владеет одной или тремя планетами (в зависимости от типа партии), все остальные планеты - необитаемы. В процессе игры допустимо как заселение необитаемых планет, так и завоевание планет, заселенных другими расами.
|
||||||
|
|
||||||
|
В начале игры все планеты имеют уникальные имена. После колонизации планеты можно изменить ее имя. Вы можете также пожелать изменить имя Ваших первых планет сразу после начала, чтобы придать им более интригующий вид.
|
||||||
|
|
||||||
|
Любая планета имеет две неизменяемые характеристики: размер и природные ресурсы. В стандартной партии каждый участник в начале игры владеет одной планетой размером 1000 (такая планета называется "Домашним Миром" или "Home World", HW) и двумя планетам размером по 500 (такие планеты называются "Дочерними Мирами" или "Daughter World", DW). HW игроков находятся на расстоянии не менее 30 световых лет друг от друга, DW - на расстоянии от 5 до 15 световых лет от HW.
|
||||||
|
|
||||||
|
Все остальные планеты не обладают жестко установленными характеристиками и встречаются в галактике в следующих пропорциях:
|
||||||
|
|
||||||
|
| тип планет | размер | ресурсы | примерное количество от общего числа планет |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Супер большие планеты | 1500-2500 | 0-3 | 6% |
|
||||||
|
| Просто большие планеты | 1000-2000 | 1-10 | 18% |
|
||||||
|
| Обычные планеты | 0-1000 | 0.1-10 | 50% |
|
||||||
|
| Маленькие, но сказочно богатые | 0-500 | 5-25 | 18% |
|
||||||
|
| Астероиды | 0 | 0 | 8% |
|
||||||
|
|
||||||
|
При этом супер большие планеты могут встречаться лишь на расстоянии не менее 20 св. лет от HW и друг от друга; просто большие - 10 св. лет. Как можно заметить, диапазоны характеристик супер больших планет и просто больших планет пересекаются. Это не ошибка, а реальность. В среднем на каждого участника в галактике приходится по 10 планет(включая три начальные).
|
||||||
|
|
||||||
|
Прочие характеристики планет могут изменяться в течение игры как в результате действий игроков, так и в результате естественного развития планет. Такие характеристики включаются в себя:
|
||||||
|
|
||||||
|
- Население
|
||||||
|
- Колонисты - избыток населения.
|
||||||
|
- Сырьё
|
||||||
|
- Промышленность
|
||||||
|
|
||||||
|
## Население {#population}
|
||||||
|
|
||||||
|
Каждая планета имеет атрибут "Размер". Он характеризует не только физический размер планеты, но также обуславливает наличие гор, пустынь и океанов, климат и т. п. Население планеты не может превышать её размер, но может быть меньше. Ваша первая планета имеет размер и население равными 1000. Население планеты увеличивается на 8% на каждом ходу. Часть населения планеты, превышающая её размер, превращается в [колонистов](#colonists). Следует помнить, что население планеты ограничивает рост [промышленности](#industry): количество единиц промышленности не может превышать количество единиц населения.
|
||||||
|
|
||||||
|
## Колонисты {#colonists}
|
||||||
|
|
||||||
|
Каждые 8 единиц населения, превышающих размер планеты, автоматически превращаются в единицу колонистов. Эти жители сохраняются в контейнерах при низкой температуре. Если колонисты перевозятся на другие планеты, имеющие место для расселения, они автоматически размораживаются и добавляются к населению планеты. Этим способом могут быть обжиты необитаемые планеты. Из каждой единицы колонистов вновь получается 8 единиц населения. Современные технологии позволяют производить процесс заморозки и разморозки колонистов без каких-либо производственных и материальных затрат.
|
||||||
|
|
||||||
|
## Промышленность {#industry}
|
||||||
|
|
||||||
|
Уровень промышленности планеты (или "количество промышленности") соответствует таким вещам, как инструменты, компьютеры, транспорт и т.п. В начале игры все ваши планеты имеют максимальный уровень промышленности, равный населению (1000 для HW и 500 для DW).
|
||||||
|
|
||||||
|
## Производство на планете {#production}
|
||||||
|
|
||||||
|
Доступные производственные единицы могут быть израсходованы на добычу сырья, постройку кораблей, производство промышленности или на исследования технологий. На одной планете за один ход можно производить только однотипный продукт (например, только один тип кораблей).
|
||||||
|
|
||||||
|
## Производственные единицы {#production-capacity}
|
||||||
|
|
||||||
|
Каждая заселенная планета имеет определенный производственный потенциал, выраженные в единицах производства. Он не может превышать население планеты, но может оказаться меньше. Производственный потенциал определяет уровень производительности планеты и складывается из производственной мощности населения и уровня промышленности.
|
||||||
|
|
||||||
|
$$\text{Производственный потенциал} = \text{промышленность} \times 0.75 + \text{население} \times 0.25$$
|
||||||
|
|
||||||
|
В начале игры Вы располагаете одной планетой с производственным потенциалом 1000 и двумя планетами с производственным потенциалом по 500. Это означает, что каждый ход Вы располагаете 1000, 500 и еще 500 единицами производства, которые Вы можете заставить работать так, как Вам понравится. Если Ваша планета имеет 500 единиц промышленности и население 1000, то такая планета может произвести лишь около 625 единиц выбранной продукции за один ход. Другими словами - Ваша планета имеет производственный потенциал в 625 производственных единиц.
|
||||||
|
|
||||||
|
## Технологии {#tech}
|
||||||
|
|
||||||
|
Вы начинаете с технологическим уровнем 1 в следующих областях: Двигатели (Drive), Оружие (Weapons), Защита (Shields) и Грузоперевозки (Cargo). Эти уровни могут быть повышены переключением производства планет на исследования. Чтобы увеличить технологический уровень на единицу, необходимо затратить 5000 производственных единиц. Дробные показатели затрат на исследования технологий непременно будут полезными. Так, если вы затратили 500 единиц на исследования в области Оружия, Ваш технологический уровень в этой области возрастет на одну десятую и это даст немедленный эффект при постройке кораблей, нет необходимости ждать, пока уровень возрастет на целую единицу. В момент постройки корабля он получает те уровни технологий, какие были у Вас на момент начала производства хода (см. [«Последовательность действий»](#turn-sequence)). Уровни технологий уже построенных кораблей в дальнейшем можно обновить с помощью команды модернизации.
|
||||||
|
|
||||||
|
В целях избежания неточностей в расчетах, технологические уровни кораблей округляются до третьего знака после запятой в момент постройки или модернизации. Поэтому в отчетах у кораблей всегда указываются действительные, а не округлённые уровни технологий.
|
||||||
|
|
||||||
|
Все начальные планеты игроков по умолчанию заняты исследованием технологии "Drive".
|
||||||
|
|
||||||
|
## Науки {#sciences}
|
||||||
|
|
||||||
|
Вы можете комбинировать технологии в науки. Каждая наука состоит из известных технологий, взятых в определяемых Вами пропорциях. Когда Вы переключаете производство на планете на исследования в области определенной Вами науки, производственные единицы расходуются на те технологии, из которых состоит данная наука, причем в соответствии с заданной Вами пропорцией. Доли технологий в науке задаются в долях единицы, и их сумма равна единице (100%).
|
||||||
|
|
||||||
|
Например, наука с именем "First Step" задана долями 0.222 для Двигателей, 0.111 для Вооружения, 0.667 для Защиты и 0 для Грузоперевозок (в сумме — единица; это соответствует соотношению 10 : 5 : 30 : 0). Тогда при изучении такой науки 22.2% доступных производственных единиц планеты будут израсходованы на разработки в области Двигателей, 11.1% — на Вооружение и 66.7% — на технологию Защиты. Таким образом за один ход на одной планете Вы имеете возможность повысить сразу несколько технологических уровней.
|
||||||
|
|
||||||
|
## Сырьё (Материалы) {#material}
|
||||||
|
|
||||||
|
Производство чего-либо, кроме технологий, требует затрат сырья так же, как и производственных затрат. Сырье соответствует таким материалам, как листовая сталь, медная проволока, древесина и нефть и т.п., необходимые для производства. Каждая планета может иметь запас произведённого или привезённого сырья, которое можно использовать при производстве кораблей. Если такой запас отсутствует, часть производственных единиц может быть ориентирована на выпуск сырья.
|
||||||
|
|
||||||
|
Как известно, каждая планета имеет неизменную характеристику - Природные Ресурсы, которая показывает, насколько планета богата запасами металлов, угля, нефти и т.п. Планеты с высоким показателем Ресурсов требуют меньших затрат на производство сырья. Показатель зависит от [типа планеты](#planets): у обитаемых планет он строго больше нуля и доходит до 25 у редких богато одарённых планет, и лишь у астероидов равен нулю. Ваши первые планеты имеют показатели ресурсов 10, что означает, что каждая производственная единица может произвести 10 единиц сырья. Планета с показателем сырья 0.1 может произвести только 0.1 единиц сырья на каждую производственную единицу. Произведённое сырьё складируется и может быть транспортировано на другие планеты с помощью грузовых кораблей.
|
||||||
|
|
||||||
|
Когда Вы колонизируете планеты с низким показателем природных ресурсов, Вам стоит производить сырье на планетах с высоким показателем и затем перевозить их на другие планеты, чтобы большое количество производственных единиц не тратилось на добычу сырья. Количество сырья на планете можно увеличить и путем демонтажа кораблей, находящихся на планете. В этом случае каждая единица массы демонтируемых кораблей превращается в единицу сырья.
|
||||||
|
|
||||||
|
Например, Вы ориентировали производство на постройку космических кораблей. Для постройки требуется количество сырья, эквивалентное массе строящегося корабля. Если Вы начинаете без запаса сырья, оно будет произведено автоматически. Этот процесс полностью невидим для Вас, единственный заметный эффект это то, что кое-где процесс производства будет меньше, чем Вы ожидаете.
|
||||||
|
|
||||||
|
Другими словами, на постройку корабля останется столько производственных единиц, сколько может дать данная планета, за минусом количества, которое будет израсходовано на добычу необходимого для постройки количества сырья. По этой причине необходимо учитывать, что при постройке кораблей не все производственные единицы планеты будут непосредственно участвовать в постройке, некоторым из них придется заняться добычей недостающего для постройки сырья. На практике это условие является одним из самых важных при проектировании кораблей, поскольку оно непосредственно определяет время постройки кораблей определённого класса на выбранной планете.
|
||||||
|
|
||||||
|
## Производство промышленности {#industry-production}
|
||||||
|
|
||||||
|
При развитии планет количество промышленности можно повышать, переключив производство планеты на промышленность. Одна единица промышленности требует 5 производственных единиц и одной единицы [сырья](#material); если запаса сырья нет, недостающее добывается автоматически из тех же производственных единиц (как и при [постройке кораблей](#ship-building)) по «курсу» природных ресурсов планеты — поэтому на бедных ресурсами планетах промышленность растёт медленнее.
|
||||||
|
|
||||||
|
Уровень промышленности не может превышать население планеты. Пока промышленность ниже населения, произведённая промышленность сразу повышает [производственный потенциал](#production-capacity). Когда же промышленность достигает населения, излишек не теряется, а откладывается в запас промышленности (в отчёте — «запасы промышленности», `$`). Этот запас можно перевозить между планетами; и как только промышленность планеты снова окажется ниже её населения — потому ли что подросло само население, потому ли что запас привезли в молодую колонию — он автоматически превращается в промышленность и поднимает её уровень. Так быстро развиваются колонизируемые планеты.
|
||||||
|
|
||||||
|
## Конструирование кораблей {#ship-design}
|
||||||
|
|
||||||
|
Перед тем, как давать команды постройки кораблей на планетах, необходимо сконструировать нужные классы кораблей. Готовых классов кораблей не существует, каждая раса в галактике разрабатывает свои собственные, исходя из поставленных стратегических задач. Чтобы создать класс корабля, нужно дать ему имя и определить следующие характеристики:
|
||||||
|
|
||||||
|
| Параметр | Обозначение | Описание |
|
||||||
|
|---|---|---|
|
||||||
|
| Двигатель | Drive | мощность гипердвигателя |
|
||||||
|
| Вооруженность | Armament | количество несомых орудий |
|
||||||
|
| Оружие | Weapons | мощность орудий |
|
||||||
|
| Защита | Shields | мощность генератора защитного поля |
|
||||||
|
| Размер трюма | Cargo | объём грузовых отсеков |
|
||||||
|
|
||||||
|
Выбранные Вами характеристики корабля могут быть либо равными 0, либо быть не менее 1. Разумеется, все характеристики корабля не могут быть нулевыми одновременно. "Вооруженность" и "Оружие" должны быть оба либо нулевыми либо оба ненулевыми. "Вооруженность" задаётся целым числом, все остальные могут быть дробными. Например, корабль может иметь "Защиту" 1.5, но не может 0.5.
|
||||||
|
|
||||||
|
Конструирование классов кораблей не занимает времени или ресурсов, новый класс корабля становится доступным сразу после отдачи соответствующей команды. Как именно характеристики корабля сказываются на игре, описано в разделах [«Движение»](#movement), [«Грузоподъёмность»](#cargo) и [«Сражения»](#combat).
|
||||||
|
|
||||||
|
Приведём несколько примеров классов кораблей. Несмотря на то, что такие классы могут встречаться в галактике у различных рас, Вы не обязаны конструировать корабли с точно такими характеристиками, гораздо важнее исходить их тех задач, которые Ваши корабли будут решать.
|
||||||
|
|
||||||
|
| Наименование | D | A | W | S | C |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| Drone | 1 | 0 | 0 | 0 | 0 |
|
||||||
|
| Fighter | 1 | 1 | 1 | 1 | 0 |
|
||||||
|
| Gunship | 4 | 2 | 2 | 4 | 0 |
|
||||||
|
| Destroyer | 6 | 1 | 8 | 4 | 0 |
|
||||||
|
| Cruiser | 15 | 1 | 15 | 15 | 0 |
|
||||||
|
| Battle_Cruiser | 30 | 3 | 10 | 30 | 0 |
|
||||||
|
| Battleship | 25 | 1 | 30 | 35 | 0 |
|
||||||
|
| Battle_Station | 60 | 3 | 30 | 100 | 0 |
|
||||||
|
| Orbital_Fort | 0 | 3 | 30 | 100 | 0 |
|
||||||
|
| Space_Gun | 0 | 1 | 1 | 0 | 0 |
|
||||||
|
| Freighter | 8 | 0 | 0 | 2 | 10 |
|
||||||
|
| Megafreighter | 80 | 2 | 2 | 30 | 100 |
|
||||||
|
|
||||||
|
## Постройка кораблей {#ship-building}
|
||||||
|
|
||||||
|
Корабли строятся с уровнями технологий, которые были у расы на начало хода. Иначе говоря, при получения очередного отчёта только что построенные корабли получат технологические уровни предыдущего хода.
|
||||||
|
|
||||||
|
Корабль без вооружения имеет массу равную "Двигатели" + "Защита" + "Размер Трюма", указанные при его проектировании. Корабль с одной пушкой имеет массу, равную "Двигатели" + "Оружие" + "Защита" + "Размер Трюма". Для кораблей, несущих несколько орудий, каждое орудие после первого добавляет массу, равную половине "Оружия".
|
||||||
|
|
||||||
|
Массы некоторых из приведённых выше кораблей:
|
||||||
|
|
||||||
|
- Freighter: 20 единиц массы.
|
||||||
|
- Cruiser: 45 единиц массы.
|
||||||
|
- Gunship: 11 единиц массы.
|
||||||
|
|
||||||
|
Вы можете установить на планете производство кораблей определенного класса, который был ранее сконструирован Вами. Для постройки корабля необходимо затратить количество сырья, равное массе корабля и еще по 10 производственных единиц на каждую единицу массы корабля.
|
||||||
|
|
||||||
|
Например, Ваш HW производит корабли класса "Drone" из списка приведенного выше, и существует достаточный запас сырья, следовательно, Вы можете произвести 100 таких кораблей (без запаса сырья, то будет произведено немногим больше 99 кораблей). Однако, если Вы будете производить Battleship, то сможете произвести только 10/9 корабля за ход. После первого хода один корабль будет полностью построен и 1/9 будет в стадии производства. После второго хода 2 корабля будут находиться на орбите и 2/9 незавершенны. Если Вы затем перенастроите производство на другой тип кораблей или что-нибудь совершенно иное, эти 2/9 будут демонтированы и добавлены к запасу сырья. Запас сырья увеличится ровно на столько, сколько было использовано сырья при постройке этих 2/9 частей корабля. Производственные единицы, которые были использованы для постройки самого корабля будут безвозвратно утеряны как бесполезный труд.
|
||||||
|
|
||||||
|
Как видно, невыгодно часто переключать производство при постройке больших кораблей. Кроме того, очевидно, что экономически выгодным является способ постройки, при котором масса корабля является кратной (или приблизительно кратной) массе, которую может произвести за один ход данная планета.
|
||||||
|
|
||||||
|
Планета с промышленностью 1000, ресурсами 10 и без запасов сырья может произвести за один ход 99.0099 единиц массы. Разумно производить на такой планете корабли массами: 99.00, 11.00, 198.01 или 297.02. И весьма невыгодно, хотя и возможно, пытаться строить что-либо массой 140, например.
|
||||||
|
|
||||||
|
Важно отметить, что сырье тратится в только в самом конце постройки кораблей. Поэтому для кораблей, рассчитанных на длительную постройку (более одного хода), необходимое сырье можно подвозить на планету на протяжении всей постройки.
|
||||||
|
|
||||||
|
Правильный расчет производимого корабля - одна из самых важных задач в игре. Необходимо досконально представлять себе весь механизм расчетов. К примеру, если корабли, которые, по Вашим расчетам должны были на определённом ходу долететь до нужной планеты, оказались на ничтожном расстоянии 0.001 св. лет (или меньше) от этой планеты и не долетели, это означает, что Вы неправильно рассчитали скорость/массу и т.д.
|
||||||
|
|
||||||
|
## Группы кораблей {#ship-groups}
|
||||||
|
|
||||||
|
На поздних стадиях игры Вы можете иметь сотни и даже тысячи кораблей, которыми крайне неудобно было бы управлять отдельно. По этой причине корабли объединяются в группы. Все команды манипулирования ранее построенными кораблями оперируют группами кораблей, даже если в какой-то группе находится всего один корабль. Вы можете загружать группы кораблей грузом, посылать их на другую планету, передавать другой расе и т.п.
|
||||||
|
|
||||||
|
Группой является некоторое количество кораблей одного класса, находящихся в одном месте, перевозящих одинаковое количество однотипного груза, имеющих одинаковую принадлежность к флотам и имеющих одни и те же технологические уровни. Корабли с отсутствующим компонентом помечаются как имеющие технологический уровень 0 для этого компонента, т.е. невооруженные корабли, например, всегда имеют технологический уровень 0 для "Оружия".
|
||||||
|
|
||||||
|
Когда необходимо выполнить команду с меньшим количеством кораблей, чем находится в группе (например, послать на другую планету 8 из 10 кораблей), необходимо сначала выделить эти корабли в отдельную, новую группу. Программа-клиент упрощает такие действия для игрока, однако, необходимо помнить, что в приказе такое действие будет состоять из двух команд: сначала произойдёт выделение кораблей в новую группу, затем - действие с новой группой. Объединение эквивалентных групп происходит автоматически перед началом каждого хода или по команде игрока.
|
||||||
|
|
||||||
|
## Передача кораблей между расами {#ship-transfer}
|
||||||
|
|
||||||
|
В процессе игры можно передавать группы кораблей между расами. Если у расы, которой передается группа, уже определен класс кораблей с таким же названием, но другими характеристиками, принимающая раса так же получит новый класс кораблей, к названию которого будет добавлен некоторой случайный суффикс.
|
||||||
|
|
||||||
|
## Модернизация кораблей {#ship-upgrade}
|
||||||
|
|
||||||
|
В процессе развития технологических уровней расы, ранее построенные корабли могут устареть и перестать соответствовать текущим возможностям расы. Такие корабли можно модернизировать до необходимых уровней технологий.
|
||||||
|
|
||||||
|
Важно помнить, что процесс модернизации технологических уровней кораблей завершается лишь к окончанию хода, поэтому те корабли, которым была отдана команда модернизации, сперва примут участие в [сражениях](#combat), если на одной с ними орбите окажутся вражеские корабли.
|
||||||
|
|
||||||
|
Для проведения процесса модернизации группа кораблей должна находиться на одной из принадлежащих Вам планет. Корабли из этой группы будут модернизироваться в соответствии с Вашими текущими технологиями (если они уже имеют Ваши последние технологические уровни, то ничего не произойдет). Но можно и ограничить уровень технологий, до которого происходит модернизация, задав конечный уровень модернизации технологий.
|
||||||
|
|
||||||
|
Разумеется, модернизация кораблей имеет свою цену. Цена модернизации корабля равна частичной стоимости от постройки нового корабля. Например, если корабль имеет технологии равные 2/3 от необходимых технологий, то цена модернизации будет равна 1/3 от стоимости постройки нового корабля. Экономическая эффективность процесса модернизации будет выше, нежели постройка нового, так как модернизация не требует затрат сырья. Каждый из блоков корабля можно модернизировать отдельно. Конечная формула стоимости модернизации блока одного корабля выглядит так:
|
||||||
|
|
||||||
|
$$\left(1 - \frac{\text{текущая технология}}{\text{конечная технология}}\right) \times 10 \times \text{масса блока}$$
|
||||||
|
|
||||||
|
> Например, если модернизировать корабль типа "Cruiser" со всеми единичными технологиями до уровня технологий 2.0, то для полной его модернизации потребуется 225 производственных единиц.
|
||||||
|
|
||||||
|
Легко заметить, что стоимость модернизации тем выше, чем больше разрыв между текущей технологией корабля и конечной технологией.
|
||||||
|
|
||||||
|
Можно модернизировать либо всю группу кораблей, либо только необходимое количество. В случае, если количества производственных единиц планеты не достаточно для полной модернизации даже одного корабля, то указанные технологии одного корабля поднимаются на столько, на сколько это возможно (если делается комплексная модернизация, то все технологии корабля поднимаются пропорционально массе соответствующих компонентов). Таким образом, можно модернизировать корабли в течении нескольких ходов, выполняя каждый ход команду модернизации.
|
||||||
|
|
||||||
|
Разумеется, производственные единицы, потраченные на модернизацию кораблей, не будут принимать участие в производственном процессе на данной планете в течении этого хода. Так, если производственных единиц не хватает для выполнения полной модернизации указанной группы, используется весь запас производственных единиц на данной планете и она уже будет не в состоянии что-либо производить в течении этого хода.
|
||||||
|
|
||||||
|
На планете можно модернизировать любое количество групп кораблей, пока остаются свободные производственные единицы. Оставшееся после модернизации кораблей количество производственных единиц не будет потрачено на частичную модернизацию, а остаётся свободным для дальнейшего производства.
|
||||||
|
|
||||||
|
При модернизации нескольких групп кораблей на планете, сперва будут подвергнуты модернизации группы с наибольшей стоимостью и при условии, что на планете достаточно производственных единиц для модернизации каждой группы. Если производственных единиц окажется недостаточно для конкретной группы (например, случилась бомбардировка вражескими кораблями), она остаётся с изначальным уровнем технологий.
|
||||||
|
|
||||||
|
## Демонтаж кораблей {#ship-scrap}
|
||||||
|
|
||||||
|
Корабли, находящиеся на орбите планеты, могут быть разобраны на составляющие материалы. Запас сырья на планете, где находились корабли, будет увеличен на массу этих кораблей. Если корабли несли какой-либо груз, он сперва будет выгружен на планету. С колонистами есть особенность: над своей планетой они выгружаются и пополняют население, над необитаемой планетой — выгружаются и заселяют её (планета становится Вашей), а над чужой планетой колонисты не смогут быть выгружены и навсегда останутся в стадии заморозки на просторах Галактики.
|
||||||
|
|
||||||
|
## Флоты {#fleets}
|
||||||
|
|
||||||
|
Флоты могут быть составлены из групп кораблей разных типов. К флотам применима команда перемещения, точно также, как и к отдельно взятой группе. В отличие от отдельных групп, группы, входящие в состав флота, не перемещаются по установленным для планет грузовым маршрутам. Скорость флота равна скорости самой медленной группы, входящей в флот. Загрузка и разгрузка кораблей, входящих в флот может влиять лишь на скорость флота. При выделении какого-либо количества кораблей из группы, входящей в состав флота, эти выделенные корабли не будут входить в состав флота. Флот существует до тех пор, пока он содержит хоть одну группу. Между флотами может осуществляться передача групп и флоты могут объединяться в один, но только в том случае, если флоты находятся на одной планете.
|
||||||
|
|
||||||
|
## Движение {#movement}
|
||||||
|
|
||||||
|
Физические законы, которым повинуются корабли, путешествующие в гиперпространстве, говорят, что перемещаться можно только от одного большого центра масс до другого. Это означает, что Вы можете посылать корабли только с одной планеты на другую. Нельзя послать корабль просто в некую точку пространства. Когда корабли находятся в гиперпространстве, они уже не могут изменить курс, вернуться назад, изменить скорость или быть атакованы.
|
||||||
|
|
||||||
|
Космические корабли оборудуются гипердвигателем, эффективность которого равна мощности Двигателей умноженной на текущий технологический уровень блока Двигателей. Корабли с мощностью двигателя 0 навсегда останутся на орбите планеты, на которой они были построены. Это не означает, впрочем, что таких кораблей строить нельзя, наоборот, они могут быть прекрасным средством защиты планет от вражеских кораблей.
|
||||||
|
|
||||||
|
Корабли перемещаются за один ход на количество световых лет, равное эффективности двигателя, умноженной на 20 и делённой на полную массу корабля.
|
||||||
|
|
||||||
|
"Полная масса" означает массу самого корабля плюс массу перевозимого им груза. "Масса перевозимого груза" отличается от просто "массы груза" тем, что "масса груза" это общее количество единиц груза, а "масса перевозимого груза" это общее количество единиц груза деленное на технологический уровень Грузоперевозок, т.е. величина меньшая.
|
||||||
|
|
||||||
|
Следовательно, транспорты движутся быстрее, когда они не несут груза. Когда уровень технологии Двигателей низок, крупные корабли должны иметь соответствующие их массе Двигатели, иначе они будут очень медленны. Самые быстрые корабли могут двигаться со скоростью:
|
||||||
|
|
||||||
|
$$20 \times \text{технологический уровень Двигателей}$$
|
||||||
|
|
||||||
|
Исключением из общих правил расчета скорости кораблей являются корабли, входящие в состав какого-либо сформированного Вами флота. В этом случае, вне зависимости от возможностей кораблей, их скорость будет равна скорости самой медленной группы данного флота.
|
||||||
|
|
||||||
|
Чтобы проделать путь от одной планеты к другой, должно быть затрачено столько ходов, за сколько посылаемая группа кораблей может преодолеть расстояние между этими планетами.
|
||||||
|
|
||||||
|
От технологии двигателей расы зависит также и зона свободного перелета кораблей (максимальная дальность полета кораблей от своих планет). Любой корабль может улететь на любую планету, удаленную от планет, принадлежащих расе, на расстояние не более чем:
|
||||||
|
|
||||||
|
$$40 \times \text{технологический уровень Двигателей}$$
|
||||||
|
|
||||||
|
Если у расы не осталось планет, то оставшиеся у неё корабли не смогут покинуть своего места пребывания, поскольку нет возможности вычислить максимальное расстояние для полёта.
|
||||||
|
|
||||||
|
Если передаваемый другой расе корабль находится вне пределов досягаемости расы, которой его передали, то он либо продолжит свой полет, либо сможет быть отправлен на планету, находящуюся в зоне досягаемости расы владельца.
|
||||||
|
|
||||||
|
В отчётах Вы можете получить направление и скорость движения чужих кораблей, но только в случае, когда они направляются на одну из Ваших планет. В остальных случаях Вы можете получить только координаты центра масс чужих групп, двигающихся в гиперпространстве не далее чем на расстоянии
|
||||||
|
|
||||||
|
$$30 \times \text{Ваш технологический уровень Двигателей}$$
|
||||||
|
|
||||||
|
от ближайшей планеты, принадлежащей Вам. Корабли, находящиеся за пределами зоны видимости, вообще не будут показываться в Ваших отчетах, даже в том случае, если эти корабли летят на одну из Ваших планет.
|
||||||
|
|
||||||
|
Необходимо также помнить, что события, происходящие на планете, не принадлежащей расе, эта раса может наблюдать только в том случае, когда на планете находятся ее корабли. Если все корабли отсылаются с такой планеты, то состояние планеты сразу исчезает из поля зрения.
|
||||||
|
|
||||||
|
## Грузоподъемность {#cargo}
|
||||||
|
|
||||||
|
Грузоподъемность корабля означает размер его грузового отсека. Количество груза, который может нести корабль, вычисляется по формуле:
|
||||||
|
|
||||||
|
$$\text{Тех.ур. Грузоперевозок} \times \left(\text{Размер трюма} + \frac{\text{Размер трюма}^2}{20}\right)$$
|
||||||
|
|
||||||
|
где под понятием "Технологический_уровень_Грузоперевозок" подразумевается текущий технологический уровень Грузоперевозок корабля, а Размер трюма указывается при проектировании этого корабля.
|
||||||
|
|
||||||
|
Несколько примеров Грузоподъемности кораблей при технологии Грузоперевозок равной 1.0:
|
||||||
|
|
||||||
|
| Размер Трюма | Количество груза |
|
||||||
|
|---|---|
|
||||||
|
| 1 | 1.05 |
|
||||||
|
| 5 | 6.25 |
|
||||||
|
| 10 | 15.00 |
|
||||||
|
| 50 | 175.00 |
|
||||||
|
| 100 | 600.00 |
|
||||||
|
|
||||||
|
При технологии Грузоперевозок 2.0 эти показатели удваиваются и т.д. Заметим, что большие транспорты могут нести очень большое количество груза, но если они будут полностью загружены, то они будут очень медленно передвигаться (например, полностью загруженный Megafreighter при технологии двигателей 1 будет иметь скорость лишь 1.97 световых года за один ход).
|
||||||
|
|
||||||
|
Маленькая скорость тяжело груженых кораблей, вообще говоря, может быть компенсирована более высокой технологией Грузоперевозок. При технологическом уровне 2.0, масса любого груза на борту корабля будет считаться как половина от нормальной массы, используемой для вычислений скорости корабля и мощности защитного поля (см. [«Сражения»](#combat)). При тех. уровне 3.0, масса груза при вычислениях будет делиться на 3 и т.д. Например, корабль типа Freighter при тех. уровне Грузоперевозок 1 может нести 15 единиц груза. При тех. уровне 2.0 количество груза возрастет до 30 единиц, однако они будут замедлять корабль точно также, как 15 единиц груза при технологическом уровне Грузоперевозок 1.0. Таким образом при тех. уровне 2.0 и загруженных 30 единицах груза Freighter будет двигаться также быстро (учитывая тех. уровень Двигателей) как Freighter загруженный 15 ед. груза при технологии Грузоперевозок 1.0.
|
||||||
|
|
||||||
|
Иными словами, технология Грузоперевозок определяет, насколько компактно груз размещается на борту. «Масса перевозимого груза» равна количеству груза, делённому на технологический уровень Грузоперевозок, — поэтому чем выше эта технология, тем меньше один и тот же груз весит при расчётах, тем меньше он замедляет корабль и тем слабее снижает эффективность его защиты в [сражении](#combat).
|
||||||
|
|
||||||
|
Корабль может нести только один тип груза одновременно. Возможные типы груза - это колонисты, сырье и промышленность. Груз может быть доставлен на борт корабля с Вашей или не занятой планеты, на которой он имеется. Промышленность и Сырье могут быть выгружены на любой планете. Колонисты могут быть высажены только на планеты, принадлежащие Вам или на необитаемые планеты.
|
||||||
|
|
||||||
|
## Грузовые маршруты {#routes}
|
||||||
|
|
||||||
|
Чтобы перемещать грузы между планетами, Вы можете устанавливать грузовые маршруты, вместо того, чтобы делать это вручную. Грузовой маршрут с планеты A на планету B с грузом определенного типа означает, что сервер будет пытаться доставить этот груз с планеты A на планету B, используя все доступные транспортные корабли. Таким образом, если такой маршрут установлен, любой незагруженный корабль на планете A на каждом ходу будет загружен (если, конечно, груз нужного типа на этой планете есть) и послан на планету B. Любой корабль, прибывший на планету B с грузом нужного типа будет автоматически разгружен (даже если он прибыл не с планеты A).
|
||||||
|
|
||||||
|
Вы можете установить до 4-х грузовых маршрутов для каждой планеты, которой владеете: по одному на каждый тип груза и еще один для пустых кораблей, что полезно для возвращения транспортов с планет, потребляющих ресурсы на планеты, их производящие. Вы можете устанавливать грузовые маршруты только с планет, которыми Вы владеете, однако эти маршруты могут вести на любые планеты, так что Вы можете транспортировать таким образом колонистов на необитаемые планеты.
|
||||||
|
|
||||||
|
Если с планеты установлено несколько типов маршрутов, корабли загружаются и отправляются в следующем порядке: сначала колонисты, затем промышленность, затем сырье и, наконец, пустые корабли. При избытке количества конкретного типа груза на планете, группы кораблей будут загружаться в порядке убывания размеров их трюмов.
|
||||||
|
|
||||||
|
На особом положении находятся корабли входящие в состав какого-либо флота. Подразумевается, что эти корабли предназначены для выполнения некой специальной миссии и на них не распространяется обязанность следовать установленным грузовым маршрутам.
|
||||||
|
|
||||||
|
Грузовой маршрут может быть установлен лишь на планету, которая находится в [зоне свободного перелёта](#movement) кораблей.
|
||||||
|
|
||||||
|
## Сражения {#combat}
|
||||||
|
|
||||||
|
Когда на планете встречаются вооруженные корабли враждующих рас, происходит сражение. В случае агрессии одной из сторон, другая сторона, даже если она находится с агрессором в состоянии мира, также вступит в сражение. Это вовсе не означает, что у нападающих есть право первого выстрела, все сражающиеся стороны находятся в абсолютно равных условиях ведения сражения, и первым выстрелит тот, кто более удачлив. Корабли, которым отдан приказ на отлёт, а также корабли, отправляемые по установленным грузовым маршрутам, к началу хода ещё находятся на планете отправления и принимают участие в сражении у этой планеты — в гиперпространство уходят лишь уцелевшие в нём корабли. Корабль, уже находящийся в гиперпространстве, в сражениях не участвует вплоть до прибытия на планету назначения (подробный порядок — в разделе [«Последовательность действий»](#turn-sequence)).
|
||||||
|
|
||||||
|
В каждом раунде сражения все корабли получают шанс выстрелить по противнику, разумеется, если в этом же раунде его противники не были более удачливы и не успели своими выстрелами уничтожить корабль, ожидающий своей очереди атаковать.
|
||||||
|
|
||||||
|
В начале раунда случайным образом из участников сражения выбирается один корабль. Он случайным образом выбирает себе в качестве мишени вражеский корабль и стреляет по нему. Цель может быть, а может и не быть уничтожена, что зависит от вооружения, защиты и Фортуны. Атакующий корабль будет продолжать стрелять по случайным целям, пока не выстрелят все его орудия и остаются возможные цели для поражения.
|
||||||
|
|
||||||
|
Затем вновь случайным образом выбирается корабль, который в данном раунде ещё не стрелял и имеет шансы поразить вражеский корабль. Так продолжается до тех пор, пока в раунде не отстреляются все корабли. Если после этого остаются корабли, способные поразить друг друга, начинается новый раунд сражения.
|
||||||
|
|
||||||
|
Сражение прекращается, когда ни у одного из враждующих кораблей не остаётся цели, которую он способен поразить. Такое может, например, быть при встрече маленького истребителя с огромным, но невооруженным транспортом, защиту которого тот не в состоянии пробить.
|
||||||
|
|
||||||
|
Формула вероятности уничтожения корабля:
|
||||||
|
|
||||||
|
$$\frac{\log_4\!\left(\dfrac{\text{Оружие} \cdot \text{Т.У.Оружия}}{\text{Защита} \cdot \text{Т.У.Защиты} / \sqrt[3]{\text{масса}} \cdot \sqrt[3]{30}}\right) + 1}{2}$$
|
||||||
|
|
||||||
|
> Пояснение: $\log_4(a)$ - это логарифм по основанию 4 от а; $X^Y$ - это Х в степени Y; термин Оружие относится к стреляющему кораблю, а Защита и масса к кораблю-цели.
|
||||||
|
|
||||||
|
Эффективность атаки равна Оружию, умноженному его на технологический уровень. Эффективность защиты равна Защите, умноженной на технологический уровень Защиты, и деленной на диаметр корабля-цели, который равен корню кубическому от его массы. И это совершенно естественно, ибо большие корабли должны защищать большую поверхность и, при прочих равных условиях, слабее. Корабль с параметрами D=8 A=1 W=8 S=8 C=0 будет иметь лишь в 4 раза более эффективную защиту, чем корабль с параметрами D=1 A=1 W=1 S=1 C=0, хотя его Защита в 8 раз больше.
|
||||||
|
|
||||||
|
Параметры подобраны так, что корабль D=10 A=1 W=10 S=10 C=0, стреляя по такому же кораблю, уничтожит цель с вероятностью 50%. Если посчитать, то очевидно, что защита такого корабля равна ~3.21. Для того, чтобы уравнять вероятности атаки и защиты, защита нормируется - умножается на число ~3.11, таким образом, достигается ситуация, когда единица защиты обеспечивает единицу защищенности. Если эффективность атаки в 4 раза выше, чем у нормированной защиты - цель всегда уничтожается. Если эффективность нормированной защиты в 4 раза выше - атака всегда безуспешна.
|
||||||
|
|
||||||
|
Заметим, что любое количество груза на борту корабля увеличивает его [полную массу](#movement) при расчётах мощности защиты корабля, а генератор защитного поля должен защищать груз так же хорошо, как и сам корабль. Иначе говоря, для транспорта, загруженного известным количеством груза, эффективность защиты будет тем слабее, чем ниже уровень технологии [Грузоперевозок](#cargo). И если такой корабль будет уничтожен в бою, везомый им груз гибнет вместе с ним: с каждым потерянным кораблём груз группы уменьшается пропорционально числу уцелевших.
|
||||||
|
|
||||||
|
Если вооруженный корабль остался на вражеской планете после завершения сражения, он начинает бомбить планету, уничтожая на ней население и промышленность в зависимости от мощности его орудий.
|
||||||
|
|
||||||
|
## Бомбардировка планет {#bombing}
|
||||||
|
|
||||||
|
Вражеские корабли, находящиеся на орбите обитаемой планеты, выполняют бомбардировку с целью захвата этой планеты путём последующей колонизации. Механизм бомбардировки состоит в следующем. На планете уничтожается население и колонисты в количестве равном суммарной мощности бомбардировки всех атакующих групп. Такое же количество промышленности превращается в сырье. Мощность бомбардировки одной группы вычисляется так:
|
||||||
|
|
||||||
|
$$\left(\frac{\sqrt{\text{Оружие} \cdot \text{Тех.Ур.Оружия}}}{10} + 1\right) \cdot \text{Оружие} \cdot \text{Тех.Ур.Оружия} \cdot \text{Вооруженность} \cdot \text{Количество кораблей в группе}$$
|
||||||
|
|
||||||
|
Таким образом, один корабль Battle_Station при технологии Вооружения 1.0 будет иметь мощность бомбардировки, равную 139.30. Это означает, что за один ход, бомбардируя планету, такой корабль может уничтожить 139.30 ед. населения, 139.30 ед. колонистов и превратить 139.30 ед. промышленности в сырье. Два таких корабля будут иметь уже мощность 278.60.
|
||||||
|
|
||||||
|
Бомбардировка, в отличие от сражений, не происходит раундами - каждая из атакущих групп кораблей имеет возможность лишь один раз атаковать планету имеющимися силами.
|
||||||
|
|
||||||
|
Так же не играет роли очередность бомбардировки, поскольку планета будет атакована одновременно всеми группами, начиная с самой большой мощности бомбардировки, пока на планете остаётся население.
|
||||||
|
|
||||||
|
Если после бомбардировки на планете остается население, то она продолжает производство и может к следующему ходу построить, например, корабль. Если на планете остались, также и колонисты, то они превращаются в население, а накопленная промышленность возмещает потери производства.
|
||||||
|
|
||||||
|
В том случае, если после бомбардировки на планете не остается населения, планета становится необитаемой и может быть колонизирована заново. Таким образом Вы можете захватывать планеты, принадлежащие другим расам. Всё сырьё и все запасы промышленности, оставшиеся на планете после бомбардировки, сохраняются и перейдут к новому владельцу, который сможет колонизировать планету. Колонисты, находившиеся на планете, так же погибают, т.к. не остаётся ни активного населения, способного вывести их из состояния заморозки, ни промышленности на их поддержание.
|
||||||
|
|
||||||
|
## Колонизация планет {#colonization}
|
||||||
|
|
||||||
|
Любая необитаемая планета может быть колонизирована, т.е. заселена и таким образом добавления к владениям расы. Это происходит в случае, если колонисты высаживаются на необитаемую планету.
|
||||||
|
|
||||||
|
Если корабли нескольких рас, загруженные колонистами, одновременно прибывают на необитаемую планету и у этих рас установлены грузовые маршруты на доставку колонистов на эту планету, либо несколько игроков отдали команду выгрузки колонистов, то преимущество заселения планеты будет определено в следующем порядке:
|
||||||
|
|
||||||
|
- Наибольшее количество выгружаемых колонистов;
|
||||||
|
- Наибольшее количество населения расы;
|
||||||
|
- Случайный выбор претендента на колонизацию.
|
||||||
|
|
||||||
|
Колонисты рас, не получивших планету, при этом не пропадают: выгружается только победитель, а колонисты остальных претендентов остаются в трюмах своих кораблей, и их можно направить на другую планету. Разумеется, если раса, колонизирующая планету, не смогла получить планету во владение, тогда все последующие команды, рассчитанные на то, что именно Ваши колонисты были выгружены на планету, могут быть отменены в процессе производства хода. Если Вы не уверены, что планета будет колонизирована именно Вами, имеет смысл вступать в дипломатическую переписку, заключать договоры, продавать право колонизации за материальные блага и т.п.
|
||||||
|
|
||||||
|
Следует помнить, что флоты не подчиняются грузовым маршрутам, следовательно, колонисты на кораблях флотов не участвуют в подсчёте общечего числа колонистов для приоритетной высадки в конце маршрутов.
|
||||||
|
|
||||||
|
По умолчанию, на колонизированных планетах устанавливается производство промышленности.
|
||||||
|
|
||||||
|
## Война и мир {#war-peace}
|
||||||
|
|
||||||
|
В начале игры предполагается, что Вы находитесь в состоянии войны со всеми остальными расами. Вы можете заключить мир с другой расой в любое время. Это означает, что Ваши корабли не будут ни стрелять по кораблям этой расы, ни бомбить ее планеты. Однако любая раса при этом может находиться в состоянии войны с Вами, и до тех пор, пока она, со своей стороны, не заключит мир с Вами, её корабли еще могут атаковать Вас. Находясь в состоянии мира, Вы можете в любой момент снова объявить войну и наоборот.
|
||||||
|
|
||||||
|
В Вашем отчете будет указан дипломатический статус по отношению к каждой расе, однако, это ни в коей мере не показывает отношение к Вам остальных рас. Вы не знаете, как они к Вам относятся, до тех пор, пока не встретите один из их боевых кораблей. И только после того, как боевой корабль чужой расы за время хода не произвел выстрелов по Вашим кораблям, можно считать, что эта раса находится с Вами в мире.
|
||||||
|
|
||||||
|
Разумеется, удостовериться в том, что у той или иной расы по отношению к Вам только мирные намерения, можно прибегнув к дипломатической переписке, заключив, например, пакт о ненападении до определённого хода, вступив в альянс до конца партии и т.п. Однако, не стоит забывать, что в Галактике в равной степени есть место как для доблести, так и для коварства.
|
||||||
|
|
||||||
|
## Выход из игры {#exit}
|
||||||
|
|
||||||
|
Раса считается полностью погибшей, если она не владеет ни одной планетой и ни одним кораблем. Если раса приходит в подобное состояние, то она удаляется из списка участвующих рас перед началом просчета очередного хода. Так, если раса лишилась всех своих планет и кораблей, друзья вполне могут оказать ей помощь, передав в её владение корабли до начала производства хода.
|
||||||
|
|
||||||
|
Любая раса может воспользоваться командой досрочного выхода из игры. После подачи этой команды, раса будет удалена из игры через 3 хода. Команда выхода из игры должна быть последней в приказе.
|
||||||
|
|
||||||
|
Существует возможность принудительного окончания игры. Если раса 10 ходов подряд не присылала приказы на сервер (к дипломатической почте это не относится), то такая раса так же удаляется из игры.
|
||||||
|
|
||||||
|
Любая раса также может быть исключена из игры в любое время по решению администрации за грубые нарушения.
|
||||||
|
|
||||||
|
При исключении из игры удаляются все группы кораблей, принадлежащие расе, а все её планеты становятся необитаемыми и с них исчезает вся промышленность, материалы при этом остаются. Вышедшие из игры расы невозможно восстановить в списках участников партии.
|
||||||
|
|
||||||
|
За 5 ходов до принудительного исключения, раса с каждым новым отчетом начинает получать предупреждение.
|
||||||
|
|
||||||
|
За 3 хода до исключения, в каждом из следующих отчетов все участники узнают о грядущем выходе этой расы из игры. Любая команда, пришедшая на сервер от ещё живой расы, выключает механизм выхода расы из игры(это не относится к дипломатической почте).
|
||||||
|
|
||||||
|
## Победы и поражения {#victory}
|
||||||
|
|
||||||
|
В каждом Вашем отчете после просчета хода в списке состояния рас указано количество голосов, полученных каждой из рас в процессе хода. Суммарное количество голосов также указано в отчёте. Каждая тысяча единиц населения планет, принадлежащих расе, дают один голос. Если в начале игры каждая из рас имеет одну полностью развитую планету размером 1000 и две по 500, значит, каждая из рас имеет по два голоса. В процессе колонизации других планет и их развития каждая из рас может увеличить число своих голосов.
|
||||||
|
|
||||||
|
Процесс голосования происходит при производстве хода. В промежутках между ходами каждая из рас может изменить своего избранника. Если несколько рас по цепочке отдали свои голоса друг другу, то такие расы считаются находящимися в альянсе. Количество голосов альянса считается простым суммированием голосов всех членов альянса без учета голосов остальных рас проголосовавших за членов альянса, но не входящих в него.
|
||||||
|
|
||||||
|
Победителем считается та раса (или альянс), которая набрала 2/3 от общего числа голосов всех рас. Вообще говоря, есть возможность закончить игру с первых же ходов, если 2/3 всех рас изберут для себя единственную достойную и проголосуют за нее или образуют альянс, но стоит ли ради этого играть? Игра также может быть закончена и по безапелляционному решению администрации.
|
||||||
|
|
||||||
|
## Последовательность действий {#turn-sequence}
|
||||||
|
|
||||||
|
После того, как получены приказы от всех рас, происходит сам ход, т.е. следующая последовательность действий:
|
||||||
|
|
||||||
|
- Корабли передаются новым владельцам.
|
||||||
|
|
||||||
|
- Расы, покинувшие игру, освобождаются от своего имущества.
|
||||||
|
|
||||||
|
- Выполняются все отданные расами приказы. В частности, корабли разгружаются согласно приказам, а кораблям может быть отдан приказ на отлёт: такие корабли получают готовность к отлёту, но физически остаются на планете отправления.
|
||||||
|
|
||||||
|
- Корабли, где это возможно, объединяются в группы.
|
||||||
|
|
||||||
|
- Враждующие корабли вступают в схватку у планет отправления. Корабли, которым отдан приказ на отлёт, ещё стоят на планете и участвуют в этой схватке; в гиперпространство уходят только уцелевшие.
|
||||||
|
|
||||||
|
- Товары загружаются на корабли, находящиеся в начале грузовых маршрутов (после схватки — маршрутные транспорты сражаются незагруженными).
|
||||||
|
|
||||||
|
- Корабли (готовые к отлёту и снаряжённые по маршрутам) входят в гиперпространство и пролетают сквозь него.
|
||||||
|
|
||||||
|
- Корабли, где это возможно, объединяются в группы.
|
||||||
|
|
||||||
|
- Враждующие корабли вступают в схватку (после выхода из гиперпространства, у планет назначения).
|
||||||
|
|
||||||
|
- Корабли бомбят вражеские планеты.
|
||||||
|
|
||||||
|
- На планетах модернизируются корабли.
|
||||||
|
|
||||||
|
- На планетах строятся корабли (с учётом производственного потенциала, оставшегося от модернизации кораблей).
|
||||||
|
|
||||||
|
- Корабли, где это возможно, объединяются в группы.
|
||||||
|
|
||||||
|
- На планетах производится промышленность, добывается сырьё, разрабатываются новые технологии.
|
||||||
|
|
||||||
|
- Увеличивается население планет.
|
||||||
|
|
||||||
|
- Корабли разгружаются в конце грузовых маршрутов.
|
||||||
|
|
||||||
|
- Выгруженные колонисты увеличивают население планеты (если население планеты ниже её размера).
|
||||||
|
|
||||||
|
- Накопленная и выгруженная промышленность увеличивает производственный уровень планеты (если производственный уровень планеты ниже уровня населения).
|
||||||
|
|
||||||
|
- Происходит отмена маршрутов, выходящих за зону полёта кораблей.
|
||||||
|
|
||||||
|
- Происходит голосование.
|
||||||
|
|
||||||
|
## Отчет о результатах хода {#report}
|
||||||
|
|
||||||
|
Отчет, который Вы будете получать после каждого хода, содержит необходимую и достаточную информацию о состоянии Галактики, с учётом доступной видимости действий.
|
||||||
|
|
||||||
|
Перечень разделов отчёта приведён ниже.
|
||||||
|
|
||||||
|
- Размер галактики, количество планет галактики и количество оставшихся рас.
|
||||||
|
|
||||||
|
- Предупреждение о скором исключении Вашей расы из игры за неактивность, если до удаления осталось не более 5 ходов: указывается количество оставшихся ходов (механизм описан в разделе "Выход из игры").
|
||||||
|
|
||||||
|
- Расы, покидающие игру в ближайшее время: расы, до принудительного исключения которых за неактивность осталось не более 3 ходов; этот список виден всем участникам.
|
||||||
|
|
||||||
|
- Ваше общее количество голосов.
|
||||||
|
- Имя расы, которой Вы отдаете свои голоса.
|
||||||
|
|
||||||
|
- Статус игроков.
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| N | Имя |
|
||||||
|
| D | Уровень технологии Двигателей |
|
||||||
|
| W | Уровень технологии Вооружений |
|
||||||
|
| S | Уровень технологии Защиты |
|
||||||
|
| C | Уровень технологии Грузоперевозок |
|
||||||
|
| P | Общее население |
|
||||||
|
| I | Общее производство |
|
||||||
|
| # | Число планет во владении |
|
||||||
|
| R | Война или мир (Ваше отношение к указанной расе, но не наоборот) |
|
||||||
|
| V | Количество голосов, отданных расе |
|
||||||
|
|
||||||
|
- Ваши науки.
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| N | Название науки |
|
||||||
|
| D | Доля технологии Двигателей |
|
||||||
|
| W | Доля технологии Вооружений |
|
||||||
|
| S | Доля технологии Защиты |
|
||||||
|
| C | Доля технологии Грузоперевозок |
|
||||||
|
|
||||||
|
- Чужие науки.
|
||||||
|
|
||||||
|
Список наук чужих рас доступен в том случае, если Ваши корабли находятся на одной из чужих планет, где разрабатываются технологии при использовании этих наук.
|
||||||
|
|
||||||
|
- Классы Ваших кораблей.
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| N | Имя |
|
||||||
|
| D | Двигатели |
|
||||||
|
| A | Вооруженность |
|
||||||
|
| W | Оружие |
|
||||||
|
| S | Защита |
|
||||||
|
| C | Размер Трюма |
|
||||||
|
| М | Масса одного корабля этого типа |
|
||||||
|
|
||||||
|
- Классы чужих кораблей.
|
||||||
|
|
||||||
|
Описание каждого класса чужих кораблей, которые были встречены Вами на этом ходу.
|
||||||
|
|
||||||
|
- Сражения.
|
||||||
|
|
||||||
|
Это описание всех [сражений](#combat), в которых Вы участвовали либо были их свидетелями на этом ходу. Для каждого сражения указан список групп, присутствовавших на месте сражения к началу битвы, за которым следует описание обмена ударами. Дополнительно указываются:
|
||||||
|
|
||||||
|
- Количество кораблей группы, не уничтоженных в процессе сражения;
|
||||||
|
|
||||||
|
- Статус участника сражения: "In_Battle" или "Out_Battle", причём, последнее состояние указывает на то, что группа не участвовала в сражении, а являлась лишь свидетелем происходящих событий. Такое возможно, если у группы не оказалось врагов.
|
||||||
|
|
||||||
|
- Бомбардировки.
|
||||||
|
|
||||||
|
Список планет, которые подверглись бомбардировке на этом ходу в пределах Вашей видимости, содержащий информацию об атаке:
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| W | Имя расы, производящей бомбардировку |
|
||||||
|
| O | Имя расы-владельца |
|
||||||
|
| N | Название планеты |
|
||||||
|
| P | Население |
|
||||||
|
| I | Производственный потенциал |
|
||||||
|
| P | Тип производства |
|
||||||
|
| $ | Запасы промышленности |
|
||||||
|
| M | Запасы сырья |
|
||||||
|
| C | Количество колонистов |
|
||||||
|
| A | Мощность атаки |
|
||||||
|
| (пусто) | Состояние на момент после бомбардировки: "Damaged"/"Wiped" |
|
||||||
|
|
||||||
|
- Приближающиеся группы.
|
||||||
|
|
||||||
|
Список всех групп чужих кораблей, находящихся в гиперпространстве и направляющихся на Ваши планеты.
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| O | Откуда (с какой планеты отправлена группа) |
|
||||||
|
| D | Куда (на какую планету группа направляется) |
|
||||||
|
| R | Оставшееся расстояние |
|
||||||
|
| S | Скорость |
|
||||||
|
| M | Полная масса |
|
||||||
|
|
||||||
|
- Ваши планеты.
|
||||||
|
|
||||||
|
Это список всех Ваших планет. Приводится следующая информация:
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| # | Галактический номер планеты |
|
||||||
|
| X | X координата |
|
||||||
|
| Y | Y координата |
|
||||||
|
| N | Название планеты |
|
||||||
|
| S | Размер |
|
||||||
|
| P | Население |
|
||||||
|
| I | Производственный потенциал |
|
||||||
|
| R | Природные ресурсы |
|
||||||
|
| P | Тип производства (промышленность, сырье, исследования или корабли) |
|
||||||
|
| $ | Запасы промышленности |
|
||||||
|
| M | Запасы сырья |
|
||||||
|
| C | Количество колонистов |
|
||||||
|
| L | Свободный производственный потенциал |
|
||||||
|
|
||||||
|
Параметр (L) используется для определения реального промышленного потенциала на данный ход.
|
||||||
|
|
||||||
|
- Корабли в производстве.
|
||||||
|
|
||||||
|
| Код | Значение |
|
||||||
|
|---|---|
|
||||||
|
| # | Галактический номер планеты |
|
||||||
|
| N | Название планеты |
|
||||||
|
| S | Наименование типа строящегося корабля |
|
||||||
|
| C | Стоимость постройки одного такого корабля (в производственных ед.) без учета расходов на добычу сырья |
|
||||||
|
| P | Сколько производственных единиц уже было затрачено на постройку этого корабля (уже учитывая производство сырья) |
|
||||||
|
| L | Свободный производственный потенциал |
|
||||||
|
|
||||||
|
Необходимо обратить внимание на то, что Стоимость постройки одного корабля не учитывает расходов на добычу сырья, в то время как, в количество затраченных производственных единиц, уже включены расходы на добычу сырья. Поэтому вполне нормальная ситуация, когда (P) немного превышает (C). Это может говорить лишь о том, что необходимое для постройки корабля количество сырья еще не было произведено.
|
||||||
|
|
||||||
|
- Грузовые маршруты.
|
||||||
|
|
||||||
|
- Чьи-то планеты.
|
||||||
|
|
||||||
|
Список планет чужих рас, на которых находятся Ваши наблюдатели.
|
||||||
|
|
||||||
|
- Необитаемые планеты.
|
||||||
|
|
||||||
|
Список незаселенных планет, за которыми Вы можете наблюдать, т.е. на них присутствуют Ваши корабли.
|
||||||
|
|
||||||
|
- Неизвестные планеты.
|
||||||
|
|
||||||
|
Список планет в пределах Вашей досягаемости, за которыми Вы не можете наблюдать. Указывается только номер планеты и ее координаты.
|
||||||
|
|
||||||
|
- Ваши флоты.
|
||||||
|
|
||||||
|
- Группы Ваших кораблей.
|
||||||
|
|
||||||
|
- Группы чужих кораблей.
|
||||||
|
|
||||||
|
Список групп кораблей, принадлежащих другим игрокам, за которыми Вы можете наблюдать.
|
||||||
|
|
||||||
|
- Неопознанные группы кораблей.
|
||||||
|
|
||||||
|
Список координат групп чужих кораблей, находящихся в гиперпространстве и не направляющиеся на Ваши планеты.
|
||||||
|
|
||||||
|
## Дипломатическая почта {#mail}
|
||||||
|
|
||||||
|
Игроки в Galaxy анонимны. Это означает, что никто, кроме администрации сервера, не знает адресов и имен других игроков. Это сделано для того, чтобы не переносить игровые отношения и конфликты на реальную жизнь и тем самым дать игрокам возможность вести себя менее скованно.
|
||||||
|
|
||||||
|
В процессе игры каждая из рас имеет возможность общаться с другими расами. Процесс общения происходит посредством пересылки дипломатических писем через сервер. Цель написания писем может быть самой разнообразной. Например для заключения союзов, совместных военных действий, разрыва союзов и т.п.
|
||||||
|
|
||||||
|
## Вопросы, на которые необходимо знать ответы {#questions}
|
||||||
|
|
||||||
|
1. В чем различие между промышленностью и производственным потенциалом? А между промышленностью и запасами промышленности?
|
||||||
|
|
||||||
|
2. Какую массу имеет корабль с параметрами D=0 A=20 W=5 S=0 C=0?
|
||||||
|
|
||||||
|
3. С какой скоростью будет лететь корабль с параметрами D=5 A=0 W=0 S=0 C=0, если его технологический уровень Двигателей равен 1.0?
|
||||||
|
|
||||||
|
4. На каком ходу корабль, имеющий скорость 18 св. лет за ход, прибудет к месту назначения, если расстояние между планетой отправки и планетой назначения 40 св. лет, а отправлен он был на 15 ходу?
|
||||||
|
|
||||||
|
5. Какой технологический уровень Двигателей будет иметь корабль с параметрами D=1 A=0 W=0 S=0 C=0, если до его постройки технологический уровень Двигателей был равен 1.8, а на другой планете одновременно с его постройкой технология Двигателей увеличилась на 0.2?
|
||||||
|
|
||||||
|
6. Какую массу будет иметь корабль с параметрами D=10 A=0 W=0 S=0 C=2 и технологическим уровнем Грузоперевозок 1.2, если его полностью загрузить?
|
||||||
|
|
||||||
|
7. Произойдет ли сражение, если на планете встретились корабль с параметрами D=1 A=0 W=0 S=0 C=0, принадлежащий расе A, и корабль с параметрами D=1 A=1 W=1 S=0 C=0, принадлежащий расе B, причем у расы B установлен "мир" с расой A, а у расы A - "война" с расой B?
|
||||||
|
|
||||||
|
## Некоторые советы {#tips}
|
||||||
|
|
||||||
|
На ранних стадиях игры нет необходимости сражаться за планеты. Следует начинать с постройки грузовых кораблей, накопления промышленности и доставки колонистов и промышленности на ближайшие необитаемые планеты. Разумно также установить контакты с другими расами с целью создания альянсов, которые очень пригодятся, когда настанет время сражений. Для этого просто необходимо осуществлять дипломатическую переписку. Не ведут переписки только обреченные расы.
|
||||||
|
|
||||||
|
Карта в Вашем отчете показывает только планеты, колонизированные чужими расами, и полную массу групп чужих кораблей, направляющихся к одной из Ваших планет. Чтобы иметь подробную информацию о вражеских флотах, которые могут угрожать Вашей безопасности, нужно посылать на чужие планеты корабли исключительно со шпионскими целями.
|
||||||
|
|
||||||
|
В случае приближающейся атаки на ваши планеты самое важное - убедиться, что для обороны достаточно сил. Для каждой такой группы разделите расстояние на скорость, чтобы получить количество ходов оставшихся до того, как группа достигнет планеты. Оцените полную массу: чем она больше, тем больше потенциальная угроза. Вы, конечно, не можете знать, огромный ли это линкор, или флот небольших истребителей, а, может, нечто среднее. Можно еще попытаться прибегнуть к дипломатии: владелец группы хоть и не может повернуть ее назад, но он может объявить себя в мире с Вами, так что группа не будет по прибытии атаковать Вас.
|
||||||
|
|
||||||
|
На более поздних стадиях игры, вполне вероятно, что одна из рас достигнет большего развития нежели остальные и займет доминирующую позицию в Галактике. С этого момента для остальных игроков жизненно важно немедленно отбросить в сторону все разногласия между собой и совместно атаковать эту расу. Ибо, если дать возможность этой расе захватывать расы одну за другой, она получит превосходный шанс победить в этой игре.
|
||||||
|
|
||||||
|
В силу специфики работы [алгоритма ведения сражений](#combat), обычно флот разделяется на три дополняющих друг друга части:
|
||||||
|
|
||||||
|
- много маленьких защитных кораблей прикрытия, для отвлечения пушек противника;
|
||||||
|
|
||||||
|
- один или более кораблей с несколькими маленькими орудиями, для скорейшего поражения маленьких кораблей прикрытия;
|
||||||
|
|
||||||
|
- один или более кораблей с одной или несколькими большими орудиями, для поражения основных вражеских кораблей.
|
||||||
|
|
||||||
|
Это необходимо учитывать при создании обороны планет.
|
||||||
|
|
||||||
|
## Пересчет ходов {#turn-recalc}
|
||||||
|
|
||||||
|
Как бы хорошо ни работал сервер и интернет, иногда возникает необходимость повторить процесс производства хода. Это исключение из общих правил работы сервера. Вот в каких случаях может произойти пересчет хода:
|
||||||
|
|
||||||
|
1. Найдена ошибка в логике сервера, повлекшая необратимые изменения в состоянии рас нескольких игроков.
|
||||||
|
|
||||||
|
2. Была нарушена система доставки приказов на сервер или отчётов от сервера на срок, превышающий время ожидания между двумя ходами, т.е. все игроки не имели возможности управления своими расами.
|
||||||
|
|
||||||
|
3. Произошло форс-мажорное событие и большинство участников партии однозначно пришли к выводу о необходимости пересчета хода.
|
||||||
|
|
||||||
|
4. Принято безапелляционное решение администрации на этот счет.
|
||||||
|
|
||||||
|
Каждый из участников может попросить администрацию о пересчете хода, сославшись на любой из этих пунктов и приведя соответствующие доказательства. И если администрация решит, что выполнено одно из указанных условий, ход будет пересчитан.
|
||||||
|
|
||||||
|
Ход не будет пересчитан, если условий не достаточно или есть возможность динамического исправления ситуации.
|
||||||
|
|
||||||
|
## Этика игры {#ethics}
|
||||||
|
|
||||||
|
Учтите прежде Всего, что "Galaxy" - это игра, не стоит отождествлять лидера какой-либо из рас и реального игрока. Не стоит обижаться, если кто-либо обошелся с Вами некорректно. Здесь допустимы обман и коварство, учтите это в Вашей политике. Администрация не рассматривает жалобы подобного рода и не принимает никаких санкций к игрокам, совершивших подобные "проступки".
|
||||||
|
|
||||||
|
Дипломатическая почта, циркулирующая между игроками, является личной почтой. Вы можете использовать в ней любые формы и выражения. Однако грубость недопустима в широковещательных сообщениях, даже если эта грубость часть Вашего имиджа. Кроме того, администрация сервера оставляет за собой право цензурировать сообщения, не являющиеся личной дипломатической почтой.
|
||||||
|
|
||||||
|
Сервер игры "Galaxy" - это программа, которая, к сожалению, может содержать ошибки. Мы будем благодарны Вам, если Вы сообщите о находках подобного рода. Однако, если Вы попытаетесь использовать найденную ошибку в собственных интересах, администрация сервера может принять решение об исключении Вас из партии.
|
||||||
+666
@@ -0,0 +1,666 @@
|
|||||||
|
# Galaxy Game
|
||||||
|
|
||||||
|
Player's guide.
|
||||||
|
|
||||||
|
## The turn cycle {#turn-cycle}
|
||||||
|
|
||||||
|
The whole game is divided into turns, which in turn alternate between two processes: "turn production" and "waiting for the next turn to be produced". Turn production is considered instantaneous — it takes no in-game time. It is the moment when everything actually happens: planets produce, the fleets of warring races fight [battles](#combat), and ships [move](#movement) from planet to planet. The full order of these steps is described in [Turn sequence](#turn-sequence).
|
||||||
|
|
||||||
|
There is also the notion of "game state", which reflects the current situation (who owns what, who is doing what, which ships are flying where, and so on). The game state corresponds to the report a player receives right after each turn is produced.
|
||||||
|
|
||||||
|
Turn production happens regularly at a pre-arranged time known to all participants. It ends with reports being sent to everyone, describing the state of their races for that turn. After that the waiting period for the next turn begins — its purpose is to give players time to think over their orders for the upcoming turn and thereby change the game state.
|
||||||
|
|
||||||
|
A command only declares an action (for example, the production type on a planet); it does not perform that action immediately. You can order a ship to be built, but it is built only during the next turn production. You can order ships to depart somewhere, but they fly only during turn production.
|
||||||
|
|
||||||
|
When an order (a sequence of commands) reaches the server, the player is notified that the commands have been accepted. Each command in the order is checked for validity and acknowledged separately. A player may send as many orders as they like, but each new order replaces the previous one. This lets you correct a faulty order, but you must repeat the commands that were already correct. Fortunately, the client program helps the player keep track of this and ensures the orders stay consistent.
|
||||||
|
|
||||||
|
During the waiting period you can also exchange diplomatic mail between races. All turns are numbered, which makes planning your actions easier.
|
||||||
|
|
||||||
|
The game begins with the production of turn number zero, during which the galaxy itself is created (planets are placed, participants receive their developed planets, and so on). Reports describing each race's initial state are then sent out. Having received such a report, each participant should study it carefully and, based on it, design (or adjust) a development plan for their race. Note that from the moment the reports for turn N are sent until the reports for turn N+1 are sent, turn N is in progress (the wait for turn N+1 to be produced).
|
||||||
|
|
||||||
|
For a fuller understanding, here is an example of how the server works:
|
||||||
|
|
||||||
|
- reports for turn N are sent to everyone (turn N has begun);
|
||||||
|
|
||||||
|
- orders are accepted, order acknowledgements are sent according to the commands received, diplomatic mail and news are distributed, and so on (turn N continues — the "wait for the next turn" is under way);
|
||||||
|
|
||||||
|
- according to the schedule set when the game was assembled, the server produces the new turn N+1 (turn production happens);
|
||||||
|
|
||||||
|
- reports for turn N+1 are sent to everyone (turn N+1 has begun).
|
||||||
|
|
||||||
|
## The galaxy {#galaxy}
|
||||||
|
|
||||||
|
The space of the galaxy where the action unfolds is the surface of a torus — visually just a square whose opposite sides are joined. The galaxy contains a number of star systems. Although any star system could contain several planets and other bodies, that level of detail is irrelevant to the game: resource extraction uses the combined resources of the whole star system, and travel is organised as movement between centres of mass in the galaxy.
|
||||||
|
|
||||||
|
For simplicity, then, the game uses the term "planet" where it might really mean "star system".
|
||||||
|
|
||||||
|
## Units of measurement {#units}
|
||||||
|
|
||||||
|
The game's units correspond to real ones. Distances between planets are measured in light-years. Planet sizes are measured in tens of kilometres of diameter. Each unit of population stands for 10 million people, and each unit of goods, material, and so on stands for 10 million tons. Each turn of the game corresponds to one year in the life of the galaxy. In most cases, instead of quoting real units it is more convenient to use the phrase "unit of measurement" — for example, "5 units of mass" or "10 units of population".
|
||||||
|
|
||||||
|
## Numeric precision {#precision}
|
||||||
|
|
||||||
|
Numbers used in commands and reports are shown to three decimal places. The server stores numbers and performs calculations at higher precision, rounding the results only for presentation to players in reports. For example, if a report shows 2.000, the real value may range anywhere from 1.9995 to 2.0004.
|
||||||
|
|
||||||
|
Ship technology levels are the exception — reports show them without such rounding (see [Technologies](#tech)).
|
||||||
|
|
||||||
|
## Names {#names}
|
||||||
|
|
||||||
|
Ship classes, planets, fleets, and sciences can have arbitrary names chosen by the player. Names may be at most 30 characters long. Characters may be letters of the alphabet, digits, and the special characters `!@#$%^*-_=+~()[]{}`. Special characters may not appear at the start or end of a name, nor be repeated more than twice in a row.
|
||||||
|
|
||||||
|
When choosing a name, the player is advised to use common sense first and foremost and not to abuse the ability to create unreadable names. While this is not outright forbidden, such a way of communicating with the outside world will not look its best in the eyes of other participants, since many of the names a player picks are seen by the whole galaxy. Do not use wording in names that grossly insults any player or incites ethnic or religious hatred (in the real world, of course, not the game one). The game administration reserves the right to take measures, up to removing a player from the server, for abuse of names.
|
||||||
|
|
||||||
|
## Planets {#planets}
|
||||||
|
|
||||||
|
Each race begins the game owning one or three planets (depending on the game type); all the other planets are uninhabited. During the game you may both settle uninhabited planets and conquer planets settled by other races.
|
||||||
|
|
||||||
|
At the start of the game all planets have unique names. After colonising a planet you may rename it. You may also wish to rename your first planets right at the start to give them a more intriguing look.
|
||||||
|
|
||||||
|
Every planet has two unchangeable characteristics: size and natural resources. In a standard game each participant starts owning one planet of size 1000 (called a "Home World", HW) and two planets of size 500 each (called "Daughter Worlds", DW). Players' HWs are at least 30 light-years apart from one another; DWs lie 5 to 15 light-years from their HW.
|
||||||
|
|
||||||
|
All the other planets have no fixed characteristics and occur in the galaxy in the following proportions:
|
||||||
|
|
||||||
|
| planet type | size | resources | approximate share of all planets |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Super-large planets | 1500-2500 | 0-3 | 6% |
|
||||||
|
| Merely large planets | 1000-2000 | 1-10 | 18% |
|
||||||
|
| Ordinary planets | 0-1000 | 0.1-10 | 50% |
|
||||||
|
| Small but fabulously rich | 0-500 | 5-25 | 18% |
|
||||||
|
| Asteroids | 0 | 0 | 8% |
|
||||||
|
|
||||||
|
Super-large planets may only occur at least 20 light-years from an HW and from one another; merely large ones, at least 10 light-years. As you can see, the characteristic ranges of super-large and merely large planets overlap. This is not a mistake but reality. On average there are 10 planets per participant in the galaxy (including the three starting ones).
|
||||||
|
|
||||||
|
A planet's other characteristics may change over the course of the game, both as a result of players' actions and through the planet's natural development. These characteristics include:
|
||||||
|
|
||||||
|
- Population
|
||||||
|
- Colonists — surplus population.
|
||||||
|
- Material
|
||||||
|
- Industry
|
||||||
|
|
||||||
|
## Population {#population}
|
||||||
|
|
||||||
|
Every planet has a "Size" attribute. It reflects not only the planet's physical size but also the presence of mountains, deserts, and oceans, the climate, and so on. A planet's population cannot exceed its size, but may be lower. Your first planet has size and population both equal to 1000. A planet's population grows by 8% each turn. The part of the population that exceeds the planet's size turns into [colonists](#colonists). Remember that a planet's population limits the growth of its [industry](#industry): the number of industry units cannot exceed the number of population units.
|
||||||
|
|
||||||
|
## Colonists {#colonists}
|
||||||
|
|
||||||
|
Every 8 units of population exceeding the planet's size automatically turn into one unit of colonists. These inhabitants are kept in containers at low temperature. If colonists are carried to other planets that have room to settle, they are automatically thawed and added to the planet's population. This is how uninhabited planets can be settled. Each unit of colonists yields 8 units of population again. Modern technology lets colonists be frozen and thawed without any production or material cost.
|
||||||
|
|
||||||
|
## Industry {#industry}
|
||||||
|
|
||||||
|
A planet's industry level (or "amount of industry") corresponds to things like tools, computers, transport, and so on. At the start of the game all your planets have the maximum industry level, equal to their population (1000 for the HW and 500 for the DWs).
|
||||||
|
|
||||||
|
## Production on a planet {#production}
|
||||||
|
|
||||||
|
Available production units may be spent on extracting material, building ships, producing industry, or researching technologies. A single planet may produce only one kind of product per turn (for example, only one type of ship).
|
||||||
|
|
||||||
|
## Production units {#production-capacity}
|
||||||
|
|
||||||
|
Each inhabited planet has a certain production capacity, expressed in production units. It cannot exceed the planet's population, but may be lower. Production capacity determines the planet's output and is made up of the productive power of its population and its industry level.
|
||||||
|
|
||||||
|
$$\text{Production capacity} = \text{industry} \times 0.75 + \text{population} \times 0.25$$
|
||||||
|
|
||||||
|
At the start of the game you have one planet with a production capacity of 1000 and two with a capacity of 500 each. This means that every turn you have 1000, 500, and another 500 production units that you can put to work however you like. If your planet has 500 units of industry and a population of 1000, it can produce only about 625 units of the chosen product per turn. In other words, your planet has a production capacity of 625 production units.
|
||||||
|
|
||||||
|
## Technologies {#tech}
|
||||||
|
|
||||||
|
You start at technology level 1 in the following fields: Drive, Weapons, Shields, and Cargo. These levels can be raised by switching a planet's production to research. To raise a technology level by one, you must spend 5000 production units. Fractional research spending is certainly useful: if you spend 500 units on Weapons research, your level in that field rises by one tenth, and this takes immediate effect when building ships — there is no need to wait for the level to rise by a whole unit. When a ship is built, it receives the technology levels you had at the moment turn production began (see [Turn sequence](#turn-sequence)). The technology levels of ships already built can later be raised with the upgrade command.
|
||||||
|
|
||||||
|
To avoid inaccuracies in calculations, ship technology levels are rounded to three decimal places at the moment of building or upgrading. Reports therefore always show ships' actual, not rounded, technology levels.
|
||||||
|
|
||||||
|
By default, all players' starting planets are set to research the "Drive" technology.
|
||||||
|
|
||||||
|
## Sciences {#sciences}
|
||||||
|
|
||||||
|
You can combine technologies into sciences. Each science consists of known technologies taken in proportions you define. When you switch a planet's production to research in a science you have defined, production units are spent on the technologies that make up that science, in the proportion you set. The shares of technologies in a science are given as fractions of one, and they sum to one (100%).
|
||||||
|
|
||||||
|
For example, a science named "First Step" is defined by the shares 0.222 for Drive, 0.111 for Weapons, 0.667 for Shields, and 0 for Cargo (summing to one; this corresponds to the ratio 10 : 5 : 30 : 0). When researching such a science, 22.2% of the planet's available production units go to Drive research, 11.1% to Weapons, and 66.7% to Shields. In this way, in a single turn on a single planet you can raise several technology levels at once.
|
||||||
|
|
||||||
|
## Material {#material}
|
||||||
|
|
||||||
|
Producing anything other than technologies requires material as well as production. Material corresponds to things like sheet steel, copper wire, timber, and oil needed for production. Every planet may hold a stock of produced or delivered material that can be used when building ships. If no such stock exists, some of the production units can be directed to producing material.
|
||||||
|
|
||||||
|
As noted, every planet has an unchangeable characteristic — Natural Resources — that shows how rich the planet is in metals, coal, oil, and so on. Planets with a high Resources rating need less production spent on making material. The rating depends on the [planet type](#planets): for inhabited planets it is strictly above zero, reaching 25 on rare richly endowed planets, and is zero only on asteroids. Your first planets have a resources rating of 10, which means each production unit can produce 10 units of material. A planet with a resources rating of 0.1 can produce only 0.1 units of material per production unit. Produced material is stockpiled and can be transported to other planets by cargo ships.
|
||||||
|
|
||||||
|
When you colonise planets with a low natural-resources rating, you should produce material on high-rating planets and then carry it to the others, so that you do not spend a lot of production units extracting material. The amount of material on a planet can also be increased by scrapping ships located there. In that case each unit of mass of the scrapped ships turns into one unit of material.
|
||||||
|
|
||||||
|
For example, suppose you have set production to build spaceships. Building requires an amount of material equal to the ship's mass. If you start with no material stock, it is produced automatically. This process is entirely invisible to you; the only noticeable effect is that in places the production output is lower than you expected.
|
||||||
|
|
||||||
|
In other words, what remains for building a ship is as much production as the planet can give, minus the amount spent on extracting the material needed for building. For this reason, keep in mind that when building ships not all of a planet's production units go directly into building — some have to extract the material that is missing for it. In practice this condition is one of the most important when designing ships, because it directly determines how long a given class of ship takes to build on a chosen planet.
|
||||||
|
|
||||||
|
## Producing industry {#industry-production}
|
||||||
|
|
||||||
|
As planets develop, the amount of industry can be raised by switching the planet's production to industry. One unit of industry requires 5 production units and one unit of [material](#material); if there is no material stock, the missing amount is extracted automatically from the same production units (as when [building ships](#ship-building)) at the planet's resources "rate" — so on resource-poor planets industry grows more slowly.
|
||||||
|
|
||||||
|
A planet's industry level cannot exceed its population. While industry is below the population, the industry produced immediately raises the [production capacity](#production-capacity). Once industry reaches the population, the surplus is not lost but set aside as an industry reserve (shown in the report as "industry reserve", `$`). This reserve can be carried between planets; and as soon as a planet's industry drops below its population again — whether because the population has grown or because the reserve was brought to a young colony — it is automatically turned into industry and raises the level. This is how colonised planets develop quickly.
|
||||||
|
|
||||||
|
## Designing ships {#ship-design}
|
||||||
|
|
||||||
|
Before issuing commands to build ships on planets, you must design the ship classes you need. There are no ready-made ship classes; each race in the galaxy designs its own according to its strategic goals. To create a ship class, give it a name and define the following characteristics:
|
||||||
|
|
||||||
|
| Parameter | Description |
|
||||||
|
|---|---|
|
||||||
|
| Drive | hyperdrive power |
|
||||||
|
| Armament | number of weapon mounts |
|
||||||
|
| Weapons | weapon power |
|
||||||
|
| Shields | shield-generator power |
|
||||||
|
| Cargo | cargo-hold size |
|
||||||
|
|
||||||
|
Each characteristic you choose may be either 0 or at least 1. Of course, not all of a ship's characteristics may be zero at once. Armament and Weapons must both be zero or both non-zero. Armament is an integer; the rest may be fractional. For example, a ship may have Shields of 1.5 but not 0.5.
|
||||||
|
|
||||||
|
Designing ship classes takes no time or resources; a new class becomes available immediately after the corresponding command. For how a ship's characteristics affect the game, see [Movement](#movement), [Cargo capacity](#cargo), and [Battles](#combat).
|
||||||
|
|
||||||
|
Here are a few example ship classes. Although such classes may be found in the galaxy among various races, you are not required to design ships with exactly these characteristics — what matters far more is the tasks your ships will perform.
|
||||||
|
|
||||||
|
| Name | D | A | W | S | C |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| Drone | 1 | 0 | 0 | 0 | 0 |
|
||||||
|
| Fighter | 1 | 1 | 1 | 1 | 0 |
|
||||||
|
| Gunship | 4 | 2 | 2 | 4 | 0 |
|
||||||
|
| Destroyer | 6 | 1 | 8 | 4 | 0 |
|
||||||
|
| Cruiser | 15 | 1 | 15 | 15 | 0 |
|
||||||
|
| Battle_Cruiser | 30 | 3 | 10 | 30 | 0 |
|
||||||
|
| Battleship | 25 | 1 | 30 | 35 | 0 |
|
||||||
|
| Battle_Station | 60 | 3 | 30 | 100 | 0 |
|
||||||
|
| Orbital_Fort | 0 | 3 | 30 | 100 | 0 |
|
||||||
|
| Space_Gun | 0 | 1 | 1 | 0 | 0 |
|
||||||
|
| Freighter | 8 | 0 | 0 | 2 | 10 |
|
||||||
|
| Megafreighter | 80 | 2 | 2 | 30 | 100 |
|
||||||
|
|
||||||
|
## Building ships {#ship-building}
|
||||||
|
|
||||||
|
Ships are built with the technology levels the race had at the start of the turn. In other words, in the next report the just-built ships carry the previous turn's technology levels.
|
||||||
|
|
||||||
|
An unarmed ship has a mass equal to Drive + Shields + Cargo, as set when designing it. A ship with one gun has a mass equal to Drive + Weapons + Shields + Cargo. For ships carrying several guns, each gun after the first adds mass equal to half of Weapons.
|
||||||
|
|
||||||
|
The masses of some of the ships above:
|
||||||
|
|
||||||
|
- Freighter: 20 units of mass.
|
||||||
|
- Cruiser: 45 units of mass.
|
||||||
|
- Gunship: 11 units of mass.
|
||||||
|
|
||||||
|
You can set a planet to build ships of a class you designed earlier. Building a ship requires an amount of material equal to the ship's mass, plus 10 production units for each unit of the ship's mass.
|
||||||
|
|
||||||
|
For example, suppose your HW builds "Drone"-class ships from the list above and there is enough material stock; then you can produce 100 of them (with no material stock, a little over 99 ships are produced). However, if you build a Battleship, you can produce only 10/9 of a ship per turn. After the first turn one ship is fully built and 1/9 is in progress. After the second turn 2 ships are in orbit and 2/9 are unfinished. If you then switch production to another ship type or something else entirely, those 2/9 are scrapped and added to the material stock. The material stock grows by exactly as much material as was used in building those 2/9 of a ship. The production units that were spent on building the ship itself are lost for good, as wasted labour.
|
||||||
|
|
||||||
|
As you can see, it is inefficient to switch production often when building large ships. It is also clear that the economical approach is to build ships whose mass is a multiple (or an approximate multiple) of the mass a given planet can produce in one turn.
|
||||||
|
|
||||||
|
A planet with industry 1000, resources 10, and no material stock can produce 99.0099 units of mass per turn. It is sensible to build ships of mass 99.00, 11.00, 198.01, or 297.02 on such a planet. And it is very inefficient, though possible, to try to build something of mass 140, say.
|
||||||
|
|
||||||
|
Note that material is spent only at the very end of building a ship. So for ships meant to take a long time to build (more than one turn), the required material can be delivered to the planet throughout the build.
|
||||||
|
|
||||||
|
Correctly computing the ship you build is one of the most important tasks in the game. You must understand the whole calculation thoroughly. For instance, if ships that by your reckoning should have reached the target planet on a certain turn end up a negligible 0.001 light-years (or less) short and fail to arrive, it means you miscalculated the speed/mass/etc.
|
||||||
|
|
||||||
|
## Ship groups {#ship-groups}
|
||||||
|
|
||||||
|
In the late game you may have hundreds or even thousands of ships, which would be extremely awkward to manage individually. For this reason ships are combined into groups. All commands for manipulating previously built ships operate on ship groups, even if a group contains only one ship. You can load a group with cargo, send it to another planet, transfer it to another race, and so on.
|
||||||
|
|
||||||
|
A group is some number of ships of the same class, in the same place, carrying the same amount of the same cargo type, belonging to the same fleet, and having the same technology levels. Ships lacking a component are marked as having technology level 0 for that component; for example, unarmed ships always have technology level 0 for Weapons.
|
||||||
|
|
||||||
|
When you need to issue a command for fewer ships than the group contains (for example, send 8 of 10 ships to another planet), you must first split those ships off into a separate, new group. The client program simplifies this for the player, but remember that in the order such an action consists of two commands: first the ships are split into a new group, then the action is applied to the new group. Equivalent groups are merged automatically before each turn, or on the player's command.
|
||||||
|
|
||||||
|
## Transferring ships between races {#ship-transfer}
|
||||||
|
|
||||||
|
During the game you can transfer ship groups between races. If the receiving race already has a ship class with the same name but different characteristics, it also receives a new ship class whose name has a random suffix appended.
|
||||||
|
|
||||||
|
## Upgrading ships {#ship-upgrade}
|
||||||
|
|
||||||
|
As a race's technology levels advance, previously built ships may become obsolete and no longer match the race's current capabilities. Such ships can be upgraded to the required technology levels.
|
||||||
|
|
||||||
|
Keep in mind that the ship-upgrade process completes only by the end of the turn, so ships ordered to upgrade will first take part in [battles](#combat) if enemy ships happen to be in the same orbit.
|
||||||
|
|
||||||
|
To perform an upgrade, the ship group must be on one of your planets. The ships in that group are upgraded to your current technologies (if they already have your latest levels, nothing happens). You can also cap the technology level the upgrade goes up to, by specifying a target upgrade level.
|
||||||
|
|
||||||
|
Of course, upgrading ships has its price. The cost of upgrading a ship equals a partial cost of building a new one. For example, if a ship has technologies equal to 2/3 of the required ones, the upgrade cost is 1/3 of the cost of building a new ship. Upgrading is more economical than building anew, since it requires no material. Each of a ship's blocks can be upgraded separately. The final formula for the cost of upgrading one block of one ship is:
|
||||||
|
|
||||||
|
$$\left(1 - \frac{\text{current tech}}{\text{target tech}}\right) \times 10 \times \text{block mass}$$
|
||||||
|
|
||||||
|
> For example, upgrading a "Cruiser" with all unit technologies up to technology level 2.0 requires 225 production units for a full upgrade.
|
||||||
|
|
||||||
|
It is easy to see that the upgrade cost is higher the larger the gap between the ship's current technology and the target technology.
|
||||||
|
|
||||||
|
You can upgrade either the whole group or only the number of ships needed. If a planet does not have enough production units for a full upgrade of even one ship, the specified technologies of one ship are raised as far as possible (and for a combined upgrade, all the ship's technologies are raised in proportion to the masses of the corresponding components). This way you can upgrade ships over several turns, issuing the upgrade command each turn.
|
||||||
|
|
||||||
|
Of course, the production units spent on upgrading ships do not take part in the planet's production process during that turn. So if there are not enough production units for a full upgrade of the specified group, the planet's entire stock of production units is used and it will be unable to produce anything that turn.
|
||||||
|
|
||||||
|
A planet can upgrade any number of ship groups while free production units remain. Production units left over after upgrades are not spent on a partial upgrade but stay free for further production.
|
||||||
|
|
||||||
|
When upgrading several groups on a planet, the groups with the highest cost are upgraded first, provided the planet has enough production units to upgrade each one. If there are not enough production units for a particular group (for example, an enemy bombardment occurred), it keeps its original technology levels.
|
||||||
|
|
||||||
|
## Scrapping ships {#ship-scrap}
|
||||||
|
|
||||||
|
Ships in orbit of a planet can be broken down into their constituent materials. The material stock of the planet where the ships were located is increased by the mass of those ships. If the ships carried any cargo, it is first unloaded onto the planet. Colonists are a special case: over your own planet they are unloaded and add to the population; over an uninhabited planet they are unloaded and settle it (the planet becomes yours); but over a foreign planet colonists cannot be unloaded and remain frozen forever in the reaches of the galaxy.
|
||||||
|
|
||||||
|
## Fleets {#fleets}
|
||||||
|
|
||||||
|
Fleets may be made up of ship groups of different types. The move command applies to a fleet just as it does to a single group. Unlike standalone groups, the groups within a fleet do not travel along the cargo routes set for planets. A fleet's speed equals the speed of its slowest group. Loading and unloading ships in a fleet can only affect the fleet's speed. If you split some number of ships off a group that belongs to a fleet, those split-off ships do not belong to the fleet. A fleet exists as long as it contains at least one group. Groups can be transferred between fleets, and fleets can merge into one, but only if the fleets are on the same planet.
|
||||||
|
|
||||||
|
## Movement {#movement}
|
||||||
|
|
||||||
|
The physical laws obeyed by ships travelling through hyperspace state that movement is possible only from one large centre of mass to another. This means you can send ships only from one planet to another. You cannot send a ship to some arbitrary point in space. Once ships are in hyperspace, they can no longer change course, turn back, change speed, or be attacked.
|
||||||
|
|
||||||
|
Spaceships are fitted with a hyperdrive whose effectiveness equals the Drive power multiplied by the current technology level of the Drive block. Ships with drive power 0 stay forever in the orbit of the planet where they were built. This does not mean such ships should not be built — on the contrary, they can be an excellent means of defending planets from enemy ships.
|
||||||
|
|
||||||
|
In one turn, ships travel a number of light-years equal to the drive effectiveness multiplied by 20 and divided by the ship's full mass.
|
||||||
|
|
||||||
|
"Full mass" means the mass of the ship itself plus the mass of the cargo it carries. The "mass of carried cargo" differs from plain "cargo mass" in that "cargo mass" is the total number of cargo units, whereas the "mass of carried cargo" is the total number of cargo units divided by the Cargo technology level — that is, a smaller value.
|
||||||
|
|
||||||
|
Consequently, transports move faster when they carry no cargo. When the Drive technology level is low, large ships must have Drives to match their mass, or they will be very slow. The fastest ships can move at a speed of:
|
||||||
|
|
||||||
|
$$20 \times \text{Drive tech level}$$
|
||||||
|
|
||||||
|
The exception to the general speed rules is ships that belong to a fleet you have formed. In that case, regardless of the ships' own capabilities, their speed equals that of the fleet's slowest group.
|
||||||
|
|
||||||
|
To travel from one planet to another, it takes as many turns as the sent group of ships needs to cover the distance between those planets.
|
||||||
|
|
||||||
|
A race's drive technology also determines its ships' free-flight zone (the maximum flight range of ships from the race's own planets). Any ship may fly to any planet located no farther from the race's planets than:
|
||||||
|
|
||||||
|
$$40 \times \text{Drive tech level}$$
|
||||||
|
|
||||||
|
If a race has no planets left, its remaining ships cannot leave their location, because there is no way to compute the maximum flight distance.
|
||||||
|
|
||||||
|
If a ship transferred to another race is outside that race's reach, it either continues its flight or can be sent to a planet within the owner race's reach.
|
||||||
|
|
||||||
|
In reports you can get the direction and speed of foreign ships, but only when they are heading to one of your planets. Otherwise you can only get the coordinates of the centre of mass of foreign groups moving through hyperspace no farther than
|
||||||
|
|
||||||
|
$$30 \times \text{your Drive tech level}$$
|
||||||
|
|
||||||
|
from the nearest planet you own. Ships beyond the visibility zone do not appear in your reports at all, even if they are flying to one of your planets.
|
||||||
|
|
||||||
|
Remember, too, that a race can observe events on a planet it does not own only when its ships are present on that planet. If all ships are sent away from such a planet, the planet's state immediately leaves your view.
|
||||||
|
|
||||||
|
## Cargo capacity {#cargo}
|
||||||
|
|
||||||
|
A ship's cargo capacity is the size of its cargo hold. The amount of cargo a ship can carry is computed by the formula:
|
||||||
|
|
||||||
|
$$\text{Cargo tech} \times \left(\text{Cargo size} + \frac{\text{Cargo size}^2}{20}\right)$$
|
||||||
|
|
||||||
|
where "Cargo technology level" means the ship's current Cargo technology level, and Cargo size is set when designing the ship.
|
||||||
|
|
||||||
|
A few examples of ship cargo capacities at Cargo technology 1.0:
|
||||||
|
|
||||||
|
| Cargo size | Cargo amount |
|
||||||
|
|---|---|
|
||||||
|
| 1 | 1.05 |
|
||||||
|
| 5 | 6.25 |
|
||||||
|
| 10 | 15.00 |
|
||||||
|
| 50 | 175.00 |
|
||||||
|
| 100 | 600.00 |
|
||||||
|
|
||||||
|
At Cargo technology 2.0 these figures double, and so on. Note that large transports can carry a great deal of cargo, but when fully loaded they move very slowly (for example, a fully loaded Megafreighter at Drive technology 1 has a speed of only 1.97 light-years per turn).
|
||||||
|
|
||||||
|
The low speed of heavily loaded ships can, generally, be compensated by a higher Cargo technology. At technology level 2.0, the mass of any cargo on board is counted as half the normal mass used to compute the ship's speed and shield power (see [Battles](#combat)). At level 3.0, the cargo mass is divided by 3 in the calculations, and so on. For example, a Freighter at Cargo technology 1 can carry 15 units of cargo. At level 2.0 the cargo amount rises to 30 units, yet they slow the ship exactly like 15 units of cargo at Cargo technology 1.0. So at level 2.0 with 30 units loaded, a Freighter moves just as fast (for a given Drive level) as a Freighter loaded with 15 units at Cargo technology 1.0.
|
||||||
|
|
||||||
|
In other words, Cargo technology determines how compactly cargo is stowed on board. The "mass of carried cargo" equals the cargo amount divided by the Cargo technology level — so the higher this technology, the less the same cargo weighs in the calculations, the less it slows the ship, and the less it weakens its defence in [battle](#combat).
|
||||||
|
|
||||||
|
A ship can carry only one type of cargo at a time. The possible cargo types are colonists, material, and industry. Cargo can be loaded aboard from your own or an unoccupied planet that has it. Industry and material can be unloaded on any planet. Colonists can be landed only on planets you own or on uninhabited planets.
|
||||||
|
|
||||||
|
## Cargo routes {#routes}
|
||||||
|
|
||||||
|
To move cargo between planets, you can set up cargo routes instead of doing it by hand. A cargo route from planet A to planet B with a given cargo type means the server will try to deliver that cargo from A to B using all available transport ships. So once such a route is set, any unloaded ship on planet A is loaded each turn (provided cargo of the right type is present there) and sent to planet B. Any ship arriving at planet B with cargo of the right type is automatically unloaded (even if it did not come from A).
|
||||||
|
|
||||||
|
You can set up to 4 cargo routes for each planet you own: one per cargo type, plus one for empty ships, which is useful for returning transports from resource-consuming planets to the ones that produce. You can set cargo routes only from planets you own, but those routes may lead to any planet, so you can transport colonists to uninhabited planets this way.
|
||||||
|
|
||||||
|
If several route types are set from a planet, ships are loaded and dispatched in this order: colonists first, then industry, then material, and finally empty ships. When there is a surplus of a particular cargo type on a planet, ship groups are loaded in descending order of their hold size.
|
||||||
|
|
||||||
|
Ships that belong to a fleet are a special case. Such ships are assumed to be assigned to some special mission and are not subject to following the cargo routes set up.
|
||||||
|
|
||||||
|
A cargo route can only be set to a planet that lies within the ships' [free-flight zone](#movement).
|
||||||
|
|
||||||
|
## Battles {#combat}
|
||||||
|
|
||||||
|
When armed ships of warring races meet on a planet, a battle occurs. If one side is the aggressor, the other side joins the battle too, even if it is at peace with the aggressor. This does not mean the attackers have the right of the first shot: all the fighting sides are on completely equal terms, and the one who is luckier shoots first. Ships ordered to depart, as well as ships dispatched along cargo routes, are still at the planet of departure at the start of the turn and take part in the battle there — only the ships that survive it enter hyperspace. A ship already in hyperspace does not take part in battles until it arrives at its destination planet (for the full order, see [Turn sequence](#turn-sequence)).
|
||||||
|
|
||||||
|
In each round of a battle, every ship gets a chance to fire at the enemy — provided, of course, that its opponents were not luckier in the same round and did not manage to destroy the ship awaiting its turn to attack.
|
||||||
|
|
||||||
|
At the start of a round one ship is chosen at random from the battle's participants. It picks an enemy ship at random as its target and fires at it. The target may or may not be destroyed, depending on weapons, shields, and Fortune. The attacking ship keeps firing at random targets until all its guns have fired and while targets it can hit remain.
|
||||||
|
|
||||||
|
Then another ship is chosen at random — one that has not yet fired this round and has a chance to hit an enemy ship. This continues until every ship has fired in the round. If, after that, ships able to hit one another remain, a new round of the battle begins.
|
||||||
|
|
||||||
|
A battle ends when none of the warring ships has a target it is able to hit. This may happen, for example, when a small fighter meets a huge but unarmed transport whose shields it cannot pierce.
|
||||||
|
|
||||||
|
The formula for the probability of destroying a ship:
|
||||||
|
|
||||||
|
$$\frac{\log_4\!\left(\dfrac{\text{Weapons} \cdot \text{Weapons tech}}{\text{Shields} \cdot \text{Shields tech} / \sqrt[3]{\text{mass}} \cdot \sqrt[3]{30}}\right) + 1}{2}$$
|
||||||
|
|
||||||
|
> Note: $\log_4(a)$ is the base-4 logarithm of a; $X^Y$ is X to the power Y; the term Weapons refers to the firing ship, while Shields and mass refer to the target ship.
|
||||||
|
|
||||||
|
The attack effectiveness equals Weapons multiplied by its technology level. The defence effectiveness equals Shields multiplied by the Shields technology level and divided by the target ship's diameter, which equals the cube root of its mass. This is only natural, since larger ships must protect a larger surface and, all else being equal, are weaker. A ship with D=8 A=1 W=8 S=8 C=0 will have only 4 times the effective defence of a ship with D=1 A=1 W=1 S=1 C=0, even though its Shields are 8 times larger.
|
||||||
|
|
||||||
|
The parameters are chosen so that a ship with D=10 A=1 W=10 S=10 C=0, firing at an identical ship, destroys the target with a probability of 50%. Working it out, that ship's defence is clearly about 3.21. To equalise the attack and defence probabilities, the defence is normalised — multiplied by about 3.11 — so that one unit of shields provides one unit of protection. If the attack effectiveness is 4 times higher than the normalised defence, the target is always destroyed. If the normalised defence is 4 times higher, the attack always fails.
|
||||||
|
|
||||||
|
Note that any cargo aboard a ship increases its [full mass](#movement) when computing the ship's shield power, since the shield generator must protect the cargo as well as the ship itself. In other words, for a transport loaded with a known amount of cargo, the lower the [Cargo](#cargo) technology level, the weaker the defence. And if such a ship is destroyed in battle, the cargo it carried perishes with it: with each ship lost, the group's cargo decreases in proportion to the number of survivors.
|
||||||
|
|
||||||
|
If an armed ship remains at an enemy planet after the battle ends, it begins to bombard the planet, destroying its population and industry in proportion to its weapon power.
|
||||||
|
|
||||||
|
## Planet bombardment {#bombing}
|
||||||
|
|
||||||
|
Enemy ships in orbit of an inhabited planet bombard it in order to capture it through subsequent colonisation. The mechanism is as follows. The planet's population and colonists are destroyed in an amount equal to the combined bombardment power of all the attacking groups. The same amount of industry is converted into material. The bombardment power of one group is computed as:
|
||||||
|
|
||||||
|
$$\left(\frac{\sqrt{\text{Weapons} \cdot \text{Weapons tech}}}{10} + 1\right) \cdot \text{Weapons} \cdot \text{Weapons tech} \cdot \text{Armament} \cdot \text{ships in group}$$
|
||||||
|
|
||||||
|
Thus one Battle_Station at Weapons technology 1.0 has a bombardment power of 139.30. This means that in one turn, bombarding a planet, such a ship can destroy 139.30 units of population, 139.30 units of colonists, and convert 139.30 units of industry into material. Two such ships have a power of 278.60.
|
||||||
|
|
||||||
|
Bombardment, unlike battles, does not happen in rounds — each attacking ship group gets to attack the planet only once, with the forces it has.
|
||||||
|
|
||||||
|
The order of bombardment also does not matter, because the planet is attacked simultaneously by all groups, starting with the highest bombardment power, while the planet still has population.
|
||||||
|
|
||||||
|
If population remains after the bombardment, the planet keeps producing and may, by the next turn, build a ship, for example. If colonists also remain, they turn into population, and the accumulated industry makes up for the lost production.
|
||||||
|
|
||||||
|
If no population remains after the bombardment, the planet becomes uninhabited and can be colonised anew. This is how you can capture planets belonging to other races. All material and all industry reserves left on the planet after the bombardment are preserved and pass to the new owner who colonises it. The colonists who were on the planet also die, since there is neither active population to thaw them nor industry to sustain them.
|
||||||
|
|
||||||
|
## Colonising planets {#colonization}
|
||||||
|
|
||||||
|
Any uninhabited planet can be colonised — that is, settled and thereby added to a race's holdings. This happens when colonists land on an uninhabited planet.
|
||||||
|
|
||||||
|
If ships of several races loaded with colonists arrive at an uninhabited planet at the same time, and those races have cargo routes set to deliver colonists to that planet (or several players issued a colonist-unload command), the right to settle the planet is decided in this order:
|
||||||
|
|
||||||
|
- the largest amount of colonists being unloaded;
|
||||||
|
- the largest race population;
|
||||||
|
- a random choice among the contenders.
|
||||||
|
|
||||||
|
The colonists of races that did not win the planet are not lost: only the winner unloads, while the other contenders' colonists stay in their ships' holds and can be sent to another planet. Of course, if a race colonising a planet failed to take it into possession, all subsequent commands that relied on your colonists having been unloaded there may be cancelled during turn production. If you are not sure the planet will be colonised by you, it is worth entering into diplomatic correspondence, making treaties, selling the right to colonise for material gain, and so on.
|
||||||
|
|
||||||
|
Remember that fleets do not obey cargo routes; therefore colonists aboard fleet ships do not count toward the total number of colonists for priority landing at the ends of routes.
|
||||||
|
|
||||||
|
By default, colonised planets are set to produce industry.
|
||||||
|
|
||||||
|
## War and peace {#war-peace}
|
||||||
|
|
||||||
|
At the start of the game you are assumed to be at war with all the other races. You may make peace with another race at any time. This means your ships will neither fire at that race's ships nor bombard its planets. However, that race may still be at war with you, and until it makes peace with you in turn, its ships may still attack you. While at peace, you may declare war again at any time, and vice versa.
|
||||||
|
|
||||||
|
Your report shows your diplomatic status toward each race, but this in no way shows how the other races regard you. You do not know how they feel about you until you meet one of their warships. Only after a foreign race's warship has not fired at your ships during the turn can you consider that race to be at peace with you.
|
||||||
|
|
||||||
|
Of course, you can make sure a given race's intentions toward you are purely peaceful through diplomatic correspondence — concluding, say, a non-aggression pact until a certain turn, joining an alliance until the end of the game, and so on. But do not forget that the galaxy has room in equal measure for valour and for treachery.
|
||||||
|
|
||||||
|
## Leaving the game {#exit}
|
||||||
|
|
||||||
|
A race is considered completely dead if it owns no planets and no ships. If a race reaches such a state, it is removed from the list of participating races before the next turn is computed. So if a race has lost all its planets and ships, friends may well come to its aid by transferring ships into its possession before turn production.
|
||||||
|
|
||||||
|
Any race may use the early-exit command. After issuing it, the race is removed from the game in 3 turns. The exit command must be the last one in the order.
|
||||||
|
|
||||||
|
There is also a way to force-end the game for a race. If a race has not sent orders to the server for 10 consecutive turns (diplomatic mail does not count), that race is removed from the game.
|
||||||
|
|
||||||
|
Any race may also be removed from the game at any time by a decision of the administration, for gross violations.
|
||||||
|
|
||||||
|
On removal from the game, all ship groups belonging to the race are deleted, and all its planets become uninhabited and lose all their industry, while materials remain. Races that have left the game cannot be restored to the participant lists.
|
||||||
|
|
||||||
|
5 turns before a forced removal, the race begins to receive a warning with every new report.
|
||||||
|
|
||||||
|
3 turns before removal, every following report tells all participants about the coming departure of that race from the game. Any command reaching the server from a still-living race switches off the race's exit mechanism (this does not apply to diplomatic mail).
|
||||||
|
|
||||||
|
## Victory and defeat {#victory}
|
||||||
|
|
||||||
|
Each of your reports, after the turn is computed, shows in the race-status list the number of votes received by each race during the turn. The total number of votes is also given in the report. Every thousand units of population on a race's planets grants one vote. If at the start of the game each race has one fully developed planet of size 1000 and two of 500, then each race has two votes. Through colonising other planets and developing them, each race can increase its number of votes.
|
||||||
|
|
||||||
|
Voting happens during turn production. Between turns, each race may change whom it votes for. If several races give their votes to one another in a chain, those races are considered to be in an alliance. An alliance's vote count is the simple sum of the votes of all alliance members, not counting the votes of the other races that voted for alliance members but are not part of the alliance.
|
||||||
|
|
||||||
|
The winner is the race (or alliance) that gathers 2/3 of the total votes of all races. In principle it is possible to end the game in the very first turns if 2/3 of all races pick the one worthy race and vote for it or form an alliance — but is it worth playing for that? The game may also be ended by an unappealable decision of the administration.
|
||||||
|
|
||||||
|
## Turn sequence {#turn-sequence}
|
||||||
|
|
||||||
|
Once orders have been received from all races, the turn itself happens — that is, the following sequence of actions:
|
||||||
|
|
||||||
|
- Ships are handed to their new owners.
|
||||||
|
|
||||||
|
- Races that have left the game are freed of their property.
|
||||||
|
|
||||||
|
- All commands issued by races are carried out. In particular, ships are unloaded according to the orders, and ships may be ordered to depart: such ships become ready to depart but physically stay at the planet of departure.
|
||||||
|
|
||||||
|
- Ships are merged into groups where possible.
|
||||||
|
|
||||||
|
- Warring ships join battle at the planets of departure. Ships ordered to depart are still at the planet and take part in this battle; only the survivors enter hyperspace.
|
||||||
|
|
||||||
|
- Goods are loaded onto ships at the start of cargo routes (after the battle — route transports fight unloaded).
|
||||||
|
|
||||||
|
- Ships (those ready to depart and those equipped along routes) enter hyperspace and fly through it.
|
||||||
|
|
||||||
|
- Ships are merged into groups where possible.
|
||||||
|
|
||||||
|
- Warring ships join battle (after leaving hyperspace, at the destination planets).
|
||||||
|
|
||||||
|
- Ships bombard enemy planets.
|
||||||
|
|
||||||
|
- Ships are upgraded on planets.
|
||||||
|
|
||||||
|
- Ships are built on planets (using the production capacity left over from ship upgrades).
|
||||||
|
|
||||||
|
- Ships are merged into groups where possible.
|
||||||
|
|
||||||
|
- Planets produce industry, extract material, and research new technologies.
|
||||||
|
|
||||||
|
- Planet populations grow.
|
||||||
|
|
||||||
|
- Ships are unloaded at the ends of cargo routes.
|
||||||
|
|
||||||
|
- Unloaded colonists increase the planet's population (if the planet's population is below its size).
|
||||||
|
|
||||||
|
- Accumulated and unloaded industry raises the planet's production level (if the planet's production level is below its population).
|
||||||
|
|
||||||
|
- Routes that go beyond the ships' flight zone are cancelled.
|
||||||
|
|
||||||
|
- Voting takes place.
|
||||||
|
|
||||||
|
## The turn report {#report}
|
||||||
|
|
||||||
|
The report you receive after each turn contains the necessary and sufficient information about the state of the galaxy, subject to the visibility of actions available to you.
|
||||||
|
|
||||||
|
The list of report sections is given below.
|
||||||
|
|
||||||
|
- Galaxy size, number of planets in the galaxy, and number of remaining races.
|
||||||
|
|
||||||
|
- A warning that your race is about to be removed from the game for inactivity, when no more than 5 turns remain until removal: the number of remaining turns is shown (the mechanism is described in [Leaving the game](#exit)).
|
||||||
|
|
||||||
|
- Races leaving the game soon: races with no more than 3 turns left until forced removal for inactivity; this list is visible to all participants.
|
||||||
|
|
||||||
|
- Your total number of votes.
|
||||||
|
- The name of the race you give your votes to.
|
||||||
|
|
||||||
|
- Player status.
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| N | Name |
|
||||||
|
| D | Drive technology level |
|
||||||
|
| W | Weapons technology level |
|
||||||
|
| S | Shields technology level |
|
||||||
|
| C | Cargo technology level |
|
||||||
|
| P | Total population |
|
||||||
|
| I | Total production |
|
||||||
|
| # | Number of planets owned |
|
||||||
|
| R | War or peace (your stance toward the listed race, but not the reverse) |
|
||||||
|
| V | Number of votes given to the race |
|
||||||
|
|
||||||
|
- Your sciences.
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| N | Science name |
|
||||||
|
| D | Drive technology share |
|
||||||
|
| W | Weapons technology share |
|
||||||
|
| S | Shields technology share |
|
||||||
|
| C | Cargo technology share |
|
||||||
|
|
||||||
|
- Foreign sciences.
|
||||||
|
|
||||||
|
A foreign race's list of sciences is available when your ships are on one of that race's planets where technologies are being researched using those sciences.
|
||||||
|
|
||||||
|
- Your ship classes.
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| N | Name |
|
||||||
|
| D | Drive |
|
||||||
|
| A | Armament |
|
||||||
|
| W | Weapons |
|
||||||
|
| S | Shields |
|
||||||
|
| C | Cargo size |
|
||||||
|
| M | Mass of one ship of this type |
|
||||||
|
|
||||||
|
- Foreign ship classes.
|
||||||
|
|
||||||
|
A description of each foreign ship class you encountered this turn.
|
||||||
|
|
||||||
|
- Battles.
|
||||||
|
|
||||||
|
A description of all the [battles](#combat) you took part in or witnessed this turn. For each battle, a list of the groups present at the battle site at its start is given, followed by a description of the exchange of fire. Additionally noted:
|
||||||
|
|
||||||
|
- The number of ships in the group not destroyed during the battle;
|
||||||
|
|
||||||
|
- The participant's battle status: "In_Battle" or "Out_Battle", where the latter means the group did not take part in the battle but was only a witness to events. This is possible if the group had no enemies.
|
||||||
|
|
||||||
|
- Bombardments.
|
||||||
|
|
||||||
|
A list of planets that were bombarded this turn within your visibility, with attack information:
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| W | Name of the bombarding race |
|
||||||
|
| O | Name of the owner race |
|
||||||
|
| N | Planet name |
|
||||||
|
| P | Population |
|
||||||
|
| I | Production capacity |
|
||||||
|
| P | Production type |
|
||||||
|
| $ | Industry reserve |
|
||||||
|
| M | Material reserve |
|
||||||
|
| C | Number of colonists |
|
||||||
|
| A | Attack power |
|
||||||
|
| (blank) | State after the bombardment: "Damaged"/"Wiped" |
|
||||||
|
|
||||||
|
- Approaching groups.
|
||||||
|
|
||||||
|
A list of all foreign ship groups in hyperspace heading to your planets.
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| O | From (which planet the group was sent from) |
|
||||||
|
| D | To (which planet the group is heading to) |
|
||||||
|
| R | Remaining distance |
|
||||||
|
| S | Speed |
|
||||||
|
| M | Full mass |
|
||||||
|
|
||||||
|
- Your planets.
|
||||||
|
|
||||||
|
A list of all your planets. The following information is given:
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| # | Galactic planet number |
|
||||||
|
| X | X coordinate |
|
||||||
|
| Y | Y coordinate |
|
||||||
|
| N | Planet name |
|
||||||
|
| S | Size |
|
||||||
|
| P | Population |
|
||||||
|
| I | Production capacity |
|
||||||
|
| R | Natural resources |
|
||||||
|
| P | Production type (industry, material, research, or ships) |
|
||||||
|
| $ | Industry reserve |
|
||||||
|
| M | Material reserve |
|
||||||
|
| C | Number of colonists |
|
||||||
|
| L | Free production capacity |
|
||||||
|
|
||||||
|
The (L) parameter is used to determine the real industrial capacity for the current turn.
|
||||||
|
|
||||||
|
- Ships in production.
|
||||||
|
|
||||||
|
| Code | Meaning |
|
||||||
|
|---|---|
|
||||||
|
| # | Galactic planet number |
|
||||||
|
| N | Planet name |
|
||||||
|
| S | Name of the ship type being built |
|
||||||
|
| C | Cost of building one such ship (in production units), excluding material-extraction costs |
|
||||||
|
| P | How many production units have already been spent building this ship (already including material production) |
|
||||||
|
| L | Free production capacity |
|
||||||
|
|
||||||
|
Note that the build cost of one ship excludes material-extraction costs, whereas the number of production units spent already includes material-extraction costs. So it is perfectly normal for (P) to slightly exceed (C). This only means that the material needed to build the ship has not yet been produced.
|
||||||
|
|
||||||
|
- Cargo routes.
|
||||||
|
|
||||||
|
- Someone's planets.
|
||||||
|
|
||||||
|
A list of foreign races' planets where your observers are present.
|
||||||
|
|
||||||
|
- Uninhabited planets.
|
||||||
|
|
||||||
|
A list of unsettled planets you can observe — that is, ones where your ships are present.
|
||||||
|
|
||||||
|
- Unknown planets.
|
||||||
|
|
||||||
|
A list of planets within your reach that you cannot observe. Only the planet number and its coordinates are given.
|
||||||
|
|
||||||
|
- Your fleets.
|
||||||
|
|
||||||
|
- Your ship groups.
|
||||||
|
|
||||||
|
- Foreign ship groups.
|
||||||
|
|
||||||
|
A list of ship groups belonging to other players that you can observe.
|
||||||
|
|
||||||
|
- Unidentified ship groups.
|
||||||
|
|
||||||
|
A list of coordinates of foreign ship groups in hyperspace that are not heading to your planets.
|
||||||
|
|
||||||
|
## Diplomatic mail {#mail}
|
||||||
|
|
||||||
|
Players in Galaxy are anonymous. This means no one but the server administration knows the addresses and names of other players. This is done so as not to carry game relationships and conflicts into real life, and thereby to let players behave more freely.
|
||||||
|
|
||||||
|
During the game each race can communicate with other races. Communication happens by sending diplomatic letters through the server. The purpose of writing letters can be very varied — for example, forming alliances, joint military action, breaking alliances, and so on.
|
||||||
|
|
||||||
|
## Questions you should know the answers to {#questions}
|
||||||
|
|
||||||
|
1. What is the difference between industry and production capacity? And between industry and the industry reserve?
|
||||||
|
|
||||||
|
2. What mass does a ship with D=0 A=20 W=5 S=0 C=0 have?
|
||||||
|
|
||||||
|
3. At what speed will a ship with D=5 A=0 W=0 S=0 C=0 fly if its Drive technology level is 1.0?
|
||||||
|
|
||||||
|
4. On which turn will a ship with a speed of 18 light-years per turn arrive at its destination if the distance between the departure and destination planets is 40 light-years and it was dispatched on turn 15?
|
||||||
|
|
||||||
|
5. What Drive technology level will a ship with D=1 A=0 W=0 S=0 C=0 have if, before it was built, the Drive technology level was 1.8, and on another planet the Drive technology rose by 0.2 at the same time it was built?
|
||||||
|
|
||||||
|
6. What mass will a ship with D=10 A=0 W=0 S=0 C=2 and Cargo technology level 1.2 have if it is fully loaded?
|
||||||
|
|
||||||
|
7. Will a battle occur if a ship with D=1 A=0 W=0 S=0 C=0 belonging to race A and a ship with D=1 A=1 W=1 S=0 C=0 belonging to race B meet on a planet, where race B has "peace" with race A and race A has "war" with race B?
|
||||||
|
|
||||||
|
## Some tips {#tips}
|
||||||
|
|
||||||
|
In the early game there is no need to fight for planets. You should start by building cargo ships, accumulating industry, and delivering colonists and industry to the nearest uninhabited planets. It is also wise to establish contacts with other races to form alliances, which will come in very handy when the time for battles comes. For that you simply must keep up diplomatic correspondence. Only doomed races do not correspond.
|
||||||
|
|
||||||
|
The map in your report shows only planets colonised by foreign races and the full mass of foreign ship groups heading to one of your planets. To get detailed information about enemy fleets that may threaten your security, you need to send ships to foreign planets purely for spying.
|
||||||
|
|
||||||
|
When an attack on your planets is approaching, the most important thing is to make sure you have enough force to defend. For each such group, divide the distance by the speed to get the number of turns left before the group reaches the planet. Assess the full mass: the larger it is, the greater the potential threat. You cannot, of course, know whether it is a huge battleship, a fleet of small fighters, or something in between. You can also try diplomacy: although the group's owner cannot turn it back, they can declare peace with you, so the group will not attack you on arrival.
|
||||||
|
|
||||||
|
In the later game it is quite likely that one race will develop more than the others and take a dominant position in the galaxy. From that moment it is vital for the remaining players to immediately set aside all their differences and attack that race together. For if this race is allowed to capture races one after another, it will get an excellent chance to win the game.
|
||||||
|
|
||||||
|
Because of how the [battle algorithm](#combat) works, a fleet is usually split into three complementary parts:
|
||||||
|
|
||||||
|
- many small screening ships, to draw the enemy's guns;
|
||||||
|
|
||||||
|
- one or more ships with several small guns, to quickly destroy the small screening ships;
|
||||||
|
|
||||||
|
- one or more ships with one or several large guns, to destroy the main enemy ships.
|
||||||
|
|
||||||
|
This must be taken into account when designing planet defences.
|
||||||
|
|
||||||
|
## Turn recomputation {#turn-recalc}
|
||||||
|
|
||||||
|
However well the server and the internet work, sometimes a turn must be reproduced. This is an exception to the server's general rules. Here are the cases in which a turn may be recomputed:
|
||||||
|
|
||||||
|
1. A bug was found in the server logic that caused irreversible changes to the state of several players' races.
|
||||||
|
|
||||||
|
2. The system for delivering orders to the server or reports from it was disrupted for longer than the waiting time between two turns — that is, all players were unable to manage their races.
|
||||||
|
|
||||||
|
3. A force-majeure event occurred and most of the game's participants unambiguously concluded that the turn must be recomputed.
|
||||||
|
|
||||||
|
4. An unappealable decision by the administration to that effect.
|
||||||
|
|
||||||
|
Any participant may ask the administration to recompute a turn, citing any of these points and providing appropriate evidence. If the administration decides that one of the listed conditions is met, the turn will be recomputed.
|
||||||
|
|
||||||
|
A turn will not be recomputed if the conditions are insufficient or the situation can be fixed dynamically.
|
||||||
|
|
||||||
|
## Game ethics {#ethics}
|
||||||
|
|
||||||
|
Bear in mind above all that "Galaxy" is a game; do not identify the leader of one of the races with the real player. Do not take offence if someone has treated you incorrectly. Deceit and treachery are permitted here — take that into account in your policy. The administration does not consider complaints of this kind and takes no sanctions against players who have committed such "misdeeds".
|
||||||
|
|
||||||
|
The diplomatic mail circulating between players is private mail. You may use any forms and expressions in it. However, rudeness is unacceptable in broadcast messages, even if that rudeness is part of your image. In addition, the server administration reserves the right to censor messages that are not private diplomatic mail.
|
||||||
|
|
||||||
|
The "Galaxy" game server is a program that, unfortunately, may contain bugs. We would be grateful if you reported any such findings. However, if you try to use a bug you found for your own benefit, the server administration may decide to remove you from the game.
|
||||||
@@ -175,7 +175,7 @@ schema breaks the tool's compilation before the change ships.
|
|||||||
When extending:
|
When extending:
|
||||||
|
|
||||||
1. Identify the legacy section in `tools/local-dev/reports/dg/*.REP`
|
1. Identify the legacy section in `tools/local-dev/reports/dg/*.REP`
|
||||||
(and `gplus/*.REP`) that carries the field, using `game/rules.txt`
|
(and `gplus/*.REP`) that carries the field, using `site/ru/rules.md`
|
||||||
section "Отчет о результатах хода" as the column-layout reference.
|
section "Отчет о результатах хода" as the column-layout reference.
|
||||||
2. Add a section to the state machine in `parser.go`
|
2. Add a section to the state machine in `parser.go`
|
||||||
(`classifySection`, the `section` constants, the `parse*` methods).
|
(`classifySection`, the `section` constants, the `parse*` methods).
|
||||||
|
|||||||
+5
-5
@@ -1982,7 +1982,7 @@ Artifacts (Pass B — feature):
|
|||||||
preserves camera centre + zoom across route-driven remounts
|
preserves camera centre + zoom across route-driven remounts
|
||||||
inside the same game id.
|
inside the same game id.
|
||||||
- Topic doc `ui/docs/cargo-routes-ux.md` quotes
|
- Topic doc `ui/docs/cargo-routes-ux.md` quotes
|
||||||
[`rules.txt`](../game/rules.txt) (lines 808–843) and maps
|
[`site/ru/rules.md`](../site/ru/rules.md) (lines 808–843) and maps
|
||||||
semantics to UI; `ui/docs/renderer.md` documents the pick-mode
|
semantics to UI; `ui/docs/renderer.md` documents the pick-mode
|
||||||
contract; `ui/docs/calc-bridge.md` records the Phase 16 reach
|
contract; `ui/docs/calc-bridge.md` records the Phase 16 reach
|
||||||
waiver (inline TS rather than a calc bridge for one
|
waiver (inline TS rather than a calc bridge for one
|
||||||
@@ -2075,7 +2075,7 @@ Artifacts:
|
|||||||
rewritten from the Phase 10 stub: empty form for the Create flow
|
rewritten from the Phase 10 stub: empty form for the Create flow
|
||||||
(name plus the five fields Drive, Armament, Weapons, Shields,
|
(name plus the five fields Drive, Armament, Weapons, Shields,
|
||||||
Cargo) and read-only view + Delete affordance for an existing
|
Cargo) and read-only view + Delete affordance for an existing
|
||||||
class. Validation rules from [`rules.txt`](../game/rules.txt) live
|
class. Validation rules from [`site/ru/rules.md`](../site/ru/rules.md) live
|
||||||
in `lib/util/ship-class-validation.ts` (TS port of
|
in `lib/util/ship-class-validation.ts` (TS port of
|
||||||
`pkg/calc/validator.go.ValidateShipTypeValues`): each of drive /
|
`pkg/calc/validator.go.ValidateShipTypeValues`): each of drive /
|
||||||
weapons / shields / cargo is 0 or ≥ 1; armament is a non-negative
|
weapons / shields / cargo is 0 or ≥ 1; armament is a non-negative
|
||||||
@@ -2098,7 +2098,7 @@ Dependencies: Phase 14.
|
|||||||
Acceptance criteria:
|
Acceptance criteria:
|
||||||
|
|
||||||
- the user can create, list, view, and delete ship classes;
|
- the user can create, list, view, and delete ship classes;
|
||||||
- field validation matches [`rules.txt`](../game/rules.txt)
|
- field validation matches [`site/ru/rules.md`](../site/ru/rules.md)
|
||||||
constraints with disabled Submit + tooltip when invalid;
|
constraints with disabled Submit + tooltip when invalid;
|
||||||
- double-tapping a row in the ship-classes table opens its
|
- double-tapping a row in the ship-classes table opens its
|
||||||
designer (read-only view of the existing class);
|
designer (read-only view of the existing class);
|
||||||
@@ -2463,7 +2463,7 @@ Acceptance criteria:
|
|||||||
- the planet production picker (Phase 15) lists the user's sciences
|
- the planet production picker (Phase 15) lists the user's sciences
|
||||||
in the Research sub-row and lets the user select one for research
|
in the Research sub-row and lets the user select one for research
|
||||||
production;
|
production;
|
||||||
- name validation matches [`rules.txt`](../game/rules.txt)
|
- name validation matches [`site/ru/rules.md`](../site/ru/rules.md)
|
||||||
constraints (length, allowed characters, special characters not
|
constraints (length, allowed characters, special characters not
|
||||||
at start/end, no triple repeats).
|
at start/end, no triple repeats).
|
||||||
|
|
||||||
@@ -2563,7 +2563,7 @@ Targeted tests:
|
|||||||
Status: done (local-ci run 2).
|
Status: done (local-ci run 2).
|
||||||
|
|
||||||
Goal: present every section of the current turn's report as readable
|
Goal: present every section of the current turn's report as readable
|
||||||
panels, mirroring the structure documented in [`rules.txt`](../game/rules.txt) and
|
panels, mirroring the structure documented in [`site/ru/rules.md`](../site/ru/rules.md) and
|
||||||
`docs/FUNCTIONAL.md` §6.4.
|
`docs/FUNCTIONAL.md` §6.4.
|
||||||
|
|
||||||
Artifacts:
|
Artifacts:
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ new one); Create is disabled while the name is invalid or duplicate
|
|||||||
(reusing `lib/util/ship-class-validation.ts`). Create reuses the existing
|
(reusing `lib/util/ship-class-validation.ts`). Create reuses the existing
|
||||||
`createShipClass` order-draft flow, so the optimistic overlay reflects
|
`createShipClass` order-draft flow, so the optimistic overlay reflects
|
||||||
the change immediately. Ship classes are immutable after creation (per
|
the change immediately. Ship classes are immutable after creation (per
|
||||||
`game/rules.txt`), so there is no edit — only Create-new. Delete-class
|
`site/ru/rules.md`), so there is no edit — only Create-new. Delete-class
|
||||||
lives in the ship-classes table (`lib/active-view/table-ship-classes.svelte`),
|
lives in the ship-classes table (`lib/active-view/table-ship-classes.svelte`),
|
||||||
not the calculator.
|
not the calculator.
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ subsection (a single-row dropdown + contextual actions after
|
|||||||
F8-05), the map-driven destination pick, and the optimistic
|
F8-05), the map-driven destination pick, and the optimistic
|
||||||
overlay that keeps the inspector and the map in lock-step with
|
overlay that keeps the inspector and the map in lock-step with
|
||||||
the local order draft. The engine semantics are quoted from
|
the local order draft. The engine semantics are quoted from
|
||||||
[`game/rules.txt`](../../game/rules.txt) section "Грузовые маршруты"
|
[`site/ru/rules.md`](../../site/ru/rules.md#routes) section "Грузовые маршруты"; this file is the source of truth for how the UI
|
||||||
(lines 808–843); this file is the source of truth for how the UI
|
|
||||||
surfaces those rules.
|
surfaces those rules.
|
||||||
|
|
||||||
## Engine semantics in one paragraph
|
## Engine semantics in one paragraph
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ sequence.
|
|||||||
|
|
||||||
The designer presents the four proportions as percentages
|
The designer presents the four proportions as percentages
|
||||||
(`step="0.1"`, range `[0, 100]`) so the player can type and reason
|
(`step="0.1"`, range `[0, 100]`) so the player can type and reason
|
||||||
about whole-number splits — closer to how `game/rules.txt` describes
|
about whole-number splits — closer to how `site/ru/rules.md` describes
|
||||||
sciences (`game/rules.txt:345-362`: "10 parts Drive, 5 parts
|
sciences (`site/ru/rules.md` #sciences: "10 parts Drive, 5 parts
|
||||||
Weapons, 30 parts Shields, 0 parts Cargo, …"). The wire shape is
|
Weapons, 30 parts Shields, 0 parts Cargo, …"). The wire shape is
|
||||||
still fractions; conversion happens inside `validateScience` only on
|
still fractions; conversion happens inside `validateScience` only on
|
||||||
Save (`value / 100` for each of the four).
|
Save (`value / 100` for each of the four).
|
||||||
|
|||||||
@@ -268,7 +268,7 @@ export interface ReportLocalFleet {
|
|||||||
* table uses.
|
* table uses.
|
||||||
*
|
*
|
||||||
* `relation` reflects the local player's stance TOWARD this race,
|
* `relation` reflects the local player's stance TOWARD this race,
|
||||||
* not the other way around (`rules.txt` line 1162). Per the engine
|
* not the other way around (`site/ru/rules.md` #report). Per the engine
|
||||||
* (`controller/race.go.UpdateRelation`) the relation is stored
|
* (`controller/race.go.UpdateRelation`) the relation is stored
|
||||||
* unilaterally — race A can be at war with race B while race B is
|
* unilaterally — race A can be at war with race B while race B is
|
||||||
* at peace with race A.
|
* at peace with race A.
|
||||||
@@ -508,7 +508,7 @@ export interface GameReport {
|
|||||||
/**
|
/**
|
||||||
* myVotes is the local player's total vote weight in the current
|
* myVotes is the local player's total vote weight in the current
|
||||||
* report, read from `Report.votes` (the engine assigns one vote
|
* report, read from `Report.votes` (the engine assigns one vote
|
||||||
* per 1000 population, see `rules.txt:1060`). Zero when the
|
* per 1000 population, see `site/ru/rules.md` #victory). Zero when the
|
||||||
* report has not been produced yet.
|
* report has not been produced yet.
|
||||||
*/
|
*/
|
||||||
myVotes: number;
|
myVotes: number;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ immediately and the auto-sync pipeline drives the server in the
|
|||||||
background.
|
background.
|
||||||
|
|
||||||
The alliance graph and the 2/3 victory check are NOT computed
|
The alliance graph and the 2/3 victory check are NOT computed
|
||||||
here: `rules.txt` keeps each race's outgoing vote target private
|
here: `site/ru/rules.md` keeps each race's outgoing vote target private
|
||||||
(only the votes a race RECEIVED in the last tally and the local
|
(only the votes a race RECEIVED in the last tally and the local
|
||||||
player's own pick are observable), and the acceptance criterion
|
player's own pick are observable), and the acceptance criterion
|
||||||
"vote counts match server state byte-for-byte" rules out
|
"vote counts match server state byte-for-byte" rules out
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
// `OrderCommand` payload always carries the canonical `[0, 1]`
|
// `OrderCommand` payload always carries the canonical `[0, 1]`
|
||||||
// summing to `1.0` shape the FBS encoder ships on the wire.
|
// summing to `1.0` shape the FBS encoder ships on the wire.
|
||||||
//
|
//
|
||||||
// Engine rules (from `pkg/calc/validator.go` and `game/rules.txt`):
|
// Engine rules (from `pkg/calc/validator.go` and `site/ru/rules.md`):
|
||||||
//
|
//
|
||||||
// - drive, weapons, shields, cargo: float in `[0, 1]`;
|
// - drive, weapons, shields, cargo: float in `[0, 1]`;
|
||||||
// - the four values sum to `1.0` (the engine accepts a small
|
// - the four values sum to `1.0` (the engine accepts a small
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
// to gate auto-sync, so the local invariants match the engine's
|
// to gate auto-sync, so the local invariants match the engine's
|
||||||
// (`game/internal/controller/ship_class.go.ShipClassCreate`).
|
// (`game/internal/controller/ship_class.go.ShipClassCreate`).
|
||||||
//
|
//
|
||||||
// Engine rules (from `pkg/calc/validator.go` and `game/rules.txt`):
|
// Engine rules (from `pkg/calc/validator.go` and `site/ru/rules.md`):
|
||||||
//
|
//
|
||||||
// - drive, weapons, shields, cargo: float, equal to 0 or >= 1;
|
// - drive, weapons, shields, cargo: float, equal to 0 or >= 1;
|
||||||
// - armament: integer, >= 0;
|
// - armament: integer, >= 0;
|
||||||
|
|||||||
@@ -330,7 +330,7 @@ export class OrderDraftStore {
|
|||||||
* tracks a single war/peace stance per opponent, so a newer
|
* tracks a single war/peace stance per opponent, so a newer
|
||||||
* entry supersedes any prior `setDiplomaticStance` for the
|
* entry supersedes any prior `setDiplomaticStance` for the
|
||||||
* same other race.
|
* same other race.
|
||||||
* - `setVoteRecipient` collapses singleton: per `rules.txt`
|
* - `setVoteRecipient` collapses singleton: per `site/ru/rules.md`
|
||||||
* each race controls a single vote slot, so a newer entry
|
* each race controls a single vote slot, so a newer entry
|
||||||
* supersedes any prior `setVoteRecipient` regardless of the
|
* supersedes any prior `setVoteRecipient` regardless of the
|
||||||
* acceptor.
|
* acceptor.
|
||||||
|
|||||||
@@ -463,7 +463,7 @@ export interface SetDiplomaticStanceCommand {
|
|||||||
* to a race. Mirrors the engine `CommandRaceVote`
|
* to a race. Mirrors the engine `CommandRaceVote`
|
||||||
* (`pkg/schema/fbs/order.fbs`,
|
* (`pkg/schema/fbs/order.fbs`,
|
||||||
* `game/internal/controller/command.go.RaceVote`). The engine
|
* `game/internal/controller/command.go.RaceVote`). The engine
|
||||||
* tallies votes at turn cutoff (`rules.txt` "Процесс голосования");
|
* tallies votes at turn cutoff (`site/ru/rules.md` "Процесс голосования");
|
||||||
* between turns the player can change their pick freely. The
|
* between turns the player can change their pick freely. The
|
||||||
* acceptor may be the local race itself — the engine treats
|
* acceptor may be the local race itself — the engine treats
|
||||||
* self-vote as the neutral default and re-applies it whenever a
|
* self-vote as the neutral default and re-applies it whenever a
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ describe("validateScience", () => {
|
|||||||
expect(result.reason).toBe("sum_not_hundred");
|
expect(result.reason).toBe("sum_not_hundred");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("accepts the canonical First Step fixture from rules.txt", () => {
|
test("accepts the canonical First Step fixture from site/ru/rules.md", () => {
|
||||||
// 10 Drive + 5 Weapons + 30 Shields + 0 Cargo, normalised:
|
// 10 Drive + 5 Weapons + 30 Shields + 0 Cargo, normalised:
|
||||||
// 10/45 ≈ 22.222… %, 5/45 ≈ 11.111… %, 30/45 ≈ 66.666… %,
|
// 10/45 ≈ 22.222… %, 5/45 ≈ 11.111… %, 30/45 ≈ 66.666… %,
|
||||||
// 0/45 = 0 %. Snapped to one decimal at input time:
|
// 0/45 = 0 %. Snapped to one decimal at input time:
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ describe("validateShipClass", () => {
|
|||||||
expect(result.reason).toBe("all_zero");
|
expect(result.reason).toBe("all_zero");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("accepts the canonical Cruiser fixture from rules.txt", () => {
|
test("accepts the canonical Cruiser fixture from site/ru/rules.md", () => {
|
||||||
const result = validateShipClass(
|
const result = validateShipClass(
|
||||||
draft({
|
draft({
|
||||||
name: "Cruiser",
|
name: "Cruiser",
|
||||||
|
|||||||
Reference in New Issue
Block a user