The First Playtest: Forty Notes and What Each One Became
The developer played the game properly for the first time and wrote down everything that bugged them. How one long message turned into ten parallel agents in an evening, which notes were a single number in a JSON file and which were real work, and what the AI had to ask back.
I don't feel so powerful, especially on the lower levels. Can you adjust the health slightly?
The list #
Until this week, almost every number in Dekiro came from a model. The balance post describes a Monte Carlo career and a combat simulation with bots, and it says plainly that none of it had met a human. Then the human sat down with the Windows build, played for an evening, part of it with a friend,1 The bugs that only showed up with a second player are in the post "Multiplayer Bugs Only a Friend Can Find". and sent one long message. It starts like this:
Items in shops don't show stats, so there is no way of knowing if they are better or not. HP regeneration out of combat is way too low, let's adjust that to be higher. The potions also heal too little. EXP progression can feel a bit faster, let's scale to 20 hours. I want to have an option to "restart here" or "restart in town" instead of restarting in the city.
It goes on for nineteen points: buff skills that run out too fast, dropped items that vanish, lag when someone uses a portal, switching schools, upgrade materials, a white outline for loot, a more readable font, skills that stay behind when you move, a classic item from a popular Korean MMO, which the developer knew by its German name (Tapferkeitsumhang), Shadow minions, an XP potion, mouse capture, the camera, and trading skillbooks.
Over the next ninety minutes more notes followed, one or two lines each: a ten-slot hotbar, party members on the big map, tooltips, skills hidden under the street, grandmasters staring at their own buildings, a sprint toggle, Game Master tools, townsfolk out on the roads, a minimap without trees, an easter egg, wrong quest markers, named chickens, a tavern, a chat, a skill rank above Grandmaster, and one question: "Do bosses have HP recovery?"
About forty notes in all. This post goes through what each one became.
From a list to ten agents #
The coordinator workflow from the subagents post was built for exactly this. Within two minutes of the first message, four agents were running, each with its own slice of the list and its own files:
| Agent | Took | Owned |
|---|---|---|
| UI | shop tooltips, respawn choice, mouse capture, camera drag, loot outline, font comparison | the windows, the HUD, the camera rig |
| Gameplay and balance | regen, potions, the 20-hour pace, drop lifetime, upgrade materials, Cape of Valour, XP potion, Shadow rules, school switching, book exchange | data tables, the balance model |
| Skills | 4-minute buffs, buff particles, skills that follow the caster | skills.json, the skill effects |
| Network | portal lag | map loading |
Every later note went either to the agent already working in that area (the UI agent ended up with eight extra tasks, from the hotbar to the XP tooltip) or to a new agent when it was its own thing: GM tools, townsfolk on the roads, baked map pictures, the easter egg, the chat, and the Grandmaster ranks. Ten agents in total. The coordinator did two small ones itself between reports: the grandmasters' facing and the boss recovery.
The brief they all shared was one file,2 playtest_brief.md in the coordinator's scratchpad; each agent's own prompt only added its tasks, in the developer's words. with the rules from the subagents post: own your files, edit shared ones only with exact-match edits and re-read first, don't fix
other people's half-finished work, run the full tests, look at your screenshots, don't commit. Those rules
were tested hard this time. The agents' reports are full of lines like "the compile broke twice because of
that same unfinished skills work" and "the earlier potion-heal failure no longer shows". The test suite
went from 15,085 checks before the list to 17,695 at the end of the evening, and at most moments some of
them were failing because somebody else was mid-edit.
The one-line changes #
A surprising share of the list was numbers. Because content lives in data, these were edits to a JSON file or a constant, plus a test and a rerun of the balance model to see what else moved.
Regeneration. Out of combat (no damage dealt or taken for 5 seconds) players and companions now
regenerate 4% of their HP and mana per second, so an empty bar is full again in about 25 seconds. Three
constants in attributes.gd. In a fight nothing changed.
Potions. Each tier heals about 1.6 to 1.9 times as much, and costs about a quarter more:
| Potion | Heal before | Heal after |
|---|---|---|
| Red Potion (S) | 80 | 150 |
| Red Potion (L) | 250 | 450 |
| Greater Red Potion | 700 | 1,100 |
| Superior Red Potion | 1,300 | 2,000 |
One small code change came with it: the potion key used to drink the weakest potion in the bag. It now drinks the smallest one that fills what's missing. With the new regen on top, the model's character drinks 30 to 190 potions an hour instead of 175 to 430.
Twenty hours to level 90. This one was a number too, but it needed the model. The XP curve's exponent went from 2.58 to 2.37, which makes the bar at level 90 about 3.4 million XP instead of 8.7 million, and every quest's XP followed the bar. The model now reaches level 90 in 20.7 hours (it was 38.6). Everything that was paced against the old 40 hours had to move with it: monster gold up a third, Fullmoon weapons twice as likely from Shadows and bosses, Sunstone more common in the desert, Sun Tomb key fragments doubled.
Lighter low levels. "I don't feel so powerful" was the vaguest note on the list. The coordinator read it
as monster health (the combat pass had raised low-level monster HP about 2.7 times) and asked back in case
it meant the player's own health. The fix is a level factor in monsters.json: x0.65 up to level 15,
tapering to x0.85 at 30 and none from 40. A level 3 monster now takes 2.1 hits instead of 3.2. Bosses were
first included and then exempted, because the Crypt Lord fell in 40 seconds with two companions, which is
not a boss fight.
Upgrade materials. "Shadow Shards should only be required from +5 and then go up as they do right now
from +1." Taken literally: +1 to +4 now need no shards at all, the attempt to +5 needs what +1 needed (one
shard), +6 what +2 needed, and so on. "Shadow Cores only with items on level 30+" became a new key on a
material, "min_item_level": 30, which the upgrade window and the server both read. That's the whole
change: nine lines of upgrades.json and one check.
Shadows. Three notes landed in one small block of data:
"shadow_waves": { "engaged_for": 9.0, "calm_after": 60.0 },
"shadow_break": { "heal_share": 0.25, "heal_radius": 25.0, "minions_die": true }
A Shadow now spawns nothing until someone hits it, keeps spawning while it was hit in the last 9 seconds, and goes back to sleep after 60 seconds alone. When it breaks, its monsters die with it (you still get their XP, but not their loot: otherwise piling them up and breaking the stone would be free loot), and everyone within 25 m heals 25% of their max HP. The coordinator decided companions get the heal too, and said so.
Two new items. The Cape of Valour (that MMO's Tapferkeitsumhang) drops from monsters level 10 and up at
1% (3% from Elites). Swing it and every monster on the map comes running at you for 40 seconds; bosses and
Shadows ignore it, and it doesn't work in safe zones. The Potion of Insight doubles XP for 15 minutes at
the requested 0.1% drop chance; another one adds 15 minutes, up to an hour, and death doesn't wash it out.
Both are a few lines in items.json plus an icon and a model from the Blender pipeline. The cape needed one
new effect, a map-wide taunt.
Schools and books. Switching schools is allowed while no skill has reached Master and the character is
below level 30, where the school's own questline starts. Skill points come back one to one. Trading a
skillbook of another school for a random book of your own works at your own grandmaster, then waits an hour
of real time. Both rules are two numbers in a new data/schools.json.
Buffs. War Cry, Iron Skin, Haste and Blessing now last 4 minutes with a 60-second cooldown, so you can keep them up the way the classic does. Two values went down: held up permanently, the old numbers would have given a Grandmaster 86% damage reduction from Iron Skin, or double running speed from Haste.
The ones that were real work #
Other notes sounded just as small and weren't.
"Restart here" or "restart in town". The game had one respawn: back to the map's spawn. The new death window offers both. In town is available after 3 seconds, at full health, in the town or gate camp the character last stood in, which the character now remembers and saves.3 On load the remembered town is kept only if it's a real, non-dungeon map whose safe zones that character has visited: a server can't trust a client's save file. Here waits 10 seconds and gives 50% health and 5 seconds of protection that your own first hit ends, so it can't be used to hit a boss for free. In a dungeon, "town" means the entrance, so the party's run isn't thrown away.
Shop tooltips. The shop rows simply had no tooltip. They now show the bag's tooltip, compared with what you wear.
Buff effects. "For all the passive skills I would like to have a particle effect on the character or
weapon." Every active buff now has its own small emitter: embers from the weapon hand for War Cry, steel
flakes round the waist for Iron Skin, wisps at the feet for Haste, motes from a halo for Blessing. Other
players see them, which meant a new synced value on the player (buff_look, for example
"war_cry:2,iron_skin:1"). The coordinator's own verdict on the screenshots was that they read as "sparse
specks", not yet as an aura, and offered a denser pass.
Skills that follow you. Spins, Blade Storm, Consecration and the self buffs now move with the caster,
both their effects and their damage area, on the server. Aimed and thrown skills (Charge, Light Lance, Night
Blades) stay where they land. The rule is in data: circle, arc and self skills follow unless a skill's
"fx" says otherwise.
Skills under the street. The developer's first guess was a masking problem: "It seems a masking issue
of the skill, tower buildings and NPCs somehow?" The sprite outline does use a stencil mask, so it was a
good guess, and the skills agent checked it first. The real cause was draw order. Roads and paved squares
have soft edges, so they are transparent materials, and transparent things are drawn in priority order.
Floors were at priority 0, skill effects at -2, so the floor was drawn after the effects and covered them.
Consecration was completely invisible on the Vale's square. The fix is one constant, FLOOR_PRIORITY = -20,
plus ground effects that now follow the terrain's height and tilt with slopes instead of sitting at a fixed
6 cm.
Quest markers. "Some NPCs have ! on top even when there is no quest action possible; some NPCs that have quests don't." The audit found the "!" wasn't connected to quests at all. It was a fixed label for NPCs whose role was "quest", and only Elder Mira had that role. So Mira always showed it and every other quest giver never did. Markers are now computed from the character's own quest state with the same conditions the NPC window uses: a yellow "!" for a quest you can take, a light blue "?" for something to hand in. A test checks every NPC on every map for two characters.
Portal lag. "It lags a bit for other players if someone uses a portal." The host was building the whole target map in a single frame, which on the Shadow Marsh took over six seconds, frozen for everyone. Maps now build in slices of a few milliseconds per frame.4 The measurements and the stepped map build are in "Multiplayer Bugs Only a Friend Can Find".
Game Master tools. The developer asked for GM controls on their own Steam account: give a Fullmoon
sword, add gold, change levels and points. The panel was the easy part. The hard part is who counts as a GM.
The answer is that only the server decides, from identities it can verify: its own Steam login, or Steam's
authenticated mapping from a lobby peer to an account. A client that joins by IP address is never a GM, and
an ID sent in a message is ignored.5 tests/net_bot.gd sends exactly that: a client joined by IP claiming the developer's account. The server logs the refusal. Every GM action
goes through the normal character systems, so a reload's sanitizing keeps it, and there is no "gm" flag in
the save, because a client could write one into its own file.
The chat that wasn't needed #
On day two the developer had ruled chat out: "Chat is not needed. Most will be in Discord anyway." It sat in the backlog as "not planned". The playtest changed that in one sentence:
There is no way for me to understand what my quest rewards were that I have just received. It might be time to add a chat, so we can have system messages where these rewards can be dropped into, and players can also write things in.
and a follow-up four minutes later: "every popup that appears on screen should then be shown in that chat to the one player that triggered that message, so a user can always scroll back if the message disappeared too fast."
The second sentence decided the design. Instead of adding chat lines in forty places, the chat agent hooked
the one function every popup over your own character goes through (DamageNumber.spawn_text), so popups
added later land in the chat automatically. Damage numbers and other players' popups are skipped, repeats
merge into "(x2)", pickups merge into one line, kill XP is summed every 4 seconds. Player chat is
server-authoritative like everything else: the server stamps the sender's name from its own copy of the
player, strips markup so nobody can fake a system line, caps messages at 200 characters and 5 per 5
seconds, and routes say, party, whisper and shout only to the right peers.
What got asked back #
An agent working from a one-line note has to fill in details. The rule from the subagents post is to decide sensibly and say so, and to ask where it's a matter of taste. After this round the open questions were:
- Respawn values. 10 seconds and 50% health for "here", 3 seconds for town, 5 seconds of protection, town after 3 minutes without a choice. All guesses; the developer will feel them.
- The font. The developer asked for "a bit more readable" and "any suggestions?". The answer was a
comparison sheet rather than a switch: the same HUD, tooltip, shop and quest tracker in four candidates.
Jersey 10 (current) crowds its letters; Fusion Pixel 12 stays pixel art, is clearly spaced and also covers
Chinese and Japanese, at about 20% more width; m6x11plus is very readable, but its licence couldn't be
confirmed; Noto Sans is the most readable and breaks the pixel look. The recommendation is Fusion Pixel 12.
Swapping is one path in
UiTheme. The developer hasn't picked yet. - "2 minutes". "Dropped items can stay a bit longer, let's say 2 minutes." It turned out that items monsters drop never disappeared at all. Only items you drop from your own bag expired, after 20 seconds. That's now 120 seconds, and the question went back: did you mean something else?
- The Cape's reach: the whole map, as asked, or a radius like in the classic? It's one number.
- "!" and "?": two symbols, WoW-style, or a single "!" as before?
- Buff strength and cooldown: should Iron Skin and Haste be higher after all, and is 60 seconds right?
- The loot outline: 2 pixels at 1080p, white, unshaded so it reads the same at night. Enough?
One misunderstanding went the other way. "Skills should also be accessible with the shortcut V," then a minute later "ah sorry, F not V", then, asked whether F should open skills instead of talking to NPCs, "don't adopt this", and finally "V as an additional shortcut (next to K) for skills would be great." The result: K and V both open the skill window, F stays the interact key, and players who saved key settings before still get V, unless they've bound it to something else.
The small ones, and one question #
Some notes took a few minutes. The four grandmasters stood facing their school halls; the map generator now
turns them to the square (one atan2 each), and every NPC turns toward whoever talks to them. The oversized
colour picker was Godot's full editor dialog at two to three times UI scale; it's now a square, a hue strip
and a hex field. Alt names gold and items on the ground. The hotbar has ten slots (touch keeps eight, because
ten wouldn't fit at finger size).
A few notes were bigger than they sounded and have their own posts: townsfolk spread out onto the roads, a tavern for the "Bierlinger Tribe" and seven named hens;6 "A Tavern, Named Hens and Cats: The Small Stuff". minimap pictures with trees and buildings, baked from top-down renders;7 The minimap post (26) covers the baker: a top-down render of each map in Godot, then a stylising step in Python. and Grandmaster ranks G1 to G10 with a hidden rank above them and a study item that drops from bosses by chance, which gets its own post once it's finished. There is also an easter egg for a friend, which stays a secret.
And the question. "Do bosses have HP recovery?" They didn't: you could wear a boss down, die, run back from the entrance and continue where you left off. The coordinator suggested the classic MMO's rule, and the developer set the numbers:
The suggestion makes sense: if no player hits for 20 seconds, 2% per second is OK.
That's BossAI.recover(): a boss nobody has hurt for 20 seconds heals 2% of its max HP a second, so it's
full again within a minute. Phase triggers (summons at 66% and 33%, the enrage) still fire only once per
fight, so healing back over a threshold doesn't replay them.
By the numbers #
- About 40 notes, from 19 in the first message to a question at the end.
- 10 agents plus the coordinator, the first four briefed within two minutes.
- 15,085 → 17,695 test checks over the evening.
- 38.6 → 20.7 hours to level 90 in the model.
- 6,260 → 18 ms: the host's worst frame when someone first travelled to the Shadow Marsh.
- 2 of the notes turned out to be misunderstandings worth asking about; 0 were declined.
None of it has been playtested a second time yet. At the time of writing it's in the working tree, waiting for the last agents and the full check before the commit.
Takeaways #
- Playtest notes are mostly data, if your content is. Potions, regen, XP pace, upgrade materials and Shadow rules were numbers. The balance model is what made changing them safe in minutes rather than days.
- The vague notes need a reading and a question. "I don't feel powerful" could mean two things; the agent picked one, said which, and offered the other.
- Ask about taste, decide about mechanics, and say which is which. The font, respawn timings and marker symbols went back to the developer; loot-free Shadow minions and boss phases that don't replay were decided and explained.
- Hook the funnel, not the callers. One hook in the popup function put every message into the chat, including the ones nobody has written yet.
- A good guess still needs checking. "A masking issue" was a sensible hypothesis and wrong; the cause was one priority number.
What's next #
Several of these notes came from playing with a friend, and some of the bugs behind them can only be found that way: players sunk into hills, a clock that disagreed, and a host that froze when someone took a portal. That's the next multiplayer post.