From e3187471f4994c99d53f20e4c9bfb3a2f2454ce3 Mon Sep 17 00:00:00 2001 From: Physcik Date: Tue, 13 Jan 2026 22:15:27 +0500 Subject: Generation automation --- Components/cardLine.svg | 3 ++ Components/components.svg | 7 +++ cards.json | 17 +++++++- index.css | 32 ++++++++++---- index.html | 107 +++++++++++++++++++++++++++++++++------------- index.js | 42 +++++++++++++++++- 6 files changed, 168 insertions(+), 40 deletions(-) create mode 100644 Components/cardLine.svg create mode 100644 Components/components.svg diff --git a/Components/cardLine.svg b/Components/cardLine.svg new file mode 100644 index 0000000..348d73f --- /dev/null +++ b/Components/cardLine.svg @@ -0,0 +1,3 @@ + + + diff --git a/Components/components.svg b/Components/components.svg new file mode 100644 index 0000000..fe5fb21 --- /dev/null +++ b/Components/components.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/cards.json b/cards.json index 6bb6296..697ac7b 100644 --- a/cards.json +++ b/cards.json @@ -9,12 +9,27 @@ "Distance": "60 футов", "Components": "В, С, М (кусок овечьей шерсти)", "Duration": "Концентрация, до 10 минут", - "DescriptionScale": 20, + "DescriptionScale": 18, "Description": [ "Вы создаёте образ предмета, существа или другого видимого явления, помещающийся в объёме в куб с длиной ребра 15 футов. Образ появляется в точке, которую вы видите в пределах дистанции, и существует, пока активно заклинание. Это исключительно зрительная иллюзия, не сопровождаемая звуками, запахами и прочими сенсорными эффектами.", "Вы можете действием заставить образ переместиться в любое место в пределах дистанции. Пока образ меняет местоположение, вы можете изменять его внешность, чтобы перемещение выглядело естественным. Например, если вы создаёте образ существа и перемещаете его, вы можете изменить образ, чтобы казалось, что оно идёт.", "Физическое взаимодействие с образом даёт понять, что это иллюзия, потому что сквозь него всё проходит. Существа, исследующие образ действием, могут определить, что это иллюзия, совершив успешную проверку Интеллекта (Анализ) против Сл ваших заклинаний. Если существо распознаёт иллюзию, оно может видеть сквозь неё." ] + }, + { + "ClassName": "bard", + "Level": 1, + "SpellName": "Жуткий смех Таши", + "School": "Очарование", + "CastTime": "1 действие", + "Distance": "30 футов", + "Components": " В, С, М (маленькие пирожные и перо, которым нужно махать в воздухе)", + "Duration": "Концентрация, до 1 минуты", + "DescriptionScale": 18, + "Description": [ + "Существо на ваш выбор, видимое в пределах дистанции, воспринимает всё невероятно смешным, и корчится от смеха, если заклинание на него действует. Цель должна преуспеть в спасброске Мудрости, иначе она падает ничком, становится недееспособной, и в течение действия заклинания не может встать. Существа со значением Интеллекта 4 и меньше не попадают под действие этого заклинания.", + "В конце каждого своего хода, и каждый раз при получении урона цель может совершать новый спасбросок Мудрости. Спасбросок совершается с преимуществом, если он был вызван получением урона. При успехе заклинание оканчивается." + ] } ] } diff --git a/index.css b/index.css index 2a42482..28a074c 100644 --- a/index.css +++ b/index.css @@ -30,14 +30,20 @@ } .card { + background-image: url("cardFace.png"); + background-size: cover; + +} + +.overlay { + background-image: url("Components/cardLine.svg"); + background-size: cover; + background-repeat: no-repeat; + background-size: 100%; padding: -5px; height: calc(160px * 4); width: calc(110px * 4); - border: 5px solid black; - border-radius: 30px; display: flex; - background-image: url("cardFace.png"); - background-size: cover; } .in-box { @@ -48,9 +54,8 @@ } .side-panel { - height: calc(160px * 4); + height: calc(160px * 4 - 10px); width: calc(160px * 4 * 0.1 - 23px + 10px); - background-color: balck; border-top-left-radius: 20px; border-bottom-left-radius: 20px; } @@ -70,7 +75,7 @@ } .side-panel-content { - height: calc(160px * 4 - (160px * 4 * 0.1) - 5px); + height: calc(160px * 4 - (160px * 4 * 0.1) - 25px); display: flex; } @@ -94,6 +99,7 @@ padding-left: 10px; width: calc(160px * 4 * 0.9 - 30px - 220px); line-height: 70px; + text-align: center; } .class-icon { @@ -108,6 +114,7 @@ width: calc(160px * 4 * 0.9 - 30px - 220px); margin-bottom: 0px; + text-align: center; } .stats { @@ -124,6 +131,13 @@ list-style: none; flex-wrap: wrap; + + background-image: url("Components/components.svg"); + background-size: cover; + background-repeat: no-repeat; + background-size: 100%; + + text-align: center; } .description { @@ -136,6 +150,8 @@ li { .contents > p { font-size: var(--font-size); + padding-right: 10px; + padding-left: 10px; } .card.bard > .side-panel > .level { @@ -147,7 +163,7 @@ li { background-repeat: no-repeat; background-size: cover; margin-top: calc(180px * 4 * 0.1 - 6px); - height: calc(160px * 4 - 180px * 4 * 0.1 + 10px); + height: calc(160px * 4 - 180px * 4 * 0.1 + 10px - 10px); min-width: 10; } diff --git a/index.html b/index.html index 1073865..2af4efa 100644 --- a/index.html +++ b/index.html @@ -10,45 +10,92 @@ -
+
-
-

1

-
-

Иллюзия

+
+
+

1

+
+

Иллюзия

+
+
+
+
+

+ Бард +

+ +

+ Безмолвный образ +

+
    +
  • +
  • 1 действие
  • +
  • +
  • 60 футов
  • +
  • +
  • В, С, М (кусок овечьей шерсти)
  • +
  • +
  • Концентрация, до 10 минут
  • +
  • +
-
-
-
-

- Бард -

- -

- Безмолвный образ -

-
    -
  • -
  • 1 действие
  • -
  • -
  • 60 футов
  • -
  • -
  • В, С, М (кусок овечьей шерсти)
  • -
  • -
  • Концентрация, до 10 минут
  • -
  • -
-
-

Вы создаёте образ предмета, существа или другого видимого явления, помещающийся в объёме в куб с длиной ребра 15 футов. Образ появляется в точке, которую вы видите в пределах дистанции, и существует, пока активно заклинание. Это исключительно зрительная иллюзия, не сопровождаемая звуками, запахами и прочими сенсорными эффектами.

-

Вы можете действием заставить образ переместиться в любое место в пределах дистанции. Пока образ меняет местоположение, вы можете изменять его внешность, чтобы перемещение выглядело естественным. Например, если вы создаёте образ существа и перемещаете его, вы можете изменить образ, чтобы казалось, что оно идёт.

-

Физическое взаимодействие с образом даёт понять, что это иллюзия, потому что сквозь него всё проходит. Существа, исследующие образ действием, могут определить, что это иллюзия, совершив успешную проверку Интеллекта (Анализ) против Сл ваших заклинаний. Если существо распознаёт иллюзию, оно может видеть сквозь неё.

+
+
+

Вы создаёте образ предмета, существа или другого видимого явления, помещающийся в объёме в куб с длиной ребра 15 футов. Образ появляется в точке, которую вы видите в пределах дистанции, и существует, пока активно заклинание. Это исключительно зрительная иллюзия, не сопровождаемая звуками, запахами и прочими сенсорными эффектами.

+

Вы можете действием заставить образ переместиться в любое место в пределах дистанции. Пока образ меняет местоположение, вы можете изменять его внешность, чтобы перемещение выглядело естественным. Например, если вы создаёте образ существа и перемещаете его, вы можете изменить образ, чтобы казалось, что оно идёт.

+

Физическое взаимодействие с образом даёт понять, что это иллюзия, потому что сквозь него всё проходит. Существа, исследующие образ действием, могут определить, что это иллюзия, совершив успешную проверку Интеллекта (Анализ) против Сл ваших заклинаний. Если существо распознаёт иллюзию, оно может видеть сквозь неё.

+
+ + + +
diff --git a/index.js b/index.js index 25c4313..aeab55d 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,8 @@ function LoadData(data) { const objects = JSON.parse(data).cards; for (i of objects) { - console.log(i); + CreateFace(i); + CreateBack(i); } } @@ -21,3 +22,42 @@ function readFileContent(file) { reader.readAsText(file) }) } + +function CreateFace(card) { + let parent = document.getElementById("row"); + const template = document.getElementById("FaceTempl"); + var clone = template.content.cloneNode(true); + + console.log(card); + clone.getElementById("classname").innerHTML = GetClassDisplayName(card.ClassName); + clone.getElementById("level").innerHTML = card.Level; + clone.getElementById("spellName").innerHTML = card.SpellName; + clone.getElementById("school").innerHTML = card.School; + clone.getElementById("castTime").innerHTML = card.CastTime; + clone.getElementById("distance").innerHTML = card.Distance; + clone.getElementById("components").innerHTML = card.Components; + clone.getElementById("duration").innerHTML = card.Duration; + + parent.appendChild(clone); +} + +function CreateBack(card) { + let parent = document.getElementById("row"); + const template = document.getElementById("BackTempl"); + var clone = template.content.cloneNode(true); + var container = clone.getElementById("description"); + for (i of card.Description) { + var newText = document.createElement("p"); + newText.innerHTML = i; + newText.style.fontSize = `${card.DescriptionScale}px`; + container.appendChild(newText); + } + parent.appendChild(clone); +} + +function GetClassDisplayName(baseClass) { + switch (baseClass) { + case "bard": return "Бард"; + } + return ""; +} -- cgit v1.3