Morning (or afternoon) my fellow SMWC'ers! As I do not have any information on the riddle that must be solved (or something I just skimmed over it), but I actually have a tee-bit of "evidence" (for this thing that I still didn't read over well). My two most recent projects.
DouBOL Dash is a program written in C# that I began in the summer of 2016, and let's just say I programmed it horribly. I spammed datagridviews and I called it "progress", when it was the complete opposite. A buggy mess. However, recently, I had decided to take another crack at it. And this time, I would honestly admit that it has been a success so far. And one of my goals of this program is to make it easier to use (and less buggy) than NiAlBlack's BOL editor, which only had a 2D view with small points to determine position (and not a very good visual on heights.)
While helping document the file format, named BOL, I had integrated more and more support into the editor for various types in the file.
DouBOL Dash has a feature that renders the track for you, like what you would see if you tested the track in-game. This removes constant testing to get a certain variable in a track to work. Some object models are rendered, and many more will be rendered in the future.
In the editor, everything is color coded according to what object it is.
Along with this, the first tab page of the editor is known as the "BOL Information" tab, which contains a lot of data about the track. There are 5 unknown floating points, and also has the ability to edit the lap count, as well as what music it uses. And as a bonus, the minimap used for the track!
Even though DouBOL does not have the ability to "pick" objects from the scene with a click (yet!), it does have it's ways of detecting to see if an object is clicked on the scene. When an object is selected, or a group of entries (seen below), a red box is drawn around the selected entry to indicate that something has been selected. The label at the bottom of the screen shows you more information about what you have selected. There are many features that deal with selection, like enemy points in a group (seen in the 1st screenshot below), selecting the corresponding route that associates with the object (seen in the 2nd screenshot below), route points in a group, and more.
Adding objects can be a pain. However, with the UI that I created for adding them into a scene, the crash risk is greatly reduced and will be easier to use for those who are new to Double Dash hacking.
On the left side of the UI is an object list. These are every object in the game (be it unknown or known what it is), and double clicking on the entry itself will add the item if the files needed are present in the course's /objects folder. If they are not in the folder, this will show and will not let you add the object (and yes, I do see the typo in "dependencies":
You can also type in the object's ID (in hex) in the box on the bottom right and hit "Add" if you don't feel like browsing the object list.
There are 3 viewers that come with DouBOL Dash. One of them is the BMD viewer, that allows the user to load a BMD to view in the simple GL control.
The next viewer is the BTI viewer. This one allows you to open up the BTI file format, and give you the possibility to export an image to PNG.
And when exported....
The last one is my favorite sub-program for DouBOL that I have coded thus far. It's called the BCO viewer. BCO is the collision file format (Link to my docs). The BCO viewer is able to open up a BCO and convert it's Triangles and Vertexes into a viewable model in the GL view. Each different color (except for light blue) represents a different collision type, such as wood, water, lava, etc...
The program also has support for selecting all faces that share the same collision format.
You can also choose to disable triangle viewing and look at the vertexes themselves:
When I say "keyboard shortcuts", I don't mean stuff like CTRL+O to open, CTRL+S to save, and whatnot. I mean shortcuts that make using the track scene easy to use! Even though there's not many, but this will soon change. Seen below is the settings window, a window where you can enable/disable certain sections to render, wireframe mode, and also modes for the BCO renderer, to show vertexes/triangles.
Many entry types have something called a route, or a path that an object follows, assigned to it. Some objects actually require a value to be NOT -1. So upon saving, I made a function that goes through objects only (since other sections don't require routes) and prints an error and prevents saving if there is an object that needs a path (and it even shows you which one!)
There's an update checker that is available for viewing. It will look for the next version that will be released (which is v0.2). You will be notified that an update has come out if you check that in Help -> Check For Updates.
I would like to thank StapleButter for the BMD rendering code, and miluaces for a few of his patches. Also MelonSpeedruns for his icons.
Yoshi Omelette was my (very) recently started project that is supposed to replace Golden Egg, which was the closed source editor. Sadly I have been very busy and haven't gotten much to work on, but I have gotten some progress.
Yoshi Omelette uses a custom file format exported from a previously written script known as EGG. Below is the structure of the file.
Once that is parsed, then nothing much has changed. The only things that have changed (and are done) so far are that the sections begin with "OBJS" (objects) and "SPRT" (sprites). As I come up with ideas (or they're supplied), I will attempt to put them in to make parsing a lot easier.
Since coding something for a SNES ROM is complicated because changing sizes isn't just for a "file", it's the entire ROM, therefore making any changes difficult. Using this file format I can simply just make another program that injects the file data (without my changes, of course) back into free spots in the ROM, instead of using temporary space in the program.
If you wish to see the code for it, it is here:
That's all from me this time, I hope you guys have a wonderful 2017 and things yet to come!
~shibboleet
DouBOL Dash
Current Version: v0.1 Beta
Download
Introduction
DouBOL Dash is a program written in C# that I began in the summer of 2016, and let's just say I programmed it horribly. I spammed datagridviews and I called it "progress", when it was the complete opposite. A buggy mess. However, recently, I had decided to take another crack at it. And this time, I would honestly admit that it has been a success so far. And one of my goals of this program is to make it easier to use (and less buggy) than NiAlBlack's BOL editor, which only had a 2D view with small points to determine position (and not a very good visual on heights.)
While helping document the file format, named BOL, I had integrated more and more support into the editor for various types in the file.
Features
Track Preview and Interactive Settings
DouBOL Dash has a feature that renders the track for you, like what you would see if you tested the track in-game. This removes constant testing to get a certain variable in a track to work. Some object models are rendered, and many more will be rendered in the future.
In the editor, everything is color coded according to what object it is.
Enemy Route Points - Pink
Checkpoint Link - Brown
Route Point - Blue
Object - Green
Starting Point - Red
Area (Non-filled White Box)
Camera - Light Blue
Respawn Point - Yellow
Along with this, the first tab page of the editor is known as the "BOL Information" tab, which contains a lot of data about the track. There are 5 unknown floating points, and also has the ability to edit the lap count, as well as what music it uses. And as a bonus, the minimap used for the track!
Selection Indication
Even though DouBOL does not have the ability to "pick" objects from the scene with a click (yet!), it does have it's ways of detecting to see if an object is clicked on the scene. When an object is selected, or a group of entries (seen below), a red box is drawn around the selected entry to indicate that something has been selected. The label at the bottom of the screen shows you more information about what you have selected. There are many features that deal with selection, like enemy points in a group (seen in the 1st screenshot below), selecting the corresponding route that associates with the object (seen in the 2nd screenshot below), route points in a group, and more.
Object Adding UI
Adding objects can be a pain. However, with the UI that I created for adding them into a scene, the crash risk is greatly reduced and will be easier to use for those who are new to Double Dash hacking.
On the left side of the UI is an object list. These are every object in the game (be it unknown or known what it is), and double clicking on the entry itself will add the item if the files needed are present in the course's /objects folder. If they are not in the folder, this will show and will not let you add the object (and yes, I do see the typo in "dependencies":
You can also type in the object's ID (in hex) in the box on the bottom right and hit "Add" if you don't feel like browsing the object list.
BMD, BCO & BTI Viewers
There are 3 viewers that come with DouBOL Dash. One of them is the BMD viewer, that allows the user to load a BMD to view in the simple GL control.
The next viewer is the BTI viewer. This one allows you to open up the BTI file format, and give you the possibility to export an image to PNG.
And when exported....
The last one is my favorite sub-program for DouBOL that I have coded thus far. It's called the BCO viewer. BCO is the collision file format (Link to my docs). The BCO viewer is able to open up a BCO and convert it's Triangles and Vertexes into a viewable model in the GL view. Each different color (except for light blue) represents a different collision type, such as wood, water, lava, etc...
The program also has support for selecting all faces that share the same collision format.
You can also choose to disable triangle viewing and look at the vertexes themselves:
Settings and Keyboard Shortcuts
When I say "keyboard shortcuts", I don't mean stuff like CTRL+O to open, CTRL+S to save, and whatnot. I mean shortcuts that make using the track scene easy to use! Even though there's not many, but this will soon change. Seen below is the settings window, a window where you can enable/disable certain sections to render, wireframe mode, and also modes for the BCO renderer, to show vertexes/triangles.
Keyboard Shortcuts
Key | Description |
---|---|
1 | Enable/Disable Wireframe Mode |
2 | Enable/Disable Axis Rendering |
3 | Enable/Disable Enemy Route Rendering |
4 | Enable/Disable Route Point Rendering |
5 | Enable/Disable Checkpoint Rendering |
6 | Enable/Disable Object Rendering |
7 | Enable/Disable Kart Point (Starting Point) Rendering |
8 | Enable/Disable Area Rendering |
9 | Enable/Disable Camera Rendering |
Missing Route Check
Many entry types have something called a route, or a path that an object follows, assigned to it. Some objects actually require a value to be NOT -1. So upon saving, I made a function that goes through objects only (since other sections don't require routes) and prints an error and prevents saving if there is an object that needs a path (and it even shows you which one!)
Misc Stuff
There's an update checker that is available for viewing. It will look for the next version that will be released (which is v0.2). You will be notified that an update has come out if you check that in Help -> Check For Updates.
Screenshots
Special Thanks
I would like to thank StapleButter for the BMD rendering code, and miluaces for a few of his patches. Also MelonSpeedruns for his icons.
Yoshi Omelette
Yoshi Omelette was my (very) recently started project that is supposed to replace Golden Egg, which was the closed source editor. Sadly I have been very busy and haven't gotten much to work on, but I have gotten some progress.
How it will work
Yoshi Omelette uses a custom file format exported from a previously written script known as EGG. Below is the structure of the file.
Offset | Size | Description |
---|---|---|
0x00 | 0x04 | "EGG1" in ASCII. |
0x04 | 0x04 | Offset to beginning of the object section. |
0x08 | 0x04 | Offset to beginning of the sprite section. |
0x0C | 0x02 | Object / Exit Count (This will be changed so both are separate) |
0x0E | 0x02 | Sprite Count |
0x10-0x19 | 0x0A | Original Level Header |
0x19-0x1F | 0x06 | Padding. |
Once that is parsed, then nothing much has changed. The only things that have changed (and are done) so far are that the sections begin with "OBJS" (objects) and "SPRT" (sprites). As I come up with ideas (or they're supplied), I will attempt to put them in to make parsing a lot easier.
Since coding something for a SNES ROM is complicated because changing sizes isn't just for a "file", it's the entire ROM, therefore making any changes difficult. Using this file format I can simply just make another program that injects the file data (without my changes, of course) back into free spots in the ROM, instead of using temporary space in the program.
If you wish to see the code for it, it is here:
Github
That's all from me this time, I hope you guys have a wonderful 2017 and things yet to come!
~shibboleet