GCL - Game Cartridge Launcher
- 4 Devlogs
- 48 Total hours
Backend work
Alright, it’s been a while since I’ve worked on this, and coming back I realize that I knew so little about any of how drives, media, filesystems, and all that works. So, I’m going to give a quick synopsis of all I’ve learned (keep in mind, this all applies to LINUX ONLY since that’s what I’m on, the app will come to windows eventually but for the time being I’m not worrying about it):
Storage devices are where your computer stores data for storage. One physical device (i.e. a thumb drive) corresponds to one drive, although some physical devices can have multiple drives. These drives are split into BlockDevices, so one drive can have many Block Devices. Block devices can have one or none filesystems; keep in mind there isn’t one universal filesystem that everybody agreed to use so we could all be happy; you’re gonna have to deal with FAT32, NTFS, ext4, exfat and btrfs at a minimum. Now, those filesystems aren’t immediately accessible; they need to be mounted, which esentially means just putting it somewhere in another filesystem on your computer, probably the main one, like your HDD/SSD. A single blockdevice can have many mount points, each with different permissions; one might have NOEXEC permissions so you can’t launch a game from there, another might have RO so you can’t write anything to it. Keep in mind, these permissions are completely separate from file and directory permissions; those are a whole ’nother can of worms.
Basically, Physical Device -> Drive[], Drive -> BlockDevice[], BlockDevice -> Filesystem?, Filesystem -> (MountPath, Permissions)[]. That’s the really really really big oversimplification but yeah. If you read to here, hopefully you know understand my pain; I commend your patience.
To be honest basically all of this devlog was backend, but I’m really happy with how it is now! The time I’ve spent learning rust (there’s a lot of stuff lol) paid off and now I can easily expand the format and add new features whenever I please!
For stuff that you can actually see, here’s a new concept UI I made. I’m not at all a designer and I deliberately made this project backend/API focused so that better designers than me could be the ones making actually nice looking apps, but i’m pretty happy with how it looks right now!
The last major feature I need to add is animated banners. Unfortunately, there aren’t really any great formats for this, but I’m planning on expirementing with Lottie as it seems like the closest option to what I want. There’ll still be video and static image support, of course, but animated banners are objectively way cooler. Anyways, yeah that’s what I’m gonna focus on next devlog. After that, I’ll do a round of polishing but that should be the first version (call it alpha maybe?) of the app finished! Very happy with the progress :)
(see app and json schema preview below)
Ok the reason this count is so high is because I spent a diabolical amount of time researching, practicing and learning a bunch of new things. I had never done asynchronous or concurrency before, and now I’m slightly ok at it!!! yippee!! Anyways, under the hood we use events (via UDisks2 and d-bus which was a whole other can of worms) now instead of lsblk to detect when a usb goes in and out so that’ll be a lot more responsive. On that note, I still gotta code windows support (I’m on linux) but I think windows, just by nature of not being linux and having 20 billion different ways to do everything will be a lot easier. mac also exists but uhh erm idk i don’t really wanna do allat
(picture is some random ahh code cuz i have no new ui in the slightest lol)
tbh the majority of these hours have been learning rust, so i’m just gonna explain the project:
I’m trying to make a standardized format + launcher for physical pc games. the idea is you’ll just be able to plug in a usb, it’ll get detected and you can click a button to run the game! I also want it to have support for animated banners, metadata, all that stuff. Basically just think like how the wii did it lol
anyways next log hopefully i’ll have some gui, even if its just a test. cyall then
img is the tentative format