Releases: Krarilotus/extension-projectileModifier
Release list
Custom Projectiles 1.8.16 — Mangonel range tester
TL;DR: 1.8.16 provisional tester fixes explicit manual range being ignored without a custom reload interval. It extends the existing acquisition guard/immutable profile flag and exact range helper; no new hook, binding, dispatcher, flight solver, cache or persistent block. Includes Monsterfish's supplied Reconquista settings with duplicate keys consolidated, preserving their last values and every reload/spread value.
Downloads: module ZIP · VS Code schema · full vanilla YAML · standard Reconquista YAML · long-range flight example · Monsterfish supplied settings. GM dependency: GM owner 0.3.1 ZIP. ZIP SHA-256 07dedeb75cce990397079aec93036adb5bda40078941d54b1becc10140c9e73d; all six artifacts have checksums.
The supplied Mangonel block uses native pebbles: range 30, interval 100, eight shots, inaccuracy 0 and spread 48. Native pebbles already solve launch speed for each prepared aim. Exactly 30 tiles is accepted; 30 plus one eighth-tile is rejected. All eight native pebble flights finish within one tile of their scattered flat-ground aim, with identical normal/Extreme results. spread 48 intentionally adds up to six tiles per axis around the selected target, so extra impacts may lie beyond its 30-tile target radius. No physics override or Rebalancer activation is needed for this preset. Set spread to zero explicitly if all shots should share the exact aim. Native animation sets the achievable reload minimum; interval 100 cannot skip those frames.
Manual range now works for supported native shooters independently of interval or sync_to_animation. strict_range false disables the correction; native/omitted range without a configured timer retains original game behavior. AI-only human profiles pass through. Native acquisition prepares the aim exactly once, then the existing range helper restricts admission. Native projectile allocation, ownership, damage, cleanup and RNG order remain with their owners. Existing animation/refund behavior is retained for native-timed wind-ups. No UCP2-Legacy source change. Schema/guide and all nine short preview translations explain target range versus scatter; GUI remains one Balance Changes file picker.
Testing:
- Install this tester with UCP 3.0.7+ and its existing map-extensions/protocol/UI 1.0.1+/GM-owner 0.3.1 dependencies. Keep Monsterfish YAML beside the schema, select it in Customizations > Balance Changes and restart. This is an unsigned developer tester, not a signed Store release.
- Manually target a clear unit exactly 30 tiles from a manned Mangonel, then at 30 plus one eighth-tile: the boundary target must fire, the outside target must not start an out-of-range wind-up. Retarget inside range and verify normal turning/firing. Repeat ground/wall/building orders, uphill/downhill, moving targets and all five siege types in both game families.
- With supplied spread 48, extra pebbles may impact beyond the selected-target circle. Explicit spread 0 should remove this additional dispersion. Inaccuracy 0 already removes primary aim error. Verify native flight and damage in the rendered game; do not infer damage from an emulated flight alone.
- Try Mangonel range 3 with no interval and with sync_to_animation false: reject a manual target beyond three tiles before wind-up. strict_range false must restore native admission; native/omitted range must retain native reload behavior. Repeat fortification profiles and ai_only true with human owners.
- Existing regression checks remain relevant: edited format-5 saves should load/reset obsolete module queues, unchanged settings resume normally, strict policy rejects changes, custom graphics definitions must match, target ammo rules preserve native manual/cow behavior. Compare identical files in paired multiplayer and recorder playback before acceptance.
Validation: 31 focused native/config/save regressions pass, including four new Mangonel tests, six flight API tests with 120 native flight cases across both 1.41 families, previous save/manual-range fixes and three manual-only policy cases. The supplied eight-pebble test executes the real Mangonel firing handler, projectile allocator, native velocity solver and movement/collision. 23 GUI/archive tests pass for the 50-file package and nine locales. Owner/binding/final-diff review is in NATIVE-AUDIT.md. All twelve published assets are downloaded and byte-verified by the publication script.
Acceptance remains provisional: native desktop bindings are unavailable; no slot is held. Actual input/cursor range presentation, rendered flight/impact/damage, live save retuning, paired multiplayer/replay, crowded performance and wider executable variants remain unverified. Runtime startup diagnostics remain English; translated preview help awaits human review. The separate trebuchet aiming/damage report is not claimed fixed. Store recipe remains pinned to merged 1.8.12 until source/dependency/live acceptance.
Included 1.8.13–1.8.15 features: optional ammo_by_target units/groups and named unit_groups; Reconquista regular ammo against siege; default format-5 gameplay save retuning with strict OFF control; native-timed manual range admission/cancellation; optional global projectile_physics through active Rebalancer 1.1.3+ apply_rebalance and framework afterInit. Fixed-angle flight tuning uses the native speed solver for otherwise short-range replacements. Physics stays opt-in/global per type; existing configs/native values do not activate Rebalancer. Full inert native vanilla reference, schema, README and all nine GUI catalogs are included.
Custom Projectiles 1.8.15 — native flight tester
Optional target-unit/group ammunition, save-retuning/manual-range fixes, and native projectile flight configuration. Fixed-speed replacement projectiles can fall short despite a valid target range. New root projectile_physics delegates fixed-speed/fixed-angle/adaptive-angle settings to Rebalancer's existing API; fixed angle asks the native game to compute launch speed for the prepared target. No new native hook, binding, trajectory solver or damage system.
1.8.15 tester downloads: module ZIP · Reconquista YAML · full vanilla YAML · VS Code schema · long-range flight example. GM dependency: GM owner 0.3.1 ZIP. ZIP SHA-256 1554b1deee3e386000e064b6be7167a90da7c05e8a442770c5f7a85a0ab0c3f4; all five artifacts have checksum files.
projectile_physics:
firethrower_pot: {mode: fixed_angle, angle: 30}
units:
Catapult:
projectile: firethrower_pot
interval: 700
range: 40Flight tuning is opt-in and global per native type, including sprite variants. Activate Rebalancer 1.1.3+ with your existing balance file/plugin first; this module does not automatically enable its unrelated balance hooks. fixed_speed requires speed: 1..1000 in native units; fixed/adaptive angle require angle: 1..89 degrees. Omission/native leaves current values alone. Fire-ballista bolts share ballista_bolt flight; custom sprites inherit their base type. Native range/eligibility, collisions, terrain, damage, allocation, attribution and cleanup remain in place. No promise of hits through walls or arbitrary height/angle combinations.
Initialization uses the framework's existing afterInit event after balance files enabled. Actual Rebalancer 1.1.3/1.1.4 implementations and caller were inspected; its existing UCP AOB table bindings are reused. No private resolver, copied flight table, competing hook, per-frame allocation/world scan or RNG draw. The owner/binding/final-diff inventory is in NATIVE-AUDIT.md.
Prior included features: ammo_by_target.units/.groups with named unit_groups; exact unit rules win, unmatched targets keep existing behavior, regular/cow choices retain their separate slots/counts. Reconquista prefers configured regular ammo against siege while other troops retain AIC cow behavior, with [cluster, units] allowing isolated targets. Native human/cow orders retain their ammunition paths. Native-timed manual targeting respects configured range with strict_range ON; false restores prior manual behavior. An already rejected wind-up finishes without firing.
Gameplay-edited format-5 saves load by default, resetting obsolete module firing queues/timers while preserving saved RNG seed and visual identities. Same settings resume unchanged. Root allow_config_changes_on_load: false requires original settings. Custom graphics definitions/slots must still match; older custom-graphics saves need one unchanged load/resave first. Flight options participate in this existing configuration identity when unit hooks are active.
The ZIP includes the complete inert vanilla reference for all 77 units and nine canonical native flight entries, editor schema with one shared physics definition, Reconquista and flight examples, README guide and short help in all nine GUI languages. The sole GUI control stays in established Legacy Balance Changes; Legacy source is unchanged.
Testing instructions:
- Install the tester in UCP 3.0.7+ with existing dependencies (map-extensions, protocol, ui 1.0.1+, GM owner 0.3.1). For the new flight block, activate Rebalancer 1.1.3+ with your existing balance config/plugin. Keep YAML beside the matching schema, select it in Customizations > Balance Changes, restart.
- Use the flight example: Catapult firethrower pots, interval 700, range 40, fixed angle 30. Test clear targets at 30/40 tiles, then repeat with Trebuchet, Mangonel and both ballistas. Repeat arrow, crossbow and sling replacements; verify trajectories finish near the intended native aim and produce the expected native impact. Compare with omitted/native physics and fixed speed to see the separate ballistic limit.
- Check uphill/downhill, walls/towers, moving targets and unit/building/ground orders. Verify native ownership, damage and fire behavior; the angle option does not bypass collision or eligibility. Confirm regular/cow slots, custom inherited sprites and native controls still work.
- Copy unchanged vanilla: no projectile hooks/timers/resource handlers should install and flight tuning should do nothing. With an active unit config, save during a staggered volley, resume unchanged, then retune physics/reload and reload; old queues reset. Strict load policy must reject changed settings; graphics definitions remain compatible.
- Compare identical configs/sprites in paired normal/Extreme multiplayer and recorder playback; test crowded long sessions before acceptance. Also repeat the Mangonel out-of-range/valid-retarget cases from 1.8.14.
Validation:
All 24 final physics/save/native-config feedback regressions pass. Six new tests execute actual Rebalancer API/table code and framework registration. Native flight covers 120 cases: normal/Extreme 1.41 × five engines × arrow/crossbow/sling/firethrower replacements × 30/40/50 tiles. The original native initializer, solver and movement/collision code finish within one tile of the prepared flat-ground aim, preserving shooter attribution. Tests also cover owner/event absence before mutation, parameter bounds/modes, table roots against decoded native readers, inert defaults, initialization ordering and saved configuration identity. All 23 GUI/archive tests pass for the package and nine locales. The preceding 34 existing dispatcher regressions passed, including the 77-unit/every-projectile allocation matrix and deterministic saved staggered volleys. A final shared-schema check passed after schema deduplication.
Provisional/draft: native desktop bindings are unavailable (recorded 2 October queued probe; no slot retained). Live rendered flight/impact/damage, paired multiplayer/recorder playback, long-match performance and broader executable variants remain unverified. Existing runtime startup diagnostics remain English; preview help is translated into all nine GUI languages pending human review. The separate trebuchet aiming/impact-damage report is not claimed fixed. No accepted Store release is claimed; its recipe stays pinned to merged 1.8.12 main until source/dependency/live acceptance.
Custom Projectiles 1.8.14 — save retuning and manual range tester
Provisional 1.8.14 tester for source PR #15 (refs #14 and #16).
- Allow gameplay config edits when loading format-5 saves; preserve saved random seed and visual identities, reset obsolete module firing queues/timers. Root
allow_config_changes_on_load: falseretains strict matching. Custom graphics definitions/slots still must match. - Reject out-of-range native-timed manual targets through the existing native acquisition/range owners; finish an older rejected swing without firing. Existing
strict_range: falsedisables the correction. Native dispatch, scatter and cow orders remain owned by their existing paths. - Includes optional target-unit/group ammunition, the complete inert vanilla reference, Reconquista preset, VS Code schema and nine GUI preview languages.
ZIP SHA-256: b5dfa36750e7532deff97bf869fd39499fb64018fefa3c02361266535de3e2db. Four downloadable artifacts each have checksum files. GM owner dependency: GM owner 0.3.1 ZIP.
Testing:
- Install the tester with UCP 3.0.7+, map-extensions, protocol, ui 1.0.1+ and the GM owner 0.3.1 dependency. Select the matching YAML beside its schema under Customizations > Balance Changes and restart.
- Save an active match. Change a unit's interval, count, range or target-ammunition rules, restart and load it. Confirm the new settings apply without a config-mismatch rejection. Old module firing timers/queued volleys reset; the saved random seed and visual identities remain.
- Set root
allow_config_changes_on_load: falseand repeat a changed-config load: it must reject. Restore the original settings and confirm normal resume. Keep custom sprite/decorations definitions and graphics slots unchanged. Older custom-graphics saves need one unchanged load/resave on 1.8.14 before gameplay retuning. - Give a human Mangonel
interval: 400andrange: 3. Directly order an enemy beyond three tiles: it must not stay frozen in wind-up or fire beyond the cap. A swing already started by an older build must finish without firing. Retarget inside range and confirm turning, seven-shot volleys and reload. Test building/ground orders, the exact range edge andstrict_range: falseas the OFF control. - With Reconquista, check AI catapult/trebuchet regular ammunition against siege and AIC cows against troops; exact target-unit rules override groups. Repeat manual/cow orders, native accuracy/scatter and saved staggered volleys on Crusader and Extreme. All multiplayer peers need identical versions, configs and sprite bytes; compare paired sessions/replays before acceptance.
Validation and remaining acceptance:
Seven new production Lua/FASM/x86/save-owner regressions passed on normal/Extreme 1.41. A 69-test surrounding run passed 68, with its only schema error caused by loading the pre-regeneration schema; that case passed against the final schema. Final follow-up passed 15 schema/native-config/save/acquisition cases. The seven new regressions were rerun after final trampoline cleanup and passed. All 23 launcher component/archive tests passed, including nine locales and the one established Balance Changes file picker.
Live game acceptance remains pending: the 2 October queued native probe returned Native app bindings are unavailable for windows, then released its slot. Rendered impact/damage, paired multiplayer/recorder playback, long-match performance and wider executable variants are unverified. Existing startup diagnostics remain English; the preview prose is translated into all nine languages, pending human review. The separate trebuchet aim/impact-damage report is not claimed fixed. This is a provisional test build, not accepted Store completion.
Custom Projectiles 1.8.13 test: ammunition by target type
Optional automatic ammunition rules by target unit type or named group.
Reconquista uses configured regular ammunition against siege engines while
retaining existing AIC cow behavior against troops. Exact rules override groups.
Source PR #15 and testing instructions.
The ZIP includes the guide, editor schema, full inert vanilla reference,
Reconquista example and all nine localized launcher previews.
14 focused normal/Extreme 1.41 native Lua/FASM/x86 tests and 23 launcher
component/archive tests passed. This is an unsigned provisional tester, not an
accepted Store release. Native desktop support is unavailable in this session;
live impact/gameplay, multiplayer/replay and broader executable variants remain
unverified. Existing runtime diagnostics remain English. The separate reported
trebuchet impact/aiming defect is not claimed fixed.
Keep the downloaded YAML beside projectile-config.schema.json. Import the ZIP
with the GM owner 0.3.1 tester dependency, map-extensions, protocol and ui 1.0.1+;
select the YAML under Customizations > Balance Changes and restart.
Custom Projectiles 1.8.12 test
Provisional Custom Projectiles 1.8.12 tester for UCP 3.0.7. Source: 4243fa8 on draft PR #13.
Use target_bias_tiles: {Monk: 3} on a shooting unit to make monks score up to three tile-equivalents closer during automatic unit selection. This does not extend range or guarantee a pick. The old threat_priority spelling remains accepted, including in existing tester presets. Both spellings resolve to the same runtime/save configuration; use only one in each unit, wall override or decoration rule. Native targeting code is otherwise unchanged from 1.8.11.
Downloads include the module ZIP, matching VS Code schema, complete vanilla reference, equivalent Reconquista YAML and SHA-256 files. The GM resource owner 0.3.1 is a separate required module. Import both module ZIPs, select a YAML beside the schema in Customizations > Balance Changes, and restart.
Validation: six config tests, 18 native target-policy tests on normal and Extreme 1.41 PE fixtures, and 23 GUI component/archive tests pass. The prior complete native regression run passed 149 tests; native targeting implementation has not changed in this build. Installed GUI/rendered gameplay, crowded live matches, paired multiplayer, save/replay and other executable variants remain acceptance gaps. This is not a completed Store release.
Custom Projectiles 1.8.11 test
Provisional Custom Projectiles 1.8.11 tester for UCP 3.0.7. Source: b4e46f8 on draft PR #13. This replaces the withdrawn flat-rank 1.8.10 targeting prototype with a distance-equivalent bonus inside the game's native automatic selector. Configured non-random unit shots reuse its scheduled candidate list and native target preparation; strict range is checked per candidate. Omission preserves the previous configuration path.
Downloads include the module ZIP, matching VS Code schema, complete vanilla reference, Reconquista YAML and SHA-256 files. The GM resource owner 0.3.1 is a separate required module. Import both module ZIPs, select a YAML beside the schema in Customizations > Balance Changes, and restart.
Validation: 149 Python/Lua/x86 tests passed on normal and Extreme 1.41 reference images; 23 GUI component/archive tests passed. The Windows native-app binding is unavailable in this session, so installed GUI/rendered gameplay, crowded live matches, paired multiplayer, save/replay and other executable variants remain acceptance gaps. This is not a completed Store release.
SUPERSEDED: Custom Projectiles 1.8.10 target-priority experiment
SUPERSEDED FOR TARGET PRIORITIES. Do not use this 1.8.10 tester ZIP as evidence that Custom Projectiles configures the game's native threat/distance targeting. Use the 1.8.9 provisional tester for the current baseline.
The 1.8.10 threat_priority experiment ranked unit types before distance inside the module's separate automatic unit scan. Research of UnitsState::acquireShootTarget found a native selection policy that combines distance, target attention, shooter/target type, range and obstruction. The experiment did not configure that native policy and was reverted in source PR #12. Store draft #31 is pinned back to 1.8.9.
The assets here are retained only to identify prior tester results; their checksums and source provenance remain unchanged. A corrected native-integrated targeting option is open under issue #10. Neither this artifact nor the 1.8.9 baseline is a gameplay-accepted final release.
Custom Projectiles 1.8.9 provisional tester
Provisional Custom Projectiles 1.8.9 tester for UCP 3.0.7 developer loading. Source: e2bd9da, draft PR #11 stacked on draft PR #8. Do not treat as an accepted Store release.
The existing entity spawn/update hooks now visit active custom visuals and touched decoration cells. The native entity-state binding is decoded from UCP's cached AOB API and verified against the resolved spawner and decoration receiver; no fixed executable address table or private AOB cache is used. Simulation behavior, YAML format and save format 5 are unchanged from 1.8.8.
Install custom-projectiles-1.8.9.zip with the GM owner 0.3.1 ZIP linked in the 1.8.8 tester release, plus map-extensions, protocol and ui 1.0.1 or newer. The module ZIP includes the README, complete vanilla YAML, schema and nine GUI locale catalogs. The separate Reconquista YAML is optional; keep it beside the schema and select it through Customizations > Balance Changes. Importing only this release's ZIP without the GM owner draft will not work.
Automated validation: 140 normal/Extreme Python/Lua/x86 regressions passed before the final binding edit; 8 sprite/resource, 12 decoration and 8 binding tests passed after it. All 23 GUI/archive tests passed. Live rendering, placement, crowded-match frame timings, multiplayer, replay/save, actual GUI locales and broader executable acceptance remain open.
Custom Projectiles 1.8.8 provisional test
Provisional Custom Projectiles 1.8.8 test build for UCP 3.0.7. Both module ZIPs below are required; gmResourceModifier 0.3.1 is a draft dependency and is not resolved by the public Store yet.
The new owner API validates and loads a complete GM1 sheet once and returns the SHA-256 identity of the same bytes. Custom Projectiles no longer opens, parses or hashes sprite files itself. Existing 1.8.7 firing, YAML syntax and vanilla-reference behavior remain unchanged.
Downloads: install both ZIPs, then choose the matching Reconquista YAML or edit the full vanilla YAML alongside the VS Code schema. Enable map-extensions, protocol and ui 1.0.1 or newer. Developer module loading is required. For the direct enemy-click catapult stop/turn/fire test, also install the separate Fixed Engineers 0.2.0 tester from PR #4.
Module source: cdcb8f9. GM owner source: ea42d8b (PR #7). SHA-256 checksums are attached next to the ZIPs. The module ZIP's source entries exactly match the committed source. The Reconquista YAML is semantically unchanged from the 1.8.7 test and validates against the included schema.
Verification: 137 Python/Lua/x86 normal/Extreme regression tests; 23 GUI/archive tests; six GM owner host scenarios with original game artwork; Win32 Release DLL build; AOB binding checks on local, Polish and EFIGS normal/Extreme fixture pairs.
Not yet accepted as a finished release: live 1.8.8 rendering and GUI/gameplay, paired multiplayer, save/replay, crowded-match performance, other supported executable variants and reviewer/normal merge. The connected native desktop API was unavailable for the prepared previous live test. See the source PR and VALIDATION.md for exact scope.
Custom Projectiles 1.8.7 provisional tester
Provisional Custom Projectiles 1.8.7 tester for UCP 3.0.7 and Crusader/Extreme 1.41. This is not the signed Store release.
Downloads:
custom-projectiles-1.8.7.zip: installable UCP module, including the 77-unit vanilla YAML reference, matching VS Code schema, examples and all nine GUI locales.gmResourceModifier-0.3.0.zip: required draft owner API from gmResourceModifier PR #7. Install it with the module; it is not yet in the public Store.reconquista-projectiles-1.8.7.yml: revised tester preset, validated against this build.vanilla-projectiles.ymlandprojectile-config.schema.json: the same files inside the module ZIP, offered separately for easier editing.
Use a developer launcher with unsigned-module loading enabled (the user has authorized the developer warning). Keep the YAML and schema together, select the YAML in Customizations > Balance Changes, and restart. For the specific direct-click catapult movement defect, also install the separate Fixed Engineers 0.2.0 tester from PR #4. Do not load the older overlapping siege-stop PR #3 at the same time.
What changed: automatic attack toggle and exact automatic range per unit; explicit native-value vanilla reference; accepted siege aim until release and native re-aim after lost/reused targets; restored cow ammo selection; fresh candidates only for explicitly random native volleys. No human manual attack order is replaced by AI cluster search.
Validation: normal and Extreme reference-EXE harness and GUI/archive tests pass (see source VALIDATION.md for exact runs). A combined live 1.8.7 direct-click test, rendered custom sprites/decorations, multiplayer, replay and broader executable variants are not accepted. The Windows desktop host did not expose native app bindings for the attempted live check. gmResourceModifier PR #7, rendering lifecycle issue #9 and threat-priority issue #10 remain open. Use as a provisional tester build, not a completed release.
Source PR: #8
Store PR: UnofficialCrusaderPatch/UCP3-extensions-store#31
GM owner PR: UnofficialCrusaderPatch/ucp_gmResourceModifier#7
Fixed Engineers PR: Krarilotus/ucp3-fixes#4