@mundobobba/mbroom
v0.2.0
Published
Renderer + pipeline de assets do Habbo Hotel. Fork mantido do shroom com suporte a <remove>, <avatar ink>, <override>, staticY, ink=33 PMA inverse e CLI de download/extract/build/fix dos SWFs.
Maintainers
Readme
MBroom — Renderer + pipeline de assets do Mundo Bobba
Fork interno do shroom de @jankuss (LGPL-3.0). Duas funções: renderer (avatar/furni/room em PIXI) e CLI de pipeline (download, extract, build, fix de assets do Habbo).
Publicado no npm como @mundobobba/mbroom.
Consumido pelo front-mundobobba (renderer) e pelo cdn-mundobobba (CLI de pipeline).
CLI — pipeline de assets
npx mbroom <comando> [opções]| Comando | O que faz |
|---|---|
| gamedata | baixa external_variables.txt, external_flash_texts.txt, HabboAvatarActions.xml |
| dump | baixa SWFs do Habbo + extrai em .mbroom (formato ShroomAssetBundle) |
| build | pós-processa .mbroom (ícones, walkability, figure libs, meta.json) |
| extract-furni | gera WebP animado por furni (precisa ffmpeg no PATH) |
| fix-effects | corrige offsets corrompidos de Splash/Swimming via diff bbox + <fx> dx/dy |
| run | atalho: gamedata → dump → build → fix-effects → extract-furni |
Flags úteis
# Pipeline completa
npx mbroom run
# Só restaurar effects específicos (pula download/extract de figure+furniture)
npx mbroom dump --effects=TotemMan,TotemMerdragon,SunnyDelight
# Re-gerar só meta.json
npx mbroom build --only=meta
# Re-gerar webp de um furni só
npx mbroom extract-furni --only=throne --force--location=<DIR> (ou env RESOURCES_DIR) muda o destino — default ./public/resources.
fix-effects (porquê existe)
Habbo distribui Splash/Swimming com <param key="offset" value="0,0"/> corrompido no manifest.
Existem variantes SplashEvil/SwimEvil com offsets corretos e PNGs trimados. O comando
calcula offsets do par "uniforme" via diff de bbox + dx/dy do <fx>, depois reescreve o
manifest.bin solto e o .mbroom bundle (que é o que o front carrega).
Fórmula validada (mesma do script antigo fix-splash-swimming-offsets.mjs):
target.offset.x = source.offset.x + (sourceFx.dx - targetFx.dx) + bbox.left
target.offset.y = source.offset.y + (targetFx.dy - sourceFx.dy) + bbox.topBuild / dev
npm install # node 18+ — deps nativas (canvas, swf-extract) são optional
npm run build # tsc → dist/
npm run dev # tsc --watchtsconfig.json usa module: "node16" + moduleResolution: "node16" + rootDir: "./src".
Augmentations de tipo (ex.: bin-pack, *.png) ficam em .d.ts puro.
Após qualquer rebuild — invalidar cache do Vite no front
O Vite pre-bundleia node_modules em node_modules/.vite/deps e não invalida quando o
symlink do file: aponta pra novo dist:
cd front-mundobobba
Remove-Item -Recurse -Force node_modules/.vite
npm run dev -- --forceFront consume
npm install @mundobobba/mbroomimport { Shroom, Room, Avatar, AvatarLoader, FurnitureLoader } from '@mundobobba/mbroom';Para desenvolvimento local com mudanças no fonte do mbroom, é possível apontar via path em vez do registry:
"@mundobobba/mbroom": "file:../mbroom"CDN consume
cdn-mundobobba instala o pacote como dependência e roda o CLI na pipeline de assets
(cron diária + endpoint protegido pra trigger manual):
npm install @mundobobba/mbroom
npx mbroom runCompatibilidade Node
Node 18 / 20 / 22 / 24. Deps com binários nativos (canvas, swf-extract) estão em
optionalDependencies e não falham o install em versões onde o pré-build não cobre.
Crédito upstream
- Original: jankuss/shroom
- Fork de manutenção que partimos: tetreum/shroom v0.7.6
Licença LGPL-3.0 preservada — toda modificação aqui também é LGPL.
