Habbo projector x2 zoom fix (v9 and v14) (centered windows)

MetalYoshi94

New member
Hello, I am making this post to solve the problem that many users have when creating their hotel with zoom x2. some buttons were off screen, the catalog opened at the bottom right, some windows outside the client, there was no access to the turn, move and pick up furni buttons etc...

You will need to create your own projector, to do this I followed this tutorial
It is important that it is linked to "habbo_x2.dcr".

this is what the errors looked like:
Fmgyh40.png

sgttdsV.png

GQByQIR.png

MDVf9Kj.png

nq5EmW2.png


This fix solves the following

  • centered sulake
  • centered loading bar
  • centered windows
  • aligned buttons to move, turn, pick up, dance etc...

Download (Mediafire)

update:
Now both versions are also compatible with the web version of the x2 loader


v9 zoom x2 FIX
v14 zoom x2 FIX

This is how it looks solved
V9
3rxwotq.png

VV3pMPh.png

SKhnQEn.png

ldhAnep.png


V14
JQAIn5I.png

BzVRxIZ.png

ntVKL4P.png

8ILTjA8.png
 
Last edited:
Can you share what you actually changed?
I compared some scripts with puomi hotel and with the dcr's of habbo origins and got the results

fuse_client:
PYdG0dX.png


- Core Thread Class
Part of the code is found to center the sulake logo

- Loading Bar Class
Part of the code is found to center the loading bar

the rest worked to center the windows in general

hh_room:
buuDhsb.png


- Room Interface Class
Part of the code is found to align the buttons to move furnis, change plates, dance, etc...

Habbo_x2.dcr
YXVYw09.png


The code that appears in the image was replaced with the following:
Code:
on prepareMovie
  castLib(2).preloadMode = 1
  preloadNetThing(castLib(2).fileName)
  (the stage).drawRect = rect(0, 0, 1440, 1080)
  (the stage).rect = rect(the stageLeft, the stageTop, the stageLeft + 1440, the stageTop + 1080)
  moveToFront(the stage)
  puppetTempo(15)
end

on stopMovie
  stopClient()
  go(1)
end

in conclusion, by comparing the scripts you can see the changes.
 
I compared some scripts with puomi hotel and with the dcr's of habbo origins and got the results

fuse_client:
PYdG0dX.png


- Core Thread Class
Part of the code is found to center the sulake logo

- Loading Bar Class
Part of the code is found to center the loading bar

the rest worked to center the windows in general

hh_room:
buuDhsb.png


- Room Interface Class
Part of the code is found to align the buttons to move furnis, change plates, dance, etc...

Habbo_x2.dcr
YXVYw09.png


The code that appears in the image was replaced with the following:
Code:
on prepareMovie
  castLib(2).preloadMode = 1
  preloadNetThing(castLib(2).fileName)
  (the stage).drawRect = rect(0, 0, 1440, 1080)
  (the stage).rect = rect(the stageLeft, the stageTop, the stageLeft + 1440, the stageTop + 1080)
  moveToFront(the stage)
  puppetTempo(15)
end

on stopMovie
  stopClient()
  go(1)
end

in conclusion, by comparing the scripts you can see the changes.
Don't you need to make code changes in several files and not just Habbo.dcr?
It's been awhile since I've done this myself but iirc you need to make changes to the code in several of the cast files, along with the main movie itself (Habbo.dcr)

iirc you have to go through the cast files and find every reference to the following two statements,

Code:
(the stage).rect
Code:
the stageRight - the stageLeft

these get swapped out for,
Code:
(the stage).sourceRect

I have an old message saved that contains the results of me grepping through the decompiled scripts from a set of client files (presumably from v31 as I believe this was the client version I was playing around with at the time)


Bash:
~:grep -r "(the stage).rect"
./hh_ig/Cast External ParentScript 15 - IGComponentUI Subcomponent Class.ls:  tsprite.rect = rect(0, 0, (the stage).rect.width, (the stage).rect.height)
./hh_ig/Cast External ParentScript 14 - IGComponentUI Base Class.ls:  tsprite.rect = rect(0, 0, (the stage).rect.width, (the stage).rect.height)
./hh_furni_classes/Cast External ParentScript 60 - Package Card Class.ls:  if tloc[1] > ((the stage).rect.width - 260) then
./hh_furni_classes/Cast External ParentScript 60 - Package Card Class.ls:    tloc[1] = (the stage).rect.width - 260
./hh_furni_classes/Cast External ParentScript 77 - Ecotron Box Card Class.ls:  if tloc[1] > ((the stage).rect.width - 260) then
./hh_furni_classes/Cast External ParentScript 77 - Ecotron Box Card Class.ls:    tloc[1] = (the stage).rect.width - 260
./hh_room/Cast External ParentScript 3 - Room Interface Class.ls:    pCoverSpr.width = (the stage).rect.width
./hh_room/Cast External ParentScript 3 - Room Interface Class.ls:    pCoverSpr.height = (the stage).rect.height
./hh_room/Cast External ParentScript 3 - Room Interface Class.ls:  if (the stage).rect.width > 800 then
./hh_room/Cast External ParentScript 3 - Room Interface Class.ls:      pWideScreenOffset = (the stage).rect.width - 720 - pWideScreenOffset
./hh_room/Cast External ParentScript 6 - Spectator System Class.ls:  if (the stage).rect.width <= 720 then
./hh_room_private/Cast External ParentScript 37 - Wall Mask Manager.ls:  tWidth = (the stage).rect.width
./hh_room_private/Cast External ParentScript 37 - Wall Mask Manager.ls:  tHeight = (the stage).rect.height
./hh_room_private/Cast External ParentScript 38 - Landscape Cloud.ls:  if pLoc[1] > (the stage).rect.width then
./hh_room_private/Cast External ParentScript 67 - DEPR_Landscape Cloud.ls:  if pLoc[1] > (the stage).rect.width then
./hh_room_private/Cast External ParentScript 67 - DEPR_Landscape Cloud.ls:    pLoc = point(0.0, random((the stage).rect.height))
./hh_room_ui/Cast External ParentScript 35 - Invitation Class.ls:  tOffset = tLocX + tOwnWidth - (the stage).rect.width
./hh_room_ui/Cast External ParentScript 27 - Navigator Popup Class.ls:  tOffset = tWindow.getProperty(#width) + tLocX - (the stage).rect.width - tMargin
./hh_room_ui/Cast External ParentScript 6 - Room Object Window Creator Class.ls:  tStageWidth = (the stage).rect.width
./hh_room_ui/Cast External ParentScript 36 - Instant Friend Request Class.ls:  tOffset = tLocX + tOwnWidth - (the stage).rect.width
./hh_instant_messenger/Cast External ParentScript 3 - Instant Messenger Interface Class.ls:  tLocH = (the stage).rect.width - getIntVariable("im.window.margin.right")
./hh_kiosk_room/Cast External ParentScript 3 - RoomKiosk Interface Class.ls:    tWndObj.moveTo(((the stage).rect.width - tWndObj.getProperty(#width)) / 2, (the stage).rect.height - tWndObj.getProperty(#height))
./hh_room_utils/Cast External ParentScript 12 - Ad Manager.ls:  if (tNewLoc.locH + (pToolTipSpr.width / 2)) > ((the stage).rect.width - 10) then
./hh_room_utils/Cast External ParentScript 12 - Ad Manager.ls:    tNewLoc.locH = (the stage).rect.width - 10 - (pToolTipSpr.width / 2)
./hh_room_utils/Cast External ParentScript 13 - Interstitial Manager.ls:  if (tNewLoc.locH + (pToolTipSpr.width / 2)) > ((the stage).rect.width - 10) then
./hh_room_utils/Cast External ParentScript 13 - Interstitial Manager.ls:    tNewLoc.locH = (the stage).rect.width - 10 - (pToolTipSpr.width / 2)
./fuse_client/Cast External ParentScript 55 - Window Instance Class.ls:  pBoundary = rect(0, 0, (the stage).rect.width, (the stage).rect.height) + [-20, -20, 20, 20]
./fuse_client/Cast External ParentScript 54 - Visualizer Instance Class.ls:  pBoundary = rect(0, 0, (the stage).rect.width, (the stage).rect.height) + [-1000, -1000, 1000, 1000]
./fuse_client/Cast External ParentScript 38 - Visualizer Manager Class.ls:  pBoundary = rect(0, 0, (the stage).rect.width, (the stage).rect.height) + getVariableValue("visualizer.boundary.limit")
./fuse_client/Cast External ParentScript 74 - Core Thread Class.ls:    pLogoSpr.loc = point((the stage).rect.width / 2, ((the stage).rect.height / 2) - tmember.height)
./fuse_client/Cast External ParentScript 39 - Window Manager Class.ls:  me.pBoundary = rect(0, 0, (the stage).rect.width, (the stage).rect.height) + getVariableValue("window.boundary.limit")
./fuse_client/Cast External ParentScript 39 - Window Manager Class.ls:      tModal.resizeTo((the stage).rect.width, (the stage).rect.height)

I really appreciate you sharing this with the community but it would be really nice if the OP walked through the steps in detail so that people could make the necessary code changes themselves instead of having to rely on the compiled file you provide.

Thanks for sharing!! :)
 
Back
Top