OCDM - Mario Maker 3DS course manager

OCDM stands for Online Course Database Manager

Features*:
  • import and export courses, both** 3DS and WiiU
  • cryptofix saves (if the game marked your save as "corrupted")
    • Note: this will overwrite the LockoutID in your courses, not in the save file, so please be fair and don't reupload others' courses :)
  • make/apply save snapshots (exports all files which are used in the save)
    • Note: please format your save data before restoring your save otherwise the game could mark your save as "corrupted", and this one is not cryptofixable
  • browse SMMDB
    • download courses
    • discontinued

*: these features are in the latest build at the time of editing this post, so functionality in the public build could differ
**: due to differences in the 3DS and the WiiU version, importing a converted course file on a foreign platform could crash the game on loading the course


bf9dd7f81f.jpg

dfa53dcd86.jpg

82f4e899ed.jpg

2d84f7a0f6.jpg

9f7d574fee.png

fd529e16c1.png

3e10674a00.png

fd5ea7441e.png

d593f2b5ff.png

f4b4b4fcf4.jpg



[Download] (not supported anymore)​
 
Last edited by Sono,
I see you use a JSON library in that DiscordCTR project. Is there any chance you will use my JSON API instead of using a difficult method with range headers?

I might just wipe the current networking code and end up hardcoding your stuff because I'm so fed up with HTTP shit
 
What's the max number of objects in a course file that OCDM can successfully inject into SMM 3ds?

Sent from my Q5 using Tapatalk 2
 
He said earlier in the thread though that at a point OCDM crashes

Sent from my Q5 using Tapatalk 2
If a lightweight homebrew application crashes due to many files then it's probably a huge number you won't even be able to stumble unless you set your goal to do that.
 
What's the max number of objects in a course file that OCDM can successfully inject into SMM 3ds?

In fact there is an array to store tile data which has a size of 0x14500 / 0x20 = 2600.
The wiki says there are lower limits, but you can pretty sure suppress these limits by manually changing course files out of SMM. You can for example have an unlimited amount of checkpoints. You just have to add them with e.g. a hex editor. Or you can move the start and goal platforms to a location that wouldn't be possible in game. The game still won't crash is the funny thing.

@MarcusD are you aware of a course conversion bug? It involves course meta data, probably Mii/ country. User @KJ1 told me that some courses aren't converted properly, but courses from my server are just fine.
I use the same conversion as you, but I drop any value, that I'm not 100% sure about, which is why it works.
Look at the properties of the course object here:
https://github.com/Tarnadas/cemu-smm/blob/dev/src/course.js
I store timestamp, title, maker, game style, course theme, course theme sub, time, autoscroll, autoscroll sub, width, width sub for course meta data. Any other value will be dropped
 
Last edited by Tarnadas,
  • Like
Reactions: KJ1
In fact there is an array to store tile data which has a size of 0x14500 / 0x20 = 2600.
The wiki says there are lower limits, but you can pretty sure suppress these limits by manually changing course files out of SMM. You can for example have an unlimited amount of checkpoints. You just have to add them with e.g. a hex editor. Or you can move the start and goal platforms to a location that wouldn't be possible in game. The game still won't crash is the funny thing.

@MarcusD are you aware of a course conversion bug? It involves course meta data, probably Mii/ country. User @KJ1 told me that some courses aren't converted properly, but courses from my server are just fine.
I use the same conversion as you, but I drop any value, that I'm not 100% sure about, which is why it works.
Look at the properties of the course object here:
https://github.com/Tarnadas/cemu-smm/blob/dev/src/course.js
I store timestamp, title, maker, game style, course theme, course theme sub, time, autoscroll, autoscroll sub, width, width sub for course meta data. Any other value will be dropped

I'm aware of it, I just can't grasp where I fucked up (such as Mii data shall *not* be touched because it's supposed to be the same across platforms, or I'm swapping bytes in a way which I shouldn't), it's just hard to do without too many courses which are missing fields like Mii data or the unknown ones to compare to.
 
Ok I looked into it and here are some thoughts:

  • 0x20 - 0x23: looks really weird to me. On Wii U I found values like 0x01000000 and on 3DS 0x00000300 or 0x00000100. I think those are two 16 bit values. They might store upload/download properties (whether you uploaded or downloaded that course to Nintendo servers). I think they both need a swap16()
  • 0x24 - 0x27: they pretty sure need a swap32(). On Wii U I found 0x00000005 and on 3DS I found 0x05000000. No idea what it stores.
  • 0x6C - 0x6F: they don't seem to need a swap, however I have no idea what they store.
  • 0x72 - 0x73: swap16()? On Wii U I found 0x0300. On 3DS I don't have enough courses to check.
  • 0x78 - 0xEC: why in the world does this have same endianness? Seems correct to me.
 
Btw, in both, courses either converted from OCDM or from @Tarnadas server, it shows Mii as a "?" and country flag always as Japan; and Maker's Name as "???".. so, I guess Mii data isn't the problem..
 
Ok I looked into it and here are some thoughts:

  • 0x20 - 0x23: looks really weird to me. On Wii U I found values like 0x01000000 and on 3DS 0x00000300 or 0x00000100. I think those are two 16 bit values. They might store upload/download properties (whether you uploaded or downloaded that course to Nintendo servers). I think they both need a swap16()
  • 0x24 - 0x27: they pretty sure need a swap32(). On Wii U I found 0x00000005 and on 3DS I found 0x05000000. No idea what it stores.
  • 0x6C - 0x6F: they don't seem to need a swap, however I have no idea what they store.
  • 0x72 - 0x73: swap16()? On Wii U I found 0x0300. On 3DS I don't have enough courses to check.
  • 0x78 - 0xEC: why in the world does this have same endianness? Seems correct to me.

At least one of those would be the course clear check right? I'd assume the first one. The third one may be the mii and country data.

Sent from my Q5 using Tapatalk 2
 
everyone's talking about this complex stuff and yet regular course duplicating still seems to not work for me, feels bad man
 
everyone's talking about this complex stuff and yet regular course duplicating still seems to not work for me, feels bad man

I don't know a lot about the 3ds SMM Save structure, but I would assume it doesn't work, because you can only overwrite existing courses, but you cannot copy to an empty slot.

That's the same behavior as for Wii U. In the main save file there is a structure indicating which slot belongs to what course file.
 
I don't know a lot about the 3ds SMM Save structure, but I would assume it doesn't work, because you can only overwrite existing courses, but you cannot copy to an empty slot.

That's the same behavior as for Wii U. In the main save file there is a structure indicating which slot belongs to what course file.

Oh, that actually seemed to be the problem. Thanks. Carry on.
 

Site & Scene News

Popular threads in this forum