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,829
Trophies
2
Location
home
XP
9,428
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,829
Trophies
2
Location
home
XP
9,428
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,829
Trophies
2
Location
home
XP
9,428
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: 178

Sono

cripple piss
OP
Developer
Joined
Oct 16, 2015
Messages
2,829
Trophies
2
Location
home
XP
9,428
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,829
Trophies
2
Location
home
XP
9,428
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,829
Trophies
2
Location
home
XP
9,428
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
  • Psionic Roshambo @ Psionic Roshambo:
    I thought PS4/5 and Xbox One emulation would be kind of easy since they basically just a PC
  • ColdBlitz @ ColdBlitz:
    they sorta are a pc
  • K3Nv2 @ K3Nv2:
    They haslve dedicated on board chips that aren't tweaked like x64/x32 afaik
  • ColdBlitz @ ColdBlitz:
    but its a custom os for both of them
  • ColdBlitz @ ColdBlitz:
    designed for only specific hardware
  • ColdBlitz @ ColdBlitz:
    so you have to learn to emulate that specific hardware which isn't as easy as you'd think
  • K3Nv2 @ K3Nv2:
    It's a locked down Linux distro basically
  • Psionic Roshambo @ Psionic Roshambo:
    I think the only custom hardware is to do with the SSD and a security chip
  • Psionic Roshambo @ Psionic Roshambo:
    Probably combined in one chip
  • K3Nv2 @ K3Nv2:
    They place married security chips onto boards iirc
  • Psionic Roshambo @ Psionic Roshambo:
    Damn Frontier is offering 5Gbps now lol
  • K3Nv2 @ K3Nv2:
    I honestly can't recommend any of the big 3 this years I'd say buy a rog ally z1 if we're being honest
  • Psionic Roshambo @ Psionic Roshambo:
    Honestly after the PS3 and 360 I just went full PC
  • K3Nv2 @ K3Nv2:
    Every games basically cross platform they only have about 6 titles making it worth the $600 price tag
  • Psionic Roshambo @ Psionic Roshambo:
    Didn't see much need for a console, all the advantages have kind of disappeared
  • ColdBlitz @ ColdBlitz:
    the ps3 used to support installing linux because the cpu was so powerful
  • K3Nv2 @ K3Nv2:
    Then the games are $70 and they want to reboot and refresh the same game every year
  • K3Nv2 @ K3Nv2:
    The ps3 was always Linux they just found a way to make it open source
  • ColdBlitz @ ColdBlitz:
    I'm avoiding buying from the big 3 at all atm
  • Psionic Roshambo @ Psionic Roshambo:
    At one point PC game pads where poorly supported, loading a game had setup, it was complicated. Now it's almost as easy as a console.
  • ColdBlitz @ ColdBlitz:
    nintendo needs to up their game soon
  • K3Nv2 @ K3Nv2:
    Yeah even bt support for Xbox one controllers are just as easy as pairing
  • ColdBlitz @ ColdBlitz:
    considering the steamdeck can emulate the switch (yikes) theres almost 0 reason to buy the switch apart from playing online and using cartridges
  • K3Nv2 @ K3Nv2:
    Xinput and 360 dongles were a driver nightmare
  • K3Nv2 @ K3Nv2:
    I remember having to manually put in drivers and what not
    K3Nv2 @ K3Nv2: I remember having to manually put in drivers and what not