<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Bullet-Hell on Nathaniel Inman</title><link>https://nathanielinman.com/tags/bullet-hell/</link><description>Recent content in Bullet-Hell on Nathaniel Inman</description><generator>Hugo -- 0.147.7</generator><language>en-us</language><copyright>Nathaniel Inman</copyright><lastBuildDate>Sun, 19 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://nathanielinman.com/tags/bullet-hell/index.xml" rel="self" type="application/rss+xml"/><item><title>Composable Bullet Behaviors</title><link>https://nathanielinman.com/composable-bullet-behaviors/</link><pubDate>Sun, 19 Oct 2025 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/composable-bullet-behaviors/</guid><description>&lt;p>This fall I started building a new game: a bullet-hell roguelike called DET-33, built on Phaser 3 and Vue. It&amp;rsquo;s the kind of game where the whole appeal is hundreds of projectiles on screen doing wildly different things, which means the weapon code becomes the heart of the project very quickly. Mine started as one &lt;code>weapon.js&lt;/code> file, and it did not stay manageable for long.&lt;/p>
&lt;p>The problem is the obvious one. A bullet that travels in a straight line, a bullet that spirals, a bullet that boomerangs back, a bullet that splits on impact, and a bullet that drops an acid pool are all &amp;ldquo;a bullet,&amp;rdquo; but the branching to support them in one file gets ugly fast. So I tore &lt;code>weapon.js&lt;/code> apart and rebuilt the projectiles as composable behaviors using the &lt;a href="https://nathanielinman.com/runtime-pipeline-patterns/">strategy pattern&lt;/a>.&lt;/p></description></item></channel></rss>