Everyone gets their own team
You can now create an account, build characters and enter the room with them. Before, everyone was the same Mage and the same Warrior. Now each player picks class, body, hair, hair color, skin tone and height, puts two characters together in a team and takes that team into the fight.
Why
Character swapping is the center of the game, and it only feels personal when both characters are yours. We also needed accounts before anything that depends on progress: inventory, levels, chests.
How it works
Login is with email or username and a password. The username is unique and is what other people see, and the email never leaves the server. The password is never stored: the server keeps a derivative of it (PBKDF2 with 200 thousand rounds and a different salt per account), computed on a separate thread so the room doesn’t stall when someone logs in. The connection is encrypted, for now with a certificate generated by the server itself. A real certificate goes in before we open to the outside. There are six login attempts per minute, then a wait.
Each account has up to six characters and three teams. The same character can be in more than one team, and character names can repeat.
There’s no gender field. There are two bodies, twelve hairstyles, eight colors, five skin tones and three heights. Color comes from the shader, so each new combination costs no new art.
Every character starts at level 1, with 1 in each attribute and one skill. Since there’s no way to level up yet, in the test room it gets a prototype kit (level 5 and the class’s test skills). What’s saved on the account is the real character.
The automated test now covers the whole path: it tries to log in without an account and is refused, creates the account, creates two characters, builds the team, enters the room with another bot and checks that the two see each other. It also checks that no password ended up on disk.
On mobile
Until now mobile could only walk, because the skill bar was just a drawing. Now each skill is a touch button, with a Swap button beside it. Tapping the ground is still walking, and tapping the bar never turns into movement.
Next step
The town: a place where everyone can see each other, with chat, before entering a room.
Changes
- feat(auth): accounts, character creation and teams
Server-side AccountStore (one JSON per account, email/username index, atomic writes) with PBKDF2-HMAC-SHA256 (200k iterations, per-account salt) computed on WorkerThreadPool; DTLS on the ENet connection with a self-signed dev certificate; login rate limit; one session per account. Characters start at level 1 with one skill and validated appearance (2 bodies, 12 hair styles, 8 hair colors, 5 skin tones, 3 heights); teams pair two characters; rooms use a prototype kit until progression exists. Client gets login/register, home, character creator with live preview and team builder. Room state only goes to peers in the room. End-to-end network test covers the whole flow.
- feat(client): tappable skill bar and swap button for mobile
Taps on the action bar fire the skill or swap instead of walking. tools/tap_test.tscn simulates touches to check it.