# factor-64/mm2-snes-editor architecture

> Architecture diagram of the GitHub repository factor-64/mm2-snes-editor, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/factor-64/mm2-snes-editor
- Repository: https://github.com/factor-64/mm2-snes-editor

## Overview

MM2 SNES Editor is a work-in-progress desktop editor for an unreleased Mega Man 2 SNES port. Users load a ROM, optionally load JSON or palette data, edit level graphics, palettes, layouts, scrolling, objects and checkpoints, then export edited ROMs or individual data sets. The graph groups the UI/orchestration, SNES asset decoding and rendering, level-domain data, and ROM metadata/edit support. App internals are only partially sampled, so unsampled feature wiring is shown at the app boundary rather than inferred in detail.

Main entry points: [`src/app.cpp`](https://github.com/factor-64/mm2-snes-editor/blob/master/src/app.cpp) (Editor app), [`src/ui/mainmenu.cpp`](https://github.com/factor-64/mm2-snes-editor/blob/master/src/ui/mainmenu.cpp) (Main menu), [`src/undoredo.cpp`](https://github.com/factor-64/mm2-snes-editor/blob/master/src/undoredo.cpp) (Undo redo), [`src/imageloader.cpp`](https://github.com/factor-64/mm2-snes-editor/blob/master/src/imageloader.cpp) (Image loading)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Editor UI"]
  node_app["Editor app<br/>[app.cpp]"]
  node_menu["Main menu<br/>[mainmenu.cpp]"]
  node_undo["Undo redo<br/>[undoredo.cpp]"]
end

subgraph group_graphics["Graphics pipeline"]
  node_image["Image loading<br/>[imageloader.cpp]"]
  node_tiledecode["Tile decoding<br/>[tiledecoder.cpp]"]
  node_tilemap["Tilemap rendering<br/>[tilemap.cpp]"]
  node_palette["Palette decoding<br/>[cgramdecoder.cpp]"]
end

subgraph group_level["Level editing"]
  node_leveldata["Level layout<br/>[level.cpp]"]
  node_objects["Objects<br/>[objects.cpp]"]
  node_checkpoint["Checkpoints<br/>[checkpoint.cpp]"]
  node_collision["Collision data<br/>[collision.h]"]
end

subgraph group_rom["ROM data"]
  node_romdata["Game data definitions<br/>[mm2data.cpp]"]
  node_address["SNES addresses<br/>[address.cpp]"]
  node_header["ROM header"]
end

node_user(("Editor user"))
node_romfile["ROM file"]
node_jsonfile["Editor JSON<br/>[MM2 SNES.json]"]
node_palettefile["Palette file"]
node_editedrom["Exported ROM"]

node_user -->|"edits and exports"| node_app
node_app -->|"draws menu"| node_menu
node_app -->|"loads ROM"| node_romfile
node_app -->|"loads config"| node_jsonfile
node_app -->|"loads palette"| node_palettefile
node_app -->|"reads header"| node_header
node_app -->|"uses definitions"| node_romdata
node_app -->|"resolves addresses"| node_address
node_app -->|"decodes graphics"| node_tiledecode
node_app -->|"decodes palettes"| node_palette
node_app -->|"renders views"| node_tilemap
node_app -->|"loads images"| node_image
node_app -->|"edits layouts"| node_leveldata
node_app -->|"edits objects"| node_objects
node_app -->|"edits checkpoints"| node_checkpoint
node_app -->|"edits collision"| node_collision
node_app -->|"tracks changes"| node_undo
node_app -->|"exports ROM"| node_editedrom

click node_app "https://github.com/factor-64/mm2-snes-editor/blob/master/src/app.cpp"
click node_menu "https://github.com/factor-64/mm2-snes-editor/blob/master/src/ui/mainmenu.cpp"
click node_undo "https://github.com/factor-64/mm2-snes-editor/blob/master/src/undoredo.cpp"
click node_image "https://github.com/factor-64/mm2-snes-editor/blob/master/src/imageloader.cpp"
click node_tiledecode "https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/tiledecoder.cpp"
click node_tilemap "https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/tilemap.cpp"
click node_palette "https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/cgramdecoder.cpp"
click node_leveldata "https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/level.cpp"
click node_objects "https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/objects.cpp"
click node_checkpoint "https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/checkpoint.cpp"
click node_collision "https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/collision.h"
click node_romdata "https://github.com/factor-64/mm2-snes-editor/blob/master/src/mm2data.cpp"
click node_address "https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/address.cpp"
click node_header "https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/snesheaderreader.cpp"
click node_jsonfile "https://github.com/factor-64/mm2-snes-editor/blob/master/json/MM2%20SNES.json"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_menu,node_undo,node_user toneBlue
class node_image,node_tiledecode,node_tilemap,node_palette toneAmber
class node_leveldata,node_objects,node_checkpoint,node_collision toneMint
class node_romdata,node_address,node_header toneRose
class node_romfile,node_palettefile,node_editedrom toneIndigo
class node_jsonfile toneTeal
```

## Components

### Editor UI

- [Editor app](https://github.com/factor-64/mm2-snes-editor/blob/master/src/app.cpp): `src/app.cpp`
- [Main menu](https://github.com/factor-64/mm2-snes-editor/blob/master/src/ui/mainmenu.cpp): `src/ui/mainmenu.cpp`
- [Undo redo](https://github.com/factor-64/mm2-snes-editor/blob/master/src/undoredo.cpp): `src/undoredo.cpp`

### Graphics pipeline

- [Image loading](https://github.com/factor-64/mm2-snes-editor/blob/master/src/imageloader.cpp): `src/imageloader.cpp`
- [Tile decoding](https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/tiledecoder.cpp): `src/snes/tiledecoder.cpp`
- [Tilemap rendering](https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/tilemap.cpp): `src/snes/tilemap.cpp`
- [Palette decoding](https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/cgramdecoder.cpp): `src/snes/cgramdecoder.cpp`

### Level editing

- [Level layout](https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/level.cpp): `src/game/level.cpp`
- [Objects](https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/objects.cpp): `src/game/objects.cpp`
- [Checkpoints](https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/checkpoint.cpp): `src/game/checkpoint.cpp`
- [Collision data](https://github.com/factor-64/mm2-snes-editor/blob/master/src/game/collision.h): `src/game/collision.h`

### ROM data

- [Game data definitions](https://github.com/factor-64/mm2-snes-editor/blob/master/src/mm2data.cpp): `src/mm2data.cpp`
- [SNES addresses](https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/address.cpp): `src/snes/address.cpp`
- [ROM header](https://github.com/factor-64/mm2-snes-editor/blob/master/src/snes/snesheaderreader.cpp): `src/snes/snesheaderreader.cpp`

### Other components

- **Editor user**
- **ROM file**
- [Editor JSON](https://github.com/factor-64/mm2-snes-editor/blob/master/json/MM2%20SNES.json): `json/MM2 SNES.json`
- **Palette file**
- **Exported ROM**

## Connections

- Editor user → Editor app: edits and exports
- Editor app → Main menu: draws menu
- Editor app → ROM file: loads ROM
- Editor app → Editor JSON: loads config
- Editor app → Palette file: loads palette
- Editor app → ROM header: reads header
- Editor app → Game data definitions: uses definitions
- Editor app → SNES addresses: resolves addresses
- Editor app → Tile decoding: decodes graphics
- Editor app → Palette decoding: decodes palettes
- Editor app → Tilemap rendering: renders views
- Editor app → Image loading: loads images
- Editor app → Level layout: edits layouts
- Editor app → Objects: edits objects
- Editor app → Checkpoints: edits checkpoints
- Editor app → Collision data: edits collision
- Editor app → Undo redo: tracks changes
- Editor app → Exported ROM: exports ROM
