STUDY.fegyvergenerator_v2 - kaktusztea/szilankrpg GitHub Wiki

Fegyvergenerátor

Minden fegyvert ezzel generálunk, ebből származnak le az értékeik - mint a páncélgenerátornál, így a harcértékeik konzisztensek lesznek.

AI megjegyzés: ez a dokumentum - kivételesen - tartalmaz kb. 25% AI generált tartalmat. A tartalom a blanaszolást és automata fegyvergenerálást érinti. A Paraméterek és a mechanika meghatározása mind egyénileg, emberek által történt.

Kapcsolódik



Adatréteg, generátor és validáció

A generátor determinisztikus, és minden érték adatból (YAML) származik → a szkriptekben nincs beégetett adat.

Adatfájlok (szilank.code/data/sources/fegyverek/):

  • konstansok.yaml → fegyverhossz, aktorok, súly, idea, alapanyag, fejdarab, sebzésjelleg-TÉ/VÉ, páncélok, balansz-konstansok.
  • sebzesjelleg_pancel_matrix.yaml → a sebzésjelleg×páncél mátrix (a szituációs balansz motorja).
  • extrak.yaml → feltételes extrák katalógusa (lásd lent).
  • fegyverek.yaml → a fegyverek WORK paraméterei (egy fegyver = egy rekord); sémája: fegyverek.schema.yaml.

Extrák (extrak.yaml) → feltételes {feltétel → hatás} bejegyzések, id-vel hivatkozva:

  • Hivatkozás két helyről: a fegyveren (extrak: [id], egyedi) ÉS a fegyverhossz-kategórián (konstansok.yaml, öröklődik minden ilyen hosszú fegyverre → így pl. a Beszorított nincs per-fegyver duplikálva).
  • csoport: felkészítés (kiképzett, opt-in → pl. KF) vagy harci_helyzet (szituációs → pl. Beszorított, Páncéltalan szúrás).
  • A tábla-értékek a felkészítetlen/alap állapotot mutatják; az extrák szituációsan jönnek rá (a futásidejű kiértékelés a reactive engine feladata).

Szkriptek (szilank.code/code/balance/):

  • fegyvergenerator_balansz.py → a modell + balansz self-test (regresszió, sebzés-mátrix, tempó); induláskor validál.
  • fegyvergenerator_fegyverlista.py → a mainstream fegyverlistát emittálja md-be (a wiki fegyverlista oldal ebből generált).
  • fegyvergenerator_json.py → a mainstream fegyverlistát JSON-ba emittálja (data/sources/fegyverek/fegyverek.generated.json); a jövőbeli webapp adatforrás első lépése (lásd lent, "JSON export" alszekció).
  • fegyverek_validator.py → a fegyverek.yaml-t a sémához méri (kötelező/ismeretlen mezők, típusok, enumok, katalógus-hivatkozások), bekötve a balansz.py-ba.
  • extrak_validator.py → a extrak.yaml-t az extrak.schema.yaml egységes effekt-modell vokabulárjához méri, bekötve a balansz.py-ba.

JSON export (fegyvergenerator_json.py)

Futtatás:  python3 code/balance/fegyvergenerator_json.py > data/sources/fegyverek/fegyverek.generated.json
  • Scope: a mainstream fegyverek (fegyverek.yaml → a kategória mezővel bíró rekordok) → ugyanaz a szűrés, mint a fegyvergenerator_fegyverlista.py-ban.
  • Struktúra: egy JSON-elem = egy fegyver, benne egy módok: [] tömb (fegyvermódonként → Aktoronként egy elem) — a generátor natural (nested) modellje, nem a régi data/tables/fegyverek.json lapított formátuma (MK_pár/Alapnév név-konkatenálás).
  • Mezők (fegyver szintjén): név, kategória, megjegyzés, fegyverhossz, akadály, övön_hordható, ár (jelenleg placeholder null → kalkulált érték lesz később, lásd az "Ár" szekció szorzó-koncepcióját), extrák ([{id, név}] → saját + öröklött, ugyanaz a leszármaztatás mint a markdown "Extrák" oszlopa), módok.
  • Mezők (mód szintjén): aktor, jelleg (sebzésjelleg), sebzéstípus (elsődleges/másodlagos), TÉ, VÉ, SP, Átütés, Sebesség, Forgatás (a másfélkezes fegyvereknél két mód-készlet: "másfélkezes" és "másfélkezes · 1 kéz"), Erőlimit, FP (bool → puha ütőfelület, ÉP helyett FP-sebzés).
  • Erő=0 bázisérték (mint a markdown fegyverlista) → a játékban az Erőbónusz hozzáadódik az SP-hez.
  • Validálva: a szkript a JSON-írás előtt lefuttatja extrak_validator + fegyverek_validator-t (a print-jeik stderr-re mennek, hogy a stdout tiszta JSON maradjon).
  • Ellenőrzés: cherry-pick összevetés a generált markdown fegyverlistával (Kő, Alabárd, Kard·Slan, Ostorkard, Puszta kéz, Mara-sequor, Szigony·egykezes) → minden TÉ/VÉ/SP/Átütés/Sebesség/Forgatás/Erőlimit/extra érték pontosan egyezik; a markdown "Extrák" cellája helyesen szétválik a JSON extrák tömbjére (csak extrak.yaml-id-k) és a övön_hordható/akadály top-level mezőkre (nem extrak.yaml-hatások, logisztikai adat).
  • FIGYELEM: ez a fájl a fegyver-JSON forma véglegesítésének első lépése — a generate_tables.py build pipeline és a webapp jelenleg a régi data/tables/fegyverek.json-t használja. A pipeline-bekötés és a webapp fegyver-calc.ts/types.ts/ketkezes.ts átírása a nested (egy fegyver → több mód) modellre külön, későbbi lépés.

Fixed (kézzel írt) JSON réteg (fegyverek_fixed.json)

  • Cél: azok a fegyverek, amik nem illenek a generátor WORK-paraméter modelljébe (pl. a hossz-hoz kötött forgatás-derivációba, vagy kör-függő/nem-statikus SP-be), de mégis szeretnénk őket ugyanabban a végső JSON formában kezelni, mint a generált fegyvereket, mert a webapp egyszer majd egységesen fésüli össze a két forrást.
  • "Generálás": ezt a fájlt mi írjuk kézzel, a fegyvergenerator_json.py kimeneti struktúráját másolva (fegyver mezők + módok: [] tömb). Nincs Python szkript, ami előállítja, de a formátum szigorúan ugyanaz, mint a fegyverek.generated.json-é.
  • aktor: "kivétel" → dedikált jelzőérték, ami explicit kommunikálja: a mód mögött nincs valódi konstansok.yaml aktor-tábla, a TÉ/VÉ/SP/stb. értékek kézzel lettek megállapítva.
  • fegyverhossz: -1 → a régi 068_02 tábla "-1 = speciális" jelölése, nem valódi WORK-hossz (a fegyverek_fixed.json-ban szabadon írható, nem kell a generátor FEGYVERHOSSZ enumjához igazodnia).
  • SP/Sebesség: ahol a valós érték kör-függő vagy N/A, a mező kap egy legjobb egyszeri közelítést (pl. Garott SP:8 = az 1. kör értéke) VAGY null-t, a pontos szabály a megjegyzés mezőbe kerül.

Bejegyzések:

1. Garott (fojtóhurok) → TÉ:0, VÉ:0, SP:8 (1. kör, a megjegyzés tartalmazza a +4/kör folytatást), Forgatás:kétkezes, Erőlimit:5, aktor:"kivétel". A megjegyzés a teljes narratív szabályt tartalmazza: Orvtámadás → Belharci helyzet trigger, Leforgatás/Irányítás manőverrel terelhető, Belharcból kibontakozás (Nehézség:9) a szabadulás, a használó is Helyhez kötve.

2. Hárító: Csatakesztyű (kardvívó) → TÉ:0, VÉ:2, SP:0, Forgatás:egykezes, Erőlimit:99, aktor:"kivétel". Az első tisztán hárító fegyver a rétegben (nincs támadó mód) → a módok: egyetlen eleme csak a passzív VÉ-bónuszt jelzi, a megjegyzés rögzíti, hogy nem támadható vele, csak a gyengébb kézben forgatható a Hárítófegyver használat fortéllyal, és két hárítófegyver együtt sem összeadódó bónuszt.

3–5. Hárító: Alkarvédő / Hárító: Tonfa (közelharci) és Hárító: Köpeny (kardvívó) → a Csatakesztyűtől eltérően negatív SP-vel (Alkarvédő VÉ:2, SP:-10, Tonfa VÉ:2, SP:-3, Köpeny VÉ:3, SP:-20) → a régi 068_02/068_03 tábla szerint ez a nem-rendeltetésszerű (támadásra próbált) használat büntetése, a megjegyzés mezőben jelezve. Az Alkarvédő/Tonfa "csak ≤1 pengés fegyver ellen", a Köpeny "csak ≤1 penge hosszú fegyver ellen" feltétele is csak a megjegyzés-ben él (leíró, nem kiértékelt).

6–7. Kopja, harci / Kopja, torna (lándzsavívó) → TÉ:13, VÉ:13 (a hossz:12 + lándzsahegy-rövid-keskeny aktor generátor-kombináció ezt pontosan reprodukálná, de az SP/Átütés nem esik ki egyezően, ezért fixed), Erőlimit:0 ("a ló lendülete már beszámításra került a Sebzésbe, a személyes Erőbónusz nem számít" → a régi 068_04 indoklása). Harci kopja SP:10, Átütés:5, torna kopja SP:-3, Átütés:0 (puhafa). A Lovas roham taktika +10 SP bónusza mindkettőnél csak a megjegyzés-ben él → külön rendszerből (taktikák) jövő, szituációs bónusz, amit a generátor/fixed réteg egyaránt nem tud reprezentálni.

Hatókör: később más, hasonlóan generátor-modellbe nem illő fegyver is bekerülhet ide, eseti mérlegeléssel.



⚙️ Mechanika (fegyveralkotás)

Alapfegyver: bot
 → Zúzó fegyver
 → TÉ=VÉ
 → ebből indulunk ki, erre
   tesszük rá az X darab paramétert
   minden fegyvernél

A fegyverparamétereknek lehetőleg legyen fonákja is!

Aktor fogalma

Aktor = sebzési "felület" (pengehegy, vágóél, buzogányfej, stb.), amivel egy fegyver rendelkezik. Fejdarab = a fegyver fizikai darabszáma a fején. A kettő önálló bemenő paraméter:

  • egy fizikai fejdarabon lehet több Aktor (funkció)
  • a fejdarab a kontroll (TÉ) és a Sebesség büntetését adja
  • a pengés a "van éle" harcérték-bónuszt adja (TÉ/VÉ/SP:+1)
Hosszúkard:
 • 2 Aktor: pengehegy + vágóél
 • fejdarab: 1 → a penge egyetlen fizikai darab (mint a buzogánynál a buzogányfej)

Alabárd:
 • 3 Aktor: vágóél + lándzsahegy (1. darab, a pengevas) + buzogányfej (2. darab)
 • fejdarab: 2 → a fizikai darabszámot tükrözi

Elsődleges vs. másodlagos aktor

Egy fegyver Aktor-listája rangsorolt → ez képződik le az éles Sebzéstípus mechanikára (064_02_05_fegyver_sebzes_jellege_tipusa):

  • Elsődleges aktor = a lista első eleme → a fegyver alap sebzésmódja, büntetés nélkül.
  • Másodlagos aktor(ok) = a lista többi eleme (lehet több is) → bejelenthető, ekkor a Sebzésdobás Hátrány-1 módosítót kap.
  • Alkalmatlan = amire a fegyvernek nincs aktora → nem generált mód; ha a KM engedi, Hátrány-2 a Sebzésdobásra.

A rang a Sebzésdobás szituációs Hátránya (a másodlagos mód bázisértékei ugyanúgy számítódnak, mint az elsődlegesé). A generátor minden Aktor-módhoz kiírja a Sebzéstípus-t (elsődleges / másodlagos), a Sebzésjelleg oszlop pedig a sebzés jellegét (szúró / vágó / zúzó) adja.

🔤 Terminológia-váltás (v2 fegyverrendszer)

A Fegyvergenerátor bevezetésével 4 régi, "penge"-alapú fogalom névváltáson megy át — a jelentésük megmarad (a régi md-definíciók, md/065_03_04_fegyver_harci_helyzetek.md, továbbra is érvényesek a mögöttes VÉ csökkentés szabályra), csak a "penge" szó helyett "fegyver" lesz, mert nem minden fegyver rendelkezik pengével (buzogány, bot, ostor).

Régi név Új név Jelentés (változatlan)
Pengehossz Fegyverhossz A fegyverméret-kategória (0-12), amiből a Forgatás/Beszorítható/stb. paraméterek levezethetők
Pengeelőny Fegyverelőny Fegyvered mérete legalább 1 fegyverméret-kategóriával hosszabb ellenfeledénél → VÉ csökkentés: 2+k20P
Pengehátrány Fegyverhátrány Fegyvered mérete legalább 1 fegyverméret-kategóriával rövidebb ellenfeledénél → VÉ csökkentés: k20P
Alappenge Fegyverazonosság Fegyvered azonos hosszú, vagy nem hosszabb legalább 1 kategóriával ellenfeledénél → VÉ csökkentés: 1+k20P

Az éles szabálykönyv (md/) még a régi neveket használja — az átnevezés a v2 fegyverrendszer bevezetésével (webapp + harcszimulátor) válik éles váltássá, ekkor a md/065_03_04_fegyver_harci_helyzetek.md és a rá hivatkozó fejezetek is frissülnek.

Státusz: a terminológia-váltás a code/balance/ alatt (fegyvergenerator_harcszimulator.py, fegyvergenerator_taktikai_ai.py, sfe_hangolas.py), a webappban, a data/sources/*.yaml-ban ÉS az éles md/-ben TELJES KÖRŰEN KÉSZ - a fegyverviszony() függvény és a lookup-táblák fegyverelőny/fegyverhátrány/fegyverazonosság stringeket használnak, a data/sources penge-mentes (harci_helyzet id-k fegyverelőny/fegyverhátrány, konstans-kulcsok fegyverhossz/kétkezes_harc_max_fegyverméret/..._fegyverlevonás_osztó), a webapp aktív_fegyver_fegyverhossz context kulcsot és min_fegyverméret követelményt használ. Az éles md/ teljesen penge-mentes: manőverek, kétkezes, belharc, lovas/léglovas, harci alakzat, Nagy pajzs, harci akrobatika, 068_02-068_06 fegyvertáblák és 068_09 pajzstábla mind frissítve (sync_fegyvertablazatok.py).



🗡️ Fegyver Harcértékek (végső)

Ezek az egyes fegyverek végleges értékei, amiket a játékban használunk majd. Mindegyik a lejjebb található Fegyverparaméterekből származik le. A korábbi "Pengehossz" kifejezés helyett "Fegyverhossz" lesz és a jelentése is kicsit eltér (lásd fentebb, Terminológia-váltás).

Mindegyik Aktorral fel kell venni a fegyvertáblázatban az adott fegyvert (eltérnek az értékek). Ez csak látszólag bonyolít, mert csomó egyéb paraméter, ami eddig volt (pl. "íves", "MK", "KF") eltűnik az oszlopokból.

1. Fegyvermódok ("list of sets")
  Aktor (vágóél-egyenes-átlagos; pengehegy...)
  Sebzésjelleg (jelleg)
  Sebzéstípus (elsődleges/másodlagos)
  TÉ
  VÉ
  SP
  Átütés
  Sebesség
  Forgatás (egykezes, másfélkezes, kétkezes; másfélkezesnél külön "másfélkezes · 1 kéz" mód-készlet)
  Erőlimit (max Erő-bónusz beszámítása SP-be; 0 = nem számít, pl. lovas lándzsáknál)
  FP (bool → puha ütőfelület, ÉP helyett FP-sebzés, pl. Puszta kéz)

  Példa:
   • 1.Hosszúkard (vágóél-egyenes-átlagos)  → elsődleges támadási forma
      TÉ: 6, VÉ:6, SP:+5, Sebzésjelleg: vágó-egyenes, Átütés:0, Sebesség:7, Forgatás: egykezes, Erőlimit:99, FP:false
   • 2.Hosszúkard (pengehegy-kard)          → másodlagos támadási forma
      TÉ: 4, VÉ:4, SP:+6, Sebzésjelleg: szúró, Átütés:1, Sebesség:7, Forgatás: egykezes, Erőlimit:99, FP:false

2. Fegyverhossz (n)

3. Akadály (hosszútávú viselet/hurcolás; NINCS harci hatás, csak logisztikai; fegyver bemenő
   paraméter, enum: 0/1/2, default: 0 → opcionális, csak akkor írjuk ki, ha akadályoz)
   0: nem akadályoz (alap eset, a legtöbb fegyver)
   1: lándzsa-kétfejű jellegű (pl. Lándzsák, Naginata, Szigony kétkezes)
   2: ostromfegyver-jellegű (pl. Alabárd, Pika-k) / teljes vért / nagy pajzs → csak szekéren szállítható
   2 felett: a karakter nem képes tartósan haladni, legfeljebb pár 10-100 métert (md/069_03)
   Megvalósítva: fegyverek.schema.yaml → akadály (EGYEDI per-fegyver érték, nem levezetett)
   Éles fejezet (2026-09-27-i bővítés, l. commit 661539fe): md/069_03_pancel_MGT.md
   → "Páncél MGT, Akadály" — a fogalom páncélra/pajzsra is kiterjed (nem csak fegyverre),
   1 nap tartós viselet után Fizikai(1)/Fizikai(2) státuszt és 1/2-1/4 napi haladást okoz.



Sebzésjellegek (4)

  • A Szúró típusnál nem számít az erőkar (nem csapást végzünk) → Szúró sebzésnél a "Súly" paraméter SP deltája kimarad‼️
  • Így egy kisebb, "egykezes", DE NEHÉZ csatabárdnak lehet nagy sebzése.
  • Megvalósítva: konstansok.yaml → sebzésjelleg_alapérték (jelleg → TÉ/VÉ + súly_számít). Jelenleg minden jelleg TÉ/VÉ:0 — a vágó-egyenes TÉ/VÉ bónusza méret-függően az aktor: paraméterben él (lásd lent, Aktor tervezési elvek 3. pont).

Sebzésjelleg × páncél mátrix (a szituációs balansz LELKE)

A sebzésjelleg a páncél fajtájától függően kap bónuszt VAGY büntetést (flat SP delta, az SFÉ-levonás mellett). Így minden fegyver szituáció-függően jó → nincs "mindent vivő". Páncélosztályok: csupasz | puha (posztó/kabát) | bőr | fém-hajlékony (lánc/sodrony) | fém-merev (pikkely/lemez).

Sebzésjelleg csupasz puha bőr lánc pikkely/lemez Jellem
Zúzó 0 0 +1 +3 +3 Páncéltörő; húson gyenge
Szúró +2 +3 +1 0 -3 Réseket talál; merev vérten lecsúszik
Vágó-egyenes +1 +1 0 -2 -4 Húson jó, fémen rossz; cserébe TÉ/VÉ
Vágó-íves +3 +2 0 -2 -4 Húson a legjobb, fémen a legrosszabb

Következmény: a zúzó a páncélos ellenfél válasza (egy olcsó buzogány veri a legendás kardot lemez ellen), a vágó-íves a páncéltalan mészárlás királya, a szúró a rugalmas középút (lánc ellen is használható). Merev vért ellen az Átütés (Aktor/anyag) segít: csökkenti az effektív SFÉ-t.

Tudatos eltérés az éles rendszertől + kognitív teher. Az éles rendszer (069_02_SFE, ADR.pancel.struktura.kutatas) szándékosan egyetlen Fizikai SFÉ-re egyszerűsödött, és a sebzésjelleg-hatás ott csak bónusz (büntetés nélkül) → a cél a gyorsaság volt az asztalnál. Ez a mátrix visszahoz büntetéseket, de a teher minimális marad, mert:

  • A módosító a támadó SP-oldalán van, nem a védő SFÉ-jén → a védő továbbra is egyetlen fix SFÉ-t von le, a k10 pillanatában, a típus bejelentésére várás nélkül (az éles egyszerűsítés fő haszna megmarad).
  • Per támadás ~0 plusz interakció: a támadó a bónusz-only modellben is hozzáadott egy számot; itt egy előjeleset ad hozzá. A hurok nem lassul.
  • Setup egyszeri: harconként/páncélosztályonként 1 lookup fegyvermódonként (a KM úgyis bemondja a vért fajtáját). Papíron ez a fegyver saját 5-értékű sora a karakterlapon (nem a teljes tábla); appban 0 lookup (a fegyverkártya kiírja páncélosztályonként az effektív SP-t).
  • A többlet nagyrészt döntési mélység ("melyik fegyver/mód e vért ellen?") → ez a cél, nem súrlódás.

Közös SP-képlet minden típusnál:

SP = Fegyverhossz SP + Aktor SP + Alapanyag SP + Idea SP + Erőbónusz
     (+ Súly SP delta → DE szúrásnál NEM!)
     (+ pengés +1, láncos +1, ha van)
     + Sebzésjelleg × páncél módosító (fenti mátrix)

💥Szúró

  • Nem csapás → a Súly SP delta NEM számít.
  • átütés > 0 lehetséges; pontos lehetséges.
  • Nincs flat TÉ bónusz: a pontosságot a pontos paraméter (+2 Pontra támadás) és az Aktor Átütése fejezi ki (a flat TÉ átfedne és felülerősítené → balansz teszt).
  • Páncél: réseket talál (+2/+3 csupasz-puha), de merev vérten lecsúszik (-3) → Átütés kell.

💥Vágó-egyenes (él)

  • TÉ/VÉ:+2 alkotáskor → az Aktor mérete szerint elosztva (egyenes-rövid +1; egyenes-átlagos/nagy +2). Az egyenes él jobb hárításra/pontos csapásra.
  • Páncél: húson jó (+1), fémen rossz (-2/-4).

💥Vágó-íves (él)

  • Nincs TÉ/VÉ bónusz, cserébe magasabb SP a húson + nagyobb méregadagot tárolhat.
  • Páncél: húson a legjobb (+3 csupasz), de fémen a legrosszabb (-4).

💥Zúzó

  • A páncéltörő típus: fém vért ellen +3 (lánc és merev egyaránt), de csupasz húson gyenge (0) → a tompa trauma kevésbé véres, mint egy vágás.



Aktorok → SP értékek (mérvadó)

💥 Zúzó Aktorok

Aktor SP delta Átütés TÉ delta VÉ delta Sebesség delta Indoklás
botvég +0 0 0 0 0 Alap referencia. Tompa, kerek vég, minimális sebzőhatás. A bot sebzése a fegyverhosszból és súlyból jön.
buzogányfej-tompa +2 0 0 -2 0 Koncentrált tömeg, nagyobb roncsolás. A VÉ:-2 a fejnehézség miatti nehezebb hárítást modellezi.
buzogányfej-szöges +1 2 0 -3 0 Sebzésjelleg: Zúzó. A szögek nem szúrnak, hanem betörik/benyomják a páncélt. Kisebb felületi roncsolás, de az Átütés kompenzál páncélosok ellen.

💥 Szúró Aktorok (pengehegyek)

Aktor SP delta Átütés TÉ delta VÉ delta Sebesség delta Indoklás
pengehegy-apró +0 0 0 0 0 Kés méretű hegy. Minimális szúró felület, de a szúró típus a réseknél jó (+2/+3 könnyű vért ellen, lásd mátrix).
pengehegy-tőr +1 0 0 0 0 Tőr méretű hegy. Hosszabb, célzottabb, mélyebbre hatol.
pengehegy-kard +2 1 0 0 0 Hosszúkard-méretű hegy. Jelentős behatolási mélység, enyhe Átütés a koncentrált erő miatt.

Emlékeztető: Szúró sebzésnél a Súly SP delta NEM számít. Ez nem kompenzálódik az Aktor-SP-ben: a pengehegyek SP deltája azonos a vágó-egyenes élekével (+0/+1/+2) és kisebb a vágó-íveseknél; csak a lándzsahegyek magasabbak (+2…+6). A súly kimaradása kétélű: nehéz/súlyos fegyvernél SP-veszteség (-1/-2 a vágómódhoz képest), könnyűnél nyereség (elmarad a -1, pl. Kés szúrómód).

💥 Vágó-egyenes Aktorok (3 méret)

Aktor SP delta Átütés TÉ delta VÉ delta Sebesség delta Indoklás
vágóél-egyenes-rövid +0 0 +1 +1 0 Rövid egyenes él (tőr, rövid kard). Alap vágófelület.
vágóél-egyenes-átlagos +1 0 +2 +2 0 Hosszúkard-méretű egyenes él. Nagyobb vágási felület = több roncsolás.
vágóél-egyenes-nagy +2 0 +2 +2 0 Kétkezes kard méretű él. Még nagyobb roncsolás, de a TÉ/VÉ nem nő tovább (a fegyverhossz paraméter már ad bőven).

Megjegyzés: A vágó-egyenes típus TÉ/VÉ:+2 bónuszt kap alkotáskor. Ezt az Aktor-szintű TÉ/VÉ bónuszként osztottuk el: rövid +1, átlagos +2, nagy +2 (nem nő tovább, a fegyverhossz paraméter már kompenzál).

💥 Vágó-íves Aktorok (3 méret)

Aktor SP delta Átütés TÉ delta VÉ delta Sebesség delta Indoklás
vágóél-íves-rövid +1 0 0 0 0 Rövid íves él (kés, dzsambia, meneth). Az ív növeli a vágás hatékonyságát, de rövid, tehát nincs sebesség-hátrány. Plusz a típus csupasz-bónusza (+3, lásd mátrix).
vágóél-íves-átlagos +2 0 0 0 +1 (lassabb) Szablya/dzsenn szablya méretű íves él. Nagyobb ív = nagyobb roncsolás, de lassabb a visszahúzás.
vágóél-íves-nagy +3 0 0 0 +1 (lassabb) Kétkezes íves él (nagy szablya, Slan csatakard íves módja). Maximális íves roncsolás.

Megjegyzés: Az íves Aktorok SP-ben erősebbek, mint az egyenes társaik, cserébe nincs TÉ/VÉ bónuszuk, az átlagos és nagy méretűeknél Sebesség hátrány (+1) jár, a típus csupasz ellen a legerősebb (+3), fém vért ellen a legrosszabb (-4).

💥 Lándzsahegy Aktorok

Aktor SP delta Átütés TÉ delta VÉ delta Sebesség delta Indoklás
lándzsahegy-rövid-átlagos +3 2 0 0 0 Kiegyensúlyozott.
lándzsahegy-rövid-széles +4 0 0 0 0 Nagy roncsolás, de nem üt át.
lándzsahegy-rövid-keskeny +2 4 0 0 0 Páncéltörő.
lándzsahegy-tőrhossz +4 0 0 0 0 Mint egy tőr a lándzsa végén. Nagyobb sebfelület, de nincs Átütés.
lándzsahegy-rövidkardhossz +5 0 0 0 0 Naginata-szerű. Jelentős szúró/vágó felület a szálon.
lándzsahegy-hosszúkardhossz +6 0 0 0 +1 (lassabb) Alabárd-penge méretű. Hatalmas roncsolás, de a nagy fej lassít.

Összefoglaló tábla (mérvadó)

Aktor Sebzésjelleg SP delta Átütés TÉ delta VÉ delta Sebesség delta Megjegyzés
botvég Zúzó +0 0 0 0 0 Referencia
buzogányfej-tompa Zúzó +2 0 0 -2 0 Fejnehéz → nehezebb hárítás
buzogányfej-szöges Zúzó +1 2 0 -3 0 Páncéltörő zúzás
pengehegy-apró Szúró +0 0 0 0 0 Kés/tőr hegy
pengehegy-tőr Szúró +1 0 0 0 0 Tőr hegy
pengehegy-kard Szúró +2 1 0 0 0 Kard hegy
vágóél-egyenes-rövid Vágó-egyenes +0 0 +1 +1 0 Rövid egyenes él
vágóél-egyenes-átlagos Vágó-egyenes +1 0 +2 +2 0 Kard méretű egyenes él
vágóél-egyenes-nagy Vágó-egyenes +2 0 +2 +2 0 Kétkezes méretű egyenes él
vágóél-íves-rövid Vágó-íves +1 0 0 0 0 Rövid íves él
vágóél-íves-átlagos Vágó-íves +2 0 0 0 +1 Kard méretű íves él (lassabb)
vágóél-íves-nagy Vágó-íves +3 0 0 0 +1 Kétkezes méretű íves él (lassabb)
lándzsahegy-rövid-átlagos Szúró +3 2 0 0 0
lándzsahegy-rövid-széles Szúró +4 0 0 0 0
lándzsahegy-rövid-keskeny Szúró +2 4 0 0 0
lándzsahegy-tőrhossz Szúró +4 0 0 0 0 Tőrméretű lándzsahegy
lándzsahegy-rövidkardhossz Szúró +5 0 0 0 0 Naginata-szerű
lándzsahegy-hosszúkardhossz Szúró +6 0 0 0 +1 Alabárd-penge (lassabb)



Fegyverparaméterek (a generátor bemenetei → mérvadó: fegyverek.schema.yaml)

fegyverhossz kategória
   0:  TÉ/VÉ: 0, SP:+0, Sebesség:5   🔗 forgatás: egykezes,    Felszerelés pont: 0
   1:  TÉ/VÉ: 1, SP:+1, Sebesség:5   🔗 forgatás: egykezes,    Felszerelés pont: 0
   2:  TÉ/VÉ: 2, SP:+2, Sebesség:5   🔗 forgatás: egykezes,    Felszerelés pont: 0
   3:  TÉ/VÉ: 3, SP:+3, Sebesség:6   🔗 forgatás: egykezes,    Felszerelés pont: 0
   5:  TÉ/VÉ: 5, SP:+4, Sebesség:6   🔗 forgatás: másfélkezes, Felszerelés pont: 1
   7:  TÉ/VÉ: 7, SP:+5, Sebesség:7   🔗 forgatás: kétkezes,    Felszerelés pont: 2, Beszorított(2)
   9:  TÉ/VÉ: 9, SP:+5, Sebesség:8   🔗 forgatás: kétkezes,    Felszerelés pont: 2, Beszorított(2)
    → Beszorított(2): ha az ellenfél bejut, TÉ:0 ÉS VÉ:0 → SZITUÁCIÓS harci helyzet (minden pengeméretre azonos, nem a bázisérték)
    → csatafegyver
    → példa: Csatakard (zweihandler)
  12:  TÉ/VÉ:12, SP:+5, Sebesség:9  🔗 forgatás: kétkezes,    Felszerelés pont: 2

  → Felszerelés pont (md/010_03_06, md/068_01_13): KIZÁRÓLAG a forgatás-kategóriától függ
    (egykezes:0 / másfélkezes:1 / kétkezes:2) — a "súly" tengely NEM számít bele. A
    Felszerelés keret (2 + Erő) fölötti túlcsordulás pontonként 1 Felszerelés MGT
    (-1 TÉ, -1 Harckeret). Éles szabályrendszerbe MÉG NINCS bevezetve (csak a v2
    fegyvergenerátorban él, l. konstansok.yaml → fegyverhossz → felszerelés_pont).

aktorok 🔁   (⚠️ mérvadó értékek: lásd "Aktorok → SP értékek" szekció)
  • botvég
    • sebzésjelleg: zúzó
    • SP: +0
  ━━━━━━━━
  • buzogányfej-tompa
    • sebzésjelleg: zúzó
    • SP: +2
    • VÉ: -2
  • buzogányfej-szöges
    • sebzésjelleg: zúzó
    • SP: +1
    • átütés: 2
    • VÉ: -3
  ━━━━━━━━
  • pengehegy-apró
    • sebzésjelleg: szúró
    • SP: +0
  • pengehegy-tőr
    • sebzésjelleg: szúró
    • SP: +1
  • pengehegy-kard
    • sebzésjelleg: szúró
    • SP: +2
    • átütés: 1
  ━━━━━━━━
  • vágóél-egyenes-rövid
    • sebzésjelleg: vágó-egyenes
    • SP: +0
    • TÉ/VÉ: +1
  • vágóél-íves-rövid
    • sebzésjelleg: vágó-íves
    • SP: +1

  • vágóél-egyenes-átlagos
    • sebzésjelleg: vágó-egyenes
    • SP: +1
    • TÉ/VÉ: +2
  • vágóél-íves-átlagos
    • sebzésjelleg: vágó-íves
    • SP: +2
    • +1 sebesség (lassabb a vágóív miatt)

  • vágóél-egyenes-nagy
    • sebzésjelleg: vágó-egyenes
    • SP: +2
    • TÉ/VÉ: +2
  • vágóél-íves-nagy
    • sebzésjelleg: vágó-íves
    • SP: +3
    • +1 sebesség (lassabb a vágóív miatt)
  ━━━━━━━━
  • lándzsahegy-rövid-átlagos
    • sebzésjelleg: szúró
    • SP: +3
    • átütés: 2
  • lándzsahegy-rövid-széles
    • sebzésjelleg: szúró
    • SP: +4
    • átütés: 0
  • lándzsahegy-rövid-keskeny
    • sebzésjelleg: szúró
    • SP: +2
    • átütés: 4
  • lándzsahegy-tőrhossz
    • sebzésjelleg: szúró
    • SP: +4
    • átütés: 0
  • lándzsahegy-rövidkardhossz
    • sebzésjelleg: szúró
    • SP: +5
    • átütés: 0
  • lándzsahegy-hosszúkardhossz
    • sebzésjelleg: szúró
    • SP: +6
    • átütés: 0
    • +1 sebesség (lassabb a nagy fej miatt)


fejdarab   (a fegyver saját, explicit paramétere — minden aktoros fegyvernél ≥1)
  0: alap Sebesség   (botvég/ököl aktor — "rátett fej" nélkül)
  1: +1 Sebesség     (penge, zúzófej, kampó is az!)
  2: +2 Sebesség, TÉ:-2
  3: +3 Sebesség, TÉ:-4

pengés   (kard jellegű; a fegyver másik, önálló bemenő paramétere)
  0
  1
    • TÉ/VÉ:+1
    • SP:+1

láncos
  0
  1
    • +1 Sebesség (lassabb a lendítés miatt)
    • +1 SP       (nagyobb lendület)
    • Extra: ellenfél pajzs VÉ feleződik

súly   (önálló tengely; a fegyverhossz+alapanyag adta "természetes" súlytól max ±1 kategória)
  könnyű   → példa: kés, tőr, apró rögtönzött fegyver
   • -1 SP        (kevesebb lendület)
   • -1 Sebesség  (gyorsabb)
   • 🔗 alapanyag: { csont/szaru/fa és alatta }
  átlagos  → példa: rövid kard – hosszú kard, rapír, szablya
   • +0 SP, +0 Sebesség
  nehéz    → példa: másfél/kétkezes kard, csatabárd 1K, alabárd, buzogány 1K
   • +1 SP VAGY +1 Átütés  (alkotáskor választott → lásd súly_delta_cél lent)
   • +1 Sebesség  (lassabb)
   • Erő-követelmény: 2
  súlyos   → példa: kétkezes buzogány, csatabárd 2K, nagy csatafegyverek
   • +2 SP VAGY +2 Átütés  (alkotáskor választott → lásd súly_delta_cél lent)
   • +2 Sebesség  (lassabb)
   • Erő-követelmény: +3

  Erő-követelmény mechanika: ✅ KÉSZ (éles: `md/064_02_06_erobonusz_erolimit.md` → "Fegyverek Erő
   követelménye"; webapp: `combat-roll-info.ts` `collectDobásInfo`, `fegyverek_v2.json` erő_követelmény mező)
   Ha a viselő Erő-je < a fegyver súly-kategóriájának követelménye: Hátrány-1 Támadó dobásra.
   → Egyszerű, nem skálázott (binary) büntetés - nincs pontonkénti TÉ/Sebesség-levonás, nincs
     Erőbónusz-SP maxolás; a korábbi, itt tervezett skálázott verzió (lásd git history) nem
     ez lett, az éles szabály a mérvadó.

súly_delta_cél   (önálló bemenő paraméter, top-level fegyverparaméter; enum: sp/átütés; default: sp)
   Melyik harcérték-mezőbe menjen a súly (nehéz/súlyos) deltája: SP-be (alap eset) VAGY Átütésbe (pl. Csatabárd → a nyers sebzés helyett a páncélt töri jobban). A konkrét delta-érték magából a súly táblából jön (fent), ez a mező csak a CÉL-mezőt választja. Megvalósítva: konstansok.yaml → súly_delta_cél (metaadat/leírás, a séma enum-ja a forrás).

idea: [-5; +5]   (mágikus minőség = "pénz/ritkaság vesz erőt" tengely; a +4/+5 NARRATÍV-gate-elt)
  -5:  TÉ,CÉ,VÉ:-3, SP:-5; Sebesség:+2, Ár:1/13 x
  -4:  TÉ,CÉ,VÉ:-2, SP:-4; Sebesség:+1, Ár:1/10 x
  -3:  TÉ,CÉ,VÉ:-1; SP:-3; Sebesség:+1, Ár:1/7 x
  -2:  TÉ,CÉ,VÉ:-1; SP:-2; Ár:1/4 x
  -1:  TÉ,CÉ,VÉ:-0; SP:-1; Ár:1/2 x
   0:  Nincs módosító;     Ár:1x
  +1:  TÉ,CÉ,VÉ:+0; SP:+1; Ár:2x
  +2:  TÉ,CÉ,VÉ:+1; SP:+2; Ár:4x
  +3:  TÉ,CÉ,VÉ:+1; SP:+3; Sebesség:-1, Ár:7x
  +4:  TÉ,CÉ,VÉ:+2, SP:+4; Sebesség:-1, -1 Súly delta, Ár:10x
  +5:  TÉ,CÉ,VÉ:+3, SP:+5; Sebesség:-2, -2 Súly delta, Ár:13x

alapanyag   (a köznapi fémek fölött a legendás anyagok ritkaság/ár-gate-eltek → lásd fonák)
 • csont/szaru      → -4 SP delta (természetes, törékeny anyagok)
 • fa               → 0 SP delta (semleges; a gyengeség a botvég aktorban, törhetőség a fanyelű nyélben) 🔗botvég
 • kő               → -3 SP delta 🔗fegyverhossz:0
 • bronz            → -2 SP delta
 • acél / vas       → Alap SP (0)
 • abbitacél        → TÉ/VÉ/CÉ:+1; +1 SP delta — Ár: ~4x
 • feketeacél       → TÉ/VÉ/CÉ:+1; +1 SP delta; Chi-harcban törhetetlen (pl. Mara-Sequor)
 • mithrill         → TÉ/VÉ/CÉ:+1; +2 SP delta; 🔗súly:-1 — Ár: ~10x. Identitás: könnyű ÉS éles. Fonák: a súly:-1 miatt vágásnál kevesebb súly-SP.
 • lunír            → TÉ/VÉ/CÉ:+1; +0 SP delta; 🔗súly:-2 — Ár: ~8x. Identitás: "holdfém", a leggyorsabb (súly:-2 → jóval gyorsabb Sebesség). Fonák: nem tart nagy sebzést (SP:0), zúzó/nehéz szerepre alkalmatlan.
 • álomfém          → TÉ/VÉ/CÉ:+1; +1 SP delta; Átütés:+2 — Ár: ~7–10x. Identitás: részben áthalad a páncélon (Átütés). Fonák: Mana-holt / mágiamentes zónában elveszti minden bónuszát és az Átütését (sima acélként viselkedik).
 • 1-2. kori ősfém  → TÉ/VÉ/CÉ:+2; +2 SP delta — Ár: narratív (csak lelet). Identitás: szellem-, árny- és élőholt lényeket is sebzi (megkerüli a nem-fizikai ellenállást → lásd "Élőholtak sebződése" hivatkozás a lap tetején). Fonák: nem megmunkálható újra (fix forma, nem Ideázható felül), rendkívül ritka.
 • Élő ereklye      → egyedi harcérték bónuszok; törhetetlen — Ár: egyedi/narratív. Identitás: él; Fegyvertörés-immunis. Fonák: egy viselőhöz kötődik (ráhangolódás).

hajlékony   (ostor/korbács jellegű → a TELJES fegyver hajlik; vö. láncos = csuklós fej)
  0: Nem
  1: Igen
    • VÉ: -2        (rossz vele hárítani)   ← BÁZIS
    • +1 Sebesség   (nehéz kontrollálni)    ← BÁZIS
    • megkerüli a pajzsot   → **extra** (örökölt): `pajzs_megkerules` (a pajzs-VÉ NEM számít ellene)
    • Fegyvertörés-immunis  → **extra** (örökölt): `fegyvertores_immunis` (nem merev)
    • alacsony SP-plafon (nincs nagy erőkar) → jelenleg leíró, nem modellezett

szálfegyver nyélanyag   (a súly/SP hatás a modellben; lásd konstansok.yaml → szálfegyver_nyélanyag)
  • sima (alap)
  • fanyelű: súly/SP hatás nincs; a fa nyél könnyebben törik → Fegyvertörés-ellenpróba `-2` → **extra** (örökölt): `fanyel_fegyvertores_konnyebb`
  • vasaltszárú: súly:+1 kategória
  • tömörszárú
    • SP:+1
    • súly:+2 kategória

erőbónusz_limit   (az SP-re alkalmazható Erőbónusz felső plafonja; EGYEDI per-fegyver érték → nem levezetett)
  • 99 = nincs plafon (default; a legtöbb fegyver)
  • 0–5 = a fegyver plafonozza (pl. tőrök, könnyű/finesse pengék, egykezes buzogány/csatabárd)
  • az Erő=0 bázist NEM érinti → 1:1 áthalad a generált rekordba; a fegyverlistában külön "Erőlimit" oszlop

Nem önálló generátor-paraméter (levezetett / extra / logisztika)

A fenti listából az alábbiak nem a generátor bemenetei (a generátor csak a harcértékeket számolja) → máshol kezeljük őket.

forgatás   (származtatott fegyverhossz-ból: egykezes/másfélkezes/kétkezes)
  másfélkezes · 1 kéz   (mindig emittált — a régi "MK")
    TÉ:-2, VÉ:-2, Átütés→0, erőbónusz_limit→2, SP változatlan
  kétkezes · 1 kéz      (szituáció: kiesett kéz / pajzs, nem fegyver-input)
    TÉ:-4, VÉ:-4, Átütés→0, erőbónusz_limit→0
  Megvalósítva: konstansok.yaml → egykezes_forgatás (mindig_emittált: true/false)
  A régi MK/MK_pár + (1K)/(2K) duplikátumok megszűntek: egy rekord adja mindkét fogást.
puha   (per-aktor flag: konstansok.yaml aktor puha:true, NEM az egész fegyver anyaga)
  FP-sebzés ÉP helyett (minden 5. pont ÉP, a többi FP) → futásidejű (webapp), az SP mennyiség változatlan
  SFÉ az FP-t is csökkenti (sebzésjelleg×páncél mátrix + SFÉ hat az FP-mennyiségre is)
  az alapanyag (minőség: SP/TÉ/VÉ) külön tengely, nem érinti a puha flaget

  Puszta kéz          ököl aktor          TÉ:-3, VÉ:-3, SP:-5   (fegyvertelen alap-büntetés, 068_02)
  Puszta kéz, belharc ököl-belharc aktor  TÉ:0,  VÉ:0,  SP:0    (Belharci helyzetben nullázódik, 065_01_02)
    → külön statikus rekord, ugyanaz a minta, mint a másfélkezes "· 1 kéz" variáns

  Jövőbeli terv (később megvalósítandó, nyitott kérdés):
    Harcművész fortély/tradíció (Slan?) → TÉ:+3,VÉ:+3,SP:+5 delta + puha/FP felülírás ÉP-sebzésre
    A delta extraként megvalósítható; a puha-felülírás runtime/webapp döntés (a séma jelenleg
    nem támogatja aktor-tulajdonság futásidejű felülírását) → lásd "Nyitott kérdések → Még nyitott".

övön hordható   (logisztika/Felszerelés — előrántás, cipelés; NEM harcérték)
  Megvalósítva: konstansok.yaml → fegyverhossz[n].övön_hordható (kat. 0/1/2: true; hosszabbaknál hiányzik/false)
  A kód puszta lookup.


Tranzitív fegyverparaméter hatások

 fegyverhossz ──→ forgatás          (kat. 0-3: egykezes, 5: másfélkezes, 7+: kétkezes)
               ──→ Beszorított(2) ──→ TÉ:0/VÉ:0 ha bejut  (kat. 7 és 9; kat. 12 NEM)
               ──→ övön hordható    (kat. 0/1/2: hordható; 3+: NEM)
               Megvalósítva: konstansok.yaml → fegyverhossz[n].forgatás / .extrak / .övön_hordható

  idea ──────────→ súly              (+4: -1 súly delta; +5: -2 súly delta)
               Megvalósítva: konstansok.yaml → idea[n].súly

  alapanyag ─────→ súly              (mithrill → súly:-1; lunír → súly:-2)
               Megvalósítva: konstansok.yaml → alapanyag[x].súly

  szálfegyver nyélanyag
    vasaltszárú ─→ súly              (+1 kategória)
    tömörszárú ──→ súly              (+2 kategória)
               Megvalósítva: konstansok.yaml → szálfegyver_nyélanyag[x].súly

  pontos ────────→ aktorok           (csak "pengehegy" lehet)
         ────────→ forgatás          (csak "egykezes" lehet)
               Megvalósítva: extrak.yaml → extrak[pontos].feltétel (aktor: pengehegy, forgatás: egykezes). A feltétel runtime kiértékelendő (nincs build-idejű validátor-kikényszerítés); jelenleg csak a Tőrkard rekord használja (extrak: [pontos]).


Példafegyverek Fegyverhossz paraméterre

Ez illusztratív kategória-besorolás → az alábbi példák mind kiszámíthatók a generátorból.

0.kategória: TÉ/VÉ=0, SP:+0
- Kemény,tompa tárgy (Kő)
- Kés

1.kategória: TÉ/VÉ=1, SP:+1
- Tőr
- Furkósbot

2.kategória: TÉ/VÉ=2, SP:+2
- Romboló fegyverek
- Rövid kard
- Buzogány
- Csatabárd
- Csatacsákány

3.kategória: TÉ/VÉ=3, SP:+3
- Hosszú kard (1m)
- Rapir
- Fokos
- Bot, közepes

5.kategória: TÉ/VÉ=5, SP:+4
- Másfélkezes kard

7.kategória: TÉ/VÉ=7, SP:+5
- Kétkezes kard

9.kategória: TÉ/VÉ=9, SP:+5
- Lándzsa (kétkezes)
- Alabárd (kétkezes)

12.kategória: TÉ/VÉ=12, SP:+5
- Lándzsa-hosszú / Pika (kétkezes)
- Hosszú bot
X. Speciális kategória

# Fegyverek
- Puszta kéz: TÉ/VÉ:-3, SP:-5 (implementálva: `fegyverek.yaml` → `ököl` aktor, `hossz:0`; ÉP helyett FP-sebzés, lásd `puha`); Belharcban nullázódik (`ököl-belharc` aktor, külön rekord: `Puszta kéz, belharcban`)
- Kopja
- Ostromfegyverek (pika, stb)



Ár

A Lándzsa a default fegyver (1x ár). A kard ehhez képes drága.




🗡️ Konkrét fegyverek (kidolgozott példák)

Minta/példa gyanánt kiemelt, hétköznapi fegyverek, amelyeken a generátor WORK→GAME leszármaztatása lépésről lépésre bemutatható. A helyük a többi fegyver között van (a generált fegyverlistában is ott szerepelnek, saját kategóriájukban) — itt csak illusztrációként vannak kiemelve.

A WORK: blokk a fegyver paraméterei (generátor input), a GAME: blokk a leszármaztatott játékbeli harcértékek (fegyvermódonként).

Kő

WORK:

fegyverhossz: 0 | fejdarab: 1 | súly: könnyű | alapanyag: kő
aktorok: buzogányfej-tompa

GAME:

Kő (buzogányfej-tompa, zúzó)
  TÉ:0, VÉ:-2, SP:-2, Átütés:0, Sebesség:5
  Forgatás: egykezes, Fegyverhossz: 0

Kés

WORK:

fegyverhossz: 0 | fejdarab: 1 | pengés: 1 | súly: könnyű | erőbónusz_limit: 2
aktorok: vágóél-íves-rövid, pengehegy-apró

GAME:

Kés (vágóél-íves-rövid, vágó-íves) → elsődleges
  TÉ:1, VÉ:1, SP:+1, Átütés:0, Sebesség:5
Kés (pengehegy-apró, szúró) → másodlagos
  TÉ:1, VÉ:1, SP:+1, Átütés:0, Sebesség:5
  Forgatás: egykezes, Fegyverhossz: 0

Tőr

WORK:

fegyverhossz: 1 | fejdarab: 1 | pengés: 1
aktorok: vágóél-egyenes-rövid, pengehegy-tőr

GAME:

Tőr (vágóél-egyenes-rövid, vágó-egyenes) → elsődleges
  TÉ:3, VÉ:3, SP:+2, Átütés:0, Sebesség:6
Tőr (pengehegy-tőr, szúró) → másodlagos
  TÉ:2, VÉ:2, SP:+3, Átütés:0, Sebesség:6
  Forgatás: egykezes, Fegyverhossz: 1

Kard, rövid

WORK:

fegyverhossz: 2 | fejdarab: 1 | pengés: 1 | erőbónusz_limit: 2
aktorok: vágóél-egyenes-rövid, pengehegy-tőr

GAME:

Kard, rövid (vágóél-egyenes-rövid, vágó-egyenes) → elsődleges
  TÉ:4, VÉ:4, SP:+3, Átütés:0, Sebesség:6
Kard, rövid (pengehegy-tőr, szúró) → másodlagos
  TÉ:3, VÉ:3, SP:+4, Átütés:0, Sebesség:6
  Forgatás: egykezes, Fegyverhossz: 2

Bot, furkós

WORK:

fegyverhossz: 3 | alapanyag: fa | szálfegyver_nyélanyag: fanyelű | erőbónusz_limit: 2
aktorok: botvég

GAME:

Bot, furkós (botvég, zúzó)
  TÉ:3, VÉ:3, SP:+3, Átütés:0, Erőlimit:2, Sebesség:6
  Forgatás: egykezes, Fegyverhossz: 3
  Extrák: Fanyél fegyvertörése könnyebb

Hosszú kard

WORK:

fegyverhossz: 3 | fejdarab: 1 | pengés: 1
aktorok: vágóél-egyenes-átlagos, pengehegy-kard

GAME:

Hosszú kard (vágóél-egyenes-átlagos, vágó-egyenes) → elsődleges
  TÉ:6, VÉ:6, SP:+5, Átütés:0, Sebesség:7
Hosszú kard (pengehegy-kard, szúró) → másodlagos
  TÉ:4, VÉ:4, SP:+6, Átütés:1, Sebesség:7
  Forgatás: egykezes, Fegyverhossz: 3

Kard, másfélkezes

WORK:

fegyverhossz: 5 | fejdarab: 1 | pengés: 1
aktorok: vágóél-egyenes-átlagos, pengehegy-kard

GAME:

2 kéz:
  Kard, másfélkezes (vágóél-egyenes-átlagos, vágó-egyenes) → elsődleges
    TÉ:8, VÉ:8, SP:+6, Átütés:0, Erőlimit:99, Sebesség:7
  Kard, másfélkezes (pengehegy-kard, szúró) → másodlagos
    TÉ:6, VÉ:6, SP:+7, Átütés:1, Erőlimit:99, Sebesség:7
1 kéz (MK → kontroll-levonás, a sebzés/SP változatlan):
  Kard, másfélkezes (vágóél-egyenes-átlagos, vágó-egyenes) → elsődleges
    TÉ:6, VÉ:6, SP:+6, Átütés:0, Erőlimit:2, Sebesség:7
  Kard, másfélkezes (pengehegy-kard, szúró) → másodlagos
    TÉ:4, VÉ:4, SP:+7, Átütés:0, Erőlimit:2, Sebesség:7
  Fegyverhossz: 5

Kard, kétkezes

WORK:

fegyverhossz: 7 | fejdarab: 1 | pengés: 1 | súly: nehéz
aktorok: vágóél-egyenes-nagy, pengehegy-kard

GAME:

Kard, kétkezes (vágóél-egyenes-nagy, vágó-egyenes) → elsődleges
  TÉ:10, VÉ:10, SP:+9, Átütés:0, Sebesség:9
Kard, kétkezes (pengehegy-kard, szúró) → másodlagos
  TÉ:8, VÉ:8, SP:+8, Átütés:1, Sebesség:9
  Forgatás: kétkezes, Fegyverhossz: 7

Rapír

WORK:

fegyverhossz: 3 | fejdarab: 1 | pengés: 1 | erőbónusz_limit: 3
aktorok: pengehegy-kard, vágóél-egyenes-átlagos

GAME:

Rapír (pengehegy-kard, szúró) → elsődleges
  TÉ:4, VÉ:4, SP:+6, Átütés:1, Sebesség:7
Rapír (vágóél-egyenes-átlagos, vágó-egyenes) → másodlagos
  TÉ:6, VÉ:6, SP:+5, Átütés:0, Sebesség:7
  Forgatás: egykezes, Fegyverhossz: 3

Kard, Slan

WORK:

fegyverhossz: 5 | fejdarab: 1 | pengés: 1
aktorok: vágóél-íves-átlagos, pengehegy-kard
extrák: kulonleges_felkeszites
idea (példány-szintű variánsok → a katalógus-alap `idea:3`, "mesteri"):
  - slan             : Idea:2  - kezdő kalandozó (Mester készíti lelkiismeretesen)
  - slan,mesteri     : Idea:3  - mesterré váláskor
  - slan,nagymesteri : Idea:4  - kalandért meg lehet kapni, hatalmas hőstett
  - slan,legendás    : Idea:5  - Hattori Hanzo. Narratív követelmény.

GAME (Idea:2 példa → a "kezdő" variáns, bemutató célból):

2 kéz:
  Kard, Slan (vágóél-íves-átlagos, vágó-íves) → elsődleges
    TÉ:7, VÉ:7, SP:+9, Átütés:0, Erőlimit:99, Sebesség:8
  Kard, Slan (pengehegy-kard, szúró) → másodlagos
    TÉ:7, VÉ:7, SP:+9, Átütés:1, Erőlimit:99, Sebesség:7
1 kéz (MK → kontroll-levonás, SP változatlan):
  Kard, Slan (vágóél-íves-átlagos, vágó-íves) → elsődleges
    TÉ:5, VÉ:5, SP:+9, Átütés:0, Erőlimit:2, Sebesség:8
  Kard, Slan (pengehegy-kard, szúró) → másodlagos
    TÉ:5, VÉ:5, SP:+9, Átütés:0, Erőlimit:2, Sebesség:7
  Fegyverhossz: 5

Mara-Sequor

WORK:

fegyverhossz: 5 | fejdarab: 1 | pengés: 1 | idea: 3 | alapanyag: feketeacél
aktorok: vágóél-íves-átlagos
extrák: kulonleges_felkeszites
Speciális: Chi-harcban törhetetlen (feketeacél). Idea variánsok: mesteri(+3), nagymesteri(+4)

GAME (Idea:3 példa):

2 kéz:
  Mara-Sequor (vágóél-íves-átlagos, vágó-íves)
    TÉ:8, VÉ:8, SP:+11, Átütés:0, Erőlimit:99, Sebesség:7
1 kéz (MK → kontroll-levonás, SP változatlan):
  Mara-Sequor (vágóél-íves-átlagos, vágó-íves)
    TÉ:6, VÉ:6, SP:+11, Átütés:0, Erőlimit:2, Sebesség:7
  Fegyverhossz: 5

Alabárd

WORK:

fegyverhossz: 9 | fejdarab: 2 | pengés: 1 | súly: nehéz | szálfegyver_nyélanyag: fanyelű
aktorok: vágóél-íves-nagy, lándzsahegy-rövid-átlagos, buzogányfej-tompa

GAME:

Alabárd (vágóél-íves-nagy, vágó-íves) → elsődleges
  TÉ:8, VÉ:10, SP:+10, Átütés:0, Sebesség:12
Alabárd (lándzsahegy-rövid-átlagos, szúró)
  TÉ:8, VÉ:10, SP:+9, Átütés:2, Sebesség:11
Alabárd (buzogányfej-tompa, zúzó)
  TÉ:8, VÉ:8, SP:+9, Átütés:0, Sebesség:11
  Forgatás: kétkezes, Fegyverhossz: 9

(Nem "ultimate fegyver" → lásd Nyitott kérdések → Megoldott döntések + Balansz teszt szekció.)

Lándzsa

WORK:

fegyverhossz: 9 | fejdarab: 1 | pengés: 1 | szálfegyver_nyélanyag: fanyelű
aktorok: lándzsahegy-rövid-átlagos

GAME:

Lándzsa (lándzsahegy-rövid-átlagos, szúró)
  TÉ:10, VÉ:10, SP:+9, Átütés:2, Sebesség:9
  Forgatás: kétkezes, Fegyverhossz: 9

Lándzsa pajzzsal

A lándzsa alapból kétkezes (TÉ:10, VÉ:10, SP:+9, Átütés:2, Sebesség:9). Pajzzsal (vagy kiesett kézzel) 1 kézzel kell fogni → kétkezes fegyver 1 kézzel (szituáció): TÉ:-4, VÉ:-4, Átütés→0, erőbónusz_limit→0 → a sebzés (SP) VÁLTOZATLAN, cserébe a pajzs VÉ-t ad. Három variáns (a pajzs pontos VÉ-je a Pajzs táblából, §13):

Lándzsa + kis pajzs
  Lándzsa (lándzsahegy-rövid-átlagos, szúró)
    TÉ:6, VÉ:6 + kis pajzs VÉ, SP:+9, Átütés:0, erőbónusz_limit:0, Sebesség:9
    akadály: 0  (mozgékony)

Lándzsa + közepes pajzs
  Lándzsa (lándzsahegy-rövid-átlagos, szúró)
    TÉ:6, VÉ:6 + közepes pajzs VÉ, SP:+9, Átütés:0, erőbónusz_limit:0, Sebesség:10
    akadály: 1

Lándzsa + nagy pajzs
  Lándzsa (lándzsahegy-rövid-átlagos, szúró)
    TÉ:6, VÉ:6 + nagy pajzs VÉ (legmagasabb), SP:+9, Átütés:0, erőbónusz_limit:0, Sebesség:11
    akadály: 2  (csak szekéren szállítható) → falanx / védekező alakzat

Balansz: a "reach + magas VÉ" fölényt ellensúlyozza az egykezes-kényszer levonása (TÉ/VÉ:-4, Átütés→0, nincs erőbónusz), a lassuló Sebesség, a nagy pajzs logisztikája (szekér), és a Beszorított sebezhetőség (kat. 9 tag): ha az ellenfél bejut, a lándzsa hátrányba kerül. Erős védekező alakzatban (falanx), de lassú, egy kézzel esetlen és beszorítva kiszolgáltatott → nem "mindent verő".

Wakizashi

WORK:

fegyverhossz: 2 | fejdarab: 1 | pengés: 1
aktorok: vágóél-íves-rövid

GAME:

Wakizashi (vágóél-íves-rövid, vágó-íves)
  TÉ:3, VÉ:3, SP:+4, Átütés:0, Sebesség:6
  Forgatás: egykezes, Fegyverhossz: 2

Naginata

WORK:

fegyverhossz: 12 | fejdarab: 1 | pengés: 1 | idea: 2 | szálfegyver_nyélanyag: fanyelű
aktorok: vágóél-íves-nagy

GAME (Idea:2):

Naginata (vágóél-íves-nagy, vágó-íves)
  TÉ:14, VÉ:14, SP:+11, Átütés:0, Sebesség:11
  Forgatás: kétkezes, Fegyverhossz: 12


Speciális fegyverek (generátoron kívül)

Két csoport:

  • Teljesen generátoron kívüliek (ez a szekció) → nincsenek a fegyverek.yaml katalógusban, egyedi mechanikájuk/védekező szerepük miatt kézzel kezeljük őket.
  • A generátorBAN benne vannak, csak extra mechanikájuk van (lásd lentebb, "Egyedi szabályú fegyverek" alszekció) → szerepelnek a fegyverek.yaml-ban, a mainstream fegyverlistában és a JSON exportban, a harcértékeik a generátorból jönnek. Az extrak.yaml-hivatkozott extra viselkedésük (pl. beakadás, önsebzés-kockázat) nem numerikus/szituációs jellegű, ezért itt is dokumentáljuk (kereszthivatkozás, nem duplikáció).

Védekező (hárító) fegyverek → nem támadnak

Mind a négy a fegyverek_fixed.json rétegben van (aktor:"kivétel", TÉ:0):

  Alkarvédő     VÉ:2   SP:-10   közelharci   csak ≤1 pengés fegyver ellen
  Tonfa         VÉ:2   SP:-3    közelharci   csak ≤1 pengés fegyver ellen
  Köpeny        VÉ:3   SP:-20   kardvívó     csak ≤1 penge hosszú fegyver ellen
  Csatakesztyű  VÉ:2   SP:0     kardvívó

  A negatív SP NEM a hárítás értéke, hanem a nem-rendeltetésszerű (támadásra próbált)
  használat büntetése (régi tábla szerint). A feltételek (≤1 pengés/penge hosszú ellen)
  a megjegyzés mezőben élnek, nincsenek kiértékelve.

Ököl-kiegészítők

Mindhárom a generátorban (fegyverek.yaml, közelharci kategória):

  Vasököl / páncélkesztyű   vasököl aktor           TÉ:-1  VÉ:-2  SP:0  erőbónusz_limit:5
  Markolatgomb              vasököl aktor (azonos)  TÉ:-1  VÉ:-2  SP:0  erőbónusz_limit:5
  Tőr, ököl                 pengehegy-rejtett aktor TÉ:0   VÉ:-3  SP:0  erőbónusz_limit:2

  Vasököl/Markolatgomb: fém ütőfelület, ÉP-sebzés, nem puha, a Puszta kéznél kevésbé
  büntetett. A Markolatgomb fizikailag egy kard gombja, nem önálló tárgy (068_02).

  Tőr, ököl: tenyérbe rejtett ököltőr. Tisztán szúró, egyaktoros, kompenzáló másodlagos
  mód nélkül (más pengehegy-apró fegyvereknél a vágóél kompenzálja a hárítást, itt nincs
  ilyen). Jelenleg egyedi eset, tudatosan elfogadva.

  Egyiküknek sincs strukturált extrak.yaml hatása.

Orv- és beakadó fegyverek

Garott                fegyverek_fixed.json  (aktor:"kivétel")

Méregfog              fegyverek.yaml, közelharci
                       azonos WORK-paraméter a Tőrrel: hossz:1, [vágóél-egyenes-rövid,
                       pengehegy-tőr], pengés:1. Méreg-extra + 5x ár-szorzó: megjegyzés
                       mezőben (nincs strukturált extrak.yaml-hatás/ár-mechanika).

Béltépő                fegyverek.yaml, közelharci → lásd "Egyedi szabályú fegyverek"
Csatacsákány           fegyverek.yaml, romboló   → lásd "Egyedi szabályú fegyverek"
Ostorkard (Urumi)      fegyverek.yaml, ostorharc → lásd "Egyedi szabályú fegyverek"

Lovas szálfegyver

Kopja, harci / Kopja, torna    fegyverek_fixed.json  (aktor:"kivétel")

Egyedi szabályú fegyverek

A generátorban benne vannak → csak az extra mechanikájuk nem numerikus/szituációs.

Strukturált extrák (extrak.yaml, a generátor id-vel hivatkozza):

  Béltépő           panceltalant_jobban_sebez    vérttelen célon +3 SP
                     pocsek_vedekezo_pancelos_ellen  páncélos ellen VÉ override 0
                                                     (feltétel: cél_páncél: páncélos)
                     beakadas_kockazat (szöveges)    ~50%, mint a Csatacsákány

  Tőr, páncélszúró  pancelszuras_belharcban       belharcban földön lévő ellen SFÉ:0

  Buzogány, láncos  pajzs_ve_felezes              a láncos fej megkerüli a pajzsot,
                                                     a pajzs VÉ-je feleződik

  Meneth            panceltalant_jobban_sebez    vérttelen célon +3 SP
                     sfe_duplazodik                 a cél páncél SFÉ-je duplán számít

  Csatacsákány      beakadas_kockazat (szöveges)  páncéltörő; találat után ~50% beakad

  Ostorkard         onsebzes_kockazat (szöveges)  hajlékony penge; Mesterfegyver-fok
                                                     nélkül önsebzés-kockázat (KM)

  Pugoss/Ramiera/   kulonleges_felkeszites (KF)   iskola + Mesterfegyver nélkül a
  Slan/Mara                                         felkészítetlen bázis-érték érvényes;
                                                     felkészítve a Mesterfegyver-bónusz
                                                     megduplázódik (Slan/Mara: + Idea)

  (jelenleg nincs   kampos_veg_labkirantas         Lábkirántás manőver Ellenpróbájára +2
   fegyver, ami                                     (a kampós vég korábban aktor volt,
   hivatkozná)                                       de szituáció-függő, manőverre ható
                                                      hatás → helyesen extra, nem aktor)

  A `szöveges` mód a nem-numerikus, KM-döntéses hatásokat jelöli.

FIGYELEM (Béltépő + Meneth): a `cél_páncél` feltétel-típus jelenleg csak deklarált,
nincs kiértékelve. Feloldás: tervezett "Ellenfél páncél" választó a Sebzés popup-ban
(csupasz/puha/bőr/lánc/pikkely-lemez) → 4 nem-csupasz osztály leképzi a "páncélos"
durva kategóriát. Lásd "webapp-integráció akadályai" munkanapló.

Örökölt (paraméter-alapú) extrák — a paraméter/kategória örökíti, nem per-fegyver:

  fegyverhossz kat. 7/9              → beszorithato (Beszorítható)
  hajlékony (ostor/korbács)          → pajzs_megkerules + fegyvertores_immunis
  szálfegyver_nyélanyag = fanyelű    → fanyel_fegyvertores_konnyebb (Fegyvertörés-ellenpróba -2)



Validáció

A mérce a balansz és a szituáció-függő egyediség, nem a régi éles fegyvertáblához igazodás. A példák a végleges modellel (sebzésjelleg×páncél mátrix) készültek; a teljes gépi számítás: szilank.code/code/fegyvergenerator_balansz.py.

Hosszúkard (Erő=2) → a két mód szituáció-függő

Vágóél-egyenes-átlagos (vágó-egyenes): SP_flat = hossz(3)+aktor(1)+pengés(1)+Erő(2) = +7
  • csupasz (+1 típus):        10,5 +7 +1        = ~18,5 → ~2 kat    ✅ erős húson
  • lánc    (-2 típus, SFÉ10): 10,5 +7 -2 -10    = ~5,5  → ~0,6 kat     a láncot alig sebzi
  • lemez   (-4 típus, SFÉ20): 10,5 +7 -4 -20    < 0     → 0 kat    ✅ kard NEM vág át lemezen

Pengehegy-kard (szúró): SP_flat = hossz(3)+aktor(2)+pengés(1)+Erő(2) = +8   (Súly nem számít)
  • lánc    (0 típus, SFÉ10):  10,5 +8 -10       = ~8,5  → ~0,9 kat  ✅ a szúrás JOBB láncon a vágásnál
  • lemez   (-3, Átütés1→SFÉ19): 10,5 +8 -3 -19  < 0     → 0 kat        plate ellen szúrni is hiába

→ Ugyanaz a kard: vágj a páncéltalanra, szúrj a láncingesre, plate ellen válts fegyvert.

Kés (könnyű, Erő=2) → gyors, de csak húson

Vágóél-íves-rövid (vágó-íves): SP_flat = hossz(0)+aktor(1)+pengés(1)+könnyű(-1)+Erő(2) = +3
  • csupasz (+3 típus):        10,5 +3 +3       = ~16,5 → ~1,8 kat  ✅ veszélyes páncéltalanra
  • lánc    (-2 típus, SFÉ10): 10,5 +3 -2 -10   < 0     → 0 kat        a láncon semmi

Pengehegy-apró (szúró): SP_flat = hossz(0)+aktor(0)+pengés(1)+Erő(2) = +3   (Súly nem számít)
  • lánc    (0 típus, SFÉ10):  10,5 +3 -10      = ~3,5  → ~0,4 kat      szúrva is alig

→ A könnyű -1 SP miatt gyors, de kis sebzésű: páncéltalanra jó, vért ellen nem.

Tőr (Erő=2) → a szúrás rést talál

Vágóél-egyenes-rövid (vágó-egyenes): SP_flat = hossz(1)+aktor(0)+pengés(1)+Erő(2) = +4
  • csupasz (+1 típus):        10,5 +4 +1       = ~15,5 → ~1,7 kat
  • lánc    (-2 típus, SFÉ10): 10,5 +4 -2 -10   = ~2,5  → ~0,3 kat

Pengehegy-tőr (szúró): SP_flat = hossz(1)+aktor(1)+pengés(1)+Erő(2) = +5   (Súly nem számít)
  • lánc    (0 típus, SFÉ10):  10,5 +5 -10      = ~5,5  → ~0,6 kat  ✅ szúrás átmegy láncon (rést talál)
  • lemez   (-3 típus, SFÉ20): 10,5 +5 -3 -20   < 0     → 0 kat        plate ellen semmi

→ Szúrómódban a tőr láncon is sebez (rést talál), vágva kevésbé → a szúró/vágó választás számít.

Kétkezes buzogány (súlyos, Erő=4) → a páncélos ellenfél válasza

SP_flat = hossz(5)+aktor(2)+súly(2)+Erő(4) = +13   (zúzó)
  • csupasz (0 típus):         10,5 +13          = ~23,5 → ~2,6 kat  (nyers erő; húson a penge jobb)
  • lánc    (+3 típus, SFÉ10): 10,5 +13 +3 -10   = ~16,5 → ~1,8 kat  ✅
  • lemez   (+3 típus, SFÉ20): 10,5 +13 +3 -20   = ~6,5  → ~0,7 kat  ✅ egyedül a zúzó dönt a plate-en

Dzsenn szablya (íves kard, Erő=2) → húson pusztító, fémen gyenge

Vágóél-íves-átlagos (vágó-íves; Seb +1 lassabb): SP_flat = hossz(3)+aktor(2)+pengés(1)+Erő(2) = +8
  • csupasz (+3 típus):        10,5 +8 +3       = ~21,5 → ~2,4 kat  ✅ íves kard pusztító húson
  • lánc    (-2 típus, SFÉ10): 10,5 +8 -2 -10   = ~6,5  → ~0,7 kat
  • lemez   (-4 típus, SFÉ20): 10,5 +8 -4 -20   < 0     → 0 kat        fémen a legrosszabb

Pengehegy-kard (szúró): SP_flat = hossz(3)+aktor(2)+pengés(1)+Erő(2) = +8   (Súly nem számít)
  • lánc    (0 típus, SFÉ10):  10,5 +8 -10      = ~8,5  → ~0,9 kat  ✅ szúrva jobb a láncon

→ Az íves él a hús királya, de fémen a legnagyobb büntetést kapja → a szúrómód menti a lánc ellen.

Legendás vs olcsó, lemez ellen (a lényeg)

Mara-Sequor (Idea3 íves kard, Erő4): vágó-íves lemez -4 típus → lemez ellen 0 kat.
Kétkezes buzogány (mundán, Erő4):    zúzó     lemez +3 típus → lemez ellen ~0,7 kat.

→ Egy legendás penge is szituáció-függő: húson felülmúlhatatlan, de lemez ellen egy olcsó buzogány veri. Nincs mindent vivő fegyver.



Balansz teszt

Determinisztikus szimuláció: szilank.code/code/fegyvergenerator_balansz.py → a paramétertáblákból generálja minden fegyver harcértékeit, és tempóval súlyozott sebzést számol páncélonként. A szkript reprodukálja a lenti Konkrét fegyverek GAME értékeit (regresszió: MIND OK).

Módszer. Effektív sebzés = k20_átlag(10,5) + SP_flat + Erő + sebzésjelleg×páncél-módosító − (SFÉ − Átütés), sebesülés-kategóriában (ÉP/4 ≈ 9). A sebzésjelleg×páncél-módosító a mátrixból jön (bónusz ÉS büntetés → lásd Sebzésjellegek szekció). Tempó-súlyozás: kategória / Sebesség (magasabb = jobb throughput, mert a gyorsabb fegyver többször támad).

Eredmény → mundán fegyverek (Idea 0, acél), tempó-győztes páncélonként:

Páncél Legjobb mundán fegyver
csupasz Kés (gyors, könnyű)
posztó → lánc Kard, másfélkezes (sokoldalú generalista)
pikkely, lemez Kétkezes buzogány (zúzó = páncéltörő)

Tiszta kő-papír-olló: tőr → páncéltalan, kard → közepes vért, buzogány → nehéz fém. Egyetlen mundán fegyver sem visz mindent. A "generalista" másfélkezes kard a legtöbb sávban jó, de mindkét szélen kikap (tőr a páncéltalannál, buzogány a lemeznél).

Mindent-vivő ellenőrzés.

  • Alabárd a 3 módja ellenére a legalacsonyabb tempó-throughput (Sebesség 12–13) → a sokoldalúság stratégiai, nem taktikai. NEM ultimate.
  • Idea/legendás fegyverek (Slan kard, Mara-Sequor) a hús és a könnyű vért ellen vezetnek → ez a szándékolt, ár- és narratív-gate-elt "pénz/ritkaság vesz erőt" tengely. DE a sebzésjelleg×páncél büntetés miatt fém vért ellen nem dominálnak: a Mara-Sequor (vágó-íves) lemez ellen 0.00 effektív kategória, míg egy olcsó Kétkezes buzogány 0.50 → a páncélos ellenfél válasza a zúzó, nem a legendás penge. Így egy legendás fegyver is szituáció-függő.
  • Módon belüli trade-off: a szúró jobb a réseknél (+2/+3 könnyű vért), a vágó-egyenes jobb TÉ/VÉ-t ad (védekezés), a vágó-íves nagyobb sebzést húson → de a fém vért mindet bünteti.

Hosszútávú hatás: Sebesség és a támadásszám (szintfüggő)

Éles modell (063_04, ADR.tobb.tamadas.harckeret.modell):

Harckeret = Harcmodor szint + Gyorsaság − Páncél MGT
Támadás/kör = 1 + ⌊Harckeret / Fegyver Sebesség⌋
  (Primer harcmodor szint plafonja = Tapasztalati szint, max 21)
  (2+ támadásnál fix −3 TÉ minden csapásra; van "1 támadás taktika" levonás nélkül)

Támadások száma / kör (dedikált harcos, könnyű vért):

Sebesség:          5   6   7   8   9  10  11  12  13  14
ALACSONY  HK=5     2   1   1   1   1   1   1   1   1   1
KÖZEPES   HK=13    3   3   2   2   2   2   2   2   2   1
MAGAS     HK=24    5   5   4   4   3   3   3   3   2   2
MAGAS+lemez HK=12  3   3   2   2   2   2   2   2   1   1

A támadásszám lépcsős függvény, széles sávokkal → ez tervezési korlát:

  • Alacsony szinten szinte lapos: csak a Seb 5 kap 2. támadást, minden más 1. Ekkor a Sebesség gyakorlatilag irreleváns a támadásszámra; nem éri meg attack-countot hajszolni (az 1→2. támadás ráadásul −3 TÉ-be kerül).
  • Közepes szinten a Seb 7–13 mind 2 támadás (egy Hosszú kard és egy Alabárd ugyanannyi). Csak a Seb ≤6 (3) és a Seb 14 (1) lóg ki.
  • Magas szinten válik szét igazán (5/4/3/2), itt a gyors fegyver (Seb 5–7) messze elhúz. A 2.+ extra támadások tiszta nyereség, mert a −3 TÉ már "ki van fizetve".
  • Nehézvért (MGT) visszahúzza a Harckeretet → a lemezes hős magas szinten úgy támad, mint egy közepes szintű páncéltalan.

Következmény a balanszra: a Sebesség durva, szintfüggő, lépcsős eszköz → egy +1 általában egy sávon belülre esik (nulla hatás), ritkán viszont egy egész támadást levág (szikla). Ezért a Sebesség NEM finomhangoló: csak akkor használjuk, ha egy fegyvert szándékosan egy lassabb attack-sávba akarunk tenni, és ilyenkor a fenti táblával ellenőrizzük a küszöböt. A finomhangolás a folytonos karokon történjen: SP, VÉ, sebzésjelleg×páncél mátrix, Átütés, Erő-követelmény.

Caveat a fenti tempó-teszthez: a "kat / Sebesség" throughput-metrika a Sebesség-et folytonosnak kezeli, ezért túlbecsüli a kis Sebesség-különbségek hatását. A valós játék egész támadásszámmal dolgozik (lásd a fenti táblát). A tempó-teszt így a relatív rangsorra jó, de a ±1 Sebesség finom-hatását felülértékeli.



Kapcsolódás az éles szabályrendszerhez (ADR-ek)

A generátor több ponton az éles md/ szabályokra és a döntött ADR-ekre épül. Megerősítések, kapcsolódások és tudatos eltérések:

Megerősített alapok (a modell konzisztens az élessel):

  • Tempó-teszt alapja: ADR.tobb.tamadas.harckeret.modell → Plusz támadások = Harckeret / Fegyver Sebesség (Harckeret = Harcmodor szint + Gyorsaság − 3). A balansz-teszt "effektív kat / Sebesség" throughput-metrikája pontosan ezt tükrözi; a "magasabb Sebesség = lassabb" konvenció is innen jön.
  • SFÉ értékek: 069_02_SFE → Fizikai 2/3/7/10/15/20 (posztó…lemez). A szimulátor ezekkel számol.
  • Átütés: Aktuális SFÉ = SFÉ − Átütés (064_02_05) → pontos egyezés.
  • Anyaghierarchia: az éles páncél-anyag SFÉ/MGT sorrend (Acél < Abbitacél < Mithrill < Lunír, Lunír a legkönnyebb) egybevág a fegyver-oldali anyagsorrenddel (lunír = súly−2/leggyorsabb).

Kapcsolódások (más alrendszerek kezelik a részleteket):

  • Másodlagos sebzésmód = Hátrány-1 Sebzésdobásra (064_02_05, státusz). A multi-Aktor "elsődleges/másodlagos" címkék erre a meglévő éles mechanikára képződnek le (nem flat SP-büntetés).
  • Lándzsa + nagy pajzs ↔ Alakzatharc (ADR.alakzatharc): a falanx-erő a külön Alakzatharc alrendszerből jön (képzettség-gate, pengeméret VÉ-csökkentés sávok), nem a fegyverből. Ez erősíti a balanszot: az egyéni fegyver gyenge (SP−4), az erő csak alakzatban, gate mögött bomlik ki.
  • 'pontos' paraméter ↔ Pontra támadás (ADR.sebzes.bonusz.erzekeny.pontokra): a Harci anatómia fortély ad +2 SP/fok-ot (csak vértmentes ponton). Ez alátámasztja, hogy a szúró ne kapjon flat TÉ-t → az átfedést az ADR is kerüli.
  • Feketeacél "Chi-harcban törhetetlen" ↔ ADR.slan.chi.harc (Mara-Sequor anyaga).
  • Felszerelés pont (ADR.felszereles): keret 2 + Erő, közepes 1 / nagy 2 pont. A generátorban a fegyverhossz kategória forgatásából levezetett (egykezes 0 / másfélkezes 1 / kétkezes 2, l. "Fegyverparaméterek" szekció) — a tömörszárú szálfegyver-nyélanyag már a súly:+2 kategória deltán át hat, nem önálló Felszerelés-forrás.

Tudatos eltérések (az új rendszer célja szerint):

  • Sebzésjelleg × páncél mátrix (bónusz + büntetés) → az éles csak bónusz + egyetlen SFÉ modellhez képest. Indoklás és kognitív-teher elemzés: lásd a Sebzésjellegek → mátrix szekció keretes megjegyzését.
  • Agóra VÉ csökkentés (0/1/2 + k20T) → lefelé hangolt javaslat a döntött ADR.ve.csokkentes alaphoz (1/2/2/3 + k20T) képest, hogy az apró-fegyveres "varrógépek" ne csökkentsenek túl sok VÉ-t.
  • könnyű = −1 SP, szúró nincs flat TÉ, legendás anyagok → mind az új balansz-logikából, nem az éles fegyvertáblából (az igazodás nem cél).


A régi fegyverrendszer lecserélésének akadályai (webapp-integráció előtti állapot)

A generátor (data layer + doksi) önmagában konzisztens és validált (self-test, naming-lint zöld). A webapp jelenleg egyáltalán nem ezt a rendszert használja → a lecserélés több, egymásra épülő akadályt igényel. Ez a szekció a felmért állapotot rögzíti (nem terv, státusz-pillanatkép).

A jelenlegi (régi) pipeline, amit a generátor kiváltana: md/068_0x_*.md fegyvertáblák → process_fegyverek.py (MdToJsonConverter) → data/tables/fegyverek.json → webapp (fegyver-calc.ts, ketkezes.ts, types.ts). A generátor (data/sources/fegyverek/) jelenleg kimarad a generate_tables.py build pipeline-ból → tisztán tervezői eszköz (code/balance/).

Data layer oldali akadályok:

  • Séma-váltás, nem átnevezés. A régi fegyverek.json egy sor = egy fegyver-mód (pl. "Alabárd S+V", "Alabárd Z" külön rekordok, MK_pár/Alapnév mezőkkel összefűzve). A generátor egy fegyver = egy rekord, N aktor-móddal (aktorok lista + WORK paraméterek), amit a modok() bont ki futásidejűleg. Ez a fegyvergenerator_json.py JSON exporttal már megoldott (lásd fent) → a webapp oldalnak ehhez a nested formához kell igazodnia, nem fordítva.
  • Idea mező holt kód. A DEVSTATE.md TODO szerint fegyverek[].idea [-5;+5] létezik és szerializálódik, de egyetlen kalkuláció sem használja a webappban (md/068_01_14). A generátor Idea-mechanikája (TÉ/CÉ/VÉ/SP/Sebesség módosító) csak akkor lesz látható a játékban, ha ez a reactive engine-ben (rules.json) implementálódik → ez a generátortól függetlenül is hiányzó feature.
  • Sebzésjelleg × páncél mátrix — ✅ MEGOLDVA (webapp). A mátrix a data pipeline-ba kötve (data/sources/fegyverek/sebzesjelleg_pancel_matrix.yaml → data/tables/sebzesjelleg_pancel_matrix.json, generate_tables.py build-gate), a webapp betölti (GameData.sebzésjellegPáncélMátrix) és a Sebzés popup „Ellenfél páncél" választója alkalmazza (a támadó fegyver aktuális módjának jelleg mezője × választott páncélosztály → SP delta, sebzésPáncélDelta pure fn). A generátor bónusz+büntetés modelljét a webapp a Sebzés popup SP-oldalán vette át (nem az éles Fizikai SFÉ-ban) — dobásonként változó, popup-szintű, nem karakter-állapot.
  • cél_páncél feltétel-kiértékelés — ✅ KÉSZ. Az extrak.yaml most data/tables/fegyver_extrak.json-ként generálódik (id → teljes feltétel/hatás def), a webapp betölti (GameData.fegyverExtrák). A Sebzés popup „Ellenfél páncél" választója kiértékeli az SP-hatású cél_páncél extrát: panceltalant_jobban_sebez (+3 SP vérttelen=csupasz célon), célPáncélSpDelta pure fn. A VÉ/SFÉ-hatású extrák (sfe_duplazodik=Meneth, pocsek_vedekezo_pancelos_ellen=Béltépő) az „Extrák" gombon át jelennek meg aktív/inaktív státusszal (numerikus VÉ/SFÉ-alkalmazás nélkül - az a §42 3. fázis); a statikus fegyver-VÉ/SFÉ nem függhet dobásonként változó ellenfél-páncéltól.
  • Új per-fegyver paraméterek (súly_delta_cél, szálfegyver_nyélanyag, akadály, erőbónusz_limit egyedi értékkel) → a régiben csak az Erőbónusz limit létezik hasonló formában, a többinek nincs megfelelője; migráláskor minden mezőt le kell képezni vagy be kell vezetni az engine-be.
  • Extrák (extrak.yaml) még csak 1. fázisban. Az "egységes effekt-modell" (engine_spec.md §42) a DEVSTATE.md szerint: "1. fázis kész (szabvány + extrak.yaml pilot); 2. adat-migráció opportunista; 3. kód-összeolvasztás a reactive runtime effekt-fázisnál" → a reactive engine még nem tudja futásidőben kiértékelni ezt a feltétel→hatás formátumot.

Webapp/engine oldali akadályok:

  • MK-pár mechanika belegyökerezve. A fegyver-calc.ts (buildFegyverRows), a ketkezes.ts és a types.ts (MK_pár, Alapnév, MK mező) mind az 1K/2K két-sor + páros-lookup modellre épülnek. A generátor ezt egyetlen rekord + a modok() runtime két fogás-variánsával helyettesíti → ez a buildFegyverRows logika átírását igényli, nem csak az adatforrás cseréjét.
  • SP_override fortély-hack (Természetes fegyver → Puszta kéz, calcSpOverride) → ad-hoc speciális eset a régi rendszerben. A generátor Puszta kéz kezelése (ököl aktor, puha: true, FP-sebzés → ÉP helyett, minden 5. pont ÉP) más mechanika, amit a webapp jelenleg egyáltalán nem implementál (nincs FP-sebzés fogalom a rules.json-ban).
  • Sebzéstípus (elsődleges/másodlagos) Hátrány-1 → a generátor kiszámolja és megjelöli, de a Sebzésdobás popup (SebzesPopup.tsx) és az Előny/Hátrány rendszer jelenleg nem kap ehhez inputot a fegyveradatból (nincs állapot arra, melyik aktort/módot választotta a karakter egy több-módú fegyvernél).
  • A "vegyes forrású katalógus" kérdés megoldott a fegyverek_fixed.json réteggel (lásd "Fixed (kézzel írt) JSON réteg" szekció) → Garott, a 4 hárítófegyver (Csatakesztyű, Alkarvédő, Tonfa, Köpeny) és a 2 Kopja (harci, torna) mind ide kerültek, ugyanabban a JSON formátumban, mint a generált fegyverek. A build pipeline-nak a jövőben ezt a fájlt is össze kell fésülnie a fegyverek.generated.json-nal (még nem történt meg → lásd "Javasolt blokkoló sorrend"). (Megkülönböztetendő a Csatacsákány/Ostorkard/Pugoss/Ramiera/Slan/Mara-tól → ők a generátorban vannak, csak az extra mechanikájuk nem numerikus/szituációs, lásd v2.md "Egyedi szabályú fegyverek".)
  • Kategória-eltérés. A generátor kategóriái (közelharci, kardvívó, lándzsavívó, romboló, ostorharc → kisbetűs, mint minden data layer enum-érték) most már egyeznek a webapp konstansok.yaml → fegyver_kategória_harcmodor kulcsaival (közelharci, kardvívó, romboló, lándzsavívó, ostorharc, pajzs) → csak a pajzs kulcs hiányzik a generátorból (nem fegyver). A felosztás is egyezik. A fegyver_kategória_harcmodor végső, megjelenítendő értéke ("Közelharc", "Kardvívás", stb.) marad Nagy kezdőbetűs → az egy más szintű mező (harcmodor-név, nem kategória-azonosító).
  • Pajzs-hozzáfűzés a process_fegyverek.py-ban közvetlenül a fegyverek.json végére van varrva (pajzsok.json merge) → ezt a generátor-alapú pipeline-nak is reprodukálnia kell, vagy külön kell tartani.

Javasolt blokkoló sorrend (a lecserélés megindításához):

  1. Idea-mechanika bevezetése a reactive engine-be (ez már most is hiányzó feature, függetlenül a váltástól).
  2. Sebzésjelleg×páncél mátrix design-döntés lezárása (webapp is átveszi, vagy csak tervezési referencia marad).
  3. Az egységes effekt-modell (extrak.yaml, §42) 2-3. fázisának lezárása (reactive runtime effekt-kiértékelés).
  4. fegyver-calc.ts / ketkezes.ts / types.ts átírása a több-aktoros, egy-rekord (nested) modellre.
  5. Build pipeline: a generátor JSON exportjának (fegyvergenerator_json.py) bekötése a generate_tables.py-ba.


Kiindulási keretszámok az éles anyagból (referencia)

Ezek a régi éles rendszer értékei, amelyekhez a generátort validáltuk → nem a generátor kimenete.

ÉP tartomány

  • Átlagos karakter: ÉP = 28 + (Edzettség × 4), tehát 24–48 ÉP (Edzettség: -1 … +5)
  • Tipikus kalandozó: 32–40 ÉP (Edzettség: +1 … +3)
  • Sebesülés kategóriánként: ÉP/4, tehát tipikusan 8–10 ÉP/kategória
  • Cél: egy jó találat (nem kritikus) páncéltalan ellen S1-be vigyen (8–10 ÉP), egy kiváló találat S2-be (16–20 ÉP). Páncélos ellen legyen érezhető, de ne legyen triviális az ölés.

SFÉ tartomány (Fizikai)

Páncél Alap SFÉ Tipikus tartomány (Ideával, alapanyaggal)
Posztó/Bunda 2 2
Fegyverkabát 3 3
Bőrpáncél 7 6–8
Lánc/Sodrony 10 9–11
Pikkely 15 13–17
Lemez 20 15–23

Jelenlegi éles fegyver SP tartomány (referencia)

Fegyver SP Tipikus teljes SP (k20 + SP + Erő)
Kés +0 k20 + 0–2 ≈ 11–12 átlag
Tőr +1 k20 + 1–3 ≈ 12–14 átlag
Rövid kard +2 k20 + 2–4 ≈ 13–15 átlag
Hosszú kard +4 k20 + 4–6 ≈ 15–17 átlag
Másfélkezes kard (2K) +5 k20 + 5–7 ≈ 16–18 átlag
Kétkezes kard +8 k20 + 8–10 ≈ 19–21 átlag
Buzogány, egykezes +4 k20 + 4–8 ≈ 15–19 átlag
Buzogány, kétkezes +8 k20 + 8–12 ≈ 19–23 átlag
Csatabárd, egykezes +4 k20 + 4–8 ≈ 15–19 átlag
Csatabárd, kétkezes +8 k20 + 8–12 ≈ 19–23 átlag
Lándzsa, széles hegyű +4 k20 + 4–6 ≈ 15–17 átlag

Erő tartomány

  • Tipikus kalandozó: Erő +1 … +3
  • Erős harcos: Erő +3 … +5
  • Az Erő 1:1 hozzáadódik az SP-hez (Erőbónusz limit fegyverenként eltérő)

Aktor tervezési elvek

  1. Az Aktor SP delta tartománya szűk: 0–6. A nagy SP különbségeket a fegyverhossz (+0…+5), a súly (+0…+2), az alapanyag (-5…+2) és az Erőbónusz (+0…+5) adják. Az Aktor a "finomhangolás".
  2. Szúrásnál a Súly SP delta nem számít, és ezt az Aktor-SP NEM kompenzálja általánosan: a pengehegyek SP-je az egyenes élekével azonos, az ívesekénél kisebb, csak a lándzsahegyek magasabbak. Nehéz/súlyos fegyvernél a szúrómód így SP-t veszít, könnyűnél nyer (elmarad a -1).
  3. Vágó-egyenes Aktorok TÉ/VÉ bónuszt kapnak (konstansok.yaml → aktor, per-aktor beírva → NEM a sebzésjelleg_alapérték táblából öröklődik, mert a bónusz mérettől is függ, lásd 6. pont), mert az egyenes él jobb hárításra és pontosabb csapásra.
  4. Vágó-íves Aktorok SP-ben erősebbek, de a Sebesség hátrány (+1 az átlagos és nagy méretűeknél) és a TÉ/VÉ bónusz hiánya kiegyensúlyozza őket. Ez a trade-off: íves = több sebzés, de lassabb és pontatlanabb.
  5. Buzogányfejek VÉ:-2 hátrányt kapnak – a fejnehéz fegyverekkel nehezebb hárítani, cserébe erősebb a sebzés vagy az Átütés. A VÉ hátrány kumulálódik a harc során, így érezhetőbb fonák, mint egy TÉ levonás lenne.
  6. Háromszintű vágóélek (rövid/átlagos/nagy): a méret növekedésével az SP delta nő (+0/+1/+2 egyenesnél, +1/+2/+3 ívesnél), de a TÉ/VÉ bónusz plafonál (+2-nél), mert a fegyverhossz paraméter már amúgy is ad TÉ/VÉ-t a nagyobb fegyvereknél.
  7. A lándzsahegy-hosszúkardhossz a legerősebb Aktor (SP:+6), de Sebesség:+1 hátrány jár hozzá – ez az alabárd/naginata penge, ami hatalmas, de lassú.
  8. Validáció az éles anyag ellen: a javasolt értékek a fegyvergenerátor képleteivel összerakva az éles fegyvertáblázatok SP tartományait reprodukálják (±1–2 SP eltéréssel), ami azt jelzi, hogy konzisztensek. A kis eltérések abból adódnak, hogy az éles anyag nem a generátorral készült.



Nyitott kérdések / megoldott döntések

✅ Megoldott döntések

  • Erő-követelmény mechanika (súly paraméter, nehéz/súlyos) → ✅ KÉSZ, éles szabály + implementálva (md/064_02_06_erobonusz_erolimit.md → "Fegyverek Erő követelménye"): ha a viselő Erő-je < a fegyver súly-kategóriájának követelménye (nehéz: 2, súlyos: 3), Hátrány-1 Támadó dobásra. Egyszerű, nem skálázott (binary) büntetés - a korábban itt tervezett skálázott verzió (pontonkénti TÉ:-2, Sebesség:+1 + Erőbónusz-SP maxolás) NEM ez lett, az éles szabály a mérvadó. Data layer: fegyvergenerator_balansz.py modok() kiadja az effektív (idea/alapanyag/nyélanyag súly-shift utáni) erő_követelmény-t, a fegyvergenerator_json.py fegyver-szintű mezőként exportálja (fegyverek_v2.json). Webapp: combat-roll-info.ts collectDobásInfo opcionális aktívFegyver paraméterrel kiértékeli (karakter.tulajdonságok.erő < aktívFegyver.erő_követelmény → Hátrány-1 a té_dobás-ra), bekötve a HarcScreen.tsx Támadó dobás popup-jába.

  • Meneth erőbónusz_limit → 99 (nincs plafon). A régi táblában a Meneth 99/0-t kapott, de a /0 részt egyetlen szabály sem magyarázza (a Speciális mező csak az „SFÉ duplán számít ellene"-t említi). Az új, egy-aktoros modellben a 99 a mérvadó; ha a /0 később valós mechanikának bizonyul, külön szabály + aktormód nyithatja újra.

  • Súly SP delta könnyű fegyvereknél → könnyű = -1 SP ÉS -1 Sebesség. A vita lezárva: a könnyű fegyver gyorsabb, de kevesebbet sebez (tiszta trade-off). Ez a Kés vágó-módját +2-ről +1-re, a Kő SP-jét -1-ről -2-re állítja (közelebb az éles anyaghoz is). Megakadályozza a "gyors ÉS ütős" apró fegyvert.

  • Súly és Fegyverhossz átfedése → a súly önálló tengely, a fegyverhossz+alapanyag adta "természetes" súlytól legfeljebb 1 kategóriával térhet el (narratív indok: üreges vagy tömör kialakítás). Így nem minden rövid fegyver kényszerül "könnyű"-be (egy tömör kis buzogány lehet átlagos/nehéz). A dupla-sebesség aggály megszűnik, mert a könnyű már -1 SP-t fizet érte.

  • Paraméter: Átütés → miből származzon? → három forrásból, NEM a puszta fegyverméretből:

    • (1) Aktor (pl. lándzsahegy-keskeny +4, buzogányfej-szöges +2, pengehegy-kard +1)
    • (2) nehéz/súlyos súly választható +Átütés módja (+1/+2 az SP helyett)
    • (3) alapanyag (álomfém +2). Az Átütés tudatos konstrukciós döntés.
  • Fegyverelőny (reach) meghatározása → terminológia és a 4 érintett fogalom teljes listája: lásd a dokumentum elején a Terminológia-váltás szekciót.

    • Mikor van Fegyverelőny? Ha MIN 2 db fegyverméret kategória van közöttük (pl. 1 vs 3)
  • Beszorított állapotban (kat. 7 és 9 tag): hátrányba kerül → ha az ellenfél bejut

    • TÉ: 0
    • VÉ: 0
  • Több Ideás fegyverek tárolása → bázis-sablon + példány-szintű Idea mező. A fegyver a bázisparamétereivel tárolódik (Idea nélkül); az Idea szint a karakter konkrét példányán van, a generátor abból számol. Nem kell 4 sor a Slan kardhoz → 1 sablon + a példány Idea-ja. A névvariáns (slan / slan-mesteri…) csak megjelenítési címke. Illeszkedik a webapp fegyver-property modelljéhez.

  • Szúró TÉ bónusz

    • a régi ⭕+X TÉ helyett: nincs flat TÉ bónusz a szúró típusnak.
    • A szúró pontosságát a pontos paraméter (+2 Pontra támadás, csak pengehegy) és az Aktor Átütés fejezi ki.
    • A szúró módok már jó SP-t kapnak könnyű vért ellen (+2/+3, lásd sebzésjelleg×páncél mátrix)
    • egy plusz flat TÉ átfedne a pontos-sal és felülerősítené a szúrást (a balansz teszt ezt igazolta).
  • Alabárd ne legyen "ultimate fegyver"

    • igazolva, hogy nem az.
    • A 3 mód (vágó-íves-nagy / lándzsahegy-szúró / buzogányfej-zúzó) látszólag mindent tud, DE a tempó-teszt szerint az egyik legalacsonyabb throughput (lassú: Sebesség 12–13), és minden dedikált fegyver megveri a saját terepén. Fonák-csomag: lassú + nehéz (Erő-követelmény) + fanyelű (Fegyvertörés +2 ellene) + akadály 2 + mód-váltás tempó-költség (egy összecsapásban gyakorlatilag 1 módot használsz). A sokoldalúság stratégiai (ellenfélhez mód-választás), nem taktikai (nem spammelhető). Értékei maradnak.
  • buzogányfej-szöges sebzésjellege

    • Zúzó (a szöges kialakítás a páncélba nyomódik, mint a tollas buzogány)
    • SP: +1
    • Átütés: 2
    • VÉ: -3
  • Forgatás a "fegyvermód set" alatt?

    • igen, a Forgatás a fegyvermód set része
    • megszorító elem: adott Aktor csak adott forgatással

✅ Scope-döntések (lezárva)

  • Rúnázás, mágikus felszerelések → külön kezelve, nem része ennek a generátornak (lásd STUDY: Varázstárgyak). A generátor scope-ja: nem-mágikus közelharci fegyverek.
  • Távfegyverek (hajító / lő) → kizárva ebből a generátorból (külön távharc alrendszer).
  • Pajzsok → külön alrendszer (nem ez a generátor).
  • Sebesség-módosító Aktorok → nem bővítjük: a Sebesség lépcsős, nem finomhangoló eszköz (lásd Balansz teszt → szintfüggő támadásszám). Marad a jelenlegi (íves + hosszúkardhossz lándzsahegy +1).

⭕ Még nyitott

Blokkoló (a master-be mergelés feltétele, l. "Migrációs terv → Sorrend / függőségek"):

(jelenleg nincs ilyen tétel - a balansz-hangolás a doksi korábbi szóhasználatában "blokkolóként" szerepelt, de fejlesztői szempontból nem blokkoló, l. lent)

Nem blokkoló (döntés/finomhangolás, a merge-et nem akadályozza):

  1. Balansz-hangolás lezárása → a kör-alapú szimulátorral/taktikai AI-val validált, személyesen jóváhagyott fegyverérték-készlet. Jelenleg mind a 68 fegyver state: raw (rendesen számított, de még nem személyesen validált), 0 db final. A fegyverek.yaml state mezője jelzi a fegyverenkénti hangoltsági állapotot. Lásd Kör-alapú harci szimuláció.
  2. Ár-modell → paraméter-alapú alapár (fegyverhossz/anyag/Idea szorzókból)? Döntés folyamatban.
  3. Speciális fegyverek (jövőbeli, generátorba nem illő fegyverekre) → best-effort alapérték + szöveges hatás, vagy kézzel írt kivétel (fegyverek_fixed.json minta). Minden eddig ismert fegyver megoldott.
  4. Harcművész fortély/tradíció (Slan?) → Puszta kéz felturbózása. Csak jelezve: ha a fortély/tradíció megszületik, a puha/FP jelleg futásidejű felülírása itt fog felmerülni (a séma jelenleg nem támogatja). Nem sürgős, máshol lesz kidolgozva.


🚚 Migrációs terv (régi fegyverrendszer → v2)

Ha a Fegyvergenerátor és a balansz-hangolás lezárult, a jelenlegi (régi, kézzel karbantartott) fegyverrendszert lecseréljük a generátor által előállított v2 rendszerre — fogalmakat, generált értékeket, mind az éles szabálykönyvben (md/), mind a webapp-ban. Nincs kompatibilitási kényszer: a régi fegyverek, WORK-értékek, fogalmak felülíródnak, nem kell mindkét rendszert egyszerre életben tartani vagy átjárást biztosítani közöttük.

Branch-stratégia: a teljes migráció egy dedikált feat/fegyver_v2 branch-en történik, nem master-en közvetlenül. Amíg a branch-en dolgozunk, a master és a rajta futó éles webapp/szabálykönyv változatlan, teljesen működő állapotban marad — így ha a migráció közben bug derül ki, van idő azt hiba nélkül elhárítani a branch-en, mielőtt a végleges pull request bemegy és a csere élesbe kerül. A merge (PR master-be) csak azután történik, hogy a migrációs terv minden pontja (1-4. szekció) elkészült és a self-test/verifikációs lépések (naming_lint.py, generate_tables.py, webapp build, a balansz/harcszimulátor önteszt-scriptjei) mind zöldek a branch-en.

A feat/fegyver_v2 branch-en a webapp működésének átmeneti törése MEGENGEDETT (2026-09-27, user döntés) — a korábbi, defenzív megközelítés (minden lépésnél a webapp folytonosságának megőrzése, pl. új/külön fájlba írás a régi felülírása helyett) NEM kötelező többé ezen a branch-en, ha a migráció így egyenesebb/gyorsabb. A master-be menő PR előtti záró-kritérium (l. fentebb: minden self-test zöld) továbbra is érvényes — az átmeneti törések a branch-en belüli munkafázisokra vonatkoznak, a merge-hez a webapp-nak működnie kell. Minden tudatosan okozott törést fel kell jegyezni az alábbi nyilvántartásba, hogy a záró fázisban semmi ne maradjon elfelejtve.

Törött funkciók nyilvántartása (branch-en belüli átmeneti állapot)

Mikor Mi törött Miért Helyreállítás/lezárás
2026-09-27 kétkezes_harc_max_pengeméret (2.0→6) és kétkezes_harc_pengelevonás_osztó (0.5→2) újrahangolva Az új fegyverhossz skála (0-12) nagyobb számokkal dolgozik, mint a régi Pengehossz (0-5) — a régi konstansok mellett a kétkezes harc gyakori fegyverpárokkal (pl. Kard, lovag + Tőr) null-t adott (túllépte a limitet). Nem törött, LEZÁRT hangolási döntés (user jóváhagyással), a golden tesztek frissítve az új értékekre. ✅ Lezárva — nincs teendő a merge előtt.

1. Éles szabálykönyv (md/)

  • Fogalom-lecserélés ✅ KÉSZ: a Terminológia-váltás szekció 4 tétele (Pengehossz→Fegyverhossz, Pengeelőny→Fegyverelőny, Pengehátrány→Fegyverhátrány, Alappenge→Fegyverazonosság) minden rétegen átvezetett. code/balance/, a webapp (context kulcs aktív_fegyver_fegyverhossz, min_fegyverméret követelmény), a data/sources/*.yaml és a teljes éles md/ (manőverek, kétkezes, belharc, lovas/léglovas, harci alakzat, Nagy pajzs, harci akrobatika, 068_02-068_06 fegyvertáblák, 068_09 pajzstábla) penge-mentes.
  • Fejezet-átírás: Fegyverek általános szabályai és a 068_0x_* fegyvertáblázat-fejezetek (Közelharci, Kardvívó, Lándzsavívó, Romboló, Ostorharc, stb.) teljes újraírása a generátor paraméter-modelljéhez igazítva (Aktor, Sebzésjelleg, Sebzéstípus, Erőlimit, FP — l. "Fegyver Harcértékek (végső)" szekció mezői). Ahol a régi fejezet fogalma megszűnt (pl. "MK", "KF" oszlopok, ha a generátor máshogy fejezi ki), a fejezetet kell átírni, nem a generátort a fejezethez igazítani.
  • Új fejezetek, ha a generátor olyan fogalmat vezet be, ami korábban nem létezett explicit fejezetként (pl. Sebzésjelleg × páncél mátrix mint önálló szabály, ha eddig csak a generátor doksijában élt).
  • Fegyvertáblázatok automatikus generálása: a 068_0x_*.md fájlok fegyvertáblái a jövőben script generálja, nem kézzel karbantartott markdown. A code/balance/fegyvergenerator_fegyverlista.py már ma is ezt csinálja (l. modul docstring — jelenleg tervezői kimenet, STUDY.fegyvergenerator_v2_fegyverlista.md-be), migrációkor a célja megváltozik: közvetlenül a md/068_0x_*.md fájlokba írjon (vagy egy új, erre dedikált script, ha az éles fejezet struktúrája eltér a wiki-riportétól — pl. harcmodoronkénti bontás, fejezet-sorrend, linkek). A jelenlegi "FIGYELEM: NE írd rá automatikusan az éles md/068_0x_*.md" megkötés migrációkor feloldódik — ez a script válik a fegyvertáblázatok kanonikus forrásává.

2. GitHub Workflow — automatikus fegyvertáblázat-generálás

Új workflow (minta: update_fegyvertablazat.yml, ami már ma is paths-alapú triggerrel dolgozik): ha a fegyvergenerátor bemeneti YAML-jai (data/sources/fegyverek/*.yaml) változnak egy push-ban, a workflow automatikusan újrafuttatja a fegyvertáblázat-generáló scriptet és commitolja az eredményt — csak akkor, ha a bemenet valóban változott (nem minden push-on, nem ütemezve).

on:
  push:
    branches: [ master ]
    paths:
      - 'data/sources/fegyverek/*.yaml'

A job lépései a meglévő update_fegyverek.yml mintáját követik: checkout → Python setup → a generáló script futtatása → git status --porcelain diff-ellenőrzés → commit + push csak ha volt változás. Ez ugyanaz a "csak ha kell" elv, amit a naming_lint.py/generate_tables.py build-gate is követ a webapp oldalán (l. AGENTS.md).

3. Webapp

3a. Data layer — a fegyverek.json pipeline kivezetése

A jelenlegi data/tables/fegyverek.json (47 KB, flat séma: Fegyver, TÉ, VÉ, SP, Sebzés módja (S/V/Z), Pengehossz, Forgatás módja, Erőbónusz limit, Íves, MK, KF, Kategória, MK_pár, Alapnév, Hárító, SP_override) NEM a generate_tables.py YAML→JSON pipeline-ból jött — egy teljesen külön, régi pipeline generálta: code/process_fegyverek.py → lib/MdToJsonConverter → közvetlenül az éles md/068_0x_*.md fájlokat parseolta data/patterns/fegyver_pattern.json regex-konfiggal (md→JSON, nem YAML→JSON).

✅ 1-3. pont kész (2026-09-27):

  1. Pipeline-váltás: code/balance/fegyvergenerator_json.py build() függvénye bekötve a generate_tables.py-ba egy adapter-modulon át (data/gen/fegyverek_v2.py → generate_fegyverek_v2(), a GENERATORS lista utolsó tagja) — validál (extrak_validator/fegyverek_validator, hiba esetén build-hiba), majd data/tables/fegyverek_v2.json-ba ír (73 fegyver: 66 a fegyverek.yaml WORK-paramétereiből a generátor modellen át + 7 a fegyverek_fixed.json-ból, ami már végleges módok[] JSON, nem megy át a modellen). Szándékosan ÚJ, KÜLÖN fájl — a régi data/tables/fegyverek.json-t a webapp jelenleg is olvassa (engine/data-loader.ts), ennek átállítása a 3b lépés, a kettő addig egymás mellett él.
  2. code/process_fegyverek.py fegyver-ága már törölve (l. "Kezelendő következmények" — a data/patterns/fegyver_pattern.json és a fegyverek.json-specifikus post-process blokk eltávolítva, miután a régi pipeline minden mainstream kategóriára törött; a pajzs/tavharc ág sértetlen).
  3. A generate_tables.py-ban egy másik, régóta ott lévő, elavult data/fegyvergenerator hivatkozás (validate_naming_convention()) is javítva data/sources-ra.

✅ Séma-igazítás KÉSZ (2026-09-28): a régi data/schemas/fegyver.yaml (flat séma) törölve. A strict-schema elv a fegyver-adatra a fegyverek_validator.py / extrak_validator.py build-gate-en teljesül (data/sources/fegyverek/fegyverek.schema.yaml + extrak.schema.yaml), ami a generate_fegyverek_v2()-ben fut - build-hiba ismeretlen kulcsnál / hiányzó kötelező mezőnél. A fegyverek_v2.json így a build-gate séma-validációs rétegében van.

3b. Típusok és kalkulációs modulok (web/karakter/src/)

✅ KÉSZ (2026-09-28): a FegyverAlap → módok[] (FegyverMod: aktor, jelleg, sebzéstípus S/V/Z, TÉ, VÉ, SP, Átütés, Sebesség, Forgatás, Erőlimit, FP) átírva; a runtime a fegyverek_v2.json-t olvassa; a ketkezes.ts a per-fegyver (3) + össz (6) limitet és a fegyverlevonás floor(összFh/2)-t használja. Az alábbi terv-narratíva a migráció naplója (megtartva).

A FegyverAlap interface (engine/types.ts) és minden rá épülő logika a régi flat modellt (string-mezők, Pengehossz, 'Sebzés módja' egykarakteres kód, MK_pár/Alapnév név-konkatenálás) várja — ezt a generátor módok[]/aktor/jelleg struktúrájára kell átírni. Feltárt érintett fájlok (nem teljes lista, de a fő gócpontok):

  • engine/types.ts — FegyverAlap interface újraírása a generátor mezőire; FegyverPeldany ({alap, név, anyag, idea}) valószínűleg megmarad (karakter-szintű instancia, csak az alap lookup-kulcs célja vált).
  • engine/data-loader.ts — a fetchJson<FegyverAlap[]>('tables/fegyverek.json') sor átállítása az új generált JSON-ra.
  • engine/utils.ts (lookupFegyver), engine/mf-utils.ts, engine/ketkezes.ts — a fegyver-lookup és a kétkezes harc számítás a régi mezőnevekre hivatkozik.
  • components/harc/fegyver-calc.ts — a TÉ/VÉ/SP/harckeret per-fegyver számítás magja (buildFegyverRows, fCtx.set('fegyver_erőbónusz_limit', ...), pengehossz: parseFloat(fDef.Pengehossz), stb.) — ez a legnagyobb, központi átírás: a "Pengehossz" (szám, becsült skála) helyett a generátor valós fegyverhossz kategóriája (0-12) jön, és a flat TÉ/VÉ/SP helyett a fegyver aktív módja (elsődleges/másodlagos, esetleg fogásfüggő) szerint kell kiválasztani az aktuális módok[] elemet.
  • components/harc/pancel-calc.ts — ha a sebzésjelleg×páncél mátrixot itt kell kiértékelni (jelenleg a régi rendszerben a páncél oldala csak SFÉ-t von le, a sebzésjelleg-függő bónusz/büntetés a generátor új fogalma).
  • components/aktiv/manover-dobas-calc.ts — kategória/sebzésMódja mezők (fegyverek.json Kategória/"Sebzés módja" kommentek szerint) a manőver-követelmény kiértékeléshez.
  • components/harc/HarcFegyverTable.tsx, HarcReszletek.tsx, components/harc/types.ts, ep-logic.ts — UI-megjelenítés és ÉP-logika, ami a flat sebzésmód-kódot (S/V/Z) használja; át kell állni a generátor 4 sebzésjelleg-nevére (zúzó/szúró/vágó-egyenes/vágó-íves).
  • components/aktiv/ManoverDobasPopup.tsx — manőver-popup, ami szintén hivatkozik a sebzésmód-kódra.
  • Tesztek: __tests__/golden.test.ts, __tests__/golden3.test.ts, __tests__/load-gamedata.ts, engine/mf-utils.test.ts, engine/utils.test.ts, engine/ketkezes.test.ts — mind a régi FegyverAlap/fegyverek.json fixture-ökre épülnek, migrációkor újraírandók az új adatmodellre (golden teszteknél különösen fontos, hogy a "golden" referenciaértékek is frissüljenek az új generált értékekre, ne a régi rendszerre). Konkrét delta-adat már elérhető: STUDY: régi vs v2 fegyverkészlet összehasonlítás — TÉ/VÉ/SP/Átütés fegyverenkénti Δ táblázat (generálva: code/balance/fegyverek_regi_uj_osszehasonlitas.py). Fő tanulság a golden teszt frissítéshez: a v2 nem egyenletes hangolás, hanem strukturális áthelyezés TÉ/VÉ-ről SP-re (főleg Lándzsavívó: TÉ átlag -0.8, VÉ -1.4, SP +5.6) — a golden referenciaértékek nem egyszerű "kicsit nagyobb szám" cserével frissíthetők, kategóriánként eltérő irányú és nagyságú változás várható. A dokumentum azt is jelzi, mely régi fegyvereknek nincs v2 megfelelője (Garott, Kard, fejvadász, Kard, Lagoss, Kopja, harci/torna, Tőr, hárító — ezek a fegyverek_fixed.json rétegben vagy speciális kezelésben maradnak, l. "Fixed (kézzel írt) JSON réteg" szekció), és mely új fegyvereknek nincs régi elődje (Kő, Lándzsa, átlagos).

3c. Karakter-adatmodell és mentett karakterek

A data/schemas/karakter.yaml fegyverek[].alap mező egy szabad string, ami a fegyverek.json Fegyver mezőre lookupol — ha a migrációval a fegyver-nevek/kategorizálás bármelyike változik (pl. egy fegyver átnevezése, vagy a MK_pár/Alapnév fogalom megszűnése miatti más lookup-logika), a mentett karakterek (localStorage, data/karakter/*.json template-ek) elavult hivatkozásokat tartalmazhatnak. Ez a workflow.md/AGENTS.md már rögzített elve szerint elfogadott, nem blokkoló kockázat ("Backward compatibility: NEM szükséges, régi localStorage invalidálódhat") — csak dokumentálni kell a release-jegyzetben, hogy a migráció után a mentett karakterek fegyver-választásait a játékosoknak újra be kell állítaniuk.

3e. Futásidejű kiértékelés (Reactive Engine) migrálása

✅ KÉSZ (2026-09-28): a fegyver-calc.ts context-építése a módok[] struktúrára állt, a runtime a fegyverek_v2.json-t olvassa. Az alábbi terv-narratíva a migráció naplója (megtartva).

Az rules.json deklaratív szabály-motor (engine/reactive.ts, reactive-parse.ts) 5 fegyver-specifikus szabállyal dolgozik (FEGYVER_RULE_IDS: fegyver_TÉ, fegyver_VÉ, fegyver_SP, fegyver_harckeret, fegyver_támadások), amik a fegyver_alap_TÉ/fegyver_alap_VÉ/fegyver_alap_SP/fegyver_erőbónusz_limit/fegyver_sebesség context-változókra épülnek. Ezeket jelenleg a fegyver-calc.ts fCtx.set(...) hívásai töltik fel — közvetlenül a régi FegyverAlap flat mezőiből (parseInt(fDef.TÉ), fDef['Erőbónusz limit'], stb.), egy kiértékelés = egy fegyver-rekord granularitással.

A generátor modellje ezzel szemben egy fegyver → több mód (módok[], aktoronként/sebzéstípusonként) — a reactive engine context-építésnek ezért fegyver × mód granularitásúvá kell válnia: a kiértékelést minden aktív módra (elsődleges, másodlagos, esetleg a jelenleg használt fogás szerint kiválasztott) külön kell futtatni, nem csak egyszer fegyverenként. Ez a fegyver-calc.ts buildFegyverRows/a per-fegyver fCtx építő logikájának architekturális bővítése, nem csak mezőnév-csere:

  • Context-építés forrásváltása: fDef.TÉ/fDef.VÉ/fDef['Erőbónusz limit']/fDef.Sebesség helyett a kiválasztott mód objektum ({aktor, jelleg, sebzéstípus, TÉ, VÉ, SP, Sebesség, Erőlimit, FP}) mezői.
  • Mód-kiválasztás logika: melyik módok[] elem aktív egy adott pillanatban (UI-ban a fegyver "elsődleges/másodlagos sebzésmód" váltás — ha ez már létező UI-elem, csak az adatforrás vált; ha nincs, ez új UI-logika is lehet).
  • rules.json maga valószínűleg NEM változik (a formulák — fegyver_TÉ = ... + fegyver_alap_TÉ + ... — a context-változó NEVEK szintjén absztraktak, nem a forrásadat struktúrájától függenek) — a migráció súlypontja a context-et FELTÖLTŐ TS kódon van, nem a deklaratív szabályokon.
  • applyFegyverOverrides (helyzet-alapú fegyver-override, pl. Belharci helyzet) — jelenleg r.alap_TÉ/r.alap_VÉ-t használ (a FegyverResult mezői), ez a mód-alapú modellre térve is működik, ha a FegyverResult építése (fent) helyesen tükrözi a kiválasztott mód alap-értékeit.

3g. Sebzés popup — "Ellenfél páncél" választó (ÚJ, kötelező UI-elem)

✅ KÉSZ: a SebzesPopup.tsx kötelező "Ellenfél páncél" választója (csupasz/puha/bőr/lánc/merev) él, pulzáló jelzés + Dobás-tiltás amíg nincs választva; a sebzésjelleg×páncél mátrix (sebzesjelleg_pancel_matrix.json) és a cél_páncél SP-hatású extra (panceltalant_jobban_sebez +3 SP vérttelen célon, fegyver_extrak.json) bekötve. A VÉ/SFÉ-hatású ág (Meneth sfe_duplazodik, Béltépő pocsek_vedekezo_pancelos_ellen) az "Extrák" gombon át jelenik meg aktív/inaktív státusszal (numerikus VÉ/SFÉ-alkalmazás nélkül - az a §42 3. fázis); a statikus fegyver-VÉ/SFÉ nem függhet dobásonként változó ellenfél-páncéltól, a popup-szintű Extrák jelzés a helyes feloldás. Az alábbi terv-narratíva a migráció naplója (megtartva).

A v2 fegyverrendszer bevezetésével a SebzesPopup.tsx-be bekerül egy "Ellenfél páncél" választó, ötértékű skálával: csupasz | puha | bőr | lánc | pikkely/lemez — pontosan a generátor Sebzésjelleg × páncél mátrixának 5 osztálya (l. "Sebzésjelleg × páncél mátrix" szekció fentebb).

  • MINDIG kötelező, kiemelt UI-elem — a választó nem elhagyható/opcionális, és vizuálisan hangsúlyos jelölést kap (pl. villanás/pulzálás), amíg nincs kiválasztva érték, hogy KM ne felejtse el beállítani sebzésdobás előtt (a hiányzó választás rossz SP-eredményhez vezetne, mert a mátrix-lookup nélkül a sebzésjelleg-bónusz/büntetés nem érvényesülne).
  • Runtime szerep: a választott érték a Sebzésjelleg × páncél mátrix lookup kulcsa (a támadó fegyver aktuális módjának jelleg mezője × a választott páncélosztály → SP delta), tehát minden sebzésdobásnál újra kiértékelendő (nem statikus, karakter-szintű beállítás — az ellenfél páncélja dobásonként változhat, ha más ellenféllel harcol a karakter).
  • Mellékhatás — a cél_páncél extra-feltételek megoldása: ugyanez a választó oldja fel a korábban nyitott cél_páncél feltétel-kiértékelés hiányát (érinti: Meneth sfe_duplazodik/panceltalant_jobban_sebez, Béltépő panceltalant_jobban_sebez/pocsek_vedekezo_pancelos_ellen extrákat) — a durva vérttelen/páncélos feltétel-kategória a választó csupasz/{többi 4} leképezésére esik. Egy közös UI-elem oldja fel mindkét (mátrix + extra-feltétel) hiányzó funkciót.
  • Érintett fájlok: SebzesPopup.tsx (új választó UI + kötelező-jelzés állapot), a sebzésdobás-számítást hívó combat-roll-info.ts/a popup onClose callback lánca (a választott páncélosztály eljuttatása a SP-számításig), és a reactive engine oldalán egy új context-változó (cél_páncélosztály vagy hasonló), amit a rules.json-ban az SP-formula figyelembe vesz.

3h. Egyéb fogalom-lecserélés

  • Fogalom-lecserélés a webapp minden rétegében, ahol a régi "penge" nevek élnek: data/sources/*.yaml (pl. harci_helyzetek.yaml Pengeelőny/Pengehátrány/Alappenge rekordjai — l. Terminológia-váltás szekció), a generált data/tables/harci_helyzetek.json, az engine/-ben bármely hardcode-olt string-hivatkozás, és a UI szövegek (components/).
  • UI-hatás felmérése: a harcértékek fülön (HarcFegyverTable.tsx, HarcertekekFegyverekSection.tsx) minden helyet át kell nézni, ami ma a régi fegyver-mezőket (pl. flat sebzésbónusz, MK/KF/Íves oszlopok) jeleníti meg, és az új mód/aktor/jelleg struktúrára igazítani.
  • Felszerelés pont bevezetése az éles MGT szabályba (ADR.felszereles, md/010_03_06_felszereles.md, md/068_01_01_fegyverstatisztikak.md) — a generátorban már bevezetve (konstansok.yaml → fegyverhossz → felszerelés_pont: egykezes 0 / másfélkezes 1 / kétkezes 2), de az éles szabályban és a webapp MGT-számításában (rules.json, pancel-calc.ts) még nincs átvezetve. A migrációkor a fegyver módok[] forgatás mezőjéből kell levezetni, ugyanúgy, mint a generátorban.

4. A Fegyvergenerátor mint opcionális KM/játékos eszköz

A Fegyvergenerátor maga külön, opcionális alfejezetet kap az éles szabálykönyvben — nem kötelező elem, mert a játékhoz szükséges fegyver-statisztikákat már legeneráltuk vele (a fegyverek.generated.json/az éles fegyvertáblázatok tartalmazzák az eredményt). A fejezet célja: a KM-ek és játékosok opcionálisan használhatják új, egyedi fegyverek megalkotására (a meglévő paraméter-készletből: Aktor, Fegyverhossz, Alapanyag, Idea, stb.), ha a kész fegyvertáblázatok nem fedik le az igényüket.

  • Elhelyezés: külön, jól láthatóan opcionálisként jelölt alfejezet (pl. "Fegyvergenerátor (opcionális, egyedi fegyverekhez)"), NEM a fő fegyver-fejezetek elé/közé, hogy ne tűnjön kötelező lépésnek egy karakter felszerelésének összeállításánál.
  • Tartalma: a paraméterek rövid, játékos-barát összefoglalása (nem a teljes tervezési doksi részletessége, ami ez a STUDY.fegyvergenerator_v2 dokumentum) + a végeredmény (TÉ/VÉ/SP/stb.) kiszámításának módja, hogy KM-ellenőrzéssel kézzel is reprodukálható legyen, ha nincs kéznél a script.

4a. Karakter-séma felkészítése egyedi (custom) generált fegyverekre

Ha egy KM/játékos a Fegyvergenerátorral egyedi fegyvert alkot, azt a karakternek tudnia kell tárolni — a jelenlegi data/schemas/karakter.yaml fegyverek[].alap mező viszont kizárólag egy előre gyártott katalógus (fegyverek.json/az utódja) lookup-kulcsa, nincs mód arra, hogy egy, a katalógusban nem szereplő, egyedi paraméterezésű fegyvert hordozzon a karakter. Ezt a sémát bővíteni kell:

  • Új, opcionális mező: fegyverek[].custom — ha jelen van, a fegyver NEM a katalógusból lookupol, hanem a mezőben tárolt WORK-paraméterekből generálódik futásidőben (ugyanaz a paraméter-készlet, mint a fegyverek.generated.json bemenete: hossz, aktorok[], súly, idea, alapanyag, szálfegyver_nyélanyag, erőbónusz_limit, akadály, stb. — l. data/sources/fegyverek/fegyverek.schema.yaml → fegyver: blokk).
  • alap mező szemantikája bővül: ha custom nincs jelen, alap katalógus-lookup (mint most); ha custom jelen van, alap csak megjelenítési célú név lehet (a lookup nem történik meg).
  • Validáció: a custom mező almezői ugyanazt a fegyverek.schema.yaml-t kell kövessék, amit a generátor bemenete — nem duplikált séma, hivatkozás/megosztás a két séma között (pl. a generate_tables.py séma-validátora közös helperrel ellenőrzi mindkettőt).
  • Futásidejű kiértékelés: a webapp a custom fegyverekhez a generátor Python-logikájának TypeScript megfelelőjét (vagy a build-time előre kiszámolt módok[]-t) kell tudja futtatni — ez összefügg a 3e. Reactive Engine migrálása pontban tárgyalt fegyver×mód context-építéssel: a custom fegyver módok[]-ja pontosan úgy folyik be a reactive engine-be, mint egy katalógus-fegyveré, csak a forrása más (karakter-JSON, nem data/tables/).
  • Nyitott kérdés: a módok[] kiszámítása történjen build-time (karakter mentésekor egyszer lefut a generátor-logika, az eredmény a karakter-JSON-ban tárolódik) vagy runtime (minden betöltéskor újraszámol)? Az előbbi egyszerűbb (nincs szükség a teljes generátor-logika TS portolására), de a paraméterek utólagos módosításakor kézzel újra kell generálni; az utóbbi konzisztensebb, de duplikált (Python + TS) vagy közös (pl. WASM-be fordított Python) kiértékelő logikát igényel. Döntendő a migráció megkezdése előtt.

Sorrend / függőségek

A "blokkoló" itt a master-be mergelés feltétele, NEM a feat/fegyver_v2 branch-en való munka megkezdésének feltétele. A branch-stratégia (fentebb) pontosan azért létezik, hogy a migráció iteratívan, félkész állapotokon át haladhasson — a branch-en el lehet kezdeni pl. az 5. pontot (típusok átírása) még azelőtt, hogy az 1. pont (balansz-hangolás) 100%-ban lezárt volna, ha az adott munkadarabhoz elég a jelenlegi (akár raw állapotú) generátor-kimenet. Két blokkoló-típus van:

  • Technikai sorrend (a branch-en belül is köti egymást): pl. a 4. pont (data layer csere) valódi előfeltétele az 5. pontnak, mert a TS típusok konkrét JSON-mezőnevekre hivatkoznak — ezt nem lehet megkerülni, függetlenül attól, hogy branch-en vagy master-en dolgozunk.
  • "Feature complete" feltétel a merge-hez: a Branch-stratégia bekezdésben leírt záró-kritérium (minden 1-4. szekció pont kész + self-testek zöldek) csak a master-be menő PR-t köti, nem a branch-en végzett napi munkát.
  1. Balansz-hangolás lezárása (kör-alapú szimulátor, taktikai AI — l. Kör-alapú harci szimuláció) — fejlesztői szempontból NEM blokkolja a master-merge-et (a korábbi tervben blokkolóként szerepelt, user döntés alapján módosítva); a branch-en való munka és a merge is elindulhat raw fegyverértékekkel. Részhaladás: harcszimulacio.spec.md §13 Ambiguitás-regiszter 9 pontjából 8 lezárva (utolsó: §13.9 Teljes Védekezés 1+k20P normalizáció, 2026-09-27) — a "második hangolási kör" nyitott teendői (l. a linkelt dokumentum) még hátravannak. Konkrét mérőszám: a data/sources/fegyverek/fegyverek.yaml state mezője (empty/incomplete/dummy/raw/final) jelzi a fegyverenkénti hangoltsági állapotot — jelen állapotban mind a 68 fegyver raw (rendesen számított, de még nem személyesen validált), 0 db final. A final-ra váltás finomhangolási kérdés, nem technikai előfeltétel - a típusok/kalkulációs modulok (5. pont) raw adatokkal is átírhatók és tesztelhetők, csak a golden referenciaértékek nem tekinthetők véglegesnek, amíg a mögöttes fegyverérték raw.
  2. Terminológia-váltás átvezetése md/-ben (1. pont) és a webapp fogalom-lecserélés (3h) — nagy, egyszeri átírás, nem fokozatos, mert nincs kompatibilitási kényszer.
  3. Fegyvertáblázat-generáló script + workflow bekötése (2. pont) — ettől kezdve a 068_0x_*.md táblák generált tartalmak, kézzel többé nem szerkesztendők. ✅ Kész (2026-09-27): code/sync_fegyvertablazatok.py mind az 5 kategóriára (Közelharci, Kardvívó, Lándzsavívó, Romboló, Ostorharc) lefutott, a 068_02-068_06_*.md táblák a generátor formátumára váltottak, update_fegyvertablazat.yml workflow bekötve. Következmény: a régi process_fegyverek.py pipeline minden mainstream kategóriára törött (l. "Kezelendő következmények").
  4. Data layer csere (3a) - a fegyvergenerator_json.py bekötése a generate_tables.py pipeline-ba, a régi process_fegyverek.py fegyver-ága és a fegyver.yaml séma kivezetése. Technikai előfeltétele az 5. pontnak a branch-en is, mert a TS típusok az új JSON struktúrától függenek - ez a kettő nem cserélhető sorrendbe. ✅ KÉSZ (2026-09-28): a bekötés (data/gen/fegyverek_v2.py → data/tables/fegyverek_v2.json, 73 fegyver) és a régi pipeline-ág kivezetése megtörtént; a data/schemas/fegyver.yaml séma törölve, a strict-schema elv a fegyverek.schema.yaml/extrak.schema.yaml build-gate validátorokon teljesül.
  5. Típusok és kalkulációs modulok átírása (3b) + Reactive Engine context-építés migrálása (3e) + Ellenfél páncél választó (3g) - FegyverAlap→módok[], fegyver-calc.ts, pancel-calc.ts, a rules.json fegyver-szabályait feltöltő context-logika fegyver×mód granularitásra bővítése, a SebzesPopup.tsx kötelező páncélosztály-választója, és a feltárt fájllista, golden tesztek frissítésével együtt. ✅ KÉSZ (2026-09-28): a webapp runtime a fegyverek_v2.json-t olvassa módok[] struktúrával; a Sebzés popup mód-választó + kötelező „Ellenfél páncél" választó (sebzésjelleg×páncél mátrix + cél_páncél SP-delta + VÉ/SFÉ-hatású extrák Extrák gombon át) + másodlagos passzív info-label; kétkezes per-fegyver limit (3) + össz (6) + fegyverlevonás floor(összFh/2); lovas/léglovas min_fegyverméret warning-only követelmény; Harci akrobatika fok-függő követelmény-tiltás.
  6. Karakter-adatmodell hatás dokumentálása (3c) — release-jegyzet a mentett karakterek fegyver-hivatkozásainak érvénytelenedéséről, nem blokkoló kódmódosítás.
  7. Fegyvergenerátor opcionális fejezet megírása (4. pont) — nem blokkoló, bármikor megírható a fenti lépésektől függetlenül.
  8. Karakter-séma bővítése custom fegyverekre (4a) — a fegyverek[].custom mező és a hozzá tartozó build-time/runtime kiértékelési döntés; érdemben a 4. és 5. pont UTÁN következik, mert a custom fegyverek kiértékelése ugyanazt a reactive engine context-építést használja, amit az 5. pont már migrált.

Kezelendő következmények (hook-lista folyamatos munkához)

A migráció közben felmerülő, azonnal nem megoldott, de később mindenképp átgondolandó függő hatások gyűjtőhelye — ha egy lépés közben olyan mellékhatást találunk, amit tudatosan elhalasztunk, ide kerül egy sor, hogy ne merüljön feledésbe.

  • Kétkezes harc "SUM Fegyverhossz" formula (065_04_04_ketkezes_harc.md) — a formula a két forgatott fegyver fegyverhossz-kategóriáinak összegét használja (SUM Pengeméret), ami a Fegyverviszony min 1 → min 2 kategória-küszöb emelése után újragondolást igényel: lehet, hogy a SUM-küszöbök (jelenleg pl. 1 penge/1.5 penge határok) is arányosan módosulnak, vagy a formula logikája marad, csak a bemenő kategória-skála nő. Nem érintve a jelen (terminológia-váltás) lépésben — a Pengehossz/pengeméret szó és a hozzá tartozó számítás ebben a fájlban (és a hasonló, még pengeméret-alapú fájlokban: 065_03_03_negativ_helyzetek.md lények mérete, 067_01_lovas_harc_szabalyai.md minimum pengeméret, 062_02_harcmodor_kepzettsegek_es_bonuszaik.md harcmodor-küszöb, 068_02-068_06 fegyvertáblázat oszlopfejek) szándékosan változatlan marad, amíg a fegyvertáblázat-generálás (2. lépés) és/vagy a data layer csere (4. lépés) nem ad konkrét, számított kategória-értékeket, amikhez ezeket a küszöböket hozzá lehet igazítani.
  • fegyverek_fixed.json réteg bevonása a 068_02_kozelharci_fegyverek.md generálásba (code/sync_fegyvertablazat_kozelharci.py) — a Garott és a 2 közelharci hárítófegyver (Alkarvédő, Tonfa) most a fő táblába kerül be, de a Megj. cellájuk a fixed JSON teljes szöveges leírását kapja (hosszabb, más stílusú, mint a generátorból jövő rövid megjegyzések) — ha a többi fejezet (Kardvívó: Csatakesztyű/Köpeny, Lándzsavívó: Kopja harci/torna) generálása is elkészül, érdemes egységesíteni a Megj. cella hosszát/stílusát a fixed és a natural generátoros sorok között, és megfontolni, hogy a Aktorok oszlopban megjelenő kivétel aktor-név (ami minden fixed fegyvernél ugyanaz, nem informatív) kapjon-e valódi, egyedi aktor-elnevezést vagy egy dedikált jelölést.
  • code/process_fegyverek.py (régi md→JSON pipeline) fegyver-ága eltávolítva (2026-09-27) — a 068_02-068_06_*.md fejezetek táblázatainak generátor-formátumra váltása után a régi script minden mainstream kategóriára 0 fegyvert parse-olt ki (csak pajzs maradt sértetlen), ezért a halott ág törölve: data/patterns/fegyver_pattern.json + a process_fegyverek.py if d['output'] == 'fegyverek.json': post-process blokkja (MK_pár/Alapnév/Hárító-flag számítás, pajzs-hozzáfűzés, SP_override). A hozzá tartozó .github/workflows/update_fegyverek.yml workflow is törölve. A data/tables/fegyverek.json fájl maga NEM törölve — a webapp (engine/data-loader.ts) jelenleg is ezt olvassa runtime-ban, ez marad az egyetlen (kézzel karbantartott, nem újragenerált) forrás, amíg a Migrációs terv 3a-3b lépése (Data layer csere) nem zárja le a webapp átállítását az új generált JSON-ra. Megerősítve: a process_fegyverek.py futtatása után a fegyverek.json/pajzsok.json/tavfegyverek.json mindhárom fájl bit-egyezően változatlan maradt (a pajzs/tavharc ág továbbra is él, csak a fegyver-ág esett ki a pattern-loop-ból).
  • data/tables/fegyverek.json duplikáció-kockázat (tudatosan vállalt, 2026-09-27) — mind az 5 mainstream kategória (kardvívó 33, közelharci 21, romboló 12, lándzsavívó 11, ostorharc 3 — összesen 80 fegyver) most két, egymástól független helyen létezik: a régi data/tables/fegyverek.json-ban (amit a webapp jelenleg olvas, kézzel karbantartott, NEM generált többé) ÉS a data/sources/fegyverek/fegyverek.generated.json-ban (a generátor friss kimenete, ez a 068_0x_*.md táblázatok forrása). A két forrás eltérő értékeket adhat ugyanarra a fegyverre (l. STUDY.fegyvergenerator_osszahasonlitas delta-táblázat — pl. Lándzsavívó kategóriában átlag TÉ -0.8, VÉ -1.4, SP +5.6 eltérés) — ha valaki csak az egyik forrást módosítja (pl. balance-hangolás a generátorban), a webapp továbbra is a régi értékeket mutatja, ami rejtett inkonzisztenciát okoz. Döntés (2026-09-27): a fegyverek.json-ból NEM távolítjuk el a már generált kategóriákat ebben a körben, mert az azonnal törné a webapp fegyver-megjelenítését — a duplikáció megszűnik, amint a Migrációs terv 3a-3b lépése (Data layer csere: fegyver-calc.ts/ketkezes.ts/types.ts átírása az új JSON struktúrára) lezárul, ekkor a data/tables/fegyverek.json teljesen kivezetendő.
  • Pajzs (pajzs kategória) — ✅ KÉSZ: a 3 pajzs-fegyver (Kis/Közepes/Nagy Pajzs) a fegyverek_fixed.json-ban él, a sync_fegyvertablazatok.py pajzs ága a 068_09_pajzs_fegyverek.md táblázatát ebből generálja. A régi kerülő-utas pipeline (pajzsok.json → webapp) már nem él: a data/tables/pajzsok.json nem létezik, a data-loader.ts pajzs-adatot nem tölt be külön — a pajzsok a fegyverek_v2.json-on belül érhetők el (a fegyverek_fixed.json sorai oda kerültek be a 3a lépésben).

Fegyvergenerátor — Fegyverértékek, fegyvercsoportok értékeinek hangolása

A balansz-hangolás (l. Kör-alapú harci szimuláció) nem csak az egyes fegyverek egyedi paramétereinek módosításával történhet — a generátor rétegzett felépítése miatt egy-egy paraméter-csoport módosítása egyszerre sok fegyverre hat, ami hatékonyabb (kevesebb hely, ahol hangolni kell), de kockázatosabb is (egy csoport-módosítás sok fegyvert mozgat egyszerre, nagyobb az elhibázás/mellékhatás kockázata). A hangolásnak érdemes tudatosan választania a lenti szintek közül.

Hangolási szintek (a hatókör szerint, szűktől tágig)

  1. Egyedi fegyver, egyedi mező (data/sources/fegyverek/fegyverek.yaml) — egy adott fegyver egy konkrét paramétere (pl. csak a "Kard, Slan" idea értéke). Legszűkebb hatókör, legkisebb kockázat, de 66+ fegyvernél sok apró módosítást igényelhet, ha a probléma egy egész kategóriát érint.
  2. Fegyver-csoport, közös séma-paraméter érték (data/sources/fegyverek/konstansok.yaml) — az alábbi táblák bármelyike egyszerre hat MINDEN fegyverre, ami az adott értéket használja:
    • fegyverhossz — a hossz-kategória (0,1,2,3,5,7,9,12) TÉ/VÉ/SP/sebesség alapértéke. Minden fegyver, ami egy adott hossz-kategóriát használ, EGYSZERRE mozog.
    • aktor — a sebzési felület (pl. vágóél-egyenes-átlagos, lándzsahegy-rövid-keskeny) saját SP/Átütés/TÉ/VÉ/Sebesség értéke. Minden fegyver, ami ugyanazt az aktort használja (pl. minden egyenes vágóélű kard), egyszerre mozog.
    • fejdarab — a fejdarab-szám (0-3) Sebesség/TÉ hatása.
    • pengés / láncos / hajlékony — bináris (0/1) flag-ek TÉ/VÉ/SP/Sebesség hatása.
    • súly — könnyű/átlagos/nehéz/súlyos SP-vagy-Átütés + Sebesség + erő-követelmény.
    • idea — a -5..+5 minőségi szint teljes TÉ/VÉ/SP/Sebesség/súly-delta táblája.
    • alapanyag — csont/kő/bronz/fa/acél/abbitacél/mithrill/lunír/feketeacél/ősfém/élőereklye/álomfém TÉ/VÉ/SP/súly/átütés/mágikus.
    • sebzésjelleg_alapérték — zúzó/szúró/vágó-egyenes/vágó-íves/nincs saját, a páncéltól FÜGGETLEN TÉ/VÉ alapértéke (additív az Aktor bónuszához). Jelenleg minden eleme {TÉ: 0, VÉ: 0} — ez egy még KIHASZNÁLATLAN hangolási csavar: ha egy teljes sebzésjelleg (pl. az összes zúzófegyver) szisztematikusan túl gyenge/erős lenne a mátrix-elemzés szerint, itt egyetlen érték-módosítással az összes érintett fegyver egyszerre hangolható, anélkül hogy az Aktor-táblát (ami az adott jelleg minden egyedi alkategóriáját, pl. buzogányfej-tompa vs buzogányfej-szöges, egyenként tartja) érinteni kellene.
    • egykezes_forgatás — a másfélkezes/kétkezes fegyverek 1-kezes (pajzs mellett) forgatási büntetése.
    • szálfegyver_nyélanyag — sima/fanyelű/vasaltszárú/tömörszárú SP/súly-delta.
    • sebzéstípus_hátrány — elsődleges/másodlagos/alkalmatlan sebzésmód Sebzésdobás Előny/Hátrány szintje.
  3. Séma-szintű invariáns (data/sources/fegyverek/fegyverek.schema.yaml) — a mezők megengedett tartománya/enumja (pl. idea: -5..5, fejdarab: 0..3). Ha egy hangolási ötlet a jelenlegi tartományon TÚLI értéket igényelne (pl. idea: +6), ez a réteg bővítendő ELŐSZÖR, különben a validátor (fegyverek_validator.py) elutasítja.
  4. Motor-szintű konstans (fegyvergenerator_harcszimulator.py/_taktikai_ai.py, pl. K20T_FUGGETLEN, a döntési súlyok dontesi_szabalyok()-ban) — ez már NEM a fegyver-adatot, hanem a HARCI MOTOR viselkedését hangolja; minden fegyverre egyformán hat, a legszélesebb, legkockázatosabb hatókör.

Munkafolyamat egy hangoláshoz

  1. A fegyvergenerator_balansz_elemzes.py mátrix-elemzésével (vagy annak bővített, jövőbeli verziójával, l. "Terv (v2)" fejezet) azonosítani, MELYIK szinten él a probléma — egy fegyver egyedi kilengése (1. szint) vagy egy egész kategória szisztematikus eltérése (2-3. szint)?
  2. A megfelelő szinten módosítani — minél tágabb a hatókör, annál inkább kötelező a teljes mátrix újrafuttatása utána (egy aktor- vagy sebzésjelleg_alapérték-módosítás könnyen 10+ fegyvert mozgat egyszerre, ellenőrizetlenül).
  3. A fegyverek_validator.py + a balansz/harcszimulátor self-testek (fegyvergenerator_balansz.py, fegyvergenerator_harcszimulator.py, fegyvergenerator_taktikai_ai.py) mind zöldek maradjanak a módosítás után.
  4. A konklúziót (mit, miért, milyen hatással) a STUDY.* riportba vagy a fegyverek.yaml érintett rekordjainak megjegyzés mezőjébe rögzíteni — ne csak a git history-ban éljen.
⚠️ **GitHub.com Fallback** ⚠️