]> fortfriendship.online Git - gnargle.github.io.git/commitdiff
new project entry for pip-boy work i'm doing
authorAthene Allen <atheneallen93@gmail.com>
Wed, 19 Mar 2025 22:59:36 +0000 (22:59 +0000)
committerAthene Allen <atheneallen93@gmail.com>
Wed, 19 Mar 2025 22:59:36 +0000 (22:59 +0000)
feed.xml
img/projects/pipboy-homemade.jpg [new file with mode: 0644]
img/projects/pipboy2.jpg [new file with mode: 0644]
img/projects/pipboyfirmwarescreenshot.png [new file with mode: 0644]
index.html
projects/pipboy.html [new file with mode: 0644]

index a492a87d3325fa5186e97a407bcc0040367229ee..b8816078a69e35cf9b38dc4f69dc0cef8ad1e3c3 100644 (file)
--- a/feed.xml
+++ b/feed.xml
@@ -6,6 +6,13 @@
     <link>https://athene.gay</link>
     <language>en-GB</language>
     <link href="https://athene.gay/feed.xml" rel="self" type="application/rss+xml" xmlns="http://www.w3.org/2005/Atom" />
+    <item>
+      <title>Pipboy Prop Custom Apps</title>
+      <description>There's an official Fallout TV show prop. It's hackable.</description>
+      <pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate>
+      <link>https://athene.gay/projects/pipboy.html</link>
+      <guid isPermaLink="true">https://athene.gay/projects/pipboy.html</guid>
+    </item>
     <item>
       <title>Fallout New Vegas, 15 Years On</title>
       <description>Let it never be said I can't admit where I was wrong.</description>
       <link>https://athene.gay/diversions/musicivemade.html</link>
       <guid isPermaLink="true">https://athene.gay/diversions/musicivemade.html</guid>
     </item>
-    <item>
-      <title>The Return of the KFC Double Down</title>
-      <description>OK this is a silly post but my friends asked me for a full
-                review of the new kfc zinger double down. So here it is.</description>
-      <pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate>
-      <link>https://athene.gay/entries/thereturnofthekfcdoubledown.html</link>
-      <guid isPermaLink="true">https://athene.gay/entries/thereturnofthekfcdoubledown.html</guid>
-    </item>
     <item>
       <title>The Life and Death(ish) of Hentai Games</title>
       <description>Once upon a time, I was a horny teenage boy. Now, I'm a horny adult woman.</description>
       <guid isPermaLink="true">https://athene.gay/entries/srb2.html</guid>
     </item>
     <item>
-      <title>Youbeat</title>
-      <description>A while ago, I wanted to adapt arcade game Jubeat for home play,
-                using a device called a launchpad.</description>
-      <pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate>
-      <link>https://athene.gay/projects/youbeat.html</link>
-      <guid isPermaLink="true">https://athene.gay/projects/youbeat.html</guid>
+      <title>The Return of the KFC Double Down</title>
+      <description>OK this is a silly post but my friends asked me for a full
+                review of the new kfc zinger double down. So here it is.</description>
+      <pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate>
+      <link>https://athene.gay/entries/thereturnofthekfcdoubledown.html</link>
+      <guid isPermaLink="true">https://athene.gay/entries/thereturnofthekfcdoubledown.html</guid>
+    </item>
+    <item>
+      <title>It's 2025 and I am playing a D&amp;D Game...</title>
+      <description>... and it's not Baldurs Gate 3; it is, however, equally 7/10.</description>
+      <pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate>
+      <link>https://athene.gay/entries/danddgames.html</link>
+      <guid isPermaLink="true">https://athene.gay/entries/danddgames.html</guid>
     </item>
     <item>
       <title>Athene.Gay</title>
       <guid isPermaLink="true">https://athene.gay/projects/thiswebsite.html</guid>
     </item>
     <item>
-      <title>FFXIV Plugins</title>
-      <description>I currently maintain two silly little plugins for Final Fantasy
-                XIV.</description>
+      <title>Youbeat</title>
+      <description>A while ago, I wanted to adapt arcade game Jubeat for home play,
+                using a device called a launchpad.</description>
       <pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate>
-      <link>https://athene.gay/projects/dalamudplugins.html</link>
-      <guid isPermaLink="true">https://athene.gay/projects/dalamudplugins.html</guid>
+      <link>https://athene.gay/projects/youbeat.html</link>
+      <guid isPermaLink="true">https://athene.gay/projects/youbeat.html</guid>
     </item>
     <item>
       <title>Miku Expo</title>
       <guid isPermaLink="true">https://athene.gay/entries/miku.html</guid>
     </item>
     <item>
-      <title>It's 2025 and I am playing a D&amp;D Game...</title>
-      <description>... and it's not Baldurs Gate 3; it is, however, equally 7/10.</description>
-      <pubDate>Sat, 01 Feb 2025 00:00:00 GMT</pubDate>
-      <link>https://athene.gay/entries/danddgames.html</link>
-      <guid isPermaLink="true">https://athene.gay/entries/danddgames.html</guid>
+      <title>FFXIV Plugins</title>
+      <description>I currently maintain two silly little plugins for Final Fantasy
+                XIV.</description>
+      <pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate>
+      <link>https://athene.gay/projects/dalamudplugins.html</link>
+      <guid isPermaLink="true">https://athene.gay/projects/dalamudplugins.html</guid>
     </item>
     <item>
       <title>Bringing Static Websites Back</title>
diff --git a/img/projects/pipboy-homemade.jpg b/img/projects/pipboy-homemade.jpg
new file mode 100644 (file)
index 0000000..b467115
Binary files /dev/null and b/img/projects/pipboy-homemade.jpg differ
diff --git a/img/projects/pipboy2.jpg b/img/projects/pipboy2.jpg
new file mode 100644 (file)
index 0000000..bfbbb8a
Binary files /dev/null and b/img/projects/pipboy2.jpg differ
diff --git a/img/projects/pipboyfirmwarescreenshot.png b/img/projects/pipboyfirmwarescreenshot.png
new file mode 100644 (file)
index 0000000..b8b6929
Binary files /dev/null and b/img/projects/pipboyfirmwarescreenshot.png differ
index 89b1bd1377433ea329c4c6dc5fdd32975dcb702d..81708e81129d9270bbcc389d8842616f4047ea21 100644 (file)
           </div>
           <div class="entry">
             <h2>Projects</h2>
-            <p>This is an incomplete list for now. working on it.</p>
+            <p>This is an incomplete list for now.</p>
+            <div class="title-block">
+              <a class="blog-title" href="projects/pipboy.html">
+                <h3>Pipboy Prop Custom Apps</h3>
+              </a>
+              <h3 class="datestamp">2025</h3>
+            </div>
             <div class="title-block">
               <a class="blog-title" href="projects/thiswebsite.html">
                 <h3>This Website</h3>
diff --git a/projects/pipboy.html b/projects/pipboy.html
new file mode 100644 (file)
index 0000000..c26fec2
--- /dev/null
@@ -0,0 +1,313 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="UTF-8" />
+    <title>Pipboy Prop Custom Apps</title>
+    <meta property="og:title" content="Pipboy Prop Custom Apps" />
+    <meta name="twitter:title" content="Pipboy Prop Custom Apps" />
+    <meta
+      name="description"
+      content="There's an official Fallout TV show prop. It's hackable."
+    />
+    <meta
+      property="og:description"
+      content="There's an official Fallout TV show prop. It's hackable."
+    />
+    <meta
+      name="twitter:description"
+      content="There's an official Fallout TV show prop. It's hackable."
+    />
+    <meta
+      property="article:published_time"
+      content="2025-03-19T00:00:00+00:00"
+    />
+    <meta
+      property="og:image"
+      content="https://athene.gay/img/projects/pipboy2.jpg"
+    />
+    <meta
+      name="twitter:image"
+      content="https://athene.gay/img/projects/pipboy2.jpg"
+    />
+    <link rel="stylesheet" href="../main.css" />
+  </head>
+  <body class="whole-site">
+    <div>
+      <iframe class="embed-title" src="../shared/title.html"> </iframe>
+      <div class="main-container">
+        <div class="main">
+          <div class="entry">
+            <a href="../index.html">Home</a>
+            <div class="title-block">
+              <a
+                class="blog-title"
+                target="_blank"
+                href="https://github.com/gnargle/pipboy-apps"
+              >
+                <h3>Pipboy Prop Custom Apps</h3>
+              </a>
+              <h3 class="datestamp">2025</h3>
+            </div>
+            <div class="content">
+              <p>There's an official Fallout TV show prop. It's hackable.</p>
+              <p>
+                OK, we're doing something a little different with this one. But
+                first the preamble.
+              </p>
+              <div class="title-block">
+                <h3 class="blog-title">The Preamble</h3>
+                <h3 class="datestamp">19/03/2025</h3>
+              </div>
+              <p>
+                So I haven't cosplayed properly in a while. I did it prettyu
+                regularly in 2023, but 2024 was a nadir for me menty h and
+                cosplay, with its ill-fitting, itchy fabrics that are not
+                designed with trans people in mind, was not gonna help that. I
+                didn't go to many cons, those I did I avoided being in cosplay,
+                yadda yadda.
+              </p>
+              <p>
+                Thing is, is I do actually really like cosplay, when I'm of the
+                frame of mind to do it. I like prop work. I like wearing the
+                clothes Cat has designed for me. It's fun when it's not autistic
+                agony.
+              </p>
+              <p>
+                You may have noticed I've got mad into Fallout of late. See the
+                previous entry on this blog. I've loved Fallout for a long time
+                but never really considered cosplay for it, not really sure why.
+              </p>
+              <p>
+                But this dive back into the series coincided well with me
+                wanting to get back into cosplay proper. And because I want to
+                do it properly, I've gone a bit all out.
+              </p>
+              <p>
+                I've ordered a reaaaalllly nice vault 33 suit, with backpack.
+                I'm gonna dye my hair instead of wearing a wig, which is the
+                worst thing sensory-wise for me in cosplay.
+              </p>
+              <p>And, I made a Pip-Boy! Look at it here, it's pretty great!</p>
+              <a href="../img/projects/pipboy-homemade.jpg">
+                <img
+                  class="blog-img-lrg"
+                  src="../img/projects/pipboy-homemade.jpg"
+                  alt="A photo of the home-made pip-boy in question. It looks pretty accurate but it is very very large."
+                />
+              </a>
+              <p>It's also <i>absolutely fucking massive.</i></p>
+              <p>
+                Wearing it is deeply uncomfortable and my arms get tired after
+                mere minutes, let alone the hours of continuous wear a con would
+                require. It's impractical.
+              </p>
+              <p>
+                There is, however, a solution. Bethesda and 'The Wand Company'
+                produce a screen-accurate version of the tv series hero prop,
+                which normally wouldn't particularly interest me, as often
+                screen-accurate props are just display pieces and are
+                non-functional.
+              </p>
+              <p>
+                Props I use for cosplay need to have flare. I use LEDs to make
+                them nicer, or in the case of my own homebrew pipboy, I was
+                using a phone with an android app that mimics the Fallout 3
+                pip-boy interface, fully interactable. That's cool! And it's a
+                showcase!
+              </p>
+              <p>
+                But luckily this prop also actually works. It features a lot of
+                animations from the tv show, but more to the point, all the
+                dials on it function and are used to interact with it. It's
+                really excellent.
+              </p>
+              <p>
+                It's expensive, though, and that alone wouldn't have been enough
+                to sway me. That is, until I did a little bit of digging and
+                discovered that
+                <a
+                  href="https://log.robco-industries.org/documentation/pipboy-3000/"
+                  >the firmware is customisable, supporting custom applications
+                  out of the box.</a
+                >
+              </p>
+              <p>
+                That's basically a red rag to a bull for me. I
+                <i>love</i> writing software for esoteric things. I mean. Look
+                at the projects on this website. Two of them use a midi device
+                and one of them is a plugin for a videogame. I've also written
+                plenty of software for and interfacing with embedded hardware.
+                This is simply made for me!
+              </p>
+              <p>
+                But if you click through the link at the top there, you'll
+                notice that there's basically nothing in the repository right
+                now. That's because, dear reader, we're gonna be exploring this
+                hardware TOGETHER. IN REAL TIME.
+              </p>
+              <p>
+                There's a sequence at the start of the social network where zuck
+                liveblogs him making facesmash. A lot of what he writes is
+                despicable, and the concept of facesmash is awful, but I dfo
+                love the idea of liveblogging a project. It's not something I
+                have really done before. So we're gonna do it with this one.
+              </p>
+              <p>
+                It's a good candidate. There's some documentation at the above
+                link, but not a lot, and there's lots left to explore in terms
+                of how the system works. The author of the above linked article
+                makes an assumption, for example - that the graphics context
+                should be one bit per pixel - but I don't think that's actually
+                the case. There are different tones in the monochrome screen,
+                and it doesn't look like they're made using dithering. So how
+                are they done? That's jsut one of many questions we will explore
+                together.
+              </p>
+              <p>
+                My ultimate aim here is to put something like the in-game stats
+                screen together. When I was setting up my homemade pip-boy, I
+                put some funny and personaly jokes into what stats and perks I
+                picked - being able to replicate them here would be really nice.
+              </p>
+              <p>
+                There's a long walk between here and there, though, so strap in.
+              </p>
+              <p>
+                However, let's get one thing straight here - I'm not a teenager
+                in a university dorm running on monster energy and rage. I'm a
+                31 year old woman with a full-time job and a bedtime.
+              </p>
+              <p>
+                So the 'liveblog' will not be me hacking away at this until 4AM,
+                oh no no. I will be working on this off and on over the next few
+                weeks most likely, and keeping this post updated as I go.
+              </p>
+              <p>
+                I am sure you will agree that this is a much healthier choice.
+              </p>
+              <div class="title-block">
+                <h3 class="blog-title">Beginnings</h3>
+                <h3 class="datestamp">19/03/2025</h3>
+              </div>
+              <p>
+                OK, so, the device itself. This is a boutique prop with
+                functionality that, while not an afterthought, is certainly not
+                economically worthy of any kind of custom silicon. This is a
+                collector's item, there's only a few thousand of them made, best
+                to use something off the shelf.
+              </p>
+              <p>
+                And, indeed, it does! An STM32 to be exact, an absolute
+                <i>classic</i> bit of IC hardware. The STM32 series are ARM
+                microcontrollers, architecturally similar to the hardware in
+                your common or garden smartphone. ARM is wonderful because it's
+                somehow managed to succeed in all 3 corners of the 'you can only
+                have two' triangle: it's [relatively] quick, it's cheap, and
+                it's Good. It also sips power relative to bigger, more
+                traditional chips, but that's true of any microcontroller,
+                really, so shouldn't really be counted as a strength here.
+              </p>
+              <p>
+                I was a smidge surprised to see an ARM chip in this - if this
+                were a homebrew project you'd expect probably an arduino, an
+                RP2040 or maybe a teensy - but this thing does have some
+                relatively complex graphics to drive.
+              </p>
+              <p>
+                I imagine the main reason this was chosen, however, was hardware
+                video decoding capability. Most (maybe all?) of the show-derived
+                animations are video files on-disk that are just decoded and
+                straight to the graphics context. You can argue this is cheating
+                if you want but to me it reeks of sensible design. Instead of
+                requiring the programmers to design and animate elegantly in a
+                very inelegant context (we'll get to that, believe me), you get
+                the raw files made for the show, re-encode them, and plonk them
+                on. Easy!
+              </p>
+              <p>
+                Additionally, the raw power the STM32 chip here has allows for a
+                less conventional (but friendlier-ish) development context. This
+                chip uses
+                <a href="https://www.espruino.com/">Espruino</a>.
+              </p>
+              <p>
+                Espruino is javascript for microcontrollers. Some of you may
+                have just hissed, and you'd be right to. Javascript is, pretty
+                infamously, horrible. It's heavy and unwieldy, it's untyped,
+                it's messy, it's functional-but-not-quite. If you want an
+                example of how not to design a programming language, you need
+                look no further than javascript. Yet because it runs in-browser,
+                it is the most common language in the world. Go figure.
+              </p>
+              <p>
+                Some of the words in that paragraph may have you convinced that
+                javascript is a bad fit for the lean, high-performance world of
+                microcontrollers, and really, you'd be right. But that hasn't
+                stopped the most insane people alive, javascript monodevelopers,
+                from crowbarring it into them anyway. And so: Espruino.
+              </p>
+              <p>
+                Cards on table, I've never used Espruino before today. I've
+                touched basically every other microcontroller going, and
+                everything else uses C++. I'm not a great C++ programmer, but I
+                can get by.
+              </p>
+              <p>
+                Comparative to my javascript, I might as well be the Bach of
+                C++. I do not like promises, I think throwing all your code to
+                'some indeterminate point in the future' is a horrendous choice,
+                but it's what we have to work with here, so we go with it.
+              </p>
+              <p>
+                The thing is though, in this case, this is actually a fairly
+                massive strength. Because Espruino is a JS interpreter, it will
+                run any valid JS you throw at it. This means you can actually
+                program it interactively from a serial connection, which is
+                pretty snazzy. Here's me throwing some debug code at it purely
+                from the terminal and seeing it display the results in real
+                time.
+              </p>
+              <a href="../img/projects/pipboy2.jpg">
+                <img
+                  class="blog-img-lrg"
+                  src="../img/projects/pipboy2.jpg"
+                  alt="A photo of the prop pip-boy displaying the word 'TEST' on its screen."
+                />
+              </a>
+              <p>
+                It <i>also</i> means we can dump the firmware with one line from
+                the terminal and, instead of being binary and unreadable, it's
+                in regular-ass javascript. Holy shit!
+              </p>
+              <a href="../img/projects/pipboyfirmwarescreenshot.png">
+                <img
+                  class="blog-img"
+                  src="../img/projects/pipboyfirmwarescreenshot.png"
+                  alt="A screenshot of some of the pip-boy firmware's built in function names."
+                />
+              </a>
+              <p>
+                As mentioned, the guy in the link above has already done this to
+                some extent, but I want to dig through a bit further and
+                understand a bit more what's going on. There's some very
+                interesting functions here that I wanna figure out.
+              </p>
+              <p>
+                For legal reasons, I can't share this firmware wholesale in the
+                repo, so you won't be able to see precisely what I'm talking
+                about. As we go, however, I'll screenshot various parts of the
+                code so you, reader, have context. Like the above!
+              </p>
+              <p>
+                Anyway, I think that's where I'm leaving it for tonight. It's
+                11pm, after all. More tomorrow.
+              </p>
+            </div>
+          </div>
+        </div>
+      </div>
+      <iframe class="embed-links" src="../shared/links.html"> </iframe>
+      <iframe class="embed-footer" src="../shared/footer.html"> </iframe>
+    </div>
+  </body>
+</html>