-
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.
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.
- 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.