Sign in

jpshh

@jpshh.com
90 followers 379 following 1.7K posts

Solo procedural generator. See jpshh.com for procedures and generation.

PostsRepliesMedia
jpshh @jpshh.com · 29/09/2026
100
jpshh @jpshh.com · 31/08/2026
never not loving how the latest New Gods book's " let's loop in every character that's been peripherally tied to them " included alluding to that in one panel
180
jpshh @jpshh.com · 12/08/2026
000
jpshh @jpshh.com · 11/08/2026
Left: Rampant on the Tracks' previous blocky, garish UI. Right: Rampant on the Tracks' latest UI. #procgen #proceduralgeneration #gamedev #solodev #indiedev
091
jpshh @jpshh.com · 03/08/2026
The variation of Tracks generated by Rampant on the Tracks' generation - detailed writeup of same to come. #procgen #proceduralgeneration #gamedev #solodev #indiedev
Track generated from Voronoi diagram with points

(Point(x= 0.9105, y= 0.8262), Point(x= 0.6563, y= 0.2346), Point(x= 0.0532, y= 0.8782), Point(x= 0.6461, y= 0.6596), Point(x= 0.2991, y= 0.6287), Point(x= 0.894, y= 0.1689), Point(x= 0.9523, y= 0.9628), Point(x= 0.1091, y= 0.5885), Point(x= 0.0672, y= 0.3657), Point(x= 0.6963, y= 0.6181), Point(x= 0.8627, y= 0.1523), Point(x= 0.3212, y= 0.0944), Point(x= 0.0854, y= 0.2045), Point(x= 0.7724, y= 0.2112), Point(x= 0.4407, y= 0.8779), Point(x= 0.7122, y= 0.0328), Point(x= 0.866, y= 0.9513), Point(x= 0.7204, y= 0.1893))Track generated from Voronoi diagram with points

 (Point(x= 0.9044, y= 0.4047), Point(x= 0.7784, y= 0.9487), Point(x= 0.6733, y= 0.5641), Point(x= 0.2982, y= 0.255), Point(x= 0.735, y= 0.5532), Point(x= 0.5738, y= 0.0716), Point(x= 0.9359, y= 0.9402), Point(x= 0.177, y= 0.6935), Point(x= 0.6775, y= 0.6582), Point(x= 0.468, y= 0.572), Point(x= 0.9001, y= 0.675), Point(x= 0.5811, y= 0.5088), Point(x= 0.2413, y= 0.371), Point(x= 0.3124, y= 0.2989), Point(x= 0.4937, y= 0.1908), Point(x= 0.8785, y= 0.5949), Point(x= 0.6815, y= 0.7756), Point(x= 0.0522, y= 0.1134))Track generated from Voronoi diagram with points

(Point(x= 0.6016, y= 0.2684), Point(x= 0.201, y= 0.4002), Point(x= 0.6378, y= 0.2925), Point(x= 0.1481, y= 0.9567), Point(x= 0.8306, y= 0.4424), Point(x= 0.2243, y= 0.6701), Point(x= 0.1017, y= 0.2732), Point(x= 0.8191, y= 0.0167), Point(x= 0.7637, y= 0.3228), Point(x= 0.8334, y= 0.6621), Point(x= 0.2594, y= 0.8731), Point(x= 0.1808, y= 0.7348), Point(x= 0.3796, y= 0.9445), Point(x= 0.2743, y= 0.09), Point(x= 0.5806, y= 0.8436), Point(x= 0.6596, y= 0.5933), Point(x= 0.3631, y= 0.1031), Point(x= 0.0604, y= 0.1601))Track generated from Voronoi diagram with points

(Point(x= 0.4272, y= 0.3492), Point(x= 0.0322, y= 0.9441), Point(x= 0.1617, y= 0.0721), Point(x= 0.6271, y= 0.0646), Point(x= 0.6452, y= 0.1281), Point(x= 0.5042, y= 0.5065), Point(x= 0.3807, y= 0.7615), Point(x= 0.7353, y= 0.1918), Point(x= 0.5549, y= 0.1613), Point(x= 0.1342, y= 0.5185), Point(x= 0.6764, y= 0.4471), Point(x= 0.57, y= 0.1263), Point(x= 0.0007, y= 0.4302), Point(x= 0.8557, y= 0.6604), Point(x= 0.8614, y= 0.2094), Point(x= 0.5793, y= 0.8439), Point(x= 0.4659, y= 0.1996), Point(x= 0.6761, y= 0.6097))
0103
jpshh @jpshh.com · 02/08/2026
Haven't posted about Rampant on the Tracks for a bit - been reworking the Track generation logic. You can see the result below, before and after - more detailed writeup to come. #procgen #proceduralgeneration #gamedev #solodev #indiedev
Rampant on the Tracks " Track " generated with Voronoi points

(Point(x= 0.0838, y= 0.6452), Point(x= 0.6988, y= 0.1132), Point(x= 0.2413, y= 0.1933), Point(x= 0.2848, y= 0.092), Point(x= 0.5921, y= 0.0219), Point(x= 0.4517, y= 0.0889), Point(x= 0.2749, y= 0.3355), Point(x= 0.8163, y= 0.8005), Point(x= 0.525, y= 0.6992), Point(x= 0.705, y= 0.219), Point(x= 0.4465, y= 0.99), Point(x= 0.9581, y= 0.1703), Point(x= 0.0599, y= 0.8011), Point(x= 0.8294, y= 0.4947), Point(x= 0.1772, y= 0.5763), Point(x= 0.827, y= 0.7371), Point(x= 0.7977, y= 0.8605), Point(x= 0.5104, y= 0.0377))

using earlier logic https://github.com/jpshankar/RampantTrackGeneration/blob/ba233d49329f23353bfa584fcbd7db89aeb8b2bc/src/RampantTrackGeneration/TrackGenerator.py#L535Rampant on the Tracks " Track " generated with Voronoi points

(Point(x= 0.0838, y= 0.6452), Point(x= 0.6988, y= 0.1132), Point(x= 0.2413, y= 0.1933), Point(x= 0.2848, y= 0.092), Point(x= 0.5921, y= 0.0219), Point(x= 0.4517, y= 0.0889), Point(x= 0.2749, y= 0.3355), Point(x= 0.8163, y= 0.8005), Point(x= 0.525, y= 0.6992), Point(x= 0.705, y= 0.219), Point(x= 0.4465, y= 0.99), Point(x= 0.9581, y= 0.1703), Point(x= 0.0599, y= 0.8011), Point(x= 0.8294, y= 0.4947), Point(x= 0.1772, y= 0.5763), Point(x= 0.827, y= 0.7371), Point(x= 0.7977, y= 0.8605), Point(x= 0.5104, y= 0.0377))

using latest logic https://github.com/jpshankar/RampantTrackGeneration/blob/048796007dc86d96ade2560816ef11b54fe07b93/src/RampantTrackGeneration/TrackGenerator.py#L397
0134
jpshh @jpshh.com · 30/07/2026
I love that Peter Cheyney created a character named " Lemmy Caution ", and that a sequential list of the Caution book titles reads like a conversation
A sequential list of Peter Cheyney's " Lemmy Caution " books, sourced from https://www.fantasticfiction.com/c/peter-cheyney/
000
jpshh @jpshh.com · 04/07/2026
Website text has so many AI tells:
230
jpshh @jpshh.com · 19/06/2026
Building a lightweight Android app for easily identifying the complementary colors between two extracted from a picture taken - got a demo at jpshh.com (" Color Spectrum Calculator ") that shows its core logic by letting you pick the two " extreme " colors.
000
jpshh @jpshh.com · 19/06/2026
this is rendered by drawing a line whose RGBA color is (0, 0, 0, 0) and applying a shader to it. the bar's progress is a Tween, on which the alpha of the Action Bar's color is also dependent.
001
jpshh @jpshh.com · 19/06/2026
Taking actions in Rampant on the Tracks is limited by this Action Bar - it's cut in half with every Block or Redirect applied, and blocks any action at 25% or below. It runs down and back up on its own - you'll have to act when you can. #godot #godotdev #gamedev #indiedev #solodev
193
jpshh @jpshh.com · 17/06/2026
this is done with a shader on the focus element that draws the Walker's color on all pixels within " walker_radius " of its current position
000
jpshh @jpshh.com · 17/06/2026
When focusing on a Track segment a Walker's crossing in Rampant on the Tracks, you can see the Walker there too in simplified form - you won't have to look back and forth between Track and focus. #godot #godotdev #gamedev #indiedev #solodev
181
jpshh @jpshh.com · 16/06/2026
Tenth issue of my newsletter, buttondown.com/proceduralno..., went out last week. Discusses replacing my game (Rampant on the Tracks)'s draw_* calls with procedurally generated textures and the use of shaders. #procgen #proceduralgeneration #gamedev #solodev #indiedev Plus menus:
090
jpshh @jpshh.com · 26/05/2026
110
jpshh @jpshh.com · 16/05/2026
Building a tool for generating 2D tilemaps from pictures taken and edited into sets of " regions ", where each region follows a different specified rule. Have the UX for the web demo so far at jpshh.com, under " IRWave " - video's attached. #procgen #proceduralgeneration #solodev #indiedev
041
jpshh @jpshh.com · 11/05/2026
Rampant on the Tracks' sound effects - background music muted to show them off. #gamedev #solodev #indiedev
162
jpshh @jpshh.com · 06/05/2026
Ninth issue of my newsletter, buttondown.com/proceduralno..., went out last week - it describes the UX/audial enhancements I've made to Rampant on the Tracks' demo, and promises a playable version this month (5/22). #procgen #proceduralgeneration #gamedev #solodev #indiedev
0103
jpshh @jpshh.com · 20/04/2026
Eighth issue of my newsletter, buttondown.com/proceduralno..., went out last week - it describes Rampant on the Tracks' latest demo and has a timeline for future demos. #procgen #proceduralgeneration #gamedev #solodev #indiedev
082
jpshh @jpshh.com · 03/04/2026
Strategy for Karl Boss/Karlabos in FFV, written in 2002 with humor very much reflecting that: https://www.neoseeker.com/finalfantasyanth/faqs/56765-final-fantasy-v-a.html
120
jpshh @jpshh.com · 26/03/2026
Seventh of my newsletter, buttondown.com/proceduralno..., went out last week - subscribe for info on my procedural-generation-fueled game development. #procgen #proceduralgeneration #gamedev #solodev #indiedev
063
jpshh @jpshh.com · 17/03/2026
Further refined my game's Track generation logic to minimize " nodes " overlapping with other nodes/edges. Demo that isn't just a Matplotlib gif coming soon! (Blue = Track " start ", red = Track " end ".) #procgen #proceduralgeneration #gamedev #solodev #indiedev
1143
jpshh @jpshh.com · 27/02/2026
Parts of my game's level generation logic generated level " segments " too close to others, or too small for their traversal meaningful - implemented logic to correct those by combining " too small " edges with the nearest and largest. #procgen #proceduralgeneration #gamedev #solodev #indiedev
Level generation pre-correction - features multiple segments too close others to others and/or with too short lengths.Level generation post-correction - segments are more evenly spaced out, and average minimum segment length is longer.
172
jpshh @jpshh.com · 17/02/2026
Switched my game's level generation logic from managing level state with the single-threaded networkX to the multi-threaded rustworkx - cut the average level generation time down to a third! #procgen #proceduralgeneration #gamedev #solodev #indiedev
Chrome console showing an endpoint call taking 6.24 seconds total.Chrome console showing an endpoint call taking 1.97 seconds total.
172
jpshh @jpshh.com · 13/02/2026
Turning a Voronoi diagram into a Track with Stops #procgen #proceduralgeneration #gamedev #solodev #indiedev
152
jpshh @jpshh.com · 22/12/2025
If you need a Python module that outputs SciPy's Voronoi diagram generation in easier-to-parse JSON for #proceduralgeneration or #procgen purposes, I've got one: pypi.org/project/Voro... Example output in Matplotlib (number of sites 15, 45, 135, 405):
Voronoi diagram with 15 sites, generated by Voronout and graphed in Matplotlib.Voronoi diagram with 45 sites, generated by Voronout and graphed in MatplotlibVoronoi diagram with 135 sites, generated by Voronout and graphed in MatplotlibVoronoi diagram with 405sites, generated by Voronout and graphed in Matplotlib
020