Misc. Ideas
Published 2019-06-08
Misc. Ideas
There's a whole lot of project ideas that I came up with over the years, but that I'm unlikely to ever finish. Instead of letting them languish forever, I can just list them here! (Maybe someone will be inspired by something here, who knows?) Perhaps one of these days I'll try one of these, but for now I'll just let them be. Everything here is in no particular order.
Programs
ABE - Arbitary Binary Explorer
I find when reverse engineering stuff that the hardest question to answer is "what am I looking at?" Older games did not use any standardized data formats like JSON, XML, or PNG. Instead they encoded things as binary files, in whatever format made most sense for how the game was programmed. Trying to hack a new game involves trying to figure out what each file format contains.
For graphics data there's tools like TiledGGD, for uncompressed audio data Audacity typically works, and for text some hex editors have options to help with that. However, there's not a very good tool for 3D data, or for level data, or any of a million other more specific things that a file could contain.
Generally speaking, going from bottom to top, binary data in a file is stored as integers or floats. You have to make sure you have the right size and format. These integers/floats are often (but not always!) structured into "structs", which are collections of data that represent one "thing", like a point, a color, or a note. These structs would be stored in an array, so that the whole set of "things" can be loaded into one "object", like a model, an image, or a music sequence. There may be multiple objects of different types in a file, and they may depend on data from other objects. Objects or files may also be compressed, which adds some complexity.
ABE was supposed to be a tool to help with that. It would be a web app that allowed you to load one or more binary files, and then just play around with how to represent them on the screen. You would try and define objects and structs so that a coherent image would form on the screen. ABE would tell you if the format you defined makes sense given the file, and would help you pick out common patterns like offset tables or headers.
I'd love to get this done, bu I currently don't know enough about JavaScript single-page applications to get started, and I feel like this would be a terrible first project.
CRPN - Chronological Reverse Polish Notation
Basically, take your favorite RPN calculator and add UndoTree to it. As you work your way through a complicated equation, you could pull up the undotree and edit files, relink, or save an entire section of the tree as a program. There seems to be a pretty similar project called Skov, except it's more designed as a scripting environment as opposed to a quick interactive one.
While thinking about this I got stuck in the rabbithole of wondering how I'd make something like this useful. A lot of the appeal of an RPN calculator is when you're either making quick calculations (in which case this isn't too helpful) or if you're out and about somewhere without anything to write a quick computer program on (in which case you couldn't use this).
I was toying around with the idea of getting a microcontroller and just making a calculator, like the old HP series but new and shiny. The HP calculators (the 48-50 series especially) were just as much field equipment as they were calculators, so I planned to continue that line of thinking. It'd allow you to get data from various USB, Bluetooth, or serial devices (imagine multimeters, temperature sensors, fitness bands, etc.) and quickly prototype either a logging program or something that can produce data to drive, ex: a voltage source or a motor. ...but would there me a market for that?
Long story short I actually have no idea what this "idea" even is. I guess it depends on how much I'd want to develop this, if at all. Could be just a desktop or web app, could be an embedded program, could be both, probably going to be neither. Ah well.
SpiderTop
- Planning document
- I might have more on paper? I'd have to look for them...
This was an idea that stemmed from one simple question: What does it mean to "open" a file? "Opening" a file is a basic operation of any computer. I double click on the file, it opens. ...but then what? Let's take a simple text file. Once I open it, what can I do with it? I could:
- read it
- print it
- compare it with another file
- email it
- count the number of words
- have it read out loud
- merge it with another file
etc, etc, etc. But by default, it'll open it in a little program called Notepad. To be able to do most of that list, I'd need to think about what program I'd need, open the program, then open the file in the program.
Needing to worry about programs, in my opinion, is a bit of a silly concept. It made sense to worry about programs in the 80's and 90's when you had to drive to a store to get a program on a floppy disk in a box for a few hundred dollars just to do anything with a specific type of file. In the present time, where we can get any open source program just by downloading it, we can more closely follow the old Unix Philosophy: make many programs that each do one thing well.
If there were one simple program for reading a file, one for printing it, one for text-to-speech, or one for comparing it (which all of those already exist!), then the user should easily be able to issue a command like "let me see the contents of this file" and the computer should find the right program for that type of file and just show the user the file.
SpiderTop was that mystical computer program that would do that. It would worry about the details of asking what action a user could perform to a specific type of file and just tell the user what they can do. I was envisioning SpiderTop to make the most sense as a Linux desktop environment, so that it could worry about things like displaying diffs, navigating between files, providing toolbars, etc. and each program could just call a few hooked functions and allow full integration and compatiblity with everything else.
An example of a program that sort of already does this is Internet Explorer 4 in Windows 98, IE 6 in Windows XP, or IE8 in Windows 7. Windows reuses the exact same interface for the file browser as it does for the web browser. The same navigation bar, forwards/back buttons, etc. are kept if you open an internet shortcut from a file window, presenting a seamless transition. Bookmarks are shared between the file system and the internet browser, as is history.
SpiderTop would do the same, but for everything. It would provide hooks for programs to add menubars, toolbars, etc, tell where in the file it's in, if a new window or tab needs to be opened, etc. and it would worry about all the implementation details. This would allow for some neat stuff like bookmarking a specific chapter of a book, allowing for more accessibility options (as we can draw the interface however we'd like), and allowing the user to combine tabs from multiple programs into one window.
The big reason I haven't tackled this is because rewriting the entire Linux ecosystem is simply not a thing I can do in my lifetime. Granted, I was planning on reusing a lot of the work KDE had done, especially with the KParts system. But even still, this is a big project. That said, I still think there's a lot of untapped potential if we could let go of the idea of "apps" and "programs" (with exceptions for video games and calculators and the such that don't work on files) and focused more on what the user wants to accomplish.
Term Turmoil
It's an educational game for teaching people math!
You (and your party?) solved algebra problems while working your way through this sort of RPG-like map. Except the big draw was that the algebra-solving part was done by applying "spells" to the equation that would transform it. For instance, there'd be a spell for applying the distributive property or one for combining like terms.
This was largely meant to help people learn how to take a big scary algebra problem and split them into known concrete steps. We would introduce new actions slowly and deliberately, sort of like an actual math class. It'd try and keep the play from dumb mistakes like "whoops, forgot to carry the one" and let them worry about how to do the algebraic manipulation.
I couldn't quite figure out how to actually program something like this (turns out expressing algebraic equations on a computer is a rabbithole, and if I ever wanted to add linear algebra or calculus then it just gets worse) so I didn't get much further than planning. (Said planning was done entirely in the back of a notebook, which I'd need to transcribe.)
VDPMaster
A tool for composing a scene for the Mega Drive's video processor.
There's lots of tools out there for creating graphics for the VDP, most of which are tied to the Sonic hacking community in some way. However, they only do so much. I was interested in a program that would let me take a series of graphics files, figure out how they would fit into VRAM, and figure out what VDP settings need to be set to get a specific look, including any mid-frame changes.
This would be super beneficial for MD homebrew devs and sprite artists, as VDPMaster would handle importing spritesheets and background images and let devs play around with what the VDP can do and how much it can store without needing to fiddle with assembly. It could also generate ASM starter code, to either have standalone, to analyze and port to a homebrew engine, or to expand upon to add interactivity to.
It also would have been neat to expand this to support multiple different consoles like the NES or even something like the Sega Saturn, but I never got much further than making the UI for it before getting caught on importing graphics and losing interest. I really think this would be neat to continue, though.
"FrontPage 2"
Microsoft FrontPage was a surprisingly good program for the time. It had a user interface perfectly tailored towards making websites. Unfortunately, making websites is sort of a dying art and besides Neocities, the various tilde servers and a few other websites floating about nobody really makes a website anymore. Nowadays website builders like Wordpress, Wix, and Weebly are all the rage, and I think that's a shame.
A hypothetical FrontPage 2 would bring everything that FrontPage had (the site manager, the issues pane, the automatic uploading, the navbar generation, the tasks pane, the team management, etc.) and bring it up to speed with the modern web. It'd use a static site generator like Jekyll in place of the old WebBots, it'd use Git for team management, it'd store the site hierarchy in a GraphViz file, etc. And everything it made would be human-readable and easily modifiable or portable to different servers, in direct opposition of proprietary website builders.
Embedded system emulator
Imagine something like higan or MESS, except for hardware currently in development. You'd add some microprocessors or microcontrollers, describe what pins on them link to what input/output devices (which can be mocked up in Python or some language like that and perhaps displayed in a GUI), and develop your software on the emulator, switching out components as needed before you invest in purchasing actual hardware.
This would be a real pain to implement. Some attempts exist already, like (long-discontinued) QSimKit or some (ludicrously expensive) EDA software like Proteus Design Suite. I'm not going to be the first person to try this, and maybe I haven't looked at the other options enough.
If I were to do this, I'd likely fork higan or a similar multi-system emulator and make the process of defining new hardware something the user can do. Something easier said than done, I'm sure. I haven't looked into this much at all, and I'm aware this won't really scale to analog components, capacitors/inductors, etc. but I feel like there's definitely a market for this. (The whole embedded dev ecosystem is a big proprietary mess but that's a discussion for another day...)
Robotics tutor app
I was on a FIRST Robotics team once. It was fun. What wasn't fun was the complete lack of simulation options so I could figure out what the heck a PID controller or a Kalman filter were. LabVIEW has a very lackluster simulator, but that was it.
So my thought was to make an app that simulated a robot that moved about a 2D plane with some obstacles and objects using some virtual sensors. There would be an IDE to the side to let the user play around with how to get the robot to accomplish a task. Maybe there'd be a tutorial system too to introduce new concepts into an integrated system? I'm like 99% sure this already exists somewhere, but it'd still be neat?
Games and ROM Hacks
There's a few more half-baked ideas than this, but here's anything that I actually at least semi-seriously thought about. (Yes, they're all Sonic hacks. I have a couple of more original ideas buried somewhere but none of them are really fleshed out.)
Sonic Redux
Pah. I'll never finish this, might as well just add this here.
Sonic Redux was going to be a total conversion, not just the character swap mod I pushed out. It was planned to have twenty new tracks, split up into four different "cups", each a little episode in an overarching story. At the end of each cup would be a race against either Dr. Eggman or Metal Sonic along a course inspired by a classic Sonic level, which would unlock something.
Ideas for unlockables were a super mode (where everyone's Super Sonic Racing~!), new characters (some thoughts were newer Sonic characters like Shadow or Rouge, or perhaps some indie characters like Lilac from Freedom Planet if I could get permission), and additional challenges like Team Sonic Racing has (involving the balloons, the Sonic Tokens, versus races, or the Tag 4 mode probably). It also would have supported multiplayer and hopefully netplay on a matchmaking server like SRB2 Kart. I'd also encourage creating new levels and characters that could be shared on multiplayer servers or downloaded for even more content.
I never finished this because 1: creating a racing track (let alone 20) with textures and music is deceptively difficult, and 2: Sonic R is simply not capable of a lot of what I want without serious hacking I don't want to do. Just go play SRB2Kart, it's basically what I wanted to make.
Tails' Adventure MD
I was thinking about making a Mega Drive Sonic hack, and one of the ideas that I really liked was porting over and enhancing Tails' Adventure. I always thought it was a neat Metroidvania game whose worst flaw was being on the Game Gear. Perhaps a Mega Drive port would make it easier to play. And then maybe I could use the engine to make a fan-sequel? (I already sorta-drafted out a plot idea, anyways.)
The problem is that the Tails' Adventure engine and the Sonic 1 engine (the Sonic game with the disassembly I like the most) don't really mesh well. TA is tile-based, and each map is a fixed number of bytes but a variable height and width. Sonic 1 is chunk-based, pooling repeated tile patterns into 32x32 tile chunks, and getting the stage to be tall enough to support the vertical screens would be a challenge.
Additionally, an idea I had was to make transitions between screens and areas much more seamless than on the GG version (cutting out the map screen except for a fast-travel option with the teleporter item, and allowing Tails to carry around all the items at once), which would have been painful to implement. This, on top of the fact that I couldn't figure out how to make Tails grab a ledge or throw bombs let alone all the wacky engine stuff I'd need to do, led me to drop the project.
If I were to try this again, I'd either make a homebrew engine (reusing Sonic's object manager, maybe) or just make it a PC fangame.
Untitled Tails' Adventure Sequel
That sequel I was talking about would take place after the events of Sonic 3K. Tails would go back to his workshop on Cocoa Island to just sort of chill. The place gets firebombed by (the same villians? Or a new group? IDK.) and Tails runs out with the Tornado and his old remote robot. Upon flying towards the source of the bombers, his plane gets torn to shreds and he crash lands on a new island.
With nothing but his remote robot and a sliver of health, Tails would try and find somewhere to get help. He'd come across a village, who is nice and friendly. They too are being terrorized by the same dweebs that attacked your house, so why not help them? ...that's it, that's all I came up with. Eventually Tails repairs the Tornado with parts he finds around the island, I guess? And then there's a climatic battle, and some emotions as you leave your friends behind to go back and hang with Sonic. Sure. There you go.
The gameplay would be a mix between an RPG and a Metroidvania. There'd be several towns with NPCs that you can chat with an interact, maybe you'd be able to make a party, I don't know. Didn't think that far ahead. A unique mechanic (compared to TA) is the ability to pick up item monitors from the field and either break them or put them into a very limited storage space. I'm not sure how far I'd push this (an idea was saving an invincibility box for a boss fight), or if it's even unique (probs not), but it might work?
If I were going to make this, I'd probably just ditch Tails and make this an original game to avoid all the copyright problems. I like Tails... but not if I want to sell this. IDK.
Untitled Sonic Adventure 2 prequel
Yet another Sonic hack. This one is a stealth game featuring Maria on the space colony ARK, trying to uncover the secrets of Project Shadow and her grandfather's actions. (I'm ignoring Shadow the Hedgehog's plot here because I don't like it.)
Maria and Shadow hang out every once in a while for "bonding" without ever really being told why she's otherwise kept in quarantine. Why is this Shadow fella unique? What's the goal here? Maria sneaks out over the course of several nights and tries to uncover what's going on. She eavesdrops on conversations, finds documents, and reads computer logs to uncover the truth behind Project Shadow, ARK, and the Eclipse Cannon, compiling it all in her computer account. (Yes, the "truth" is something everyone already knows, but the fresh perspective might be interesting.)
After so many days, the military comes and attacks the colony. Shadow gets Maria out of quarantine, runs down the hall to the escape room, she dies, we all know the drill. Later (during SA2), Rouge hacks into the colony's mainframe and finds... Maria's files. How sweet.
It was probably going to be a Mega Drive hack. I don't know if this really would be fun to play, though.