December Adventure Log 2025

Curious about what December Adventure is? Learn about December Adventure here.

Day 0

Woah, tomorrow's December! Let's take a look at what projects I have laying around, and figure out some hopefully low-key goals.

  • Extend my isometric arc calculator and get it complete enough to put online.
  • Write another exporter for mml-rhythm-cli?
  • Possibly lightly revamp quick-static-webcomic.

I tend to go where the wind takes me, so anywhere from all or none of this could end up happening. At the very least, I'll have fun doing coding every day!

Day 1

Today I did some poking around at my isometric arc calculator. The 'horizontal_plane' function can generate arcs in the x-z plane, but the radii are fixed pointing vertically and horizontally - that is, 45° (in the isometric world; it's 30° in the visual plane) off from the axes. I intend to replace it, so I made this test case of basic features with the old function to serve as a baseline.

A semicircle and a fourth of a circle projected into isometric perspective.

I figured that my 'cplane' function (I've forgotten what the 'c' stood for), being able to generate arcs in any orientation as long as one of the radii lives on the x-z plane, could be tweaked to fully replace hplane pretty easily. I now know that it won't be so simple.

While cplane can replace horizontal_plane when the radii form a circle, as soon as we enter the world of ellipses, something is broken. Fourths of ellipses look fine in the x-y and y-z planes, or really any vertical orientation, but as soon as I put them horizontal into the x-z plane, they break.

A semiellipse and two malformed fourths of ellipses overlaid, demonstrating the issue.

I'll tackle that tomorrow.

As a parting gift, I give you the one-liner that is the horizontal_plane function:

return 'a' + rx * Math.sqrt(1.5) + ' ' + ry * Math.sqrt(0.5) + ' 0 0 ' + sweep_flag + ' ' + (Math.cos(30 * Math.PI/180) * (dx - dz)) + ' ' + (dy + (Math.sin(30 * Math.PI/180) * (dx + dz)))

Behavior if dy != 0 is... undefined. It's very limited, and that's the reason why I'm trying to replace it.

Day 2

Yesterday’s me had no faith that I’d be able to solve the issue. I set out to prove it wrong. Victory!

A semi-ellipse with two fourths of an ellipse overlaid without malformation.

This isn’t without side effects, though. Currently the adjustment to ψ is theta * (180/Math.PI) - (Math.atan2(dz,dx) * (180/Math.PI) + 45 + 90). As you can tell, I pieced it together through a combination of insight and trial-and-error. I might need to add a well placed %90 or %180 or something because the θ=0° ellipse (the behavior of the original hplane function) inexplicably swaps x_radius and y_radius.

Day 3

Bringing the "low-key" element into the picture, I did a tiny program in Fortran to kickstart reacquainting myself with it. Converts degrees Celsius into a Tolstoy-style degrees Réaumur.


program reaumur
  real :: x
  read(*,*) x
  x = x * (4.0 / 5.0)
  write (*, "(i0)", advance="no") nint(abs(x))
  write (*, '(a)', advance="no") " degrees"
  if (x .lt. 0) then
    write (*, '(a)', advance="no") " of frost"
  end if
  print *, "Réaumur"
end program reaumur
  

Day 4

Just some exploration of hue shifting parallel lines for texture.

A series of horizontal lines in near-green hues.

Nothing too fancy here (yet), but a good starting point.


for (var i = 2; i < 200; i+= 2) {
  $0.innerHTML += '<line x1="0" y1="' + i + '" x2="240" y2="' + i + '" stroke="hsl(' + Math.floor(Math.random()*90+95) + ',100%,25%)"/>'
}

Day 5

Continuing on the "low-key" trend, a further refinement of hue shifting texture. This is closer to the effect I'm looking for, but not quite there yet. Now I'm fiddling with the L value of the colors.

A series of horizontal lines in near-green hues, shifting in lightness and darkness.