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 wonder if that was the point of game streaming
  • Psionic Roshambo @ Psionic Roshambo:
    But it's a dead end
  • Xdqwerty @ Xdqwerty:
    @Psionic Roshambo, people who cant download it can still play the game
  • BigOnYa @ BigOnYa:
    If your internet speeds are fast enough. Streaming 4k takes alot. I used to only have 20mb sec, and 4k struggled. Now I have 300mb sec and 4k plays fine.
    +1
  • Xdqwerty @ Xdqwerty:
    @BigOnYa, i only have like 1 or 2 mb sec
  • BigOnYa @ BigOnYa:
    Did you feed the hamster in your internet router? It prob died and is running slow now.
  • Xdqwerty @ Xdqwerty:
    @BigOnYa, why did you start saying my pc has a hamster in the first place?
    +1
  • BigOnYa @ BigOnYa:
    Its actua!ly just a old joke, meaning its slow. Was just kidding around with you.
    +1
  • BigOnYa @ BigOnYa:
    I bet @AncientBoi has some hamsters hidden somewhere tho....
    +2
  • Psionic Roshambo @ Psionic Roshambo:
    I think Game streaming should work like this.... Local Hardware able the run the game fine, game engine and common assets stored locally, all FMV and music and textures could be streaming
    +1
  • Psionic Roshambo @ Psionic Roshambo:
    Some temporary storage
  • Xdqwerty @ Xdqwerty:
    also @BigOnYa im making some progress on my gdevelop project, implemented various mechanics
  • Psionic Roshambo @ Psionic Roshambo:
    They went all in on streaming, should have been more of a hybrid approach
    +1
  • BigOnYa @ BigOnYa:
    Or free government supplied high speed internet be nice also. Like Obama care. Xdqwerty that's cool, its time consuming but rewarding once done or playable, to see what you've made from scratch. Animations take forever, but worth it.
    +1
  • Xdqwerty @ Xdqwerty:
    @BigOnYa, although the bullets are a bit buggy
    +1
  • Psionic Roshambo @ Psionic Roshambo:
    Not to mention this would be a massive pain to pirate
  • Xdqwerty @ Xdqwerty:
    @BigOnYa,
    and the visual aspect of the game is quite crude (the sprite that looks best is that of the protagonist just because he is a stickman with sunglasses)
    +1
  • BigOnYa @ BigOnYa:
    There is a bullets behaviour you assign to your character, that makes the code easier, under "behaviours"
  • Xdqwerty @ Xdqwerty:
    i meant that when the character is pointing to the right, the bullets spawn where they should, but when he is on the right, they move to the right but the spawn point is incorrect
  • BigOnYa @ BigOnYa:
    Itch.io has lots of free assets also. Under the bullets behavior tab, there is a "rotate bullets" option, can try that. Or in the code can try
    - fire bullet Player.X(PlayerDirection)
  • Xdqwerty @ Xdqwerty:
    im taking a break for today anyway
    +1
  • BigOnYa @ BigOnYa:
    YEa gotta after a while, looking at code for long periods will bug your eyes.
    +1
  • BigOnYa @ BigOnYa:
    That's cool tho, I'm proud of you going back to it, not giving up. It is difficult at first to learn, but fun once you get the hang of it. I think I've watched every tutorial video there is, but I still struggle sometimes to get stuff to work right. But gotta keep trying dif things, and eventually you will get it right.
    +1
    BigOnYa @ BigOnYa: That's cool tho, I'm proud of you going back to it, not giving up. It is difficult at first to... +1