# Sources and attribution

Scape Optimizer uses the OSRS Wiki DPS calculator by Weird Gloop and its contributors,
pinned to `ad3b2539a63fb82058595b8702dcf0d7c1a0c181` (retrieved 2026-10-25):
https://github.com/weirdgloop/osrs-dps-calc

The preserved upstream GPL-3.0 license is at `vendor/osrs-dps/LICENSE`; the browser
application is distributed under GPL-3.0-only. Corresponding application and
vendored engine source is included in the downloadable source archive. The
extraction changes and dataset provenance are recorded in `vendor/osrs-dps/`.
The combat model acknowledges Bitterkoekje's DPS spreadsheet and OSRS Wiki
contributors. Equipment images are copied from the same pinned upstream snapshot.
Monster images are resized to a maximum of 192 pixels and encoded as WebP from
that snapshot's `cdn/monsters` artwork; `scripts/sync-monster-images.mjs`
reproduces them and `public/monsters/provenance.json` records their source.
Old School RuneScape names and game assets are attributable to Jagex Ltd.; this
is an independent fan project, not endorsed by Jagex.

The combat-control icons in `public/game-icons/` use prayer, potion, skill and
effect artwork from the same pinned OSRS Wiki calculator snapshot. Mark of
Darkness, Charge and the coin stack are retrieved from OSRS Wiki image files.
`public/game-icons/manifest.json` records every exact source URL and SHA-256
digest; `scripts/sync-ui-game-icons.mjs` reproduces the files and verifies those
digests. All icons are served locally. Existing weapon inventory images are
reused from `public/equipment/`.

Market price and tradeable-item snapshots come from the OSRS Wiki Real-time
Prices API: https://prices.runescape.wiki/api/v1/osrs/latest and
https://prices.runescape.wiki/api/v1/osrs/mapping . Their retrieval date is
recorded in `public/data/market-meta.json`. Refreshes retain source URLs and dates.

Poppins and Plus Jakarta Sans are self-hosted through Fontsource. Their SIL Open
Font Licenses are preserved in `public/licenses/`. React, Vite, d3-array and other
package dependencies retain their respective licenses in their packages; the
lockfile records resolved versions.

The interface is independently implemented using the owner's ARAS Admin design
patterns. GearScape's DPS and Best Setup pages are workflow references; no
GearScape private code or API is used.

## Boss practice trainers

The shared trainer runtime derives from the OldSchoolSDK bundle distributed by
Supalosa's Verzik P3 trainer at https://verzik.colosim.com/. Exact source-map and
SDK hashes, the immutable deployed SDK, recovered TypeScript sources, the
published 0.1.1 npm license and package metadata, and integration notes are in
`vendor/trainer-sdk/`. The current standalone download retains the preferred
source, reference and patch while omitting duplicate compiled npm bundles,
maps and declarations.
The included upstream `LICENSE` is GPL-3.0; the npm metadata's ISC label is not
used to replace that license. Corresponding trainer source is distributed with
this application's source archive. Third-party notices embedded in the bundle
are retained.

The Verzik P2 timing reference is lmperium's trainer at
https://lmperium2096.github.io/verzik_trainer/, pinned to repository commit
`946db4218a335537e4a6de12ee3be69ad7e6deed`. Its MIT license and original source
are retained in `vendor/trainer-sdk/upstream/p2/`. The timing implementation is
adapted for the shared trainer engine.

Trainer models and game artwork/audio are attributed to Jagex Ltd. P3 models
come from https://assets-soltrainer.netlify.app/ (source repository
https://github.com/Supalosa/assets-soltrainer); interface assets accompany the
SDK; original P2 frames/audio come from lmperium's trainer. The pinned local
asset manifest records each source and SHA-256 digest. No trainer assets are
loaded from third-party hosts at runtime. `scripts/sync-trainer-assets.mjs`
restores or checks these files.

Sol Heredit mechanics derive from the GPL-3.0 Colosseum Trainer by Supalosa,
commit `b53022c72b91827becb3ba75d2961adce3e0bd3c`. Inferno waves and NPC combat
derive from OldSchoolSDK/InfernoTrainer, commit
`06fc103f70f1fa228678ca79910a8d3bb0798a7d` (GPL-3.0). Original source,
licenses, hashes and adaptation details are retained under
`vendor/trainer-sdk/upstream/sol` and `upstream/inferno`.
Presentation is inspired by https://scim.gg/; its application code is not used.
Sol/Inferno actor, effect, sound and room provenance is recorded in
`upstream/new-boss-*.json`, `upstream/rooms/` and `NEW-BOSS-ASSETS.md`.
Original Inferno model buffers retain their exact source geometry and clips.
The cache Sol export retains all nine animations and visible topology; its
documented position quantization stays below 0.00025 tile maximum error.
Devices with fewer texture-array layers evaluate those same morph poses on
the CPU without dropping frames or targets. The source downloads include a
separate `sol-assets.tar.gz` to keep every archive below 25 MiB.

The Infernal cape export omits the cache model's explicitly hidden support
face (render type 2), which the original SDK had rendered as a black shoulder
triangle. All 432 visible cape faces, lava UVs and animation poses are retained;
the merged whip and player death models apply the same native visibility rule.
Evidence and client cross-checks are in `upstream/player-textures/HIDDEN-FACE-FIX.md`.

The P2 3D model is extracted from OpenRS2 cache 2437 (NPC 8372, model 35378),
using Supalosa's fork of `osrscachereader` at revision
`a9bc717f785dd5a40fcfae250f2a11450791a9ff`. The cache reader's BSD-2-Clause notice
and reproducible export script are in `vendor/trainer-sdk/tools/`; input hashes,
sequence IDs and resulting GLB hash are recorded in `UPSTREAM.json`.
The Abyssal whip inventory icon is Jagex artwork retrieved from RuneLite's
public item icon cache; its exact URL and digest are included in the asset
manifest.

The Xarpus model and floor are also derived from OpenRS2 cache 2437 with the
same pinned cache reader. Active NPC 8340 uses model 35383, a 5×5 footprint,
and cache sequences 8058, 8059, 8062, 8060, and 8061. The mesh preserves the
NPC's 64/128 width and height scaling. The ground texture uses the original
underlay layout and RGB colours from terrain archive 3633, plane 1, cropped
to the 15×15 arena. Its bilinear interpolation does not reconstruct the
game's wall objects or lighting. Cache definitions, export instructions,
source links and hashes are retained in `vendor/trainer-sdk/`. These assets
remain Jagex game artwork; the cache reader's license does not relicense them.

The three room environments are exported from the same pinned OpenRS2 cache
2437, with its matching location-map keys and the same cache reader. The Verzik
room uses terrain/location archives 3423/3424 on plane 0; Xarpus uses 3633/3634 on
plane 1. Original terrain shapes, underlay/overlay colours, object placements,
rotations, model recolours and static face transparency are retained. Exported
room models use one tile per world unit and explicit translations into each
existing practice grid. Detailed input hashes, object/model inventories,
coordinate cross-checks and current rendering limits are retained in
`vendor/trainer-sdk/upstream/rooms/`; regeneration is handled by
`tools/export-tob-rooms.mjs`.

Combat effect and fixed-drill death-pose assets are also cache-derived. Their
spot-animation, object, model and sequence definitions, hashes and reproducible
export instructions are in `vendor/trainer-sdk/upstream/effects/` and
`tools/export-combat-effects.mjs`. Base transparency and vertex animation are
retained; the pinned exporter's animated face-alpha tracks are not exported.
The game-asset attribution above applies to these files as well.

The corrected Infernal cape presentation uses cache item 21295, worn model
33103, texture 59 and sprite 318. Its lava image, UV mapping and texture-scroll
metadata are embedded in the corrected modular cape, merged P2 player and
fixed-drill death poses. Output hashes and source definitions are retained in
`vendor/trainer-sdk/upstream/player-textures/assets.json`; the texture-aware
export helper is in `vendor/trainer-sdk/tools/model-textures.mjs`. The original
SDK cape asset is retained unchanged; the generated modular cape preserves its
geometry, morph poses and frame clocks, with cache-derived UVs and lava pixels.
Merged player exports retain their original vertices to preserve narrow cape
edges. These textures remain Jagex game artwork.
