/>
<meta
property="og:image"
- content="https://athene.gay/img/projects/pipboy/pipboy2.jpg"
+ content="https://athene.gay/img/projects/pipboy/accurateLayout.jpg"
/>
<meta
name="twitter:image"
- content="https://athene.gay/img/projects/pipboy/pipboy2.jpg"
+ content="https://athene.gay/img/projects/pipboy/accurateLayout.jpg"
/>
<link rel="stylesheet" href="../main.css" />
</head>
<h3 class="datestamp">22/03/2025</h3>
</div>
<p>
- OK we're back again baby. And this time I sweart 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!
+ 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!
</p>
<a href="../img/projects/pipboy/firmwareInputListener.png">
<img class="blog-img-lrg"
So yeah, for now, I'll leave it here. Thank you for reading and
following my thought processes, if you did!
</p>
+ <b>Code Updated. Check the github link to keep up.</b>
+ <p>
+ 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.
+ </p>
+ <p>
+ 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.
+ </p>
+ <p>
+ 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.
+ </p>
+ <p>
+ 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!
+ </p>
+ <p>Anyway that is really it this time. Thanks for reading <3</p>
+ <div class="title-block">
+ <h3 class="blog-title">The Stats Screen</h3>
+ <h3 class="datestamp">22/03/2025</h3>
+ </div>
+ <p>
+ 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.
+ </p>
+ <p>
+ 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.
+ </p>
+ <p>Anyway, here's it working!</p>
+ <video width="672" height="378" class="video-embed" controls>
+ <source
+ src="../img/projects/pipboy/statScreen.mp4"
+ type="video/mp4"
+ />
+ Your browser does not support the video tag.
+ </video>
+ <div class="title-block">
+ <h3 class="blog-title">The Special Screen</h3>
+ <h3 class="datestamp">23/03/2025</h3>
+ </div>
+ <p>
+ 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 :)
+ </p>
</div>
</div>
</div>