Get the app
MCCP, the Moddable Console Capture Platform: the overlay the mods on this site are for. Download it, point
it at your capture card, and help yourself to anything on the mod list - no account needed to
download either one. Signing in is only for uploading a mod of your own, or voting and
commenting on somebody else's.
Linux
MCCP-linux-x86_64.tar.gz
- 0.3.0
2.63 MB, 2026-08-17
Windows
MCCP.zip
- 0.3.0
2.04 MB, 2026-08-17
What changed
0.3.0
Added
- Linux build, as its own download (tarball, own README).
- Capture resolution setting (Options > Video), per card. Was: always the
card's own pick. Now: pick a size when the console's output changes and
the card cannot convert; reopens the device live.
- Hover explanations on Options settings, shown beside the panel.
- Mods: type = "row", a layout container that centres its children and
draws its own background.
- Mods: type = "rect", a filled rectangle with no click area.
- Mods: tip = "..." on any widget, for those hover explanations.
- Mods: multi-select setting (kind = "multi") for non-exclusive answers.
- Mods: overlay.textHeight / textLines - how tall a string wraps to.
- Mods: sound.play() for one-shot WAVs, and OnWheel on overlay elements.
- Mods: panels can be dragged (movable = false to pin) and resized
(resizable = true).
- Mods: skins can use art (bgImage) and set fgHover; overlay.themeColor /
themeNum / themeStr read the active skin.
- Mods: OVERLAY_OPEN global.
- Edit mod can add images to a published mod's page. Was: art only at first
upload. Now: any time.
- Mod versions: version = 1.2.3 in mod.txt. Required to upload, must be new,
and decides which copy loads when a folder and a .ccmod share a name.
- CC_FAKE_FRAME serves a PNG (or a ';'-separated playlist) as the video, for
testing without the card. CC_MUTE=1 silences a run. CC_DATA_ROOT runs a
second copy beside the first.
Fixed
- Developer console did nothing when clicked. Was: opened behind the
fullscreen window, or was refused outright and said nothing. Now: opens in
front, and closing it actually closes the window.
- A panel's clickable area could be dragged off the panel by one pixel of
pointer travel during a click, leaving every click landing on the wrong
thing. Was: any element with bounds was draggable. Now: a press must
travel before it counts as a drag, and only what the engine draws is
movable.
- List rows placed their text by hand-computed offsets, so a title that
wrapped to three lines was drawn into the row above it. Now: the engine
owns row geometry.
- A mod setting's label ran underneath its own control. Now: measured, given
a box that stops before the control, and the row grows for two or three
lines.
- Upload put the previous folder's name in the Title field, so a mod could
be published under another mod's name. Now: Title starts empty.
- capture.isOpen() said no while a picture was on screen, which hid the game
selector and the panels behind it.
- The overlay title painted over panels instead of behind them.
- A skin's bgActiveHover was ignored (the engine asked for a key no skin
writes).
- Pinned panels could be clicked into but not typed into; Escape quit the
program instead of reaching the field.
- Packages made by Windows zip tools were refused as malformed.
- .lua files over 16 KB could not be embedded in the build.
Improved
- P (plain screenshot) saves the raw capture frame at the frame's own size.
Was: a photo of the window, which is a bilinear upscale whenever the two
sizes differ. O still photographs the window, overlay included.
- Picture is letterboxed, not stretched. Was: scaled per axis, so a 4:3
source came out wide. Mods find it with camera.pictureRect().
- With VSync on, the picture is about a frame fresher (measured 22 ms -> 6 ms
card-to-screen at 60 Hz). Toggle: Options > Grab late (VSync).
- Mod :Think runs at the start of a frame instead of mid-draw, so a heavy mod
slows itself rather than the video.
- My mods and Download mods scroll. Was: eight rows and "narrow the filter".
Now: the wheel moves the list and it says where you are.
- Mod lists stripe alternate rows and show the folder name when it differs
from the site title.
- Text can be selected in every input: drag, shift-arrows, Ctrl+A, copy, cut.
Refused on password fields.
- Sticky notes remember where they were dragged and what size they were
pulled to.
- Editing a mod is one form and one Save: page, package and changelog
together.
- My mods works signed out (listing and downloading never needed an account).
- Cartridge art comes from the site first, so it is the same on every
machine.
- Mod settings header says which copy is running: version, and .ccmod or
file.
Changed
- The app is MCCP - Moddable Console Capture Platform. The executable is
MCCP.exe. The .ccmod extension and the /api/mccp endpoints keep their
names.
- The window title says which cartridge is selected.
- The app has an icon.
- KeyPress reaches mods while the overlay is open; mods filter on
OVERLAY_OPEN themselves. A focused text box still takes the key first.
- One instance per data root, on Linux as well as Windows. Two copies with
different roots can run side by side.
- The menu column can be moved and reshaped by a skin (row or column, any
edge).
- Buttons say what they mean (role = "active" / "danger") so a skin can
restyle the engine's own panels.
Removed
- The app no longer ships mods. Screenshots and sticky notes are downloads
like anything else, and the face-filter demo is gone.
0.2.0
- Text boxes edit like text boxes: click to place the caret, arrow keys
move it (Up/Down keep the column in multiline boxes), Home/End jump
within the line, Backspace/Delete/paste/Enter all work at the caret
instead of only at the end.
- Text boxes scroll instead of clipping: long single-line values slide to
keep the caret visible, multiline boxes scroll by lines (mouse wheel, or
the caret pulls its line into view), and corner ticks mark hidden text
above or below.
- After a successful mod upload the panel closes and comes back blank,
ready for the next mod instead of holding the last one's form.
- Clicking the selected cartridge pops it back out: no game selected, no
mod reading the screen - the state to watch something none of your
mods understand.
- The dasmaffin.com entry is now "Workshop", and it swaps the menu over
to the three site buttons (with "< Back" as the way home) instead of
unfolding under itself - fewer buttons on screen, not more.
- The mod list is now two panels: "My mods" manages what is on this
machine (Update, Push update, Uninstall), "Download mods" is only for
fetching what isn't. A downloaded mod moves from one to the other.
- Every mod row has an Edit button: change the title, description and
games of your mod's site page from inside the app, or delete the
listing outright (armed behind a second press; what's installed here
stays). The package itself still updates via Push update.
- My mods no longer demands an account: what is installed here is a
fact about this machine, so the list (and Uninstall) work signed out.
Signing in adds the site-side extras - real titles, Update, Push
update, Edit.
- Download mods needs no account either now: it browses the site's new
public list (search-ready API; the panel filters by title), and
downloading was always anonymous. Signing in only adds Edit on the
rows you own.
- New tool: ccmod-extract.exe. Drag a .ccmod onto it and the raw files
come back in a folder of the same name next to it - nothing is ever
overwritten, and archive entries with hostile paths are refused.
- The status line no longer follows you between panels: "Uninstalled
X." belongs to the panel you did it in, not to whatever you open
next. Opening any panel starts it clean.
- A freshly downloaded mod's cartridges get their site icons right
away instead of after the next restart - including the one that used
to stay text when the cartridge drew a frame before its icon file
had finished arriving. Icon files are also written atomically now,
so a half-written one can never be picked up.
- Edit mod now updates the files too: an "Update the package from"
dropdown (default "No update") lists your addon folders, and Push
files sends the chosen one as the mod's new package - no more
needing a folder named exactly like the package. Upload stays what
it says: new mods only.
- Deleting a mod from the site now asks you to type its title back,
GitHub-style: the button that actually deletes only exists once the
box matches.
- Mods that aren't about a game can say so: registering the game
"base" gives no cartridge and runs always, whatever is or isn't
selected. (The site lists base as "Anything not game related.")
- Downloaded mods land beside the program, like every other modding
tool, and the log says the folder outright ("Mods folder: ..."). The
old rule pointed a shipped build at the machine it was BUILT on,
where nothing would ever appear.
- O takes a screenshot with the overlays drawn in (panels, route list);
P stays the clean picture. Mods can ask for either via
screenshot(path, { overlay = true }).
- The resolution dropdown shows the ACTUAL mode, snapping back after a
revert instead of remembering the failed pick; every display change
(apply, resolution, keep, revert, timeout) now writes a log line.
- Updating a mod keeps your cartridge selected: the swap remembers the
active game and re-selects it once the new package is up.
- Startup log reads in the order things happen: the first frame is
announced before mods process it, a package's mount summary comes before
its skipped-files note, and the video-size line no longer claims a
"resize" on the first frame.
- Push update in My mods: a dev folder whose mod is already on the site
replaces its package there in one click - no duplicate mods.
- The app and the Pokemon mod both show their version (overlay title /
route list header), so "did the update take?" has a visible answer.
- The My mods panel says what each mod is on this machine (installed, dev
copy, draft), offers Update instead of a second Download, and can
Uninstall a downloaded mod (never a dev folder; the mod's data survives).
- Uninstall and Update take effect immediately: the mod's panels, hooks,
workers and cartridges leave (or swap) without a restart.
- Cartridges without their own art use the game's icon from the site,
cached locally while any installed mod uses that game.
- A filter box appears in My mods once there is more than one mod.
- Layout fixes in the My mods panel (clipped subtitle, cramped rows).
- Pokemon mod: stat stages survive long bag/summary detours - the battle
text (faints, escapes, catches, new fighters) decides when knowledge is
dropped, not a timer.
- Pokemon mod: when route info is on but no route is known yet, the
overlay says so and how to fix it instead of showing nothing.
- Pokemon mod: a long location name in the route list header is cut with
".." instead of running under the game/version tags
("CERULEAN CITYfGreen").
0.1.1
- Downloaded mods load immediately - no restart, the cartridge just appears.
- Accented letters render in the overlay (a mod called "Pokémon statistics"
now reads like one).
- The overlay menu groups everything dasmaffin.com under one entry, and
"My site mods" is now just "My mods".
0.1.0 - first published build
The viewer:
- Shows your capture card with ~1 frame of software latency, with audio
passthrough. Low-latency mode (vsync off) is a toggle in Options.
- Steam-style overlay: Options, and everything dasmaffin.com under one
submenu - your account, uploading a mod, downloading your mods.
- Every session writes log.txt beside the exe (previous session kept as
log.prev.txt), so problems can be reported with evidence.
Modding:
- Lua mods in addons/, one shared environment like GMod. Full API reference
ships in docs/api.html.
- Real multithreading for mods: workers run on their own core with their own
Lua state; the main thread never waits.
- Downloaded mods arrive as a single .ccmod file and load from it in place -
folders are yours, packages came from the site.
- Upload straight from the overlay: pack, screenshots, publish.
The Pokemon FireRed/LeafGreen mod (download it from the site):
- Reads the battle off the screen: species, levels, stat panels with real
ranges, stat stages from the battle text, accuracy/evasion with hit
chances, status conditions by pill colour with Gen 3's real penalties.
- Catch calculator above the enemy box: min-max odds for the three balls,
using the game's own formula and the HP bar's actual pixels.
- Route list with per-floor encounter odds (Mt Moon's Paras really is 5%
on 1F and 100% on B1F), caught tracking with clickable Poke Balls, and
hover popups showing everywhere else a species lives.
Mods are made by whoever uploads them, not by us, and nothing is checked by hand before
it appears. What we do is act on reports: anything somebody reports gets read, and a
mod that turns out to be malicious or to use somebody else's work is hidden or removed.
If you would rather look before you run something, you can. A mod is a package, and the client
ships an unpacking tool - open one up and read what is in it first.