STUDY.fegyvergenerator_v2 - kaktusztea/szilankrpg GitHub Wiki
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.
- STUDY.tavharc_v2
- Példa doksi: Tőrkard generálása
- Kör-alapú harci szimuláció (hangolás)
- Agóra mágia: Rúnázás, mágikus felszerelések
- Éles anyag:
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) vagyharci_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→ afegyverek.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→ aextrak.yaml-t azextrak.schema.yamlegységes effekt-modell vokabulárjához méri, bekötve a balansz.py-ba.
Futtatás: python3 code/balance/fegyvergenerator_json.py > data/sources/fegyverek/fegyverek.generated.json
-
Scope: a mainstream fegyverek (
fegyverek.yaml→ akategóriamezővel bíró rekordok) → ugyanaz a szűrés, mint afegyvergenerator_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égidata/tables/fegyverek.jsonlapított formátuma (MK_pár/Alapnévnév-konkatenálás). -
Mezők (fegyver szintjén):
név,kategória,megjegyzés,fegyverhossz,akadály,övön_hordható,ár(jelenleg placeholdernull→ 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áktömbjére (csakextrak.yaml-id-k) és aövön_hordható/akadálytop-level mezőkre (nemextrak.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.pybuild pipeline és a webapp jelenleg a régidata/tables/fegyverek.json-t használja. A pipeline-bekötés és a webappfegyver-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.
-
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.pykimeneti 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 afegyverek.generated.json-é. -
aktor: "kivétel"→ dedikált jelzőérték, ami explicit kommunikálja: a mód mögött nincs valódikonstansok.yamlaktor-tábla, a TÉ/VÉ/SP/stb. értékek kézzel lettek megállapítva. -
fegyverhossz: -1→ a régi068_02tábla "-1 = speciális" jelölése, nem valódi WORK-hossz (afegyverek_fixed.json-ban szabadon írható, nem kell a generátorFEGYVERHOSSZenumjá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. GarottSP:8= az 1. kör értéke) VAGYnull-t, a pontos szabály amegjegyzésmező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.
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 = 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
fejdaraba kontroll (TÉ) és a Sebesség büntetését adja - a
pengésa "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
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-1módosítót kap. -
Alkalmatlan = amire a fegyvernek nincs aktora → nem generált mód; ha a KM engedi,
Hátrány-2a 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.
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).
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.
- 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 azaktor:paraméterben él (lásd lent, Aktor tervezési elvek 3. pont).
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)
- Nem csapás → a Súly SP delta NEM számít.
-
átütés> 0 lehetséges;pontoslehetséges. - Nincs flat TÉ bónusz: a pontosságot a
pontosparamé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/+3csupasz-puha), de merev vérten lecsúszik (-3) → Átütés kell.
-
TÉ/VÉ:+2alkotá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).
- Nincs TÉ/VÉ bónusz, cserébe magasabb SP a húson + nagyobb méregadagot tárolhat.
- Páncél: húson a legjobb (
+3csupasz), de fémen a legrosszabb (-4).
- 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.
| 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. |
| 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).
| 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).
| 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).
| 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. |
| 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) |
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
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.
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]).
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)
A Lándzsa a default fegyver (1x ár). A kard ehhez képes drága.
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), aGAME:blokk a leszármaztatott játékbeli harcértékek (fegyvermódonként).
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
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
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
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
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
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
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
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
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
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
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
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ó.)
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
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ő".
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
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
Két csoport:
- Teljesen generátoron kívüliek (ez a szekció) → nincsenek a
fegyverek.yamlkataló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. Azextrak.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ó).
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.
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.
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"
Kopja, harci / Kopja, torna fegyverek_fixed.json (aktor:"kivétel")
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)
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.
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.
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.
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.
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
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.
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.
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.00effektív kategória, míg egy olcsó Kétkezes buzogány0.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/+3kö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.
É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
−3TÉ-be kerül). -
Közepes szinten a Seb 7–13 mind
2tá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
−3TÉ 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
±1Sebesség finom-hatását felülértékeli.
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→ Fizikai2/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): keret2 + Erő, közepes 1 / nagy 2 pont. A generátorban afegyverhosszkategória forgatásából levezetett (egykezes 0 / másfélkezes 1 / kétkezes 2, l. "Fegyverparaméterek" szekció) — atömörszárúszálfegyver-nyélanyag már asúly:+2 kategóriadeltá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öttADR.ve.csokkentesalaphoz (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 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.jsonegy sor = egy fegyver-mód (pl."Alabárd S+V","Alabárd Z"külön rekordok,MK_pár/Alapnévmezőkkel összefűzve). A generátor egy fegyver = egy rekord, N aktor-móddal (aktoroklista + WORK paraméterek), amit amodok()bont ki futásidejűleg. Ez afegyvergenerator_json.pyJSON 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.pybuild-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ánakjellegmezője × választott páncélosztály → SP delta,sebzésPáncélDeltapure 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élfeltétel-kiértékelés — ✅ KÉSZ. Azextrak.yamlmostdata/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élextrát:panceltalant_jobban_sebez(+3 SPvérttelen=csupasz célon),célPáncélSpDeltapure 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_limitegyedi értékkel) → a régiben csak azErőbónusz limitlé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), aketkezes.tsés atypes.ts(MK_pár,Alapnév,MKmező) mind az 1K/2K két-sor + páros-lookup modellre épülnek. A generátor ezt egyetlen rekord + amodok()runtime két fogás-variánsával helyettesíti → ez abuildFegyverRowslogika átírását igényli, nem csak az adatforrás cseréjét. -
SP_overrideforté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ölaktor,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 arules.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.jsonré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 afegyverek.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 webappkonstansok.yaml → fegyver_kategória_harcmodorkulcsaival (közelharci, kardvívó, romboló, lándzsavívó, ostorharc, pajzs) → csak apajzskulcs hiányzik a generátorból (nem fegyver). A felosztás is egyezik. Afegyver_kategória_harcmodorvé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 afegyverek.jsonvégére van varrva (pajzsok.jsonmerge) → 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):
- Idea-mechanika bevezetése a reactive engine-be (ez már most is hiányzó feature, függetlenül a váltástól).
- Sebzésjelleg×páncél mátrix design-döntés lezárása (webapp is átveszi, vagy csak tervezési referencia marad).
- Az egységes effekt-modell (
extrak.yaml, §42) 2-3. fázisának lezárása (reactive runtime effekt-kiértékelés). -
fegyver-calc.ts/ketkezes.ts/types.tsátírása a több-aktoros, egy-rekord (nested) modellre. - Build pipeline: a generátor JSON exportjának (
fegyvergenerator_json.py) bekötése agenerate_tables.py-ba.
Ezek a régi éles rendszer értékei, amelyekhez a generátort validáltuk → nem a generátor kimenete.
- Átlagos karakter:
ÉP = 28 + (Edzettség × 4), tehát24–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 tipikusan8–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.
| 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 |
| 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 |
- Tipikus kalandozó: Erő
+1…+3 - Erős harcos: Erő
+3…+5 - Az Erő
1:1hozzáadódik az SP-hez (Erőbónusz limit fegyverenként eltérő)
- 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". - 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). - Vágó-egyenes Aktorok TÉ/VÉ bónuszt kapnak (
konstansok.yaml → aktor, per-aktor beírva → NEM asebzésjelleg_alapértéktá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. - Vágó-íves Aktorok SP-ben erősebbek, de a Sebesség hátrány (
+1az á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. - Buzogányfejek VÉ:
-2há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. - Háromszintű vágóélek (rövid/átlagos/nagy): a méret növekedésével az SP delta nő (
+0/+1/+2egyenesné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. - A lándzsahegy-hosszúkardhossz a legerősebb Aktor (SP:
+6), de Sebesség:+1hátrány jár hozzá – ez az alabárd/naginata penge, ami hatalmas, de lassú. - 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–2SP 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.
-
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éntiTÉ:-2, Sebesség:+1+ Erőbónusz-SP maxolás) NEM ez lett, az éles szabály a mérvadó. Data layer:fegyvergenerator_balansz.pymodok()kiadja az effektív (idea/alapanyag/nyélanyag súly-shift utáni)erő_követelmény-t, afegyvergenerator_json.pyfegyver-szintű mezőként exportálja (fegyverek_v2.json). Webapp:combat-roll-info.tscollectDobásInfoopcionálisaktívFegyverparaméterrel kiértékeli (karakter.tulajdonságok.erő < aktívFegyver.erő_követelmény→ Hátrány-1 até_dobás-ra), bekötve aHarcScreen.tsxTámadó dobás popup-jába. -
Meneth
erőbónusz_limit→99(nincs plafon). A régi táblában a Meneth99/0-t kapott, de a/0ré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 a99a mérvadó; ha a/0ké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ű =
-1SP ÉS-1Sebessé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
1kategó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-1SP-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ésmódja (+1/+2az SP helyett) - (3) alapanyag (álomfém
+2). Az Átütés tudatos konstrukciós döntés.
- (1) Aktor (pl. lándzsahegy-keskeny
-
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 dbfegyverméret kategória van közöttük (pl.1 vs 3)
- Mikor van Fegyverelőny? Ha
-
Beszorított állapotban (kat. 7 és 9 tag): hátrányba kerül → ha az ellenfél bejut
TÉ: 0VÉ: 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
pontosparaméter (+2Pontra 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).
- a régi
-
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+2ellene) + akadály2+ 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: 2VÉ: -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
- 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).
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):
-
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. Afegyverek.yamlstatemezője jelzi a fegyverenkénti hangoltsági állapotot. Lásd Kör-alapú harci szimuláció. - Ár-modell → paraméter-alapú alapár (fegyverhossz/anyag/Idea szorzókból)? Döntés folyamatban.
-
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.jsonminta). Minden eddig ismert fegyver megoldott. -
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/FPjelleg 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.
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.
| 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. |
-
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 kulcsaktív_fegyver_fegyverhossz,min_fegyverméretkövetelmény), adata/sources/*.yamlés a teljes élesmd/(manőverek, kétkezes, belharc, lovas/léglovas, harci alakzat, Nagy pajzs, harci akrobatika,068_02-068_06fegyvertáblák,068_09pajzstá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_*.mdfájlok fegyvertáblái a jövőben script generálja, nem kézzel karbantartott markdown. Acode/balance/fegyvergenerator_fegyverlista.pymá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 amd/068_0x_*.mdfá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 élesmd/068_0x_*.md" megkötés migrációkor feloldódik — ez a script válik a fegyvertáblázatok kanonikus forrásává.
Ú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).
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):
-
Pipeline-váltás:
code/balance/fegyvergenerator_json.pybuild()függvénye bekötve agenerate_tables.py-ba egy adapter-modulon át (data/gen/fegyverek_v2.py→generate_fegyverek_v2(), aGENERATORSlista utolsó tagja) — validál (extrak_validator/fegyverek_validator, hiba esetén build-hiba), majddata/tables/fegyverek_v2.json-ba ír (73 fegyver: 66 afegyverek.yamlWORK-paramétereiből a generátor modellen át + 7 afegyverek_fixed.json-ból, ami már véglegesmódok[]JSON, nem megy át a modellen). Szándékosan ÚJ, KÜLÖN fájl — a régidata/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. -
code/process_fegyverek.pyfegyver-ága már törölve (l. "Kezelendő következmények" — adata/patterns/fegyver_pattern.jsonés afegyverek.json-specifikus post-process blokk eltávolítva, miután a régi pipeline minden mainstream kategóriára törött; apajzs/tavharcág sértetlen). - A
generate_tables.py-ban egy másik, régóta ott lévő, elavultdata/fegyvergeneratorhivatkozás (validate_naming_convention()) is javítvadata/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.
✅ 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 afegyverek_v2.json-t olvassa; aketkezes.tsa per-fegyver (3) + össz (6) limitet és afegyverlevonásfloor(ö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—FegyverAlapinterface újraírása a generátor mezőire;FegyverPeldany({alap, név, anyag, idea}) valószínűleg megmarad (karakter-szintű instancia, csak azalaplookup-kulcs célja vált). -
engine/data-loader.ts— afetchJson<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ósfegyverhosszkategóriája (0-12) jön, és a flatTÉ/VÉ/SPhelyett a fegyver aktív módja (elsődleges/másodlagos, esetleg fogásfüggő) szerint kell kiválasztani az aktuálismó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ódjamező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égiFegyverAlap/fegyverek.jsonfixture-ö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 afegyverek_fixed.jsonré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).
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.
✅ KÉSZ (2026-09-28): a
fegyver-calc.tscontext-építése amódok[]struktúrára állt, a runtime afegyverek_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éghelyett a kiválasztottmódobjektum ({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.jsonmaga 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) — jelenlegr.alap_TÉ/r.alap_VÉ-t használ (aFegyverResultmezői), ez a mód-alapú modellre térve is működik, ha aFegyverResultépítése (fent) helyesen tükrözi a kiválasztott mód alap-értékeit.
✅ KÉSZ: a
SebzesPopup.tsxkö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 acél_páncélSP-hatású extra (panceltalant_jobban_sebez+3 SP vérttelen célon,fegyver_extrak.json) bekötve. A VÉ/SFÉ-hatású ág (Menethsfe_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
jellegmező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élextra-feltételek megoldása: ugyanez a választó oldja fel a korábban nyitottcél_páncélfeltétel-kiértékelés hiányát (érinti: Menethsfe_duplazodik/panceltalant_jobban_sebez, Béltépőpanceltalant_jobban_sebez/pocsek_vedekezo_pancelos_ellenextrákat) — a durvavérttelen/páncélosfelté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 popuponClosecallback 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ályvagy hasonló), amit arules.json-ban az SP-formula figyelembe vesz.
-
Fogalom-lecserélés a webapp minden rétegében, ahol a régi "penge" nevek élnek:
data/sources/*.yaml(pl.harci_helyzetek.yamlPengeelőny/Pengehátrány/Alappengerekordjai — l. Terminológia-váltás szekció), a generáltdata/tables/harci_helyzetek.json, azengine/-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/Ívesoszlopok) 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: egykezes0/ másfélkezes1/ kétkezes2), 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 fegyvermódok[]forgatásmezőjéből kell levezetni, ugyanúgy, mint a generátorban.
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_v2dokumentum) + 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.
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 afegyverek.generated.jsonbemenete: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). -
alapmező szemantikája bővül: hacustomnincs jelen,alapkatalógus-lookup (mint most); hacustomjelen van,alapcsak megjelenítési célú név lehet (a lookup nem történik meg). -
Validáció: a
custommező almezői ugyanazt afegyverek.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. agenerate_tables.pyséma-validátora közös helperrel ellenőrzi mindkettőt). -
Futásidejű kiértékelés: a webapp a
customfegyverekhez a generátor Python-logikájának TypeScript megfelelőjét (vagy a build-time előre kiszámoltmó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: acustomfegyvermódok[]-ja pontosan úgy folyik be a reactive engine-be, mint egy katalógus-fegyveré, csak a forrása más (karakter-JSON, nemdata/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.
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.
- 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 elindulhatrawfegyveré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és1+k20Pnormalizá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: adata/sources/fegyverek/fegyverek.yamlstatemezője (empty/incomplete/dummy/raw/final) jelzi a fegyverenkénti hangoltsági állapotot — jelen állapotban mind a 68 fegyverraw(rendesen számított, de még nem személyesen validált), 0 dbfinal. Afinal-ra váltás finomhangolási kérdés, nem technikai előfeltétel - a típusok/kalkulációs modulok (5. pont)rawadatokkal 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ékraw. - 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. - Fegyvertáblázat-generáló script + workflow bekötése (2. pont) — ettől kezdve a
068_0x_*.mdtáblák generált tartalmak, kézzel többé nem szerkesztendők. ✅ Kész (2026-09-27):code/sync_fegyvertablazatok.pymind az 5 kategóriára (Közelharci, Kardvívó, Lándzsavívó, Romboló, Ostorharc) lefutott, a068_02-068_06_*.mdtáblák a generátor formátumára váltottak,update_fegyvertablazat.ymlworkflow bekötve. Következmény: a régiprocess_fegyverek.pypipeline minden mainstream kategóriára törött (l. "Kezelendő következmények"). -
Data layer csere (3a) - a
fegyvergenerator_json.pybekötése agenerate_tables.pypipeline-ba, a régiprocess_fegyverek.pyfegyver-ága és afegyver.yamlsé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; adata/schemas/fegyver.yamlséma törölve, a strict-schema elv afegyverek.schema.yaml/extrak.schema.yamlbuild-gate validátorokon teljesül. -
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, arules.jsonfegyver-szabályait feltöltő context-logika fegyver×mód granularitásra bővítése, aSebzesPopup.tsxkö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 afegyverek_v2.json-t olvassamó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élSP-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ásfloor(összFh/2); lovas/léglovasmin_fegyverméretwarning-only követelmény; Harci akrobatika fok-függő követelmény-tiltás. - 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.
- 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.
-
Karakter-séma bővítése custom fegyverekre (4a) — a
fegyverek[].custommező é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 acustomfegyverek kiértékelése ugyanazt a reactive engine context-építést használja, amit az 5. pont már migrált.
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 Fegyverviszonymin 1→min 2kategó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 pengehatá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 — aPengehossz/pengeméretszó és a hozzá tartozó számítás ebben a fájlban (és a hasonló, mégpengeméret-alapú fájlokban:065_03_03_negativ_helyzetek.mdlények mérete,067_01_lovas_harc_szabalyai.mdminimum pengeméret,062_02_harcmodor_kepzettsegek_es_bonuszaik.mdharcmodor-küszöb,068_02-068_06fegyvertá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.jsonréteg bevonása a068_02_kozelharci_fegyverek.mdgenerá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 aMegj.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 aMegj.cella hosszát/stílusát a fixed és a natural generátoros sorok között, és megfontolni, hogy aAktorokoszlopban megjelenőkivételaktor-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) — a068_02-068_06_*.mdfejezetek táblázatainak generátor-formátumra váltása után a régi script minden mainstream kategóriára0fegyvert parse-olt ki (csakpajzsmaradt sértetlen), ezért a halott ág törölve:data/patterns/fegyver_pattern.json+ aprocess_fegyverek.pyif 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.ymlworkflow is törölve. Adata/tables/fegyverek.jsonfá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: aprocess_fegyverek.pyfuttatása után afegyverek.json/pajzsok.json/tavfegyverek.jsonmindhárom fájl bit-egyezően változatlan maradt (apajzs/tavharcág továbbra is él, csak a fegyver-ág esett ki a pattern-loop-ból). -
data/tables/fegyverek.jsondupliká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égidata/tables/fegyverek.json-ban (amit a webapp jelenleg olvas, kézzel karbantartott, NEM generált többé) ÉS adata/sources/fegyverek/fegyverek.generated.json-ban (a generátor friss kimenete, ez a068_0x_*.mdtáblázatok forrása). A két forrás eltérő értékeket adhat ugyanarra a fegyverre (l.STUDY.fegyvergenerator_osszahasonlitasdelta-táblázat — pl. Lándzsavívó kategóriában átlagTÉ -0.8, VÉ -1.4, SP +5.6elté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): afegyverek.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 adata/tables/fegyverek.jsonteljesen kivezetendő. -
Pajzs (
pajzskategória) — ✅ KÉSZ: a 3 pajzs-fegyver (Kis/Közepes/Nagy Pajzs) afegyverek_fixed.json-ban él, async_fegyvertablazatok.pypajzsága a068_09_pajzs_fegyverek.mdtáblázatát ebből generálja. A régi kerülő-utas pipeline (pajzsok.json→ webapp) már nem él: adata/tables/pajzsok.jsonnem létezik, adata-loader.tspajzs-adatot nem tölt be külön — a pajzsok afegyverek_v2.json-on belül érhetők el (afegyverek_fixed.jsonsorai oda kerültek be a 3a lépésben).
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.
-
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. -
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..+5minő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.
-
-
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. -
Motor-szintű konstans (
fegyvergenerator_harcszimulator.py/_taktikai_ai.py, pl.K20T_FUGGETLEN, a döntési súlyokdontesi_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.
- A
fegyvergenerator_balansz_elemzes.pymá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)? - 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- vagysebzésjelleg_alapérték-módosítás könnyen 10+ fegyvert mozgat egyszerre, ellenőrizetlenül). - 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. - A konklúziót (mit, miért, milyen hatással) a STUDY.* riportba vagy a
fegyverek.yamlérintett rekordjainakmegjegyzésmezőjébe rögzíteni — ne csak a git history-ban éljen.