Getting ready for the closed beta
We started the phase of getting the game ready for people outside the team. None of this shows up on the combat screen, but it’s what separates a test among friends from a beta: coming back after a disconnect, moderating chat and measuring what happens.
Why
Our own art doesn’t start until April 2027, and until then we can handle everything a beta needs that doesn’t depend on art. So we reorganized the roadmap: there’s now a phase just for the beta and another just for the interface, both before the art.
How it works
If your connection drops in the middle of a room, your team stays frozen there for 60 seconds. The game tries to reconnect on its own every 2 seconds and, when it succeeds, you return to the same room with the same team, without typing your password again. We tested it by deliberately dropping a bot’s connection inside the Burrow, and also over the internet, against the test server. Damage, hits and the room-clear notice now go through a channel that guarantees delivery; before, a packet lost on the internet could erase a damage number.
Chat has a profanity filter in Portuguese, English and Russian, which understands accents and “l33t”. Repeated messages in a row are blocked, and three offenses in 10 minutes mute the person for 10 minutes. You can report a player by tapping them or with /denunciar name reason, and the report carries their last messages as context. The staff has GM commands in chat: mute, ban, kick, announce, generate invites and give items. A banned player sees the reason and the end date when trying to log in.
The server can require an invite code at sign-up, and that’s how the beta will be closed. Anyone running an old version of the game is told so and gets the address to download the new one, instead of being dropped with no explanation.
The server also records, with no name, email or IP, what we need for balancing: how long people play, whether they come back the next day and the next week, which reactions they use, how often they swap characters, how many chests they open per day. That will tell us whether the keys are too stingy or too loose. For load, we put 50 bots in the town of the test server. Each used about 2 KB/s, the server used 117 MB of memory and the machine barely noticed.
Finally, we did a full review of the interface, which became phase 4 of the roadmap: getting into the game in fewer screens, a bar with Character, Skills, Bag, Map and Agenda, a manual to consult whenever you want instead of a forced tutorial, and finger-sized buttons on phones.
Next step
Forming a party before entering the room, weekly dungeon modifiers and the English translation.
Changes
- feat(net): 60 s reconnection with session tokens
Login hands out a session token. When a connection drops inside a room the team stays parked as a ghost for 60 s; the client retries every 2 s for up to 60 s and resumes with the token instead of the password, landing back in the same room with the same team, or in the city with the team it had. A new login kicks the stale session instead of refusing with already_online. Peer timeouts are 4 to 10 s on both ends so drops are noticed quickly. The network test drops bot1 inside the Toca and checks it returns to the same team. Protocol 14.
- feat(server): moderation, GM commands, invites and telemetry
Moderation (server/moderation.gd): whole-word chat filter per language with accent and leetspeak folding, repeat blocking, automatic 10-minute mute after three hits, mutes and bans with audit, player reports with the reported player's last chat lines as context, admin accounts, and a token bucket against command floods that kicks after five strikes. GM commands over chat (/gm ajuda): kick, mute, ban, unban, announce, invite codes, reports, give items, gold or essence. data_dir/server.json holds invite_only and the admin usernames; registration takes an invite code when the beta is closed. Banned accounts get the reason and the end date at login. Outdated clients are told to download the new version instead of being dropped silently. Telemetry (server/telemetry.gd): pseudonymized JSON Lines per day with sessions, room runs, reactions and swaps per run, chests, gacha, trades, market, cooking and a CCU sample every minute; tools/telemetry_report.py prints DAU, D1/D7 retention, CCU, clear rates, reaction share and the key economy. Protocol 15.
- fix(net): room events on a reliable channel
Events rode in the same unreliable packet as the binary tick, so any lost packet over the internet dropped damage numbers, casts and room banners. The tick stays unreliable; events go reliable and only when there are any. The server flushes stdout on print so journald shows the log. The network bot waits 1.5 s for the cast, enough for a real round trip. Protocol 16.
- docs: client UX review and the two new roadmap phases
docs/fluxo-do-cliente.md reviews the client flow (login to first room, bottom bar, panels, onboarding, touch) and lists a 35-item backlog. The roadmap now has phase 3 (ready for the beta, current) and phase 4 (interface and first session) before own art, on the site and in the design doc.