Uma interface que se acha sozinha
Refizemos o caminho de quem abre o jogo pela primeira vez, do título até a primeira sala, e a barra de baixo virou o lugar onde tudo se encontra. Antes, metade do jogo só existia para quem sabia onde procurar.
Por quê
Fizemos uma revisão de cada tela, comparando o que o servidor oferece com o que a interface mostra, e a lista assustou. O Esc derrubava a sessão e o “voltar” do Android fechava o app. Gastar 3 chaves numa lenda não pedia confirmação. Equipar uma peça dependia de um tooltip que não existe no celular. A ordem das skills na barra era simplesmente a ordem em que o código guardava os dados. E criar uma conta passava por quatro telas antes de jogar.
Como funciona
A tela de título tem Jogar e Treino. O login lembra o usuário e envia com Enter. Quem já tem time entra direto na cidade com o último time usado, e conta nova passa por um assistente, “Sua dupla”: escolhe duas classes, vê a reação que elas fazem juntas, ajusta a aparência e cai na cidade.
Na cidade, a barra de baixo tem Ficha, Skills, Bolsa, Mapa, Agenda, Guilda, Chat e Menu, com bolinhas vermelhas quando há algo para fazer (pontos para distribuir, baú que já dá para abrir, lenda grátis na semana). Na sala ficam as skills, os dois personagens, o Chat e o Menu. Sair da sala foi para o Menu, com confirmação, e um botão grande “Voltar à cidade” aparece quando a sala termina. Só um painel fica aberto por vez: o Esc e o voltar do celular fecham o que estiver aberto e, sem nada aberto, abrem o Menu. Nunca desconectam.
A Ficha traz atributos com +1 e +5, tomos, ascensão e equipamento com o boneco no meio. Tocar num espaço mostra as peças que servem, com a diferença de atributos em verde e vermelho. Em Skills, a árvore fica agrupada em aprendidas, disponíveis e bloqueadas (com o motivo), e você escolhe quais vão na barra da sala e em que ordem. A Bolsa tem abas de itens, equipamento, baús e comida, e os tomos são usados direto dali, em qualquer personagem do time.
O Mapa mostra a cidade: toque num portal ou prédio e o personagem anda até lá, desviando das casas. A Agenda reúne a Incursão, as quatro lendas (grátis ou pagas nesta semana), o modificador das dungeons, as chaves e os baús guardados. Dá para trocar de time, editar, apagar e criar personagem sem sair do jogo. Tocar em alguém na cidade abre um cartão com o time dele, a guilda e o equipamento, com Trocar, Convidar pro grupo, Convidar para a guilda e Denunciar. O Chat tem abas Perto, Todos, Grupo, Guilda e Sistema, com histórico.
Não pusemos tutorial forçado. No lugar há um Manual com 13 capítulos curtos (tecla H ou Menu) e 17 dicas que aparecem uma vez cada, na hora certa, com um “Saiba mais” que abre o capítulo. O Treino continua sendo o lugar de praticar a troca e as reações.
As Opções têm tremor de tela, números de dano, idioma, atalhos, os créditos da arte emprestada e a versão do jogo, e a Loja estelar mostra as taxas. Os avisos do servidor viram um aviso no topo da tela em vez de sumir no chat.
Próximo passo
Botões do tamanho do dedo nos painéis antigos e a tela nítida no celular.
Mudanças
- feat(client): UI foundation for the interface phase
UiRoot keeps one panel open at a time, a modal stack, toasts and the top status strip; Esc and the Android back button close the open modal, panel or chat and otherwise open the Menu, never disconnecting (quit_on_go_back off). UIPanel is the standard frame for new panels: 624x324 above the bar, title with a 32 px close button, tabs, scrolling content and touch-sized helpers. Old panels plug in through PanelAdapter. The bottom bar has eight city buttons (Character, Skills, Bag, Map, Agenda, Guild, Chat, Menu) with red badges computed from the bag view, and Chat and Menu in rooms; leaving a room moved to Menu with a confirmation, plus a big Back to town button when a room ends. Orbs in town show the lead character's real HP and MP; the inventory view now carries derived stats and active food. Notices are toasts too. C K B I M J G shortcuts, Q swaps, E only with --dev. Title screen with Play, Training and dev modes behind --dev; login remembers the username, submits on Enter, can show the password and validates locally; a returning account goes straight to town with its last team. A new login tells the old session it was replaced instead of it trying to reconnect, the reconnect overlay counts down and can give up, disconnects show a modal, and a paid legend attempt asks for confirmation before spending keys. Protocol 18.
- feat(client): Character and Skills panels with a configurable room bar
Character (C) replaces the old Team panel: an A/B selector for the two team members and three tabs. Status shows level and XP, tomes from the bag with Use 1 / Use 10 / Up to the gate, attribute points with +1/+5 and the next point's cost, derived stats and the ascension gate with its cost. Equipment puts the six slots around a large paper doll of the character; tapping a slot opens a drawer with the current piece and the bag pieces the class can wear, with the stat difference in green and red and Equip / Unequip buttons. Job shows job level, points and the second job choice behind a confirmation. Skills (K) lists the job tree grouped as learned, available and locked (with the reason), with Learn and +1 and their costs. The room bar at the bottom has six slots: tap an active skill, then a slot. The order is saved per character in user://skillbar.cfg and _active_skills() follows it, so the room bar and keys 1-6 match; free slots take the remaining skills in the old order. Both panels only look in a room. The armory view now carries affixes so the client can compute stat differences, the character badge also counts payable gates, and team_ui.gd is gone. tools/screenshot.gd opens any registered panel and takes --tab, --scroll and --set.
- feat: Teams menu, duo wizard, player card and chat tabs
Server: rq_switch_team swaps the active team in town without leaving it (same pid and position, city info and look re-sent, welcome_city plus inventory and a new teams_rpc reply). rq_leave_city drops the player out of town back to the account screens without disconnecting. rq_edit_team, rq_delete_team and rq_delete_character go through new AccountStore methods: a character in a team cannot be deleted and its gear is unequipped back to the account, the team in use cannot be deleted, and editing the team in use rebuilds the session in place. In town these reply with teams_rpc so the account screens do not pop up. The city static info now carries a player card (both characters with class, level and gear, plus the guild tag). Protocol 19. Client: Menu > Teams panel (TeamsPanel) lists the 3 teams and 6 characters with Play with this team, Edit, Delete and New character (leaves town, opens the creation screen and comes back with the same team). New accounts get the one-screen "Your duo" wizard: 5 class cards with role, weapon and elements, a strip with the reactions the pair makes, quick random looks and suggested names (role, elements and names live in data/classes.json), then create_character x2, create_team and enter_city. Tapping a player in town opens a card with their active character, partner, guild and gear and Trade, Party, Guild invite and Report. The chat has Near, All, Party, Guild and System tabs with 100 lines each, sends to the open tab, keeps /g /gu /p /denunciar, and moves to the top while typing on mobile. Tests: AccountStore edit/delete unit tests; loot_test switches to a second team, checks peer_chars, position and the guild tag on the card, refuses deleting the team in use, and leaves and re-enters town.
- feat(client): manual, contextual hints, options and gacha rates
Manual (Codex) with 13 chapters in data/manual.json, bilingual in the data (paragraphs, headings and tables in PT and EN). ManualPanel lists the chapters and opens each one with a back button; it opens from the Menu (city, room and training), the H key and the "Learn more" of every hint. Team and Elements chapters have Train now, which starts the offline Training only outside an online session. Hints: the 17 first-session triggers from the UX review plus one for Training, as a small card above the bar with Ok and Learn more, one at a time (queued), hidden while a panel or modal is open, and shown once per account (user://hints_<user>.cfg, "treino" offline). main.gd only forwards city, portal, room, sim events and the bag view. Options panel replaces the placeholder modal: interface scale (saved; disabled until the anchored canvas_items layout, since content_scale_factor under viewport stretch crops the HUD), screen shake and damage numbers (respected by main.gd), language (reloads outside a session, otherwise applies on next start), show hints again, the shortcut table, CREDITS.md rendered as text (already in every export include_filter) and version + protocol. application/config/version is now set and a test keeps it equal to the export presets. The star shop gets a Rates section read from data/gacha.json: 5 star 2%, guarantee at 30 per banner type, no 50/50, duplicates to fragments. tools/screenshot.gd can open manual/options through UiRoot, show the gacha rates and take --ui-scale.
- feat(client): Bag, Map and Agenda panels
Bag (BagPanel) replaces the old bag_ui: gold and keys in the title and four tabs. Items is a grid whose detail uses tomes on a team character, eats food or points to the Market; Gear lists every piece with who wears it or whether it sits in Storage; Chests shows cost, expiry and Open; Food shows the active dish and drink with time left plus food to eat. Map (MapPanel) draws the town from data/city.json with buildings, numbered portals (name, type, minimum level in the side list) and you. Tapping a destination closes the panel and walks there; CityState.route picks a straight line or a one or two point detour around buildings, covered by a test that walks to every portal and building from several starts. In a room it only shows a message. Agenda (AgendaPanel) reads the new Hub op agenda/view: incursion status, countdown, theme, chest, chests left and top 3; the four legends with minimum level and free this week or 3 keys; the weekly dungeon modifier; keys; pending chests. It replaces the incursion dump into chat. The Agenda badge counts an open incursion plus free legends the team can already enter, and the view is requested on entering town. Fixes the incursion never opening: open_days came from JSON as floats and Array.has(3) did not match 3.0. Armory view now says where a piece is stored and who wears it; chest views carry the chest id for Loc. screenshot.gd opens bag, map and agenda through UiRoot and takes --tab, --detail and --seed (fills the host account for prints).