<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Red Ring Rico&#39;s Game Programming Web Zone</title>
    <link>https://www.redringrico.com/</link>
    <description>Recent content on Red Ring Rico&#39;s Game Programming Web Zone</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <lastBuildDate>Sat, 19 Sep 2026 11:34:12 +0100</lastBuildDate>
    <atom:link href="https://www.redringrico.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Back to where I was</title>
      <link>https://www.redringrico.com/weblog/back-to-where-i-was/</link>
      <pubDate>Sat, 19 Sep 2026 11:34:12 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/back-to-where-i-was/</guid>
      <description>&lt;p&gt;It took a while, but I&amp;rsquo;ve managed to get the root&amp;lt;-&amp;gt;G2 transactions working with what should be correct clock domain crossing (CDC).  Now I&amp;rsquo;m back to where I was about a year ago.  Most of the assumptions made with the previous method were relying heavily on the G2 clock lining up with the board&amp;rsquo;s system clock.  Naively, an attempt was made to detect when the G2 clock was toggling to allow for the data to be transferred.  This would work most of the time, but it would fail every few minutes or a few times in a short period of time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Board bringup</title>
      <link>https://www.redringrico.com/weblog/board-bringup/</link>
      <pubDate>Sun, 16 Aug 2026 02:04:35 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/board-bringup/</guid>
      <description>&lt;p&gt;After 16 or so hours of soldering and testing, the board may be working.&lt;/p&gt;&#xA;&lt;p&gt;Every new step was quite exciting.  First came the power delivery.  Connecting a Schottky diode from the G2 side to the target.  This may not be absolutely necessary, however, it makes me feel slightly better when it comes to connecting the USB programmer (which didn&amp;rsquo;t make it into this round of testing).  Confirming that 3.3V was coming through on the test points.  Next was the power good indicator, this worked as anticipated.  2.5V came after that, followed by 1.1V.  The 3.3V dropped to around 3.0V, which is concerning.  I have no idea why this is the case and I have yet to investigate it.  After connecting the 1.1V power regulator it seems like the cathode side of the power good LED is receiving ~!V.  I&amp;rsquo;m still scrutinising the circuit to determine where I messed up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>First practical PCB</title>
      <link>https://www.redringrico.com/weblog/first-practical-pcb/</link>
      <pubDate>Tue, 28 Jul 2026 01:30:00 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/first-practical-pcb/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s far too quiet around here.&lt;/p&gt;&#xA;&lt;p&gt;I had intended to design a usable PCB after realising that the clock domain crossing (or lack thereof) was incorrect.  All of Autumn and Winter was spent working on Shambler, mostly tools.  In late January and early February, I wrote a tool to convert the Ninja models from an early Katana SDK into glTF, which I still need to commit the source code for.  From April to early June, I had an itch to reverse engineer the European version of &lt;em&gt;Resident Evil&lt;/em&gt; for the &lt;em&gt;GameCube&lt;/em&gt;.  There&amp;rsquo;s a lot left to do with that, which I may return to this year depending on how far I get with this hardware project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading TF card information</title>
      <link>https://www.redringrico.com/weblog/reading-tf-card-information/</link>
      <pubDate>Thu, 20 Mar 2025 02:54:59 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/reading-tf-card-information/</guid>
      <description>&lt;p&gt;After playing around for a while with the Wishbone interface and trying to work out how the modem and Ethernet MAC will interact with each other, the TF card information is present and can be acquired at will.  The ULX3S doesn&amp;rsquo;t have the full TF card lines enabled so it&amp;rsquo;s not possible to refresh the information when a card is inserted.  This shouldn&amp;rsquo;t be a problem, as the final unit would be disconnected from the Dreamcast to change the TF card.&lt;/p&gt;</description>
    </item>
    <item>
      <title>G2 DMA writing</title>
      <link>https://www.redringrico.com/weblog/g2-dma-writing/</link>
      <pubDate>Tue, 18 Feb 2025 18:19:19 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/g2-dma-writing/</guid>
      <description>&lt;p&gt;Much like the &lt;a href=&#34;https://www.redringrico.com/weblog/g2-dma-reading/&#34;&gt;DMA read&lt;/a&gt;, the write follows the same rule of every access address must be 32-byte aligned except for the last one, which is the address plus one.&lt;/p&gt;&#xA;&lt;p style=&#34;background-color:#EEEEEE&#34;&gt;&#xA;&lt;script type=&#34;WaveDrom&#34;&gt;&#xA;{ signal: [&#xA;  { name: &#39;CLK&#39;, wave: &#39;N...........................&#39; },&#xA;  { name: &#39;FR#&#39;, wave: &#39;hl........................h.&#39; },&#xA;  { name: &#39;BL#&#39;, wave: &#39;hl.........................h&#39; },&#xA;  { name: &#39;BH#&#39;, wave: &#39;h.l........................h&#39; },&#xA;  { name: &#39;TR#&#39;, wave: &#39;h........lh.l..............h&#39; },&#xA;  { name: &#39;DS#&#39;, wave: &#39;h....l.....................h&#39; },&#xA;  { name: &#39;AD&#39;,  wave: &#39;x34..7....8..78787878787878x&#39;, data: [&#39;AL&#39;, &#39;AH&#39;, &#39;W0&#39;, &#39;W1&#39;, &#39;W2&#39;, &#39;W3&#39;, &#39;W4&#39;, &#39;W5&#39;, &#39;W6&#39;, &#39;W7&#39;, &#39;W8&#39;, &#39;W9&#39;, &#39;W10&#39;, &#39;W11&#39;, &#39;W12&#39;, &#39;W13&#39;, &#39;W14&#39;, &#39;W15&#39;] }&#xA;],&#xA;config: { hscale: 1 },&#xA;head:{&#xA;   text:&#39;DMA write&#39;,&#xA;   tick:0,&#xA;   every:5&#xA;   }&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;/p&gt;</description>
    </item>
    <item>
      <title>G2 DMA reading</title>
      <link>https://www.redringrico.com/weblog/g2-dma-reading/</link>
      <pubDate>Sun, 16 Feb 2025 03:36:48 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/g2-dma-reading/</guid>
      <description>&lt;p&gt;The timing is still off and the output doesn&amp;rsquo;t seem as clean as I&amp;rsquo;d like.  That hasn&amp;rsquo;t stopped the DMA from working.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m starting to think that the falling edge of the G2 clock is when the data is acquired from the line.  Setting the logic analyser to 500MHz, it looks like the FR#, BH#, and BL# signals are going down after the rising edge and before the falling edge.  I&amp;rsquo;ve updated my &lt;a href=&#34;https://www.redringrico.com/weblog/some-g2-bus-details/&#34;&gt;previous post&lt;/a&gt; about the G2 bus to reflect that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>G2 IRQ</title>
      <link>https://www.redringrico.com/weblog/g2-irq/</link>
      <pubDate>Tue, 04 Feb 2025 04:33:17 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/g2-irq/</guid>
      <description>&lt;p&gt;Before acquiring the 32-channel logic analyser, I decded to write a G2 bus plugin for it.  It&amp;rsquo;s not perfect and the waveforms seem to be hit-or-miss coming from the logic analyser.  The G2 clock seems to get lost sometimes.  A day after the plugin was written, the Kingst LA5032 arrived and the results were mostly usable.  I might be using the wrong approach by relying on the clock.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve learnt that while there are three lines which appear to be dedicated to external devices (external device 0, 1, and development), none are used.  I knew that the Broadband Adapter (BBA) didn&amp;rsquo;t have connections for them and used the IREXT# signal.  It makes me wonder if the Zip drive+USB device were going to use them.  Since it wasn&amp;rsquo;t released, there&amp;rsquo;s no way of knowing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Some G2 bus details</title>
      <link>https://www.redringrico.com/weblog/some-g2-bus-details/</link>
      <pubDate>Wed, 01 Jan 2025 01:46:13 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/some-g2-bus-details/</guid>
      <description>&lt;p&gt;I haven&amp;rsquo;t made time to explore the G2 bus further.  I have, however, been busy working on the FPGA side of things, reading specifications for days-on-end, and figuring out a more flexible content pipeline for the Dreamcast game.&lt;/p&gt;&#xA;&lt;p&gt;The least I can do is provide some documentation here for what I&amp;rsquo;ve leant about the G2 bus.  Due to the sixteen channels available on the logic analyser I&amp;rsquo;m using, some assumptions are made on the bits of AD that can&amp;rsquo;t be read at the same time as the rest of the signals.  Also, documentation is outside my usual day-to-day work, so this post may evolve over time.  I&amp;rsquo;m tempted to use LaTeX for this instead, but I digress.&lt;/p&gt;</description>
    </item>
    <item>
      <title>First message from G2 device</title>
      <link>https://www.redringrico.com/weblog/first-message-from-g2-device/</link>
      <pubDate>Sat, 24 Aug 2024 15:16:28 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/first-message-from-g2-device/</guid>
      <description>&lt;p&gt;About a week or two after the previous entry, I decided to take a stab at getting started with the G2 device which I&amp;rsquo;m tentatively calling the Dreamcast Data+Network Adapter.  To get the signals, I designed a set of PCBs to allow for a logic analyser to be attached during a known good device&amp;rsquo;s operation.  In this case, it&amp;rsquo;s the Broadband Adapter.&lt;/p&gt;&#xA;&lt;p&gt;Still being relatively new to HDL, I am making the mistake that a lot of software developers probably do when starting out with any HDL project.  Treating it like software.  There&amp;rsquo;s a lot still to learn and I don&amp;rsquo;t think that I have a good grasp on the timing issues yet.  Initially, I wanted to run the FPGA at 100MHz and use the built-in PLLs to create that clock from the G2&amp;rsquo;s 25MHz bus.  It seems as though there are timing issues that I don&amp;rsquo;t understand and had to drop it to 50MHz.  Maybe I&amp;rsquo;ll figure out the problem with the PLL (if there is one) and get it back to 100MHz.  50MHz may be enough for at least the BBA and SD card side of things.  The modem could be a different story.  It doesn&amp;rsquo;t have to do any real processing at 56MHz like the MDP on an original Dreamcast unit so it should be okay.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Water rendering</title>
      <link>https://www.redringrico.com/weblog/water-rendering/</link>
      <pubDate>Thu, 06 Jun 2024 10:07:27 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/water-rendering/</guid>
      <description>&lt;p&gt;Since the last update, I&amp;rsquo;ve been moving into a new place.  The time it&amp;rsquo;s taken has had an adverse impact on planning for the year.  Originally, it wasn&amp;rsquo;t supposed to happen until the New Year, but it was accelerated and now here I am.&lt;/p&gt;&#xA;&lt;p&gt;For the past month, I was curious about rendring water from the &lt;em&gt;Game Programming Gems&lt;/em&gt; book (Chapter 5.11 &lt;strong&gt;Refraction Mapping for Liquids in Containers&lt;/strong&gt;).  Most of the time went into converting the OpenGL code into a left-handed version.  Changing the chirality led to taking another pass over the operations being performed and once again checking that the outcome is correct.  More tests should be written to quash these uncertanties.  There was also the reliance on OpenGL&amp;rsquo;s texture coordinate generation functions that took longer than anticipated to figure out how they work.  I failed to understand it well enough from the OpenGL standard, so turning to the OpenGL wiki&amp;rsquo;s &lt;a href=&#34;https://www.khronos.org/opengl/wiki/Mathematics_of_glTexGen&#34;&gt;Mathematics of glTexGen&lt;/a&gt; made everything much clearer.  &lt;em&gt;3D Games: Real-time Rendering and Software Technology&lt;/em&gt; and &lt;em&gt;Real-time Rendering&lt;/em&gt; were very useful for the environment mapping, too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PixelCity update 1</title>
      <link>https://www.redringrico.com/weblog/pixelcity-update-1/</link>
      <pubDate>Sun, 12 Nov 2023 12:56:18 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/pixelcity-update-1/</guid>
      <description>&lt;p&gt;In the last entry, I forgot to include the progress made so far.  I&amp;rsquo;ll dump that here then move on to the progress this week.&lt;/p&gt;&#xA;&lt;p&gt;First up is the texture generation.  Starting with windows:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/pixelcity-update-1/windows_hu_beecbfb27d1707f7.png 500w&#xA;  &#xA;  &#xA;    /weblog/pixelcity-update-1/windows_hu_1ee4c8e35316c5e3.png 512w&#xA;  &#xA;  &#xA;    /weblog/pixelcity-update-1/windows_hu_beecbfb27d1707f7.png 640w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/pixelcity-update-1/windows.png&#34; &#xA;  &#xA;  alt=&#34;Basic window texture&#34;&gt;&#xA;&#xA;&lt;p&gt;Nothing too fancy to begin with.  I later discovered that there was an issue trying to push too many vertices.  Reducing the texture memory helped, but I don&amp;rsquo;t like how fast-and-loose I&amp;rsquo;ve become with the project so far.  The source code for it is quite unsightly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exception handling</title>
      <link>https://www.redringrico.com/weblog/exception-handling/</link>
      <pubDate>Sat, 04 Nov 2023 08:42:07 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/exception-handling/</guid>
      <description>&lt;p&gt;Between the last entry and this one, I&amp;rsquo;ve mostly been working on the GUI editor for Anvil.  It&amp;rsquo;s very slow going.  To switch things up, two weeks ago I started working on a procedural city demo.  It&amp;rsquo;s based on the same one that &lt;a href=&#34;https://www.shamusyoung.com/twentysidedtale/?p=2940&#34;&gt;Shamus Young created in 2009&lt;/a&gt;.  It&amp;rsquo;s always tempted me to try and make the demo work on as many platforms as possible.  That probably won&amp;rsquo;t happen any time soon, so I&amp;rsquo;m just going to stick with a Dreamcast version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beginning bumpmapping</title>
      <link>https://www.redringrico.com/weblog/beginning-bumpmapping/</link>
      <pubDate>Fri, 05 May 2023 19:11:36 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/beginning-bumpmapping/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been busy for the past month, trying to fit in the time to create a bumpmapper.  Mine is heavily based on &lt;a href=&#34;http://web.archive.org/web/20051030102410/http://www.ati.com/developer/normalmapper.zip&#34;&gt;ATi&amp;rsquo;s Normalmapper&lt;/a&gt; from their &lt;a href=&#34;http://web.archive.org/web/20021015094218/http://www.ati.com/developer/tools.html&#34;&gt;Tools page&lt;/a&gt; in 2002.  Here are some of the results from it, with my very simple box model that has a low-polygon, 12-triangle mesh and a high-polygon, 30,000 triangle mesh.&lt;/p&gt;&#xA;&lt;p&gt;This is a baseline test, a slightly scaled up box was used:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/beginning-bumpmapping/ati-box-simple-normals.png&#34; &#xA;  &#xA;  alt=&#34;ATi&amp;#39;s Normalmapper, baseline&#34;&gt;&#xA;&#xA;&lt;p&gt;The next two are the first attempt at a high-resolution model that&amp;rsquo;s just a face on the front side:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Networking fun</title>
      <link>https://www.redringrico.com/weblog/networking-fun/</link>
      <pubDate>Thu, 16 Mar 2023 19:53:09 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/networking-fun/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been far too long since the last entry.  I spent December working on the scripting system, which is coming together but I think there&amp;rsquo;s a lot more work to be done before I can even begin to use it in any form.  Some new books have arrived, mostly rendering related, that have been a great source of information.  The hardest thing to balance is the technology side of things.  I&amp;rsquo;m trying to get as close to June 30, 2001, without going beyond it.  Some wonderful references exist in books written either just after, or sometimes years later, that are period-correct.  The ECS is a good example of this.  It&amp;rsquo;s taking heavy inspiration from something that Scott Bilas had presented during GDC 2002 but would have existed at the time of Dungeon Siege&amp;rsquo;s early development cycle.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shadowmapping woes</title>
      <link>https://www.redringrico.com/weblog/shadowmapping-woes/</link>
      <pubDate>Thu, 27 Oct 2022 19:51:14 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/shadowmapping-woes/</guid>
      <description>&lt;p&gt;I think that shadowmapping may be cut in the end, however, I want to at least try it out.  I couldn&amp;rsquo;t resist.  Seeing as I&amp;rsquo;m running behind already, what&amp;rsquo;s another two weeks?&lt;/p&gt;&#xA;&lt;p&gt;So far, I&amp;rsquo;ve spent 13 days on it and am incredibly close to resolving the last issue of projecting angled lights.  If a light is facing the caster from one side, it&amp;rsquo;s okay.  Extending it to be a light which is above and to one side breaks it completely.  I&amp;rsquo;m not sure if I&amp;rsquo;ll have it fixed by the weekend, but I&amp;rsquo;ll certainly try.  Two major issues presented themselves, which I&amp;rsquo;m forever in debt to &lt;em&gt;Game Programming Gems&lt;/em&gt;, &lt;em&gt;vterrain.org&lt;/em&gt;, and &lt;em&gt;Real-time Rendering Tricks and Techniques in DirectX&lt;/em&gt; for having solved.  The first was getting the shadowmap projected.  I had it rendering into a texture with no problems, but the projection was off.  I combined two chapters from &lt;em&gt;Game Programming Gems&lt;/em&gt; and &lt;em&gt;Real-time Rendering Tricks and Techniques in DirectX&lt;/em&gt; to get to the correct result.  The texture would project onto the surface but it was way off.  The next issue was how to determine if a triangle is in the shadowmap camera&amp;rsquo;s frustum.  It was way simpler than I thought.  Using six bits to represent if a point is in front of a plane, then seeing if the bits were zero (all in), matched with all three (completely outside), or otherwise (intersecting).  With all of that I got the following  results:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mesh skinning fixed</title>
      <link>https://www.redringrico.com/weblog/mesh-skinning-fixed/</link>
      <pubDate>Fri, 14 Oct 2022 15:40:33 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/mesh-skinning-fixed/</guid>
      <description>&lt;p&gt;After many, many wasted hours, I finally fixed an issue I didn&amp;rsquo;t realise I had with the mesh skinning.  In an effort to optimise processing the vertices at runtime the vertices were pre-multiplied by the inverse bind matrix, which I thought was a sensible thing to do.  For some reason that I haven&amp;rsquo;t yet figured out, this was a mistake.  I&amp;rsquo;ve deferred that stage to the model update function.  Now instead of a vertex with an influence of one joint transforming just the positions and normals, it&amp;rsquo;s the case that the inverse bind matrix is used for both alongside the other transform.  It was already a heavy operation that I wanted to optimise later, but now it&amp;rsquo;s even more of a processing hog.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lightmapping on Dreamcast</title>
      <link>https://www.redringrico.com/weblog/lightmapping-on-dreamcast/</link>
      <pubDate>Tue, 20 Sep 2022 06:38:40 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/lightmapping-on-dreamcast/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s not much, but it is working.  Annoyingly, it does require using transparency for the lightmap polygons, which is a pain as it reduces the render time significantly.  I&amp;rsquo;ll look into ways around it.  Now I&amp;rsquo;m interested in getting static props and animated characters added to the scene to see what happens to the performance.  Also, the lightmap is ARGB4, so it&amp;rsquo;s not the best quality.  I&amp;rsquo;m thinking of using either 565 or YUV422 textures.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lightmapper first pass</title>
      <link>https://www.redringrico.com/weblog/lightmapper-first-pass/</link>
      <pubDate>Thu, 15 Sep 2022 07:36:20 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/lightmapper-first-pass/</guid>
      <description>&lt;p&gt;This time I&amp;rsquo;m way behind schedule.  The lightmapper was always going to be a huge task.  It didn&amp;rsquo;t help that I didn&amp;rsquo;t have as much free time as I&amp;rsquo;d hoped.  By the schedule, I should have shadow mapping working already.  If I can really push myself for the next three weeks, I may be able to get shadow mapping in by mid-October.&lt;/p&gt;&#xA;&lt;p&gt;In its current state, the lightmapper is very limited.  Point lights only, lambert shading, poor layout of the UVs, one lumel per world unit, and only axis-aligned polygons are really supported.  The results are fine and it was a struggle to get to this point, but I think the path forward for the future of the lightmapper work is clearer.  Below, I&amp;rsquo;ve uploaded some screenshots from the editor after getting the UV mapping working as well as some images of the lightmap itself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On to the lightmapper</title>
      <link>https://www.redringrico.com/weblog/on-to-the-lightmapper/</link>
      <pubDate>Sat, 13 Aug 2022 08:29:48 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/on-to-the-lightmapper/</guid>
      <description>&lt;p&gt;A slightly early start, which I think will be needed for this stage.  My main concerns with the lightmapping process is that I won&amp;rsquo;t have the time to bake shadows.  I don&amp;rsquo;t know why this bothers me or why I think it won&amp;rsquo;t be feasible in a two-week period, but it&amp;rsquo;s something that I keep thinking about.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t have a way to immediately export the CSG from the scene, either.  The option is there, but I need to expose it and it, like the rest of the editor, won&amp;rsquo;t be pretty.  The plan is to export the CSG, save it as a Maya scene with some way of indicating that the geometry is to be considered for lightmapping (with the final editor, this will be something on a per-model basis) and import it into the editor then bake the lighting information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stage loading</title>
      <link>https://www.redringrico.com/weblog/stage-loading/</link>
      <pubDate>Wed, 03 Aug 2022 05:49:23 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/stage-loading/</guid>
      <description>&lt;p&gt;Now I&amp;rsquo;m slightly ahead of where I thought I&amp;rsquo;d be.  I think the lighting may be broken for animated models, however, so I&amp;rsquo;ll need to see if it is.  For now, I&amp;rsquo;m happy.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the initial test:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/stage-loading/stage-loading-01_hu_e9c8563b98ae0898.bmp 500w&#xA;  &#xA;  &#xA;    /weblog/stage-loading/stage-loading-01_hu_dcdf815340383887.bmp 512w&#xA;  &#xA;  &#xA;    /weblog/stage-loading/stage-loading-01_hu_e9c8563b98ae0898.bmp 640w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/stage-loading/stage-loading-01.bmp&#34; &#xA;  &#xA;  alt=&#34;Stage loaded from file&#34;&gt;&#xA;&#xA;&lt;p&gt;With some basic diffuse lighting from a point light.  Earlier, I only had directional lighting working.  It&amp;rsquo;s tempting to add phong and other models, but I&amp;rsquo;ll leave it at this basic level for now and may start on some of the tasks for next week.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Catching up</title>
      <link>https://www.redringrico.com/weblog/catching-up/</link>
      <pubDate>Mon, 01 Aug 2022 00:55:45 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/catching-up/</guid>
      <description>&lt;p&gt;Very close to getting back to where I should be.  I only need translation at the moment and it works but has some issues.  Lights are not yet a part of scenes but should be in today with some brute force.&lt;/p&gt;&#xA;&lt;p&gt;One thing I didn&amp;rsquo;t specify was loading the stage data, just resource dependencies.  This is a large oversight as it seemed clear when I wrote down the list of tasks that it was &amp;ldquo;obvious&amp;rdquo; at the time of writing so I didn&amp;rsquo;t think to add it.  I&amp;rsquo;ll be adding it in the week and have updated the roadmap with notes about it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Resource management loading</title>
      <link>https://www.redringrico.com/weblog/resource-management-loading/</link>
      <pubDate>Fri, 29 Jul 2022 06:50:38 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/resource-management-loading/</guid>
      <description>&lt;p&gt;While this may not seem impressive, it shows that the resource manager is doing what it should.&lt;/p&gt;&#xA;&lt;p&gt;This was just one call to get the model, which also loaded the material, which loaded the texture.  Right now it will just load in reverse order (texture, material, model), which isn&amp;rsquo;t great.  The order should be material-&amp;gt;model-&amp;gt;texture, based on the location on the disc.  I&amp;rsquo;m happy with how it is for now.  A priority queue for doing this correctly will be something I&amp;rsquo;ll try and implement before the teaser releases.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running behind</title>
      <link>https://www.redringrico.com/weblog/running-behind/</link>
      <pubDate>Wed, 27 Jul 2022 00:34:38 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/running-behind/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m about a week out from where I should be.  There were issues with the change journal and DAG which I still needed to address and I&amp;rsquo;m sure there are more issues that I haven&amp;rsquo;t yet uncovered.  A fair bit of time was sunk trying to get fancy with making outlines for selected objects that scaled correctly and didn&amp;rsquo;t pay off.  Right now the main focus is getting the content loaded in order from the disc, driven by dependency information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Music playback</title>
      <link>https://www.redringrico.com/weblog/music-playback/</link>
      <pubDate>Sun, 10 Jul 2022 17:50:19 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/music-playback/</guid>
      <description>&lt;p&gt;I just finished writing some of the worst code for getting music streaming working.  I need to go back and fix it here-and-there during the next few weeks but I can&amp;rsquo;t afford the time to not have it hard-coded and incredibly flaky.&lt;/p&gt;&#xA;&lt;p&gt;If the audio I was using fell exactly on 2048-byte boundaries, there&amp;rsquo;d be no issue.  However, as this is the real world where timing can be off, I&amp;rsquo;m very glad what I sampled was as imperfect as possible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teaser demo one roadmap</title>
      <link>https://www.redringrico.com/weblog/teaser-demo-one-roadmap/</link>
      <pubDate>Thu, 30 Jun 2022 02:33:50 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/teaser-demo-one-roadmap/</guid>
      <description>&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Month&lt;/th&gt;&#xA;          &lt;th&gt;W/B&lt;/th&gt;&#xA;          &lt;th&gt;Tasks&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;June&lt;/td&gt;&#xA;          &lt;td&gt;27&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#F80066&#34; &gt;Initial setup/API organisation&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#F80066&#34; &gt;sound effect playback&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;July&lt;/td&gt;&#xA;          &lt;td&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#F80066&#34; &gt;Music playback&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#F80066&#34; &gt;volume control&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;July&lt;/td&gt;&#xA;          &lt;td&gt;11&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;Binary conversion of stage data&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;July&lt;/td&gt;&#xA;          &lt;td&gt;18&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#337788&#34; &gt;Queue content loading on Dreamcast&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;July&lt;/td&gt;&#xA;          &lt;td&gt;25&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;Selection&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;transform tools&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;lights&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;August&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#11F877&#34; &gt;Load stage data&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#11F877&#34; &gt;light objects&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#11F877&#34; &gt;vertex-based lighting&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;August&lt;/td&gt;&#xA;          &lt;td&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;Four-way view&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;camera placement&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;August&lt;/td&gt;&#xA;          &lt;td&gt;15&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;Lightmapper&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;August&lt;/td&gt;&#xA;          &lt;td&gt;22&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#3128F8&#34; &gt;Lightmapper&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;August&lt;/td&gt;&#xA;          &lt;td&gt;29&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#11F877&#34; &gt;Lightmap blending&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#337788&#34; &gt;optionally convert CSG&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;September&lt;/td&gt;&#xA;          &lt;td&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#11F877&#34; &gt;Shadow maps&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;September&lt;/td&gt;&#xA;          &lt;td&gt;12&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#11F877&#34; &gt;Shadow maps&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;walking character&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;September&lt;/td&gt;&#xA;          &lt;td&gt;19&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;Floorboards&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;wall with doorframe&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;tablecloth&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;blue light&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;September&lt;/td&gt;&#xA;          &lt;td&gt;26&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;Music&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;October&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;Music&lt;/span&gt;&#xA;, &#xA;&#xA;&#xA;&#xA;&#xA;&lt;span style=&#34;color:#881188&#34; &gt;footsteps&lt;/span&gt;&#xA;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;Colour legend&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>RSA SHA-1 signature validation works</title>
      <link>https://www.redringrico.com/weblog/rsa-sha-1-signature-validation-works/</link>
      <pubDate>Thu, 30 Jun 2022 02:13:57 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/rsa-sha-1-signature-validation-works/</guid>
      <description>&lt;p&gt;A very specific route through Crypto++ allows for the digital signature verification to work.  I think I&amp;rsquo;ll need to revisit it later down the line.  I definitely need to get to writing tests for more things.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s making me think about how to handle the public key.  Since I started down the route of implementing this, my thought was to use the third partition (P2) of the Flash memory to store it.  The fifth (P4) seems to always be blank.  If nothing else uses it, I&amp;rsquo;d really like to suggest some kind of standard for using it.  Maybe not like how P2 handles it, more like P3 by allocating storage sequentially.  It&amp;rsquo;s very hard to determine how to go about this, as there will absolutely be the case of overwriting something that some other game relies on down the line if taking the &lt;em&gt;first-come, first-served&lt;/em&gt; method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>64-bit number support</title>
      <link>https://www.redringrico.com/weblog/64-bit-number-support/</link>
      <pubDate>Sun, 19 Jun 2022 10:32:28 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/64-bit-number-support/</guid>
      <description>&lt;p&gt;I finally got around to adding 64-bit number support into Shambler.  It&amp;rsquo;s mostly necessary now due to the digital signature verification.  While writing all this code (more like transliterating from Crypto++) I did think that it was silly because I&amp;rsquo;m not even going to use it for years at this point.  It was something I wanted to do.&lt;/p&gt;&#xA;&lt;p&gt;So far I&amp;rsquo;ve used about two or three weeks on it.  Hopefully I can speed up and finally get something out by the end of this year.  Like I say every year.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating brushes in the editor</title>
      <link>https://www.redringrico.com/weblog/creating-brushes-in-the-editor/</link>
      <pubDate>Thu, 26 May 2022 11:28:02 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/creating-brushes-in-the-editor/</guid>
      <description>&lt;p&gt;This was a frustrating one.  Mostly because I thought I had come up with a clean way to position the planes after creation.  Unfortunately, I&amp;rsquo;m not quite smart enough for that so I resorted to a much simpler method of adding each plane and moving it instead of afterward.&lt;/p&gt;&#xA;&lt;p&gt;Here are some of the images showing the process:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_64a30f43406a9132.png 500w&#xA;  &#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_5165e731de0c6492.png 512w&#xA;  &#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_64a30f43406a9132.png 640w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_98074afdb3ea34c8.png 800w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_11f9e5ccf931b9c5.png 1024w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_c908515c65685df2.png 1152w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_a005da0518ec758.png 1200w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-01_hu_2c68033532997eca.png 1280w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/creating-brushes-in-the-editor/brush-create-attempt-01.png&#34; &#xA;  &#xA;  alt=&#34;&#34;&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_1bf1f961a6a24759.png 500w&#xA;  &#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_f105cb4768ed3133.png 512w&#xA;  &#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_1bf1f961a6a24759.png 640w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_b3a2dfb2719add23.png 800w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_594ba864fb4d56c3.png 1024w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_2f04a5bc9bb04453.png 1152w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_1e93ce7132be3246.png 1200w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-02_hu_4c74498467e95e75.png 1280w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/creating-brushes-in-the-editor/brush-create-attempt-02.png&#34; &#xA;  &#xA;  alt=&#34;&#34;&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_f6ede94687cc342b.png 500w&#xA;  &#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_e74e139d1af072d7.png 512w&#xA;  &#xA;  &#xA;    /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_f6ede94687cc342b.png 640w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_78fec5f1ea3d6562.png 800w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_c9c63b5a7d412d82.png 1024w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_563b4e1728616045.png 1152w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_ab1baf9ab70628cf.png 1200w&#xA;  &#xA;  &#xA;    , /weblog/creating-brushes-in-the-editor/brush-create-attempt-03_hu_1cd5525e15cf4c1b.png 1280w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/creating-brushes-in-the-editor/brush-create-attempt-03.png&#34; &#xA;  &#xA;  alt=&#34;&#34;&gt;&#xA;&#xA;&lt;p&gt;This one was close, the first image is the wireframe, followed by the brush creation:&lt;/p&gt;</description>
    </item>
    <item>
      <title>CSG to Wavefront Object</title>
      <link>https://www.redringrico.com/weblog/csg-to-wavefront-object/</link>
      <pubDate>Sat, 14 May 2022 09:24:29 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/csg-to-wavefront-object/</guid>
      <description>&lt;p&gt;Two things are now mostly done.  CSG brushes can be exported to Wavefront Object files.  There&amp;rsquo;s no material support, normals, or UVs at this time.  I also don&amp;rsquo;t currently export it to anywhere other than the fixed location of D:\csg.obj.  For testing, this is okay but I&amp;rsquo;d prefer to be able to export each section as its own group in the tree for better organisation when dealing with it in Maya.  Also, handling the workflow of refreshing the CSG back to Maya may be a challenge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic CSG union done</title>
      <link>https://www.redringrico.com/weblog/basic-csg-union-done/</link>
      <pubDate>Sat, 07 May 2022 13:55:34 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/basic-csg-union-done/</guid>
      <description>&lt;p&gt;Almost there, now.  After the morale-sucking experience that was drive failure amidst what was a haphazard slapping together of code to get me to where I needed to be.  In a way, I&amp;rsquo;m glad it happened as it forced me to recall what I had done without the dead-ends left in.  It&amp;rsquo;s not 100% complete.  The faces for one set of the polygons appear to be orientated in the wrong direction.  I&amp;rsquo;m sure once it&amp;rsquo;s exported as a Wavefront Object file it will be easier to see where I&amp;rsquo;m going wrong.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drive failure</title>
      <link>https://www.redringrico.com/weblog/drive-failure/</link>
      <pubDate>Sat, 23 Apr 2022 18:02:55 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/drive-failure/</guid>
      <description>&lt;p&gt;About a week after my last entry, one of the drives in the workstation&amp;rsquo;s RAID started having issues.  It would refuse to boot with both drives present, if one or the other were powered on it was fine.  I&amp;rsquo;m still using the same fault drive at the moment, so I&amp;rsquo;m bracing for another failure soon while I wait on another drive.  I wouldn&amp;rsquo;t mind so much if it weren&amp;rsquo;t for the fact that I had been doing planes incorrectly and had to fix up a few files.  I could have possibly reclaimed the data if I had known ahead of time that the RAID would be useless on the next reboot after messages appeared concerning writing journal entries.  This is a RAID0 on purpose, as there&amp;rsquo;s no data of worth on there in case of a failure it should have been as simple as checking the source and data out again.  The code quality wasn&amp;rsquo;t the best and I still wasn&amp;rsquo;t convinced that I was going down the right track of correcting my mistakes with the planes.  At the least I&amp;rsquo;m now much less stressed about the quality and more concerned about hardware dying.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beginning CSG</title>
      <link>https://www.redringrico.com/weblog/beginning-csg/</link>
      <pubDate>Tue, 08 Mar 2022 17:34:55 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/beginning-csg/</guid>
      <description>&lt;p&gt;Some progress on the CSG front.  I&amp;rsquo;ve built up brushes from a series of planes.  I don&amp;rsquo;t plan on doing more than addition, subtraction, and union of brushes for exporting as Wavefront Obj files to use as a outline to detail later.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t have much in the way of screenshots, but here&amp;rsquo;s the first attempt after I got the &amp;ldquo;final&amp;rdquo; mesh built:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/beginning-csg/basic-csg_hu_db236fcfe3da6d7f.png 500w&#xA;  &#xA;  &#xA;    /weblog/beginning-csg/basic-csg_hu_c88eb7e6bf5c089f.png 512w&#xA;  &#xA;  &#xA;    /weblog/beginning-csg/basic-csg_hu_db236fcfe3da6d7f.png 640w&#xA;  &#xA;  &#xA;    , /weblog/beginning-csg/basic-csg_hu_28dbd0b7eee4f273.png 800w&#xA;  &#xA;  &#xA;    , /weblog/beginning-csg/basic-csg_hu_45bef94fdf774110.png 1024w&#xA;  &#xA;  &#xA;    , /weblog/beginning-csg/basic-csg_hu_8309a34716423d1d.png 1152w&#xA;  &#xA;  &#xA;    , /weblog/beginning-csg/basic-csg_hu_d46d8b3308a8bff5.png 1200w&#xA;  &#xA;  &#xA;    , /weblog/beginning-csg/basic-csg_hu_3028bc28d47f8c32.png 1280w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/beginning-csg/basic-csg.png&#34; &#xA;  &#xA;  alt=&#34;Basic CSG&#34;&gt;&#xA;&#xA;&lt;p&gt;Here&amp;rsquo;s the fancified version:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Microthreads</title>
      <link>https://www.redringrico.com/weblog/microthreads/</link>
      <pubDate>Mon, 21 Feb 2022 23:37:09 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/microthreads/</guid>
      <description>&lt;p&gt;One of the more difficult things that I&amp;rsquo;ve been attempting to figure out during all this is how to go about using threads on the Dreamcast.  Initially, I was looking into the fiber interface that SEGA&amp;rsquo;s Shinobi library offers.  There&amp;rsquo;s no documentation and it seems like it was added late for everyone else to use.  It seemed promising, but after reading an article in Game Programming Gems 2 on implementing a lightweight thread system for x86, I figured; why not?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Software breakpoints in CodeScape</title>
      <link>https://www.redringrico.com/weblog/software-breakpoints-in-codescape/</link>
      <pubDate>Sat, 05 Feb 2022 19:12:19 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/software-breakpoints-in-codescape/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been busy.  Not in the way that I want to be (i.e. time working on Shambler), but at my job.  We&amp;rsquo;re winding down on work for the launch and I should get some more time in two months than I&amp;rsquo;m currently getting to work on Shambler in my spare time.&lt;/p&gt;&#xA;&lt;p&gt;With that out of the way; breakpoints!  For those who have done any kind of a DebugBreak function for x86, it&amp;rsquo;s very simple.  Just add an int 3 and you&amp;rsquo;re done.  Other architectures have quirks to implement breakpoints in software.  I spent a while combing through the Katana documentation until I realised that what I wanted wasn&amp;rsquo;t anywhere to be found.  Instead, I turned to the &lt;a href=&#34;http://mc.pp.se/dc/files/h14th002d2.pdf&#34;&gt;SH4 Hardware Manual&lt;/a&gt; (thanks to Marcus, yet again).  Section 20 on User Break Controller is what I needed.  It&amp;rsquo;s simple, but involves a bit of setup.  There&amp;rsquo;s the address, ASID, mask, and how to break to set.  CodeScape will pick up the breakpoint and stop as expected.  I use the PR register when entering the debug break function as the target address for break channel A (I may get fancy later on and add conditions as well as use channel B).  It&amp;rsquo;s one of those things that I thought was going to take several days to figure out because I thought it may only be viable to use CodeScape to set hardware breakpoints and software breakpoints would be ignored.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automation notes</title>
      <link>https://www.redringrico.com/weblog/automation-notes/</link>
      <pubDate>Tue, 04 Jan 2022 05:45:58 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/automation-notes/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve just spent the vast majority of yesterday writing a script that amounts to less than 50 lines in order to get GD Workshop ready with an emulated disc.  It would have taken much less time if the documentation was accurate and the samples worked.  It may be because I&amp;rsquo;m using Windows 2000, but I doubt it.  The issue was that when the drive door was closed after the script which describes the layout of a GD-ROM was loaded, it throws up an error about a possible caching issue.  Caching in what context?  Memory?  Mass storage?  No idea.  It wasn&amp;rsquo;t very specific.  I ran one of the sample scripts which worked.  It would populate a GD script file and then the drive would close without issue.  I thought it was my GD script.  After double-checking that, I ran a version of the script which should, according to the sample itself, work when launched from CodeScape.  This was an exaggerated truth.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test framework in place</title>
      <link>https://www.redringrico.com/weblog/test-framework-in-place/</link>
      <pubDate>Sun, 02 Jan 2022 14:34:04 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/test-framework-in-place/</guid>
      <description>&lt;p&gt;After about two days of work, I have a test framework.  It&amp;rsquo;s incredibly basic at around 600 lines of code or so.  All I need is to be able to determine if unit tests are working at the moment.  Things like function, integration, and other testing is going to be further down the road.  It&amp;rsquo;s still only useful locally.  Now I need to spend some time writing all the unit tests I should have had from the start.  GD Workshop must be manually set up right now, which isn&amp;rsquo;t very convenient.  Luckily, there is a great set of scripting functions that should do what I need.  The output from the unit testing is not in a readily readable state.  A utility to convert the .tests files into a nicely formatted web page would be ideal.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automation</title>
      <link>https://www.redringrico.com/weblog/automation/</link>
      <pubDate>Thu, 30 Dec 2021 21:12:56 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/automation/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m not sure how long this next stage will take, as I want to get a mostly-working solution up-and-running rather than something 100% complete.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m starting with a test framework, then moving on to writing the test suites (possibly in tandem), and finally the automated build server.  Having not used Java for a while, I think the build server will take the longest.  Also, it&amp;rsquo;s quite an involved side-side project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>General update</title>
      <link>https://www.redringrico.com/weblog/general-update/</link>
      <pubDate>Sat, 18 Dec 2021 19:32:41 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/general-update/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been incredibly unproductive in my month off.  Mostly playing Death Stranding for a few days at the beginning, then reading and researching more than actually progressing at the workstation.&lt;/p&gt;&#xA;&lt;p&gt;That said, I have made minimal progress on the hardware front, so there&amp;rsquo;s that at the least.  Mostly just around the controller and getting more information on what to do for the modem and Ethernet.&lt;/p&gt;&#xA;&lt;p&gt;For Shambler, I&amp;rsquo;ve just now tried converting the CVS repository to Git as the amount of security concerns for CVS are many.  Of course this is much like Epic&amp;rsquo;s approach with Unreal Engine, moving from Perforce to Git for GitHub and I honestly don&amp;rsquo;t know how they manage.  It must be a nightmare going back-and-forth like that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timed out</title>
      <link>https://www.redringrico.com/weblog/timed-out/</link>
      <pubDate>Tue, 16 Nov 2021 19:20:46 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/timed-out/</guid>
      <description>&lt;p&gt;I have good and bad news.  The good news is that I&amp;rsquo;ve figured out how to synchronise the time and not have the Dreamcast prompt for a new date and time on reboot.  Bad news is that it involves writing to the Flash memory.  I&amp;rsquo;m not sure how to best handle this.  If the time is syncd up and the difference is more than 29+ days worth, it would make sense to set it then-and-there, but if it&amp;rsquo;s 29 days, 23 hours, and 50 minutes, it might allow for 10 minutes of play time before the bug appears.  I&amp;rsquo;m curious if there&amp;rsquo;s a way to force the Dreamcast not to bother with what the AICA reports?  It&amp;rsquo;s definitely something I want to try out and see if running a game for 30 days will trip this issue.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Timing</title>
      <link>https://www.redringrico.com/weblog/timing/</link>
      <pubDate>Tue, 16 Nov 2021 06:21:24 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/timing/</guid>
      <description>&lt;p&gt;I may have found a very serious bug with the Dreamcast&amp;rsquo;s real-time clock.  It will reset itself after a while.  By a while, I mean 29 days, 59 minutes, and between 40-50 seconds.&lt;/p&gt;&#xA;&lt;p&gt;This came about during implementing an NTP client.  I thought that the problem was calculating the time, but it was due to setting it too far into the future or past.  I&amp;rsquo;ve only been focusing on the future time, so I&amp;rsquo;m not certain what the limit is for rolling back.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New obsession</title>
      <link>https://www.redringrico.com/weblog/new-obsession/</link>
      <pubDate>Sat, 23 Oct 2021 03:35:32 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/new-obsession/</guid>
      <description>&lt;p&gt;Ever since I acquired my Katana in 2014, I&amp;rsquo;ve always wanted to try doing some kind of Online game.  The ultimate path to the end was hazy at first, especially when it came to available SDKs and whatnot.  A big issue with the Dreamcast is that there&amp;rsquo;s no good way of updating the game executable.  Not only updating it, but doing so with at least data integrity in mind.  Also, now I have the limitation of what was available at the time and that isn&amp;rsquo;t great.  The other thing is that this is sort of like closing the gate after the horse has bolted.  Attempting to add something to the Dreamcast that it really wasn&amp;rsquo;t designed for (unlike the Original Xbox) is a challenge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bandersnatch</title>
      <link>https://www.redringrico.com/weblog/bandersnatch/</link>
      <pubDate>Thu, 21 Oct 2021 00:39:36 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/bandersnatch/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m starting to feel as if this project is becoming my own personal Bandersnatch.  The hardware that I&amp;rsquo;m also developing is definitely setting that kind of a bar.  Understanding the G2 bus&amp;rsquo; way of handling expansion devices as well as if the method I&amp;rsquo;m thinking of using will even work with the official broadband adapter is a concern.  I haven&amp;rsquo;t touched the hardware side of things for a while and I really need to get back on it to not allow that skillset to dull.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stalled again</title>
      <link>https://www.redringrico.com/weblog/stalled-again/</link>
      <pubDate>Sat, 16 Oct 2021 14:27:29 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/stalled-again/</guid>
      <description>&lt;p&gt;More and more I find other things to do to work on that don&amp;rsquo;t provide immediate, visible results.  This time it&amp;rsquo;s the file system and adding a basic packed data format for the GD-ROM.  It&amp;rsquo;s so specific that it will be useless for the storage expansion.  I&amp;rsquo;m still unsure if I&amp;rsquo;ll keep it around or rework it to be compatible with both storage options.  File read times are definitely improved.  Not by much, but it also means that I don&amp;rsquo;t have to worry about changing directories (which is pretty expensive) or recalculating the file sizes and starting locations.  Asynchronous file loading is made far simpler by using the packed files, though.  So that&amp;rsquo;s a bonus.&lt;/p&gt;</description>
    </item>
    <item>
      <title>About that Agartha demo</title>
      <link>https://www.redringrico.com/weblog/about-that-agartha-demo/</link>
      <pubDate>Fri, 27 Aug 2021 18:54:05 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/about-that-agartha-demo/</guid>
      <description>&lt;p&gt;A little detour before the shadow work begins.&lt;/p&gt;&#xA;&lt;p&gt;I finally played the Agartha demo.  It&amp;rsquo;s one of those holy grail of unreleased games that I&amp;rsquo;m glad made it out into the wild in one form or another.  The control scheme is pretty neat, kind of like how Shenmue can use the analogue trigger to go from a walk to a run but that&amp;rsquo;s how you move forward.  I couldn&amp;rsquo;t figure out how to pick up items dropped.  Visually, it&amp;rsquo;s a very impressive game for as early as it was in development.  Such a shame that streaming 3D worlds weren&amp;rsquo;t there at that point in time and we still had levels/areas of the world periodically loaded in.  Then again, I don&amp;rsquo;t think many Dreamcast owners would have wanted their GD drives seeking constantly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Real-time changes</title>
      <link>https://www.redringrico.com/weblog/real-time-changes/</link>
      <pubDate>Wed, 25 Aug 2021 11:07:45 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/real-time-changes/</guid>
      <description>&lt;p&gt;Again, another long gap between entries.&lt;/p&gt;&#xA;&lt;p&gt;Tools are as important as the game itself.  Getting it right is important.  I&amp;rsquo;ve thrown together a lot of code with minimal planning so far.  Because this is a brand new area for me, there isn&amp;rsquo;t much that I draw from past experience to quicken the pace or foresee issues as intuitively as when writing the game code.  Plenty of dead-ends have been encountered while writing the tools.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Slow tool progress</title>
      <link>https://www.redringrico.com/weblog/slow-tool-progress/</link>
      <pubDate>Sun, 27 Jun 2021 22:48:13 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/slow-tool-progress/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s taken a while to get to this point and there doesn&amp;rsquo;t look to be much to show for it, but there&amp;rsquo;s a lot more going on under-the-hood.  A Maya scene can be loaded in, the meshes, materials, skeleton, and animations all get extracted into an intermediate CVS directory.  This information is used to render the model in the editor.  Each mesh is stored as a separate binary file, all meshes are referenced in an XML file that represents the model and refers to the materials as well.  The materials are stored as XML files, too.  Along with the textures in (currently) TIFF format.  Right now the textures are TIFF conversions of the source textures.  I want to either automatically generate the target textures from the TIFF and store it with the intermediate files for conversion later or generate the textures as they are loaded.  Obviously the latter would be far more processor intensive, however, it would save on storage space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Client side prediction</title>
      <link>https://www.redringrico.com/weblog/client-side-prediction/</link>
      <pubDate>Sun, 11 Apr 2021 21:29:47 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/client-side-prediction/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve spent about a week working on the client side prediction implementation.  It&amp;rsquo;s very rough but it&amp;rsquo;s much, much better than the slideshow it appeared to be before.  There&amp;rsquo;s a lot for me to learn as not everything works quite how I&amp;rsquo;d expect.  Server-side monitoring needs to be improved and I think it&amp;rsquo;s almost time to work on a UI to make that process easier.  Right now I don&amp;rsquo;t want to do any involved CURSES work, but it would appear to be required.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ECS networking works</title>
      <link>https://www.redringrico.com/weblog/ecs-networking-works/</link>
      <pubDate>Sat, 03 Apr 2021 21:21:50 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/ecs-networking-works/</guid>
      <description>&lt;p&gt;Getting back to the networking side of things, I spent a few hours trying to debug an issue related to a pointer not being initialised to null which isn&amp;rsquo;t a problem with the debug build or running the release build on the dev kit.  Annoying, but at least it was easy to track down.  Just took a while.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the fruits of my recent labour.  It takes about thirty seconds to get going and I also forgot to start the server which is why there&amp;rsquo;s a delay between starting to send data and receiving:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Single joint animations working</title>
      <link>https://www.redringrico.com/weblog/single-joint-animations-working/</link>
      <pubDate>Thu, 01 Apr 2021 09:32:28 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/single-joint-animations-working/</guid>
      <description>&lt;p&gt;Almost.  Normals are messed up at the moment, but it&amp;rsquo;s a definite improvement.&lt;/p&gt;&#xA;&lt;p&gt;The first attempt resulted in just the first joint being considered as I messed up the exporter and was saving the joint index as a float instead of an unsigned int.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;    &#xA;      &#xA;      &#xA;    &#xA;    &#xA;    &#xA;  &#xA;&#xA;&#xA;&#xA;&lt;video controls preload=&#34;auto&#34; width=&#34;100%&#34; class=&#34;html-video&#34;&gt;&#xA;  &#xA;    &lt;source src=&#34;https://www.redringrico.com/weblog/single-joint-animations-working/jumping-model.webm&#34; type=&#34;video/webm&#34; }}&gt;&#xA;    &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &lt;p&gt;&lt;/p&gt;&#xA;&lt;/video&gt;&#xA;&#xA;&#xA;&lt;p&gt;After that, and before I fixed the exporter, I was curious to know if the rotations are working at all so I bound the whole object to joint 2.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wiggling about</title>
      <link>https://www.redringrico.com/weblog/wiggling-about/</link>
      <pubDate>Tue, 30 Mar 2021 10:10:34 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/wiggling-about/</guid>
      <description>&lt;p&gt;Success.  Another productive morning.  I had some issues due to not including the correct headers so some of the math functions being called were not the correct ones for sinf and atan2f while performing the quaternion slerp.  Next: transforming the vertices.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;  &#xA;  &#xA;    &#xA;    &#xA;      &#xA;      &#xA;    &#xA;    &#xA;    &#xA;  &#xA;&#xA;&#xA;&#xA;&lt;video controls preload=&#34;auto&#34; width=&#34;100%&#34; class=&#34;html-video&#34;&gt;&#xA;  &#xA;    &lt;source src=&#34;https://www.redringrico.com/weblog/wiggling-about/wiggle.webm&#34; type=&#34;video/webm&#34; }}&gt;&#xA;    &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &lt;p&gt;&lt;/p&gt;&#xA;&lt;/video&gt;</description>
    </item>
    <item>
      <title>Jumping around</title>
      <link>https://www.redringrico.com/weblog/jumping-around/</link>
      <pubDate>Mon, 29 Mar 2021 08:32:43 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/jumping-around/</guid>
      <description>&lt;p&gt;Finally, after a good few hours and a lot of incredibly poorly-written code with the exporter (I really have to clean it up) I have the animation clips exported and working.  The second animation, wiggle, doesn&amp;rsquo;t appear to animate yet as it&amp;rsquo;s pretty much all rotations.  The next stage is to support slerp-ing rotation keyframes.  After that, it should be a case of getting the vertices to move with the skeleton.  I need to make a more complex smooth skinned model to show the system off.  There&amp;rsquo;s no blending between animation clips at the moment.  Also, the exporter isn&amp;rsquo;t only exporting one mesh, it&amp;rsquo;s doing both the input and output mesh to the skin cluster for Maya.  Another thing to fix that I really should do after cleaning up the exporter&amp;rsquo;s code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Positioning joints</title>
      <link>https://www.redringrico.com/weblog/positioning-joints/</link>
      <pubDate>Sat, 27 Mar 2021 04:32:06 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/positioning-joints/</guid>
      <description>&lt;p&gt;I have to apologise in advance.  It wasn&amp;rsquo;t until I viewed the screenshots after-the-fact that I realised how hard it is to see the points and connections.  I didn&amp;rsquo;t reset the size of the points to 4x4 after trying to figure out if the points were converging into one point or if they were tightly spaced apart.  To see the points (they&amp;rsquo;re all green) you may need to view the images separately and zoom in.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bones</title>
      <link>https://www.redringrico.com/weblog/bones/</link>
      <pubDate>Sat, 27 Feb 2021 05:23:54 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/bones/</guid>
      <description>&lt;p&gt;Exciting.  I have a skeleton exported.  The next phase is getting the animations out, playback, and then combining that with the skinning information which has yet to be exported.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/bones/skeleton_hu_cd489d8a964152b5.bmp 500w&#xA;  &#xA;  &#xA;    /weblog/bones/skeleton_hu_a3c19025ff03c10a.bmp 512w&#xA;  &#xA;  &#xA;    /weblog/bones/skeleton_hu_cd489d8a964152b5.bmp 640w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/bones/skeleton.bmp&#34; &#xA;  &#xA;  alt=&#34;Skeleton&#34;&gt;&#xA;&#xA;&lt;p&gt;To give you an idea of how many polygons are involved:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/bones/skeleton-wireframe_hu_17ad996a6d0dda9d.bmp 500w&#xA;  &#xA;  &#xA;    /weblog/bones/skeleton-wireframe_hu_c2cddf106e12ff70.bmp 512w&#xA;  &#xA;  &#xA;    /weblog/bones/skeleton-wireframe_hu_17ad996a6d0dda9d.bmp 640w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/bones/skeleton-wireframe.bmp&#34; &#xA;  &#xA;  alt=&#34;Skeleton with points and wireframe&#34;&gt;&#xA;&#xA;&lt;p&gt;Originally, I had used a 1x1x4 cube split into 32x32x32 segments.  That quickly turned out to be a bad idea.  The final split is 16x16x16.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A really dumb buffer overflow</title>
      <link>https://www.redringrico.com/weblog/a-really-dumb-buffer-overflow/</link>
      <pubDate>Wed, 17 Feb 2021 22:41:49 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/a-really-dumb-buffer-overflow/</guid>
      <description>&lt;p&gt;About ten minutes ago I fixed a really stupid bug in the code that I&amp;rsquo;m currently working on.  A lot of what I&amp;rsquo;m writing recently isn&amp;rsquo;t great and has been cobbled together rather hastily.  The bug is a buffer overflow that occurs when writing to a temporary buffer for display to the VMU.  On the server the Y position is decremented every update step, which counts up pretty quick.  By default the output was displaying the number to five decimal places.  No problem for numbers up to -99.00000 seeing as the line was printed as &amp;ldquo;Y: -99.00000&amp;rdquo; the issue is that there are only twelve characters total for each line.  This quickly resulted in going beyond the bounds of the array and corrupting other things in the stack.  The main thing I was concerned with during that particular debugging session was the number of entities.  This was stored close to the print buffer and ended up being wildly too large for normal operation.  A lot more items than the lone entity, at any rate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>System part of ECS working over network</title>
      <link>https://www.redringrico.com/weblog/system-part-of-ecs-working-over-network/</link>
      <pubDate>Mon, 15 Feb 2021 09:07:35 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/system-part-of-ecs-working-over-network/</guid>
      <description>&lt;p&gt;It took a while, but I finally have at least one player&amp;rsquo;s position being sent over the network with the ECS and processed by a debug cube rendering system.  Some of the time was spent performing some rudimentary performance testing, which was not promising.  I&amp;rsquo;m aiming to get back to the same state which the game object system reached in the next week.  After that, saving and loading game data will be next as the player names and colours are still being assinged to the same value from the server.  This will probably be a bigger chunk of work due to the need to make a menu system.  In the meantime I could just show a basic menu with simple name and colour entry fields.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ECS and networking progress</title>
      <link>https://www.redringrico.com/weblog/ecs-and-networking-progress/</link>
      <pubDate>Mon, 08 Feb 2021 09:28:54 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/ecs-and-networking-progress/</guid>
      <description>&lt;p&gt;It took some doing, but the act of creating entities and giving them components via the network is pretty much there.  Systems are still WIP.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been reading a fair amount of articles on how to handle sending secured network traffic recently.  I&amp;rsquo;m really unsure about implementing it for Shambler.  Mainly because I have no idea exactly how expensive it will be.  I guess the good thing is that it can always be applied later if performance is looking good.  Either way, I&amp;rsquo;ll keep investigating securing the network traffic, just in case.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GNU Make dependencies</title>
      <link>https://www.redringrico.com/weblog/gnu-make-dependencies/</link>
      <pubDate>Wed, 20 Jan 2021 08:38:45 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/gnu-make-dependencies/</guid>
      <description>&lt;p&gt;Since the start of this project, I&amp;rsquo;ve always had to make sure that any source files that inadvertently depend on a header file are rebuilt when either that header file&amp;rsquo;s function signature or structure arrangement/contents change.  It took about two hours and around 200 lines of thrown-together code to fix.  I think a large amount of headache could have been avoided if I did this right from the start.&lt;/p&gt;&#xA;&lt;p&gt;It was quite fun to take a break and do something else that benefitted the game.  It&amp;rsquo;s pretty dumb, not accounting for comments or headers with quotation marks instead of chevrons but it works for my purposes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting back to it</title>
      <link>https://www.redringrico.com/weblog/getting-back-to-it/</link>
      <pubDate>Sun, 10 Jan 2021 03:00:23 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/getting-back-to-it/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been another long stretch of silence.  I&amp;rsquo;ll try to get back into the swing of making these entries.&lt;/p&gt;&#xA;&lt;p&gt;Over the past month I&amp;rsquo;ve been working more and more on some hardware-related stuff.  Bouncing around from one thing to the next to get started in earnest on the three hardware projects that I&amp;rsquo;m aiming to achieve sometime in the near-future.  All of them are Dreamcast-related and I don&amp;rsquo;t know at all if I can achieve them but I&amp;rsquo;ll give it a good shot.  These have been rolling around in the back of my mind for somewhere close to a decade.  Pretty sure I&amp;rsquo;m also not the only one to have thought of them, too.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Working on materials</title>
      <link>https://www.redringrico.com/weblog/working-on-materials/</link>
      <pubDate>Tue, 22 Dec 2020 11:25:08 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/working-on-materials/</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve playing way too much Death Stranding and not spending enough time on Shambler.  Today I finally got started in earnest on the material system.  Last night I spent a few hours learning how to get StudioPaint to assign one texture to multiple meshes as well as &amp;ldquo;properly&amp;rdquo; unwrap the UVs.  There are many things left to learn in that field.  When I started painting on the model, I knew that the UVs were all messed up by using planar projection and lazily unwrapped them after the fact which results in very ugly looking UVs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maya and StudioPaint</title>
      <link>https://www.redringrico.com/weblog/maya-and-studiopaint/</link>
      <pubDate>Sun, 29 Nov 2020 18:40:35 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/maya-and-studiopaint/</guid>
      <description>&lt;p&gt;Before I started working on getting a UV exporter tool up-and-running for Maya, I decided to investigate other tools that may be able to texture models because I found it strange that there wasn&amp;rsquo;t a way to get the UVs out of Maya, yet there were clearly well textured models that had been made for games and films.  On my journey, I discovered StudioPaint.  Specifically, version 9.5.  This was the last verison of StudioPaint and the last version of Maya that StudioPaint integrates with is 3.0, 4.0 introduced exporting UVs in an image.  Though I haven&amp;rsquo;t investigated how textures were painted on 3D models outside of using something like StudioPaint at the time.  Assuming that things such as Substance Painter were relatively new tools and artists relied on using image manipulation tools like PhotoShop, GIMP, or PaintShop.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moving pictures</title>
      <link>https://www.redringrico.com/weblog/moving-pictures/</link>
      <pubDate>Sat, 07 Nov 2020 21:45:48 +0000</pubDate>
      <guid>https://www.redringrico.com/weblog/moving-pictures/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been a busy month.  Not much progress on the game has been made, however, I finally got hold of a capture card.  Unfortunately, the best I could find is an S-Video capture card.  Still on the lookout for VGA capture cards.  The video just shows me moving the light around while the cube spins about.  I&amp;rsquo;ve set the dev kit to the North American region to allow for 60Hz instead of 50Hz, giving a video output of 30Hz when interlaced.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Happy birthday, Dreamcast</title>
      <link>https://www.redringrico.com/weblog/happy-birthday-dreamcast/</link>
      <pubDate>Wed, 14 Oct 2020 16:16:55 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/happy-birthday-dreamcast/</guid>
      <description>&lt;p&gt;I don&amp;rsquo;t really have anything to write for this.  I&amp;rsquo;m just always surprised when the American release date gets a bunch of excitement around it and the Japanese/European launch days aren&amp;rsquo;t remembered much.&lt;/p&gt;&#xA;&lt;p&gt;Regretfully, I didn&amp;rsquo;t get the demo up-and-running in time for today.  Soon, I promise.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s to you, SEGA!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lit</title>
      <link>https://www.redringrico.com/weblog/lit/</link>
      <pubDate>Mon, 12 Oct 2020 04:56:35 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/lit/</guid>
      <description>&lt;p&gt;Hoo, boy, that was annoying.  I&amp;rsquo;ve been trying to get lighting working for a little while and kept shooting myself in the foot multiple times by not going back and carefully checking what I wrote.  To begin with, I was transforming the normals I had by the world matrix for the purposes of debugging and stored them in a separate debug normals array.  Unfortunately, I didn&amp;rsquo;t double-check that I was modifying the actual normals&amp;hellip;  This led to the normals behaving strangely, to say the least.  From the first screenshot, you can see the result of this.  In the second one, I made things a bunch worse by calculating the position of the normals with the World*View matrix.  A few hours after trying to fix what I thought was broken, I stopped.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Normals exported</title>
      <link>https://www.redringrico.com/weblog/normals-exported/</link>
      <pubDate>Thu, 08 Oct 2020 11:36:01 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/normals-exported/</guid>
      <description>&lt;p&gt;Normals are now able to be exported with the mesh.  I still need to add in multiple mesh support.  With the default face-based normals per-vertex, the size ballooned pretty quickly and it was pretty much the same as rendering &lt;em&gt;n&lt;/em&gt; strips per side of the cube.&lt;/p&gt;&#xA;&lt;p&gt;Face normals per-vertex:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/normals-exported/normals-face_hu_ceb680f4593c6b6e.bmp 500w&#xA;  &#xA;  &#xA;    /weblog/normals-exported/normals-face_hu_78d919de9889e1b.bmp 512w&#xA;  &#xA;  &#xA;    /weblog/normals-exported/normals-face_hu_ceb680f4593c6b6e.bmp 640w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/normals-exported/normals-face.bmp&#34; &#xA;  &#xA;  alt=&#34;Face normals per-vertex&#34;&gt;&#xA;&#xA;&lt;p&gt;Averaged normals per-vertex:&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/normals-exported/normals-vertex_hu_24c5f3a69c89630c.bmp 500w&#xA;  &#xA;  &#xA;    /weblog/normals-exported/normals-vertex_hu_a1ceeff9a51b9635.bmp 512w&#xA;  &#xA;  &#xA;    /weblog/normals-exported/normals-vertex_hu_24c5f3a69c89630c.bmp 640w&#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/normals-exported/normals-vertex.bmp&#34; &#xA;  &#xA;  alt=&#34;Face normals per-vertex&#34;&gt;&#xA;&#xA;&lt;p&gt;One side-effect is that for the face-based normals the last edge doesn&amp;rsquo;t get its line rendered due to there not being any need to consider it as it should be covered by the next strip&amp;rsquo;s first and second vertices.  This can be seen on the right side of the face with the number &amp;lsquo;5&amp;rsquo; on it.  I&amp;rsquo;m not sure if I&amp;rsquo;ll fix it.  It&amp;rsquo;s a few lines of code to implement, but it prevents redundant line drawing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Line rendering done</title>
      <link>https://www.redringrico.com/weblog/line-rendering-done/</link>
      <pubDate>Mon, 05 Oct 2020 12:59:15 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/line-rendering-done/</guid>
      <description>&lt;p&gt;After an hour, I now have lines being rendered.  There seems to be an issue with the slope on a few occasions, but it&amp;rsquo;s good enough.  I&amp;rsquo;m just using the standard Bresenham&amp;rsquo;s line algorithm, nothing fancy or optimised.&lt;/p&gt;&#xA;&lt;p&gt;The first attempt yielded some&amp;hellip; interesting results.  The issue was that the Y coordinate was always moving down the screen rather than in the correct direction depending on if the first Y coordinate was less than the second or not.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rendering things that can&#39;t be rendered on a Dreamcast</title>
      <link>https://www.redringrico.com/weblog/rendering-things-that-cant-be-rendered-on-a-dreamcast/</link>
      <pubDate>Sun, 04 Oct 2020 22:04:14 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/rendering-things-that-cant-be-rendered-on-a-dreamcast/</guid>
      <description>&lt;p&gt;One thing I&amp;rsquo;ve been wanting to do for a very long time is add point and line rendering for debugging.  This is very easy today.  You just set up your graphics pipeline to render with points, lines, or solids.  Unfortunately, the PowerVR chip on the Dreamcast only supports solid rendering of triangle strips.  This makes a lot of things pretty hard.  Not only can you not render triangle lists, you also can&amp;rsquo;t just render a point or a line!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Textured cube</title>
      <link>https://www.redringrico.com/weblog/textured-cube/</link>
      <pubDate>Sat, 03 Oct 2020 23:12:25 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/textured-cube/</guid>
      <description>&lt;p&gt;After a few hours of extending the editor to take a Maya file and convert it into a form that Shambler will much more readily consume, I now have a textured cube.  Right now the texture coordinates need to be flipped on both axes, otherwise it&amp;rsquo;s rendered incorrectly.  That should be a simple enough fix to implement from the exporter side.&lt;/p&gt;&#xA;&lt;p&gt;Next, I&amp;rsquo;ll fix the UVs and export the normals to get this thing lit.  After that, I think I&amp;rsquo;ll either get started on skeletal animation or switch back to the network optimisation.  There&amp;rsquo;s also saving and loading player information so that there&amp;rsquo;s no need to rely on the player&amp;rsquo;s ID from the server side to set the colour and name.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rendering static meshes</title>
      <link>https://www.redringrico.com/weblog/rendering-static-meshes/</link>
      <pubDate>Mon, 28 Sep 2020 09:05:15 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/rendering-static-meshes/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve had this working for quite a while, now.  The model loader is hard-coded to handle a single mesh and hasn&amp;rsquo;t changed since it was touched in almost a year (October 13, 2019).  The mesh stripification was also hard-coded in the editor (processing one model at a time).  It&amp;rsquo;s a basic format consisting of a specific vertex specification, no support (yet) for skeletons, textures, or lighting.  The different colours indicate which strip the triangles belong to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>On the many colours of the Dreamcast swirl</title>
      <link>https://www.redringrico.com/weblog/on-the-many-colours-of-the-dreamcast-swirl/</link>
      <pubDate>Tue, 22 Sep 2020 11:11:40 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/on-the-many-colours-of-the-dreamcast-swirl/</guid>
      <description>&lt;p&gt;I see this every now-and-then.  Either the Dreamcast has three coloured swirls (orange, red, and blue) or two (either red or orange, and blue) when it boots up.  Even I used to think there were three colours; orange for Japan, blue for Europe, and red for North America.  There was some reason that I came across about it being the shifting colour of the sky throughout the day.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, that isnt the case at all.  There are two colours for at least the five regions the Dreamcast development kit supports.  Here they are, along with their colours:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unintentional break</title>
      <link>https://www.redringrico.com/weblog/unintentional-break/</link>
      <pubDate>Tue, 15 Sep 2020 03:33:51 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/unintentional-break/</guid>
      <description>&lt;p&gt;Every now-and-then I take a stab at learning Vulkan.  It appeals to me on a very low level as it reminds me of both Saturn and Dreamcast development with how it works.  Usually I try and do something with it for about two or three weeks then stop and work on something else.  I have many, many personal projects&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Nevertheless.&lt;/p&gt;&#xA;&lt;p&gt;I started working on a new engine about six weeks ago.  The goal is to create a simple, modular, idiot-proof, legacy-free, and efficient engine.  Mainly I chose that because then I could call the engine SLIME as an acronym.  I have a love for bespoke hardware so I get my kicks by programming for the Saturn and Dreamcast.  I also really love new technology.  Which is why the engine won&amp;rsquo;t support anything that has come out before when I started working on it.  There are a bunch of GPUs, motherboards, hard drives, memory, CPUs, and other components that I have which are decades old.  As much as I want to support all of them, it creates a dilemma of needing to use many different compilers and APIs to do so.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let&#39;s play</title>
      <link>https://www.redringrico.com/weblog/lets-play/</link>
      <pubDate>Mon, 24 Aug 2020 13:52:45 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/lets-play/</guid>
      <description>&lt;p&gt;Finally.  It took a few lines of code on the client to &amp;ldquo;fix&amp;rdquo; the issue of clients not being able to move and be visibly replicated to each other.  It&amp;rsquo;s a terrible hack that just sends the most recent input thirty times a second.  It&amp;rsquo;s terrible and I will be rectifying it.  For now, I&amp;rsquo;m just ecstatic to see two players moving around and that being reflected by what&amp;rsquo;s on screen.  I printed out the server source code which I usually find helps with tracking down issues as the pages can be annotated and organised to get a better handle on the whole picture.  As the codebase increases in size, this becomes more difficult, of course.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cubes render just fine</title>
      <link>https://www.redringrico.com/weblog/cubes-render-just-fine/</link>
      <pubDate>Sat, 22 Aug 2020 17:59:56 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/cubes-render-just-fine/</guid>
      <description>&lt;img &#xA;  sizes=&#34;(min-width: 35em) 1600px, 100vw&#34;&#xA;  srcset=&#39;&#xA;  &#xA;    /weblog/cubes-render-just-fine/debug-cube_hu_f061abd393bbbd65.png 500w&#xA;  &#xA;  &#xA;    /weblog/cubes-render-just-fine/debug-cube_hu_1bc913f9c9a7a99.png 512w&#xA;  &#xA;  &#xA;    /weblog/cubes-render-just-fine/debug-cube_hu_f061abd393bbbd65.png 640w&#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_b165d9a5184abc62.png 800w&#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_e84d9f26afb05260.png 1024w&#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_64ed8dae672b64a4.png 1152w&#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_828156267612ac.png 1200w&#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_1ba1bc9402d508ca.png 1280w&#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_ed1ac522874b14c.png 1500w &#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_ed1ac522874b14c.png 1600w &#xA;  &#xA;  &#xA;    , /weblog/cubes-render-just-fine/debug-cube_hu_d6982938148140cd.png 1920w &#xA;  &#xA;  &#39;&#xA;&#xA;  &#xA;    src=&#34;https://www.redringrico.com/weblog/cubes-render-just-fine/debug-cube.png&#34; &#xA;  &#xA;  alt=&#34;A lovely green cube twirling around&#34;&gt;&#xA;&#xA;&lt;p&gt;I also learnt a bit about shutter speed and how to take pictures of monitors.  Investing in a frame grabber of some sort might be useful for the retail units.  I should note that the &amp;ldquo;basic renderer&amp;rdquo; milestone is probably misleading.  There was a focus on the 3D content creation pipeline at first which shifted over to networking very early on.  It&amp;rsquo;s been months since that string was last updated&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>That was fast</title>
      <link>https://www.redringrico.com/weblog/that-was-fast/</link>
      <pubDate>Fri, 21 Aug 2020 07:38:35 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/that-was-fast/</guid>
      <description>&lt;p&gt;I figured out what the issue was with the memory manager.  Sometimes the amount of data being stored is just short of what is possible.  With one of the memory blocks, it had a total sie of 68 bytes that it could store and after alignment, trying to store 41 bytes became 69 bytes.  The way the total was being calcualted meant that it ended up trying to subtract 69 from 68.  Nothing wrong from the standpoint that it should be possible.  It doens&amp;rsquo;t meant it&amp;rsquo;s correct.  Before the adjusted amount of memory available is returned, I check to see if the aligned size is enough to fit in the wanted size.  After alignment the wanted bytes becomes 72 and the memory block isn&amp;rsquo;t considered for trying to hold the data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bugs, bugs, bugs</title>
      <link>https://www.redringrico.com/weblog/bugs-bugs-bugs/</link>
      <pubDate>Thu, 20 Aug 2020 12:25:34 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/bugs-bugs-bugs/</guid>
      <description>&lt;p&gt;Oh my.&lt;/p&gt;&#xA;&lt;p&gt;Sometimes even the simplest of things break.  After compiling a release version of Shambler, I pressed the start button to quit to the BootROM and CodeScape complained that a general exception occurred.  Turns out that it was a simple case of link order.  The Shinobi library had to be linked last.&lt;/p&gt;&#xA;&lt;p&gt;Server-side, it&amp;rsquo;s a mess.  I do not like it one bit.  It&amp;rsquo;s very much so cobbled together and not at all well designed.  I have another week off, which I should use to fix the server code at the very least.  It&amp;rsquo;s a jumble of defining what a client is, how to replicate state, and there&amp;rsquo;s even a whole list of game objects that are outside of everything else.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I can see you</title>
      <link>https://www.redringrico.com/weblog/i-can-see-you/</link>
      <pubDate>Tue, 28 Jul 2020 14:19:42 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/i-can-see-you/</guid>
      <description>&lt;p&gt;Since starting on this whole venture, I haven&amp;rsquo;t yet tackled getting more than one player connecting to the server and, in doing so, connecting with other players.  A few days ago I had two Dreamcast&amp;rsquo;s able to request the world state and thus able to see one another.  It&amp;rsquo;s not pretty and it doesn&amp;rsquo;t yet show anything on the retail kit, but it&amp;rsquo;s a start.&lt;/p&gt;&#xA;&lt;p&gt;At the moment, I can at least test with a development kit and a retail kit wihout needing to burn more CDs.  The next step is to get an ODE to allow for another Dreamcast to join in.  I think that having the mix of different methods to play the game may help track down inconsistencies or bugs that could be introduced when using one format over another.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging with a VMU</title>
      <link>https://www.redringrico.com/weblog/debugging-with-a-vmu/</link>
      <pubDate>Fri, 03 Jul 2020 02:27:08 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/debugging-with-a-vmu/</guid>
      <description>&lt;p&gt;The Visual Memory Unit (VMU), which is also known as VM or VMS (Visual Memory and Visual Memory System, respectively), is a very neat and unique feature of the Dreamcast.  A while later, Nintendo would do a great job of continuing on with the second screen gameplay via the GameCube to Game Boy Advance link cable, but I digress.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not planning on using the VMU stand-alone as I don&amp;rsquo;t have any idea on what could be done as a mini-game with Shambler.  Currently, I don&amp;rsquo;t yet know what to display on there in-game, either.  For the time being, it&amp;rsquo;s used to display debug information on a retail unit.  It&amp;rsquo;s not impossible to draw text on the screen, however, it&amp;rsquo;s also not something that I want to clutter up with debug information if possible.  That&amp;rsquo;s what debuggers and development kits are for.  There are the odd occasions where it&amp;rsquo;s necessary to try to catch a bug that&amp;rsquo;s only appearing on a retail unit that doesn&amp;rsquo;t warrant more than a handful of characters.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connection established</title>
      <link>https://www.redringrico.com/weblog/connection-established/</link>
      <pubDate>Fri, 19 Jun 2020 03:49:07 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/connection-established/</guid>
      <description>&lt;p&gt;Finally.  After a lot of waiting and work, the internal access server is now up and running!&lt;/p&gt;&#xA;&lt;p&gt;Unexpectedly, the Portmaster 3 boards that are T1-based arrived a month early.  I received them three days ago and my first attempt was to just throw in the T1 card into the E1 unit and use that rather than flash the NAND chip that holds the user configuration on the T1 unit.  As fate would have it, the card did not seem to work at all in the E1 unit.  It was recognised, but as an E1 card for some reason.  This was after troubleshooting why the E1 unit didn&amp;rsquo;t boot properly and kept complaining about the NAND being corrupt in some form.  I ended up desoldering the sockets that took so much time to install as the joints just weren&amp;rsquo;t any good and opt for soldering the NAND chips back on directly.  I need to revisit PLCC sockets and try to solder them in a more reliable way in the future.  The E1 mainboard has been so overworked that I just didn&amp;rsquo;t want to risk damaging the pads.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Reading and writing NVRAM chips</title>
      <link>https://www.redringrico.com/weblog/reading-and-writing-nvram-chips/</link>
      <pubDate>Wed, 03 Jun 2020 23:30:33 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/reading-and-writing-nvram-chips/</guid>
      <description>&lt;p&gt;After waiting a while for the chip programmer, hot air rework adapter for 15mm QFPS, some PLCC32 sockets, and some Kapton tape, I finally managed to take the NVRAM chips off the PortMaster 3 and erase the configuration, keeping the OS intact.&lt;/p&gt;&#xA;&lt;p&gt;Mostly it consisted of a bunch of waiting around and hours of trying to solder the PLCC32 sockets without needing to snip the plastic in the centre to do it without damaging the socket.  I tried two methods to not damage the sockets.  The first was to use a fine tip and flow the solder like any other SMD part.  I ended up warping the centre plastic and the joints were not great.  The second attempt was to wrap the socket up in Kapton tape and hope that it wouldn&amp;rsquo;t need to be exposed to the hot air for too long before the plastic would start to melt.  This wasn&amp;rsquo;t successful at all and I think the main issue was that I couldn&amp;rsquo;t see the pins clearly under the tape.  It still ended up damaging the socket.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PortMaster 3 woes</title>
      <link>https://www.redringrico.com/weblog/portmaster-3-woes/</link>
      <pubDate>Thu, 28 May 2020 18:07:50 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/portmaster-3-woes/</guid>
      <description>&lt;p&gt;When I bought the PortMaster 3 from eBay, there was one huge oversight.  The model I bought was a PM3A-1E.  This designation indicates that there&amp;rsquo;s a single E1 port.  The Adtran TSU 600 only accepts a T1 connection.  I have no idea how this major detail slipped from me.  I assumed that the T1/E1 labelling on the diagram provided by the PDF I referenced in the previous post meant that either a T1 or E1 connection could be used.  No matter, I bought a T1 motherboard along with an additional T1 card (which could be used with the board I already have) and the required modems which my unit didn&amp;rsquo;t ship with.  To be fair; I wasn&amp;rsquo;t expecting modems and waited until it arrived before moving forward.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I don&#39;t just use a DreamPi</title>
      <link>https://www.redringrico.com/weblog/why-i-dont-just-use-a-dreampi/</link>
      <pubDate>Mon, 25 May 2020 03:18:30 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/why-i-dont-just-use-a-dreampi/</guid>
      <description>&lt;p&gt;Up to this point, I&amp;rsquo;ve not mentioned the &lt;a href=&#34;https://blog.kazade.co.uk/p/dreampi.html&#34;&gt;DreamPi&lt;/a&gt; for this whole networked game thing I&amp;rsquo;m doing.  The reason is pretty straightforward; I have more than one Dreamcast to test with.  DreamPi is a great solution for a single unit, though trying to scale it to more than two is troublesome.  I&amp;rsquo;d like to see someone create a HAT for the Pi to do this with support for four units at once, but it would be an incredibly niche thing.  I digress.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replacing a dozen capacitors on the FSX modules of an Adtran 600(e)</title>
      <link>https://www.redringrico.com/weblog/replacing-a-dozen-capacitors-on-the-fsx-modules-of-an-adtran-600-e-/</link>
      <pubDate>Tue, 19 May 2020 22:19:44 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/replacing-a-dozen-capacitors-on-the-fsx-modules-of-an-adtran-600-e-/</guid>
      <description>&lt;p&gt;Since acquiring the Adtran 600, discovering the six capacitors which had long since ruptured across the installed modules wasn&amp;rsquo;t entirely welcome.  Nevertheless, they&amp;rsquo;ve since been replaced (along with the other six which seem fine) and the unit is as operational as it can be until the PortMaster 3 arrives.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll follow up with a post covering the network as soon as possible; for now, trust that the Adtran 600 is an important part of it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Old hardware, old software, new game</title>
      <link>https://www.redringrico.com/weblog/old-hardware-old-software-new-game/</link>
      <pubDate>Sun, 17 May 2020 00:59:45 +0100</pubDate>
      <guid>https://www.redringrico.com/weblog/old-hardware-old-software-new-game/</guid>
      <description>&lt;p&gt;For a long time I&amp;rsquo;ve been accruing a lot of different hardware and software running up until the year 2001.  May 31 2001, @999, more specifically.&lt;/p&gt;&#xA;&lt;p&gt;I have this very specific time period in mind as a hard limit for getting together the hardware and software for a period-correct Dreamcast game.  Of course, the Dreamcast&amp;rsquo;s production run stopped during February 2001 before SEGA became a software company.  There was a promise of software still to come, which was true for Japan going all the way until 2007.  Europe and the Americas didn&amp;rsquo;t fare as well.&lt;/p&gt;</description>
    </item>
    <item>
      <title>get in touch</title>
      <link>https://www.redringrico.com/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.redringrico.com/contact/</guid>
      <description></description>
    </item>
  </channel>
</rss>
