4 <meta charset=
"UTF-8" />
5 <title>Pipboy Prop Custom Apps
</title>
6 <meta property=
"og:title" content=
"Pipboy Prop Custom Apps" />
7 <meta name=
"twitter:title" content=
"Pipboy Prop Custom Apps" />
10 content=
"There's an official Fallout TV show prop. It's hackable."
13 property=
"og:description"
14 content=
"There's an official Fallout TV show prop. It's hackable."
17 name=
"twitter:description"
18 content=
"There's an official Fallout TV show prop. It's hackable."
21 property=
"article:published_time"
22 content=
"2025-03-19T00:00:00+00:00"
26 content=
"https://athene.gay/img/projects/pipboy/pipboy2.jpg"
30 content=
"https://athene.gay/img/projects/pipboy/pipboy2.jpg"
32 <link rel=
"stylesheet" href=
"../main.css" />
34 <body class=
"whole-site">
36 <iframe class=
"embed-title" src=
"../shared/title.html"> </iframe>
37 <div class=
"main-container">
40 <a href=
"../index.html">Home
</a>
41 <div class=
"title-block">
45 href=
"https://github.com/gnargle/pipboy-apps"
47 <h3>Pipboy Prop Custom Apps
</h3>
49 <h3 class=
"datestamp">2025</h3>
52 <p>There's an official Fallout TV show prop. It's hackable.
</p>
54 OK, we're doing something a little different with this one. But
57 <div class=
"title-block">
58 <h3 class=
"blog-title">The Preamble
</h3>
59 <h3 class=
"datestamp">19/
03/
2025</h3>
62 So I haven't cosplayed properly in a while. I did it prettyu
63 regularly in
2023, but
2024 was a nadir for me menty h and
64 cosplay, with its ill-fitting, itchy fabrics that are not
65 designed with trans people in mind, was not gonna help that. I
66 didn't go to many cons, those I did I avoided being in cosplay,
70 Thing is, is I do actually really like cosplay, when I'm of the
71 frame of mind to do it. I like prop work. I like wearing the
72 clothes Cat has designed for me. It's fun when it's not autistic
76 You may have noticed I've got mad into Fallout of late. See the
77 previous entry on this blog. I've loved Fallout for a long time
78 but never really considered cosplay for it, not really sure why.
81 But this dive back into the series coincided well with me
82 wanting to get back into cosplay proper. And because I want to
83 do it properly, I've gone a bit all out.
86 I've ordered a reaaaalllly nice vault
33 suit, with backpack.
87 I'm gonna dye my hair instead of wearing a wig, which is the
88 worst thing sensory-wise for me in cosplay.
90 <p>And, I made a Pip-Boy! Look at it here, it's pretty great!
</p>
91 <a href=
"../img/projects/pipboy/pipboy-homemade.jpg">
94 src=
"../img/projects/pipboy/pipboy-homemade.jpg"
95 alt=
"A photo of the home-made pip-boy in question. It looks pretty accurate but it is very very large."
98 <p>It's also
<i>absolutely fucking massive.
</i></p>
100 Wearing it is deeply uncomfortable and my arms get tired after
101 mere minutes, let alone the hours of continuous wear a con would
102 require. It's impractical.
105 There is, however, a solution. Bethesda and 'The Wand Company'
106 produce a screen-accurate version of the tv series hero prop,
107 which normally wouldn't particularly interest me, as often
108 screen-accurate props are just display pieces and are
112 Props I use for cosplay need to have flare. I use LEDs to make
113 them nicer, or in the case of my own homebrew pipboy, I was
114 using a phone with an android app that mimics the Fallout
3
115 pip-boy interface, fully interactable. That's cool! And it's a
119 But luckily this prop also actually works. It features a lot of
120 animations from the tv show, but more to the point, all the
121 dials on it function and are used to interact with it. It's
125 It's expensive, though, and that alone wouldn't have been enough
126 to sway me. That is, until I did a little bit of digging and
129 href=
"https://log.robco-industries.org/documentation/pipboy-3000/"
130 >the firmware is customisable, supporting custom applications
135 That's basically a red rag to a bull for me. I
136 <i>love
</i> writing software for esoteric things. I mean. Look
137 at the projects on this website. Two of them use a midi device
138 and one of them is a plugin for a videogame. I've also written
139 plenty of software for and interfacing with embedded hardware.
140 This is simply made for me!
143 But if you click through the link at the top there, you'll
144 notice that there's basically nothing in the repository right
145 now. That's because, dear reader, we're gonna be exploring this
146 hardware TOGETHER. IN REAL TIME.
149 There's a sequence at the start of the social network where zuck
150 liveblogs him making facesmash. A lot of what he writes is
151 despicable, and the concept of facesmash is awful, but I dfo
152 love the idea of liveblogging a project. It's not something I
153 have really done before. So we're gonna do it with this one.
156 It's a good candidate. There's some documentation at the above
157 link, but not a lot, and there's lots left to explore in terms
158 of how the system works. The author of the above linked article
159 makes an assumption, for example - that the graphics context
160 should be one bit per pixel - but I don't think that's actually
161 the case. There are different tones in the monochrome screen,
162 and it doesn't look like they're made using dithering. So how
163 are they done? That's jsut one of many questions we will explore
167 My ultimate aim here is to put something like the in-game stats
168 screen together. When I was setting up my homemade pip-boy, I
169 put some funny and personaly jokes into what stats and perks I
170 picked - being able to replicate them here would be really nice.
173 There's a long walk between here and there, though, so strap in.
176 However, let's get one thing straight here - I'm not a teenager
177 in a university dorm running on monster energy and rage. I'm a
178 31 year old woman with a full-time job and a bedtime.
181 So the 'liveblog' will not be me hacking away at this until
4AM,
182 oh no no. I will be working on this off and on over the next few
183 weeks most likely, and keeping this post updated as I go.
186 I am sure you will agree that this is a much healthier choice.
188 <div class=
"title-block">
189 <h3 class=
"blog-title">Beginnings
</h3>
190 <h3 class=
"datestamp">19/
03/
2025</h3>
193 OK, so, the device itself. This is a boutique prop with
194 functionality that, while not an afterthought, is certainly not
195 economically worthy of any kind of custom silicon. This is a
196 collector's item, there's only a few thousand of them made, best
197 to use something off the shelf.
200 And, indeed, it does! An STM32 to be exact, an absolute
201 <i>classic
</i> bit of IC hardware. The STM32 series are ARM
202 microcontrollers, architecturally similar to the hardware in
203 your common or garden smartphone. ARM is wonderful because it's
204 somehow managed to succeed in all
3 corners of the 'you can only
205 have two' triangle: it's [relatively] quick, it's cheap, and
206 it's Good. It also sips power relative to bigger, more
207 traditional chips, but that's true of any microcontroller,
208 really, so shouldn't really be counted as a strength here.
211 I was a smidge surprised to see an ARM chip in this - if this
212 were a homebrew project you'd expect probably an arduino, an
213 RP2040 or maybe a teensy - but this thing does have some
214 relatively complex graphics to drive.
217 I imagine the main reason this was chosen, however, was hardware
218 video decoding capability. Most (maybe all?) of the show-derived
219 animations are video files on-disk that are just decoded and
220 straight to the graphics context. You can argue this is cheating
221 if you want but to me it reeks of sensible design. Instead of
222 requiring the programmers to design and animate elegantly in a
223 very inelegant context (we'll get to that, believe me), you get
224 the raw files made for the show, re-encode them, and plonk them
228 Additionally, the raw power the STM32 chip here has allows for a
229 less conventional (but friendlier-ish) development context. This
231 <a href=
"https://www.espruino.com/">Espruino
</a>.
234 Espruino is javascript for microcontrollers. Some of you may
235 have just hissed, and you'd be right to. Javascript is, pretty
236 infamously, horrible. It's heavy and unwieldy, it's untyped,
237 it's messy, it's functional-but-not-quite. If you want an
238 example of how not to design a programming language, you need
239 look no further than javascript. Yet because it runs in-browser,
240 it is the most common language in the world. Go figure.
243 Some of the words in that paragraph may have you convinced that
244 javascript is a bad fit for the lean, high-performance world of
245 microcontrollers, and really, you'd be right. But that hasn't
246 stopped the most insane people alive, javascript monodevelopers,
247 from crowbarring it into them anyway. And so: Espruino.
250 Cards on table, I've never used Espruino before today. I've
251 touched basically every other microcontroller going, and
252 everything else uses C++. I'm not a great C++ programmer, but I
256 Comparative to my javascript, I might as well be the Bach of
257 C++. I do not like promises, I think throwing all your code to
258 'some indeterminate point in the future' is a horrendous choice,
259 but it's what we have to work with here, so we go with it.
262 The thing is though, in this case, this is actually a fairly
263 massive strength. Because Espruino is a JS interpreter, it will
264 run any valid JS you throw at it. This means you can actually
265 program it interactively from a serial connection, which is
266 pretty snazzy. Here's me throwing some debug code at it purely
267 from the terminal and seeing it display the results in real
270 <a href=
"../img/projects/pipboy/pipboy2.jpg">
273 src=
"../img/projects/pipboy/pipboy2.jpg"
274 alt=
"A photo of the prop pip-boy displaying the word 'TEST' on its screen."
278 It
<i>also
</i> means we can dump the firmware with one line from
279 the terminal and, instead of being binary and unreadable, it's
280 in regular-ass javascript. Holy shit!
282 <a href=
"../img/projects/pipboy/pipboyfirmwarescreenshot.png">
285 src=
"../img/projects/pipboy/pipboyfirmwarescreenshot.png"
286 alt=
"A screenshot of some of the pip-boy firmware's built in function names."
290 As mentioned, the guy in the link above has already done this to
291 some extent, but I want to dig through a bit further and
292 understand a bit more what's going on. There's some very
293 interesting functions here that I wanna figure out.
296 For legal reasons, I can't share this firmware wholesale in the
297 repo, so you won't be able to see precisely what I'm talking
298 about. As we go, however, I'll screenshot various parts of the
299 code so you, reader, have context. Like the above!
302 Anyway, I think that's where I'm leaving it for tonight. It's
303 11pm, after all. More tomorrow.
305 <div class=
"title-block">
306 <h3 class=
"blog-title">Let's get some images displayed
</h3>
307 <h3 class=
"datestamp">20/
03/
2025</h3>
310 OK, it's
6pm, there's
3 hours until the Apprentice is on, let's
311 get hacking. The first thing I need to do is, uh... take the
314 <a href=
"../img/projects/pipboy/pipboyopen.jpg">
317 src=
"../img/projects/pipboy/pipboyopen.jpg"
318 alt=
"A photo of the pipboy's arse with a ribbon cable hanging out of it."
322 That's an micro-sd extender cable stringing out of it, there.
323 Nearly everything that makes up the pip-boy is stored on an sd
324 card which is, conveniently, not bolted into the board.
327 You can open up the thing and take it out, you can copy all of
328 its files over to a folder and, most usefully for us, you can
329 copy those same files over to another, bigger sd card (the one
330 installed is only
250MB) and it works, as long as the card is
334 I've put a
32GB one in there, which is overkill, but I had it
335 lying around. It also means I can put the entirety of the
336 FO3/
4/NV soundtracks on there, if I want. Which, maybe, I do in
340 More importantly, however, that SD card has a USER/ folder where
341 we can drop our own custom javascript files and it'll display
342 them in a nice 'APPS' menu in the INV menu.
345 We're gonna start with the the helloWorld and graphicsTest files
346 that are currently in the repo. Some file wiggling and inserting
347 and removal of SD cards and bang, there they are!
349 <a href=
"../img/projects/pipboy/pipboyapps.jpg">
352 src=
"../img/projects/pipboy/pipboyapps.jpg"
353 alt=
"A photo of the pipboy's arse with a ribbon cable hanging out of it."
357 So we want tio draw something to screen that isnt just text,
358 next. So I need to dive into some docs. More updates in a bit...
364 <iframe class=
"embed-links" src=
"../shared/links.html"> </iframe>
365 <iframe class=
"embed-footer" src=
"../shared/footer.html"> </iframe>