X-Git-Url: https://fortfriendship.online/gitweb/gnargle.github.io.git/blobdiff_plain/240e81b86bd3caa1bf56eb93d676608e2d6e01cd..22d7c57542216c0d6a673bf5d712babee2ba5bdb:/projects/pipboy.html?ds=inline diff --git a/projects/pipboy.html b/projects/pipboy.html index 75e29cf..091a5d8 100644 --- a/projects/pipboy.html +++ b/projects/pipboy.html @@ -23,11 +23,11 @@ /> @@ -748,6 +748,165 @@ What that isn't, though, is input. Which was the title of this update (I've changed it now). So I'll tackle that next!

+
+

Actually doing input this time

+

22/03/2025

+
+

+ OK we're back again baby. And this time I swear I am going to do + input. To show willing I've even already started diving into the + firmware to work out how it's done! +

+ + A
+                screenshot of the dumped firmware. It notably shows a function
+                'd' and a call Pip.on('knob1', d) + +

+ So that firmware screenshot tells us all we need to know, + really. The Pip object has some events (in this case, 'knob1', + which is a) funny and b) the left hand wheel control) one which + you can register functions to call. +

+

+ This screenshot is from the portion of the code that handles + switching between the different health animations, but this + applies anywhere really. So what we need to do is: +

+ +

Pretty simple! OK, lets go do that.

+ Code Updated. Check the github link to keep up. +

And look at that! We're done.

+ +

+ Nothing really special to talk about here, just some basic + increment/decrement handling and looping back to the start of + the list when necessary. +

+

+ There is a specific wrinkle of having to deregister the input + event. Early on in my testing I hadn't done that and it kept the + .js loaded even after removing the SD card, which meant it + looked like any edits I made weren't actually working. In order + to prevent this I added gracefulClose() which deregisters the + handler and shows the main menu again. +

+

+ Last thing here is really to handle what happens when we have + more perks than will fit in our available space. Then this + screen is basically done! +

+ Code Updated. Check the github link to keep up. +

+ And now that's done too! Couple of bugs with loading the right + files to list (primarily loading too many) but smart use of the + modulo operator and we're done! I filled in every perk I think + is funny and applicable to me, did some manual edits to some of + the icons (new vegas icons seem to generally be less optimised + for a real monochrome display, a rare instance where Bethesda's + attention to detail is better than Obsidian's) and filled in all + their data and, well, that's it! +

+ +

+ I'm pretty happy with it! This was a really enjoyable project + and let me flex a lot of the muscles I don't tend to use a lot + in my pure software day-to-day. +

+

+ I might come back to this later and make a second screen with + stats on it, but that's basically the same layout etc as the + perks screen just with a number, so I probably won't write it + up. +

+

+ So yeah, for now, I'll leave it here. Thank you for reading and + following my thought processes, if you did! +

+ Code Updated. Check the github link to keep up. +

+ OK I LIED one last update. I wanted to handle the selector on + the right moving away from INV gracefully. Until now, switching + this while in the app would do nothing, and to get around this I + had the click in of the left wheel as the 'return me to the main + menu' key. That's not very accurate to how it should work, + though. +

+

+ So I dove into the firmware again and after a few false starts I + found checkMode(). This is called on a timer in all the other + apps every 50 milliseconds. I experimented a little with this + timeout in my app - 50ms made the perk list feel laggy (because + I'm loading data from disk so ops take a bit more time than + everything else in the system) so I tweaked it up to 100ms, + which was a nice compromise. +

+

+ Twiddling the mode dial triggers a menu change, but I also made + sure to gracefully shutdown when a change was detected - this + includes running showMainMenu(), which if we don't do the + control handlers don't get registered properly. Important. +

+

+ I also dropped in a handler for the torch button - it does + nothing other than shutdown and activate the torch normally. + While testing this I actually found a bug with the current + firmware - if you stay on the torch page and the time changes, + the footer will display over the torch screen. Neat! +

+

Anyway that is really it this time. Thanks for reading <3

+
+

The Stats Screen

+

22/03/2025

+
+

+ OK I WORKED ON IT A BIT MORE but as mentioned it wasn't + particularly exciting - this actually reuses basically all the + same code, with just a smidge more for drawing the skill points. +

+

+ I did actually have all the skills in one big JSON but it caused + an out of memory error, so I abandoned it and went back to + individual files for each skill. +

+

Anyway, here's it working!

+ +
+

The Special Screen

+

23/03/2025

+
+

+ Final update! I added the SPECIAL screen too, and reordered the + screens to match the in-game pipboy. Finally I also did some TLC + to make the app a lot more responsive and reduce redraws, so now + it feels really snappy :) +