# Technology Stack

**Analysis Date:** 2026-05-01

This is a brownfield archive of **Brand New Online (BNO)**, a Mega Man Battle Network–themed multiplayer game. The repository spans three distinct era subsystems plus a parallel reverse-engineering pipeline. There is no single unified stack — each subsystem has its own.

## Subsystem Map

| Subsystem | Path | Era | Stack |
|---|---|---|---|
| Original GameMaker game (client + server) | `legacy/open-source-release/`, `legacy/source-archive/`, `legacy/servers/` | 2008–2014 | GameMaker 5.3a / GML / Delphi 5 runner |
| Abandoned Unity port | `legacy/unity-project/` | 2014-12 → 2017-05 | Unity 5.3.4f1 / C# (.NET 3.5) / Photon |
| Maya asset pipeline (fed Unity port) | `legacy/maya-project/` | 2014–2016 | Autodesk Maya 2015 |
| Reverse-engineering knowledge base | `decomp/` | 2026 (current) | Markdown documentation only — no code |
| Mirror/provenance tooling | `legacy/.mirror.js`, `legacy/.mirror-fix.js` | 2026-05-01 | Node.js (ESM) |

## Languages

**Primary (legacy game):**
- **GameMaker Language (GML)** — 5.x dialect, interpreted by the Delphi 5 runner. Source lives serialized inside `.gmd` files; loose `.gml` examples exist at `legacy/source-archive/BNO/mb_rcollapse.gml`, `mb_tcollapse.gml`, `mb_trise.gml`.
- **Delphi 5** (Pascal) — runtime stub language. Not present as source; binary only inside each `BN Online *.exe`.

**Unity port:**
- **C#** targeting `<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>` per `legacy/unity-project/Assembly-CSharp.csproj` line 13. 11 `.cs` scripts total under `legacy/unity-project/Assets/_Scripts/` and adjacent `Player/Scripts/`, `Platforms/_Platform Scripts/`, `Editor/`.
- **HLSL/ShaderLab** — 7 shaders under `legacy/unity-project/Assets/_Shaders/` (`HeightColor.shader`, `HeightPlayer.shader`, `HeightTest.shader`, `Outline.shader`, `UnlitAlphaWithFade.shader`, `deepTile_glass_custom.shader`, `testShader.shader`).

**Tooling / scripts:**
- **JavaScript (Node ESM)** — `legacy/.mirror.js`, `legacy/.mirror-fix.js`. Uses `node:fs`, `node:path`, `node:child_process`, top-level `fetch`. No `package.json` — runs as standalone scripts.
- **MEL (Maya Embedded Language)** — `legacy/maya-project/workspace.mel` defines a Maya 2015 project. No additional `.mel` scripts.

**Documentation:**
- **Markdown** throughout `decomp/` (single root spec + 18 wiki pages under `decomp/wiki/`).

## Runtimes

**GameMaker 5.3a runner** — Delphi 5 native Win32 stub with appended ZLIB+XOR-obfuscated payload. Targets Windows XP era kernel; Windows 95 explicitly dropped per `decomp/wiki/06-gml-syntax-5x.md`. Installer for the IDE is shipped in-tree at `legacy/open-source-release-extras/Game Maker 5.3a/gmaker5.3a.zip` with `registration.txt` sibling. Game executes its own GML stack VM (no native compilation).

**Unity Editor 5.3.4f1** — pinned by `legacy/unity-project/ProjectSettings/ProjectVersion.txt` (`m_EditorVersion: 5.3.4f1`, `m_StandardAssetsVersion: 0`). Mono-based (`PLATFORM_SUPPORTS_MONO`, `ENABLE_MONO` defines in csproj). Targets Windows standalone (`UNITY_STANDALONE_WIN`) and Android (two `.apk` builds in `legacy/unity-project/Test Builds/Android/`).

**.NET 3.5 / Mono** — implied by `<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>` in every csproj. Standard refs: `System`, `System.XML`, `System.Core`, `System.Xml.Linq`.

**Node.js** — version unspecified. Mirror scripts use top-level `await`, top-level `fetch`, and ESM `import` syntax (`legacy/.mirror.js` line 3) — implies Node 18+.

**Autodesk Maya 2015** — declared verbatim in `legacy/maya-project/workspace.mel` line 1: `//Maya 2015 Project Definition`.

## Frameworks & Engines

**Game engine (legacy):**
- **GameMaker 5.3a IDE** (proprietary, closed-source, GUI-only — no CLI build per `decomp/wiki/01-runner-architecture.md`).
- Asset/source format: `.gmd` (monolithic ZLIB-compressed binary). Auto-backups: `.gb1` … `.gb9`.
- DnD (Drag-and-Drop) visual scripting nodes serialized as binary action blocks.

**Game engine (Unity port):**
- **Unity 5.3.4f1** with these features enabled per csproj DefineConstants (line 22): `ENABLE_PHYSICS`, `ENABLE_TERRAIN`, `ENABLE_SPRITES`, `ENABLE_VR`, `ENABLE_RAKNET`, `ENABLE_UNET`, `ENABLE_CLOUD_SERVICES_*`, `ENABLE_MICROPHONE`, `ENABLE_WEBCAM`, `INCLUDE_IL2CPP`, `INCLUDE_DIRECTX12`.
- **Photon (Exit Games)** — `Photon3Unity3D.dll` shipped at `legacy/unity-project/Assets/Plugins/`. (Note: not actively referenced in the surviving 11 scripts; `NetMenu.cs` uses Unity's built-in `Network.*` API and `UnityEngine.Networking` instead. Photon is bundled but appears unused by extant code.)
- **UNet** (`UnityEngine.Networking`) — referenced in `Assembly-CSharp.csproj` line 70; used by `Assets/_Scripts/Networking/SerializePlayer.cs` (`NetworkBehaviour`, `isLocalPlayer`).
- **Legacy Unity Networking** (`Network.Connect`, `Network.InitializeServer`, `OnConnectedToServer`) — used by `Assets/_Scripts/Networking/NetMenu.cs`.

**3D content pipeline:**
- **Autodesk Maya 2015** — rigging, animation, asset export. 11 `.mb` (Maya Binary) scenes under `legacy/maya-project/scenes/` (megaman rig v001–v005, anim v001–v005, latlong render).
- Export pipeline produces `.obj` to `legacy/maya-project/scenes/export_to_unity/` (~20 tile/portal `.obj` files), then `.fbx` (`legacy/unity-project/Assets/_Animations/megaman_anim_v005.fbx`).
- Image source files: `.psd` paired with baked `.png` under `legacy/maya-project/sourceimages/`.

## Build & Tooling

**GameMaker 5.3a:** No CLI, no batch export, no makefile. Builds executed manually in IDE. No version control was used (`legacy/README.md` line 109: "No git/SVN history. Versioning was filename-based").

**Unity:** Builds via Unity Editor only. Multiple `.csproj` (Assembly-CSharp, Assembly-CSharp-Editor, Assembly-CSharp-vs, Assembly-CSharp-Editor-vs) and `.sln` files (`BNO Unity Project.sln`, `BNO Unity Project-csharp.sln`) exist. Many `*conflicted copy*` duplicates from Dropbox sync — not real branches. `MSBuildToolsPath` import in csproj line 76 implies MSBuild compatibility, but actual build path is Unity Editor.

**Node mirror scripts:** Run directly with `node legacy/.mirror.js`. No `package.json`, no lockfile, no `node_modules`. Output: `legacy/.mirror-report.json`.

**Maya:** GUI-only. `workspace.mel` is consumed by Maya at scene open.

## Package Managers

**None present in repo.**
- No `package.json`, `requirements.txt`, `Cargo.toml`, `go.mod`, `pyproject.toml`, `*.yyp`, or any other manifest.
- No `node_modules/`, no virtualenv, no Cargo `target/`.
- Unity's `Library/` cache exists at `legacy/unity-project/Library/` but is regenerable.
- The GameMaker 5.3a IDE itself shipped no package ecosystem; extensions like `39dll.dll` were dropped into project folders by hand.

## Configuration Files

**Unity:**
- `legacy/unity-project/ProjectSettings/*.asset` — 17 standard Unity settings assets (`AudioManager`, `InputManager`, `NetworkManager`, `Physics2DSettings`, `QualitySettings`, `TagManager`, `TimeManager`, `UnityAdsSettings`, `UnityConnectSettings`, etc.).
- `legacy/unity-project/ProjectSettings/ProjectVersion.txt` — Editor version pin.
- `legacy/unity-project/BNO Unity Project.userprefs` — IDE prefs.

**GameMaker game runtime config (proprietary binary):**
- `Settings.bno` / `MSettings.bno` (in every server snapshot) — server config.
- `localList.txt`, `remoteList.txt` (e.g. `legacy/open-source-release/localList.txt`) — plaintext alternating username/password lists used as account whitelists.
- `Server_Status.txt`, `server_log.txt`, `DebugLog.txt` — runtime logs.

**Repo-level:**
- `.gitignore` (project root) — single line: `legacy/`. The legacy archive is intentionally git-ignored.
- No `.git/` (the report says "Is directory a git repo: No").

## Platform Targets

| Subsystem | Build target | Evidence |
|---|---|---|
| GameMaker game | Win32 PE (Windows XP era) | `BN Online Client 5-8.exe`, `BN Online Master 5-4a.exe` |
| Unity port — Standalone | Windows x86 | `legacy/unity-project/Test Builds/Windows/NetTestBuild.exe`, `player_win_x86.pdb` |
| Unity port — Mobile | Android APK | `Test Builds/Android/test_2015-04-04.apk`, `test_2015-04-06.apk` |
| Mirror scripts | Cross-platform Node, but hardcoded Windows paths in `legacy/.mirror.js` line 7 (`C:\\Users\\decid\\...`) | — |

## Versions At a Glance

- GameMaker IDE: **5.3a** (final binary versions: Master `5-4a`, Client `5-8`, both 2014-12-14)
- Unity Editor: **5.3.4f1** (pinned)
- .NET / Mono target: **3.5**
- Maya: **2015**
- Node: 18+ inferred (not pinned; no `.nvmrc`)
- 39dll: version not labeled in archive (DLL is binary-only at `legacy/open-source-release/39dll.dll` and every server dir)

## Unclear / Not Determined

- **39dll exact version** — multiple `39dll.dll` copies (binary, undated) in `open-source-release/`, `servers/enlyzeam-current/`, `servers/enlyzeam-archive/`, `servers/local-current/`. Likely all the same build; not verified.
- **Photon SDK version** — `Photon3Unity3D.dll` (with `.mdb`, `.pdb`, `.xml` siblings) version not extracted; bundled but not invoked by any surviving `.cs`.
- **Whether the Unity port ever connected to the GameMaker server** — `NetMenu.cs` defaults to `decidel.com:49009` over Unity's old built-in `Network`, which is incompatible with the GML 39dll wire protocol. Likely a fresh start, not a bridge.

---

*Stack analysis: 2026-05-01*
