Sign in

Joel Auterson | DWG out now!

@joelotter.com
831 followers 323 following 1.8K posts

Irish game dev, poet, cat dad. I make games at @bearwaves.com, maintain the eos4j library and the Growl game engine! he/him 🦣 otter.garden/@joel 🌐 www.joelotter.com

PostsRepliesMedia
Joel Auterson | DWG out now! @joelotter.com · 04/10/2026
Another year, another aaaaagh
glasto loading bar
110
Joel Auterson | DWG out now! @joelotter.com · 03/10/2026
Well, here I am in the credits of Gears of War: E-Day. Worked on this for the last couple years along with my fellow companions at Companion Group.
A screenshot of the Gears of War E Day credits. The section is called Engineers and you can see my name in there
4211
Joel Auterson | DWG out now! @joelotter.com · 26/09/2026
Made a rose and cardamom and pistachio cake for Lucy’s birthday! First time ever making a proper round cake with layers, think it turned out alright
Two layers of cakeThe cake decorated with white icing and pistachios in 33Lucy blowing out her candlesLucy with cake
170
Joel Auterson | DWG out now! @joelotter.com · 23/09/2026
The Olllam at Hackney Church, class gig. Been a fan since before I moved to London, finally got to see them play
The Olllam on stageThe Olllam on stage but a bit further away and red nowRoss Ainslie and Joe DartThe Olllam
120
Joel Auterson | DWG out now! @joelotter.com · 16/09/2026
One problem with living in the big city is all the nosy passers by
A black and white cat staring through our windowA different black and white kitten staring through our window
021
Joel Auterson | DWG out now! @joelotter.com · 12/09/2026
Finally made a cake where I didn’t screw up the icing!
A carrot cake sitting on a wire rack. The icing looks good and fluffy
250
Joel Auterson | DWG out now! @joelotter.com · 12/09/2026
shit
a screenshot of Hacker News. My blog post is at the top
2121
Joel Auterson | DWG out now! @joelotter.com · 10/09/2026
Loved celebrating my pal Tice Cin’s book launch, go read Safe Spaces!
A big chocolate cake with miniature books on topTice with her cakeA selfie of me and Tice with a copy of Safe Spaces
030
Joel Auterson | DWG out now! @joelotter.com · 05/09/2026
Yeah my first ever comment is someone explaining video games to me
010
Joel Auterson | DWG out now! @joelotter.com · 04/09/2026
Got some little objects on the grid now with proper z ordering!
021
Joel Auterson | DWG out now! @joelotter.com · 03/09/2026
Growl is a 2D game engine but I got to thinking, how hard would it be to sort of approximate fake 3D, similar to how games used to do it, while staying in an orthographic projection? Turns out for this simple example it's not that hard!
182
Joel Auterson | DWG out now! @joelotter.com · 02/09/2026
Geese at Troxy
Geese on stageGeese on stage with the crowd in the foregroundGeese with spotlight
120
Joel Auterson | DWG out now! @joelotter.com · 30/08/2026
Fucked it lads
Some very bad cookies. They look like they’ve melted. Didn’t put enough flour in
260
Joel Auterson | DWG out now! @joelotter.com · 26/08/2026
Such a joy to share a stage with this lot again. Boomerang forever
Tyrone on stage speaking into a microphone, the sign above his head says LVLSAJ on stage reading poemsJake on stage reading poems. This one’s a bit further away so you can see we packed the room outPJ, Jake and Tyrone on stage pissing about
120
Joel Auterson | DWG out now! @joelotter.com · 21/08/2026
see? better
Will but in god's holy ratio
120
Joel Auterson | DWG out now! @joelotter.com · 19/08/2026
I’m a man of culture, you know
A bottle of Bobby fingers toilet wine and an UGLY LP
041
Joel Auterson | DWG out now! @joelotter.com · 17/08/2026
was it "the" and "odyssey"
The two-word pitch that sold Matt Damon on the odyssey
160
Joel Auterson | DWG out now! @joelotter.com · 14/08/2026
In today’s Japanese lesson I learned about たこさんウィンナー (Mr Octopus Wiener) and I have to share it with you
Red sausages cut to look like little octopuses on a white plate
020
Joel Auterson | DWG out now! @joelotter.com · 12/08/2026
Happy eclipse day to everyone except the guy who brought his DJ decks to the once in a lifetime celestial event
Me and Lucy and Flo with our silly eclipse classes onCathryn with her eclipse glasses and also other glassesThe partial eclipse seen through a filter
140
Joel Auterson | DWG out now! @joelotter.com · 09/08/2026
Adding this as Growl's Agents​.md file
This place is a message... and part of a system of messages... pay attention to it!

Sending this message was important to us. We considered ourselves to be a powerful culture.

This place is not a place of honor... no highly esteemed deed is commemorated here... nothing valued is here.

What is here was dangerous and repulsive to us. This message is a warning about danger.

The danger is in a particular location... it increases towards a center... the center of danger is here... of a particular size and shape, and below us.

The danger is still present, in your time, as it was in ours.

The danger is to the body, and it can kill.

The form of the danger is an emanation of energy.

The danger is unleashed only if you substantially disturb this place physically. This place is best shunned and left uninhabited.
120
Joel Auterson | DWG out now! @joelotter.com · 09/08/2026
010
Joel Auterson | DWG out now! @joelotter.com · 09/08/2026
Made the trek to Kilburn for perhaps the best coffee I’ve had in London at Killbean
Coffee in a glass jug and matcha strawberry cakeMore coffee in a cute class cup and some pancakes with cream and strawberries
010
Joel Auterson | DWG out now! @joelotter.com · 08/08/2026
Day for it
Cricket at the Oval
010
Joel Auterson | DWG out now! @joelotter.com · 04/08/2026
More raymarching bits, wanna try and play with more complex SDFs next
051
Joel Auterson | DWG out now! @joelotter.com · 01/08/2026
Would you believe this thing was marketed as a Small Form Factor GPU
An enormous GPU next to my keyboard
020
Joel Auterson | DWG out now! @joelotter.com · 29/07/2026
Friends fear he's got into raymarching
110
Joel Auterson | DWG out now! @joelotter.com · 25/07/2026
It’s a lovely day
Two trans flags in the wind above a big crowd
030
Joel Auterson | DWG out now! @joelotter.com · 23/07/2026
Our first home grown tomatoes of the year (actually ever) and they’re pretty good!
Three tomatoes on a wooden board, one is sliced
190
Joel Auterson | DWG out now! @joelotter.com · 22/07/2026
gpu says trans rights
it's the trans flag vec3 light_blue = vec3(0.357, 0.812, 0.984);
vec3 pink = vec3(0.961, 0.671, 0.725);

void main() {
  vec2 uv = TexCoord.xy;
  uv.y *= 5;
  float i = floor(uv.y);

  vec3 color = (i == 0 || i ==4) ? light_blue : (i == 1 || i == 3) ? pink : vec3(1.0);

  outCol = vec4(color, 1.);
}
140
Joel Auterson | DWG out now! @joelotter.com · 21/07/2026
120
Joel Auterson | DWG out now! @joelotter.com · 21/07/2026
Finally got something pretty close to the Wind Waker water I had in my head. Wasn't able to get my brain around doing it with cells so it's FBM but with some transforms to make it look a bit ocean-y
170
Joel Auterson | DWG out now! @joelotter.com · 19/07/2026
I happened upon this by accident and I don't know *what* it is but I do quite like it. FBM again, applying noise to the UV itself
110
Joel Auterson | DWG out now! @joelotter.com · 19/07/2026
Some clouds! I used fractal Brownian motion for this one. Quite pleased with it, I think a little more work and it could have a cool parallax effect
110
Joel Auterson | DWG out now! @joelotter.com · 18/07/2026
Here's the source of this shader if anyone happens to have any advice!
vec2 random2( vec2 p ) {
    return fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453);
}

void main() {
	vec2 uv = gl_FragCoord.xy / Dimensions;
  uv *= 2.5;

  vec2 i_uv = floor(uv);
  vec2 f_uv = fract(uv);

  float m_dist = 1.0;
  for (int y = -1; y <= 1; y++) {
    for (int x = -1; x <= 1; x++) {
      vec2 neighbour = vec2(float(x), float(y));
      vec2 point = random2(i_uv + neighbour);
      point = 0.5 + 0.5*sin(time * 0.2 + 3.2831*point);
      vec2 diff = neighbour + point - f_uv;
      float dist = length(diff);
      m_dist = min(dist, m_dist);
    }
  }

  vec3 color = mix( Color.rgb, white, smoothstep(0., 1.2, m_dist));

	outCol = vec4(color, 1.);
}
110
Joel Auterson | DWG out now! @joelotter.com · 18/07/2026
This is the closest to the sort of water I've got to so far. Still not there yet - I'd rather the lines be flat rather than gradients but replacing smoothstep with step just results in a load of circles. Would also ideally like the cells to not have straight edges but that's proving hard
210
Joel Auterson | DWG out now! @joelotter.com · 18/07/2026
bloopbloopbloopbloopbloopbloopbloopbloop
130
Joel Auterson | DWG out now! @joelotter.com · 18/07/2026
gloopy gloop
110
Joel Auterson | DWG out now! @joelotter.com · 18/07/2026
I have to say I'm not entirely sure what I've done here but I like it
210
Joel Auterson | DWG out now! @joelotter.com · 17/07/2026
Found this one quite pleasing
120
Joel Auterson | DWG out now! @joelotter.com · 17/07/2026
Practicing working with noise on the train last night
120
Joel Auterson | DWG out now! @joelotter.com · 16/07/2026
Had a lovely time in Brighton with amazing people and now I’m going home. My heart and belly are very full. I love game developers
Gary on the beach looking summery as all hellHusban giving it absolute stacks what a legendLucy and Sophie looking alarmed slash delighted by giant sushi boatPat and Teo with vegan pizzas that were really delicious
160
Joel Auterson | DWG out now! @joelotter.com · 13/07/2026
float rect(vec2 uv, float x, float y, float w, float h) {
  vec2 bl = step(vec2(x, 1.0-(y+h)), uv);
  vec2 tr = step(vec2(1.0-(x+w), y), 1.0-uv);
  return bl.x * bl.y * tr.x * tr.y;
}

void main() {
	vec2 uv = gl_FragCoord.xy  / resolution;
  vec2 st = uv;
  
  uv *= 40.0;

  vec2 xy = uv;
  uv.x += step(1., mod(xy.y, 2.0)) * (min(sin(time), 0.));
  uv.y += step(1., mod(xy.x, 2.0)) * (max(sin(time), 0.));
  xy = uv;

  uv = fract(uv);

  vec3 color = vec3(1.0);

  color *= rect(uv, 0.15, 0.15, 0.7, 0.7)
    * mix(mondrian_yellow, mondrian_blue, step(1.,mod(xy.x, 2.0)));

	outCol = vec4(color, 1.);
}
130
Joel Auterson | DWG out now! @joelotter.com · 13/07/2026
This was a little tricky but I'm quite pleased with it!
120
Joel Auterson | DWG out now! @joelotter.com · 13/07/2026
Playing with patterns
120
Joel Auterson | DWG out now! @joelotter.com · 11/07/2026
Y'know what that seems close enough
Mondrian - Tableau in a shaderThe actual painting, TableauThe shader in GLSL:

float rect(vec2 uv, float x, float y, float w, float h) {
  vec2 bl = step(vec2(x, 1.0-(y+h)), uv);
  vec2 tr = step(vec2(1.0-(x+w), y), 1.0-uv);
  return bl.x * bl.y * tr.x * tr.y;
}

void main() {
	vec2 uv = gl_FragCoord.xy  / resolution;
  
  vec3 color = vec3(0.0);

  color += rect(uv, 0.0, 0.0, 0.075, 0.2) * mondrian_red;
  color += rect(uv, 0.1, 0.0, 0.1, 0.2) * mondrian_red;
  color += rect(uv, 0.225, 0.0, 0.5, 0.2) * mondrian_white;
  color += rect(uv, 0.75, 0.0, 0.15, 0.2) * mondrian_white;
  color += rect(uv, 0.925, 0.0, 0.075, 0.2) * mondrian_yellow;

  color += rect(uv, 0.0, 0.225, 0.075, 0.2) * mondrian_red;
  color += rect(uv, 0.1, 0.225, 0.1, 0.2) * mondrian_red;
  color += rect(uv, 0.225, 0.225, 0.5, 0.2) * mondrian_white;
  color += rect(uv, 0.75, 0.225, 0.15, 0.2) * mondrian_white;
  color += rect(uv, 0.925, 0.225, 0.075, 0.2) * mondrian_yellow;

  color += rect(uv, 0.0, 0.45, 0.2, 0.55) * mondrian_white;
  color += rect(uv, 0.225, 0.45, 0.5, 0.45) * mondrian_white;
  color += rect(uv, 0.225, 0.925, 0.5, 0.075) * mondrian_white;
  color += rect(uv, 0.75, 0.45, 0.15, 0.45) * mondrian_white;
  color += rect(uv, 0.75, 0.925, 0.15, 0.075) * mondrian_blue;
  color += rect(uv, 0.925, 0.45, 0.075, 0.45) * mondrian_white;
  color += rect(uv, 0.925, 0.925, 0.075, 0.075) * mondrian_blue;

	outCol = vec4(color, 1.);
}
120
Joel Auterson | DWG out now! @joelotter.com · 10/07/2026
This is in Growl but the various variables available to the shader are basically the same as in ShaderToy. I think the next thing I ought to look at is playing with a noise texture
in vec4 Color;
out vec4 outCol;

const vec3 dark_blue = vec3(0.11, 0.17, 0.33);

void main() {
	vec2 uv = (gl_FragCoord.xy * 2.0 - resolution.xy) / resolution.y;
	float d = length(uv);
	d = sin(d*8. - time) / 8.;
	d = abs(d);
	d = smoothstep(0.122, 0.12, d);
	outCol = vec4(d < 1. ? dark_blue : Color.xyz*d, 1.);
}
120
Joel Auterson | DWG out now! @joelotter.com · 10/07/2026
Gonna bring back my old "joel tries to learn shaders" thread from the other place cos I am, once again, trying to learn shaders. My end goal is to have some kind of 2d approximation of a nice water shader, think the ocean in Wind Waker or something. Feedback/advice *very* welcome
290
Joel Auterson | DWG out now! @joelotter.com · 09/07/2026
030
Joel Auterson | DWG out now! @joelotter.com · 09/07/2026
Made banana bread last week and today in the oven discovered…this. I guess it’s overflowed banana bread. Consistency kind of like gingerbread. Should I try it? (Obviously I already did. It’s pretty good tbh)
Weird fried chicken looking banana bread fragments on a plate
130
Joel Auterson | DWG out now! @joelotter.com · 02/07/2026
Sounds painful
Dave’s word Game score of 183. Longest and highest scoring words together are ROTARY ENEMA
161