-
Notifications
You must be signed in to change notification settings - Fork 8
brute force object findings summary
The brute force script enables dumping every object in the game, one by one.
It sets up a level that only has one indestructible brick for Mario stand on, and then one more object that is the "test subject". This object, depending on the run, will be some 4 or 5 byte object, in some bank, with the ids going from 0 -> FF. Also during the run, the objectSets are iterated through 0->F with each object graphicSet iterated through 0->F as well. So a given run will create 16 * 16 * 256
objects, which is 65536.
The vast majority of combos cause the emulator to crash (usually with a segfault, ie the game tries to access a memory page that does not exist). Which is a very strong indication there is not a valid object there. Others cause a black screen, which seems to be the game crashing but not the emulator. Still others show no visual sign of anything, it's as if mario is standing in a totally empty level. Those could be invalid objects, or valid objects that just don't have a visual counterpart. Any time an object causes something to be displayed on screen, a screenshot is captured and saved to disk.
At the end of a run, there is usually about 20,000 screenshots captured. From there, about 14,000 can be removed because they are duplicates. For example, question block is found in every object set since it's such a basic item in the game. Also objects that have payloads will appear multiple times, question block with coin, question block with fireflower, etc, all will appear to be the same thing as far as this test is concerned. Then about 300-400 more can be removed because they contain the "invalid X tile", which is a very good indication the graphic set is wrong.
Once all dupes are removed, I manually went through the about 5000 remaining images and deleted all that clearly were just garbled graphics. This indicates the object exists, but has been paired with the wrong graphic set. For any given object, eventually you find its correct graphic set and you land on a screenshot that shows a valid game object like a pipe, tank, vine, door, etc.
In the end usually about 300 valid objects are found. This is just for one "object class", ie "four byte bank one objects". So in the end, there is about 1300 or so valid objects that exist in the game. But, there are a lot of duplicates. Common objects like pipes, question blocks, doors, etc appear over and over and over in the set. This is still good to know though, it's good to know which objects span all the object sets, which objects exist in different locations within a given object set, etc. All of this info will be needed to enable smaghetti to create levels using the full gamut of object sets.
- object set zero seems to be completely empty
- bank 2 seems to be completely empty, and bank 3 seems to be a copy of bank 1. So in the end, it seems like only bank 0 and 1 are of interest, despite banks being defined with two bits.
- just because visually it looks like a valid game object, that doesn't mean it is. It's possibly a bogus object that just happens to use a combo of tiles that results in something visually good but when you add it into a level and test it, it doesn't do anything.
- many four byte objects seem to have equivalent 5 byte objects. Not sure why.
- technically it seems like six byte objects do exist, but of the objects that got captured, none seemed useful.