<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: IdleCultivation</title>
    <description>The latest articles on DEV Community by IdleCultivation (@idlecultivation).</description>
    <link>https://dev.to/idlecultivation</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4111642%2F0e8ad04e-ec8e-4c51-adff-f897bf8ec2ba.jpeg</url>
      <title>DEV Community: IdleCultivation</title>
      <link>https://dev.to/idlecultivation</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idlecultivation"/>
    <language>en</language>
    <item>
      <title>Written, translated into eleven languages, and seen by nobody</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Fri, 06 Nov 2026 20:00:08 +0000</pubDate>
      <link>https://dev.to/idlecultivation/written-translated-into-eleven-languages-and-seen-by-nobody-4aee</link>
      <guid>https://dev.to/idlecultivation/written-translated-into-eleven-languages-and-seen-by-nobody-4aee</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;27 Sep 2026 to 28 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Writing is only half of a scene. The other half is the moment it is shown, and a scene shown at the wrong moment, or at none, might as well not exist. This window I found that a good share of the story in Myriad Immortal Sect had been in the second category for a long time: fully written, translated into all eleven languages, and delivered to nobody.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Eighteen closing scenes that never played
&lt;/h2&gt;

&lt;p&gt;Many quests have a written turn-in scene: the herb girl's welcome when you bring her herbs, the elder handing over the Foundation Pill. Those scenes were meant to play when you claim the quest.&lt;/p&gt;

&lt;p&gt;Two things conspired against them. The quests were not wired to any turn-in trigger, and the game claims finished quests automatically within about a second. So the quest completed, a toast appeared, and the scene was skipped. Eighteen of them. They now open in the dialogue panel when a quest is claimed on the map, titled with the quest's name. Choice quests keep their branches where they were.&lt;/p&gt;

&lt;p&gt;From the third batch on, most quests have no dialogue at all. They do have a story paragraph written as exactly this kind of payoff, which sat collapsed in the Quest Hall where almost nobody opened it. A claim with no written turn-in now closes on that story, split into panel-sized pages so it never reads as a wall.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fob6gathhsokzcsgc17ma.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fob6gathhsokzcsgc17ma.jpg" alt="A quest card with the portrait of the rival you are sent to defeat" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thirteen openings nobody voiced
&lt;/h2&gt;

&lt;p&gt;The opposite end had the same gap. Thirteen quests have no giver, no talk target and no talk objective: the herb girl on the road, the bully, the caravan steward. Their opening scenes were written and nothing ever played them. They now play as quest scenes too. On the map they open at once, queued behind any dialogue already showing. Off the map they wait, at most three and oldest first, and open when you return to it. If you want to meet the first of them, the quest guide for &lt;a href="https://idlecultivation.com/article/quests-mortal-b1-t2-herbs-along-the-road-walkthrough" rel="noopener noreferrer"&gt;roadside herb gathering&lt;/a&gt; starts with her.&lt;/p&gt;

&lt;h2&gt;
  
  
  A scene belongs to the place where it happens
&lt;/h2&gt;

&lt;p&gt;Once the openings played, a new problem appeared at once: they played at the wrong moment.&lt;/p&gt;

&lt;p&gt;Opening scenes used to fire when you accepted the quest. But many of them narrate an arrival. The registrar's scene, where a bloodstone takes your soul-print and you are entered in the sect's register, ran while the player was still standing at the outer gate. The text described something that had not happened yet.&lt;/p&gt;

&lt;p&gt;So an opening scene now plays where its story happens. A quest with a destination opens when you reach it. A hunt or a gathering opens on your first kill or first pick. A choice quest still opens when you accept it, because the choice itself is the scene. And if you have already passed the anchor when you accept, the scene plays immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flamdy2sfobqangc74ze2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flamdy2sfobqangc74ze2.jpg" alt="The gate of Medicine King Valley and the paved road into the compound" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not fail a player before you have taught them
&lt;/h2&gt;

&lt;p&gt;A smaller change in the same window has the same flavour, a thing shown before the player can make sense of it.&lt;/p&gt;

&lt;p&gt;Small stage breakthroughs in this game are rolls, and a failed roll prints a "faltered" line and costs a little progress. In the first two minutes of a new account, that line reads as a mistake: the game has not explained what a stage roll is yet, and the cost is only seconds. So below level 5 the roll always succeeds. The first four small stages always land.&lt;/p&gt;

&lt;p&gt;The follow-up was the kind of detail that is easy to miss. Those sure rolls were still consuming a breakthrough aid and a pouch of Qi-Gathering Powder if you held one, spending them on a roll that could not fail. Both now wait for the first stage that can actually falter. The &lt;a href="https://idlecultivation.com/article/entity-pill-qi-powder-qi-gathering-powder-pill-guide" rel="noopener noreferrer"&gt;Qi-Gathering Powder entry&lt;/a&gt; explains what that pouch does once it matters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkx2lmqn9ahw3bsipmkvo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkx2lmqn9ahw3bsipmkvo.jpg" alt="The Cultivate screen overview with realm and cultivation rate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Delivery is part of the writing
&lt;/h2&gt;

&lt;p&gt;If your game has authored story, list every scene and ask two questions about each: what triggers it, and is the player at the place the scene describes when it fires? I had answered neither for most of mine. The words were done. The design of when they arrive was not.&lt;/p&gt;

&lt;p&gt;The scenes play at the right moment now: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;walk into the first one, free in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>narrative</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>A quest slot cap is a priority rule wearing a number</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Thu, 05 Nov 2026 20:00:12 +0000</pubDate>
      <link>https://dev.to/idlecultivation/a-quest-slot-cap-is-a-priority-rule-wearing-a-number-gl3</link>
      <guid>https://dev.to/idlecultivation/a-quest-slot-cap-is-a-priority-rule-wearing-a-number-gl3</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;26 Sep 2026 to 27 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Myriad Immortal Sect lets you hold three quests at once. The cap exists for good reasons: a quest log with twenty entries is a log nobody reads, and a small cap makes accepting a quest a small decision. It is also one of those rules that looks like a number and behaves like a policy, and this window was about finding out which policy it had actually been enforcing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The errands that blocked the story
&lt;/h2&gt;

&lt;p&gt;Slots fill when you accept a quest. Each realm's story ends with a closing quest that only opens when you reach the top of that realm. Put those two facts together and a player can arrive at the pinnacle of a realm holding three leftover errands from much earlier, and find the quest that finishes the chapter has nowhere to go.&lt;/p&gt;

&lt;p&gt;That is exactly what happened on the itch.io build. A player at Nascent Soul had three Qi Condensation errands in hand, and the quest called "Core Formation Perfected" could not be accepted. The design had always said the main road takes a slot first and is never squeezed out by side quests. The rule in the code was just "three".&lt;/p&gt;

&lt;h2&gt;
  
  
  From one count to a road
&lt;/h2&gt;

&lt;p&gt;The first fix was a narrow exception: one main-road quest may take a fourth slot while nothing else on the road is in progress. Nothing in your log is ever dropped to make room.&lt;/p&gt;

&lt;p&gt;A day later the same squeeze appeared one step earlier. In the fourth batch, the quest before the trial "Guard the Sect" is not itself a trial, so three old errands still blocked the step that leads to it. So the exception widened from "the main quest" to "the road": the batch's unclaimed main quests and their unfinished prerequisites, one at a time. The walkthrough for &lt;a href="https://idlecultivation.com/article/quests-mortal-b4-t4-guard-the-sect-walkthrough" rel="noopener noreferrer"&gt;Guard the Sect&lt;/a&gt; shows where that step sits.&lt;/p&gt;

&lt;p&gt;Then a third case. "Sword-Flight Trials" unlocks flying, the signature ability of Core Formation, but it is neither mandatory nor a prerequisite of the closing quest. So it was off the road, and a player at Core Formation level 28 sat under "All quest slots are full" with the Soar button locked. Quests that grant a capability now count too. More on that quest is in the &lt;a href="https://idlecultivation.com/article/quests-mortal-b3-t3-sword-flight-trials-walkthrough" rel="noopener noreferrer"&gt;Sword-Flight Trials walkthrough&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6sr7vjlgmn3dxm2j6s52.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6sr7vjlgmn3dxm2j6s52.jpg" alt="Riding a flying sword over the world map" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lanes, not exceptions
&lt;/h2&gt;

&lt;p&gt;Adding capability quests to the road broke something else. At a realm's pinnacle the batch flips to the next one, so a capability quest from the old batch stopped counting as road, while the next realm's gate took the road slot. That same player ended up holding five quests.&lt;/p&gt;

&lt;p&gt;That was the point where a pile of exceptions became a structure. There are now two separate lanes on top of the three ordinary slots. The road lane holds one quest on the current batch's path to its gates, exactly as before. The perk lane holds one capability quest at a time, counted across every batch so far, so it never competes with the realm's gate. Most in progress at once is five, and every one of them is there for a reason the player would agree with.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F656cpr46i2820pgqo1qd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F656cpr46i2820pgqo1qd.jpg" alt="The Quest Hall with story quests, a choice to make and a world boss" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Order matters as much as count
&lt;/h2&gt;

&lt;p&gt;The map's tracker follows the first quest in your log, so where a newly accepted quest lands decides what the game points you at. A main-road quest now goes to the front. A capability quest goes behind any road quest already in progress and ahead of side errands, so accepting the errand that leads to the alchemy hall does not pull the tracker off a realm gate you are halfway through.&lt;/p&gt;

&lt;p&gt;Labels mattered too. The Quest Hall marked trials with a badge and described every unbadged quest as optional. The quest that opens each new batch had no badge, so the hall was calling a required quest optional. It wears the badge now. And a locked must-do that used to read only "LOCKED" now says which quest it opens after.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0euzglwnsslqfrjtkp7o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0euzglwnsslqfrjtkp7o.jpg" alt="A quest asking the player to make a choice, with its rewards and an Open the map button" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would say about caps
&lt;/h2&gt;

&lt;p&gt;A cap on concurrent anything is a statement about priority, and if you only write down the number, the priority is whatever falls out of acceptance order. Write down which things must never be crowded out, give them their own lane, and let the number apply to everything else. I got there in four steps over two days, each one forced by a real player standing in front of a locked door.&lt;/p&gt;

&lt;p&gt;Your three slots and two lanes are waiting at the sect gate: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;take your first quest, free in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>progression</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Halt, name and business, or how a greeting read as a refusal</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Wed, 04 Nov 2026 20:00:19 +0000</pubDate>
      <link>https://dev.to/idlecultivation/halt-name-and-business-or-how-a-greeting-read-as-a-refusal-4fd7</link>
      <guid>https://dev.to/idlecultivation/halt-name-and-business-or-how-a-greeting-read-as-a-refusal-4fd7</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;25 Sep 2026 to 26 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Here is a small interaction that went wrong in a way I find instructive. In Myriad Immortal Sect, the halls in a sect compound have people stationed at their doors. Click the Main Hall and its keeper greets you first; close the greeting and the hall's screen opens. That is the design, and it gives every building a voice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Main Hall's keeper is a gate guard whose first line is "Halt. Name and business." Two separate blind play-tests of the itch.io build reached that line, read it, pressed the button under it, and concluded they had been refused entry.&lt;/p&gt;

&lt;h2&gt;
  
  
  The button was the sentence that mattered
&lt;/h2&gt;

&lt;p&gt;The button under every greeting said "Close". After "Halt. Name and business.", "Close" reads as "you are dismissed". Nothing on the screen told the player that closing the greeting was the way in.&lt;/p&gt;

&lt;p&gt;The guard's line was fine. It is in character and it is the kind of thing a gate guard says. The problem was the label of the action, which is really a short sentence about what happens next. When closing a greeting opens a screen, the button now says "Go in". Buildings with nothing behind them keep "Close". One word, and a building nobody could enter became a building with a gruff doorman.&lt;/p&gt;

&lt;p&gt;If you want to see which halls have someone stationed at the door, the codex entry for the &lt;a href="https://idlecultivation.com/article/entity-building-medicine-king-main-hall-main-hall-building-guide" rel="noopener noreferrer"&gt;Medicine King Valley main hall&lt;/a&gt; is a typical example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9noj7mb3nohmki1w53tc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9noj7mb3nohmki1w53tc.jpg" alt="A merchant from Azuresun City talking to the player on the world map" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My first theory was wrong
&lt;/h2&gt;

&lt;p&gt;Before I found the label, I had a different explanation, and I shipped a fix for it.&lt;/p&gt;

&lt;p&gt;On that build a player four steps from the Main Hall clicked it and got the guard's line, although they could not see a guard. The guard stands inside the doorway, so the hall is drawn over him. I concluded that the click was landing on a hidden sprite underneath, and changed click selection to pick whatever is drawn on top.&lt;/p&gt;

&lt;p&gt;Then I tried to reproduce it on purpose, with a different building, and it behaved exactly as designed: click the library, the librarian speaks, close, the library opens. No hidden sprite had taken the click. The guard answered because he is the hall's keeper. So the change came back out, and the real problem turned out to be the word "Close".&lt;/p&gt;

&lt;p&gt;The lesson I keep relearning: reproduce the failure deliberately before you fix it, in a second place if you can. A fix built on the first plausible story can easily pass its own test while changing behaviour nobody asked to change.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5byjbqld0wboed4tuxxl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5byjbqld0wboed4tuxxl.jpg" alt="The player standing behind a waterfall cliff, drawn as a pale silhouette through it" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Two more ways a greeting arrived wrong
&lt;/h2&gt;

&lt;p&gt;While I was looking at doorways, two related issues turned up.&lt;/p&gt;

&lt;p&gt;When you click a hall that sits behind a corner, the walk bends around it. On the exact frame the walk turned a corner the character was briefly not moving, and the game read "not moving and near an NPC" as "arrived". So the keeper's line opened four or five steps short of the door, and a second click was needed. A corner is not a stop, and now it is not treated as one.&lt;/p&gt;

&lt;p&gt;The doorstep prompt, which previews a keeper's first line as you approach, also showed "Halt. Name and business..." floating over an empty step with no speaker, because the keepers had no name set in the layout. It now names the speaker exactly as the greeting panel does. A line of dialogue without a speaker reads as the game itself talking to you, which in this case made it sound even more like a refusal.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same restraint, applied to the inbox
&lt;/h2&gt;

&lt;p&gt;A different kind of greeting changed in this window too: email. Players who link an address can now get a reminder when a sign-in streak is about to lapse, alongside the comeback note for players who have been away.&lt;/p&gt;

&lt;p&gt;The design question was not how to send more, it was how to send less. Any mail the game sends on its own initiative is now limited to one per player per day, and a mail that would exceed that is deferred to a later day rather than dropped. Mail you caused yourself, like a sign-up confirmation, is never held back. A game that greets you twice a day by email is a game you unsubscribe from. The streak pays out in the currencies listed in the &lt;a href="https://idlecultivation.com/article/currencies-codex" rel="noopener noreferrer"&gt;codex of currencies&lt;/a&gt;, which is what those reminders are protecting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbu3zvgyy140fu0xci7pi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbu3zvgyy140fu0xci7pi.jpg" alt="The daily sign-in reward card with its 30-day streak bar" width="470" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check in your own game
&lt;/h2&gt;

&lt;p&gt;Read every button label as the second half of the sentence above it. "Halt. Name and business." plus "Close" is a dismissal. The same line plus "Go in" is a welcome. Players read the pair, not the parts.&lt;/p&gt;

&lt;p&gt;The guard is still gruff, but now he lets you in: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;walk up to his hall, free in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>ux</category>
      <category>playtesting</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Seven passes on one guidance arrow, and what each pass fixed</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Tue, 03 Nov 2026 20:01:04 +0000</pubDate>
      <link>https://dev.to/idlecultivation/seven-passes-on-one-guidance-arrow-and-what-each-pass-fixed-24bm</link>
      <guid>https://dev.to/idlecultivation/seven-passes-on-one-guidance-arrow-and-what-each-pass-fixed-24bm</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;25 Sep 2026 to 26 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;In Myriad Immortal Sect you can light a Wayfinding Lamp to find your current quest target. Until this week the lamp showed you the way in two places: a highlighted diamond on the minimap and a line of text with a direction and a step count. Both worked. Both also meant looking away from your character to find out which way to walk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I added a third: a small gold arrow at the player's feet, pointing at the target, with the distance beside it. It took seven passes in two days, and almost none of them were about whether the arrow pointed the right way. They were about where it sits, how big it is and how it moves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pass one: agree with the other two
&lt;/h2&gt;

&lt;p&gt;The first rule was not visual. The arrow, the minimap diamond and the text row all had to point at the same thing, so they all read from one place that decides what the lamp is leading you to. Three indicators that can disagree are worse than one, because the moment they split the player trusts none of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passes two and three: a circle on the bearing
&lt;/h2&gt;

&lt;p&gt;The first arrow circled the feet on a small flattened ellipse, which is the obvious way to draw something "on the ground". It looked right and behaved wrong. On an ellipse the arrow's position does not lie on the true bearing to the target, so it pointed one way and sat slightly in another.&lt;/p&gt;

&lt;p&gt;It now orbits a true circle, 150 to 200 pixels out from the player in screen terms, and sits exactly on the line to the target. That had a nice side effect: clicking the arrow walks you towards the target, because the arrow is literally on the path. The step count moved directly under the arrow so the two never overlap.&lt;/p&gt;

&lt;p&gt;When the target is closer than the orbit, an arrow circling at 150 pixels would point past it. Instead it glides in to just short of the target and points straight at it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frpfs2v3knkhjen776yv1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frpfs2v3knkhjen776yv1.jpg" alt="Wilderness by a river, with lizard beasts, level labels and the player's strike-range ring" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Passes four and five: smaller, then quieter
&lt;/h2&gt;

&lt;p&gt;The arrow needed to read as "go this way" rather than as a static decoration, so it slides forward and eases back every 0.9 seconds. I kept that motion on even for players who ask for reduced motion, because that preference is about flashes and shaking, and a slow slide is neither.&lt;/p&gt;

&lt;p&gt;Then I watched it for a while and it was too much. The arrow and its label came down by forty percent, the label rendered at high resolution so it stays sharp under the map zoom. The nudge got shorter. Then shorter again, from sixteen pixels to under six. Every one of those numbers came from looking at it during actual play, not from a mockup, because the right size for an indicator depends on everything else on screen at that moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passes six and seven: depth, and room for the head
&lt;/h2&gt;

&lt;p&gt;A flat arrow sliding back and forth is easy to stop seeing. Every five seconds it now rolls once around its long axis, a short flip that reads as three-dimensional without changing the direction it points. It is enough to catch the eye again without demanding it.&lt;/p&gt;

&lt;p&gt;The last fix was about the player's own sprite. The character and their health bar stand above the point on the ground where they are anchored, so an arrow pointing upward at the normal radius crowded into the head. The orbit now widens by up to thirty percent as the arrow swings towards straight up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Friu3lhkg0nqvr42vvctu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Friu3lhkg0nqvr42vvctu.jpg" alt="The world map near a sect gate, with the minimap, the active quest and the item belt" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The same idea applied to whole screens
&lt;/h2&gt;

&lt;p&gt;A guidance arrow answers "where do I go?" without making you read. In the same window a handful of screens learned to answer "what is this page for?" in one line. The alchemy hall used to open with a piece of atmosphere, "One cauldron burns without rest", which told a first-time player nothing. It now opens with "Turn herbs into pills here. Each pill needs its recipe first." The Scripture Library, the Destiny page and the Treasures screen each gained a single plain sentence above their first card, and a recipe's description now says "Lets you brew X in the Alchemy Pavilion. It is never used up."&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://idlecultivation.com/article/recipes-codex" rel="noopener noreferrer"&gt;codex of recipes&lt;/a&gt; lists every brewing and forging recipe that line now describes, and the guide to &lt;a href="https://idlecultivation.com/article/life-and-map-resources" rel="noopener noreferrer"&gt;resources you find on the map&lt;/a&gt; covers what the lamp tends to lead you to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fds8vs8rjj76cumfhikgk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fds8vs8rjj76cumfhikgk.jpg" alt="The Alchemy Pavilion with its furnace speed, spirit herb stock and brewable recipes" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I took from it
&lt;/h2&gt;

&lt;p&gt;Guidance elements are judged in context or not at all. On a blank canvas my first arrow was fine. On a busy map, next to a health bar, over a river, during a fight, it needed seven rounds of watching. Budget for that. And when you can, put the pointer where the player is already looking.&lt;/p&gt;

&lt;p&gt;Light a lamp and follow it: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;play free in the browser, no download&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>ux</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>A stale translation passes every check and still tells a different story</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Mon, 02 Nov 2026 20:00:21 +0000</pubDate>
      <link>https://dev.to/idlecultivation/a-stale-translation-passes-every-check-and-still-tells-a-different-story-58e3</link>
      <guid>https://dev.to/idlecultivation/a-stale-translation-passes-every-check-and-still-tells-a-different-story-58e3</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;24 Sep 2026 to 25 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Myriad Immortal Sect ships in eleven languages. I write the English and the Simplified Chinese as originals, and the other nine are translated. For a long time my checks for those nine were mechanical: every key present, every placeholder intact, no English left behind. This window showed me how little those checks say about whether a player in Jakarta or Osaka is reading the same game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The work came from native readers going screen by screen. Almost everything they found would have passed any automated test I could write.&lt;/p&gt;

&lt;h2&gt;
  
  
  A translation can be complete and out of date
&lt;/h2&gt;

&lt;p&gt;The biggest category was staleness. A translation is written against an English line. Later the English changes, because a mechanic changed or a sentence was rewritten for clarity, and the translation stays exactly as it was. It is not missing, it keeps its placeholders, and it now says something the game no longer does.&lt;/p&gt;

&lt;p&gt;I found these by asking a dumb question of the history: for which lines was the English edited after the translation was written? About two hundred interface lines per language came back. Native readers kept only the ones whose meaning had actually moved, and those were bad. Recipe hints sent players to trade "at the sect" instead of the General Store. Bidding still demanded a realm it no longer needs. The world boss still appeared "every full moon with shared rewards" where the English describes a contributor board. In the quest stories, several translations still said a rival was already dead in chapters where he is very much alive, and that your master begged for your Foundation Pill when the rewritten English says you earned it herb by herb.&lt;/p&gt;

&lt;p&gt;That check now runs as a report. It lists candidates rather than defects, because many English edits are punctuation, but it is the only thing that can see this kind of drift at all. The only trace a stale translation leaves is time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F067nynn1c5x86ddfkee7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F067nynn1c5x86ddfkee7.jpg" alt="The Market Isles General Store in Japanese, with pill cards, prices and the sect discount" width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One name per thing, inside each language
&lt;/h2&gt;

&lt;p&gt;The second category was terminology. Within a single language the same stat would appear under two or three names. The sect's Contribution was labelled with the word for Merit in seven languages. In Indonesian and Malay, Insight was one word in the skill tree and another in the top bar, and the top-bar word was also the word for Epiphany, a completely separate mechanic. Divine Sense had one name on the alchemy screen and another on the stats panel.&lt;/p&gt;

&lt;p&gt;To a player that reads as two different resources. They go looking for the second one. Each language now has one name per term, anchored to its own catalogue, and the &lt;a href="https://idlecultivation.com/article/glossary-cultivation-terms" rel="noopener noreferrer"&gt;glossary of cultivation terms&lt;/a&gt; on the site is the English reference the others were aligned with.&lt;/p&gt;

&lt;p&gt;Register drifted the same way. The Russian interface addressed the player with the informal "you" on the main screens and the formal one on 123 other gameplay lines, so a single toast could pair "press again" in one voice with "please wait and try again" in the other. Gameplay now uses one voice throughout, and the account and forum screens keep the formal one on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Borrowed glyphs and borrowed punctuation
&lt;/h2&gt;

&lt;p&gt;Some languages had inherited marks from the Chinese they were drafted from. Six Japanese strings used a simplified Chinese character where Japanese writes a different form. Two Korean descriptions carried bare Chinese characters with no gloss. And the Korean, Vietnamese and Thai text kept the Chinese full-width double dash and six-dot ellipsis in 720 strings, where those languages use their own punctuation. Korean keeps its own ellipsis, which happens to look similar and is native there.&lt;/p&gt;

&lt;p&gt;Traditional Chinese had a related problem from the other direction. It is generated from Simplified Chinese character by character, which converts glyphs but leaves Mainland vocabulary alone, so players in Taiwan read Mainland words for server, account and login. Eighty-seven lines now use local vocabulary and are pinned so the next regeneration keeps them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc5k5z5licdthiohbq1q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc5k5z5licdthiohbq1q.jpg" alt="The Quest Hall in Japanese, with a quest objective shown as a portrait of the target" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Names in templates
&lt;/h2&gt;

&lt;p&gt;Quest text uses slots for the cast: your sect, your master, your rival. Only English and Chinese had names authored for those slots, so every other language fell back to English. A Japanese quest card read in Japanese except for "Azure Cloud Sect" sitting in the middle, under a header that already named the sect in Japanese. Slots now read each language's own codex names, the same ones the map and codex show. The English page for the &lt;a href="https://idlecultivation.com/article/azure-cloud-sect" rel="noopener noreferrer"&gt;sect of the azure clouds&lt;/a&gt; shows the form that used to leak into every other language.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell another small team
&lt;/h2&gt;

&lt;p&gt;Automated checks tell you a translation exists. Only time tells you whether it is current, and only a native reader tells you whether it is consistent. Track when each source line last changed, and when it changes, treat its translations as suspects rather than as done.&lt;/p&gt;

&lt;p&gt;Pick your language in the settings and look for yourself: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;the game is free in the browser in all eleven&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>localization</category>
      <category>gamedesign</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Rounding is a promise when you show a player their odds</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Sun, 01 Nov 2026 20:00:32 +0000</pubDate>
      <link>https://dev.to/idlecultivation/rounding-is-a-promise-when-you-show-a-player-their-odds-2l5</link>
      <guid>https://dev.to/idlecultivation/rounding-is-a-promise-when-you-show-a-player-their-odds-2l5</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;23 Sep 2026 to 24 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;A player in Myriad Immortal Sect read "Tribulation success chance: 100.0%", pressed the button, and failed. The underlying chance was 99.96 percent. Nothing was wrong with the roll. The number on the screen had been rounded to the nearest tenth, and 99.96 rounds to 100.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To a programmer that is a formatting detail. To the player it is the game lying and then punishing them for believing it. This window turned into a small campaign about how odds are displayed, and the rules that came out of it are short enough to steal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Round towards the outcome you cannot promise
&lt;/h2&gt;

&lt;p&gt;The first rule is about direction. Rounding to nearest is the default everywhere, and for odds it is wrong at both ends.&lt;/p&gt;

&lt;p&gt;Near the top, anything below certainty must never display as certainty. The odds card, the result card and the chronicle line now all round down, so 99.96 reads 99.9 and only a true certainty shows 100.0. Near the bottom, the mirror case: a chance that is possible but tiny used to print "0.0%", which says impossible. It now reads "&amp;lt;0.1%". The dispatch board's chip, which shows whole percentages, keeps anything uncertain inside 1 to 99, so a 99.7 percent errand shows 99 and a 0.3 percent one shows 1.&lt;/p&gt;

&lt;p&gt;The principle is that the display should never claim more certainty than the roll has, in either direction. A player can live with "99.9% and I failed". They will not forgive "100% and I failed".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flhlxlc71anyam4vmxyqr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flhlxlc71anyam4vmxyqr.jpg" alt="A Mystery Box offering three sealed boxes, with the best possible rarity shown underneath" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One number, one formatter, everywhere
&lt;/h2&gt;

&lt;p&gt;The second rule is about agreement. The same probability appeared on three surfaces: the odds panel, the result card, and the guidance card on the main screen. The guidance card rounded to a whole number, so it said "The Tribulation is open at 100%" directly beside a panel showing 99.6.&lt;/p&gt;

&lt;p&gt;Two screens showing different numbers for the same fact are worse than either number alone, because the player now has to decide which one the game believes. Every place that shows a tribulation chance now goes through one display function. The chronicle also writes odds in the player's own number format, since a decimal comma and a decimal point are not interchangeable to someone reading in their language.&lt;/p&gt;

&lt;p&gt;If you are preparing for a crossing yourself, the codex entry for the &lt;a href="https://idlecultivation.com/article/entity-pill-tribulation-transcend-transcendence-pill-pill-guide" rel="noopener noreferrer"&gt;Transcendence Pill&lt;/a&gt; covers one of the items made for that moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonuses cannot pass the ceiling
&lt;/h2&gt;

&lt;p&gt;The third rule came from the list of ways to improve your odds. A talisman adds fifteen points. At 88 percent it was still advertised as plus fifteen, which would make 103. Now each lever is capped at the headroom left under 100, so at 88 the talisman says plus twelve. That is a tiny change and it removes a whole class of "the numbers do not add up" confusion.&lt;/p&gt;

&lt;p&gt;The dispatch board got the same scrutiny from the other side, since its chip was only recently relabelled after it turned out to be a power ratio rather than a probability. The &lt;a href="https://idlecultivation.com/article/dispatching-disciples" rel="noopener noreferrer"&gt;guide to dispatching disciples&lt;/a&gt; on errands explains what that board is for.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpl6bxvof8upzka4gdg14.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpl6bxvof8upzka4gdg14.jpg" alt="The sect screen with rank, contribution and the Mission Hall board" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The third question a return screen should answer
&lt;/h2&gt;

&lt;p&gt;A different kind of number from the same window. When you come back after time away, the summary used to answer two questions: what happened while you were gone, and what changed. It never answered the one players act on, which is what they can now afford.&lt;/p&gt;

&lt;p&gt;Time away pays levels, levels pay insight, and insight buys skill tree nodes. So after a gap that paid levels, the return toast and the panel now say how many nodes are within reach, using the same check the tree itself uses to decide whether a node can be bought. "You can now learn four nodes" is a reason to open the game's most important screen. A list of totals is not.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftb80nkzy8nybohczvv0o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftb80nkzy8nybohczvv0o.jpg" alt="The skill tree and its four paths: cultivation, alchemy, sword and body" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A smaller promise in the text
&lt;/h2&gt;

&lt;p&gt;One more broken promise, of a different sort. Onboarding lets you pick a name and a face, several of the faces are women, and it never asks your gender. Eighteen quest strings still called the player a woodcutter's son, a village boy, him. They now say child, youth, novice, them. The Chinese text keeps its own narrator idiom, which reads differently there. The &lt;a href="https://idlecultivation.com/article/skill-tree-keystones" rel="noopener noreferrer"&gt;keystone nodes guide&lt;/a&gt; is a good next read if those newly affordable nodes made you curious.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Round odds towards uncertainty at both ends. Format them in exactly one place. Cap every bonus at the ceiling it can actually reach. And when a screen reports what happened, end with what the player can do about it now.&lt;/p&gt;

&lt;p&gt;Check the odds yourself before your first storm: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;it is free to play in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>ux</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>My own interface kept spoiling the biggest moment in the game</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Sat, 31 Oct 2026 20:00:43 +0000</pubDate>
      <link>https://dev.to/idlecultivation/my-own-interface-kept-spoiling-the-biggest-moment-in-the-game-3p43</link>
      <guid>https://dev.to/idlecultivation/my-own-interface-kept-spoiling-the-biggest-moment-in-the-game-3p43</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;23 Sep 2026 to 23 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;A climax depends on not knowing the outcome until it arrives. Films get this for free, because nothing else is on screen. A game has a whole interface around the moment, and every part of that interface wants to report the new state the instant it changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Myriad Immortal Sect, the heavenly tribulation is the climax. You press a button, a storm gathers, lightning falls, and only then do you learn whether you crossed into the next realm. This window I found that by the time the first bolt landed, the game had already told you the answer half a dozen times.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six places that knew the result
&lt;/h2&gt;

&lt;p&gt;The result card itself was correctly held back until the storm finished. Everything else was not.&lt;/p&gt;

&lt;p&gt;Pressing the button applied the new level immediately, and every system that cared fired at once. A toast saying the tribulation was survived. The achievement for reaching the realm. The unlock toasts for new tabs. A notice that a new volume of the companion novel had opened. The realm name in the top bar. All of it on screen while the map was still loading the first bolt.&lt;/p&gt;

&lt;p&gt;Fixing those exposed more. The level number floating over your character's head read the live value, so on a first tribulation it showed level 11 while the panel still said 10. A new tab appeared in the tab bar in the first second, because it unlocks at the new level. The lock on the Soar button dropped. And a random destiny event, "Whisper of the Heart Demon", could roll during the storm and appear beside the tribulation's own title.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7pojsgrmv1q2if58lxaf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7pojsgrmv1q2if58lxaf.jpg" alt="The Cultivate screen at a realm's pinnacle, with the tribulation button on the Next Steps card" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  One rule: show the state from before the press
&lt;/h2&gt;

&lt;p&gt;The fix is a single idea applied everywhere. While a tribulation reveal is pending, every readout shows the state from before the button was pressed. The top bar, the level over your head, the tab bar and the flight lock all read from that remembered state until the reveal lands, and then all change together.&lt;/p&gt;

&lt;p&gt;Events are deferred, not dropped. The destiny roll skips during the storm and the clock keeps running, so whatever was due lands on the first moment after the result. Nothing the player earned is lost. It just waits its turn.&lt;/p&gt;

&lt;p&gt;What made this tedious was that each leak was found separately, and each fix revealed the next. The useful habit was a family sweep: after finding one readout that showed the new realm early, list every place on screen that displays anything derived from the level, and check them all. Three of the six leaks above were found that way, not by playing. If the realm ladder itself is unfamiliar, the explanation of &lt;a href="https://idlecultivation.com/article/minor-realm-stages-half-step" rel="noopener noreferrer"&gt;minor stages and half steps&lt;/a&gt; shows what each level number means.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F011bgzvxfahl62fbgdk9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F011bgzvxfahl62fbgdk9.jpg" alt="The world map with the top bar and tab bar folded away, showing the player card and Next Steps" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quest directions that pointed at nowhere
&lt;/h2&gt;

&lt;p&gt;The other big job in this window was a different kind of broken promise. Readers who had never seen the design went through every quest's "how to complete" line with the map open, and checked whether the place it named actually existed and was labelled.&lt;/p&gt;

&lt;p&gt;A large share did not. Across the middle batches, sixteen directions named places the map does not label or that do not exist at all: an "abode", "the arena", a "regional war", a "spirit-pet bonding site". In two later batches, twenty of twenty-one did the same: a teaching hall, an elders' hall, a "tribulation platform" for every quest in the ninth batch. One quest sent players to a famous sword mound while the beast it wanted spawned more than three hundred tiles away.&lt;/p&gt;

&lt;p&gt;These were written from the story's point of view, where such places obviously exist. The map is what the player actually has. Every direction now names a place the map labels, or tells you to light a Wayfinding Lamp, which points at the real target. The very first batch was also corrected to happen after you pass the gate rather than "on the road to the sect", because a player reaching it has already met the Sect Master. For a sense of what a real, labelled destination looks like, the entry for the &lt;a href="https://idlecultivation.com/article/entity-location-sword-mound-ancient-sword-mound-location-guide" rel="noopener noreferrer"&gt;Ancient Sword Mound&lt;/a&gt; is an example of a place the map really does label.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flamdy2sfobqangc74ze2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flamdy2sfobqangc74ze2.jpg" alt="The gate of Medicine King Valley, its Dispatch Hall and the paved road into the compound" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The common thread
&lt;/h2&gt;

&lt;p&gt;Both problems are about the gap between what the game knows and what the player should know at that moment. The interface knew the result too early and said it. The quest text knew places the player could not find and named them. In both cases the fix was to write from the player's position, at that second, with only what is on their screen.&lt;/p&gt;

&lt;p&gt;If you build a big reveal, list every element that can display the outcome and decide when each one is allowed to change. Your result screen will be fine. It is the top bar that gives it away.&lt;/p&gt;

&lt;p&gt;Your first storm is waiting: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;play free in the browser and find out at the right moment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>ux</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Three kinds of empty, and why my game's empty states were lying</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Fri, 30 Oct 2026 20:00:35 +0000</pubDate>
      <link>https://dev.to/idlecultivation/three-kinds-of-empty-and-why-my-games-empty-states-were-lying-20l6</link>
      <guid>https://dev.to/idlecultivation/three-kinds-of-empty-and-why-my-games-empty-states-were-lying-20l6</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;22 Sep 2026 to 23 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Every list in a game has an empty state, and it is the least designed screen in most of them. You write "Nothing here yet" once, it looks fine in the editor, and you move on. This window I found that four of mine were telling players something false, and that each false sentence led them to do the wrong thing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The underlying mistake was identical in all four. A panel showed "there is nothing here" without having established that there was nothing here.&lt;/p&gt;

&lt;h2&gt;
  
  
  One sentence, three situations
&lt;/h2&gt;

&lt;p&gt;When a panel has no rows to draw, there are at least three reasons. The data has not arrived yet. It arrived and there genuinely is nothing. Or it never arrived, because the connection dropped. Those want three different responses: wait quietly, invite the first action, or say plainly that the information is out of reach right now.&lt;/p&gt;

&lt;p&gt;My panels treated all three as the second one. The results:&lt;/p&gt;

&lt;p&gt;The bag printed "Your bag is empty. Explore the world to find items!" under a header that said 1 / 8 slots. It said it on every category tab with no matching items and every search that found nothing. So a player who mistyped the name of a pill they owned was told their inventory was gone, and a player looking at the Recipes tab was sent out into the wilderness for something the General Store sells.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ir52b4u6wkcevv88ib7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ir52b4u6wkcevv88ib7.jpg" alt="The bag with category tabs, search, Auto-Sort and item cards" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The guild list said "No guild is recruiting yet. Found the first one" when the list simply had not loaded. That invites a player to spend a founding cooldown, and possibly collide with an existing guild's name, over a list nobody could read. The discussion hall said "No one has spoken here yet. Say the first thing", so the first post went into a forum that was merely unreachable. The paid store said the catalogue was empty, which on a store reads as "this shop is broken".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ixq7yaewyviycj7s464.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ixq7yaewyviycj7s464.jpg" alt="The Guilds screen, with a guild open to newcomers and membership by approval" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix is an order, not a message
&lt;/h2&gt;

&lt;p&gt;Each panel now distinguishes the three states in a fixed order: still loading, then failed, then empty. Only when the first two are ruled out does it say there is nothing. A failed read gets its own line, for instance "The catalogue could not be reached. Nothing you own is affected", which answers the question the player is actually asking. The bag now says which kind of empty it is and, for an empty category, where that category of item comes from. Bag space grows with storage treasures, and the &lt;a href="https://idlecultivation.com/article/entity-artifact-spirit-pouch-spirit-storage-pouch-artifact-guide" rel="noopener noreferrer"&gt;Spirit Storage Pouch entry&lt;/a&gt; shows the first of them.&lt;/p&gt;

&lt;p&gt;A small stele board on the map had the same disease in its purest form. When it had nothing to show, it drew nothing at all, which on a flaky connection told the player that not one person in the whole game had ever left a word in that spot.&lt;/p&gt;

&lt;h2&gt;
  
  
  An empty state should name the way out
&lt;/h2&gt;

&lt;p&gt;The second half of the work was empty states that were true but useless. The Recycle Counter said "Nothing sellable in your bag right now." Correct, and a dead end, on one of the first market screens a new player opens. It now says where sellable stacks come from and offers a button to go there. The Pawnbroker got the same treatment, plus a line saying what it accepts, because a player opening it for the first time has no idea. The &lt;a href="https://idlecultivation.com/article/pawnbroker-spirit-stone-loans" rel="noopener noreferrer"&gt;pawnbroker guide&lt;/a&gt; covers how those loans work.&lt;/p&gt;

&lt;p&gt;The dispatch board answered an empty roster with "All disciples are busy or none recruited." That is two different states in one sentence, and a sect with zero disciples was being told its disciples were busy. It now splits them and tells the empty case where disciples come from.&lt;/p&gt;

&lt;p&gt;One I deliberately left alone: the weekly auction says "No lots this week." There is no next step to offer, and inventing a door would be worse than an honest full stop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1qmvjtir9qpk4emx5w4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj1qmvjtir9qpk4emx5w4.jpg" alt="The weekly Grand Auction with pills up for sealed bids" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A number that looked like a probability
&lt;/h2&gt;

&lt;p&gt;The same reading pass found a cousin of the empty-state lie. The dispatch card showed a chip reading "45% success". The number was not a probability. It was the share of combined power that your side held, and the actual mission outcome depends on that share in a much steeper way. At the values the chip displays, "40%" meant about a four percent chance, "45%" about ten, and "58%" about ninety-five. A player who trusted it lost nine times in ten at 45, and one who skipped a 55 passed up a near certainty.&lt;/p&gt;

&lt;p&gt;For now it says "power share", which is what it is. Computing the real odds is a separate change I would rather do carefully than guess at in the label.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I check now
&lt;/h2&gt;

&lt;p&gt;For any panel that can be empty, I ask three questions. What does it show while it is waiting? What does it show when the information could not be fetched? And when it really is empty, does it tell the player where to go next? If any answer is "the same line as the others", it is lying to someone.&lt;/p&gt;

&lt;p&gt;The bag knows the difference now: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;fill yours, free in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ux</category>
      <category>gamedesign</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Lightning that reads as real, and a storm that finally costs something</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Thu, 29 Oct 2026 20:00:06 +0000</pubDate>
      <link>https://dev.to/idlecultivation/lightning-that-reads-as-real-and-a-storm-that-finally-costs-something-3i9o</link>
      <guid>https://dev.to/idlecultivation/lightning-that-reads-as-real-and-a-storm-that-finally-costs-something-3i9o</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;20 Sep 2026 to 22 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;The heavenly tribulation is the set piece of a cultivation story. You reach the top of a realm, the sky gathers itself, and lightning comes down to test whether you deserve the next one. In Myriad Immortal Sect it is the moment that multiplies your cultivation speed, and it happens ten times across the Mortal World.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two weeks ago I raised its visual floor so that a new player would notice it at all. This window I rebuilt it properly, and the most interesting part was not the art. It was discovering that the storm had no consequences, and how much that mattered.&lt;/p&gt;

&lt;h2&gt;
  
  
  What real lightning looks like
&lt;/h2&gt;

&lt;p&gt;Most game lightning is a zigzag of even thickness. Real lightning is not. The main channel is thick where it leaves the cloud and thins as it descends, it forks repeatedly on the way down, and the forks are fainter than the trunk and mostly die out before they reach the ground. Only the main channel lands.&lt;/p&gt;

&lt;p&gt;So the bolts are now grown that way. The trunk narrows from thirteen pixels at the cloud to one pixel at the strike point. At each node there is about a one in three chance of a branch, every branch is thinner than its parent, branching goes at most two levels deep, and no branch ever touches the ground. Each bolt comes from a seed, so the same strike can be reproduced exactly when I need to look at it twice.&lt;/p&gt;

&lt;p&gt;The difference is hard to describe and immediate to see. The old bolts read as an effect. The new ones read as weather.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6cjn5b1ueb82r7ui022u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6cjn5b1ueb82r7ui022u.jpg" alt="The result of a survived tribulation, with the storm's cost, the new realm and an epiphany" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Clouds as a sign of rank
&lt;/h2&gt;

&lt;p&gt;From the fourth realm on, the storm now has clouds: six thunderheads at first, building to fourteen at the highest realms, closing in overhead, drifting slowly, lit from inside between strikes, and lifting away when it is over. The first three tribulations keep a lighter ceremony without them.&lt;/p&gt;

&lt;p&gt;That split is deliberate. Escalation is part of the meaning. If the first tribulation already has the full sky, there is nowhere for the ninth to go, and the player loses the sense that heaven is taking them more seriously each time. The storm also has its own generated thunder now, so it sounds as large as it looks. The story's version of this escalation runs right to the end, and the &lt;a href="https://idlecultivation.com/article/chapter-9-tribulation" rel="noopener noreferrer"&gt;chapter on the final tribulation&lt;/a&gt; shows where it leads.&lt;/p&gt;

&lt;h2&gt;
  
  
  A spectacle with no price is wallpaper
&lt;/h2&gt;

&lt;p&gt;Here is what bothered me once the visuals worked. The bolts hit your character, the screen lit up, and nothing happened to you. The tribulation decided success or failure with a roll beforehand, and the lightning was decoration on top of the result.&lt;/p&gt;

&lt;p&gt;Now each bolt that lands takes a share of your health and true energy, scaled by the realm you are breaking into, from a small fraction at the bottom to around a tenth of your health per bolt near the top. A successful crossing brings three to eight ordinary bolts. A failed one brings two to five crimson bolts that hit harder. Your protective ward absorbs what it can first, the storm can never kill you, and the final crossing into Ascension costs nothing at all. The result card adds one line saying what the storm took.&lt;/p&gt;

&lt;p&gt;The first tribulation is also guaranteed to succeed by design, which I wrote down plainly because a fifty percent first roll used to punish only the players eager enough to press the moment the button lit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz2p2ackyhl263u4299h2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz2p2ackyhl263u4299h2.jpg" alt="The Realm Codex with the stage track of the current realm and the ten realms in two parts" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  When the price and the picture disagree
&lt;/h2&gt;

&lt;p&gt;Adding a cost exposed two places where the display and the outcome were computed separately, which is the bug I meet most often in this project.&lt;/p&gt;

&lt;p&gt;The cost line was being worked out once, before the roll, using the failure numbers. So at a high realm the player's health bar could drop by eight bolts' worth while the card claimed five. It is now priced on the branch that actually played. And the tribulation talisman, which is supposed to soften the strikes, was being spent and then ignored by the bolts themselves: consumed, protecting nothing. It now scales every bolt. The panel that lists ways to improve your odds also quoted the talisman's base bonus to a sect whose members get more from it. One number, one source, or the screen lies. If you prepare for the storm with formations, the &lt;a href="https://idlecultivation.com/article/entity-formation-tribulation-guard-tribulation-warding-array-formation-guide" rel="noopener noreferrer"&gt;Tribulation Warding Array&lt;/a&gt; is the one built for it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fepum3mhogvqqix8ld0q3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fepum3mhogvqqix8ld0q3.jpg" alt="The Next Steps card with the Brave the Heavenly Tribulation button" width="800" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;When a moment is the climax of your loop, check two things separately: does it look like what it claims to be, and does it change anything about the player's state. The first makes it memorable. The second makes it matter. For a long time I had only the first, and it showed.&lt;/p&gt;

&lt;p&gt;The storm is waiting at the top of your first realm: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;climb to it free in your browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>vfx</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Nobody saw the flying sword, so I redesigned the first sky crossing</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Wed, 28 Oct 2026 20:00:07 +0000</pubDate>
      <link>https://dev.to/idlecultivation/nobody-saw-the-flying-sword-so-i-redesigned-the-first-sky-crossing-45p1</link>
      <guid>https://dev.to/idlecultivation/nobody-saw-the-flying-sword-so-i-redesigned-the-first-sky-crossing-45p1</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;19 Sep 2026 to 20 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Myriad Immortal Sect is a shared world without being a live multiplayer game. You never fight someone in real time, but the people around you on the map are real players: cultivators from the rankings walking the land near you, and now and then someone crossing the sky on a flying sword. That layer exists for one reason. An idle game played alone in a tab can feel like a spreadsheet with a background, and seeing other people is the cheapest way to say "this place is lived in".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This week I found out that the most important instance of it, the first one, was not working. Not broken. Working exactly as written, and unseen.&lt;/p&gt;

&lt;h2&gt;
  
  
  On cue, on screen, unnoticed
&lt;/h2&gt;

&lt;p&gt;Shortly after you first reach the map, a toast says "Look up, someone rides the wind", and a rider crosses the sky. I measured it in the 1280 by 720 frame of an itch.io embed. The crossing launched on time. It cut a 21 degree diagonal through the player's own head height at 250 pixels a second and was gone in 2.8 seconds. A blind five-minute first play never noticed it.&lt;/p&gt;

&lt;p&gt;Three things worked against it. It was fast. It moved diagonally through the busiest part of the screen, the area around your own character, where the eye is already full. And when it passed over land you had not explored yet, it was drawn under the fog, a faint shape behind a grey tint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6sr7vjlgmn3dxm2j6s52.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6sr7vjlgmn3dxm2j6s52.jpg" alt="Riding a flying sword over the world map" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Making a figure in the sky readable
&lt;/h2&gt;

&lt;p&gt;The opening crossing now runs nearly horizontally through the upper band of the view, away from the clutter around the player. It is paced to cross the full width of the view in six seconds whatever the window size, which I checked at five different sizes, because a fixed speed in pixels means a phone sees a blur and a wide monitor sees a crawl.&lt;/p&gt;

&lt;p&gt;It also had a staging problem. The rider started far enough outside the view that it spent 3.4 seconds flying towards the frame after the toast had already told you to look up, so the prompt arrived, you looked, and there was nothing yet. It now starts just outside the edge and is in frame within half a second of the toast. And riders, their vessels and their glow draw above the fog while their shadow stays on the ground, so a crossing over unexplored land is as visible as one over home.&lt;/p&gt;

&lt;p&gt;None of this changed what a crossing is. It changed whether the player's attention and the event were in the same place at the same time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7j9virauiu39kw0ifxe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs7j9virauiu39kw0ifxe.jpg" alt="A mountain range at the edge of Azure Cloud Sect's dome, with fog over unexplored land" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A warm-up cadence for the first three minutes
&lt;/h2&gt;

&lt;p&gt;Normally someone crosses the sky about once a minute. That rhythm is right for the long session and wrong for the first one. If the opening crossing is missed, the next chance is a minute away, and a new player decides how a world feels in much less time than that.&lt;/p&gt;

&lt;p&gt;So the first three minutes on the map have their own cadence: a crossing every 22 to 35 seconds, then it settles to the normal rate. All three of those numbers are settings rather than constants, because I fully expect to move them after watching more first sessions. Riders travel on different vessels depending on their sect, and one you may see overhead is the &lt;a href="https://idlecultivation.com/article/entity-artifact-black-iron-flying-sword-black-iron-flying-sword-artifact-guide" rel="noopener noreferrer"&gt;Black Iron flying sword&lt;/a&gt;, which has its own codex entry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fal6em9ai9ufkum4n6qq9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fal6em9ai9ufkum4n6qq9.jpg" alt="Medicine King Valley's gate with a passer-by whose nameplate gives name, realm and sect" width="620" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The embed is part of the design surface
&lt;/h2&gt;

&lt;p&gt;Most of the measuring this week happened inside the itch.io page rather than on my own site, and the frame around the game turned out to matter more than I expected.&lt;/p&gt;

&lt;p&gt;Whenever the game scrolled something into view inside itself, the sect offers after the spirit test for instance, the browser also scrolled the itch page around it. On the draft page that dragged the whole host page 221 pixels and pushed the top of the game out of the window. The game now only ever scrolls its own content and never the page it lives in.&lt;/p&gt;

&lt;p&gt;And the defaults a new player hears changed. Music and effects both started at 70. Music now starts at 20 and effects at 50, because the first thing many people do in a browser game is reach for the mute button, and I would rather they kept the sound of a tribulation than lost it to a loud menu theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to take from this
&lt;/h2&gt;

&lt;p&gt;If your design depends on a moment, measure the moment in the smallest, busiest frame a real player will use, and check three things: is it where the eye already is, does it last long enough to find, and does the prompt arrive with the event or before it. For a wider view of what the map holds, the overview of &lt;a href="https://idlecultivation.com/article/idle-cultivation-game-with-exploration" rel="noopener noreferrer"&gt;exploration in an idle cultivation game&lt;/a&gt; is the place to start.&lt;/p&gt;

&lt;p&gt;Look up in your first three minutes: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;the world is free to walk in your browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>ux</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Branching quest text keeps assuming you took the other road</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Tue, 27 Oct 2026 20:07:40 +0000</pubDate>
      <link>https://dev.to/idlecultivation/branching-quest-text-keeps-assuming-you-took-the-other-road-4055</link>
      <guid>https://dev.to/idlecultivation/branching-quest-text-keeps-assuming-you-took-the-other-road-4055</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;19 Sep 2026 to 20 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;A linear story is checked by reading it once. A story with branches and optional side quests cannot be, because the reader you are checking for is not one person. It is everyone who made a different set of choices, and each of them reads a slightly different text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This window was mostly ten passes over the quest writing of Myriad Immortal Sect, done by readers who had never seen the design and only had what a player has. Almost every finding was the same species of mistake: a line that quietly assumed something about the path you took.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Whichever you chose"
&lt;/h2&gt;

&lt;p&gt;The story choices in the game have two roads. Endure or strike back, draw the weapon or walk on. Each road has its own closing scene, and three of those closing scenes ended with a sentence in the spirit of "whichever you chose, the result is the same".&lt;/p&gt;

&lt;p&gt;That line is written from the author's seat. The author knows there are two roads and that they converge. The player made one choice, one time, and is told immediately afterwards that it did not matter. One choice scene went further and said so before the player had even picked.&lt;/p&gt;

&lt;p&gt;Each road now closes on its own terms, with its own consequence, even when the plot rejoins later. And the content checks refuse the flattening sentence from coming back, including one version that had hidden itself behind a stage direction. If you want to see a pair of roads that genuinely part, the walkthrough for &lt;a href="https://idlecultivation.com/article/quests-mortal-b4-t8-trial-in-the-mortal-walkthrough" rel="noopener noreferrer"&gt;the trial in the mortal world&lt;/a&gt; covers both.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9noj7mb3nohmki1w53tc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9noj7mb3nohmki1w53tc.jpg" alt="A merchant from Azuresun City speaking to the player on the world map" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The side quest you skipped is still being quoted
&lt;/h2&gt;

&lt;p&gt;The second pattern was presupposition. Ten lines in later quests referred to things that only exist if you did an optional quest earlier: a character greeted as an old acquaintance when you may never have met him, a technique assumed to be in your hands, a vault, a pill and an oath spoken of as shared history.&lt;/p&gt;

&lt;p&gt;For the player who did the side quest those lines are a nice callback. For everyone else they are a reference to a conversation that never happened, and the natural conclusion is that they missed something, or that the game is broken.&lt;/p&gt;

&lt;p&gt;The fix is not to make the side quests mandatory. The prerequisite graph stays as designed. Instead the lines are phrased for the player who skipped: a character is introduced at the point where he is named, and anything optional is spoken of in a way that works whether or not you were there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuity is a set of facts, not a vibe
&lt;/h2&gt;

&lt;p&gt;The rest of the passes were continuity in the strict sense. A rival who was exposed had to stay in the sect so a later quest could unmask him, rather than leaving and returning. An old feud was "three hundred years" in some places and a different number in others. An elder sealed away in one act was given a farewell scene in a later one, which he could not have attended; he now gets a bow at his door instead. The thirty-six who ascend with you at the end of the Mortal World actually go up, as the design says, rather than being lost somewhere in a rewrite.&lt;/p&gt;

&lt;p&gt;Each of these is trivial alone. Together they decide whether the story feels like it was written by one person who remembered it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Friu3lhkg0nqvr42vvctu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Friu3lhkg0nqvr42vvctu.jpg" alt="The world map near a sect gate, with the minimap, the active quest and the item belt" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the reader has to be a stranger
&lt;/h2&gt;

&lt;p&gt;I wrote much of this text, and I could not see these problems, because I read every line with the whole graph in my head. I know who Bertram is. I know both roads rejoin. The reader who finds presuppositions is the one who does not know, and that is a role you can assign, either to someone who has not seen the material or to yourself after a long enough gap.&lt;/p&gt;

&lt;p&gt;A stranger also catches the physical side of text. Several speech bubbles ran three hundred words and had to break where the beat turns, and seven of them had to fit five lines on a phone. On a small screen the first quest card's story now stays folded by default, because expanded it pushed the objective and the Set Out button six hundred pixels down.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fusaik2hde4aout1wd0bb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fusaik2hde4aout1wd0bb.jpg" alt="The world map on a phone in portrait, with the player card and Next Steps card folded" width="390" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist for branching text
&lt;/h2&gt;

&lt;p&gt;Three questions I now ask of every line after a choice or an optional quest. Does it assume a road? Does it assume a quest the player could have skipped? Does it contradict a fact stated elsewhere? The site's &lt;a href="https://idlecultivation.com/article/characters-codex" rel="noopener noreferrer"&gt;codex of characters&lt;/a&gt; is effectively the fact sheet those passes were checked against.&lt;/p&gt;

&lt;p&gt;The story reads the same on both roads only where it should: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;make your own choices, free in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>writing</category>
      <category>narrative</category>
      <category>devlog</category>
    </item>
    <item>
      <title>Designing old age and death in an idle game, without the skull</title>
      <dc:creator>IdleCultivation</dc:creator>
      <pubDate>Tue, 27 Oct 2026 04:30:08 +0000</pubDate>
      <link>https://dev.to/idlecultivation/designing-old-age-and-death-in-an-idle-game-without-the-skull-4c51</link>
      <guid>https://dev.to/idlecultivation/designing-old-age-and-death-in-an-idle-game-without-the-skull-4c51</guid>
      <description>&lt;p&gt;Development covered &lt;strong&gt;16 Sep 2026 to 19 Sep 2026&lt;/strong&gt; (commit dates).&lt;/p&gt;

&lt;p&gt;Cultivation stories are about mortality. The whole point of climbing realms is that each one buys you more years, and a cultivator who stalls dies of old age. I wanted that pressure in Myriad Immortal Sect, and I also wanted it in a genre where players leave the game running in a tab and come back tomorrow. Those two goals pull hard against each other.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The clock was built long ago. What changed this week was the language around it, and I think the language turned out to be the actual design.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model, briefly
&lt;/h2&gt;

&lt;p&gt;Your character starts at sixteen and their age only ever goes up. It advances with the in-game calendar, at full speed while you play and much slower while you are away. Each realm has a lifespan cap, and breaking through a great realm raises the cap a long way, by two to almost three times. Death is simply age reaching the cap.&lt;/p&gt;

&lt;p&gt;Because the cap jumps faster than age accumulates, a player who keeps breaking through never comes near it. The clock only matters to someone who sits at the top of a realm and never attempts the tribulation. That is the person the pressure is for, and it is meant to be a nudge, not a trap. The main view shows age against lifespan and nothing more. There is no countdown in the ordinary screens, on purpose. A ticking death clock in an idle game would make people anxious about closing the tab, which is the opposite of the genre's promise. The page on &lt;a href="https://idlecultivation.com/article/epoch-calendar" rel="noopener noreferrer"&gt;the in-game calendar that drives ageing&lt;/a&gt; explains how fast those years pass.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuzzptpzayb3v8pj4ubdb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuzzptpzayb3v8pj4ubdb.jpg" alt="The Destiny and Self page with Divine Sense, Fortune and lifespan bars" width="799" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Withering is information, not a sentence
&lt;/h2&gt;

&lt;p&gt;When a character's age passes ninety percent of the cap, they start withering. In this version withering carries no penalty at all. No slower cultivation, no weaker combat. It is a warning and nothing else: break through soon, or find a pill that restores years.&lt;/p&gt;

&lt;p&gt;The panel that showed it did not say that. It used words like "exhausted" and "slowed to a crawl", it suggested reincarnation as the answer, and it had a skull on it. Every one of those was false. The player was not slowed. Reincarnation is a separate, deliberate choice and not a way out of old age. And the skull told someone with plenty of time left that they were dying.&lt;/p&gt;

&lt;p&gt;The rewrite is plain: what is happening, what it does (nothing yet), and the two things you can do about it. The design document had said "pure information" all along. The screen had drifted into drama.&lt;/p&gt;

&lt;h2&gt;
  
  
  Succession, and a comfort that was not true
&lt;/h2&gt;

&lt;p&gt;If the clock does run out, the save is never deleted. A disciple inherits the mantle. The heir is a different person who takes over the name, starts again at sixteen and picks up from early Foundation Establishment, around level 11. Half of your spirit stones, contribution and insight carry over. Dao Fruit and the rarer currencies carry over in full, and your bag passes down untouched.&lt;/p&gt;

&lt;p&gt;The notice that appeared as a character neared the end said "nothing is lost". That is kind, and it is wrong: half of three currencies is lost and the heir climbs again from Foundation. A player who believes "nothing is lost" makes different choices from one who knows the real terms, and they find out the truth at the worst possible moment. The notice now states what carries and what does not, in all eleven languages, and the copy rules forbid the false comfort from coming back. More about how the heir takes over is in the &lt;a href="https://idlecultivation.com/article/generational-succession" rel="noopener noreferrer"&gt;generational succession guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnh2cr2j112lpmiy7pzuo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnh2cr2j112lpmiy7pzuo.jpg" alt="The Realm Codex with the ten stages of the current realm and the ten realms of the Mortal World" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The general rule: tell the terms, skip the theatre
&lt;/h2&gt;

&lt;p&gt;Two smaller fixes in the same window fit the same principle. A harvest announced "+6001" herbs when the bag's stack limit had refused 5,501 of them, so the number on screen was the number offered, not the number received. It now reports what landed and names the limit that turned the rest away. And a sect mission card that once showed only a title and an Accept button now says what it asks and what it unlocks before you tap it, because a design-blind reader marked it "accepting blind".&lt;/p&gt;

&lt;p&gt;What these have in common with the withering panel is the difference between drama and terms. Drama is skulls, "nothing is lost", a big flattering number. Terms are what will actually happen to you. Players can handle hard terms. They handle discovering the real terms late much worse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmi8acmt3g8yt4kimkped.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmi8acmt3g8yt4kimkped.jpg" alt="The Mortal World Chronicle listing quests completed, merit earned and events on the calendar" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  If you are adding a fail state
&lt;/h2&gt;

&lt;p&gt;Write the warning copy before you build the mechanic, and check every adjective against what the code does. If the warning says something gets slower, it had better get slower. Players read mood words as rules.&lt;/p&gt;

&lt;p&gt;Your cultivator starts at sixteen, with plenty of years ahead: &lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;begin their life for free in the browser&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://idlecultivation.com/immortal-sect?src=devto" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ry5ba73ahswb860ofof.png" alt="Myriad Immortal Sect, the game this devlog is about. Play it free in the browser" width="798" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedesign</category>
      <category>writing</category>
      <category>indiedev</category>
      <category>devlog</category>
    </item>
  </channel>
</rss>
