From 4d1d1e53f39615c92f842e3767bbbb55eea29636 Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Wed, 25 Oct 2023 15:08:45 +0200 Subject: [PATCH] wip second page osztaly special skills --- public/Merienda-Bold.ttf | Bin 0 -> 89188 bytes src/domain-models/osztaly.ts | 172 ++----------------------------- src/pdf/character.pdf.ts | 4 +- src/pdf/karakter_pdf_view.ts | 5 +- src/pdf/osztaly_skills.ts | 174 ++++++++++++++++++++++++++++++++ src/pdf/osztaly_specials.pdf.ts | 43 ++++++-- 6 files changed, 221 insertions(+), 177 deletions(-) create mode 100644 public/Merienda-Bold.ttf create mode 100644 src/pdf/osztaly_skills.ts diff --git a/public/Merienda-Bold.ttf b/public/Merienda-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..75b7e62df145c8f26980cc500c82ed33c4cd87ec GIT binary patch literal 89188 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 res.arrayBuffer()) + const fontBold = await pdfDoc.embedFont(fontBoldBytes) + DrawOsztalySpecialsPage(secondPage, pdfFont, fontBold, karakter) const pdfBytes = await pdfDoc.save(); download(pdfBytes, karakter.Name + ".pdf", "application/pdf"); diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts index ccc303a..6eef649 100644 --- a/src/pdf/karakter_pdf_view.ts +++ b/src/pdf/karakter_pdf_view.ts @@ -3,13 +3,14 @@ import {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok"; import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {Faj, FajLabel} from "../domain-models/faj"; -import {Osztaly, OsztalyLabel, OsztalySkillsTordelt, Skill} from "../domain-models/osztaly"; +import {Osztaly, OsztalyLabel, OsztalySpecialSkills, Skill} from "../domain-models/osztaly"; import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz"; import {KarakterInputs} from "../domain-models/karakter"; import {CalculateVarazslatMentokNF, NapiVarazslatok} from "../domain-models/memorizalt_varazslatok"; import {GetJellem} from "../domain-models/jellem"; import {Fegyver, GetFegyverek, GetPajzs, GetPancel} from '../domain-models/felszereles' import {SignedNumberToText} from "../components/Helpers"; +import {OsztalySkillsTordelt} from "./osztaly_skills"; export interface KepzettsegPdfView { KepzettsegName: string @@ -83,7 +84,7 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie Nem: karakter.nem || "", Tulajdonsagok: karakter.tulajdonsagok, Osztaly: OsztalyLabel(karakter.osztaly), - OsztalySkills: OsztalySkillsTordelt(karakter.osztaly), + OsztalySkills: OsztalySpecialSkills(karakter.osztaly), Szint: karakter.szint.toString(), Kepzettsegek: karakter.kepzettsegek.map(id => mapKepzettsegToPdfView(Kepzettsegek[id], tulajdonsagok, karakter.szint)), TolvajKepzettsegek: karakter.tolvajKepzettsegek?.map(id => mapKepzettsegToPdfView(Kepzettsegek[id], tulajdonsagok, karakter.szint)) || [], diff --git a/src/pdf/osztaly_skills.ts b/src/pdf/osztaly_skills.ts new file mode 100644 index 0000000..3ee24f2 --- /dev/null +++ b/src/pdf/osztaly_skills.ts @@ -0,0 +1,174 @@ +import {Osztaly, Skill} from "../domain-models/osztaly"; + +export function OsztalySkillsTordelt(osztaly: Osztaly) : Skill[] { + switch (osztaly) { + case Osztaly.Harcos: return [{ + Id: 's_harcos_harcos', + Name: 'Harcos', + Description: 'Speciális harci tapasztalatuknak köszönhetően minden páratlan szinten +2-t kapnak egy\n' + + 'választott fegyvertípus (pl. csatabárd, hosszúkard, stb.) sebzésére. Ez fegyverenként csak\n' + + 'egyszer választható, s arra is fölhasználható, hogy a harcos megtanulja egy egzotikus\n' + + 'fegyver használatát, amire később specializálódhat is. 9. szinttől elérhető számukra a\n' + + 'kettős specializáció: ezzel sebzésmódosítójukat az adott fegyverre +4-re emelhetik.' + } + ] + case Osztaly.Ijasz: return [ + { + Id: 's_harcos_ijasz', + Name: 'Íjász', + Description: 'Íjak használatakor körönként eggyel többször támadhatnak.\n' + + 'Értenek a visszacsapó íjak használatához is.' + }, + { + Id: 's_harcos_ijasz_vert', + Name: 'Kötelező mozgékonyság', + Description: 'Az íjászok nem viselhetnek nehéz vérteket.' + } + ] + case Osztaly.Amazon: return [ + { + Id: 's_harcos_amazon_vert', + Name: 'MMO vért', + Description: + 'Az amazonok csak láncinget vagy könnyebb vérteket viselhetnek, de VO-juk Szint/2-vel\n' + + 'javul, továbbá Karizma- és Ügyességmódosítói közül a kedvezőbbet választhatják.' + }, + { + Id: 's_harcos_amazon_csapatmunka', + Name: 'Csapatmunka', + Description: 'Ha kettő vagy több amazon együttesen harcol, VO-juk további 2 ponttal nő pszionikus\n' + + 'képességeik miatt.' + }, + ] + case Osztaly.Kaloz: return [ + { + Id: 's_harcos_kaloz_ugyes_huzas', + Name: 'Ügyes húzás', + Description: 'A kalózok és tengerészek ha magasabb, Ügyességbónuszukat adják hozzá közelharci\n' + + 'támadásaikhoz.' + }, + { + Id: 's_harcos_kaloz_vasmacska', + Name: 'Vasmacska', + Description: 'A kalózok és tengerészek nem viselhetnek nehéz vértezetet, de VO-juk könnyű vértben\n' + + 'Szint/3-al javul.' + }, + { + Id: 's_harcos_kaloz_kritikus', + Name: 'Kritikus', + Description: 'Minden harmadik szinten kiválaszthatnak egy fegyvert, amivel könnyebben okoznak\n' + + 'kritikus sebesülést, tehát pl. csatabárddal 20 helyett 19-20-on, hosszúkarddal 19-20\n' + + 'helyett 18-20-on, szablyával 18-20 helyett 17-20-on, stb. Ez a képesség 9. szintig\n' + + 'fegyverenként csak egyszer választható.' + }] + case Osztaly.Barbar: return [ + { + Id: 's_harcos_barbar_eletero', + Name: 'Túlélő', + Description: 'A barbárok 1d12-vel dobják a Hp-jüket, -5 Hp-ig öntudatuknál vannak és\n' + + '+1 bónuszt (10. szinttől +2, 15. szinttől +4) kapnak a mentődobásaikra.' + }, + { + Id: 's_harcos_barbar_iras', + Name: 'Írástudatlan', + Description: 'Minden barbár írástudatlanul kezdi a játékot, de ha kell,\n' + + 'később megtanulhatja a betűvetést.' + } + ] + case Osztaly.Pap: return [ + { + Id: 's_pap_varazslat', + Name: 'Varázslatok', + Description: 'A papi varázslatok általában gyógyításra, mások megsegítésére és vallási feladatok\n' + + 'ellátására szolgálnak. Minél magasabb szintűek, egy nap annál több varázslatot tudnak\n' + + 'alkalmazni. Ez a karakterlapon a Mágiánál megtalálható.' + }, + { + Id: 's_pap_gyogyseb', + Name: 'Gyógyítás vagy sebokozás', + Description: + 'A pap az aznap már memorizált (megtanult) varázslatokat gyógyításra vagy sebek\n' + + 'okozására is fölhasználhatja. Érintésével a varázslat minden szintjéért 1d8 Hp-t gyógyít\n' + + 'vagy sebez – így pl. egy Ómen elhasználásával 2d8 Hp-t. Az így konvertált varázslat\n' + + 'természetesen elvész. Az, hogy a képesség sebek gyógyítására vagy okozására szolgál, a\n' + + 'pap istenétől függ. A békésebb istenek főleg az elsőt, a harciasabbak főleg a másodikat\n' + + 'részesítik előnyben, s vannak olyanok is, akik híveikre bízzák, hogy melyik utat választják.\n' + + 'Ha azonban a pap már eldöntötte, melyik képességben járatos, döntését többé nem\n' + + 'másíthatja meg!' + }, + { + Id: 's_pap_elohalott', + Name: 'Élőholtak elűzése vagy irányítása', + Description: + 'A papok istenük dogmájának megfelelően képesek lehetnek arra, hogy élőholt szörnyeket\n' + + '(mint például zombikat, lidérceket vagy vámpírokat) szimbólumuk felmutatásával elűzzenek\n' + + 'vagy szolgálatukba állítsanak. Ez a képesség naponta csak egyszer (5. szinttől kétszer, 10.\n' + + 'szinttől háromszor, 15. szinttől négyszer) használható. A cselekedet a következő módon\n' + + 'működik:', + ExtendedDescription: [ + 'A pap [1d20+Kar bónusz] próbát tesz. Ennek az értékét összeveti a standard bónusztáblázattal. Az innen kiolvasható módosítót hozzáadja saját szintjéhez (ha negatív, akkor levonja). Az eredmény jelzi, hogy a pap legfeljebb milyen szintű élőholtakra lesz hatással. Ha tehát pl. a próba végeredménye 14 és a pap ötödik szintű, akkor 5+1, azaz 6. szintű a legerősebb élőhalott, amire a kísérlet sikeres. A 20-as dobás itt is automatikus siker, az 1-es automatikus kudarc.', + 'A pap [2d6+szint] szintű élőhalottat űzhet el vagy irányíthat. Először a leggyengébb élőholtakra hat, azután a következő leggyengébbekre, stb. Az elűzött élőholtak elmenekülnek a pap szeme elől és addig nem is ártanak neki és társainak, amíg a pap csapata meg nem támadja őket! Ezzel szemben a gonosz papok parancsokat adhatnak az irányított szörnyeknek. Mindkét hatás legfeljebb pár óráig tart, az élőholtak szintjétől és a körülményektől függően.', + 'Ha az összes szem előtt lévő élőholtat sikerült elűzni vagy irányítani és még maradt „a szent energiából”, akkor ismét el kell kezdeni a hatást a leggyengébb ellenségektől. Az így elűzött szörnyek megsemmisülnek, illetve irányítás esetén végleg a gonosz pap szolgálatába állnak.', + 'A két hatás egymás ellen is fölhasználható, például egy jó pap kiolthatja egy gonosz pap irányítását, de akár két gonosz pap is versenyezhet egy csapat sírlidérc „megtérítésén”.', + ] + }, + { + Id: 's_pap_invokacio', + Name: 'Invokáció', + Description: + 'A pap kérheti istene segítségét (általában nevének kimondásával), ami +1-et, ritkábban +2-t\n' + + 'ad hozzá dobásaihoz. A papok hetente annyiszor használhatják az invokációt, amekkora a \n' + + 'Bölcsességbónuszuk (de legalább egyszer).' + } + ] + case Osztaly.Tolvaj: return [ + { + Id: 's_tolvaj_orvtamadas', + Name: 'Orvtámadás', + Description: + 'az orvtámadás akkor használható, ha a tolvaj meglepi áldozatát, tehát pl. csöndesen a\n' + + 'hátába kerül, vagy beszélgetés közben tőrt ránt és egyetlen mozdulattal gyomron szúrja.\n' + + 'Az orvtámadás minden páratlan szintért 1d6 bónusz sebzést okoz (maximuma +5d6).\n' + + 'Dobó- és lőfegyverrel is használható, és ha a tolvaj úgy dönt, illetve a használt fegyver\n' + + 'lehetővé teszi, az ellenfél elkábítására is alkalmazható.' + }, + { + Id: 's_tolvaj_kezdemenyezes', + Name: 'Jobb kezdeményezés', + Description: 'a tolvajok +4-et kapnak kezdeményezési dobásaikra.', + }, + { + Id: 's_tolvaj_kepzettsegek', + Name: 'Tolvajképzettségek', + Description: + 'Minden tolvaj jártas több olyan képzettségben, amely segíti a rejtőzködésben, a jól őrzött\n' + + 'értékek eltulajdonításában és hasonló feladatokban. A tolvajok azokat a tolvajképzettség-\n' + + 'eket is használhatják, amelyekben nem járatosak külön, de ekkor szintjük nem számít bele\n' + + 'a próbadobás módosítójába! A tolvajképzettségek listája:\n' + + 'Álcázás, Csapdák állítása és eltávolítása, Egyensúlyozás, Értékbecslés, Hallgatózás,\n' + + 'Hamisítás, Jelek olvasása, Keresés, Mászás, Megfigyelés, Méregkeverés, Osonás, Rejtőzés,\n' + + 'Szabadulóművészet, Zárnyitás és Zsebmetszés.', + }, + ] + case Osztaly.Varazslo: return [{ + Id: 's_varazslo_varazskonyv', + Name: 'Varázskönyv', + Description: + 'Egy első szintű varázsló varázskönyve 6 nulladik és 3 első szintű varázslatot tartalmaz,\n' + + 'harmadik szintű kezdő karakteré ezen felül még 2 első szintűt és 2 második szintűt.\n' + + 'Az újabb varázslatokat mások könyveiből, mágikus tekercsekből vagy más módszerek\n' + + 'segítségével kell könyvébe másolnia. Az illuzionisták szintén varázskönyveket használnak\n' + + 'de eltérő mágiaformájuk miatt nem képesek a varázslói varázslatok megértésére – és viszont.' + }] + case Osztaly.Illuzionista: return [{ + Id: 's_illuzionista_varazskonyv', + Name: 'Varázskönyv', + Description: + 'Egy első szintű illuzionista varázskönyve 6 nulladik és 3 első szintű varázslatot tartalmaz,\n' + + 'harmadik szintű kezdő karakteré ezen felül még 2 első szintűt és 2 második szintűt. Az\n' + + 'újabb varázslatokat mások könyveiből, mágikus tekercsekből vagy más módszerek\n' + + 'segítségével kell könyvébe másolnia. Az varázslók szintén varázskönyveket használnak, de\n' + + 'eltérő mágiaformájuk miatt nem képesek a varázslói varázslatok megértésére – és viszont.' + }] + } +} \ No newline at end of file diff --git a/src/pdf/osztaly_specials.pdf.ts b/src/pdf/osztaly_specials.pdf.ts index 09d8007..fddabcc 100644 --- a/src/pdf/osztaly_specials.pdf.ts +++ b/src/pdf/osztaly_specials.pdf.ts @@ -1,12 +1,36 @@ -import {PDFFont, PDFPage, rgb} from "pdf-lib"; +import {PDFFont, PDFPage, rgb, breakTextIntoLines} from "pdf-lib"; import {KarakterPdfView} from "./karakter_pdf_view"; +import {Skill} from "../domain-models/osztaly"; -export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, karakter: KarakterPdfView){ +const maxWidth = 540 + +function drawExtendedSkillDescription(skill: Skill, font: PDFFont, baseFontSize: number, page: PDFPage, rows: number) { + const indent = 20 + for (let j = 0; j < (skill.ExtendedDescription?.length || 0); j++) { + const paragraph = `${j + 1}. ${skill.ExtendedDescription![j]}` + const lines = breakTextIntoLines(paragraph, [' ', '-'], maxWidth - indent, (s) => font.widthOfTextAtSize(s, baseFontSize)) + page.drawText(paragraph, { + x: 30 + indent, + y: 700 - rows, + size: baseFontSize, + font: font, + lineHeight: 16, + color: rgb(0, 0, 0), + maxWidth: maxWidth - indent, + wordBreaks: [' ', '-'] + }) + rows += lines.length * font.heightAtSize(baseFontSize) + } + return rows; +} + +export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, fontBold: PDFFont, karakter: KarakterPdfView): number{ const baseFontSize = 12 const titleFontSize = baseFontSize * 3 const pageCenterX = page.getWidth()/2 const titleWidth = font.widthOfTextAtSize(karakter.Osztaly, titleFontSize) const titleX = pageCenterX - (titleWidth / 2) + page.drawText(karakter.Osztaly, { x: titleX, y: 770, @@ -15,17 +39,16 @@ export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, karakter: color: rgb(0, 0, 0), }) let rows = 0 - // const margin = 30 - // const textWidth = page.getWidth() - 2*margin; for (let i = 0; i < karakter.OsztalySkills.length; i++) { const skill = karakter.OsztalySkills[i]; page.drawText(skill.Name, { x: 30, y: 720 - rows, size: baseFontSize, - font: font, + font: fontBold, color: rgb(0, 0, 0), }) + const lines = breakTextIntoLines(skill.Description, [' ', '-'], maxWidth, (s) => font.widthOfTextAtSize(s, baseFontSize)) page.drawText(skill.Description, { x: 30, y: 700 - rows, @@ -33,10 +56,14 @@ export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, karakter: font: font, lineHeight: 16, color: rgb(0, 0, 0), - // maxWidth: textWidth, - // wordBreaks: [' ', '-'] + maxWidth: maxWidth, + wordBreaks: [' ', '-'] }) // rows += Math.ceil(font.widthOfTextAtSize(skill.Description, baseFontSize)/textWidth)*20 + 30 - rows += skill.Description.split('\n').length*16 + 30 + // rows += skill.Description.split('\n').length*16 + 30 + rows += lines.length * font.heightAtSize(baseFontSize) + rows = drawExtendedSkillDescription(skill, font, baseFontSize, page, rows); + rows += 24 // for title and spacing } + return rows }