Keep card names in English, translate only effect text

Dropped nameRu from the translation workflow and from content validation warnings. Progress now counts cards whose text is filled; vanilla cards without text count as done.
This commit is contained in:
MpakobecEx 2026-10-20 21:40:45 +05:00
parent 625ed36f94
commit edd6a7506c
6 changed files with 12 additions and 128 deletions

View File

@ -238,7 +238,7 @@
### Блок 5. Локализация `[MVP]` ### Блок 5. Локализация `[MVP]`
- [ ] **P0** Unity Localization: String Tables `en`/`ru`, ключи по схеме `ui.menu.play`, runtime-переключение без перезагрузки сцены. - [ ] **P0** Unity Localization: String Tables `en`/`ru`, ключи по схеме `ui.menu.play`, runtime-переключение без перезагрузки сцены.
- [ ] **P0** Сервер: параметр `lang` в запросах карт/глоссария, fallback `en`. - [ ] **P0** Сервер: параметр `lang` в запросах карт/глоссария, fallback `en`. **Имена карт не переводятся** — остаются английскими в обеих локалях; переводится только текст эффекта.
- [x] **P1** Токенизация текста карт: `content/keywords.yaml` (иконки + подписи), шаблоны с токенами `{cb:3}`, `{vcrc}`, `{clan:kagero}`; проверка целостности токенов при переводе. - [x] **P1** Токенизация текста карт: `content/keywords.yaml` (иконки + подписи), шаблоны с токенами `{cb:3}`, `{vcrc}`, `{clan:kagero}`; проверка целостности токенов при переводе.
- [ ] **P1** Рендер шаблона в клиенте: подстановка иконок по токенам, rich-text, авто-фит текста на карте. - [ ] **P1** Рендер шаблона в клиенте: подстановка иконок по токенам, rich-text, авто-фит текста на карте.
- [ ] **P1** Проверка шрифтов TMP: кириллица, fallback-атлас, авто-фит текста на карте. - [ ] **P1** Проверка шрифтов TMP: кириллица, fallback-атлас, авто-фит текста на карте.

View File

@ -86,8 +86,8 @@ python tools/import_cards.py
``` ```
Список токенов и их иконок — `content/keywords.yaml`. Список токенов и их иконок — `content/keywords.yaml`.
Русские тексты — `content/translations/ru.yaml`: заполняются `nameRu` и `textRu`, Русские тексты — `content/translations/ru.yaml`: заполняется только `textRu`.
токены в `textRu` нужно сохранить в том же количестве. Имена карт не переводятся и остаются английскими.
```powershell ```powershell
# создать файл переводов или обновить шаблоны, сохранив введённые переводы # создать файл переводов или обновить шаблоны, сохранив введённые переводы
@ -97,8 +97,9 @@ dotnet run --project server/src/Vanguard.Cli -- translations build
dotnet run --project server/src/Vanguard.Cli -- translations check dotnet run --project server/src/Vanguard.Cli -- translations check
``` ```
Проверка ловит: незаполненные имена и тексты, потерянные или лишние токены, Проверка ловит: незаполненные тексты, потерянные или лишние токены,
токены, которых нет в справочнике. токены, которых нет в справочнике. Карты без эффекта считаются готовыми
сразу — им переводить нечего.
## Документация ## Документация

View File

@ -1,6 +1,7 @@
# Русские тексты карт. # Русские тексты карт.
# #
# Заполняйте только nameRu и textRu. Остальные поля не меняйте. # Имена карт остаются английскими — переводим только текст эффекта.
# Заполняйте только textRu. Остальные поля не меняйте.
# Токены в фигурных скобках — это иконки: {auto}, {cb:3}, {vcrc}, {clan:kagero}. # Токены в фигурных скобках — это иконки: {auto}, {cb:3}, {vcrc}, {clan:kagero}.
# Их нужно сохранить в textRu ровно в таком же количестве, иначе проверка не пройдёт. # Их нужно сохранить в textRu ровно в таком же количестве, иначе проверка не пройдёт.
# Список всех токенов — content/keywords.yaml. # Список всех токенов — content/keywords.yaml.
@ -10,88 +11,74 @@ version: 1
cards: cards:
- nameId: assault-dragon-blightops - nameId: assault-dragon-blightops
nameEn: "Assault Dragon, Blightops" nameEn: "Assault Dragon, Blightops"
nameRu: ""
template: |- template: |-
{auto}:{cb:1} When this unit is put into the drop zone from {rc}, you may pay the cost. If you do, search your deck for up to one card named "Ironclad Dragon, Shieldon", reveal it to your opponent, put it into your hand, and shuffle your deck. {auto}:{cb:1} When this unit is put into the drop zone from {rc}, you may pay the cost. If you do, search your deck for up to one card named "Ironclad Dragon, Shieldon", reveal it to your opponent, put it into your hand, and shuffle your deck.
textRu: "" textRu: ""
- nameId: asura-kaiser - nameId: asura-kaiser
nameEn: "Asura Kaiser" nameEn: "Asura Kaiser"
nameRu: ""
template: |- template: |-
{cont}{vcrc}:If you do not have another {clan:nova-grappler} vanguard or rear-guard, this unit gets {power} -2000. {cont}{vcrc}:If you do not have another {clan:nova-grappler} vanguard or rear-guard, this unit gets {power} -2000.
{auto}{vc}:When this unit's drive check reveals a grade 3 {clan:nova-grappler}, choose one of your rear-guards, and {stand} it. {auto}{vc}:When this unit's drive check reveals a grade 3 {clan:nova-grappler}, choose one of your rear-guards, and {stand} it.
textRu: "" textRu: ""
- nameId: barcgal - nameId: barcgal
nameEn: "Barcgal" nameEn: "Barcgal"
nameRu: ""
template: |- template: |-
{auto}:When another {clan:royal-paladin} rides this unit, you may call this card to {rc}. {auto}:When another {clan:royal-paladin} rides this unit, you may call this card to {rc}.
{act}{rc}:{rest} Search your deck for up to one card named "Future Knight, Llew" or "Flogal", call it to {rc}, and shuffle your deck. {act}{rc}:{rest} Search your deck for up to one card named "Future Knight, Llew" or "Flogal", call it to {rc}, and shuffle your deck.
textRu: "" textRu: ""
- nameId: battle-sister-chocolat - nameId: battle-sister-chocolat
nameEn: "Battle Sister, Chocolat" nameEn: "Battle Sister, Chocolat"
nameRu: ""
template: |- template: |-
{cont}:{sentinel} (You may only have up to four cards with "{cont}:{sentinel}" in a deck.){auto}:[Choose a {clan:oracle-think-tank} from your hand, and discard it] When this unit is placed on {gc}, you may pay the cost. If you do, choose one of your {clan:oracle-think-tank} that is being attacked, and that unit cannot be hit until end of that battle. {cont}:{sentinel} (You may only have up to four cards with "{cont}:{sentinel}" in a deck.){auto}:[Choose a {clan:oracle-think-tank} from your hand, and discard it] When this unit is placed on {gc}, you may pay the cost. If you do, choose one of your {clan:oracle-think-tank} that is being attacked, and that unit cannot be hit until end of that battle.
textRu: "" textRu: ""
- nameId: battle-sister-cocoa - nameId: battle-sister-cocoa
nameEn: "Battle Sister, Cocoa" nameEn: "Battle Sister, Cocoa"
nameRu: ""
template: |- template: |-
{auto}:When this unit is placed on {vc} or {rc}, if you have an {clan:oracle-think-tank} vanguard, look at the top card of your deck, and put that card on the top or the bottom of your deck. {auto}:When this unit is placed on {vc} or {rc}, if you have an {clan:oracle-think-tank} vanguard, look at the top card of your deck, and put that card on the top or the bottom of your deck.
textRu: "" textRu: ""
- nameId: battle-sister-mocha - nameId: battle-sister-mocha
nameEn: "Battle Sister, Mocha" nameEn: "Battle Sister, Mocha"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:When this unit attacks, if the number of cards in your hand is four or greater, this unit gets {power} +3000 until end of that battle. {auto}{vcrc}:When this unit attacks, if the number of cards in your hand is four or greater, this unit gets {power} +3000 until end of that battle.
textRu: "" textRu: ""
- nameId: battleraizer - nameId: battleraizer
nameEn: "Battleraizer" nameEn: "Battleraizer"
nameRu: ""
template: |- template: |-
{auto}:When another {clan:nova-grappler} rides this unit, you may call this card to {rc}. {auto}:When another {clan:nova-grappler} rides this unit, you may call this card to {rc}.
{auto}{rc}:When this unit boosts, the boosted unit gets {power} +3000 until end of that battle, and at the begininng of the end phase of that turn, return this unit to your deck, and shuffle your deck. {auto}{rc}:When this unit boosts, the boosted unit gets {power} +3000 until end of that battle, and at the begininng of the end phase of that turn, return this unit to your deck, and shuffle your deck.
textRu: "" textRu: ""
- nameId: berserk-dragon - nameId: berserk-dragon
nameEn: "Berserk Dragon" nameEn: "Berserk Dragon"
nameRu: ""
template: |- template: |-
{auto}:{cb:2} When this unit is placed on {vc} or {rc}, if you have a {clan:kagero} vanguard, you may pay the cost. If you do, choose an opponent's grade 2 or less rear-guard, and retire it. {auto}:{cb:2} When this unit is placed on {vc} or {rc}, if you have a {clan:kagero} vanguard, you may pay the cost. If you do, choose an opponent's grade 2 or less rear-guard, and retire it.
textRu: "" textRu: ""
- nameId: blaster-blade - nameId: blaster-blade
nameEn: "Blaster Blade" nameEn: "Blaster Blade"
nameRu: ""
template: |- template: |-
{auto}:{cb:2} When this unit is placed on {vc}, you may pay the cost. If you do, choose an opponent's rear-guard, and retire it. {auto}:{cb:2} When this unit is placed on {vc}, you may pay the cost. If you do, choose an opponent's rear-guard, and retire it.
{auto}:{cb:2} When this unit is placed on {rc}, if you have a {clan:royal-paladin} vanguard, you may pay the cost. If you do, choose an opponent's grade 2 or greater rear-guard, and retire it. {auto}:{cb:2} When this unit is placed on {rc}, if you have a {clan:royal-paladin} vanguard, you may pay the cost. If you do, choose an opponent's grade 2 or greater rear-guard, and retire it.
textRu: "" textRu: ""
- nameId: bloody-hercules - nameId: bloody-hercules
nameEn: "Bloody Hercules" nameEn: "Bloody Hercules"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: blue-dust - nameId: blue-dust
nameEn: "Blue Dust" nameEn: "Blue Dust"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:When this unit's attack hits, if you have a {clan:dark-irregulars} vanguard, you may {sc:1}. {auto}{vcrc}:When this unit's attack hits, if you have a {clan:dark-irregulars} vanguard, you may {sc:1}.
textRu: "" textRu: ""
- nameId: bringer-of-good-luck-epona - nameId: bringer-of-good-luck-epona
nameEn: "Bringer of Good Luck, Epona" nameEn: "Bringer of Good Luck, Epona"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: brutal-jack - nameId: brutal-jack
nameEn: "Brutal Jack" nameEn: "Brutal Jack"
nameRu: ""
template: |- template: |-
{cont}{vcrc}:Restraint (This unit cannnot attack.){act}{vcrc}:{cb:1} Until end of turn, this unit loses "Restraint". {cont}{vcrc}:Restraint (This unit cannnot attack.){act}{vcrc}:{cb:1} Until end of turn, this unit loses "Restraint".
{auto}{vc}:When this unit is boosted by a {clan:nova-grappler}, this unit gets {power} +5000 until end of that battle. {auto}{vc}:When this unit is boosted by a {clan:nova-grappler}, this unit gets {power} +5000 until end of that battle.
textRu: "" textRu: ""
- nameId: ceo-amaterasu - nameId: ceo-amaterasu
nameEn: "CEO Amaterasu" nameEn: "CEO Amaterasu"
nameRu: ""
template: |- template: |-
{cont}{vc}:During your turn, if the number of cards in your hand is four or greater, this unit gets {power} +4000. {cont}{vc}:During your turn, if the number of cards in your hand is four or greater, this unit gets {power} +4000.
{auto}{vc}:At the beginning of your main phase, {sc:1}, look at the top card of your deck, and put that card on the top or the bottom of your deck. {auto}{vc}:At the beginning of your main phase, {sc:1}, look at the top card of your deck, and put that card on the top or the bottom of your deck.
@ -99,198 +86,165 @@ cards:
textRu: "" textRu: ""
- nameId: clay-doll-mechanic - nameId: clay-doll-mechanic
nameEn: "Clay-doll Mechanic" nameEn: "Clay-doll Mechanic"
nameRu: ""
template: |- template: |-
{auto}:When this unit is placed on {rc}, if you have a {clan:nova-grappler} vanguard, choose a card from your damage zone, and turn it face up. {auto}:When this unit is placed on {rc}, if you have a {clan:nova-grappler} vanguard, choose a card from your damage zone, and turn it face up.
textRu: "" textRu: ""
- nameId: commodore-blueblood - nameId: commodore-blueblood
nameEn: "Commodore Blueblood" nameEn: "Commodore Blueblood"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: covenant-knight-randolf - nameId: covenant-knight-randolf
nameEn: "Covenant Knight, Randolf" nameEn: "Covenant Knight, Randolf"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:When this unit attacks, if the number of cards in your hand is greater than your opponent's, this unit gets {power} +3000 until end of that battle. {auto}{vcrc}:When this unit attacks, if the number of cards in your hand is greater than your opponent's, this unit gets {power} +3000 until end of that battle.
textRu: "" textRu: ""
- nameId: crimson-butterfly-brigitte - nameId: crimson-butterfly-brigitte
nameEn: "Crimson Butterfly, Brigitte" nameEn: "Crimson Butterfly, Brigitte"
nameRu: ""
template: |- template: |-
{auto}{vc}:When this unit's drive check reveals a grade 3 {clan:royal-paladin}, this unit gets {power} +5000 until end of that battle. {auto}{vc}:When this unit's drive check reveals a grade 3 {clan:royal-paladin}, this unit gets {power} +5000 until end of that battle.
textRu: "" textRu: ""
- nameId: dandy-guy-romario - nameId: dandy-guy-romario
nameEn: "Dandy Guy, Romario" nameEn: "Dandy Guy, Romario"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: demon-eater - nameId: demon-eater
nameEn: "Demon Eater" nameEn: "Demon Eater"
nameRu: ""
template: |- template: |-
{auto}{vc}:At the beginning of your main phase, {sc:1}, and this unit gets {power} +2000 until end of turn. {auto}{vc}:At the beginning of your main phase, {sc:1}, and this unit gets {power} +2000 until end of turn.
{auto}{vcrc}:{sb:8} & {cb:5} When this unit's attack hits, you may pay the cost. If you do, retire all of your opponent's rear-guards. {auto}{vcrc}:{sb:8} & {cb:5} When this unit's attack hits, you may pay the cost. If you do, retire all of your opponent's rear-guards.
textRu: "" textRu: ""
- nameId: demon-slaying-knight-lohengrin - nameId: demon-slaying-knight-lohengrin
nameEn: "Demon Slaying Knight, Lohengrin" nameEn: "Demon Slaying Knight, Lohengrin"
nameRu: ""
template: |- template: |-
{auto}{vc}:At the beginning of your main phase, {sc:1}, and this unit gets {power} +2000 until end of turn. {auto}{vc}:At the beginning of your main phase, {sc:1}, and this unit gets {power} +2000 until end of turn.
{auto}{vcrc}:{sb:8} & {cb:5} When this unit's attack hits, you may pay the cost. If you do, retire all of your opponent's rear-guards. {auto}{vcrc}:{sb:8} & {cb:5} When this unit's attack hits, you may pay the cost. If you do, retire all of your opponent's rear-guards.
textRu: "" textRu: ""
- nameId: demonic-dragon-berserker-yaksha - nameId: demonic-dragon-berserker-yaksha
nameEn: "Demonic Dragon Berserker, Yaksha" nameEn: "Demonic Dragon Berserker, Yaksha"
nameRu: ""
template: |- template: |-
{auto}{hand}:During your main phase, when an opponent's rear-guard is put into the drop zone, if you have a grade 2 vanguard, you may reveal this card. If you do, ride this card. {auto}{hand}:During your main phase, when an opponent's rear-guard is put into the drop zone, if you have a grade 2 vanguard, you may reveal this card. If you do, ride this card.
textRu: "" textRu: ""
- nameId: demonic-dragon-madonna-joka - nameId: demonic-dragon-madonna-joka
nameEn: "Demonic Dragon Madonna, Joka" nameEn: "Demonic Dragon Madonna, Joka"
nameRu: ""
template: |- template: |-
{auto}{rc}:During your main phase, when an opponent's rear-guard is put into the drop zone, this unit gets {power} +3000 until end of turn. {auto}{rc}:During your main phase, when an opponent's rear-guard is put into the drop zone, this unit gets {power} +3000 until end of turn.
textRu: "" textRu: ""
- nameId: demonic-dragon-mage-rakshasa - nameId: demonic-dragon-mage-rakshasa
nameEn: "Demonic Dragon Mage, Rakshasa" nameEn: "Demonic Dragon Mage, Rakshasa"
nameRu: ""
template: |- template: |-
{auto}{rc}:During your main phase, when an opponent's rear-guard is put into the drop zone, this unit gets {power} +3000 until end of turn. {auto}{rc}:During your main phase, when an opponent's rear-guard is put into the drop zone, this unit gets {power} +3000 until end of turn.
textRu: "" textRu: ""
- nameId: dragon-dancer-monica - nameId: dragon-dancer-monica
nameEn: "Dragon Dancer, Monica" nameEn: "Dragon Dancer, Monica"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: dragon-knight-aleph - nameId: dragon-knight-aleph
nameEn: "Dragon Knight, Aleph" nameEn: "Dragon Knight, Aleph"
nameRu: ""
template: |- template: |-
{act}{vc}:[{cb:1} & Choose a unit named "Embodiment of Armor, Bahr" and a unit named "Embodiment of Spear, Tahr" from your {rc}, and put them into your soul] Search your deck for up to one card named "Embodiment of Victory, Aleph", ride it, and shuffle your deck. {act}{vc}:[{cb:1} & Choose a unit named "Embodiment of Armor, Bahr" and a unit named "Embodiment of Spear, Tahr" from your {rc}, and put them into your soul] Search your deck for up to one card named "Embodiment of Victory, Aleph", ride it, and shuffle your deck.
textRu: "" textRu: ""
- nameId: dragon-knight-nehalem - nameId: dragon-knight-nehalem
nameEn: "Dragon Knight, Nehalem" nameEn: "Dragon Knight, Nehalem"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: dragon-monk-genjo - nameId: dragon-monk-genjo
nameEn: "Dragon Monk, Genjo" nameEn: "Dragon Monk, Genjo"
nameRu: ""
template: |- template: |-
(You may only have up to four cards with "{heal} HEAL" in a deck.) (You may only have up to four cards with "{heal} HEAL" in a deck.)
textRu: "" textRu: ""
- nameId: dragon-monk-gojo - nameId: dragon-monk-gojo
nameEn: "Dragon Monk, Gojo" nameEn: "Dragon Monk, Gojo"
nameRu: ""
template: |- template: |-
{act}{vcrc}:[{rest} & Choose a card from your hand, and discard it] Draw a card. {act}{vcrc}:[{rest} & Choose a card from your hand, and discard it] Draw a card.
textRu: "" textRu: ""
- nameId: dragon-monk-goku - nameId: dragon-monk-goku
nameEn: "Dragon Monk, Goku" nameEn: "Dragon Monk, Goku"
nameRu: ""
template: |- template: |-
{auto}{vc}:When this unit's drive check reveals a grade 3 {clan:kagero}, choose an opponent's grade 1 or less rear-guard, and retire it. {auto}{vc}:When this unit's drive check reveals a grade 3 {clan:kagero}, choose an opponent's grade 1 or less rear-guard, and retire it.
textRu: "" textRu: ""
- nameId: dragonic-overlord - nameId: dragonic-overlord
nameEn: "Dragonic Overlord" nameEn: "Dragonic Overlord"
nameRu: ""
template: |- template: |-
{cont}{vcrc}:If you do not have another {clan:kagero} vanguard or rear-guard, this unit gets {power} -2000. {cont}{vcrc}:If you do not have another {clan:kagero} vanguard or rear-guard, this unit gets {power} -2000.
{act}{vcrc}:{cb:3} Until end of turn, this unit gets {power} +5000, gets "Own{vcrc}:When this unit's attack hits an opponent's rear-guard, {stand} this unit," and loses "{twin-drive}". {act}{vcrc}:{cb:3} Until end of turn, this unit gets {power} +5000, gets "Own{vcrc}:When this unit's attack hits an opponent's rear-guard, {stand} this unit," and loses "{twin-drive}".
textRu: "" textRu: ""
- nameId: dream-eater - nameId: dream-eater
nameEn: "Dream Eater" nameEn: "Dream Eater"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: embodiment-of-armor-bahr - nameId: embodiment-of-armor-bahr
nameEn: "Embodiment of Armor, Bahr" nameEn: "Embodiment of Armor, Bahr"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: embodiment-of-spear-tahr - nameId: embodiment-of-spear-tahr
nameEn: "Embodiment of Spear, Tahr" nameEn: "Embodiment of Spear, Tahr"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: embodiment-of-victory-aleph - nameId: embodiment-of-victory-aleph
nameEn: "Embodiment of Victory, Aleph" nameEn: "Embodiment of Victory, Aleph"
nameRu: ""
template: |- template: |-
{act}{vcrc}:{cb:4} This unit gets {power} +3000/{critical} +1 until end of turn. {act}{vcrc}:{cb:4} This unit gets {power} +3000/{critical} +1 until end of turn.
{act}{vc}:[Choose a card named "Dragon Knight, Aleph", a card named "Embodiment of Armor, Bahr", and a card named "Embodiment of Spear, Tahr" from your soul, and put them into your drop zone] Turn all cards in your damage zone face up. {act}{vc}:[Choose a card named "Dragon Knight, Aleph", a card named "Embodiment of Armor, Bahr", and a card named "Embodiment of Spear, Tahr" from your soul, and put them into your drop zone] Turn all cards in your damage zone face up.
textRu: "" textRu: ""
- nameId: flame-of-hope-aermo - nameId: flame-of-hope-aermo
nameEn: "Flame of Hope, Aermo" nameEn: "Flame of Hope, Aermo"
nameRu: ""
template: |- template: |-
{auto}{rc}:[Choose a card from your hand, and discard it] When an attack hits during the battle that this unit boosted, you may pay the cost. If you do, draw a card. {auto}{rc}:[Choose a card from your hand, and discard it] When an attack hits during the battle that this unit boosted, you may pay the cost. If you do, draw a card.
textRu: "" textRu: ""
- nameId: flash-shield-iseult - nameId: flash-shield-iseult
nameEn: "Flash Shield, Iseult" nameEn: "Flash Shield, Iseult"
nameRu: ""
template: |- template: |-
{cont}:{sentinel} (You may only have up to four cards with "{cont}:{sentinel}" in a deck.) {cont}:{sentinel} (You may only have up to four cards with "{cont}:{sentinel}" in a deck.)
{auto}:[Choose a {clan:royal-paladin} from your hand, and discard it] When this unit is placed on {gc}, you may pay the cost. If you do, choose one of your {clan:royal-paladin} that is being attacked, and that unit cannot be hit until end of that battle. {auto}:[Choose a {clan:royal-paladin} from your hand, and discard it] When this unit is placed on {gc}, you may pay the cost. If you do, choose one of your {clan:royal-paladin} that is being attacked, and that unit cannot be hit until end of that battle.
textRu: "" textRu: ""
- nameId: flogal - nameId: flogal
nameEn: "Flogal" nameEn: "Flogal"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: future-knight-llew - nameId: future-knight-llew
nameEn: "Future Knight, Llew" nameEn: "Future Knight, Llew"
nameRu: ""
template: |- template: |-
{act}{rc}:[{cb:1} & Choose a unit named "Future Knight, Llew", a unit named "Barcgal", and a unit named "Flogal" from your {rc}, and put them into your soul] If you have a grade 1 vanguard, search your deck for up to one card named "Blaster Blade", ride it, and shuffle your deck. {act}{rc}:[{cb:1} & Choose a unit named "Future Knight, Llew", a unit named "Barcgal", and a unit named "Flogal" from your {rc}, and put them into your soul] If you have a grade 1 vanguard, search your deck for up to one card named "Blaster Blade", ride it, and shuffle your deck.
textRu: "" textRu: ""
- nameId: guiding-zombie - nameId: guiding-zombie
nameEn: "Guiding Zombie" nameEn: "Guiding Zombie"
nameRu: ""
template: |- template: |-
{auto}:When another {clan:granblue} rides this unit, you may call this card to {rc}. {auto}:When another {clan:granblue} rides this unit, you may call this card to {rc}.
{act}{rc}:[Put this unit into your soul] Put three cards from the top of your deck into your drop zone. {act}{rc}:[Put this unit into your soul] Put three cards from the top of your deck into your drop zone.
textRu: "" textRu: ""
- nameId: hell-spider - nameId: hell-spider
nameEn: "Hell Spider" nameEn: "Hell Spider"
nameRu: ""
template: |- template: |-
{cont}{vc}:During your turn, if all of your opponent's vanguard and rear-guards are Rest , this unit gets {power} +3000. {cont}{vc}:During your turn, if all of your opponent's vanguard and rear-guards are Rest , this unit gets {power} +3000.
{auto}:{cb:2} When this unit is placed on {vc} or {rc}, you may pay the cost. If you do, choose one of your opponent's rear-guards, and the chosen unit cannot {stand} during your opponent's next stand phase. {auto}:{cb:2} When this unit is placed on {vc} or {rc}, you may pay the cost. If you do, choose one of your opponent's rear-guards, and the chosen unit cannot {stand} during your opponent's next stand phase.
textRu: "" textRu: ""
- nameId: highspeed-brakki - nameId: highspeed-brakki
nameEn: "Highspeed, Brakki" nameEn: "Highspeed, Brakki"
nameRu: ""
template: |- template: |-
{auto}{rc}:{sb:1} When this unit attacks, you may pay the cost. If you do, this unit gets {power} +5000 until end of that battle, and at the beginning of the close step of that battle, return this unit to your deck, and shuffle your deck. {auto}{rc}:{sb:1} When this unit attacks, you may pay the cost. If you do, this unit gets {power} +5000 until end of that battle, and at the beginning of the close step of that battle, return this unit to your deck, and shuffle your deck.
textRu: "" textRu: ""
- nameId: hungry-dumpty - nameId: hungry-dumpty
nameEn: "Hungry Dumpty" nameEn: "Hungry Dumpty"
nameRu: ""
template: |- template: |-
{auto}:When this unit is placed on {rc}, if you have a {clan:nova-grappler} vanguard, choose a card from your damage zone, and turn it face up. {auto}:When this unit is placed on {rc}, if you have a {clan:nova-grappler} vanguard, choose a card from your damage zone, and turn it face up.
textRu: "" textRu: ""
- nameId: ironclad-dragon-shieldon - nameId: ironclad-dragon-shieldon
nameEn: "Ironclad Dragon, Shieldon" nameEn: "Ironclad Dragon, Shieldon"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: juggernaut-maximum - nameId: juggernaut-maximum
nameEn: "Juggernaut Maximum" nameEn: "Juggernaut Maximum"
nameRu: ""
template: |- template: |-
{cont}{vcrc}:If you do not have another {clan:spike-brothers} vanguard or rear-guard, this unit gets {power} -2000. {cont}{vcrc}:If you do not have another {clan:spike-brothers} vanguard or rear-guard, this unit gets {power} -2000.
{auto}{rc}:{sb:1} When this unit attacks, you may pay the cost. If you do, this unit gets {power} +5000 until end of that battle, and at the beginning of the close step of that battle, return this unit to your deck, and shuffle your deck. {auto}{rc}:{sb:1} When this unit attacks, you may pay the cost. If you do, this unit gets {power} +5000 until end of that battle, and at the beginning of the close step of that battle, return this unit to your deck, and shuffle your deck.
textRu: "" textRu: ""
- nameId: karma-queen - nameId: karma-queen
nameEn: "Karma Queen" nameEn: "Karma Queen"
nameRu: ""
template: |- template: |-
{auto}:{cb:2} When this unit is placed on {vc} or {rc}, you may pay the cost. If you do, choose one of your opponent's rear-guards, and the chosen unit cannot {stand} during your opponent's next stand phase. {auto}:{cb:2} When this unit is placed on {vc} or {rc}, you may pay the cost. If you do, choose one of your opponent's rear-guards, and the chosen unit cannot {stand} during your opponent's next stand phase.
textRu: "" textRu: ""
- nameId: king-of-knights-alfred - nameId: king-of-knights-alfred
nameEn: "King of Knights, Alfred" nameEn: "King of Knights, Alfred"
nameRu: ""
template: |- template: |-
{cont}{vc}:Your units cannot boost this unit. {cont}{vc}:Your units cannot boost this unit.
{cont}{vc}:During your turn, this unit gets {power} +2000 for each of your {clan:royal-paladin} rear-guards. {cont}{vc}:During your turn, this unit gets {power} +2000 for each of your {clan:royal-paladin} rear-guards.
@ -298,63 +252,52 @@ cards:
textRu: "" textRu: ""
- nameId: king-of-sword - nameId: king-of-sword
nameEn: "King of Sword" nameEn: "King of Sword"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: knight-of-conviction-bors - nameId: knight-of-conviction-bors
nameEn: "Knight of Conviction, Bors" nameEn: "Knight of Conviction, Bors"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:{cb:1} When this unit attacks, you may pay the cost. If you do, this unit gets {power} +3000 until end of that battle. {auto}{vcrc}:{cb:1} When this unit attacks, you may pay the cost. If you do, this unit gets {power} +3000 until end of that battle.
textRu: "" textRu: ""
- nameId: knight-of-rose-morgana - nameId: knight-of-rose-morgana
nameEn: "Knight of Rose, Morgana" nameEn: "Knight of Rose, Morgana"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:[Choose a card from your hand, and discard it] When this unit attacks, you may pay the cost. If you do, this unit gets {power} +4000 until end of turn. {auto}{vcrc}:[Choose a card from your hand, and discard it] When this unit attacks, you may pay the cost. If you do, this unit gets {power} +4000 until end of turn.
textRu: "" textRu: ""
- nameId: knight-of-silence-gallatin - nameId: knight-of-silence-gallatin
nameEn: "Knight of Silence, Gallatin" nameEn: "Knight of Silence, Gallatin"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: knight-of-the-harp-tristan - nameId: knight-of-the-harp-tristan
nameEn: "Knight of the Harp, Tristan" nameEn: "Knight of the Harp, Tristan"
nameRu: ""
template: |- template: |-
{auto}{vc}:When this unit's drive check reveals a grade 3 {clan:royal-paladin}, this unit gets {power} +5000 until end of that battle. {auto}{vc}:When this unit's drive check reveals a grade 3 {clan:royal-paladin}, this unit gets {power} +5000 until end of that battle.
textRu: "" textRu: ""
- nameId: lake-maiden-lien - nameId: lake-maiden-lien
nameEn: "Lake Maiden, Lien" nameEn: "Lake Maiden, Lien"
nameRu: ""
template: |- template: |-
{act}{vcrc}:[{rest} & Choose a card from your hand, and discard it] Draw a card. {act}{vcrc}:[{rest} & Choose a card from your hand, and discard it] Draw a card.
textRu: "" textRu: ""
- nameId: little-sage-marron - nameId: little-sage-marron
nameEn: "Little Sage, Marron" nameEn: "Little Sage, Marron"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: lizard-runner-undeux - nameId: lizard-runner-undeux
nameEn: "Lizard Runner, Undeux" nameEn: "Lizard Runner, Undeux"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: lizard-soldier-conroe - nameId: lizard-soldier-conroe
nameEn: "Lizard Soldier, Conroe" nameEn: "Lizard Soldier, Conroe"
nameRu: ""
template: |- template: |-
{auto}:When another {clan:kagero} rides this unit, you may call this card to a {rc}. {auto}:When another {clan:kagero} rides this unit, you may call this card to a {rc}.
{act}{rc}:[{cb:1} & Retire this unit] Search your deck for up to one grade 1 or less {clan:kagero}, reveal it to your opponent, put it into your hand, and shuffle your deck. {act}{rc}:[{cb:1} & Retire this unit] Search your deck for up to one grade 1 or less {clan:kagero}, reveal it to your opponent, put it into your hand, and shuffle your deck.
textRu: "" textRu: ""
- nameId: lizard-soldier-ganlu - nameId: lizard-soldier-ganlu
nameEn: "Lizard Soldier, Ganlu" nameEn: "Lizard Soldier, Ganlu"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: lozenge-magus - nameId: lozenge-magus
nameEn: "Lozenge Magus" nameEn: "Lozenge Magus"
nameRu: ""
template: |- template: |-
(You may only have up to four cards with "{heal} HEAL" in a deck.) (You may only have up to four cards with "{heal} HEAL" in a deck.)
{auto}:When another {clan:oracle-think-tank} rides this unit, you may call this card to {rc}. {auto}:When another {clan:oracle-think-tank} rides this unit, you may call this card to {rc}.
@ -362,211 +305,175 @@ cards:
textRu: "" textRu: ""
- nameId: lucky-girl - nameId: lucky-girl
nameEn: "Lucky Girl" nameEn: "Lucky Girl"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: madame-mirage - nameId: madame-mirage
nameEn: "Madame Mirage" nameEn: "Madame Mirage"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: maiden-of-libra - nameId: maiden-of-libra
nameEn: "Maiden of Libra" nameEn: "Maiden of Libra"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:{cb:2} When this unit's attack hits, if you have an {clan:oracle-think-tank} vanguard, you may pay the cost. If you do, draw a card. {auto}{vcrc}:{cb:2} When this unit's attack hits, if you have an {clan:oracle-think-tank} vanguard, you may pay the cost. If you do, draw a card.
textRu: "" textRu: ""
- nameId: miracle-kid - nameId: miracle-kid
nameEn: "Miracle Kid" nameEn: "Miracle Kid"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: monster-frank - nameId: monster-frank
nameEn: "Monster Frank" nameEn: "Monster Frank"
nameRu: ""
template: |- template: |-
{act}{drop}:{cb:3} If you have a grade 2 vanguard, ride this card. {act}{drop}:{cb:3} If you have a grade 2 vanguard, ride this card.
textRu: "" textRu: ""
- nameId: mr-invincible - nameId: mr-invincible
nameEn: "Mr. Invincible" nameEn: "Mr. Invincible"
nameRu: ""
template: |- template: |-
{auto}{vc}:At the beginning of your main phase, {sc:1}, choose a card from your damage zone, and turn it face up. {auto}{vc}:At the beginning of your main phase, {sc:1}, choose a card from your damage zone, and turn it face up.
{auto}{vcrc}:{sb:8} & {cb:5} When this unit's attack hits, you may pay the cost. If you do, {stand} all of your units. {auto}{vcrc}:{sb:8} & {cb:5} When this unit's attack hits, you may pay the cost. If you do, {stand} all of your units.
textRu: "" textRu: ""
- nameId: nightmare-baby - nameId: nightmare-baby
nameEn: "Nightmare Baby" nameEn: "Nightmare Baby"
nameRu: ""
template: |- template: |-
{auto}{rc}:When this unit boosts a unit named "Blue Dust", the boosted unit gets {power} +4000 until end of that battle. {auto}{rc}:When this unit boosts a unit named "Blue Dust", the boosted unit gets {power} +4000 until end of that battle.
textRu: "" textRu: ""
- nameId: oracle-guardian-apollon - nameId: oracle-guardian-apollon
nameEn: "Oracle Guardian, Apollon" nameEn: "Oracle Guardian, Apollon"
nameRu: ""
template: |- template: |-
{auto}{vc}:{cb:2} When this unit's attack hits, you may pay the cost. If you do, draw two cards, choose a card from your hand, return it to your deck, and shuffle your deck. {auto}{vc}:{cb:2} When this unit's attack hits, you may pay the cost. If you do, draw two cards, choose a card from your hand, return it to your deck, and shuffle your deck.
{auto}{rc}:{cb:2} When this unit's attack hits, you may pay the cost. If you do, draw a card. {auto}{rc}:{cb:2} When this unit's attack hits, you may pay the cost. If you do, draw a card.
textRu: "" textRu: ""
- nameId: oracle-guardian-gemini - nameId: oracle-guardian-gemini
nameEn: "Oracle Guardian, Gemini" nameEn: "Oracle Guardian, Gemini"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: oracle-guardian-nike - nameId: oracle-guardian-nike
nameEn: "Oracle Guardian, Nike" nameEn: "Oracle Guardian, Nike"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: oracle-guardian-wiseman - nameId: oracle-guardian-wiseman
nameEn: "Oracle Guardian, Wiseman" nameEn: "Oracle Guardian, Wiseman"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: queen-of-heart - nameId: queen-of-heart
nameEn: "Queen of Heart" nameEn: "Queen of Heart"
nameRu: ""
template: |- template: |-
{auto}{rc}:When this unit boosts a unit named "King of Sword", the boosted unit gets {power} +4000 until end of that battle. {auto}{rc}:When this unit boosts a unit named "King of Sword", the boosted unit gets {power} +4000 until end of that battle.
textRu: "" textRu: ""
- nameId: redshoe-milly - nameId: redshoe-milly
nameEn: "Redshoe, Milly" nameEn: "Redshoe, Milly"
nameRu: ""
template: |- template: |-
{auto}:When this unit is put into the drop zone from {gc}, put this card into your soul. {auto}:When this unit is put into the drop zone from {gc}, put this card into your soul.
textRu: "" textRu: ""
- nameId: ring-girl-clara - nameId: ring-girl-clara
nameEn: "Ring Girl, Clara" nameEn: "Ring Girl, Clara"
nameRu: ""
template: |- template: |-
(You may only have up to four cards with "{heal} HEAL" in a deck.) (You may only have up to four cards with "{heal} HEAL" in a deck.)
textRu: "" textRu: ""
- nameId: rock-the-wall - nameId: rock-the-wall
nameEn: "Rock the Wall" nameEn: "Rock the Wall"
nameRu: ""
template: |- template: |-
{auto}:When this unit is put into the drop zone from {gc}, put this card into your soul. {auto}:When this unit is put into the drop zone from {gc}, put this card into your soul.
textRu: "" textRu: ""
- nameId: screamin-and-dancin-announcer-shout - nameId: screamin-and-dancin-announcer-shout
nameEn: "Screamin' and Dancin' Announcer, Shout" nameEn: "Screamin' and Dancin' Announcer, Shout"
nameRu: ""
template: |- template: |-
{act}{vcrc}:[{rest} & Choose a card from your hand, and discard it] Draw a card. {act}{vcrc}:[{rest} & Choose a card from your hand, and discard it] Draw a card.
textRu: "" textRu: ""
- nameId: shining-lady - nameId: shining-lady
nameEn: "Shining Lady" nameEn: "Shining Lady"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: solitary-knight-gancelot - nameId: solitary-knight-gancelot
nameEn: "Solitary Knight, Gancelot" nameEn: "Solitary Knight, Gancelot"
nameRu: ""
template: |- template: |-
{act}{vc}:{cb:2} If you have a card named "Blaster Blade" in your soul, this unit gets {power} +5000/{critical} +1 until end of turn. {act}{vc}:{cb:2} If you have a card named "Blaster Blade" in your soul, this unit gets {power} +5000/{critical} +1 until end of turn.
{act}{hand}:[Reveal this card to your opponent, and put it on top of your deck] Search your deck for up to one card named "Blaster Blade", reveal it to your opponent, put it into your hand, and shuffle your deck. {act}{hand}:[Reveal this card to your opponent, and put it on top of your deck] Search your deck for up to one card named "Blaster Blade", reveal it to your opponent, put it into your hand, and shuffle your deck.
textRu: "" textRu: ""
- nameId: sonic-noa - nameId: sonic-noa
nameEn: "Sonic Noa" nameEn: "Sonic Noa"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: stardust-trumpeter - nameId: stardust-trumpeter
nameEn: "Stardust Trumpeter" nameEn: "Stardust Trumpeter"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: starlight-unicorn - nameId: starlight-unicorn
nameEn: "Starlight Unicorn" nameEn: "Starlight Unicorn"
nameRu: ""
template: |- template: |-
{auto}:When this unit is placed on {rc}, choose another of your {clan:royal-paladin}, and that unit gets {power} +2000 until end of turn. {auto}:When this unit is placed on {rc}, choose another of your {clan:royal-paladin}, and that unit gets {power} +2000 until end of turn.
textRu: "" textRu: ""
- nameId: stealth-beast-chigasumi - nameId: stealth-beast-chigasumi
nameEn: "Stealth Beast, Chigasumi" nameEn: "Stealth Beast, Chigasumi"
nameRu: ""
template: |- template: |-
{auto}{vcrc}:When this unit attacks, if the number of cards in your hand is greater than your opponent's, this unit gets {power} +3000 until end of that battle. {auto}{vcrc}:When this unit attacks, if the number of cards in your hand is greater than your opponent's, this unit gets {power} +3000 until end of that battle.
textRu: "" textRu: ""
- nameId: stealth-beast-hagakure - nameId: stealth-beast-hagakure
nameEn: "Stealth Beast, Hagakure" nameEn: "Stealth Beast, Hagakure"
nameRu: ""
template: |- template: |-
{auto}:{cb:1} When this unit is placed on {gc}, if you have a {clan:nubatama} vanguard, and the number of cards in your hand is less than your opponent's, you may pay the cost. If you do, your opponent chooses a card from his or her hand, and discards it. {auto}:{cb:1} When this unit is placed on {gc}, if you have a {clan:nubatama} vanguard, and the number of cards in your hand is less than your opponent's, you may pay the cost. If you do, your opponent chooses a card from his or her hand, and discards it.
textRu: "" textRu: ""
- nameId: stealth-dragon-dreadmaster - nameId: stealth-dragon-dreadmaster
nameEn: "Stealth Dragon, Dreadmaster" nameEn: "Stealth Dragon, Dreadmaster"
nameRu: ""
template: |- template: |-
{auto}{rc}:{cb:1} When an attack hits during the battle that this unit boosted a {clan:nubatama}, if the number of cards in your hand is less than your opponent's, you may pay the cost. If you do, your opponent chooses a card from his or her hand, and discards it. {auto}{rc}:{cb:1} When an attack hits during the battle that this unit boosted a {clan:nubatama}, if the number of cards in your hand is less than your opponent's, you may pay the cost. If you do, your opponent chooses a card from his or her hand, and discards it.
textRu: "" textRu: ""
- nameId: stealth-dragon-voidmaster - nameId: stealth-dragon-voidmaster
nameEn: "Stealth Dragon, Voidmaster" nameEn: "Stealth Dragon, Voidmaster"
nameRu: ""
template: |- template: |-
{auto}{vc}:When this unit attacks, if the number of cards in your hand is greater than your opponent's, this unit gets {power} +3000 until end of that battle. {auto}{vc}:When this unit attacks, if the number of cards in your hand is greater than your opponent's, this unit gets {power} +3000 until end of that battle.
{auto}{vcrc}:{cb:1} When this unit's attack hits, if the number of cards in your hand is less than your opponent's, you may pay the cost. If you do, your opponent chooses a card from his or her hand, and discards it. {auto}{vcrc}:{cb:1} When this unit's attack hits, if the number of cards in your hand is less than your opponent's, you may pay the cost. If you do, your opponent chooses a card from his or her hand, and discards it.
textRu: "" textRu: ""
- nameId: tough-boy - nameId: tough-boy
nameEn: "Tough Boy" nameEn: "Tough Boy"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: tyrant-deathrex - nameId: tyrant-deathrex
nameEn: "Tyrant, Deathrex" nameEn: "Tyrant, Deathrex"
nameRu: ""
template: |- template: |-
{auto}{vc}:When this unit attacks, this unit gets {power} +5000 until end of that battle. {auto}{vc}:When this unit attacks, this unit gets {power} +5000 until end of that battle.
{auto}{vc}:When this unit's attack hits, choose one of your rear-guards, and retire it. {auto}{vc}:When this unit's attack hits, choose one of your rear-guards, and retire it.
textRu: "" textRu: ""
- nameId: vortex-dragon - nameId: vortex-dragon
nameEn: "Vortex Dragon" nameEn: "Vortex Dragon"
nameRu: ""
template: |- template: |-
{auto}{vc}:At the begininng of your main phase, {sc:1}, and this unit gets {power} +2000 until end of turn. {auto}{vc}:At the begininng of your main phase, {sc:1}, and this unit gets {power} +2000 until end of turn.
{act}{vcrc}:{sb:8} & {cb:5} Choose up to three of your opponent's rear-guards, and retire them. {act}{vcrc}:{sb:8} & {cb:5} Choose up to three of your opponent's rear-guards, and retire them.
textRu: "" textRu: ""
- nameId: weapons-dealer-govannon - nameId: weapons-dealer-govannon
nameEn: "Weapons Dealer, Govannon" nameEn: "Weapons Dealer, Govannon"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: weather-girl-milk - nameId: weather-girl-milk
nameEn: "Weather Girl, Milk" nameEn: "Weather Girl, Milk"
nameRu: ""
template: |- template: |-
{auto}{rc}:When this unit boosts an {clan:oracle-think-tank} vanguard, if the number of cards in your hand is four or greater, the boosted unit gets {power} +4000 until end of that battle. {auto}{rc}:When this unit boosts an {clan:oracle-think-tank} vanguard, if the number of cards in your hand is four or greater, the boosted unit gets {power} +4000 until end of that battle.
textRu: "" textRu: ""
- nameId: wingal - nameId: wingal
nameEn: "Wingal" nameEn: "Wingal"
nameRu: ""
template: |- template: |-
{auto}{rc}:When this unit boosts a card named "Blaster Blade", the boosted unit gets {power} +4000 until end of that battle. {auto}{rc}:When this unit boosts a card named "Blaster Blade", the boosted unit gets {power} +4000 until end of that battle.
textRu: "" textRu: ""
- nameId: wonder-boy - nameId: wonder-boy
nameEn: "Wonder Boy" nameEn: "Wonder Boy"
nameRu: ""
template: "" template: ""
textRu: "" textRu: ""
- nameId: wyvern-guard-barri - nameId: wyvern-guard-barri
nameEn: "Wyvern Guard, Barri" nameEn: "Wyvern Guard, Barri"
nameRu: ""
template: |- template: |-
{cont}:{sentinel} (You may only have up to four cards with "{cont}:{sentinel}" in a deck.){auto}:[Choose a {clan:kagero} from your hand, and discard it] When this unit is placed on {gc}, you may pay the cost. If you do, choose one of your {clan:kagero} that is being attacked, and that unit cannot be hit until end of that battle. {cont}:{sentinel} (You may only have up to four cards with "{cont}:{sentinel}" in a deck.){auto}:[Choose a {clan:kagero} from your hand, and discard it] When this unit is placed on {gc}, you may pay the cost. If you do, choose one of your {clan:kagero} that is being attacked, and that unit cannot be hit until end of that battle.
textRu: "" textRu: ""
- nameId: wyvern-strike-jarran - nameId: wyvern-strike-jarran
nameEn: "Wyvern Strike, Jarran" nameEn: "Wyvern Strike, Jarran"
nameRu: ""
template: |- template: |-
{auto}{rc}:When this unit boosts a card named "Wyvern Strike, Tejas", the boosted unit gets {power} +4000 until end of that battle. {auto}{rc}:When this unit boosts a card named "Wyvern Strike, Tejas", the boosted unit gets {power} +4000 until end of that battle.
textRu: "" textRu: ""
- nameId: wyvern-strike-tejas - nameId: wyvern-strike-tejas
nameEn: "Wyvern Strike, Tejas" nameEn: "Wyvern Strike, Tejas"
nameRu: ""
template: |- template: |-
{cont}{vcrc}:If this unit would attack, it may instead attack an opponent's unit in the back row of the same column as this unit. {cont}{vcrc}:If this unit would attack, it may instead attack an opponent's unit in the back row of the same column as this unit.
textRu: "" textRu: ""
- nameId: yggdrasil-maiden-elaine - nameId: yggdrasil-maiden-elaine
nameEn: "Yggdrasil Maiden, Elaine" nameEn: "Yggdrasil Maiden, Elaine"
nameRu: ""
template: |- template: |-
(You may only have up to four cards with "{heal} HEAL" in a deck.) (You may only have up to four cards with "{heal} HEAL" in a deck.)
textRu: "" textRu: ""

View File

@ -28,7 +28,6 @@ public static class ContentValidator
public static ContentReport Validate(CardCatalog catalog) public static ContentReport Validate(CardCatalog catalog)
{ {
var issues = new List<ContentIssue>(); var issues = new List<ContentIssue>();
var missingRu = new List<string>();
foreach (var card in catalog.Cards) foreach (var card in catalog.Cards)
{ {
@ -69,19 +68,6 @@ public static class ContentValidator
$"{card.NameId}: NormalUnit не может иметь триггер {card.Trigger}.")); $"{card.NameId}: NormalUnit не может иметь триггер {card.Trigger}."));
} }
if (card.NameRu is null)
{
missingRu.Add(card.NameId);
}
}
if (missingRu.Count > 0)
{
var sample = string.Join(", ", missingRu.Take(5));
issues.Add(new ContentIssue(
IssueSeverity.Warning,
"card.no-ru-name",
$"Без русского названия: {missingRu.Count} карт ({sample}{(missingRu.Count > 5 ? ", …" : string.Empty)})."));
} }
foreach (var printing in catalog.Printings.Where(p => p.IsParallel)) foreach (var printing in catalog.Printings.Where(p => p.IsParallel))

View File

@ -15,7 +15,6 @@ public sealed class TranslationEntry
{ {
public string NameId { get; set; } = string.Empty; public string NameId { get; set; } = string.Empty;
public string NameEn { get; set; } = string.Empty; public string NameEn { get; set; } = string.Empty;
public string? NameRu { get; set; }
/// <summary>Английский текст с токенами вместо иконок. Источник для перевода.</summary> /// <summary>Английский текст с токенами вместо иконок. Источник для перевода.</summary>
public string? Template { get; set; } public string? Template { get; set; }
@ -29,7 +28,8 @@ public static class TranslationYaml
""" """
# Русские тексты карт. # Русские тексты карт.
# #
# Заполняйте только nameRu и textRu. Остальные поля не меняйте. # Имена карт остаются английскими — переводим только текст эффекта.
# Заполняйте только textRu. Остальные поля не меняйте.
# Токены в фигурных скобках — это иконки: {auto}, {cb:3}, {vcrc}, {clan:kagero}. # Токены в фигурных скобках — это иконки: {auto}, {cb:3}, {vcrc}, {clan:kagero}.
# Их нужно сохранить в textRu ровно в таком же количестве, иначе проверка не пройдёт. # Их нужно сохранить в textRu ровно в таком же количестве, иначе проверка не пройдёт.
# Список всех токенов — content/keywords.yaml. # Список всех токенов — content/keywords.yaml.
@ -53,7 +53,6 @@ public static class TranslationYaml
{ {
sb.Append(" - nameId: ").Append(card.NameId).Append('\n'); sb.Append(" - nameId: ").Append(card.NameId).Append('\n');
sb.Append(" nameEn: ").Append(Quote(card.NameEn)).Append('\n'); sb.Append(" nameEn: ").Append(Quote(card.NameEn)).Append('\n');
sb.Append(" nameRu: ").Append(Quote(card.NameRu ?? string.Empty)).Append('\n');
AppendBlock(sb, "template", card.Template); AppendBlock(sb, "template", card.Template);
sb.Append(" textRu: ").Append(Quote(card.TextRu ?? string.Empty)).Append('\n'); sb.Append(" textRu: ").Append(Quote(card.TextRu ?? string.Empty)).Append('\n');
} }
@ -121,7 +120,6 @@ public static class TranslationService
{ {
NameId = card.NameId, NameId = card.NameId,
NameEn = card.NameEn, NameEn = card.NameEn,
NameRu = old?.NameRu ?? string.Empty,
Template = CardText.CardTextTokenizer.ToTemplate(card.TextEn), Template = CardText.CardTextTokenizer.ToTemplate(card.TextEn),
TextRu = old?.TextRu ?? string.Empty, TextRu = old?.TextRu ?? string.Empty,
}; };
@ -139,18 +137,12 @@ public static class TranslationService
foreach (var card in file.Cards) foreach (var card in file.Cards)
{ {
var hasName = !string.IsNullOrWhiteSpace(card.NameRu);
var hasText = string.IsNullOrWhiteSpace(card.Template) || !string.IsNullOrWhiteSpace(card.TextRu); var hasText = string.IsNullOrWhiteSpace(card.Template) || !string.IsNullOrWhiteSpace(card.TextRu);
if (hasName && hasText) if (hasText)
translated++; translated++;
else else
{ issues.Add(new TranslationIssue(card.NameId, "text.missing", "Не заполнено textRu."));
if (!hasName)
issues.Add(new TranslationIssue(card.NameId, "name.missing", "Не заполнено nameRu."));
if (!hasText)
issues.Add(new TranslationIssue(card.NameId, "text.missing", "Не заполнено textRu."));
}
var source = CardText.CardTextTokenizer.ExtractTokens(card.Template); var source = CardText.CardTextTokenizer.ExtractTokens(card.Template);
var target = CardText.CardTextTokenizer.ExtractTokens(card.TextRu); var target = CardText.CardTextTokenizer.ExtractTokens(card.TextRu);

View File

@ -78,7 +78,6 @@ public class CardTextTests
{ {
NameId = "test", NameId = "test",
NameEn = "Test", NameEn = "Test",
NameRu = "Тест",
Template = "{auto}{vc}:Draw a card.", Template = "{auto}{vc}:Draw a card.",
TextRu = "Взять карту.", TextRu = "Взять карту.",
}, },
@ -101,7 +100,6 @@ public class CardTextTests
{ {
NameId = "test", NameId = "test",
NameEn = "Test", NameEn = "Test",
NameRu = "Тест",
Template = "{auto}{vc}:Draw a card.", Template = "{auto}{vc}:Draw a card.",
TextRu = "{auto}{vc}:Взять карту.", TextRu = "{auto}{vc}:Взять карту.",
}, },