# Third-party notices

`format-gr2` is licensed under **MIT**. It contains no RAD/Granny proprietary
code and does not link `granny2.dll`. The section decompressors are original
or ported from permissively licensed open reverse-engineering work and must
retain the notices and obligations listed below.

Do not treat copied or ported prior work as CarbonEngineJS-original code. Each
copied/ported/adapted component must list its upstream copyright holders,
source project, path, revision when known, license, and redistribution
requirements. Code used only as a behavioral reference should be marked as
reference-only.

---

## Oodle1 / Oodle0 decompressor - `src/core/oodle1.js`

**Boost Software License 1.0.** Ported from the Granny `gr2_decompress` implementation
shipped in [Arbos/nwn2mdk](https://github.com/Arbos/nwn2mdk) (the decompressor is
originally by *berenm* and is distributed under Boost 1.0, separate from nwn2mdk's
Apache-2.0 format code). Cross-checked for correctness against
[arves100/opengr2](https://github.com/arves100/opengr2) `oodle1.c` (MPL-2.0) - used as a
verification reference only; no opengr2 code was copied, so MPL-2.0 does not apply.

```
Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute, execute,
and transmit the Software, and to prepare derivative works of the Software, and
to permit third-parties to whom the Software is furnished to do so, all subject
to the following:

The copyright notices in the Software and this entire statement, including the
above license grant, this restriction and the following disclaimer, must be
included in all copies of the Software, in whole or in part, and all derivative
works of the Software, unless such copies or derivative works are solely in the
form of machine-executable object code generated by a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
```

---

## BitKnit / BitKnit2 decompressor - `src/core/bitknit2.js`

**Original CarbonEngineJS code (MIT).** On 2026-07-24 the previous
EUPL-derived port (transcribed from
[neptuwunium/Knit](https://github.com/neptuwunium/Knit)
`GrannyBitKnitCompression.cs`, EUPL-1.2) was replaced by a clean-room
implementation produced through a documented two-party process: one party
analyzed the format and published a facts-only decoding specification
(`docs/formats/bitknit2.md`); a second, isolated party implemented the
decoder solely from that specification with no access to Knit, pybg3, ooz,
or any other BitKnit implementation. The result was validated byte-exact
against 539 BitKnit2 streams extracted from the EVE `.gr2` corpus (section
payloads and compressed pointer-fixup blocks) plus synthetic raw-quantum
streams. No third-party code, EUPL-derived or otherwise, remains in this
file. BitKnit is a RAD Game Tools codec; the specification records on-disk
format facts only.

---

## Granny animation-curve decompression - `src/core/curves.js`

Authored by **cppctamber** as part of ccpwgl2 (`src/core/reader/granny/curves`), the
same author/owner as this library; included here under this project's MIT
license.

## Tangent-frame shader math - `src/core/tangents.js`

The packed tangent-frame decode/encode math is derived from Fenris Creations
(formerly CCP / CCP Games) EVE/Carbon shader behavior for packed tangent frames.
This package contains a JavaScript implementation of the tangent-frame math and
does not include copied shader source.

If shader source is later copied, ported, or translated directly, update this
notice with the exact upstream repository, file path, revision, copyright
holders, license text or required notice location, and redistribution
obligations before committing that work.

## Container, relocation, type-tree reflection, emitter

Original to this project (cppctamber / carbonenginejs). Included here under
this project's MIT license. Derived from the public on-disk Granny
GRN format layout and the Granny SDK header type definitions.
