Una interfaz que se encuentra sola
Rehicimos el camino de quien abre el juego por primera vez, desde el título hasta la primera sala, y la barra de abajo se volvió el lugar donde se encuentra todo. Antes, la mitad del juego solo existía para quien sabía dónde buscar.
Por qué
Hicimos una revisión de cada pantalla, comparando lo que ofrece el servidor con lo que muestra la interfaz, y la lista nos asustó. Esc tiraba la sesión y el “volver” de Android cerraba la app. Gastar 3 llaves en una leyenda no pedía confirmación. Equipar una pieza dependía de un tooltip que no existe en el celular. El orden de las skills en la barra era simplemente el orden en que el código guardaba los datos. Y crear una cuenta pasaba por cuatro pantallas antes de jugar.
Cómo funciona
La pantalla de título tiene Jugar y Entrenamiento. El login recuerda al usuario y se envía con Enter. Quien ya tiene equipo entra directo a la ciudad con el último equipo usado, y una cuenta nueva pasa por un asistente, “Tu dupla”: eliges dos clases, ves la reacción que hacen juntas, ajustas la apariencia y caes en la ciudad.
En la ciudad, la barra de abajo tiene Ficha, Skills, Mochila, Mapa, Agenda, Gremio, Chat y Menú, con puntitos rojos cuando hay algo por hacer (puntos por repartir, un cofre que ya se puede abrir, una leyenda gratis en la semana). En la sala quedan las skills, los dos personajes, el Chat y el Menú. Salir de la sala se movió al Menú, con confirmación, y aparece un botón grande “Volver a la ciudad” cuando la sala termina. Solo un panel queda abierto a la vez: Esc y el volver del celular cierran el que esté abierto y, si no hay ninguno, abren el Menú. Nunca desconectan.
La Ficha trae atributos con +1 y +5, tomos, ascensión y equipamiento con el muñeco en medio. Tocar un espacio muestra las piezas que sirven, con la diferencia de atributos en verde y rojo. En Skills, el árbol está agrupado en aprendidas, disponibles y bloqueadas (con el motivo), y tú eliges cuáles van en la barra de la sala y en qué orden. La Mochila tiene pestañas de ítems, equipamiento, cofres y comida, y los tomos se usan directo ahí, en cualquier personaje del equipo.
El Mapa muestra la ciudad: toca un portal o un edificio y el personaje camina hasta allá, esquivando las casas. La Agenda reúne la Incursión, las cuatro leyendas (gratis o de pago esta semana), el modificador de las dungeons, las llaves y los cofres guardados. Se puede cambiar de equipo, editar, borrar y crear personaje sin salir del juego. Tocar a alguien en la ciudad abre una tarjeta con su equipo, su gremio y su equipamiento, con Cambiar, Invitar al grupo, Invitar al gremio y Denunciar. El Chat tiene pestañas Cerca, Todos, Grupo, Gremio y Sistema, con historial.
No pusimos un tutorial forzado. En su lugar hay un Manual con 13 capítulos cortos (tecla H o Menú) y 17 consejos que aparecen una sola vez cada uno, en el momento justo, con un “Saber más” que abre el capítulo. El Entrenamiento sigue siendo el lugar para practicar el cambio y las reacciones.
Las Opciones tienen temblor de pantalla, números de daño, idioma, atajos, los créditos del arte prestado y la versión del juego, y la Tienda estelar muestra las tasas. Los avisos del servidor se vuelven un aviso arriba de la pantalla en vez de perderse en el chat.
Próximo paso
Botones del tamaño del dedo en los paneles viejos y la pantalla nítida en el celular.
Cambios
- 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).