# Third-party notices ## MegaBall — Ed Mackey and Al Mackey Quasarball incorporates material from the MegaBall source release, which Ed Mackey published under the **Apache License, Version 2.0** on 5 June 2012. ``` Copyright 1994, 2012 by Ed Mackey Licensed under the Apache License, Version 2.0 ``` Full licence text: [`licenses/APACHE-2.0.txt`](licenses/APACHE-2.0.txt). Upstream: The release's own `LICENSE.txt` states the licence covers *"the source code and binaries of MegaBall 3, MegaBall 4, the Board Editor, graphics, music, and related files … authored by Ed Mackey and Al Mackey"*, and that it supersedes all prior shareware and "do not distribute" notices. Music and graphics are credited to **Al Mackey**; the game engine and board editor to **Ed Mackey**. ### What we use | Component | Origin | |---|---| | Sprite and background art (Retro theme textures) | `Graphics/`, `Source/MegaBall4/MB4_*.IFF.AGA` (IFF ILBM) | | Sound effects | `SoundEffects/` (IFF 8SVX) | | Music | `MB_Music/` (OctaMED `MMD1`) | | Bitmap font | `fonts/MegaBall.font` and its 8-pixel strike `fonts/MegaBall/8` | | Classic gameplay constants | derived from `Source/*/BALL.ASM` | | Level data format and board sets | `Source/C_Board_Loader/`, `Boards/` | ### Obligations we must meet at release Every box below is ticked against a **measurement of the exported artefact**, never against the repository. That distinction is the whole reason the first box spent so long unticked while looking fine: `res://` is the repository when the test suite runs, so a check that the licence "is present" was true throughout a period in which the licence reached none of the three builds. - [x] Ship `licenses/APACHE-2.0.txt` with the distributed game — packed by `export_presets.cfg`'s `include_filter` on all three presets, and enforced on every build by `tools/dev.py`'s `_licence_check()`, which parses the exported pack's directory and compares the packed bytes with the file on disk. Measured on the real artefacts: `licenses/APACHE-2.0.txt`, **11,358 bytes, byte-identical to the source**, in the macOS `.pck` and in the embedded packs of the Windows `.exe` and the Linux binary. - [x] Retain the `Copyright 1994, 2012 by Ed Mackey` notice — rendered by the credits screen, which is in all three packs. Measured by decompressing `ui/credits/credits.gdc` out of each shipped pack (a `GDSC` header, then a zstd frame at offset 12, 4,712 bytes decompressed): the literal `Copyright 1994, 2012 by Ed Mackey` appears **exactly once**, on all three platforms. **Do not try to verify this with `grep`.** `script_export_mode=2` compresses GDScript to binary tokens, so the credits screen's own strings are not plain text in the pack. The only plain-text `Ed Mackey` hits in the shipped pack are in `assets/retro/font.json` and `assets/retro/sprites.json`, which are derived-asset metadata and have nothing to do with the credits — reading those two hits as evidence that the credits screen shipped is a mistake this project has already made once. - [x] State which files we modified — see "Modifications" below. **Scope caveat:** that notice travels with the SOURCE distribution (this file, and the `MANIFEST.md` beside each converted asset). It is not inside the shipped pack. Apache 2.0 §4(b) is written about the files of a Derivative Work you distribute, so whether a binary-only recipient is owed it too is a reading question — the one item on this list worth putting in front of the lawyer named at the foot of this file. - [x] Credit Ed Mackey and Al Mackey in an in-game credits screen — `ui/credits/`, enforced by `tests/unit/test_credits_attribution.gd`, which fails if either name or the copyright line is dropped, and by `_licence_check()`, which fails the build if the credits or licence screen is missing from the pack. That second guard exists because neither screen is on the boot path: both open from a menu button, so an `exclude_filter` that stripped `ui/credits/` would export cleanly, boot cleanly, and fail only when a player pressed Credits. ### Handing the licence to the player, not just to the bundle §4(a) obliges us to *give* recipients a copy of the licence. A file inside a PCK is not something a player can open, so packing it is necessary and not sufficient. `ui/licence/` reads `res://licenses/APACHE-2.0.txt` at runtime and shows it, reachable in two clicks: **Main Menu → Credits → View Licence**. Reading the packed file rather than embedding the text in a constant is what keeps the two halves honest. A constant would drift from the file with nothing to notice, and would still render with the file stripped back out of the export — so the screen would look correct while the obligation went unmet again. As built, the screen can only show the licence if the licence shipped. ### Modifications Apache 2.0 §4(b) requires modified files to carry prominent notices saying they were changed. A format conversion is a modification, so: - `assets/music/*.ogg` are all 20 modules from `MB_Music/` converted from OctaMED MMD0/MMD1 to OGG Vorbis by `tools/audio/convert_music.py` (openmpt123/libopenmpt → WAV at 44.1 kHz stereo, oggenc/vorbis-tools → OGG q4). The musical content is unchanged; only the encoding differs. Music is credited to Al Mackey and is covered by the same Apache-2.0 grant as the code, so unlike the board sets there is no distribution carve-out here. `assets/music/MANIFEST.md` maps each output to its source module and to the `BALL.info` ToolType or `BALL.ASM` line that assigns it a role. - `assets/sfx/*.wav` are NOT modified. The release already ships these 17 effects as WAV in `SoundEffects/Windows_WAV/`, and `tools/audio/convert_sfx.py` copies them through byte-for-byte, changing only the filename to snake_case. Recorded here so the distinction from the music above is on the record. `assets/sfx/MANIFEST.md` maps each file to the `BALL.ASM` line that loads it. - `assets/retro/mb4_sheet*.png` are Al Mackey's two MegaBall 4 AGA sprite sheets (`Source/MegaBall4/MB4_1.IFF.AGA` and `MB4_2.IFF.AGA`) converted from IFF ILBM to PNG by `tools/art/extract_sprites.py`. The pictures are unchanged and unscaled: both are written as 8-bit palette PNGs carrying the ILBM's own 256-entry CMAP verbatim in `PLTE` and one byte of palette index per pixel, so only the container differs, and `tools/art/test_extract_sprites.py` asserts that pixel by pixel against the original. `assets/retro/palette.json` and `assets/retro/sprites.json` are data derived from those images and from `Source/MegaBall4/BALL.ASM`: the CMAP, the graphics header's `Converter` table, and the source rectangle of every sprite with the `BALL.ASM` line each was read from. `assets/retro/MANIFEST.md` records what each rectangle is and which parts of the sheets are still unaccounted for. Graphics are credited to Al Mackey and fall under the same Apache-2.0 grant as the code. - `assets/retro/mb4_font8.png` and `assets/retro/mb4_font8.fnt` are MegaBall's own typeface — the Amiga disk font `fonts/MegaBall/8`, which the game opens by name at `Source/MegaBall4/BALL.ASM:275-278` — converted from an AmigaDOS hunk file to a PNG page plus an AngelCode BMFont descriptor by `tools/art/extract_font.py`. **No glyph is redrawn, rescaled or re-laid out.** The PNG is the strike's own bitmap unchanged, 194 bytes x 8 = 1552 pixels wide and `tf_YSize` 8 rows tall, and every rect in the `.fnt` is a `tf_CharLoc` entry verbatim, so only the container differs. `assets/retro/font.json` is data derived from the same file: every `TextFont` field, and a rect, advance and kern for each of the 224 characters. `tools/art/test_extract_font.py` asserts all three against the original bit by bit, and the extractor itself re-finds twenty strings from the release's own screenshots in the decoded glyphs on every run. Graphics are credited to Al Mackey and fall under the same Apache-2.0 grant as the code. - `levels/*.tres` are Ed and Al Mackey's `.BDS` board sets decoded into Godot resources by `tools/convert_boards.py`. The board data is unchanged; only the container differs. There is **no NOTICE file** in the upstream release (verified), so no NOTICE-propagation obligation arises. ### Exclusions — material we must NOT ship 1. **Trademark.** Apache 2.0 §6 grants no trademark rights. Do not use the "MegaBall" name or logo as branding, and do not imply endorsement. 2. **Third-party board sets — DECIDED: we ship none.** The upstream licence covers work *"authored by Ed Mackey and Al Mackey"* and explicitly *"does not replace licenses on projects authored by others."* `MegaBall.guide` credits board authors by name, and many sets are contributions from Betty Mackey, Sue Rankin, Doris and Dena Ballard, Bill Grixti and his daughters, Jan Thomas, and David Putzier. **Distributable allowlist** — nothing outside it ships, and anything without explicit Ed/Al attribution is excluded by default: | File | Author | |---|---| | `MB40.BDS` | Ed Mackey — MegaBall 4 built-in set | | `MB30.BDS` | Ed Mackey — MegaBall 3.0 default set | | `old/MB21.BDS` | Ed Mackey — MegaBall 2.1 default set | | `old/TheOriginal.BDS` | Ed Mackey — MegaBall 1.0–2.0 default set | | `Eds.AGA.BDS`, `old/Eds.BDS` | Ed Mackey | | `AlsAGA.BDS` | Al Mackey | Full attribution table: `docs/reference/megaball-original.md` §1. **This restricts what we DISTRIBUTE, not what the game can LOAD.** The engine supports runtime `.BDS` import by design, so players can obtain and play any community board set themselves. Do not disable or restrict that import in the name of this exclusion — it redistributes nothing and it is how the community's thirty years of boards remain playable. 3. **`MB_Music/OctaMED_Win32_Player/Player.exe`** is third-party freeware under its own terms. Do not redistribute. Enforced by `tests/unit/test_music_asset.gd`, which walks the shipped tree and fails on any `.exe` or any path containing "octamed" — so this cannot be violated by someone copying the vendored tree into `assets/` without noticing. This file records a reading of the licence text. It is not legal advice — have a lawyer review exclusion 2 in particular before selling.