AIR 13 parity: settings, chrome, room, inventory, chat, infostands, moderation - #476
Merged
Merged
Conversation
…ne and wired-whisper preferences The official client keeps three chat preferences per user (free flow or line by line, bubble width, scroll speed), a preference for who may trigger the friend-online bubble (everyone, relationships only, nobody) and a switch that silences wired whispers. All five live in local storage with the other client preferences; the renderer has no composer for them yet, so nothing reaches the server.
…cial frame and scrollbar by default The Ubuntu family name pointed at the condensed file, so every window read condensed where the official client uses Ubuntu regular 12. The tooltips now draw the official blue bubble instead of the browser title, every card gets frame 3 and the classic scrollbar unless it opts out, and the reconnect overlay speaks through the disconnected.* keys in the shape of the official alert.
…odel The flip command sent a scale of -1 that the renderer stored as is, so the room turned and never turned back. The renderer now keeps a flip state; the camera and the thumbnail camera refuse only a zoom below one or a flipped room, as the official does; the zoom has one table up to 16x, animates in log2 space, zooms toward the cursor with Ctrl and the wheel, and the plain wheel turns a furni being placed. The floor plan pans with Shift and the wheel.
…en trade slots, purse deltas The inventory filters by type the way the official furni view does; the marketplace shows an offer's price history and volume, the make-offer form its average, lowest and suggested prices, the own offers a status filter, search, recall-all and mark-as-seen; the trade has ten slots with each side's item count and credit value; the purse shows the change it just received; the catalog resizes vertically, the trophies page has previous and next model, the confirmation shows the LTD raffle line and the targeted offer offers credits when short.
…t follow-up, bubble rules Fourteen player commands the official client has (visit, roomid, cam, fullscreen, ignore, unignore, mutepets, moonwalk, habnam, hidemouse, wired menu shortcuts, link) join the chat input; the chat history offers to ignore a speaker and springs back to the latest line; a report ignores and unfriends the reported user except for topic 21, asks for a reason on unlawful activity and refuses a description too short; bubbles keep off the desktop margins, cap their height, glide into place, treat highlight links as hints, and stack line by line when that chat mode is chosen; new users get the chat reminder and a help button; the friend list says when it is full or a request went out.
…s from the official client The user infostand shows the badges rank and the real name; the furni infostand inspects wired furni, rents, extends, buys out and places more; the pet infostand kicks, moves and rotates; the own avatar menu has jump, a more submenu and the minimized mode, the others' menu opens the profile and the full ambassador mute set; the room tools gain achievements and camera, a browser-like history and a persisted collapsed state; a panel with the room's tags slides out on entering; the toolbar's navigator icon lists home, favourites, visited and frequent rooms on hover; the users chooser filters by type; the room info shows the ranking and the popup the group icons; the share dialog gives an embed code.
…, moderation tool, notification feed The user info links its sanction counters to housekeeping and fades the last sanction from red to black over 48 hours; the room and message tools offer canned templates; the issue browser picks the next priority issue, releases all and shows score, category, time, source, target and message count; a moderation tool bans, warns, gives coins and furni; the help index opens the report status window; the notification centre keeps a feed with a stream and per-category settings, and knows the friend-offline, room-messages and sound-machine bubbles.
SimoLeoLife
marked this pull request as draft
September 6, 2026 20:15
… message shape The bubble height cap read a per-message text size this branch does not carry, and the zoom anchor met the pixi Point the published engine still types; the size comes from the stored preference and the anchor is cast until the companion renderer change widens the type.
The published engine still types the anchor as a pixi Point while reading only x and y; the companion renderer change widens it to a plain point, so the cast leaves with it.
Ban, warn, coins and furni belong to housekeeping; the client keeps the official mod tools only.
…elow the purse, movable tab The mentions window and its toolbar icon go away: the feed lists the server's mentions as their own category, with the unread badge, mark all as read, and the go-to-room and delete actions on each row, in the Notifications sections and in the Stream in arrival order. The mentions/ links open the feed instead. The feed panel docked at top-14 and covered the purse menus, so their buttons stopped answering while it was open; it now hangs above the toolbar at the bottom right. The folded tab can be dragged up and down the edge and remembers where it was left. The navigator hover menu is drawn like the official toolbar_hover layout: centred over the icon, a tail pointing at it, 238px rows in the official greys with Ubuntu bold 12.
The hover wrapper was a zero-height box centred in the slot, so the icon's absolute offsets measured from the middle and the icon sat low and clipped. The wrapper now fills the slot.
Centred on the icon, half of it left the screen: the navigator sits by the left edge. The tail still points at the icon's centre.
Half a second before it folds, as the official timer; the gap between the icon and the bubble counts as part of it; with a room list unfolded it waits two seconds and closes at once on a click elsewhere.
…mention The purse settings menu portals to the body, hangs under the purse and closes on a click elsewhere, so nothing stacked on the right side can cover it again. The folded feed tab flashes when a mention arrives, as the old toolbar icon lit up. The mentions row of the old window goes with the window.
…vigator views As ToolbarHoverCtrl.as does with showHistoryRooms / showFrequentRooms; the chevron keeps unfolding the inline list from the local history.
The default frame keeps a 35px title strip and 2px of padding inside the card, so the camera editor, the group members and information windows and the habbicon hub were 6px short and 4px narrow for their pixel layouts, and the camera checkout still subtracted the old 31px header. The cards grow by that much; the layouts stay untouched.
The booklet pages through the official do/don't pairs from the texts; the quiz asks the server for the question ids and grades through it, falling back to a static five-question session while the emulator has no handler; the tour popup arms thirty seconds after a new user enters a room and requests a guide, as GuideHelpManager does.
…al ending screen The tile shows the free games left and the HC upsell, and blocks with the countdown after leaving a game; the instructions replace the tile grid in place with the five animated pages; the results screen follows snowwar_ending with the team columns, hits and K.O.'s, the spotlights, the rematch countdown and the skill stars, all drawn from what the packets carry today.
…through the server The official composers (2506 chat preferences, 818 online indicator, 1226 wired menu settings) carry each change, and the values come back in the user-settings event on login; local storage stays as the fallback until the packet arrives.
…gory dialog and friend bar tokens Badges glow and carry the rarity tag by the official tiers; the infostand's home icon opens the user's Habbo Home page; the navigator answers the server's category selection enforcement with the official modal and reloads the own-rooms list after a settings save; the friend bar shows the per-friend notification tokens.
The official memenu_chat_settings layout: the list the server keeps for the user, add and remove through the official composers (145, 68, 1996) and results (3883, 3333), reached from the purse menu and the settings menu when user.custom.filter.enabled allows it. The masking itself stays server-side, as in the official client.
The rentable space widget (rent, rented-to with expiry, cancel for the owner or staff, the official error codes), the rent confirmation window for extend and buy-out through 2518/35 and 1071, and the catalog's info_rentables page.
…e ending packet, quiz lockout notice The badges packet now carries owner count and rarity tier per slot, so the infostand and the profile read them instead of the leaderboard cache; the snowwar ending and lobby packets carry the per-player stats and skill levels the results screen draws; the quiz tells the user when the server refuses a retry.
…ck members Hot looks as the official avatar editor has them: a tab between legs and misc listing the looks the server sends, click to load one. Group managers block a member with the kick confirmation and see the blocked list, blocked rows offer unblock (2864), as the official group members window does.
…rd track The official quest flow: campaigns with their current quest, accept, cancel, the in-room tracker with the check animation, the completed popup with the reward; the daily tasks window with progress, claim and the refresh countdown; the reward track with free and premium prizes, task filters, levels and the premium confirmation. Three entries in the ME menu with unseen counters. Packets on the ids the renderer already shared plus the custom 9450-9452 where the official ids were taken.
…p, safety lock notice and the HC room-limit promo Room messages posted, recycler finished, sound machine and friend offline bubbles; the achievement style with its category link; bubble ids that dedupe and retract, stay and display time, the stop/resume toggle; feed rows with decoration image and action button; the epic popup frame, the safety-lock notice, the navigator blocked alert, the CanCreateRoom flow with the club promo, the illustrated cfh.created.
… and recyclable counters, badge filters and details Enter runs the search and Escape clears it; rented furni show the rent state overlay, the expiry line and extend, buy-out and go-to-room following FurniView; rarity plaque and counters with the official tooltips; the trade offer grids get the item_popup hover card; the badge tab gets the normal/achievements and rarity filters and the badge_details card.
…(talent): the talent track, task dialog, level-up popup and citizenship welcome The jury flow of GuideSessionController: accept with countdown, the anonymised incident log with the three votes, waiting for voters and results with the verdict; the reporter feedback window. The talent track panorama with the level panes, task cards, reward boxes and the progress meter, the task progress dialog with its actions, the level up popup and the citizenship welcome.
…eholder widgets, the Niko trophy The poll offer, question dialog with radio, checkbox and text answers and the NPS follow-up, cancel confirmation and thanks; mod tickets get the CFH topic dropdown, the default sanction label and close, the next-issue auto-pick and the caller/reported messages; the ecotron box card, the placeholder window and the Niko trophy view.
…and safety booklet, profile block, logout confirm, NUX dialogs Groups: the club-required popup and the official join/edit failure alerts, accept-all pending, thread and message reports, unread forum polling with the me-menu badge, jump to the first unread message, the official three list modes. Help: room reports, the unlawful activity fields, the safety booklet with its dimmed backdrop, the pending ticket popups. Profile block button, view-once friend bar tokens dropped on collapse, logout confirmation under the purse, the name change link in the avatar editor, the NUX offers.
…tags; feat(hotel-view): the official widget types The legacy search types and codes resolve to what the emulator serves, so the existing group, owner and tag links work; the back button walks the search history like SearchContextHistoryManager; the room info shows up to four tag chips. The hotel view renders the official promo article, avatar image, room hopper, generic elements and community goal VS-mode widgets, plus the moving background objects.
…edit redeem, VIP benefits; marketplace confirmation; trading warnings, minimised strip, name-scam check The info_pets2/3 layouts, the monkey and niko teaser regions, the bundle promo bar with the discount rows, the credit_redeem widget and the vip_benefits window; the marketplace combine-uniques option and the official buy confirmation with average price and offer count; trading with nine slots, the account-disabled and credits warnings, the minimised strip on the other tabs and the name-scam warning that compares the trader's name with the room and the friend list.
… stack height multi-walk, UI help bubbles, camera perk gate Kick, mute, drop, ambassador alert and classification, avisit, uc, wiredreset, playtest, ping with the chat bubble, fps and showstats, lang, news and mail, the gates on furni and cam, the full ejectall line, hidemouse with the tile cursor, screenshot named after the room; the walk-height variant and multi-walk of the stack height widget; the helpBubble link protocol with its anchors; the camera perk on the room tools, the toolbar and the widget; the room tools collapse seeded from uiFlags. Plus the shared registry lines of the evening's eight areas.
SimoLeoLife
added this pull request to stack #481
September 9, 2026 20:07
The competition packets have been in the renderer all along and nothing on the client listened, so a competition was invisible even once the hotel served it. This is the official strip the client drops at the top of the room: the caption and its info line on the left, one button with a line above it on the right, and the furniture the room still lacks listed with a tick or a cross when that is what is missing. It opens on room entry in submit shape for the owner of a room that could enter and in vote shape for a visitor of a room taking part, walks the official three steps (accept the rules, submit, confirm) and offers the vote only to somebody eligible with votes left. The texts are the official keys, looked up the way the official window does it: the key with the result code first, the key without it second, and the element hidden when neither exists. Their markup is dropped rather than shown, since the whole info line is the link. The don't-show-me-today switch is remembered per viewer, so a visitor who ticks it stops being asked until tomorrow.
The hotel answers the resolution furni properly since this morning and nothing on the client listened, so the furni stayed silent. The window has the three shapes the official has: the picker while the furni carries no promise, with the owner's achievements in a grid and the one they are looking at beside it; the progress, with the badge of the level they promised, a bar, the clock and the re-select button; and the kept-promise card. Re-selecting resets and then asks the furni again, which is what the official window does, so the picker comes straight back. An achievement that cannot be promised is greyed out and says why, using the two official reasons. The renderer already sends the open packet when the furni is clicked, so nothing here has to know about the click. Every text is an official resolution.* key that the gamedata already carries: no new keys.
The element drew the badge and did nothing. When it carries a request code it is a button now, as the official one is: it asks the hotel whether the badge was already claimed when it appears, claims it on click, and settles into a disabled claimed state on the answer. Without a request code it stays the plain image it was, so existing landing pages do not change.
AIR 13 has no FAQ window: the three FAQ packets are legacy and the official client opens 'cfh.faq.url' in the browser from two places, the help window and the sanction card. Both links already existed here and went to the habbopage. They now open the configured address when there is one, and keep the habbopage when there is not, so a hotel with an external FAQ can point at it without losing the built-in page. Only http and https are followed.
The info line of the voting window is the official 'see all participants' link and it went to the hotel view. It now asks the hotel for the rooms taking part and opens the navigator on the answer, which is what the official window does.
SimoLeoLife
removed this pull request from stack #481
September 11, 2026 16:08
SimoLeoLife
marked this pull request as ready for review
September 11, 2026 16:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Parity pass of the client against the decompiled Habbo AIR 13 build (the 2026-09 package), outside the wired editor. Seven commits, one per area, each with its tests.
What changes
Ubuntufont name pointed at the condensed file, so every window read condensed where the official uses Ubuntu regular 12. Skinned tooltips drawn from the official tooltip skin replace browser titles; every card gets the official frame 3 and the classic scrollbar unless it opts out; the reconnect overlay uses thedisconnected.*texts in the shape of the official alert.:flipkeeps a state and comes back; the camera and the thumbnail camera refuse only a zoom below one or a flipped room, as the official does; one zoom table up to 16x, animated, Ctrl+wheel toward the cursor, the plain wheel turns a furni being placed; Shift+wheel pans the floor plan.:visit,:roomid,:cam,:fs,:ignore,:unignore,:mutepets,:moonwalk,:habnam,:hidemouse,:wf,:var,:inspect,:link); ignore from the chat history; a report ignores and unfriends the reported user except for topic 21, asks for a reason on unlawful activity and refuses a description too short; bubbles keep off the desktop margins, cap their height, glide into place, treat highlight links as hints, and stack line by line when that mode is chosen; the new-user chat reminder and the commands help button; friend-list feedback when full or after a request.toolbar_hoverlayout, centred over the icon with a tail.Notes for review
fix/room-flip-zoom-api, Room flip state and preview rotation for the client's AIR 13 parity Octane-Renderer#213). Until it is published the client reads them as optional and answers "not flipped" / "nothing to rotate", so this branch builds against the current renderer.frameStyle={0}/classicScrollbar={false}keep the old chrome.Second pass (2026-09-07 evening)
GuideHelpManagerdoes.snowwar_endingresults screen with team columns, hits and K.O.'s, spotlights, rematch countdown and skill stars, from what the packets carry today.RoomCategorySelectionEnforcement, per-friend tokens on the friend bar.memenu_chat_settingslayout, composers 145/68/1996).ToolbarHoverCtrl; the fixed-size windows (camera editor and checkout, group members and information, habbicon hub) get the 6px the default frame takes.The new composers and parsers live in the renderer companion PR; this branch types green once that one is published.
Third pass (2026-09-07 night)
info_rentablespage.Server side: duckietm/Polaris-Emulator#665. Renderer: duckietm/Octane-Renderer#213 (this branch types green once it is published).
Fourth pass (2026-09-08): the client-only gaps of the AIR 13 audit
Eight areas, one commit each, all against packets the renderer and the emulator already have:
:kick,:mute,:drop, ambassador alert and classification,:avisit,:uc,:wiredreset,:playtest,:pingwith its bubble,:fps,:showstats,:lang,:news/:mail, the full:ejectall,:hidemousetile cursor,:screenshotnamed after the room), the stack height walk variant and multi-walk, thehelpBubblelink protocol, the camera perk gate, the room tools collapse seeded fromuiFlags.item_popup, badge normal/achievements and rarity filters with thebadge_detailscard.cfh.created.info_pets2/3, teaser links, the bundle extra info,credit_redeem,vip_benefits; the marketplace buy confirmation with average price and offer count, combine-uniques; nine trade slots, the account and credits warnings, the minimised strip, the name-scam warning.Text keys of this pass follow in the gamedata files. What still needs renderer or emulator packets is listed in
docs/air13_gap_report_2026-09-08.md§4.2 and §4.3.Room competition window
The competition packets have been in the renderer all along and nothing on the client listened, so a competition stayed invisible even once the hotel served it (the server side is Polaris #676).
This is the official strip the client drops at the top of the room: caption and info line on the left, one button with a line above it on the right, and — when that is what is missing — the furniture the room still lacks, each with a tick or a cross. It opens on room entry in submit shape for the owner of a room that could enter, and in vote shape for a visitor of a room taking part; it walks the official three steps (accept the rules, submit, confirm) and offers the vote only to somebody eligible with votes left.
The texts are the official keys, looked up the way the official window does it: the key with the result code first, the key without it second, the element hidden when neither exists. Their markup is dropped rather than shown, since the whole info line is the link. The don't-show-me-today switch is remembered per viewer.
One new text key,
roomcompetition.noroom.info; everything else is an official key that already exists in the gamedata.Tests: the whole client suite, 341 files and 1816 tests, green.
Resolution furni: the three windows
The hotel answers the resolution furni properly since Polaris #676 and nothing on the client listened, so the furni stayed silent.
The window has the three shapes the official has: the picker while the furni carries no promise, with the owner's achievements in a grid and the one they are looking at beside it; the progress, with the badge of the level they promised, a bar, the clock and the re-select button; and the kept-promise card. Re-selecting resets and then asks the furni again, which is what the official window does, so the picker comes straight back.
An achievement that cannot be promised is greyed out and says why, with the two official reasons. The renderer already sends the open packet when the furni is clicked, so nothing here has to know about the click.
Every text is an official
resolution.*key the gamedata already carries: no new keys.Tests: the whole client suite, 343 files and 1827 tests, green.