<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Ben Leskey's Blog: discovery</title>
		<description>discovery posts from Ben Leskey</description>
		<link>https://benleskey.com/blog/tags/discovery</link>
		<language>en-us</language>
		<copyright>2025 Ben Leskey</copyright>
		<lastBuildDate>Sun, 14 Sep 2025 18:47:01 +0000</lastBuildDate>
		<pubDate>Sun, 14 Sep 2025 18:47:01 +0000</pubDate>
		<atom:link href="https://benleskey.com/blog/tags/discovery.feed.xml" rel="self" type="application/rss+xml" />

		<item>
	<title>Reading list update #3</title>
	<description>&lt;div&gt;&lt;p&gt;Sci-fi, history, Mark Twain!&lt;/p&gt;
See &lt;a href=&quot;https://benleskey.com/page/reading_list#2023-10-06&quot;&gt;reading_list#2023-10-06&lt;/a&gt;
&lt;/div&gt;</description>
	<category>reading</category><category>discovery</category>
	<link>https://benleskey.com/page/reading_list#2023-10-06</link>
	<guid isPermaLink="true">https://benleskey.com/blog/reading_list_3</guid>
	<pubDate>Fri, 06 Oct 2023 12:00:00 +0000</pubDate>
</item>
<item>
	<title>Reading list update #2</title>
	<description>&lt;div&gt;&lt;p&gt;Culture and mystery!&lt;/p&gt;
See &lt;a href=&quot;https://benleskey.com/page/reading_list#2023-06-06&quot;&gt;reading_list#2023-06-06&lt;/a&gt;
&lt;/div&gt;</description>
	<category>reading</category><category>discovery</category>
	<link>https://benleskey.com/page/reading_list#2023-06-06</link>
	<guid isPermaLink="true">https://benleskey.com/blog/reading_list_2</guid>
	<pubDate>Tue, 06 Jun 2023 12:00:00 +0000</pubDate>
</item>
<item>
	<title>Reading list update #1</title>
	<description>&lt;div&gt;&lt;p&gt;Abercrombie&#x27;s grim darkness, Atwood&#x27;s dystopia, Brooks&#x27; apocalypse, and more!&lt;/p&gt;
See &lt;a href=&quot;https://benleskey.com/page/reading_list#2023-05-08&quot;&gt;reading_list#2023-05-08&lt;/a&gt;
&lt;/div&gt;</description>
	<category>reading</category><category>discovery</category>
	<link>https://benleskey.com/page/reading_list#2023-05-08</link>
	<guid isPermaLink="true">https://benleskey.com/blog/reading_list_1</guid>
	<pubDate>Mon, 08 May 2023 12:00:00 +0000</pubDate>
</item>
<item>
	<title>Toward the ultimate text adventure game engine</title>
	<description>&lt;div&gt;&lt;ol class=&quot;toc&quot;&gt;&lt;/ol&gt;

&lt;ul&gt;&lt;li&gt;Github repository: &lt;a href=&quot;https://github.com/linewriter1024/textengine&quot;&gt;https://github.com/linewriter1024/textengine&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2 id=&quot;text-adventures&quot;&gt;Text adventure&lt;/h2&gt;

&lt;h3 id=&quot;why-text&quot;&gt;Why text?&lt;/h3&gt;

&lt;p&gt;
	Text-based games have an extremely good &lt;em&gt;complexity/development time&lt;/em&gt; ratio. There are no graphics to worry about, no programmer art beyond writing (what luck, I happen to enjoy writing), no controls beyond text processing, no frames per second, et cetera, et cetera. Fully text based games can be even more complex than turn-based 2D roguelike games like &lt;a href=&quot;https://cataclysmdda.org/&quot;&gt;Cataclysm: DDA&lt;/a&gt;. There&#x27;s just less extra to worry about&amp;#8212;the development focus has one of the most basic interfaces imaginable. Additionally, fully text-based games are perfect for screen readers due to their simple interface (see &lt;a href=&quot;https://writing-games.com/building-a-better-mud/&quot;&gt;this article&lt;/a&gt; about writing a screen-reader friendly text-based game).
&lt;/p&gt;

&lt;p&gt;
	The specific style of text-based game I&#x27;m talking about is the text adventure game. The computer tells you about your environment, your circumstances, and your character, and you choose what your character does or says. It&#x27;s simple, straightforward, and very reminiscent of the conversational style of a tabletop RPG.
&lt;/p&gt;

&lt;p&gt;The problem is, a human game master will always be better than a computer here, right? A human game master can simulate any situation, can mediate any conflict, can act any character. (I exaggerate, but not very much.) A computer must be programmed to handle every specific situation in the game&#x27;s world.&lt;/p&gt;

&lt;h3 id=&quot;ai&quot;&gt;AI?&lt;/h3&gt;
&lt;p&gt;
	You can make &lt;a href=&quot;https://chat.openai.com/chat&quot;&gt;ChatGPT&lt;/a&gt; play a roleplaying game with you. ChatGPT can be the game master, simulate the environment, accept the actions of your character, whatever you might want. A couple of pitfalls prevent full immersion, however. ChatGPT forgets details and must be reminded, and it can&#x27;t stay on track with a game system, being a more freeform storyteller. I want something better.
&lt;/p&gt;

&lt;h3 id=&quot;muds&quot;&gt;MUDs?&lt;/h3&gt;

&lt;p&gt;
	The system I have in mind is similar to the &lt;a href=&quot;https://en.wikipedia.org/w/index.php?title=MUD&amp;amp;oldid=1140275602&quot;&gt;MUD&lt;/a&gt; &lt;a href=&quot;https://medium.com/@williamson.f93/multi-user-dungeons-muds-what-are-they-and-how-to-play-af3ec0f29f4a&quot;&gt;gameplay&lt;/a&gt; &lt;a href=&quot;https://writing-games.com/what-is-a-mud-multi-user-dungeon/&quot;&gt;style&lt;/a&gt;, which is fully text-based as you pilot your character through a multiplayer world. MUDs are, however, limited in a number of ways: they are generally room based, their multiplayer nature requires real-time interaction, their systems are quite gamey, and the &quot;dungeon master&quot; is primarily concerned with combat mechanics.
&lt;/p&gt;

&lt;h3 id=&quot;something-new&quot;&gt;Something new&lt;/h3&gt;

&lt;p&gt;I&#x27;ve started work on a new system at &lt;a href=&quot;https://github.com/linewriter1024/textengine&quot;&gt;https://github.com/linewriter1024/textengine&lt;/a&gt;. This &lt;em&gt;text engine&lt;/em&gt; is an effort toward building a flexible text-based game engine for simulating any scenario or world.&lt;/p&gt;

&lt;h2 id=&quot;goals&quot;&gt;Goals&lt;/h2&gt;

&lt;ul&gt;
	&lt;li&gt;To simulate combat and action mechanics&lt;/li&gt;
	&lt;li&gt;To handle social interactions&lt;/li&gt;
	&lt;li&gt;To keep track of world events: political affiliations, kingdom economics, famines, shipping routes&lt;/li&gt;
	&lt;li&gt;To support singleplayer play or play with a small party&lt;/li&gt;
	&lt;li&gt;To support any genre of game: high fantasy action, low fantasy economic, sci-fi space battle, zombie apocalypse, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are very ambitious goals, but the text engine format lends itself well to managing all this complexity without the added requirements of graphical display and control.&lt;/p&gt;

&lt;p&gt;This will be a long-term project, so development may be quite slow. There is no time pressure, however, so I can take it at my pace.&lt;/p&gt;

&lt;h3 id=&quot;go&quot;&gt;Learning Go&lt;/h3&gt;

&lt;p&gt;This project is also a way for me to learn the Go language, which has some unique syntax and ideas that I think will be perfect for a large text-based game engine like this.&lt;/p&gt;

&lt;h2 id=&quot;design&quot;&gt;Design&lt;/h2&gt;

&lt;p&gt;The basic structure is thus: everything in the world, whether a city, a man, a kingdom, a sword, or a lake, is an entity in relationship with other entities, capable of whatever actions and interactions make sense for it.&lt;/p&gt;

&lt;p&gt;Let&#x27;s example a sample scenario to illustrate the idea: a covered &lt;b&gt;wagon&lt;/b&gt; of four &lt;b&gt;merchants&lt;/b&gt; traveling down a &lt;b&gt;road&lt;/b&gt; through a &lt;b&gt;forest&lt;/b&gt;, about to be robbed by two &lt;b&gt;bandits&lt;/b&gt; with &lt;b&gt;crossbows&lt;/b&gt;. You are the lone &lt;b&gt;guard&lt;/b&gt; for the &lt;b&gt;wagon&lt;/b&gt;, wielding only a &lt;b&gt;sword&lt;/b&gt; riding in the &lt;b&gt;front&lt;/b&gt; with the &lt;b&gt;driver&lt;/b&gt; while the other three &lt;b&gt;merchants&lt;/b&gt; are sitting in the &lt;b&gt;back&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Every bold word in that previous paragrah would be an entity (or a few entities). As an example, the wagon is an entity with two entities making it up: the front and the back. In the event that you wanted to hide underneath the wagon, an entity for the underneath would be generated as well. The front of the wagon is an entity that &lt;em&gt;contains&lt;/em&gt; you and the driver. This &lt;em&gt;contains&lt;/em&gt; relationship would be mirrored by &lt;em&gt;in&lt;/em&gt; relationships that you and the driver have with the wagon. The wagon itself is &lt;em&gt;on&lt;/em&gt; the road, while the road &lt;em&gt;contains&lt;/em&gt; the wagon. The road itself is within the forest, and so forth.&lt;/p&gt;

&lt;p&gt;You can see the complex interactions that can happen here. Each of the merchants and bandits has an AI corresponding with their generated personalities and skills, so some of the merchants might draw weapons while others might seek cover in the wagon from the bandits&#x27; crowssbows.&lt;/p&gt;

&lt;p&gt;Dialogue would be represented by ideas, such as &quot;The king expresses his gratitude with an undercurrent of disdain.&quot; or &quot;The bandit threatens you with no trace of reason in his eyes.&quot; You can choose to respond however you see fit, by threatening, cajoling, warmly thanking, etc. to influence character&#x27;s perceptions, attitudes, and ultimately actions.&lt;/p&gt;

&lt;p&gt;Attitudes and actions would bubble upward as well to influence cities and kingdoms. If the player was not currently in a city it could be simulated on a macro level rather than each individual character in the city, so that the city&#x27;s influence and politics would change and existing characters in the city would have their life stories altered without the need for a granular simulation.&lt;/p&gt;

&lt;p&gt;I still need to work through the details of the system, and see what implementation issues I run into, but this should provide a base for further development in a new and exciting direction.&lt;/p&gt;

&lt;h2 id=&quot;github&quot;&gt;Github repository&lt;/h2&gt;
&lt;p&gt;I&#x27;ve started work at &lt;a href=&quot;https://github.com/linewriter1024/textengine&quot;&gt;https://github.com/linewriter1024/textengine&lt;/a&gt;. The prototype is not yet a functioning game, but there is a command processing system and the basis of a generic game engine capable of singleplayer and multiplayer text-based gameplay.&lt;/p&gt;
&lt;/div&gt;</description>
	<category>software</category><category>games</category><category>textengine</category><category>discovery</category>
	<link>https://benleskey.com/blog/textengine_intro</link>
	<guid isPermaLink="true">https://benleskey.com/blog/textengine_intro</guid>
	<pubDate>Fri, 21 Apr 2023 12:00:00 +0000</pubDate>
</item>
<item>
	<title>OBS Studio -&gt; ffmpeg -&gt; ImageMagick for an optimized gif</title>
	<description>&lt;div&gt;&lt;p class=&quot;update&quot;&gt;Update: The gifs worked! I &lt;a href=&quot;https://benleskey.com/blog/mvnu_surc&quot;&gt;successfully presented&lt;/a&gt; at sURC, and won the top prize.&lt;/p&gt;

&lt;p&gt;I&#x27;ve been working on my presentation to present my &lt;a href=&quot;https://benleskey.com/blog/../aka/mappingtool&quot;&gt;mapping tool&lt;/a&gt; senior Honors project at &lt;a href=&quot;https://www.mvnu.edu/undergraduate/academics/honorsprogram/surc&quot;&gt;MVNU&#x27;s &lt;abbr title=&quot;Symposium for Undergraduate Research and Creative Work&quot;&gt;sURC&lt;/abbr&gt;&lt;/a&gt;. For part of this presentation I wanted an animated gif illustrating the basic drawing functionality of the tool.&lt;/p&gt;

&lt;p&gt;I started with &lt;a href=&quot;https://obsproject.com/&quot;&gt;OBS studio&lt;/a&gt; to record the actual video of me drawing a simple map. Then I imported the video into &lt;a href=&quot;https://kdenlive.org/&quot;&gt;Kdenlive&lt;/a&gt; for editing. OBS recorded the video as 1920x1080, but the actual mapping tool window that I was recording was only 1916x1008 so when I imported it into Kdenlive there was a black bar along the bottom. To solve this, I set the resolution of the Kdenlive project to 1278x672 (the same scale but a smaller resolution to keep the GIF size small) and applied a transform effect to position the original clip within the proper resolution. I set the clip speed to 300%, so that in under 30 seconds people could see an example of an entire (if small) map being created.&lt;/p&gt;

&lt;p&gt;With the Kdenlive project ready, I rendered it to an MP4 file for conversion to GIF.&lt;/p&gt;
&lt;p&gt;I then converted the MP4 file using &lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg -i in.mp4 -vf &quot;scale=-1:-1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse&quot; -r 10 out.gif&lt;/code&gt;&lt;/pre&gt; 10 fps struck a good balance between choppiness and size; I didn&#x27;t need it to be smooth, just not so jumpy as to be annoying. I had ffmpeg generate a GIF palette itself with the palettegen and paletteuse combo.
&lt;p&gt;Then I optimized the gif, lossily, using ImageMagick&#x27;s mogrify command &lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mogrify -layers &#x27;optimize&#x27; -fuzz 7% out.gif&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The final size of the optimized GIF was 3.1MiB, down from a 21MiB unoptimized GIF, an 8.1MiB MP4 file, and an 11MiB original obs output file.

&lt;/p&gt;&lt;p&gt;
Here&#x27;s the final GIF:
&lt;img src=&quot;https://benleskey.com/blog/../images/mapper_gifs_gif.gif&quot; alt=&quot;A map being drawn in the mapping tool&quot;&gt;
&lt;/p&gt;
&lt;/div&gt;</description>
	<category>discovery</category><category>utilities</category><category>software</category>
	<link>https://benleskey.com/blog/mapper_gifs</link>
	<guid isPermaLink="true">https://benleskey.com/blog/mapper_gifs</guid>
	<pubDate>Fri, 07 Apr 2023 12:00:00 +0000</pubDate>
</item>
<item>
	<title>Discovering random websites</title>
	<description>&lt;div&gt;&lt;p&gt;
&lt;a href=&quot;https://benleskey.com/blog/../images/diff_blog_stars_page.png&quot;&gt;&lt;img class=&quot;right&quot; alt=&quot;diffblogbot stars page&quot; src=&quot;https://benleskey.com/blog/../thumbs/diff_blog_stars_page.25.png&quot;&gt;&lt;/a&gt;
The other day I was &lt;a href=&quot;https://benleskey.com/blog/./diff_blog&quot;&gt;found by diff.blog&lt;/a&gt; who starred the repository for this website on Github. While poking around their bot&#x27;s Github account I found that the &lt;a href=&quot;https://github.com/diffblogbot?tab=stars&quot;&gt;diffblogbot stars page&lt;/a&gt; is a huge mine for random personal websites scattered around Github. diffblogbot crawls for blogs and gathers them all here, in one place. I decided to take a look at some of them, and gather a few of the most interesting in a kind of showcase.&lt;/p&gt;

&lt;p&gt;
	&lt;a href=&quot;https://github.com/Mocha2007&quot;&gt;Mocha2007&lt;/a&gt;&#x27;s &lt;a href=&quot;https://mocha2007.github.io/&quot;&gt;personal website&lt;/a&gt; has a ton of interesting stuff: conlangs, games, toy programs, and more! Their conlangs and worldbuilding are very detailed, just take a look at the &lt;a href=&quot;https://mocha2007.github.io/namei/eremoran.html&quot;&gt;Eremoran Language&lt;/a&gt;. Their skillset and interests seem pretty close to mine actually, so this website was a really cool find. (They also have a &lt;a href=&quot;https://mocha2007.github.io/coolguys.html&quot;&gt;list of cool &amp;amp; weird sites&lt;/a&gt; too!
&lt;/p&gt;

&lt;p&gt;
	Then there&#x27;s &lt;a href=&quot;https://github.com/SeoulToday/seoultoday.github.io&quot;&gt;SeoulToday/seoultoday.github.io&lt;/a&gt; a &lt;a href=&quot;https://seoultoday.github.io&quot;&gt;website&lt;/a&gt; that is the &lt;q cite=&quot;https://seoultoday.github.io&quot;&gt;a fictional news network for the Roblox Republic Of Korea made by SirCollinHall&lt;/q&gt;. Roxlox Republic of Korea? More likely than you think!
&lt;/p&gt;

&lt;p&gt;
	I also found &lt;a href=&quot;https://github.com/bhaggs&quot;&gt;Brian Haggerty&lt;/a&gt;&#x27;s &lt;a href=&quot;https://bryanhaggerty.com/&quot;&gt;personal website&lt;/a&gt;. This is a more straightforward site, a few blog posts, some social media links. One interesting thing I noted is that his &lt;a href=&quot;https://bryanhaggerty.com/blog/2010/02/joining_twitter/&quot;&gt;second-to-last blog post&lt;/a&gt;, in 2010, has him joining Twitter. Now, in 2023, he&#x27;s moved to Mastodon.
&lt;/p&gt;

&lt;p&gt;
	We also have &lt;a href=&quot;https://github.com/stpeter&quot;&gt;Peter Saint-Andre&lt;/a&gt;&#x27;s &lt;a href=&quot;https://stpeter.im/&quot;&gt;personal website&lt;/a&gt;. Despite his tech background, his &lt;a href=&quot;https://stpeter.im/journal/&quot;&gt;online journal&lt;/a&gt; is very philosophical.
&lt;/p&gt;

&lt;p&gt;
	Finally we have &lt;a href=&quot;https://github.com/evocn&quot;&gt;Alex Hartford&lt;/a&gt;&#x27;s &lt;a href=&quot;https://evocn.org/&quot;&gt;website&lt;/a&gt;, very artistic. There&#x27;s a lot of games, art, films, and music he&#x27;s built, check it out!
&lt;/p&gt;

&lt;p&gt;There&#x27;s just so many cool little sites out on the Internet, how can one ever surf them all? As the Internet&#x27;s population grows I&#x27;m sure there&#x27;ll be more and more techy people who create these curious corners and carve out their nooks in the web. Maybe I will never see them, but with a little exploration we can all find some interesting people online just as it is in the real world.&lt;/p&gt;
&lt;/div&gt;</description>
	<category>discovery</category>
	<link>https://benleskey.com/blog/discovering_random_websites</link>
	<guid isPermaLink="true">https://benleskey.com/blog/discovering_random_websites</guid>
	<pubDate>Thu, 26 Jan 2023 12:00:00 +0000</pubDate>
</item>
<item>
	<title>Finding discussion about diff.blog</title>
	<description>&lt;div&gt;&lt;p&gt;I couldn&#x27;t find much about &lt;a href=&quot;https://diff.blog&quot;&gt;diff.blog&lt;/a&gt; with a cursory glance over the internet, so I went looking.&lt;/p&gt;

&lt;p&gt;On diff.blog itself I discovered a post from &lt;a href=&quot;https://blog.jromanmartin.io/2020/10/20/my-blog-in-diff-blog.html&quot;&gt;Roman Martin&#x27;s blog&lt;/a&gt; when diff.blog found him back in 2020 the same way they did me recently.&lt;/p&gt;

&lt;p&gt;Here&#x27;s a &lt;a href=&quot;https://news.ycombinator.com/item?id=23914454&quot;&gt;Hacker News subthread&lt;/a&gt; from 2020, where the creator of diff.blog, &lt;a href=&quot;https://vishnuks.com/&quot;&gt;Vishnu KS&lt;/a&gt;, is promoting it. Here&#x27;s a &lt;a href=&quot;https://news.ycombinator.com/item?id=29759370&quot;&gt;smaller subthread&lt;/a&gt; from 2022, and &lt;a href=&quot;https://news.ycombinator.com/item?id=27302496&quot;&gt;another subthread&lt;/a&gt; from 2021, and &lt;a href=&quot;https://news.ycombinator.com/item?id=24540786&quot;&gt;one more&lt;/a&gt; from 2020.&lt;/p&gt;

&lt;p&gt;One of the HN threads was linked in a &lt;a href=&quot;https://jerieljan.com/learnings/2020-07-22/&quot;&gt;blog post&lt;/a&gt; from jerieljan.&lt;/p&gt;

&lt;p&gt;There&#x27;ve been HN &lt;a href=&quot;https://news.ycombinator.com/from?site=diff.blog&quot;&gt;submissions&lt;/a&gt; of diff.blog, and a &lt;a href=&quot;https://old.reddit.com/r/programming/comments/bq6w1c/diffblog_follow_blogs_of_all_your_favourite/&quot;&gt;Reddit post&lt;/a&gt;, but none have taken any traction.&lt;/p&gt;

&lt;p&gt;diff.blog is briefly mentioned in &lt;a href=&quot;https://techweez.com/2019/06/19/discovered-new-websites-apps-and-extensions-for-this-week/&quot;&gt;techweez article&lt;/a&gt;, &lt;a href=&quot;http://disq.us/p/2pgp555&quot;&gt;a comment on a contentmarketinginstitute.com article&lt;/a&gt;, and a &lt;a href=&quot;https://olegsemerikov.medium.com/copywriting-for-it-how-to-make-your-writing-cool-98a87ea11e63&quot;&gt;Medium post&lt;/a&gt; from Oleg Semerikov.&lt;/p&gt;

&lt;p&gt;That&#x27;s all I&#x27;ve found so far, seems a small project but I wanted to dig up as much discussion as I could!&lt;/p&gt;
&lt;/div&gt;</description>
	<category>discovery</category><category>deepdive</category>
	<link>https://benleskey.com/blog/finding_discussion_diff_blog</link>
	<guid isPermaLink="true">https://benleskey.com/blog/finding_discussion_diff_blog</guid>
	<pubDate>Wed, 25 Jan 2023 12:00:00 +0000</pubDate>
</item>_
	</channel>
</rss>
