<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>ivysly.com</title><link>https://ivysly.com</link><description>All content from ivysly.com</description><lastBuildDate>Sat, 15 Aug 2026 12:01:36 +0000</lastBuildDate><item><title>fridgle</title><link>https://ivysly.com/games/fridgle</link><description>&lt;p&gt;a daily fridge poetry toy. everyone gets the same 30-40 words each day to compose a prose poem with fridge magnet poetry tiles.&lt;/p&gt;</description><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/games/fridgle</guid></item><item><title>THURRRCCCF</title><link>https://ivysly.com/dream/thurrrcccf</link><description>&lt;p&gt;i let a tattoo artist do whatever he wants all over my left foot, and i don&amp;rsquo;t look until it&amp;rsquo;s done. I&amp;rsquo;m disappointed in the results because they&amp;rsquo;re not like his normal style. one of them says (in small caps) &amp;ldquo;&amp;hellip; THE ABCS OF&amp;rdquo; (normal size) &amp;ldquo;THURRRCCCF&amp;rdquo;&lt;/p&gt;</description><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/thurrrcccf</guid></item><item><title>Hot Mug</title><link>https://ivysly.com/dream/hot-mug</link><description>&lt;p&gt;I wake up and R makes me coffee while I&amp;rsquo;m in bed, but it&amp;rsquo;s in a hot mug that&amp;rsquo;s difficult to hold&lt;/p&gt;</description><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/hot-mug</guid></item><item><title>Sneak</title><link>https://ivysly.com/dream/sneak</link><description>&lt;p&gt;walking uphill through the neighborhood to my grandparents&amp;rsquo; old house, i find a shortcut down a gravel-paved hill. i successfully sneak in through the garage, planning to leave some food in their fridge. my uncle notices me, and i ask him to keep my presence secret&lt;/p&gt;</description><pubDate>Wed, 29 Jul 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/sneak</guid></item><item><title>why i still solo dev</title><link>https://ivysly.com/blog/why-i-still-solo-dev</link><description>&lt;p&gt;it&amp;rsquo;s because of money. for one, it takes a lot of money to hire someone to do something full-time if it is something they aren&amp;rsquo;t already obsessed with doing. but it&amp;rsquo;s true that i could probably afford to do so after selling a game that made a lot of money. the other issue is money.&lt;/p&gt;
&lt;p&gt;when developing and designing a game myself, for myself, my motivations are so transparent as to be tautological. i make games because i want specific games to exist so i can play them. that&amp;rsquo;s the top and bottom of it. i make games in order to play games i want to play. this entirely informs the design process. if some feature more makes the game into a game i want to play, it goes in the game. if it doesn&amp;rsquo;t, it doesn&amp;rsquo;t. hiring someone to be a part of this process creates an incentive problem. they aren&amp;rsquo;t necessarily contributing to the game because they want to play the specific game that comprises the specific elements they contribute. their contributions may categorically be those which the contributor doesn&amp;rsquo;t actually want to experience themselves, where mine cannot. this is fatal. once money is involved, i can only know that they are contributing because they want to make money. between me and this person, there is always a layer of distrust. they are incentivized to do as little as needed to meet perceived expectations and further their own career. whether or not they choose to act differently is an artifact of their personality, but the incentive structure doesn&amp;rsquo;t change. this is the unavoidable compromise of creative, commercial, hierarchical projects in capitalism, and the results are unavoidably inconsistent.&lt;/p&gt;
&lt;p&gt;of course there are many great games that are great because of a team&amp;rsquo;s shared commitment to a greater vision (most in fact). even if the specific ideas among individual contributors differ, the predominant attitude in these teams is of co-operation toward realizing a work of high quality. but these circumstances are hard to come by. my game made a lot of money, but it didn&amp;rsquo;t make enough that i can keep churning through teams until i happen upon a selection of weirdoes who A) share similar motivations to me, and B) have good taste, and C) have the skills to match. i could only cycle so many times before wasting too much time and money and creating ruin for myself. otherwise, i could continue working for free, alone. witness my decision in effect.&lt;/p&gt;
&lt;p&gt;i suspect it is getting harder now than ever for anyone to find a group of people to make great games with. it&amp;rsquo;s getting harder to merely survive for most people, and it was already more than hard enough. the games industry is falling apart. my dream to command a crew of like-minded obsessives seems fainter than ever. it felt easier when i was poor; to suggest a suicide mission is a lot simpler when the stakes are the same for everyone. now there is a power imbalance. i can no longer ask someone who barely lives off their paycheck to work for free, even though i, too, would be working for free. the circumstances between me and this person are fundamentally different now, despite my attitude and approach being more or less identical to the way they always have been. it&amp;rsquo;s a bit frustrating, but i don&amp;rsquo;t have much room to seriously complain when my peers are on food stamps.&lt;/p&gt;
&lt;p&gt;so it seems then that my last option outside of solo dev is to keep searching for other well-to-do creatives hiding in their own lofty towers in hopes i might convince any of them to waste some time with me. i haven&amp;rsquo;t had much luck. if you are a highly skilled craftsman with good taste, no monetary needs and lots of time, and for some reason you want to make a game with me, please email me at ivysly@protonmail.com&lt;/p&gt;</description><pubDate>Mon, 27 Jul 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/why-i-still-solo-dev</guid></item><item><title>Metal</title><link>https://ivysly.com/dream/metal</link><description>&lt;p&gt;researching other roguelike games. someone is making an rl in an esoteric programming language. the game is called Metal.&lt;/p&gt;</description><pubDate>Fri, 17 Jul 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/metal</guid></item><item><title>Coetivy</title><link>https://ivysly.com/dream/coetivy</link><description>&lt;p&gt;I&amp;rsquo;m in my old room on Coetivy. R has gone completely berserk—she is digging through my room for evidence of sexual conspiracy or even just evidence of sexuality from me. she comes after me violently, intent to kill me. i run out and survey my surroundings. i find another copy of our house, with a big open square arch for a door, and a stone portal inside. it strikes me that this whole situation was simulated by whoever put me in this weird facade of my old neighborhood, relieved. i enter the portal and find myself in a similar but degraded environment, and the cycle continues, finding my house and entering a portal, until i find an opening in the house to a dark, blacklit, damp sort of building or cave with bright glowing blue and magenta scrawls on every surface, and little scrawled creatures inside. this place feels safer than the last, but unknown&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/coetivy</guid></item><item><title>Sear</title><link>https://ivysly.com/dream/sear</link><description>&lt;p&gt;I&amp;rsquo;m in an RV, or some kind of cabin. camping in this idyllic little clearing in the forest. someone reveals it&amp;rsquo;s much easier to get a nice sear on your food when you use a clothes iron&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/sear</guid></item><item><title>Garage</title><link>https://ivysly.com/dream/garage</link><description>&lt;p&gt;Parked somewhere, it&amp;rsquo;s night. I&amp;rsquo;m going back to my car in the parking lot. Apparently i parked it in this weird futuristic garage where the normal parking spots would be—it&amp;rsquo;s multi level, fitting multiple cars. i find the spot my car should be, but it&amp;rsquo;s a few levels up, so I press a button to lower it back down to me. first comes the car below it (but above me), a big red SUV. the floor opens beneath it, and it dips nose first and lands upside down, totaled. someone is obviously upset about this. i somehow get up to the level of my car, and i sit in the back seat, counter weighing it so that when it comes down it lands the right way&lt;/p&gt;</description><pubDate>Thu, 18 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/garage</guid></item><item><title>Kiln</title><link>https://ivysly.com/dream/kiln</link><description>&lt;p&gt;walking through an apartment complex at night. stepdad is there. i find a place to sculpt little objects out of clay. i think i&amp;rsquo;m at a train station. it&amp;rsquo;s a cardboard box i&amp;rsquo;m sculpting in, inside another box. little heads with mouths agape i&amp;rsquo;m trying to keep from attaching to each other. a litter of kittens is in the box. i start to fire the clay as the box is a kiln, thinking all the animals have left it, but i hear them crying and try to take them all out and save them&lt;/p&gt;</description><pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/kiln</guid></item><item><title>Book of Riffs</title><link>https://ivysly.com/dream/book-of-riffs</link><description>&lt;p&gt;dancing in my room. there&amp;rsquo;s a record on, an hours long medley of classic synth riffs. it&amp;rsquo;s being played by scanning this huge phonebook-thick book of colorful bars and text into RAM. there&amp;rsquo;s a number on it, 270. i accidentally skip to 500 something but then go back. the DJ explains the history and context of each riff. at one point she asks how long is left, but doesn&amp;rsquo;t like the answer. it&amp;rsquo;s very long&lt;/p&gt;</description><pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/book-of-riffs</guid></item><item><title>Warehouse</title><link>https://ivysly.com/dream/warehouse</link><description>&lt;p&gt;living in a huge empty city (post apocalypse?) is a girl and her father and dog. somewhere in east asia. they live in a dilapidated warehouse or factory full of mounds of fabric that look like fiberglass. every day they go out to find food and supplies. eventually her father doesn&amp;rsquo;t come back. she is a teenager now. she&amp;rsquo;s still waiting for him but thinks he probably is dead. he used to sing a lullaby for her at night. the quietness now keeps her awake.&lt;/p&gt;</description><pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/warehouse</guid></item><item><title>White Ink</title><link>https://ivysly.com/dream/white-ink</link><description>&lt;p&gt;repeated visions of a puddle of white ink on carpet. a black slab floats in it, and as it wobbles in the liquid it is stained swirling patterns of white. in a dark bedroom, with a friend. we take something that makes the carpet glow slate blue. the white ink comes, and we get to see the process for real.&lt;/p&gt;</description><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/white-ink</guid></item><item><title>L's Birthday</title><link>https://ivysly.com/dream/l-s-birthday</link><description>&lt;p&gt;I&amp;rsquo;m on a toy train running through a basketball court. L posts in the group chat that it&amp;rsquo;s his birthday. He&amp;rsquo;s just moved into this spacious, dark, two-level house. the lights are off. there are supposed to be several people living there, working from home, but even descending to the lower floor, he sees nobody. T suggests we browse this game review website to find a decent gift for him.&lt;/p&gt;</description><pubDate>Tue, 09 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/l-s-birthday</guid></item><item><title>Sleep Ritual</title><link>https://ivysly.com/dream/sleep-ritual</link><description>&lt;p&gt;i have to do different things in order and for different amounts of time to get sleep. it takes me forever to figure out what the right order is. i think it starts with eating&amp;hellip;&lt;/p&gt;</description><pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/sleep-ritual</guid></item><item><title>thoughts about mixins and components</title><link>https://ivysly.com/blog/mixins-and-components</link><description>&lt;p&gt;i have been using Lua (now via &lt;a href="../blog/sologamedev-with-lisp"&gt;fennel&lt;/a&gt;) with &lt;a href="https://love2d.org/"&gt;LÖVE&lt;/a&gt; for a while, and i have found that one of the interesting and likeable things about Lua is how simple it is to implement mixins.&lt;/p&gt;
&lt;p&gt;mixins are an odd, rarely used but convenient concept in OOP similar to interfaces and components but not really exactly like either. a mixin is a class that is used by other classes to absorb its methods without directly inheriting that class.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;Enemy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Object:extend&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; the base class&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;CanBeHurt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Object:extend&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; the mixin class&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;CanBeHurt:get-hurt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;damage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;hurter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; a mixin method&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;.. &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;owie i got hurt by&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;tostring &lt;/span&gt;&lt;span class="nv"&gt;hurter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;             &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; for &amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;tostring &lt;/span&gt;&lt;span class="nv"&gt;damage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot; damage&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Enemy:implement&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;CanBeHurt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; implement the mixin on the base class&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Enemy&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; create an enemy&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;e:get-hurt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ivy sly&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;; &amp;gt;&amp;gt; owie i got hurt by ivy sly for 100 damage&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;this &lt;code&gt;implement&lt;/code&gt; class method (as implemented in the very good &lt;a href="https://github.com/rxi/classic/blob/e5610756c98ac2f8facd7ab90c94e1a097ecd2c6/classic.lua#L33"&gt;classic&lt;/a&gt; library) directly injects all of &lt;code&gt;CanBeHurt&lt;/code&gt;&amp;rsquo;s methods to the &lt;code&gt;Enemy&lt;/code&gt; class, such that all instances of &lt;code&gt;Enemy&lt;/code&gt; can access the &lt;code&gt;get-hurt&lt;/code&gt; method. If &lt;code&gt;Enemy&lt;/code&gt; already has its own &lt;code&gt;get-hurt&lt;/code&gt; method, the &lt;code&gt;implement&lt;/code&gt; function will prioritize that existing method and quietly move on. &lt;/p&gt;
&lt;p&gt;there are some interesting things you can do with this. i ended up treating them similarly to components. in my implementation, mixins can be applied at the object level as well as the class level, and they have a special init method that is treated essentially as extended construction behavior. for example, some Enemies could randomly spawn with a FireAura mixin implemented &lt;em&gt;on the instance&lt;/em&gt; that initializes them with a &lt;code&gt;self.fire-radius&lt;/code&gt; value, adds an update callback to search nearby players to damage and a few methods to help with this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;FireAura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Object:extend&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;when &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;rng.percent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; automatically call FireAura:mix-init on self with all parameters&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:instance-mixin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;FireAura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;FireAura.mix-init&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;self.fire-radius&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; set to 50&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:add-update-callback&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;each &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;player&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;ipairs &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:get-nearby-players&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.fire-radius&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:fire-aura-attack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;player&lt;/span&gt;&lt;span class="p"&gt;)))))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;FireAura.fire-aura-attack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;player&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;player:get-hurt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;when &lt;code&gt;Enemy&lt;/code&gt; spawns, there is a 25% chance for that instance to implement the &lt;code&gt;FireAura&lt;/code&gt; mixin, which calls &lt;code&gt;FireAura&lt;/code&gt;&amp;rsquo;s mix-init method on the &lt;code&gt;Enemy&lt;/code&gt; instance, and then injects all its methods (effectively just &lt;code&gt;fire-aura-attack&lt;/code&gt; in this instance). what i like about this system is its convenience; all methods and values are top-level. the mixin is effectively invisible. you can access &lt;code&gt;self.fire-radius&lt;/code&gt; directly from the &lt;code&gt;Enemy&lt;/code&gt; instance, use the mixin methods and behaviors, all without typing &lt;code&gt;FireAura&lt;/code&gt; all over the place. i&amp;rsquo;m not actually sure this is just a mixin anymore with all this extra behavior, but it&amp;rsquo;s effectively the same idea: inject the behavior from one class into another without dealing with complicated inheritance hierarchies. one could see now how this might be related to components, so let&amp;rsquo;s compare.&lt;/p&gt;
&lt;p&gt;components, in contrast to mixins, are usually more visible, and less entangled with the object that uses them. a component is typically expressed as another data structure explicitly contained by an object. imagine an alternative implementation of &lt;code&gt;FireAura&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;FireAura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;Object:extend&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;FireAura.new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;self.radius&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;FireAura.fire-aura-attack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;player&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;player:get-hurt&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;FireAura.update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;each &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;player&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;ipairs &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;owner:get-nearby-players&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.radius&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:fire-aura-attack&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;player&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;self.components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; simple list of components&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;when &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;rng.percent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:add-component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fire-aura&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;FireAura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.add-component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; add it directly to our table so we can easily index it&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; e.g. self.fire-aura.radius&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;tset &lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; also add it to the component list for easy iteration&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;table.insert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;each &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;ipairs &lt;/span&gt;&lt;span class="nv"&gt;self.components&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;when &lt;/span&gt;&lt;span class="nv"&gt;component.update&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;component:update&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;in the business of safe, clean code, this is probably superior to mixins most of the time, if requiring some extra work. but nobody said gamedev has to be safe or clean—would i be using Lua if i cared about silly things like type safety?—so what other benefit might object composition have over mixins? i think the obvious answer is that components are non-destructive. you can add a component to an object, then later remove it without pain. mixins tightly couple with classes that implement them, making them less flexible at the instance level.&lt;/p&gt;
&lt;p&gt;but mixins are so convenient, aren&amp;rsquo;t they? i always optimize for laziness, that is, typing less, so i find the benefit of top-level field and method access hard to overstate. i am a big fan of duck typing. i&amp;rsquo;d much rather check for a simple &lt;code&gt;obj.fire-radius&lt;/code&gt; number and ignore when it&amp;rsquo;s &lt;code&gt;nil&lt;/code&gt; then have to go through the extra steps of checking something like &lt;code&gt;(and obj.fire-aura obj.fire-aura.fire-radius)&lt;/code&gt;. call me petty i guess. so here are some deranged ideas i have had about making components more mixin-like while remaining non-destructive.&lt;/p&gt;
&lt;h3&gt;option 1: unique field names&lt;/h3&gt;
&lt;p&gt;create a DSL to register every component with a name and the name of all of its fields, ensuring each field name is unique. something like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; add a new component to the global component registry with all field and &lt;/span&gt;
&lt;span class="c1"&gt;; method names exposed for easy checking &amp;amp; removal&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;defcomponent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;FireAura&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;field&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fire-radius&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; default value?&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fire-aura-attack&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;when you try to define a component with fields or methods that collide with the name of another component, it would error at compile time. doing this would let you apply components essentially as collections of string keys, and since there are no collisions, you wouldn&amp;rsquo;t need to contain them in separate structs. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;when &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;rng.percent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;self:add-component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nv"&gt;FireAura&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;fire-radius&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; default override?&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print &lt;/span&gt;&lt;span class="nv"&gt;self.components.FireAura&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; &amp;gt;&amp;gt; true&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;print &lt;/span&gt;&lt;span class="nv"&gt;self.fire-radius&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; &amp;gt;&amp;gt; 60&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;this is obviously insane. the main issue with this is how brittle it is. what if there are non-component field names we need to watch out for? what about overriding component behaviors on specific instances? we also no longer get a major benefit of components, which is that components can themselves be objects, with all the nice things objects let you do. instead this turns them in to a loose bag of key-value pairs. and despite technically being less destructive, it doesn&amp;rsquo;t &lt;em&gt;feel&lt;/em&gt; any better considering all the ways it could easily go wrong.&lt;/p&gt;
&lt;h3&gt;option 2: reduce declaration redundancy&lt;/h3&gt;
&lt;p&gt;a bit of a compromise. if we can front-load component access, then we can do roughly the same amount of typing, if a bit more. however i think we can do better than the following example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.some-method-that-uses-lots-of-components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; `let` is just fennel&amp;#39;s way of declaring multiple variables in &lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; sequence.&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;comp1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.comp1&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;comp2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.comp2&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;comp3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.comp3&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nv"&gt;comp4&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;self.comp4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;i suspect we can cut this approximately in half with a hypothetical &lt;code&gt;let-self&lt;/code&gt; macro that assumes &lt;code&gt;self&lt;/code&gt; access.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.some-method-that-uses-lots-of-components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;let-self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;comp1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;this would compile to the same code as above. where it gets messy is combining other variable declarations&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.some-method-that-uses-lots-of-components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;let-self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;comp1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;derived&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp1.some-key&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; assume for some reason we couldn&amp;#39;t access these earlier:&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;let-self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;comp3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;comp4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;suddenly we see more nesting and breaking up of variable declarations this way, making it hard to understand at first glance. maybe instead we could use a macro &lt;code&gt;let&amp;amp;&lt;/code&gt; that works like normal &lt;code&gt;let&lt;/code&gt; but allows opt-in self-keyed vars with a special identifier prefix:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.some-method-that-uses-lots-of-components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;let&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;&amp;amp;comp1&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;&amp;amp;comp2&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;derived&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="nv"&gt;comp1.some-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;&amp;amp;comp3&lt;/span&gt;
&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="nv"&gt;&amp;amp;comp4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;this feels cleaner but we run into a couple issues. the first issue is i can never remember where &amp;amp; is on my keyboard and i have to look at it half the time lmao. typing symbols tends to slow me down a little. then there&amp;rsquo;s the problem of dealing with identifiers that actually have &amp;amp; in the name. it feels dirty and slightly limiting. it also isn&amp;rsquo;t especially readable at a glance unless you format it very clearly.&lt;/p&gt;
&lt;h3&gt;option 3: evil metatable bullshit&lt;/h3&gt;
&lt;p&gt;never do this, but what we could do is override &lt;code&gt;__index&lt;/code&gt; on our &lt;code&gt;Enemy&lt;/code&gt; object to automatically find component values:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.__index&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var &lt;/span&gt;&lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var &lt;/span&gt;&lt;span class="nv"&gt;found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; search through all our components&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;each &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;ipairs &lt;/span&gt;&lt;span class="nv"&gt;self.components&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;&amp;amp;until&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;found&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;when &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;. &lt;/span&gt;&lt;span class="nv"&gt;component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;found&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="no"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;. &lt;/span&gt;&lt;span class="nv"&gt;component&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;not= &lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; if a component with a value at that key exists, return that&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nv"&gt;value&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; otherwise do a normal __index check&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;. &lt;/span&gt;&lt;span class="nv"&gt;Enemy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;fn &lt;/span&gt;&lt;span class="nv"&gt;Enemy.some-method-that-uses-lots-of-components&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; automatically finds the actual some-key in self.comp1&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;derived&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="nv"&gt;self.some-key&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;this is obviously horrible because adding another component with a conflicting field name can silently change behavior in ways that are hard to debug. there are no unique benefits i can think of to doing this that are not covered by other options. don&amp;rsquo;t do it&lt;/p&gt;
&lt;h3&gt;option 4: grow up&lt;/h3&gt;
&lt;p&gt;well yes, maybe i should just get used to a component based object structure and using my fingers to type a little more code. it&amp;rsquo;s not that annoying. just a little more annoying than what i&amp;rsquo;m already doing right now. but maybe being annoyed is good sometimes in a time when it is so easy to let my brain smooth over and let trillion dollar robots do my typing and my thinking for me.&lt;/p&gt;</description><pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/mixins-and-components</guid></item><item><title>Crawl</title><link>https://ivysly.com/dream/crawl</link><description>&lt;p&gt;R and i play a PVP version of dungeon crawl stone soup. she ekes out a win by zooming really far into a pixel to see what spells i am going to cast. i&amp;rsquo;m pissed and vow to beat her next time&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/crawl</guid></item><item><title>Puppy</title><link>https://ivysly.com/dream/puppy</link><description>&lt;p&gt;R and I are back at the loft above her grandmother&amp;rsquo;s garage. We get a new puppy. He looks like Dennis when he was young, but his fur is a pale baby blue. R feeds him a diet of white dirt made of meat.&lt;/p&gt;</description><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/puppy</guid></item><item><title>Beach Truck</title><link>https://ivysly.com/dream/beach-truck</link><description>&lt;p&gt;at the beach, at night. I&amp;rsquo;m sitting at the last rocky outcrop of a series projecting out from the shoreline, when a huge monster truck drives out into the water, nearly running me over. i run to the back and see in the bed of the truck a scared woman. i try to help her out. there&amp;rsquo;s some beef with her boyfriend, i think we fight or something&amp;hellip; don&amp;rsquo;t remember&lt;/p&gt;</description><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/beach-truck</guid></item><item><title>Arena Shooter</title><link>https://ivysly.com/dream/arena-shooter</link><description>&lt;p&gt;I&amp;rsquo;m playing a multiplayer arena shooting game on a snowy, nighttime map set on a sideways incline and dotted with low walls of server racks. there are yellow-green canisters of explosives lying around. the goal is to get to a diagonal labyrinth of transporters and move on to the next stage. i shoot a few npcs who look like HL2 combine and a player who is a kid, right after he visibly gloats having tagged an npc himself.&lt;/p&gt;</description><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/arena-shooter</guid></item><item><title>Ukraine</title><link>https://ivysly.com/dream/ukraine</link><description>&lt;p&gt;R and I are outside, trying to get somewhere. it&amp;rsquo;s gloomy and overcast. our only path is through a wartorn city in Ukraine. we run through a series of dark warehouses populated sparsely with backpacked male individuals, usually sitting, silent, on their phones. they don&amp;rsquo;t seem to be in a rush or concerned about any immediate danger, but R and I are afraid of drone strikes, looking up to the sky when we exit into grey courtyards and parks. R runs ahead of me. i call out to her, scolding her to slow down, afraid to be left behind.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/ukraine</guid></item><item><title>Duck Egg</title><link>https://ivysly.com/dream/duck-egg</link><description>&lt;p&gt;one of our ducks laid a fertilized egg this morning—i assume one of the wild mallard drakes is responsible for this. out of curiosity i crack it open early, hatching a stillborn white ball with wings.&lt;/p&gt;</description><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/duck-egg</guid></item><item><title>Haircuts</title><link>https://ivysly.com/dream/haircuts</link><description>&lt;p&gt;at N&amp;rsquo;s parents&amp;rsquo; house with him and G. both of them have hilariously fucked haircuts—N&amp;rsquo;s is cut short and flat, like a cartoon, while G&amp;rsquo;s looks like Goku. they both get real offended when i bring up how badly they messed up their hair&lt;/p&gt;</description><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/haircuts</guid></item><item><title>Siberia</title><link>https://ivysly.com/dream/siberia</link><description>&lt;p&gt;copying some data into a server. something feels important about it? I&amp;rsquo;m in a library, and the library is in space. I&amp;rsquo;m sending this data somewhere in siberia. there&amp;rsquo;s an element of competition or antagonism I&amp;rsquo;m missing&amp;hellip; someone is trying to prevent me from doing this, a big mean guy&lt;/p&gt;</description><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/siberia</guid></item><item><title>The Pitchers</title><link>https://ivysly.com/dream/the-pitchers</link><description>&lt;p&gt;at a baseball game. high up, back in the bleachers. our team is &amp;ldquo;the pitchers&amp;rdquo;, white and red. it&amp;rsquo;s dusk. screaming from the crowd. I&amp;rsquo;m in my apartment—great view of the game out the window. so great in fact some attendees look back and scowl at me with envy, for I&amp;rsquo;m able to see the game so clearly out my apartment window and without paying too. they&amp;rsquo;re playing the dodgers. more cheers from the crowd. I&amp;rsquo;m sad. the apartment feels lonely. R and i split? it&amp;rsquo;s not well furnished and it&amp;rsquo;s just me here. way high up, an upper floor. despite being so high up i can see the game as if i were much closer—this discrepancy does not cross my mind. along with the sadness there is a faint feeling of demonic presence.&lt;/p&gt;</description><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/the-pitchers</guid></item><item><title>Jeremy</title><link>https://ivysly.com/dream/jeremy</link><description>&lt;p&gt;fixing up my discord bot Jeremy. some users want to be able to date him. i visualize all possible options as a tree and consider what it would be like to date Jeremy.&lt;/p&gt;</description><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/jeremy</guid></item><item><title>Bad Dog</title><link>https://ivysly.com/dream/bad-dog</link><description>&lt;p&gt;Dennis becomes totally vicious. downstairs at my grandparents&amp;rsquo; old house. it&amp;rsquo;s dark down here, a golden light through the stairwell. R there with me. as he continues to bite and scratch me like a rabid cat—he&amp;rsquo;s latched on to my hand, i&amp;rsquo;m bleeding everywhere, he is fully cat now, looks like D&amp;rsquo;s cat—, I try to find a place to hide and argue with R over what to do.&lt;/p&gt;</description><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/bad-dog</guid></item><item><title>Colosseum</title><link>https://ivysly.com/dream/colosseum</link><description>&lt;p&gt;seated at a cafe structured like a giant colosseum. i see my step dad there—he&amp;rsquo;s asking me something about programming. he asks how, in Rust, to handle complex state and combinatorial explosion when making art or games. i tell him that&amp;rsquo;s why i don&amp;rsquo;t use rust anymore and i use Lua instead which treats everything like an untyped hash map. my mom asks, &amp;ldquo;do you have to pay for the array?&amp;rdquo; for a second i don&amp;rsquo;t know how to respond and then i say &amp;ldquo;well that&amp;rsquo;s not really how it works, arrays are a built in feature of the language&amp;rdquo;&lt;/p&gt;</description><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/colosseum</guid></item><item><title>Hot Rock</title><link>https://ivysly.com/dream/hot-rock</link><description>&lt;p&gt;out in a small fenced back yard. it&amp;rsquo;s sunny. I&amp;rsquo;m smacking a long rock with another rock until it&amp;rsquo;s red hot and malleable&lt;/p&gt;</description><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/hot-rock</guid></item><item><title>Berlin</title><link>https://ivysly.com/dream/berlin</link><description>&lt;p&gt;i descend via google maps to Berlin, a gridded city with low, domed concrete buildings. in an electronics shop, here to buy a cable. i want to know what jail is like here, so i consider stealing something, but i have cold feet. in a parking lot with S, it&amp;rsquo;s night. he says well just steal something. i try to respond but i can&amp;rsquo;t. he says choke it out already, or do you not have anything to say? i say cmon man i have a speech impediment&lt;/p&gt;</description><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/berlin</guid></item><item><title>Possession</title><link>https://ivysly.com/dream/possession</link><description>&lt;p&gt;at grandparents&amp;rsquo; old house. in my bed, alone. house-sitting for my dad and J. Naomi Watts as my mom(?). She&amp;rsquo;s giving me a lecture about drug(?) safety. there&amp;rsquo;s a video presentation. she&amp;rsquo;s in the bathroom. she&amp;rsquo;s in a mechanic&amp;rsquo;s jumpsuit. it looks like a possession. she is shaking violently, eyes closed. eventually she stops and opens her eyes, her irises a light golden color. she is frozen slack jawed standing in the bathroom, looking up vacantly at the ceiling. another older woman with black sclera and white irises stares out also vacantly, sitting on a toilet. a third old woman with white hair is sitting on a seat, shaking still, eyes closed. I&amp;rsquo;m there. i shout trying to snap them out of it, then run to my bed and hide under the covers.&lt;/p&gt;</description><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/possession</guid></item><item><title>Video Call</title><link>https://ivysly.com/dream/video-call</link><description>&lt;p&gt;we&amp;rsquo;re all in a voice/video call — everyone is arguing about something i don&amp;rsquo;t remember. someone says &amp;ldquo;but that&amp;rsquo;s New Zealand, we are talking about Ireland&amp;rdquo;. B keeps offering me this fried snack and he insists it will fit my diet. &amp;ldquo;look I&amp;rsquo;ve been mowin on this thing for the better part of an hour and see how much there is left. it&amp;rsquo;s real filling&amp;rdquo;&lt;/p&gt;</description><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/video-call</guid></item><item><title>i'm getting sick of sexy</title><link>https://ivysly.com/blog/im-getting-sick-of-sexy</link><description>&lt;p&gt;i saw the game &lt;a href="https://store.steampowered.com/app/2830030/MOTORSLICE/"&gt;Motorslice&lt;/a&gt; recently, and i can&amp;rsquo;t say it doesn&amp;rsquo;t look perfectly good at what it is setting out to do—though i have not played it—but reflexively i asked myself this question i seem to keep asking myself over and over again the last five or six years: why is the player character so conspicuously fuckable? i understand that sex sells, and i so too hate to knock someone for being true to their vision, but my main gripe about the material, from the critical perspective of a game designer (thus a narrative designer and a character designer and so on), my main gripe is how utterly &lt;em&gt;obvious&lt;/em&gt; all these indie gamedevs are getting about sex appeal, without any of the thematic justification needed to make it work. why, again, does the upcoming &lt;a href="https://store.steampowered.com/app/1445190/DoubleShake/"&gt;DoubleShake&lt;/a&gt; feature yet another doe-eyed, inoffensively curvaceous young anime woman, graciously stripped of any of the interestingly dissonant design elements present in her parallel Marina, protagonist of ancestral Mischief Makers, herself already a likeable, mostly unchallenging design? don&amp;rsquo;t we think it would be more interesting, daresay more subversive even, as this trend continues, to star in her place a big, burly, hairy, Mike Haggar sort of gentleman, or an old fat woman, or christ anything else at this point? try this exercise: any time you see one of these games, and there are many, imagine all the sexy anime creatures are Mike Haggar. it&amp;rsquo;s almost always an improvement. &lt;/p&gt;
&lt;p&gt;speaking of Big Michael: though his parents Capcom themselves are known for leading the industry in designing gorgeous video game babes, even going so far as to rework our own stupid superhero designs into items so fascistic in their beauty it feels uncomfortable to even acknowledge them as part of the same lineage as our own shoddy scrawls, yet they also, evidently, possess an incredible mastery over that which above all else great artists value: contrast and restraint. if you simply make everyone maximally cute and sexy, there is no dimension to it. there&amp;rsquo;s nothing to hold on to. one would quickly lose awareness of Psylocke&amp;rsquo;s beauty, of bawdy Felicia&amp;rsquo;s outfit and conduct, without the presence of the hunchback Zangief and his disgustingly bulging, scarred muscles, of the inhuman Shuma-Gorath, of savage Wolverine, of whatever the fuck is Amingo. the key aspect is balance. to its credit, Motorslice achieves this to some effect by contrasting the character against her huge, dirty, mechanical environment, but can we agree at this point that the &amp;ldquo;beautiful woman versus ugly world&amp;rdquo; trope is at least a little played out?&lt;/p&gt;
&lt;p&gt;i am fully aware of how easy i am to disregard here. my foremost artistic achievement is stick figures. but you don&amp;rsquo;t need to be a particularly skilled character designer to come up with a character more interesting and thematic than a silent woman who is attractive. i only humbly suggest to the budding indie developer to try something interesting instead of something boring&lt;/p&gt;</description><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/im-getting-sick-of-sexy</guid></item><item><title>Japan Conflict</title><link>https://ivysly.com/dream/japan-conflict</link><description>&lt;p&gt;in a massive geopolitical blunder i end up agreeing to join a naval attack against Japan despite already being part of a research team from America within their borders. the lead of that team called me up and was like WTF&lt;/p&gt;</description><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/japan-conflict</guid></item><item><title>Bridges</title><link>https://ivysly.com/dream/bridges</link><description>&lt;p&gt;I&amp;rsquo;m on vacation in Canada. driving down a huge lattice of highway bridges, we are at the top. driving slowly. i see the person in front of us suddenly drop. the road ends. we get out of the car, still moving. my car falls off the edge, its wheels still moving (something weighing down the pedal?). people gasp and scream. the car bounces and bounces down this huge series of bridges. I&amp;rsquo;m only worried that my phone was in there—how will we get back home?&lt;/p&gt;</description><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/bridges</guid></item><item><title>there is no such thing as canon</title><link>https://ivysly.com/blog/there-is-no-such-thing-as-canon</link><description>&lt;p&gt;something that&amp;rsquo;s been a confusing annoying pain in my neck for the last forever is this cultural notion of ground truth in fiction, that somehow a collection of works and adaptations can form a singularly truthful throughline, as if the thing an episode of G.I. Joe has over those doubtlessly outnumbering works of fan fiction devoted to its musclebound subjects is, of all things, credibility. this is a grave category error approaching mass hysteria. we have been conditioned to accept this for decades, for one with the ever extending and obviously violent legislation and enforcement of intellectual property law (finally, we can publicly write a fan sequel to The Little Engine That Could in 2026 without being considered a criminal in the US) and it&amp;rsquo;s hackneyed at this point to even mention the Bible, which really is countless books written in different languages by thousands of different people, but still somehow one Word. truth has always meant nothing; did you know that Super Mario Bros. 3 is actually a stage play? never mind the fact that it&amp;rsquo;s a fucking video game&lt;/p&gt;</description><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/there-is-no-such-thing-as-canon</guid></item><item><title>Shard</title><link>https://ivysly.com/dream/shard</link><description>&lt;p&gt;I&amp;rsquo;m at school, in class, with a crimson haired girl and M. it&amp;rsquo;s dark out. M has a beaker full of some unknown substance, it&amp;rsquo;s some kind of drug. he asks if i want to join him in superheating it after class. i decline. as i leave, walking to the giant staircase leading down to the entrance (it&amp;rsquo;s a huge room, the school feels like an airport), i hear that the beaker exploded. i see the crimson haired girl running down the stairs, so easy to spot among the crowd—i get the impression she joined in M&amp;rsquo;s experiment. i start to run after her, but a shard of glass gets stuck in my hand. my hand goes numb and i sit down.&lt;/p&gt;
&lt;p&gt;nobody is around. I&amp;rsquo;m in a dark church, under a table or something. I&amp;rsquo;m yelling out for help—actually I&amp;rsquo;m just yelling &amp;ldquo;shard&amp;rdquo;. apparitions appear to enter and exit the place but i don&amp;rsquo;t really want their help. very scared&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m at my grandparents&amp;rsquo; old house. it&amp;rsquo;s the size of a warehouse, now, and the inside is more like an open garden. it&amp;rsquo;s messy. I&amp;rsquo;m still hurt. i see an entrance to papou&amp;rsquo;s office. it&amp;rsquo;s more a low-walled section of this giant open building. i go and sit in the corner. i look up and see a ladder to a raised wooden platform. i notice on it is a big &amp;ldquo;thin blue line&amp;rdquo; flag and feel confused and disappointed in my papou who was never like that. when I get close to inspect it i see that it&amp;rsquo;s actually a thin green line—the symbol co-opted by environmentalists, probably something he picked up at the jazz festival or something. I&amp;rsquo;m relieved.&lt;/p&gt;
&lt;p&gt;i still have the shard in my arm, my elbow now. i see myself on TV. they&amp;rsquo;re saying it&amp;rsquo;s an embedded UFO infection, as the shard keeps flying around and generating more shards that burrow in my elbow. there is no known cure.&lt;/p&gt;</description><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/shard</guid></item><item><title>Directfratball Precipitation</title><link>https://ivysly.com/dream/directfratball-precipitation</link><description>&lt;p&gt;skipping class. I&amp;rsquo;m wandering through hallways and classrooms. i encounter B, someone i know online—she wants me to fast with her, by which she means hang out while not eating—i took it to mean deep contemplation somewhere else, because she tries to get me into to a room full of kids doing their schoolwork. i imagine myself (looking much different than i really do, younger and with short hair, a dark face i don&amp;rsquo;t recognize) entering this room and it&amp;rsquo;s embarrassing, even though i know it would be fine. as B leaves i reject this and end up in a room alone, painted deep purple. she eventually finds and drags me back, through an ethereal white translucent plastic hallway, like something meant for biohazard containment, to the room she and a friend are in. it&amp;rsquo;s a bit messy but nice with big windows letting in the clear sunny sky. eventually she asks me something but uses a word i can&amp;rsquo;t understand—i keep asking her to repeat it, until finally she shows it to me, written down: directfratball precipitation, a term she got from one of my dreams.&lt;/p&gt;</description><pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/directfratball-precipitation</guid></item><item><title>Beach</title><link>https://ivysly.com/dream/beach</link><description>&lt;p&gt;I&amp;rsquo;m climbing down a cliff on the beach, looking for a suitable house to avoid zombies—eventually i find one in a patch of grass, near an apartment complex. i end up going back to the beach, but falling off a giant sand dune in front of a zombie with a satchel. i think I&amp;rsquo;m hurt as i run away&lt;/p&gt;</description><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/beach</guid></item><item><title>Hell Stairs</title><link>https://ivysly.com/dream/hell-stairs</link><description>&lt;p&gt;I&amp;rsquo;m in an empty house floating in a bright half cloudy sky, unhappy. I decide to become a student of God, something that requires a test of devotion by climbing an enormous staircase through hell, kept by scholars who test my knowledge&lt;/p&gt;</description><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/hell-stairs</guid></item><item><title>Backrooms</title><link>https://ivysly.com/dream/backrooms</link><description>&lt;p&gt;I&amp;rsquo;m running through a series of strange environments, them leading to new ones of my choosing as i find entrances—to test this i end up in the backrooms—but eventually i try to fit in a hole in the ground to see something new, and, because i couldn&amp;rsquo;t think of anything, i woke up&lt;/p&gt;</description><pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/backrooms</guid></item><item><title>Driver</title><link>https://ivysly.com/dream/driver</link><description>&lt;p&gt;in the car with A and Q. I&amp;rsquo;m in the back seat. we just got done grocery shopping. they want to get me a job as a driver who works a night shift. we look around for suitable drivers to ask questions about their job. eventually we find a good looking car. it&amp;rsquo;s night. we follow it through the forest down a winding, treacherous road, which continues to get more and more dangerous. eventually we end up on a wooden structure built atop a huge lake, a giant labyrinth of shabby wooden road with ramps and loops and things over this expanse of dark turquoise water. &lt;/p&gt;
&lt;p&gt;after driving up and around this structure for a while, we continue on foot. it feels like a video game with a top down camera. we walk around&amp;hellip; eventually i end up back at N&amp;rsquo;s parents house. i had taken up residence in the den. i have the door closed. it&amp;rsquo;s a mess in here, clothes and stuff all over the ground. outside the door i hear my mom and stepdad. they sound disappointed in me.&lt;/p&gt;</description><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/driver</guid></item><item><title>Wedding</title><link>https://ivysly.com/dream/wedding</link><description>&lt;p&gt;R and I are getting married. it&amp;rsquo;s a big ceremony in a church with lots of people, many of whom i don&amp;rsquo;t know. I&amp;rsquo;m unsure where to go—some women help me go not up the aisle but first up a flight of stairs that take me to the real aisle that the bridegroom is supposed to walk down. R is visibly happy, in a huge ornate dress pacing back and forth on the platform with her hand over her mouth, and i can barely keep myself from running down the aisle. when I get up on the platform, there is no priest or speech, just a kiss—but first i must kiss on the cheek a very tall and obese beautiful older black woman who sits to the side just on the edge of the platform. i never actually do end up kissing the bride&lt;/p&gt;</description><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/wedding</guid></item><item><title>i confess i have no taste</title><link>https://ivysly.com/blog/i-confess-i-have-no-taste</link><description>&lt;p&gt;as my status as an artist is self-appointed, in the same sense that a usurper rules &lt;em&gt;de facto&lt;/em&gt;—that is, by individually declaring it, and individual use of clumsy brute force to attain it, thus it is the truth, regardless of basic democracy or even common approval—maintaining an air of artisthood seems of greater importance to my ego than that of any natural artist i know. those are born artists, or people who understood their path from a young age, and were willing to work for it. i was never willing to work. i am only a suburban-born, middle-class dropout, raised in a household that revered art only in its humble, suburban, middle-class way, that of novel thrift-store lamps, family movies, Dave Grohl, my mother&amp;rsquo;s naïve yet proficient and charming portraits and life paintings and watercolors, my father&amp;rsquo;s technical mastery in copying metal riffs and organizing his music collection. my artistic life was steeped early in the invisible ubiquity of kitsch, which i loved with an almost underserved reverence, it being all i ever knew, yet so important has it been to me that culture considers my art one of its noble elements that i&amp;rsquo;ve tortured myself into making work out of what is supposed to be the greatest wellspring of joy in life, ART, further pained by the awareness that my shallow efforts will never elevate me above the truth that i am just a well-disguised Darger type: an uncultured, unknowing isolatee, disturbed by sexual and political insanity, and all-around too unwell to be a member of society, let alone the Canon. well, I&amp;rsquo;m tired of this stupid charade, and I&amp;rsquo;m convincing nobody. &lt;/p&gt;
&lt;p&gt;let it be known that i play fewer video games than working men with a tenth the means and time; that i read little and very slowly; that i just watch new movies at the cinema and random crap i pirate that &amp;ldquo;seems good&amp;rdquo;, and that a &amp;ldquo;classic&amp;rdquo; film to me is often closer to 1993 than 1941; that, by my observation, holistic consumption is a natural behavior for the natural artist, an obsession not just in his own work but for the art that defines him, yet an uncomfortable and annoying slog for me. there are moments of sublimity, yes, sometimes life changing moments, but they are crowded by an insecure trudging through works i force myself to enjoy, and analyze truthfully, all in the name of &amp;ldquo;improving my taste&amp;rdquo;, so i can be a better artist. because that is the whole point of all of it: i want to make art, and i&amp;rsquo;m concerned with making art that is good, and which i personally like. yet i don&amp;rsquo;t really care as much about absorbing external sources in the same way a natural artist does. my obsession is singular to making the thing, not looking at other things. deeply, i&amp;rsquo;m not a lover of art, but of the craft, so the art is in a sense my medicine or my homework—i must take it because it will help me with the thing i truly care about.&lt;/p&gt;
&lt;p&gt;but i&amp;rsquo;m ready to accept that i will gain little by plowing through the world of art at a pace or in a place not suitable for me, and while i extol the benefits of staying uncomfortable with practice and intake, it will do me no good to take so much or such bitter medicine. with this manifesto i only want to declare that i am of relatively few influences outside myself, yet many inside, so far as that, while maybe no longer an outsider artist, i am certainly and forever still an &amp;ldquo;insider artist&amp;rdquo;; there will be more classics i miss than which I&amp;rsquo;ll ever know—let alone reference—and, ultimately, it&amp;rsquo;s alright. i only want to re-learn how to love deeply the few things i can take in before i burn out or burst open. i&amp;rsquo;m ready to Let Me Enjoy Things.&lt;/p&gt;</description><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/i-confess-i-have-no-taste</guid></item><item><title>Creep</title><link>https://ivysly.com/dream/creep</link><description>&lt;p&gt;new episode of creep tapes set in a small generic well lit apartment where the victim both knows who the creep is and very obviously wants to be killed by him, not unlike the first episode of the second season&lt;/p&gt;</description><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/creep</guid></item><item><title>Dance</title><link>https://ivysly.com/dream/dance</link><description>&lt;p&gt;I&amp;rsquo;m dancing in a festival or convention in a little glade among firs with a crowd of men, women, and strange looking furry puppet people—coyotes or wolves. we dance in slow motion, people touching each other, many people naked. after the fact i start spending the weekend trying to recreate this experience. a package shows up to our door. I&amp;rsquo;m living in my grandparents&amp;rsquo; old house. the package has in it a bunch of boxes with labels of parts and materials on the outside. the deliverer is wearing a lab coat and tries explaining everything to me. R comes out to handle it, she knows this is out of my wheelhouse.&lt;/p&gt;</description><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/dance</guid></item><item><title>Working For The Elves</title><link>https://ivysly.com/dream/working-for-the-elves</link><description>&lt;p&gt;spotty memory of this one. I&amp;rsquo;m in a sort of ominous parallel world. there&amp;rsquo;s a feeling of evil presence. a man explains he started working for the elves (demons?) as the planet revolves around them—he didn&amp;rsquo;t realize it&amp;rsquo;s a binary system. i keep driving past this house with a compulsion to enter the bathroom. there&amp;rsquo;s something really wrong feeling about all of this&lt;/p&gt;</description><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/working-for-the-elves</guid></item><item><title>Dorm</title><link>https://ivysly.com/dream/dorm</link><description>&lt;p&gt;I&amp;rsquo;m in my grandparents&amp;rsquo; old house, now a university dorm. my bed is in a different position tonight, next to one of my dorm-roommates&amp;rsquo; beds. my roommate and i have a pleasant chat. then the landlord (or otherwise one of the staff) barges in, a vietnamese man with medium bleached hair dyed auburn and bad teeth. he reveals his evil plan was to get us to fall in love and have sex by putting our beds together. i tell him if he&amp;rsquo;s going to manipulate the students like that he probably shouldn&amp;rsquo;t tell them about it at least. later we&amp;rsquo;re all upstairs. there&amp;rsquo;s a booming noise in the hallway, and we go in to check the ceiling, where there was an object of interest&lt;/p&gt;</description><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/dorm</guid></item><item><title>Hostage</title><link>https://ivysly.com/dream/hostage</link><description>&lt;p&gt;I&amp;rsquo;m in my car. in the back seat is a boy and a crazed man with a gun. he&amp;rsquo;s telling me to drive home. i almost get in an accident looking back at him and trying to find the maps app on my phone. I&amp;rsquo;m driving through a rural area, knocking over fences. we end up near the convenience store, south of where i live. a woman is driving toward us, also on the grass. everyone exits their vehicles and the woman tries to get the boy to safety. the man starts shooting, i get in the car and drive away&lt;/p&gt;</description><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/hostage</guid></item><item><title>How It Used To Be</title><link>https://ivysly.com/dream/how-it-used-to-be</link><description>&lt;p&gt;I&amp;rsquo;m in bed with C, in his house. there&amp;rsquo;s someone else with us. we casually cuddle like queequeg and ishmael. he says, this is just like how it used to be isn&amp;rsquo;t it?&lt;/p&gt;</description><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/how-it-used-to-be</guid></item><item><title>Lungs</title><link>https://ivysly.com/dream/lungs</link><description>&lt;p&gt;I&amp;rsquo;m incapacitated—someone injects me with a poison that gradually prevents my lungs from working and I slowly but painlessly die&lt;/p&gt;</description><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/lungs</guid></item><item><title>Loft</title><link>https://ivysly.com/dream/loft</link><description>&lt;p&gt;I am a kid. I&amp;rsquo;m in the dark loft of an airbnb, thinking about how fun the party will be. while my older siblings downstairs are talking with the owners of the house, I&amp;rsquo;m visited by a strange man. he unfolds a set of monitors showing conspiracy theory videos and aggressively forces me to watch them. i protest but he keeps convincing me to watch. he tells me i will have to play his game, which looks like the game 10 Beautiful Postcards. at one point i tell him something like &amp;ldquo;you are a pathetic bully, i am a &lt;em&gt;middle schooler&lt;/em&gt;&amp;rdquo;. when i have the chance to pack my things and leave, the says, while playing the game, &amp;ldquo;i guess we&amp;rsquo;ll see whose baby it is then.&amp;rdquo; i don&amp;rsquo;t know what this means, exactly, but i know it will be what forces me to come back tomorrow&lt;/p&gt;</description><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/loft</guid></item><item><title>Grey Carpet</title><link>https://ivysly.com/dream/grey-carpet</link><description>&lt;p&gt;I&amp;rsquo;m a kid, we&amp;rsquo;re moving into a new house. the ceiling is a pyramid shape and super high. the house is barely enough to fit all of us, with a strange two level bed and little cut out of a room barely big enough to fit one person. it&amp;rsquo;s all grey carpet and it makes an eerie choiral drone.&lt;/p&gt;</description><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/grey-carpet</guid></item><item><title>Wristband</title><link>https://ivysly.com/dream/wristband</link><description>&lt;p&gt;With these loose metal wristbands, you can make them fly if they catch the sun on the inner side and you wave your arm around. I find that it still works even if you draw the sun on the inner side, warped to cover the whole surface like a bad uv map&lt;/p&gt;</description><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/wristband</guid></item><item><title>Mishy Mashy Woman</title><link>https://ivysly.com/dream/mishy-mashy-woman</link><description>&lt;p&gt;A dead relative who also happens to be Ursula K. Le Guin had gifted me something: my real name, a symbol i can see when i close my eyes, a warped and chipped rectangular shape that sings a song.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m in my car, parked outside my apartment. I have a big silver watch/gun that says &amp;ldquo;Ayn Rand never loved you&amp;rdquo; inside big letters than spell out my first and last name. as i try to exit my car i notice a woman trying to take stuff out of the box area with the back door open. i know her from internet memes, it&amp;rsquo;s the mishy mashy woman. I yell at her to stop, and she walks around to the open back passenger side door where I&amp;rsquo;m sitting and pulls a gun on me, forcing me back in. i notice the other two people around the car, one man and one woman. they&amp;rsquo;re laughing and getting in the car, trying to take things and take me somewhere. the mishy mashy woman is in the box area again, aiming the gun at me. i lunge at her and try to bite at her ear and she shoots. I&amp;rsquo;m not sure if she hit me.&lt;/p&gt;</description><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/mishy-mashy-woman</guid></item><item><title>Hill</title><link>https://ivysly.com/dream/hill</link><description>&lt;p&gt;I&amp;rsquo;m in a grassy field, in a memory. It&amp;rsquo;s grey and windy out. I&amp;rsquo;m younger and fitter and I can run really fast, so I do. someone who looks like T is with me—it might be Dennis in human form. I run up and down the hill and lie down in the grass and imagine that this could be where I die, even though it&amp;rsquo;s a place I&amp;rsquo;ve been my whole life. i wonder if it&amp;rsquo;s better to die at home or somewhere you&amp;rsquo;ve never been&lt;/p&gt;</description><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/hill</guid></item><item><title>Plant Thing</title><link>https://ivysly.com/dream/plant-thing</link><description>&lt;p&gt;underground, can&amp;rsquo;t make any noise or it will attract monsters. A boy screams and a plant thing with an eye and a mouth engulfs his head. he stops screaming and the creature loses interest. it happens again. his rescuer&amp;rsquo;s arm is dismembered but he can&amp;rsquo;t make any noise. they both make it out alive&lt;/p&gt;</description><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/plant-thing</guid></item><item><title>Daughter</title><link>https://ivysly.com/dream/daughter</link><description>&lt;p&gt;I adopt a daughter, she&amp;rsquo;s maybe around 8. she plays magic the gathering on the playground with her friend as I watch. her friend&amp;rsquo;s dad is there too, and he looks kind of like me.&lt;/p&gt;</description><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/daughter</guid></item><item><title>Journalist</title><link>https://ivysly.com/dream/journalist</link><description>&lt;p&gt;at a woman&amp;rsquo;s house. it&amp;rsquo;s large and messy. she is really paranoid about privacy. i think she is a journalist? but also some kind of rebel figure against an authoritarian regime. we&amp;rsquo;re waiting for someone, a bald man to arrive. at some point we leave the house and her security field disables my phone&amp;rsquo;s connection. i think i try to call someone and it fails. outside is a courtyard sort of like my middle school. we come back.&lt;/p&gt;</description><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/journalist</guid></item><item><title>Cavan</title><link>https://ivysly.com/dream/cavan</link><description>&lt;p&gt;R and i have a lot of time to record ourselves having sex, but i can&amp;rsquo;t let my parents see.&lt;/p&gt;
&lt;p&gt;driving a pickup, need to get home. it&amp;rsquo;s night and rainy. looks sort of like the area around the apartment but more like eugene. in the right lane but i need to make a left. in quickly merging and turning i end up in an alley i haven&amp;rsquo;t seen before. i race a boy on his bike to get a comic on the way. we both end up at a stand selling physical copies of WikiLeaks. we can&amp;rsquo;t decide who got there first. it&amp;rsquo;s a tie. among other things, i learn that &amp;ldquo;cavan&amp;rdquo; is the feminine form of &amp;ldquo;cavana&amp;rdquo;. seems backwards&amp;hellip; i meet R outside a dark bookstore. I&amp;rsquo;m hesitant to go in, but she says they have a private room for us.&lt;/p&gt;</description><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/cavan</guid></item><item><title>gameplay is art</title><link>https://ivysly.com/blog/gameplay-is-art</link><description>&lt;p&gt;let me first define art: art is whatever i think is art. creating games is an art. playing games is an art. gameplay is art and gamers are artists. artistry is itself a game that creates art. in the case of game development, artistry is a game that creates art that is a game that creates art.&lt;/p&gt;
&lt;p&gt;it is now commonly accepted that video game developers are artists. many people however don&amp;rsquo;t seem to think of gameplay (the action of a gamer playing a game) as art on the terms of art alone. most serious gaming as-vocation is in the form of competition (esports, speedrunning) or as a background activity for online entertainers. neither example is necessarily gameplay-as-art. there is an art to them, but it&amp;rsquo;s not innate to gameplay—it just involves gameplay to serve its own specific kind of art. all gameplay can be art on its own if only you framed it.&lt;/p&gt;
&lt;p&gt;games are still going through their Modern period. there is an abundance of self consciousness. the relationship between game and gamer has never been so uncertain. winning and losing is just a formal convention (and law, as video games are defined and bound by laws, unlike meatspace games which are built of breakable rules), a pretense of motivation with which the gamer can choose to play along or ignore completely. could a game be a tool? obviously yes. maybe we should ask ourselves when making a game: how can this be useful? i don&amp;rsquo;t mean useful in the sense of therapy. what I&amp;rsquo;m trying to ask is, in the case of the gamer-artist, how do we better make our games themselves tools of art? videogames as explicit creative medium is a mature form at this point, made unquestionably so by popular titles like Minecraft and Super Mario Maker whose gameplay is itself modal systems of creating play areas and then playing in them, but games without creative tools like these can still be recontextualized by their own residue like demo saves (emulation turned retro gaming into a demo sandbox retroactively) and even a game with no residue is changed by the presence of an audience, even if just the audience of the player. &lt;/p&gt;
&lt;p&gt;when designing a game, you are designing a space for gameplay with a certain kind or kinds of play in mind. but the designer-intended mode of play is an infinitely small subset of all gameplay. you can only account for nothing. all I&amp;rsquo;m suggesting is for you the designer to be aware of how the gamer can transform your game into their art, and design accordingly.&lt;/p&gt;</description><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/gameplay-is-art</guid></item><item><title>Hot Dogs</title><link>https://ivysly.com/dream/hot-dogs</link><description>&lt;p&gt;A row of old women and a row of young women, all naked, all Russian. in a room with solid color brown walls and floor, like a green screen. They stand in a grid. the young women repeatedly march in a rotation, as the old women vomit whole hot dogs into their mouths like baby birds.&lt;/p&gt;</description><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/hot-dogs</guid></item><item><title>dream journaling for artists</title><link>https://ivysly.com/blog/dream-journaling-for-artists</link><description>&lt;p&gt;with some awareness of irony as i enter month 4 of my latest creative block, i thought i should write a little post about dream journals, my preferred tool for finding ideas. the practice of dream journaling feels enriching in the same way that making art feels enriching, and the best part is your brain does most of the work without any conscious effort. i&amp;rsquo;m not going to get into psychoanalysis or dream interpretation in this post, as that&amp;rsquo;s a more open-ended and personal process. you are free to practice on me if you want, as nearly all my dream recordings are &lt;a href="/dream"&gt;publicly available&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;dreams produce the kinds of ideas and imagery that are nearly impossible for the conscious mind to generate unassisted, and by utilizing them in your art you are able to cultivate a style that is striking, personal, and unique. by paying attention to the contents of a dream, you are filling novel corners of your perceptual and thematic libraries, the places we look first when deciding on the form and content of an artwork. even as I currently struggle to make anything, dream journaling provides me an opportunity to bank ideas for later, a strategy that has worked out for me in the past; see: &lt;a href="/games/evil-egg"&gt;this game&lt;/a&gt;, directly inspired by &lt;a href="/dream/egg"&gt;one of my dreams&lt;/a&gt; and a work i consider among my best.&lt;/p&gt;
&lt;p&gt;dream journaling is a simple practice that is almost self explanatory: have dreams while you sleep, and record your memory of them when you wake up. there are of course several complicating factors and choices to make that prevent people from starting. i have gone through long periods of inactivity myself. here are the common blockers:&lt;/p&gt;
&lt;h3&gt;&amp;ldquo;i wish i could do it but i never have dreams&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;rejoice! all human beings on the planet (and most other animal species) have dreams every day. they just happen to be easier or harder for some people to access. the most obvious thing to take care of is your sleep hygiene. importantly, you need to make sure you&amp;rsquo;re getting enough sleep in the first place. sleep cycles occur in intervals of roughly 90 minutes. the most accessible dreams are had during REM sleep, which occurs at the end of a cycle, and the dreams you&amp;rsquo;ll remember are the ones that occur right before you wake. for many people, if they have a morning alarm, their body will restructure its sleep patterns so that they wake up consistently a little before their alarm actually goes off. the ideal scenario is that you get an appropriate amount of sleep (roughly 7-8 hours for most adults), and that you will be ending your last cycle, in REM sleep, right before your alarm goes off. this will maximize the chance you have a dream you remember, and is optimal for your health too—there is evidence to suggest that interruptions during deep sleep &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC5449130/"&gt;can be harmful&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;there are some medications and drugs (weed) that suppress dream recall. it&amp;rsquo;s usually still possible if you make an effort to remember, though, because you are absolutely still dreaming every night. you can also take certain medications or supplements to improve recall. melatonin is an obvious one. just don&amp;rsquo;t take more than 0.1mg or you&amp;rsquo;ll actively disrupt your sleep.&lt;/p&gt;
&lt;p&gt;don&amp;rsquo;t be discouraged if you don&amp;rsquo;t remember them frequently. if you cast your line you&amp;rsquo;ll eventually catch one. and as you start to remember your dreams, you&amp;rsquo;ll start to remember them more frequently and vividly.&lt;/p&gt;
&lt;h3&gt;&amp;ldquo;i have dreams I&amp;rsquo;d rather not remember&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;there are different solutions for this, depending on what you mean. lots of dreams are nightmares. if you&amp;rsquo;re just worried about having dreams where bad things happen, i suggest you push through this—not only are nightmares always full of interesting details, they can also be useful for introspection and working through difficult feelings and problems. i find nightmares more cathartic than dreams that just provide wish fulfillment, because one ends in relief and the other in disappointment.&lt;/p&gt;
&lt;p&gt;conversely, if your dreams are so severely unpleasant that they disrupt your quality of life and their effects on you persist when awake, then it&amp;rsquo;s time to see a professional. &lt;/p&gt;
&lt;h3&gt;&amp;ldquo;my dreams are just boring&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;no they aren&amp;rsquo;t. you think they are boring because when you&amp;rsquo;re dreaming, dream logic is mundane. in the short period after waking, you&amp;rsquo;re still half operating under this logic, and by the time you forget, you&amp;rsquo;re only left with the &lt;em&gt;feeling&lt;/em&gt; of the dream and that it was apparently boring. waking up and immediately recording what you dreamed has a twofold effect of bringing you into waking lucidity more quickly and allowing that fucked up dream logic to be put into context by real life. once you start recording, you&amp;rsquo;ll notice that you start to remember more about your dream, and further back—often the further you go, the weirder it gets. it&amp;rsquo;s not unusual for me to start at the end of my dream and prepend my recording with more and more details i remember about what came before. this makes sense, because typically we remember most what occurred in our dreams just before waking up. when trying to recall a dream to someone else, i think we go through this process without even realizing it.&lt;/p&gt;
&lt;h3&gt;&amp;ldquo;i want to do it but by morning i always forget&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;this is going to sound silly, but it works for practiced lucid-dreamers and it works for me: verbally affirm that you are going to journal in the morning. plant the idea in your head. you don&amp;rsquo;t have to fret about it. just remind yourself as you go to sleep about your plan to log in the morning. if you&amp;rsquo;ve set up your environment to make journaling the natural thing to do, you are more likely to eventually get started in the first place.&lt;/p&gt;
&lt;h3&gt;&amp;ldquo;i don&amp;rsquo;t want to write a bunch down the moment i wake up&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;well, it&amp;rsquo;s inevitable that you will have to put in a little work. what I&amp;rsquo;ve found is that it rarely takes very much writing to conjure the memory of a dream. i tend to focus on writing down the actual events and objects in a dream, because my memory will automatically fill in the details, vibes and emotions i felt when i was in it. however, it should be said that the more minimal you get, the more likely it is you won&amp;rsquo;t be able to remember it later. as of writing, there are only a few (maybe 3-4 out of 118) entries in my dream log that I cannot remember, and many of them are years old.&lt;/p&gt;
&lt;p&gt;you don&amp;rsquo;t actually have to write either. a voice memo works just as well for many people. i used to use a physical notebook, but now i just type them in a notes app on my phone, sometimes with speech-to-text. you could even draw a scene from your dreams. a dream journal isn&amp;rsquo;t necessarily supposed to be a highly detailed log of written events, because the actual entries themselves aren&amp;rsquo;t fully useful on their own—the memory they evoke is what creates a lasting impact. do whatever is easiest to you. set up your environment to make it as easy as possible. i open up the app i use before going to bed and place the phone next to my pillow, so that it&amp;rsquo;s already there and ready when i wake up.&lt;/p&gt;
&lt;p&gt;however, if you find you still just don&amp;rsquo;t enjoy doing it or get much out of it even after trying different things, then maybe you should just stop trying and move on. not everything is for everyone.&lt;/p&gt;</description><pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/dream-journaling-for-artists</guid></item><item><title>Game Train</title><link>https://ivysly.com/dream/game-train</link><description>&lt;p&gt;I&amp;rsquo;m getting off the game dev train. It&amp;rsquo;s graduation. I see my school mates. The train is on a platform in the sky on a cloud, after a long climb now. each stop comes faster. they&amp;rsquo;re all labeled with increasingly advanced game tech. I want to get off right before the 3d stop, itself right before &amp;ldquo;facial expressions&amp;rdquo;. i miss my stop and I&amp;rsquo;m forced to jump off&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/game-train</guid></item><item><title>Rock Monster</title><link>https://ivysly.com/dream/rock-monster</link><description>&lt;p&gt;I&amp;rsquo;m a weird little deformed creature with a big head and little body. in a foreign country, it&amp;rsquo;s dangerous. my taxi drops me off in the center of town. it&amp;rsquo;s evening. i wander around for a bit, and meet a girl creature. I&amp;rsquo;m distracted talking to her(?) and get bulldozed by a bigger, more deformed creature made of rock. she tells me about them and we walk around, looking for more things to do. now i know how to dodge them. when we see one, we bait it and get out of the way, letting it crash and hurt itself, repeating this a few times.&lt;/p&gt;</description><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/rock-monster</guid></item><item><title>Shoes</title><link>https://ivysly.com/dream/shoes</link><description>&lt;p&gt;I buy a new pair of sneakers at the Asian market and wear them on the bus to school. At class i sit in the back row. The lights are off and it looks like we are about to watch a presentation. someone makes fun of me for buying the same pair of shoes twice.&lt;/p&gt;</description><pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/shoes</guid></item><item><title>Uphill</title><link>https://ivysly.com/dream/uphill</link><description>&lt;p&gt;R and Dennis and I are on a sacred uphill trail in a large clearing in the forest. We are following these large wooden structures that look like pylons with little areas inside to sit in a circle on log chairs. we walk through a pond with ducks. R tells me where I shouldn&amp;rsquo;t pee in the pond because it will attract flies. we walk up a giant wooden bleachers-like staircase structure.&lt;/p&gt;</description><pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/uphill</guid></item><item><title>Cairn</title><link>https://ivysly.com/reviews/cairn</link><description>&lt;p&gt;I liked Cairn a lot. You pretty much do nothing else but climb in this game, and they did a great job in making it fun. Cairn is a simple game but well polished, and it offers a nice range of optional challenge that push its mechanics as far as any designer could take them. It&amp;rsquo;s also a pretty game, with gorgeous handdrawn splash art on load screens and a unique, utilitarian, cel-shaded art style that is perfect for allowing the player visually map out the wall for crags and holds. I was really struck by the awesome performance of the main voice actor(s?), whose grunts, screams, and heartbreaking, desperate whimpers grounded the climbing with realism and stakes. Quickly the tone is set that climbing is SERIOUS BUSINESS, and you are always one step away from critical injury or death. It&amp;rsquo;s a totally artful wrapping around a game that is proud most of all about its systems, and you can tell every element of the game is designed to work with each other mechanically and narratively. It&amp;rsquo;s a highly deliberate game, which I admire.&lt;/p&gt;
&lt;p&gt;On the other hand, I think Cairn is weighed down a bit by the secondary mechanics and the general inconsistency of player feedback making it hard to strategize and improve at specific skills. Still I think they did pretty much the best job you could making a climbing game, and obviously better than any other climbing game I&amp;rsquo;m aware of, even &lt;a href="https://ivysly.com/games/grippy"&gt;my own ha ha&lt;/a&gt;. Over time you sort of develop an intuition for what constitutes a solid hold, and how to avoid slipping off, but, honestly, I can&amp;rsquo;t say that at any point in the game I felt like I had &lt;em&gt;substantially&lt;/em&gt; improved at it. A lot of times it really looked like I had a strong hold, but I slipped off anyway - it can be hard to determine if your strategy will pan out, even with practice. I chalk (LOL) this down to a really ambitious mechanic by a studio that doesn&amp;rsquo;t have the millions to make it perfect. It really does seem at times like magic, too, especially how often the game seems to know which limb you want to move. I probably manually selected a limb one out of twenty times. The belaying is designed in a really interesting way to be a sort of imperfect checkpoint system, as your pitons can break unpredictably (even with perfect installation) and you&amp;rsquo;ll still take damage from long falls. This was a highlight to me. it&amp;rsquo;s a really smart way to have the player create their own difficulty. I took pride in free-soloing some routes that I knew I could do without checkpoints, making an otherwise easy climb much more thrilling. I can&amp;rsquo;t speak to the accuracy to real rock climbing (the only thing I know about climbing is when I did it as a young kid and the movie Free Solo) but I was surprised that they didn&amp;rsquo;t allow for a few things I have seen real climbers do, like jumping from one position to another, and the climbing under overhangs felt inconsistent at times in a way that makes me feel they didn&amp;rsquo;t really account for it mechanically despite it being a relatively frequent obstacle. I have a lot of little gripes like this regarding the climbing system, even though it is overall really excellent, because it invites such nitpicking. it&amp;rsquo;s so intricate and ubiquitous you quickly start feeling all these tiny markers of its internal systems without being able to fully comprehend them. I want to engage more with it at an intellectual level, but the game seems to want you to play more with your intuition. fair enough.&lt;/p&gt;
&lt;p&gt;I think the survival mechanics really worked against the spirit of the game without adding much other than a time pressure, a pressure I think works against Cairn&amp;rsquo;s choose-your-own-path ethos. A few times I personally wanted to take a more challenging route, but I took the easy one anyway as I was running out of resources. There was a section near the end which forced me to turn off the survival mechanics entirely, as I was softlocked by hunger with no food (and no means to get any more). I consider this a major blemish on an otherwise focused work, and the optionality of the mechanic implies to me the designers&amp;rsquo; own lack of confidence more than it being purely implemented as an accessibility toggle. I also want to tack on to this point that the consumable buffs sometimes felt cheap in the way that they are wont to do in games, and I often felt like I cheated myself when I could only surpass a difficult route after chugging a few buffs. I can&amp;rsquo;t quite say it&amp;rsquo;s cynical of the designers to include these crafting and survival mechanics as the game is already incredibly lean and they are perfectly thematic inclusions, but i just don&amp;rsquo;t think they were given the same attention to detail.&lt;/p&gt;
&lt;p&gt;Vague spoilers this paragraph, though I won&amp;rsquo;t get into anything specific. I felt personally affected by the story, which is about a skilled but self-destructive obsessive who is not content until she achieves the impossible, a person who isolates from her loved ones in pursuit of personal perfection. The protagonist Aava is, time after time, confronted with her own problems and how her obsession affects others, and each time she chooses herself. There are multiple endings, and they are all delightfully unsatisfying. I think I need to go back to therapy after playing this.&lt;/p&gt;</description><pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/reviews/cairn</guid></item><item><title>how to make a successful indie game</title><link>https://ivysly.com/blog/how-to-make-a-successful-indie-game</link><description>&lt;p&gt;tl;dr&lt;/p&gt;
&lt;div class="youtube youtube-16x9"&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/q-JgG0ECp2U?si=vNiiDxevmdXO34jF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;i have dawdled on making this post for a couple years now because ultimately i am not qualified. i am a dysfunctional loser who stumbled into market success in the arts, maybe as undeserving a person could get if you believe in anyone deserving anything at all. it&amp;rsquo;s also hard to write this because it&amp;rsquo;s going to sound a lot like &amp;ldquo;fuck you, got mine&amp;rdquo;, but that&amp;rsquo;s not at all what i&amp;rsquo;m trying to do here. in fact, i am actually trying to help the reader to not make a huge mistake and throw their life away. i believe that in most respects i am not aspirational, but as time goes on i receive dm after dm, email after email from people asking me for advice, real, serious life advice, the &amp;ldquo;should i drop out of college and pursue game dev&amp;rdquo; kind of advice that could easily fuck up someone&amp;rsquo;s circumstances if taken to heart. this makes me feel a lot of ugly feelings and think a lot of nauseating thoughts, so i just want to lay it all out here so that i can stop sending the same depressing message to all the people—kids, mainly!—who look to me for guidance.&lt;/p&gt;
&lt;p&gt;you might think you want indie game development to be your #1 pursuit. okay. i will assume you don&amp;rsquo;t have the passive income or other means that would make it an easy decision. i hear some countries just toss you 20 grand if you say you are an artist. good for them. let me ask you to think about this question:&lt;/p&gt;
&lt;p&gt;are you content with being poor for the rest of your life?&lt;/p&gt;
&lt;p&gt;when i was a kid i always thought i was going to be a rock star. i wanted to be like my dad who was, to me, the greatest guitar player who ever lived, and a rock star himself. thus i spent most of middle &amp;amp; high school making crappy tunes in fl studio. i didnt care about school because i was going to be a rock star. i never had thoughts about getting a job (my parents hated their jobs, it wasn&amp;rsquo;t who they were, i could see it, and i decided i would never do that, i would do what i wanted to do) because i was going to hit it big. i spent my adolescense in a ridiculous dream that cost me my academic and social development until the obvious reality finally snapped me awake. no matter how good i was, and really, i was not that good, it didn&amp;rsquo;t matter, because the world is so huge and so many people want to be rock stars. how do i compete with someone smarter and more talented than me, someone who has more connections, more intrigue, more appeal, more money, more luck? &lt;/p&gt;
&lt;p&gt;i had to decide that i loved making stuff so much that i did not care if i would be poor and unknown forever. i only wanted to spend my time doing one thing, at any cost. anything was better than working. i am disabled (most people are) so i applied for social security income and was approved. for about 6 years i lived on around $9,000 USD a year, which at the time was already far below the poverty line. for two years i lived in a dining room, and i was lucky. the only thing i had was free time to grind away. that was all i wanted. the moral here is that i never had to ask anyone if i should do this. it was a shitty way to live and i can&amp;rsquo;t recommend it to anyone else, but i knew what i wanted, that i still want it, and that i will go back to living that way if i have to.&lt;/p&gt;
&lt;p&gt;the financial success of my financially successful game was a complete accident. i was not trying to make money with it. i&amp;rsquo;m a weak, lazy person and i had long given up entirely on any ambition to turn my hobby into a job. it happened to me, and i took the path of least resistance. this is not true for everyone who makes a successful game, but it should highlight the most important aspect of success: it can happen to anyone, and it can pass anyone by. you are not special, and i am not special except that i was lucky. i know someone will respond with some motivational bullshit about &amp;ldquo;making your own luck&amp;rdquo; which is true to the extent that you are more likely to win a jackpot if you play the machine 1000 times versus just once or none at all. it comes with a cost. you don&amp;rsquo;t force it with skill and hard work. skill and hard work are just the prerequisites to getting lucky at all.&lt;/p&gt;
&lt;p&gt;i was lucky in other ways too. i knew i wouldn&amp;rsquo;t be homeless if it came down to it. my family would have bent over backward for me and my siblings, as they have done before, but it would have destroyed us in the process. i am lucky to have a partner in my life who took care of me, kept me accountable, and in a way shared my absurd lifestyle. i am &lt;em&gt;luckier than most&lt;/em&gt; and i still gave up long before i happened to win the lottery. i&amp;rsquo;d return to shame and poverty if i had to, even though i rather like having a safety net and money to throw around. it would be my first choice. but i don&amp;rsquo;t think everyone needs to be this way to find their own version of success. you don&amp;rsquo;t have to quit school. you don&amp;rsquo;t have to quit your career. you can work on projects on the side. this doesn&amp;rsquo;t make you less of a game developer, less of an artist. you don&amp;rsquo;t have to make money doing something to love what you do. making art is not about grand gestures and taking huge risks, it&amp;rsquo;s about the love of the game and putting in the time that you do have. if you merely made something you are proud of, if you made a game you like to play, or even if you made a complete piece of shit that you hate, there&amp;rsquo;s success in there. that i got more money and recognition than another artist in the scene is a sick joke. i don&amp;rsquo;t have any more answers, any more insights. there is a bigger topic to explore about how people (in the US at least) are not allowed the humanity of leisure to do what they love, but i&amp;rsquo;m not good at talking about that. all i want to discuss in this blog post is my advice to those who keep asking for it. i say only sacrifice when you are sure, and be aware of the sacrifices you are about to make. don&amp;rsquo;t ask me if you should do what i did. if you have to ask&amp;hellip;&lt;/p&gt;</description><pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/how-to-make-a-successful-indie-game</guid></item><item><title>Sinkhole</title><link>https://ivysly.com/dream/sinkhole</link><description>&lt;p&gt;D kept falling and hitting his head. Eventually he fell off a ledge and hit his head on a log on a forested slope, rendering him unconscious. I try to follow him but the ground collapsed underneath us. We meet two other people under the ground who explain why they chose to be inside little pods/coffins. We are all crushed presumably to death&lt;/p&gt;</description><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/sinkhole</guid></item><item><title>Tomb Raider (2024 Remaster)</title><link>https://ivysly.com/reviews/tomb-raider-2024</link><description>&lt;p&gt;Tomb Raider is an honest game, honest about its gameness, in a way I didn&amp;rsquo;t expect, though in retrospect I&amp;rsquo;m not sure what else I should have expected. If the typical oddball middle-budget game design of the 6th and 7th console generations shaped my adolescence, the unending stream of risk averse committee designed AAAA storefront experiences that followed completely alienated me. something in my adulthood has been driving me backward, not just to my childhood but to a period before anything for which I would have any feelings of nostalgia. there&amp;rsquo;s something about the freedom they had in the 20th century to just try anything, a freedom from convention. Tomb Raider, a game everyone knows about, for which they made a $115,000,000 budget movie starring angelina jolie, is a surprisingly idiosyncratic game wonderfully free from convention.&lt;/p&gt;
&lt;p&gt;Tomb Raider is really nothing like Mario 64 in a way that begs just that comparison. It almost feels like a modern statement about some homogeneity of control schemes and character controllers in games where you move a guy around, but damn if they highkenuinely didn&amp;rsquo;t just come up with a truly worthy branch of the 3d Platformer lineage out the dome and nobody decided to iterate on it because it doesn&amp;rsquo;t immediately tranquilize you. If Mario is about jerking off, with all sorts of silly techniques you&amp;rsquo;ll never actually need to progress through any of the game, then Tomb Raider is a good fucking, not in the sense that it&amp;rsquo;s hard but because it just takes a little more thought and deliberation, more cooperation with the game, exploration, and the reward is so much greater even when the result is the same. the challenge is so much more layered, so much more systematic that even just the action of clearing a small gap becomes a source of intense satisfaction and anxiety. Tomb Raider does have its own share of masturbatory techniques, but they are so brazen in their uselessness you&amp;rsquo;d think it were deliberate commentary. Mario never prepared me for this, maybe it shouldn&amp;rsquo;t have. I&amp;rsquo;m getting tired of comparing the two. We&amp;rsquo;ve been doing it for 30 years. She&amp;rsquo;s out of his league.&lt;/p&gt;
&lt;p&gt;The traversal system in Tomb Raider uniquely creates a challenge out of obstacles that would be trivial to pass in any other game. Lara isn&amp;rsquo;t a bounding box with a gravity force but a truly physical agent that operates under believable rules, and visually, audibly struggles to navigate the world in a way that matches the player&amp;rsquo;s own contact with purposefully textural mechanics. the grid based system alleviates the guesswork of jumping in a novel way, while still remaining tricky to execute and satisfying to land a rapid, calculated sequence of maneuvers. you&amp;rsquo;ll find all sorts of interesting details in the system, like how landing from a jump without running or rolling out of it allows you to instantly jump again without anticipation—your knees are already bent. careful players might find out you can initiate the two-step running jump by taking a walking step before a running step, allowing skilled players to do so with a shorter approach. there&amp;rsquo;s a kind of maturity to the systems here that would never fly in modern industrial gamedev. the level design matches this careful attention to detail. they really pushed how natural you can make a grid of blocks appear, and they found every permutation they could of the arrangement of these blocks to form unique platforming challenges. not to mention all the little clever, efficient setpieces (including many surprises i won&amp;rsquo;t mention—best to experience them blind), like a waterfall section that has you tumbling back down the rapids at every mistake, or a drop into a huge underground reservoir with partially submerged statues, leaving you to dive uncomfortably deep to explore for goodies and exits before having to come all the way back up for air. did I mention the swimming is just as fleshed out and natural as the platforming?&lt;/p&gt;
&lt;p&gt;on the other hand I didn&amp;rsquo;t love the boring combat and how often you are required to engage with it. It really brings down the eerie vibes (and the vibes are just impeccable, I mean I love when a game relies on ambience instead of music and actually let me comment on just how good the sound design is in this game, which is very good, feels both intimate and spacious in a way that really sells every flavor of dank evil cave) of exploring an ancient, possibly supernatural, maybe even a smidge liminal sort of space when suddenly a door opens and unleashed is a band of rabid gorillas making oddly human sounds and you gotta just jump on the nearest platform they can&amp;rsquo;t climb and wail on the triggers for a while. The amount of wanton animal murder rouses some latent vegan part of me because holy shit does it feel bad to be forced to essentially execute dozens of helpless animals every ten minutes. I guess it is a form of ludonarrative harmony, though, that a ransacker of ancient human gravesites would take no issue in killing the way Lara does, and her superhuman precision in wiping out even the most distant targets with her double uzis implies she has had a lot of practice doing so. I understand why they put this in the game—she is sooooo hot and badass when she got her guns out—but it would be a lot more interesting if she could have used them more against smarter, more justifiable human targets, and as an added dimension to puzzles. The constant hostility of these animals feels for some reason like an echo of a greater theme, that Tomb Raider believes these dead exotic civilizations would have been so cruel and evil were they still around, that you, the hero, are well within your moral duty to kill everything and take all their shit. Just felt worth mentioning after the splash screen at the start that says &amp;ldquo;sorry the game is low key racist, thanks for buying it&amp;rdquo;. There is more generally an undercurrent of brutality to the game that lands between tastefully mature and flagrantly pornographic, made more suspicious in retrospect by the voyeuristic torture simulation aspect that the Tomb Raider franchise has become infamous for. the game matter of factly portrays Lara&amp;rsquo;s many modes of death in a way that reminds me of Rain World, except uncomfortably recontextualized by our avatar&amp;rsquo;s apparent design as a sex object foremost. the camera does not pan away but leers directly at the dead woman just as it would were she still alive, allowing the player to orbit and zoom on her corpse for a long time before selecting a savepoint to return to. prior to playing this game, my only preconceptions about Tomb Raider were of white painted ledges and pornogore snuff movies, just one of which I can dispel with confidence.&lt;/p&gt;
&lt;p&gt;Another elephant: &lt;a href="https://kayin.moe/why-play-a-remake"&gt;remasters are stupid&lt;/a&gt;. 
I would rather just play a nice port with gamepad support. art doesn&amp;rsquo;t really need to be fucked with, but I understand some people get really sad if they do not make a lot of money next quarter.&lt;/p&gt;
&lt;p&gt;Playing the Tomb Raider remasters with modern controls will absolutely rob you of the carefully crafted platforming challenges that literally define the whole game. the specific interplay of mechanics originally designed for the game are instrumental to the game&amp;rsquo;s pace and feel. modern is only a fix if you view gameplay as a problem. entire mechanics are removed, like the back step and multiple jumping techniques, and most platforming sections become repetitive and toothless. i&amp;rsquo;m not saying classic controls are better because they are harder. the problem is that modern controls essentially cut away half of the gameplay, leaving a corpse of a game obviously meant for a different set of systems. if you just don&amp;rsquo;t fuck with tank controls you&amp;rsquo;d be better off playing a different game. i mean this in the least judgmental way (i have quit games over far more petty quibbles ask me about it). there are other games that would suit you better than the travesty that is an amputated Tomb Raider. don&amp;rsquo;t waste your time.&lt;/p&gt;
&lt;p&gt;While I mostly stuck to classic graphics, I also took a peek at the new visuals here and there. it&amp;rsquo;s clear to me that not only did this game really not need a graphical overhaul, it seems they went out of their way to make it as shit and flat and ugly as they possibly could. I can&amp;rsquo;t lie and say the classic graphics are always easy to look at, but the game undeniably had an artful, deliberate goal with the severe, vibrant vertex lighting that got replaced with a ubiquitous gloomy haze and modern color grades draped lovelessly over strangely literal, realism-hopeful (ai-upscaled?) reinterpretations of the original environment textures, totally massacring the gestural impressionism of the source material. with the level geometry unchanged, it feels like an overly ambitious modpack. there are lots of choices made to make the game&amp;rsquo;s environments seem more realistic when the dreamlike quality of the original levels ironically felt more immersive. They completely missed the strange appeal of a game where you never see the sky, choosing to add skylights where they never were before. I really don&amp;rsquo;t understand what they were going for. It&amp;rsquo;s clearly the worst genre of graphical update a game could receive, and one of the most heinous executions of that genre I have ever seen. You can find more tasteful texture mods for Minecraft. And don&amp;rsquo;t get me started on what they did to Lara Croft. the very 90s bombshell femme fatale thing she had going on was certainly not a groundbreaking feminist statement by any means but at least it was more interesting than the sex doll we got in the remastered graphics, doubtlessly created for aging millennials who grew up yearning to merely fuck this psycho queen, a recreation of their wistful memory of the Sex Object instead of the reality that she is a Kill Person, about whom one more correctly should feel an ocean of fear and a droplet of sadistic arousal when she gets torn to pieces by panthers or impaled in suspiciously overbloody spike pits—SORRY! don&amp;rsquo;t blame the messenger, the designers just put all that stuff in the game themselves.&lt;/p&gt;</description><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/reviews/tomb-raider-2024</guid></item><item><title>public statement to all ice employees</title><link>https://ivysly.com/blog/ice</link><description>&lt;div style="font-size: clamp(3em, 10vw, 8em); font-weight: bold; line-height 1.1;"&gt;KILL YOURSELF&lt;/div&gt;</description><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/ice</guid></item><item><title>Scientology</title><link>https://ivysly.com/dream/scientology</link><description>&lt;p&gt;We were at an indoor Scientologist theme park of sorts, very 90s. Verdict was that they were not terrible at designing rides and games. They had this &amp;ldquo;key&amp;rdquo; system where you&amp;rsquo;d earn these strange items by completing rides and learning scientology related lessons. they snuck these keys into real video games (one I remember was Myst) and they had their own little motif that played when you found one. they weren&amp;rsquo;t really keys but a sort of oblong red polyhedron with a golden wireframe shape extruding from the long end, like an abstract key already stuck in a lock.&lt;/p&gt;
&lt;p&gt;One of the rides near the beginning (which to us was the end, as we went backward through the park) was the &amp;ldquo;gay straight bar&amp;rdquo;. it was like a caged  carousel with a bar in the center. they had an advertisement playing, with shitty 90s advertisement hip hop, and it explained the ride. the song went &amp;ldquo;gay bar!&amp;rdquo; and the riders booed. then it went &amp;ldquo;straight bar!&amp;rdquo; and the riders cheered, followed by a repeating &amp;ldquo;gay bar straight bar gay bar straight bar &amp;hellip;&amp;rdquo; as the ride sped up the bargoers all stood up and held hands. it struck me as unusually progressive for a 90s theme park ride to address such topics&lt;/p&gt;</description><pubDate>Sun, 04 Jan 2026 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/scientology</guid></item><item><title>solo gamedev with lisp</title><link>https://ivysly.com/blog/sologamedev-with-lisp</link><description>&lt;p&gt;this last month or so i have been using the &lt;a href="https://fennel-lang.org/"&gt;Fennel programming language&lt;/a&gt;, a Lisp dialect that transpiles to Lua. if you want the quick pitch: it&amp;rsquo;s a fast, imperative-oriented Lisp with macros that i think is perfectly suited to solo indie gamedev. i love it for all the reasons &lt;a href="../blog/daydreaming-with-lua"&gt;i love Lua&lt;/a&gt; and more.&lt;/p&gt;
&lt;p&gt;i had been interested in using a Lisp for some time—actually, had i the option, i would have probably picked a hypothetical LuaJIT With Macros first—but it always felt like there were hurdles and gotchas that prevented me from using it productively in game development. first is that the ecosystem is obviously pretty tiny for many Lisps. tooling, build systems and libraries can be a bit DIY, especially if you are not using Emacs (i might give it another go, now). Fennel circumvents much of this by just being Lua. &lt;a href="https://marketplace.visualstudio.com/items?itemName=JarodWright.strict-paredit-fennel"&gt;paredit&lt;/a&gt; + &lt;a href="https://marketplace.visualstudio.com/items?itemName=eduarddyckman.vscode-parinfer"&gt;parinfer&lt;/a&gt; with VS Code does the job of removing the parentheses pain well enough. this is the lesser issue. the bigger barrier is that Lisps are generally regarded as being on the functional side of programming languages, which, in the gamedev universe, means unknown, treacherous waters. games are highly stateful, highly imperative systems. it can be onerous trying to squeeze the slippery shape of a game into &lt;a href="https://prog21.dadgum.com/23.html"&gt;the result of a pure function&lt;/a&gt;. not to say that functional techniques have no place in gamedev, just that i find it difficult to apply them at the structural level. while some people are happy to take on such a challenge, i feel it is more practical for me to work in a perspective i&amp;rsquo;m familiar with. Fennel just so happens to feel exactly like Lua with a different syntax, because it is. i&amp;rsquo;m essentially doing the same things i was doing before, with a few trade-offs. this led me to a breakthrough: Lisp doesn&amp;rsquo;t have to be anything. there are very few limits on what they &lt;em&gt;can&lt;/em&gt; be. a Lisp has become in my mind solely defined as a direct representation of an AST made of &lt;a href="https://igor.io/2012/12/06/sexpr"&gt;s-expressions&lt;/a&gt;. you&amp;rsquo;ve probably seen s-expressions before. they&amp;rsquo;re just hiding in JSONs and &lt;a href="https://defmacro.org/ramblings/lisp.html"&gt;XMLs&lt;/a&gt;. you can write a Lisp with all the features of another language. it doesn&amp;rsquo;t even need to have a linked list data structure (Fennel&amp;rsquo;s lists only exist at compile time—even then, you spend most of your time just interfacing with Lua tables, with lists themselves in fact just being tables with some metadata). any other preconceptions you have about Lisp, you can safely let them go. &lt;a href="https://srfi.schemers.org/srfi-49/srfi-49.html"&gt;Lisps don&amp;rsquo;t even need to have parentheses&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Fennel is not really at all a pure-functional or declarative language. due to the severe restriction of being a zero-overhead Lua transpiler, the Fennel language doesn&amp;rsquo;t even ship with any of its own functions. what it does have is access to all of Lua&amp;rsquo;s built-in functions and table operations, many of which are good old imperative, stateful operations. you very well &lt;em&gt;could&lt;/em&gt; turn Fennel into a pure, declarative language, or you could do something completely different. that&amp;rsquo;s because Fennel (and Lisp) isn&amp;rsquo;t really anything at all but a syntax. it doesn&amp;rsquo;t have to be anything until you make it something, and you are given carte blanche to do so with macros.&lt;/p&gt;
&lt;p&gt;with macros, a Lisp essentially becomes an extension of the programmer&amp;rsquo;s mental model of the program. it&amp;rsquo;s amazing how simple it is. you should probably exercise more prudence in teams, but as a solo developer, it&amp;rsquo;s pretty amazing to be able to freely add my own natural-language constructs to the language with no runtime overhead. for example, one of the most common mathematical operations i tend to do in game dev is dividing things by two. &lt;code&gt;somevar / 2&lt;/code&gt; shows up hundreds or thousands of times in my typical code bases. in Fennel (and most other Lisps), it&amp;rsquo;s dead simple to introduce a macro &lt;code&gt;(half somevar)&lt;/code&gt; that compiles to the same thing, both reducing symbol noise and increasing clarity of intent. there&amp;rsquo;s no function call overhead, so the only reason not to use it is when semantically it wouldn&amp;rsquo;t make sense. this i think is an incredible feature for idiosyncratic solo devs like me, because while you might make your code &lt;a href="https://marktarver.com/bipolar.html"&gt;unreadable for anyone but you&lt;/a&gt;, it can become highly readable &lt;em&gt;for you&lt;/em&gt;, and even more so quickly writeable. again, a Lisp can be &lt;em&gt;anything&lt;/em&gt;. this means it can be exactly what you want out of a programming language, with technically no concessions except that you might have to put in the work to get it there (there is a reason most DSLs written in Lisp tend to look a lot like Lisp).&lt;/p&gt;
&lt;p&gt;Fennel and &lt;a href="https://love2d.org/"&gt;LÖVE&lt;/a&gt; go very well together. i have found that plugging into my existing codebase was very easy. even getting an in-game REPL going only took a few minutes, and already i can sense the crazy amount of power it gives me to tweak things on the fly. and since it&amp;rsquo;s just Lua, it might be one of the faster Lisps when JITted with a great incremental garbage collector, very well suited to gamedev. being a solo dev, for me, means writing stuff quickly without spending too much time on tedious bookkeeping and careful structuring one might need to do in a larger team. for the lone gamedev, i think a controlled amount of yolo-coding is how you get shit made. this is a huge strength of Lisp.&lt;/p&gt;
&lt;p&gt;one funny problem with the switch from Lua is that now my engine uses three naming conventions; camelCase for the &lt;code&gt;love&lt;/code&gt; namespace, snake_case for my own preferred identifier style in Lua, and now kebab-case for all the symbols in Lisp. things can get pretty hairy when writing code that interfaces with all of these. nothing i can&amp;rsquo;t fix by rewriting my whole engine in Fennel of course.&lt;/p&gt;
&lt;p&gt;another small pain point is the notation for arithmetic. it&amp;rsquo;s just not as intuitive to read &lt;code&gt;a * b + c + d - e - f&lt;/code&gt; in the prefix notated form &lt;code&gt;(+ (* a b) c (- d e f))&lt;/code&gt;, but i suspect it could eventually end up being just about so, and i&amp;rsquo;m already developing adequate proficiency anyway. disregarding Lisp for this reason feels about as arbitrary and nitpicky as dismissing Lua for starting array indices at 1. you get used to it.&lt;/p&gt;
&lt;p&gt;as of writing i have only one completed project in Fennel. i just released a &lt;a href="../games/fishbone"&gt;jam game&lt;/a&gt; i made largely with Fennel, plugged in to my Lua LÖVE engine. i suspect my opinion will change in various ways as i continue to use it.&lt;/p&gt;
&lt;p&gt;anyway with my main theses out of the way i am excited to just jabber more about the ridiculous utility of macros. the real pervert crap. it&amp;rsquo;s often the case that you want to repeat the same complicated logic on multiple values across multiple lines, but introducing a lambda (in Lua, at least) may add an unacceptable performance overhead, and putting it somewhere else in the program restricts its utility as a closure. on the contrary, inline macros let you capture the context like a closure and duplicate logic without polluting your code with a bunch of repeated procedures (which could easily break should you forget to update all of them when you need to change it), with none of the overhead of creating and calling an actual function. as a very minimal example, imagine this naive code, in the input handling function for the player somewhere:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;up&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;- &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;down&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;left&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;- &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;right&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;in this example, it would be overkill to introduce a local function to simplify the logic, and is currently a lot of noise to repeat the logic for each direction. a macro can combine the best of both options while making the important logic much more clear. plus it keeps all relevant code in the same place without you needing to search for another function that exists somewhere else. it does all this with no runtime overhead, as the following snippet compiles to code roughly equivalent to the previous block:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;macro &lt;/span&gt;&lt;span class="nv"&gt;player-input-move!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;do &lt;/span&gt;,&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;unpack&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;fcollect&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;select &lt;/span&gt;&lt;span class="nv"&gt;:&lt;/span&gt;&lt;span class="k"&gt;# &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;let &lt;/span&gt;&lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;dirx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;diry&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;select &lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;...&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;,&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;,&lt;span class="nv"&gt;dirx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;,&lt;span class="nv"&gt;diry&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;))))))))&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;player-input-move!&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;up&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;down&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;left&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;right&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;this compiles to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;do&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;up&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;down&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;left&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;-1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;input-held?&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;quot;right&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;move-player!&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;speed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;the only meaningful difference being a few extra (cheap) multiplications, which could easily be refactored out as needed. i&amp;rsquo;d bet money that LuaJIT ignores multiplications by zero literal on hot loops anyway. when performance isn&amp;rsquo;t a concern, it usually will be cleaner to simply write a function, of course, but game dev performance is often death by a thousand cuts, with lots and lots of little inefficiencies that pile up. macros in Fennel allow you to define behavior &lt;em&gt;anywhere&lt;/em&gt; free of risk.&lt;/p&gt;
&lt;p&gt;you can get a lot more complicated than this too. i wrote DSLs for defining object classes and state machines. the latter only took an afternoon. I&amp;rsquo;ll leave you with what i am calling the &lt;a href="https://bsky.app/profile/ivysly.com/post/3m7jtgmthek2c"&gt;brohoof operator&lt;/a&gt;: a macro that divides two values in the opposite order they are passed:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;(macro \ [lhs rhs]
  `(/ ,rhs ,lhs))

(\ 2 1)
&amp;gt;&amp;gt; 0.5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/sologamedev-with-lisp</guid></item><item><title>The Astonishing Adventures Of Finspector Eelliott Fishbone: Eel Detective Part 6: TRAPPED On Planet Big Burger!</title><link>https://ivysly.com/games/fishbone</link><description>&lt;p&gt;puzzle platformer jamgame for sewerjam 8 and &lt;a href="../blog/sologamedev-with-lisp"&gt;my first game using the Fennel programming language&lt;/a&gt;. i made this with &lt;a href="https://bsky.app/profile/did:plc:f26vfk2xbdsdq6et5fdlmfcp"&gt;takumatori&lt;/a&gt; who did all the art. i didn&amp;rsquo;t get to finish it :(&lt;/p&gt;
&lt;p&gt;the game saves your progress, so if you get stuck, you can hit escape/start and then press the continue button to restart the level. i am aware of at least one point in the game where you can get stuck&lt;/p&gt;
&lt;p&gt;controls are arrow keys&lt;/p&gt;</description><pubDate>Sun, 14 Dec 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/games/fishbone</guid></item><item><title>Copy Kitty</title><link>https://ivysly.com/reviews/copy-kitty</link><description>&lt;p&gt;Preliminary warning: If you play this game, it is crucial you switch to the &amp;ldquo;advanced&amp;rdquo; input mode. It&amp;rsquo;s not really any more difficult. The default settings are really, really bad.&lt;/p&gt;
&lt;p&gt;Copy Kitty triggers a feeling of familial recognition I last had while playing Rabi-Ribi: these people, too, are perverts. But while Rabi-Ribi was a sort of uneven work with a voyeuristic perversion that worked against its themes and mechanics, Copy Kitty makes no pretense about gratuitously, ubiquitously indulging its own age-regressive power fantasy. It is not so often you get such direct passage into the squishy, gooey, plushy heart of a game&amp;rsquo;s author and it is especially less often that you get to pilot it yourself to such decadent heights.
This game really does feel like a little kid designed it, if a little kid could be born with a mastery of gameplay programming and technical art, plus drawings good enough that you could hang them up on the fridge without embarrassment. It&amp;rsquo;s the kind of game a little kid might pray every day to be brought to existence in the magical way you think games work when you&amp;rsquo;re young, a naive ideal game form that, in reality, is just a little too idealistic, only communicable in a breathless chain of &amp;ldquo;and then&amp;rdquo;s. And then you combine the lightning and the explosions to make lightning explosions, and then you set the lightning explosions on fire, and then you blow up the terrain and it flies everywhere in big flaming chunks, and then you fight a giant robot and then when you beat the giant robot you get in the giant robot and then fight another giant robot, etc, and then a wise and weathered adult like you or me would say, yes sweetheart that would be delightful wouldn&amp;rsquo;t it, and then the little kid grows up to actually make that game real.&lt;/p&gt;</description><pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/reviews/copy-kitty</guid></item><item><title>Downtown</title><link>https://ivysly.com/dream/downtown</link><description>&lt;p&gt;I&amp;rsquo;m downtown, and the military is here. a woman is doing bag checks on the side walk. I walk the other way.  army men in tanks are driving down the street. there&amp;rsquo;s a staircase up to the market, I take it. one of them stop me and do a pat down. they ask to look in my mouth, and find some plastic shit I&amp;rsquo;m anxiously chewing on. this confounds them and they consider if I&amp;rsquo;m on drugs, but ultimately let me go.&lt;/p&gt;</description><pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/downtown</guid></item><item><title>Bag</title><link>https://ivysly.com/dream/bag</link><description>&lt;p&gt;we accidentally put a plastic bag full of food over Dennis&amp;rsquo; nose and mouth and leave it there for hours. he seems fine, but when I take it off he telepathically communicates to me that it was the most painful thing he has ever experienced&lt;/p&gt;</description><pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/bag</guid></item><item><title>Ducklings</title><link>https://ivysly.com/dream/ducklings</link><description>&lt;p&gt;It&amp;rsquo;s a really cold night so I go out to check on the ducklings. They have blankets on top of their brooder plates and for some reason multi colored fairy lights are all around their enclosure. I notice one of the brooder plates fell off after Betty shows me and quacks.&lt;/p&gt;</description><pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/ducklings</guid></item><item><title>Evil Egg</title><link>https://ivysly.com/games/evil-egg</link><description>&lt;p&gt;Evil Egg was an ecstatic twin-stick nightmare known for its brutal shooting action and intense audiovisual effects. Infinite horrors tear apart a world of little green men, the only hope an errant hatchling.&lt;/p&gt;
&lt;p&gt;The last known Evil Egg arcade cabinet to remain was recovered in Eugene, Oregon, found in a state of extreme disrepair. This digital release is a faithful emulation of the original hardware, made possible by a restoration effort led by a small team of dedicated preservationists. The private collector responsible for the machine&amp;rsquo;s donation has asked to remain anonymous.&lt;/p&gt;
&lt;p&gt;Features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CLASSIC, FULLY ANALOG TWIN-STICK BLASTING  &lt;/li&gt;
&lt;li&gt;UNIQUE ASSORTMENT OF ENEMIES, HAZARDS, POWERUPS AND ARTEFACTS  &lt;/li&gt;
&lt;li&gt;INFINITE LEVELS IF YOU CAN REACH THEM - AND A WAY TO END IT FOR GOOD&lt;/li&gt;
&lt;li&gt;SCORE SYSTEM REWARDING SKILL AND FUN  &lt;/li&gt;
&lt;li&gt;ONLINE LEADERBOARDS&lt;/li&gt;
&lt;li&gt;LOOKS LIKE CANDY  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PHOTOSENSITIVITY WARNING: This game contains flashing lights and intense strobe effects.&lt;/strong&gt;&lt;/p&gt;</description><pubDate>Thu, 30 Oct 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/games/evil-egg</guid></item><item><title>there is no grass to touch anymore</title><link>https://ivysly.com/blog/there-is-no-grass-to-touch-anymore</link><description>&lt;p&gt;&amp;ldquo;Disneyland exists in order to hide that it is the &amp;lsquo;real&amp;rsquo; country, all of &amp;lsquo;real&amp;rsquo; America that is Disneyland.&amp;rdquo;
–some asshole&lt;/p&gt;
&lt;p&gt;every day i go on a walk because my gf calls me fat if i don&amp;rsquo;t and it makes me feel bad so i do it. when i go outside for my daily shame walk i think about how there hasn&amp;rsquo;t been a time in my life longer than a week or two where I haven&amp;rsquo;t heard the sound of cars, haven&amp;rsquo;t seen a billboard, haven&amp;rsquo;t looked upon all the asphalt and concrete and wondered what the world looked like before we paved it all into stupid shitty roads and sidewalks.&lt;/p&gt;
&lt;p&gt;recently a bluesky post reminded me of something said by Shigeru Miyamoto in an interview:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;If it&amp;rsquo;s really nice outside, you should go play outside. And I tell that to people who want to be game designers as well, you know? If it&amp;rsquo;s a nice day, you know, go experience outside, because really, I think there&amp;rsquo;s an important factor that it&amp;rsquo;s your personal experience.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;and wow I bet that shit is so useful if you grew up in the Kyoto countryside 70 years ago but I think I speak for the rest of us when I say please keep your advice to yourself dumbass! there is no outside anymore. in a physical sense it is true I can drive to the river or the mountain (and truly my neck of the woods is in no way starving for natural features) but there is no longer any way to spend time in these places in good faith. how can I just go outside and &lt;em&gt;play&lt;/em&gt;? have you seen the &lt;em&gt;news&lt;/em&gt;? have you seen what people are doing to each other? outside is fake now. you go outside to pretend you aren&amp;rsquo;t still online in your heart. &lt;/p&gt;
&lt;p&gt;games are an escape from reality as much as prison is an escape from civilization. game design is about creating the most comfortable cell. maybe the most ethically designed game would offend so thoroughly the sensibilities of its gamer that he or she would wake up and finally, fully understand their physical and spiritual carceration and escape into the dinosaur world&lt;/p&gt;</description><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/there-is-no-grass-to-touch-anymore</guid></item><item><title>Redwoods</title><link>https://ivysly.com/dream/redwoods</link><description>&lt;p&gt;We&amp;rsquo;re in Northern California, at the redwoods. I&amp;rsquo;m with my friend who is a Japanese salaryman on vacation. We&amp;rsquo;re on a dirt road surrounded by massive beautiful sequoias. Nearby is the largest monster truck ramp in the world. My friend suggests we jump it, but I think we should start with a smaller ramp.&lt;/p&gt;
&lt;p&gt;At a hardware store. It&amp;rsquo;s just me and my friend. I see something that interests me, a sort of bent glass tube behind a display case, and I press the button to summon an employee. An older man walks over in a dirty grey shirt, baseball cap and denim shorts. he asks if I want the item, but I changed my mind and say I only accidentally pressed the button. as I walk away, my friend presses it too. the employee walks to him, and his head twists all the way around, and a different face on the back of his head talks to him in japanese. I look to a hallway and see another person has entered, an overweight woman dressed like an Egyptian pharaoh. her fingers are bent in an impossible shape, like the claws of a bird or the body of a spider, but perfectly round such that they could cradle an apple in their resting position. I get the impression these people are human mascots.&lt;/p&gt;</description><pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/redwoods</guid></item><item><title>on juice</title><link>https://ivysly.com/blog/on-juice</link><description>&lt;p&gt;put screenshake in your game. screenshake is the secret to a game that &lt;em&gt;feels good&lt;/em&gt;. if you don&amp;rsquo;t put it in your game, your game may not &lt;em&gt;feel good&lt;/em&gt;. the purpose of a game is to &lt;em&gt;feel good&lt;/em&gt;. we have perfected the formula to making a game &lt;em&gt;feel good&lt;/em&gt;. if you follow this formula your game will &lt;em&gt;feel good&lt;/em&gt; and thus it will be good. &lt;/p&gt;
&lt;p&gt;video games are just interfaces for sensation. we have extracted sweet sensation from pesky semantics. there&amp;rsquo;s no more need for intention. screen shake no longer has to convey &lt;em&gt;impact&lt;/em&gt;. it doesn&amp;rsquo;t need to convey anything. just do whatever you want. we are currently developing a game that is nothing but shaking and squishing and sloshing. baddies flash white when you swat them but also the goodies and everything else even if you don&amp;rsquo;t swat them. particle effects. stop thinking about it and start feeling about it. we are looking into haptic ecstacy.&lt;/p&gt;
&lt;p&gt;making a game is the real game. you need snapping and fizzing and swishing and zapping. i don&amp;rsquo;t care where you put it. put it anywhere. it&amp;rsquo;s a fucking &lt;em&gt;video game&lt;/em&gt;. did you know that in 2024 the games industry alone pulled in $184 billion dollars? why would you waste your time thinking when there is money to be made? look at all the other games around you: they are squishy and huggy and cozy and every time you do anything the game rewards you with an outpouring of sickeningly sweet &lt;em&gt;juice&lt;/em&gt;. your game needs to be sexual, it needs to simulate orgasm, and you need kids to buy it. what the fuck else are you making these for?&lt;/p&gt;</description><pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/on-juice</guid></item><item><title>Rain World</title><link>https://ivysly.com/reviews/rain-world</link><description>&lt;p&gt;Uugghhhhh it&amp;rsquo;s so good. Really masterfully designed in how it gets you exploring both the environments and game mechanics, though it can be cryptic to its own detriment. The non-player-creatures stand out as highly believable, unsettlingly real animals that act in unpredictable but natural ways. it&amp;rsquo;s also hard to fathom how such a small team could achieve such heights in visual (gorgeous, semi-procedural environment art) and audio (truly creepy and strange creature noises and tasteful, huge ambient soundscapes that are admittedly a little hampered by the sort of forgettable soundtrack—i think a stronger choice would have been no music at all with a different method of conveying that you are e.g. about to be eaten by some kind of juiced up crocodile) design. I really was not prepared for the atmosphere of this game. it&amp;rsquo;s really a treat.&lt;/p&gt;
&lt;p&gt;Rain World knows that it is a simple game. you are not rewarded for exploration with a double jump or bigger muscles to throw rocks harder but with cool new places encrusted with cool new layers of cool new types of crust, and with cool weird new organisms that make you squirm with disgust(ed delight). Getting eaten by something new in a new, exotic, concrete bolgia is its own reward. Rain World is not a horror game but it is scary in the way that real life is scary. anything can happen and you don&amp;rsquo;t know what will until it does. even then, you can only prepare for what you know has happened before. Rain World is not above surprising you with a new type of dying. it&amp;rsquo;s bold but it works because it knows what it wants to be and how all its constituent parts should be in order to meet that goal.&lt;/p&gt;
&lt;p&gt;the major problem with Rain World is just that it can be very hard to tell what you are really supposed to do or where to go, and the game doesn&amp;rsquo;t really account for this much. the slow pace of the platforming and level layouts can make experimentation annoying, especially while trying to avoid death by random predator or just flopping off a cliff. it&amp;rsquo;s difficult to remember how to get around, even with the map, which has been purposefully restricted in utility. maybe I am a new school gamer, but any time i need to whip out the pencil and paper to remember which areas link where (which I have got very close to doing, I still don&amp;rsquo;t fucken remember how to get to half the map) I think as a designer you have failed unless the integrity of the game is built around that, and I still probably wouldn&amp;rsquo;t play even Wizardry without an automap. I understand the intention of mystery and letting the player discover things, but I think some of the discoveries in Rain World are more frustrating than satisfying (I could have done X the whole time?).&lt;/p&gt;
&lt;p&gt;I happily recommend Rain World but please know that you are looking at a very specific type of game that can be frustrating to some people. It feels in some sense like a game for game developers. I just wanna take it apart and look at its insides, and those of the people who made it.&lt;/p&gt;</description><pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/reviews/rain-world</guid></item><item><title>on scope creep</title><link>https://ivysly.com/blog/on-scope-creep</link><description>&lt;p&gt;two game studios behind two highly anticipated games announced those games&amp;rsquo; cancellations within the last couple weeks, those being indie studio Tendershoot&amp;rsquo;s Dreamsettler, the ambitious sequel to interactive fiction/internet simulator masterpiece Hypnospace Outlaw, and Riot-funded Hypixel&amp;rsquo;s Hytale, a Minecraftlike that was in development for over &lt;em&gt;seven years&lt;/em&gt;. the major problem both of these studios cited was unchecked ambition (a desire to make the &lt;em&gt;best game ever&lt;/em&gt;) and thus building these giant, untenable concepts and systems that ultimately demanded too much from the people working on them. the Vision can be so intoxicating it destroys any chance of a person actually making it real.&lt;/p&gt;
&lt;p&gt;I want to give an extended answer to this question my friend asked me:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;do you get scope creep feelings? how do you process them if so?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;to quickly outline the term: scope creep is a process by which the hugeness of a project grows and grows out of control, until it is no longer workable, as the people on the project are repeatedly struck with an insidious brainworm: &amp;ldquo;the project would be way cooler if we just added this one thing&amp;hellip;&amp;rdquo;. eventually the project becomes a clusterfuck of mostly cool new things that suffocate a now unrecognizable Core Vision, and often it is never finished. this has happened to you.&lt;/p&gt;
&lt;p&gt;this blog post makes a lot of assumptions. one is that you are or you know a game developer or some kind of artist or craftsman or architect who works in a medium that requires a lot of time and effort to produce a single finished work, and you do care that these works generally get finished and maybe even shared with the world. if you&amp;rsquo;re someone who is cool with taking your time, not worried about the finished product, and just making yourself happy adding a bunch of little things to a big thing, keep doing that. ignore any advice you know doesn&amp;rsquo;t apply to you.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;do you get scope creep feelings?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I get scope creep feelings. I deal with them all the time, for every project. I don&amp;rsquo;t think they are avoidable. obviously we all want to make the best game ever. but the game in your head will never exist, so you have to compromise with reality.&lt;/p&gt;
&lt;p&gt;there&amp;rsquo;s always stuff that gets cut in the idea stage, stuff I&amp;rsquo;ll rip out of a game fully finished, and, in-between, a whole spectrum of scaling back cool ideas that are unjustified uses of time and effort, time and effort which could be better spent realizing the Core Vision.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;how do you process them if so?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;most games are about killing dudes. Given the right context, killing dudes is very cathartic. why shouldn&amp;rsquo;t that be true for killing ideas, assets, code, features, etc? &lt;/p&gt;
&lt;p&gt;throwing things out doesn&amp;rsquo;t have to be a bad thing. it&amp;rsquo;s a part of life. when I started learning in adulthood how to cook, I threw tons of food away. maybe because i made something inedible, or i bought too much and it went bad. over time I began to develop a positive relationship with throwing food away, because it meant I was cooking.&lt;/p&gt;
&lt;p&gt;after a short period of grieving the cool new thing I won&amp;rsquo;t be using in a game anymore, I find it easy to focus on the positives. there are plenty of advantages to cutting out a feature in a game. the most obvious and practical thing is that you reduce the workload for yourself. lower workload means you can spend more time on the stuff that really matters. consider all the loads of clusterfuck games that &lt;em&gt;did&lt;/em&gt; release and still suck because they couldn&amp;rsquo;t reign it in and focus on the Core Vision.&lt;/p&gt;
&lt;p&gt;I have developed this mindset over years and years of fatally overscoping. I started programming in 2015 with the goal of making games. each project was ridiculous. one of my first projects wanted to be similar to Cataclysm DDA. a 2018 project was supposed to be a Smash Bros—like. there are so many examples like this. I didn&amp;rsquo;t finish &lt;em&gt;my first game&lt;/em&gt; until 2021 (six years of nothing!!!) when I began working with &lt;a href="https://www.lexaloffle.com/pico-8.php"&gt;PICO-8&lt;/a&gt;, a game development environment that intentionally imposes &lt;em&gt;very&lt;/em&gt; strict limitations on the developer, and it forced me to keep my scope reasonable. I finished &lt;a href="https://ivysly.com/games/grippy"&gt;that game&lt;/a&gt; in about a month.&lt;/p&gt;
&lt;p&gt;some people feel like their time is wasted when they reach a dead end and they have to backtrack, that it is a negative outcome to be avoided. many are led to a scarily prevalent sunk-cost feeling and grow attached to bad ideas just because they fear scaling back so much. I just don&amp;rsquo;t think this is right. &lt;em&gt;backward progress is still progress&lt;/em&gt;. it&amp;rsquo;s surely not as efficient as realizing your vision of the game perfectly from start to finish, but nobody can actually do that. realizing you&amp;rsquo;ve scope crept and scaling it back is a natural part of working on a complex system. it is just a thick branch in a tree of mistakes—you don&amp;rsquo;t keep a wrong algorithm in your code, you take it out and replace it with something else or nothing at all. you don&amp;rsquo;t leave in typos.&lt;/p&gt;
&lt;p&gt;when scope creep happens you just have to focus on what you can get out it. what assets can you reuse? what ideas can you extract? if nothing else, what did you learn? I don&amp;rsquo;t remember a time when the answer to all these questions was &amp;ldquo;nothing&amp;rdquo;, so I posit that it&amp;rsquo;s never truly a waste. the Hytale developers will move on having if nothing else learned a very important lesson.&lt;/p&gt;
&lt;p&gt;It is important to note that I&amp;rsquo;m not against adding easter eggs and fun stuff just because. that&amp;rsquo;s what games are made of. I just think a game designer can benefit from weighing the time and effort cost of adding (or keeping) a feature with the amount of substance it adds to the game, how much it helps to complement and complete the Vision.&lt;/p&gt;
&lt;h2&gt;the process&lt;/h2&gt;
&lt;p&gt;recently I posted this to bsky:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://bsky.app/profile/ivysly.com/post/3lrgs4kpkms2e"&gt;&amp;gt; I see good indie devs burn themselves out on huge projects and suddenly come out of hiatus with a little game that is way better and more focused than their prison opus and every time I want to scream: just do those games&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I followed up with: &lt;/p&gt;
&lt;p&gt;&lt;a href="https://bsky.app/profile/ivysly.com/post/3lrgu4en5c22l"&gt;&amp;gt; don&amp;rsquo;t make a big game until for you it&amp;rsquo;s a small game&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and I want to elaborate a little bit.&lt;/p&gt;
&lt;p&gt;first off, I think if you know what you want to do, you should do that. if you are willing to do what it takes, and you can afford to do it, then you should make the ambitious game of your dreams. I&amp;rsquo;m only asking people to consider what they want, if they haven&amp;rsquo;t already, and if they are willing to really work for it, and if they really know that they truly are willing, and so on. but I know I don&amp;rsquo;t really need to say that to them, because the people who know what they want don&amp;rsquo;t need me to tell them what they want. that leaves the rest of you suckers. especially those devs in question burning themselves out on big games—I only want to suggest an alternative that can be just as fun and much lower stakes. I have outlined a 2 step process:&lt;/p&gt;
&lt;p&gt;step 1. when you are deciding on a game concept, it can be difficult to know how big of a game you can make. I have a radical solution: look way, WAY smaller than you think you need to. unless you are an absolute newbie, there is definitely &lt;em&gt;something&lt;/em&gt; you know you &lt;em&gt;can&lt;/em&gt; make without question. maybe that&amp;rsquo;s pong, or even breakout. something of which you can envision the entire structure before starting any work. 100% confidence only. make that thing. if you are an absolute newbie, or you otherwise don&amp;rsquo;t have 100% confidence in pong, skip to step 2.&lt;/p&gt;
&lt;p&gt;step 2. when you are done making that thing, it&amp;rsquo;s time to do something completely antithetical to this blog post so far: start up a project with a big vague idea, experiment, add whatever you want without any thought to maintainability or even finishing the game. if you are the aforementioned absolute newbie, this is where you make pong instead. you (probably) will not finish the game, but I think this is the best way to safely push yourself without heartbreak. it will give you an idea of what you are capable of, so when you return to step 1, you will notice that you are able to envision a slightly bigger &lt;em&gt;entire game&lt;/em&gt; than you were last time. maybe substantially bigger. that&amp;rsquo;s it. return to step 1.&lt;/p&gt;
&lt;p&gt;this is the process I have come up with &lt;em&gt;accidentally&lt;/em&gt; over the last few years. accidentally because step 2 was always supposed to be step 1. it was always a feeling of, &amp;ldquo;okay, enough with these little projects, I&amp;rsquo;m going to make my opus, my Real Game. this time I can really do it.&amp;rdquo; then I noodle around for months and drop the thing because either it&amp;rsquo;s just too hard to implement the big ideas by myself or I just don&amp;rsquo;t have a cohesive enough idea to hold together such a big scope. subsequently, when I go back to making small games, I realize that the biggest game I&amp;rsquo;m 100% confident in making just got a little bigger.&lt;/p&gt;
&lt;p&gt;I have been, entirely by mistake, employing what I now believe to be a highly effective strategy for self-learning and improving my skills, and maybe even for eventually getting to making that big game my kid self always wanted to make. I present it, modified to reduce suffering, for anyone to try.&lt;/p&gt;
&lt;h2&gt;ethics of the opus&lt;/h2&gt;
&lt;p&gt;something i feel is important and kind of overlooked is that games take a really long time to make, when compared to most other forms of art. the barrier to entry is already really high. a 3 month timeline is on the low end for a finished game, outside of time-constrained game jam challenges which don&amp;rsquo;t really work as a real development strategy for &amp;ldquo;full size&amp;rdquo; games. I estimate most indie devs working on long term (non-gamejam/tutorial) projects are spending about a year or two. imagine if it took that long to write a single song, or paint a single picture. we are at a disadvantage in that way to composers or painters, because we only get so many two-year periods we can make games before we die or otherwise lose the ability. I suggest that it is inhumane to expect each other to meet a standard like that. life is very short for a game developer. we have to be much more picky about how we spend our time than a painter or a songwriter. we have much fewer chances to find our voices. this is, I think, maybe the most important reason for one to consider making smaller games.&lt;/p&gt;
&lt;p&gt;bottom line: check out PICO-8&lt;/p&gt;</description><pubDate>Sat, 28 Jun 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/on-scope-creep</guid></item><item><title>Evil Egg</title><link>https://ivysly.com/blog/evil-egg</link><description>&lt;p&gt;Evil Egg naked prostrating on the cold tile as the tub spout pours crashing into the open drain like a waterfall.&lt;/p&gt;
&lt;p&gt;Evil Egg eating to quell the nausea of overfullness and starving on dandelion green.&lt;/p&gt;
&lt;p&gt;Evil Egg knowing comfort under the flat white light of the aisle and checking out. Evil Egg decorating a martyr.&lt;/p&gt;
&lt;p&gt;Evil Egg sleeping as the warm rain blankets her in the wide dark.&lt;/p&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="/games/evil-egg"&gt; &lt;img src="/images/evileggblog3.png" alt="evil egg"&gt; &lt;/a&gt;
&lt;/div&gt;</description><pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/blog/evil-egg</guid></item><item><title>Barn</title><link>https://ivysly.com/dream/barn</link><description>&lt;p&gt;I&amp;rsquo;m in a barn&amp;hellip; it&amp;rsquo;s dark. all I remember about this part.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m in a car as a passenger, on the highway. in front of me is another car, and a famous actor is getting it on with a woman in the back seat. the person I&amp;rsquo;m with sees this and is consumed by jealousy, as she thought they had something special.&lt;/p&gt;
&lt;p&gt;I sat down to watch an old movie from my childhood (something like the wizard of oz though I don&amp;rsquo;t think it was that, nor any real movie) and the moment it started playing I began weeping and couldn&amp;rsquo;t stop, I was so moved by nostalgia.&lt;/p&gt;</description><pubDate>Tue, 13 May 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/barn</guid></item><item><title>Colony</title><link>https://ivysly.com/dream/colony</link><description>&lt;p&gt;Can&amp;rsquo;t leave shelter because there&amp;rsquo;s a giant insect bird that will swoop down and eviscerate us. A colony of these insects has a parasitic relationship with its own queen.&lt;/p&gt;</description><pubDate>Tue, 22 Apr 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/colony</guid></item><item><title>Bathroom Stall</title><link>https://ivysly.com/dream/bathroom-stall</link><description>&lt;p&gt;There&amp;rsquo;s only one bathroom on this gigantic train, with only one stall. when it&amp;rsquo;s my turn, people are upset I am taking so long to pee. blood comes out, I try to ignore it.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/bathroom-stall</guid></item><item><title>Shooting Star</title><link>https://ivysly.com/dream/shooting-star</link><description>&lt;p&gt;A shooting star outside my hotel, it&amp;rsquo;s so close I can hear it sizzle in the air and it crashes nearby in the forest. I take my phone and start to record its landing spot. it&amp;rsquo;s glowing faintly red. I hear screams and explosions and look up, still recording, to see dozens more shooting stars colliding into each other and raining down chunks of rock. I see another giant Earth in the sky. I run back into the hotel and the staff are ushering people somewhere. a man is crying and threatening suicide.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/shooting-star</guid></item><item><title>Footsteps</title><link>https://ivysly.com/dream/footsteps</link><description>&lt;p&gt;I&amp;rsquo;m in a spacious, plain looking building like a school or a hospital. I&amp;rsquo;ve got my field mic and I&amp;rsquo;m recording my own footsteps. I noticed some orchestral music was interfering with the recording, but I couldn&amp;rsquo;t find the source. I end up in a concert hall with the seats like bleachers in how steeply they ascend, nobody is in them. the whole concert hall is empty but the music is quite loud, and I&amp;rsquo;m trying to find the source. I walk up the stairs and I find at the top of them a door to another completely full concert hall where the orchestra is playing very loud.&lt;/p&gt;</description><pubDate>Thu, 03 Apr 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/footsteps</guid></item><item><title>VW Beetle</title><link>https://ivysly.com/dream/vw-beetle</link><description>&lt;p&gt;Traded in my car for a pink VW beetle installed with a red haired hologram anime girl. The whole process was annoying (I had to drive a bunch between cities) but I did finally end up driving it to dari mart on friendly street.&lt;/p&gt;</description><pubDate>Sun, 30 Mar 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/vw-beetle</guid></item><item><title>Fighter Jet</title><link>https://ivysly.com/dream/fighter-jet</link><description>&lt;p&gt;D is my therapist. he wanted to facetime me but I don&amp;rsquo;t have an iPhone. we call while playing a fighter jet dogfighting game. I can hear A yelling at a game in the distant background&lt;/p&gt;</description><pubDate>Sun, 16 Mar 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/fighter-jet</guid></item><item><title>Diner</title><link>https://ivysly.com/dream/diner</link><description>&lt;p&gt;watching the matrix on DVD. I get in trouble with the mob over a giant, expensive hash map, after B(?) introduces me to the boss. we confront him in the parking lot of a diner.&lt;/p&gt;</description><pubDate>Fri, 14 Mar 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/diner</guid></item><item><title>Devil</title><link>https://ivysly.com/dream/devil</link><description>&lt;p&gt;a dream about demonic possession and the devil, who looked an awful lot like joaquin phoenix as the joker&lt;/p&gt;</description><pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/devil</guid></item><item><title>Dead End</title><link>https://ivysly.com/dream/dead-end</link><description>&lt;p&gt;accidentally drove my car onto an elevated train track in Philadelphia. it ends up in a dead end on the tracks, in the middle of the city, safe from being hit, but impossible to get back in and drive out. it faces a ramp that leads into a big body of water. the train goes right over it. we try to cooperate with the city to get it back out, but nothing seems to work. eventually we try a plan where N and I disguise ourselves as clowns and do a comedy routine to distract the passengers. we stall the train above the car, I exit and throw it off the tracks onto the concrete. everyone celebrates.&lt;/p&gt;</description><pubDate>Sat, 08 Mar 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/dead-end</guid></item><item><title>Garco</title><link>https://ivysly.com/dream/garco</link><description>&lt;p&gt;N(?) and i are escaping from revolution-era army men wielding rifles with giant bayonets. we enter a warmly lit cave and there is a wall of climbable blocks with letters on them. one of the rows of blocks spells out &amp;ldquo;GARCO&amp;rdquo;. as i start climbing, N is impaled by a bayonet through his back and out his chest, and he dies.&lt;/p&gt;</description><pubDate>Fri, 28 Feb 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/garco</guid></item><item><title>Cubes</title><link>https://ivysly.com/dream/cubes</link><description>&lt;p&gt;weird little cubes on the inside of a woman&amp;rsquo;s closed eyelids fly outward, stretching her eyelids like a cartoon&lt;/p&gt;</description><pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/cubes</guid></item><item><title>Chaperone</title><link>https://ivysly.com/dream/chaperone</link><description>&lt;p&gt;in a plane on a school trip. our chaperone is power tripping and loudly, aggressively going over all his rules for the trip. we are at the mall/airport when I get sick of it and tell him to shut up we are all trying to study&lt;/p&gt;</description><pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/chaperone</guid></item><item><title>Dog Trail</title><link>https://ivysly.com/dream/dog-trail</link><description>&lt;p&gt;on a walk with dennis. I let him roam around the trail off leash. I decided to get on the bus and then meet up with him further along the trail, but I get distracted and a bunch of things go wrong. eventually I decide R probably found him and took him home. I bus home, and when I get there, a bunch of other white dogs are there but not dennis. these dogs belong to R&amp;rsquo;s dad who is visiting. I panic and run back outside leaving all the doors open. I begin yelling his name and other people do too, the whole neighborhood wants to find him. there are lots of other dogs being walked today. eventually I see him being walked around by someone else. Dennis is wearing a t shirt. I get the attention of the person who has him and I take him back home&lt;/p&gt;</description><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://ivysly.com/dream/dog-trail</guid></item></channel></rss>