Ctrl + Click = Pick up furniture
Shift + Click = Rotate floor furniture
Alt + Click/Hold = Keep the original alternate action
JPEXS Free Flash Decompiler
A backup of your Habbo.swf
A Flash Habbo client
Go to:
scripts
└── com.sulake.habbo.room
In my SWF, the correct class is:
§_-0Km§
This class handles room object mouse events. It already contains the furniture pickup and rotation actions inside the method §_-GY§, and the click handler already checks altKey.
private function §_-02C§(param1:§_-cC§, param2:int, param3:int) : void
You can also search for:
param1.altKey
The original method should look similar to this:
private function §_-02C§(param1:§_-cC§, param2:int, param3:int) : void
{
var _loc10_:IEventDispatcher = null;
if(param1 == null)
{
return;
}
var _loc4_:String = §_-0pf§.OBJECT_UNDEFINED;
var _loc5_:§_-1a8§ = §_-3P§(param2,param3);
if(_loc5_ != null)
{
_loc4_ = _loc5_.§_-1cV§;
}
var _loc6_:int = param1.§_-qp§;
var _loc7_:String = param1.§_-00A§;
var _loc8_:int = _roomEngine.§_-1wa§(_loc7_);
var _loc9_:int = _loc8_;
switch(_loc4_)
{
case §_-0pf§.OBJECT_UNDEFINED:
if(_loc8_ != RoomObjectCategoryEnum.§_-0Vb§)
{
if(param1.altKey)
{
_loc10_ = _roomEngine.events;
if(_loc10_ != null)
{
_loc10_.dispatchEvent(
new §_-0yE§(
§_-0yE§.§_-1ql§,
param2,
param3,
_loc6_,
_loc8_
)
);
}
}
else
{
§_-0AV§(param2,param3,_loc6_,_loc8_);
}
}
}
}
Step 3 — Replace the Method
Replace the entire §_-02C§ method with this updated version:
private function §_-02C§(param1:§_-cC§, param2:int, param3:int) : void
{
var _loc10_:IEventDispatcher = null;
if(param1 == null)
{
return;
}
var _loc4_:String = §_-0pf§.OBJECT_UNDEFINED;
var _loc5_:§_-1a8§ = §_-3P§(param2,param3);
if(_loc5_ != null)
{
_loc4_ = _loc5_.§_-1cV§;
}
var _loc6_:int = param1.§_-qp§;
var _loc7_:String = param1.§_-00A§;
var _loc8_:int = _roomEngine.§_-1wa§(_loc7_);
var _loc9_:int = _loc8_;
switch(_loc4_)
{
case §_-0pf§.OBJECT_UNDEFINED:
if(_loc8_ != RoomObjectCategoryEnum.§_-0Vb§)
{
/*
* CTRL + CLICK
* Pick up floor or wall furniture.
*/
if(param1.ctrlKey)
{
if(_loc8_ == RoomObjectCategoryEnum.§_-1xl§ ||
_loc8_ == RoomObjectCategoryEnum.§_-0Ci§)
{
§_-GY§(
param2,
param3,
_loc6_,
_loc8_,
§_-0pf§.OBJECT_PICKUP
);
return;
}
}
/*
* SHIFT + CLICK
* Rotate floor furniture.
*/
if(param1.shiftKey)
{
if(_loc8_ == RoomObjectCategoryEnum.§_-1xl§)
{
§_-GY§(
param2,
param3,
_loc6_,
_loc8_,
§_-0pf§.OBJECT_ROTATE_POSITIVE
);
return;
}
}
/*
* ALT + CLICK / HOLD
* Keep the original alternate action.
*/
if(param1.altKey)
{
_loc10_ = _roomEngine.events;
if(_loc10_ != null)
{
_loc10_.dispatchEvent(
new §_-0yE§(
§_-0yE§.§_-1ql§,
param2,
param3,
_loc6_,
_loc8_
)
);
}
}
else
{
§_-0AV§(param2,param3,_loc6_,_loc8_);
}
}
}
}
Click:
Save
or:
Save As.
I recommend using Save As first, so you still have the original SWF if something goes wrong.
Shift + Click = Rotate floor furniture
Alt + Click/Hold = Keep the original alternate action
Requirements
You will need:JPEXS Free Flash Decompiler
A backup of your Habbo.swf
A Flash Habbo client
Step 1 — Open the SWF
Open your Habbo.swf using JPEXS Free Flash Decompiler.Go to:
scripts
└── com.sulake.habbo.room
In my SWF, the correct class is:
§_-0Km§
This class handles room object mouse events. It already contains the furniture pickup and rotation actions inside the method §_-GY§, and the click handler already checks altKey.
Step 2 — Find the Click Handler
Inside the class, search for this method:private function §_-02C§(param1:§_-cC§, param2:int, param3:int) : void
You can also search for:
param1.altKey
The original method should look similar to this:
private function §_-02C§(param1:§_-cC§, param2:int, param3:int) : void
{
var _loc10_:IEventDispatcher = null;
if(param1 == null)
{
return;
}
var _loc4_:String = §_-0pf§.OBJECT_UNDEFINED;
var _loc5_:§_-1a8§ = §_-3P§(param2,param3);
if(_loc5_ != null)
{
_loc4_ = _loc5_.§_-1cV§;
}
var _loc6_:int = param1.§_-qp§;
var _loc7_:String = param1.§_-00A§;
var _loc8_:int = _roomEngine.§_-1wa§(_loc7_);
var _loc9_:int = _loc8_;
switch(_loc4_)
{
case §_-0pf§.OBJECT_UNDEFINED:
if(_loc8_ != RoomObjectCategoryEnum.§_-0Vb§)
{
if(param1.altKey)
{
_loc10_ = _roomEngine.events;
if(_loc10_ != null)
{
_loc10_.dispatchEvent(
new §_-0yE§(
§_-0yE§.§_-1ql§,
param2,
param3,
_loc6_,
_loc8_
)
);
}
}
else
{
§_-0AV§(param2,param3,_loc6_,_loc8_);
}
}
}
}
Step 3 — Replace the Method
Replace the entire §_-02C§ method with this updated version:
private function §_-02C§(param1:§_-cC§, param2:int, param3:int) : void
{
var _loc10_:IEventDispatcher = null;
if(param1 == null)
{
return;
}
var _loc4_:String = §_-0pf§.OBJECT_UNDEFINED;
var _loc5_:§_-1a8§ = §_-3P§(param2,param3);
if(_loc5_ != null)
{
_loc4_ = _loc5_.§_-1cV§;
}
var _loc6_:int = param1.§_-qp§;
var _loc7_:String = param1.§_-00A§;
var _loc8_:int = _roomEngine.§_-1wa§(_loc7_);
var _loc9_:int = _loc8_;
switch(_loc4_)
{
case §_-0pf§.OBJECT_UNDEFINED:
if(_loc8_ != RoomObjectCategoryEnum.§_-0Vb§)
{
/*
* CTRL + CLICK
* Pick up floor or wall furniture.
*/
if(param1.ctrlKey)
{
if(_loc8_ == RoomObjectCategoryEnum.§_-1xl§ ||
_loc8_ == RoomObjectCategoryEnum.§_-0Ci§)
{
§_-GY§(
param2,
param3,
_loc6_,
_loc8_,
§_-0pf§.OBJECT_PICKUP
);
return;
}
}
/*
* SHIFT + CLICK
* Rotate floor furniture.
*/
if(param1.shiftKey)
{
if(_loc8_ == RoomObjectCategoryEnum.§_-1xl§)
{
§_-GY§(
param2,
param3,
_loc6_,
_loc8_,
§_-0pf§.OBJECT_ROTATE_POSITIVE
);
return;
}
}
/*
* ALT + CLICK / HOLD
* Keep the original alternate action.
*/
if(param1.altKey)
{
_loc10_ = _roomEngine.events;
if(_loc10_ != null)
{
_loc10_.dispatchEvent(
new §_-0yE§(
§_-0yE§.§_-1ql§,
param2,
param3,
_loc6_,
_loc8_
)
);
}
}
else
{
§_-0AV§(param2,param3,_loc6_,_loc8_);
}
}
}
}
Step 4 — Save the SWF
Click:
Save
or:
Save As.
I recommend using Save As first, so you still have the original SWF if something goes wrong.