Skip to content

v1.23.0

Choose a tag to compare

@Tarislowatsch Tarislowatsch released this 25 Jul 13:54
Immutable release. Only release title and notes can be modified.

Features

  • sheets: let players override an item's display name on its sheet
  • sheets: add hasCustomName field and a dedicated resolveItemName helper
  • hooks: match translated item names in the cross-compendium search
  • hooks: localize item names in the compendium browser window
  • importer: wire language detection and label migration into the UI
  • importer: add a migration tool to backfill labels on existing items
  • sheets: show the client-localized item name on item cards
  • helpers: resolve localizeOr against the item name dictionary
  • importer: apply the label/dictionary scheme to existing-pack translation
  • importer: stop baking translated names into item.name
  • importer: detect a translation file's language from its filename
  • utils: add a world-shared item name translation dictionary
  • importer: add name-normalization helpers for item labels
  • importer: allow translating all compendia at once, shorten button label
  • importer: add UI to apply a translation file to an existing compendium
  • importer: add standalone logic to translate an already-imported pack
  • importer: update existing compendium items instead of duplicating on re-import
  • importer: add pure matching logic for updating existing compendium items
  • importer: fall back to a reference compendium for cross-language name matching
  • importer: resolve source book titles and keep the pre-translation name
  • models: add source/translation metadata fields to items
  • helpers: add value-yielding firstOf helper
  • importer: translate imported item names via Chummer language file
  • magic: let adepts suppress powers to free up Power Points
  • importer: import the mystic adept Magic allocation
  • magic: let mystic adepts allocate their Magic on the sheet
  • magic: roll magic against the spellpower share
  • scene: let the gamemaster pick the mystic adept reduction side
  • magic: derive the mystic adept Magic split
  • implants: add tooltip clarifying essenceActual excludes qualities
  • importer: reverse Chummer essence modifiers and truncate essence display
  • implants: scale implant essence by biocompatibility and sensitive system
  • magic: apply background count to summoning, binding and dismissal drain
  • magic: apply background count to spell dice pools, Force and Drain
  • scene: add GM scene-modifiers dialog and toolbar button
  • scene: add background count storage and effective Magic
  • api: expose CybercombatFlow via game.sr4
  • matrix: add dynamic quick-action buttons for matrix actions

Bug Fixes

  • importer: make language-code handling consistent across dialogs
  • hooks: reveal search matches by translated item name, per pack
  • hooks: match compendium search against the localized item name too
  • importer: make the whole importer dialog scrollable
  • importer: make the whole importer dialog scrollable
  • importer: stop labeling the translate dialog's file as optional
  • importer: reuse the already-uploaded translation file for Translate
  • settings: make flow settings menu content actually scrollable
  • combat: include vehicles and spirits as valid physical attack targets
  • clean up two pre-existing eslint findings
  • importer: make preview table scroll independently of window size
  • importer: avoid ammo/ammo-accessory compendium collision
  • importer: resolve localized tradition, mentor spirit, and paragon names
  • importer: resolve localized skill names to canonical English skills
  • ci: run tests once per PR push instead of twice
  • documents: give computeVehicleDerivedStats the same return shape
  • documents: make the conditionMonitor guard fully consistent
  • sheets: abort stale listeners on item-sheet re-render
  • documents: guard missing conditionMonitor in summoned/vehicle derived stats
  • actor: guard against malformed npcDefaultSkills JSON
  • implants: show derived essenceActual on the item sheet
  • implants: derive essenceActual from grade and stop essence drift
  • scene: group Shadowrun tools under one control set
  • scene: guard scene-modifiers dialog against no active scene

Improvements

  • importer: split flat src/importer/ into character/pack/xml/translation
  • importer: fix test naming and lock the actual merge-equivalence invariant
  • importer: restore workaround comment, hoist weapon-type arrays, add coverage
  • importer: address review feedback on importer-cleanup branch
  • importer: extract planGroupImport from XmlImporterApp#onImport
  • importer: extract findUnmatchedWeapon helper in character importer
  • importer: extract normalizeLangCode helper and dedupe usage
  • importer: remove the dedicated label migration tool
  • importer: route pack updates through pack.documentClass, sharpen wording
  • settings: extract settings-menu SCSS and fix scroll behavior
  • templates: use firstOf helper for value fallbacks
  • templates: extract npc-item-list partial
  • combat: dedupe single/multi-target ranged attack rolling
  • hooks: centralize the dice-total chat patch under src/hooks
  • matrix: extract cybercombat defense handling into a flow class
  • hooks: extract compendium purge logic into @utils
  • combat: extract turn-order logic into @domains/combat flow
  • combat: extract initiative rolling into @domains/combat flow
  • combat: move combat tracker UI out of documents/
  • mappers: remove derivedStats.mapper barrel, repoint all imports
  • mappers: relocate derived-stats mappers to domains/models
  • combat: move initiative helpers into @domains/combat
  • dialog: simplify rollSkillDialog to auto-compute dice pool
  • imports: consolidate multi-sibling deep imports into local barrels
  • utils: consolidate dialog imports behind the @utils/dialog barrel
  • utils: resolve the dialogutility.js re-export shim
  • domains: move combat (attack/defense/damage) into src/domains/combat
  • domains: move magic (spellcasting/combat-spell/opposed-spell) into src/domains/magic
  • domains: move summoned-entity (summon/bind/dismiss) into src/domains/summoned-entity
  • domains: move matrix (cybercombat/damage/dumpshock) into src/domains/matrix
  • domains: move resonance (threading) into src/domains/resonance
  • domains: promote rigging out of utils into src/domains/rigging
  • utils: move decision-registry.js from flows into utils
  • documents: split computeDerivedStats into named sub-computations
  • documents: extend pure derived-stats mappers to spirit/sprite/vehicle
  • documents: make computeDerivedStats pure instead of mutating actorData
  • importer: replace any-cast in mapAmmo with a precise type
  • importer: extract gear branch mappers and dedupe gearBase
  • importer: merge metatype.js and critter.js into templates.js
  • importer: extract ammo-only weapon-bonus logic from gear.js
  • importer: dedupe variant-over-base merge for metatype/critter
  • sheets: extract busy-state toggle and dedupe failure notifications
  • models: split schema-helper.js by topic
  • sheets: dispatch item-sheet type context via lookup table
  • sheets: split sr4-base-actor-sheet.js by action domain
  • sheets: extract remaining inline item filters into inventory-context.js
  • models: split basecharacter.model.js by domain
  • sheets: extract shared focus-select and image-edit listeners
  • models: dedupe tradition choices via Traditions enum
  • utils: route matrix/dice-split/rigging imports through @utils barrel
  • hooks: split die-chat-hook.js by concern
  • dialog: split oversized dialogutility/attack/drone-pool modules
  • documents: split derivedStats.mapper.js by domain
  • documents: split actor.js lifecycle hooks and skill seeding into modules
  • importer: use sourceOf() helper consistently in metatype/critter mappers
  • dialog: split magic/ folder into magic/resonance/summoned-entity by domain
  • dialog: dedupe modifier-bonus lookup in getSkillModifier/getSpellCategoryBonus
  • magic: unify the roll-edge-resist-netHits sequence across spirit/sprite service flows
  • combat: dedupe defense-trigger emission after attack rolls
  • dialog: dedupe roll dialog opener wrappers
  • chat: dedupe decision-card rendering in die-chat-hook
  • vehicle: drop duplicate monitor-box handler
  • magic: dedupe the summoning/binding/dismissal drain resolution
  • magic: move the mystic adept block into the adept column

Full Changelog: v1.22.0...v1.23.0