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,

Bros.Life

Well-Known Member
Member
Joined
Apr 12, 2015
Messages
223
Trophies
0
XP
862
Country
Brazil
Hi people. Could you guys tell me when this is gonna be ready for the final user? I mean, at least when you expect to be ready.
 

Tarnadas

Well-Known Member
Newcomer
Joined
Dec 21, 2016
Messages
76
Trophies
0
Age
34
Website
smmdb.ddns.net
XP
158
Country
Germany
Hi people. Could you guys tell me when this is gonna be ready for the final user? I mean, at least when you expect to be ready.

The server will be able to send 3DS format next week pretty sure, but it is still incomplete and it is just a beta server. Until it is fully functional, I will need 3-4 more weeks or so.

I don't know about @MarcusD 's plan to either wait for a full release of the server or use the beta server in his Homebrew app and as you all know, he hates httpC ;)
 
  • Like
Reactions: Sono and Zhongtiao1

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,823
Trophies
2
Location
home
XP
9,335
Country
Hungary
Installing the beta now, does OCDM have automatic updating or will I have to do it manually?

DIY, I find autoupdaters cancer... if the user feels like something is missing they could go check the thread/Github repo periodically if they need updates so much
 

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,823
Trophies
2
Location
home
XP
9,335
Country
Hungary
@MarcusD In your typedef struct MM_CourseFile, shouldn't the padding have a length of 0x3840 byte? You have 0xCE4*4=0x3390 byte.
I would otherwise get a wrong length for 3DS courses.

last time I checked the unit tests gave the right result, so idk what you're talking about... also, the offset comments in the file were made using the unit test too, so idk
 

Tarnadas

Well-Known Member
Newcomer
Joined
Dec 21, 2016
Messages
76
Trophies
0
Age
34
Website
smmdb.ddns.net
XP
158
Country
Germany
last time I checked the unit tests gave the right result, so idk what you're talking about... also, the offset comments in the file were made using the unit test too, so idk

I cannot find the unit tests, but they might give the same result, because you just check the file crc header? Since it is just a zero padding and it uses a weird crc algorithm, the crc would be the same for different file lengths.
Your files length is 0x1C (hdr) + 2 * 0x15000 (course + course sub) + 0x157C0 (thumbnails) + 0xCE4 * 4 (padding) = 0x42B6C but the 3DS files I downloaded have a length of 0x4301C
 

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,823
Trophies
2
Location
home
XP
9,335
Country
Hungary
I cannot find the unit tests, but they might give the same result, because you just check the file crc header? Since it is just a zero padding and it uses a weird crc algorithm, the crc would be the same for different file lengths.
Your files length is 0x1C (hdr) + 2 * 0x15000 (course + course sub) + 0x157C0 (thumbnails) + 0xCE4 * 4 (padding) = 0x42B6C but the 3DS files I downloaded have a length of 0x4301C

oooooh that padding! I didn't unit test all the structs, and that includes this one too... derp xD
 

Tarnadas

Well-Known Member
Newcomer
Joined
Dec 21, 2016
Messages
76
Trophies
0
Age
34
Website
smmdb.ddns.net
XP
158
Country
Germany

Attachments

  • image3ds.jpg
    image3ds.jpg
    16.5 KB · Views: 177

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,823
Trophies
2
Location
home
XP
9,335
Country
Hungary

Tarnadas

Well-Known Member
Newcomer
Joined
Dec 21, 2016
Messages
76
Trophies
0
Age
34
Website
smmdb.ddns.net
XP
158
Country
Germany
I wish I could take a look, but I have Node 7.5.0, and I get a syntax error because of that... sorry :(

But I use Babel to transpile, you should just use "npm test" to transpile automatically to your Node version and it should work. Anyway, I made another repo showing what I have:
https://github.com/Tarnadas/3ds-image
You should just type "npm start" to execute the script
 

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,823
Trophies
2
Location
home
XP
9,335
Country
Hungary
But I use Babel to transpile, you should just use "npm test" to transpile automatically to your Node version and it should work. Anyway, I made another repo showing what I have:
https://github.com/Tarnadas/3ds-image
You should just type "npm start" to execute the script

can't you please make one that's compatible with 7.5.0? without the async and promise stuff

but anyways, it seems like your bytesize used by the morton function is either too low or too high... I see you have hardcoded it as 2, but you might need to use either 1 or 4, try both first
 

Tarnadas

Well-Known Member
Newcomer
Joined
Dec 21, 2016
Messages
76
Trophies
0
Age
34
Website
smmdb.ddns.net
XP
158
Country
Germany
can't you please make one that's compatible with 7.5.0? without the async and promise stuff

but anyways, it seems like your bytesize used by the morton function is either too low or too high... I see you have hardcoded it as 2, but you might need to use either 1 or 4, try both first

Ok I'll try that tomorrow. But isn't it working now for you after npm install? :D I hate that callback hell.

I've seen that you used 1 for bytesize but you are reading from a ushort array, which would yield to a bytesize of 2 because I'm reading bytes instead of short from buffers.

Edit: Damn it, I just executed your C# program with mine, wrote both outputs to a file comparing variables and it was the same with a bytesize of 1. The times 2 is just at the wrong place... No idea what the purpose of your bytes_per_pixel variable is though. Shouldn't it be at the line return arr[(s + offs) * bytes_per_pixel] ?
 
Last edited by Tarnadas,
  • Like
Reactions: Oschara

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,823
Trophies
2
Location
home
XP
9,335
Country
Hungary
Sorry for double post, but I am so hyped right now.

I MADE IT!!

You can now download courses in 3DS format:
http://smm-test.alextc.de/api/downloadcourse?id=<course-id>&type=3ds

It is downloaded as plain bytes without compression, which should make it easy to implement in OCDM, right?

first of all, gg

second, does it support the Range HTTP header? that's what I need

for course info I just get the first 240 bytes (thumbnails aren't supported in the course list), then clicking on the course the thumbnail will be requested, and depending on the level type it should decode JPEG (not implemented yet) otherwise it'll fallback to Morton-swizzled 3DS thumbnail data

but anyways, I'll push a PHP script soon that'll be usable for knowing how OCDM works with networking shit
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    DinohScene @ DinohScene: ahh nothing beats a coffee disaronno at work