From b352b3088969737febb01b379d81cfc40872b07f Mon Sep 17 00:00:00 2001 From: Oleksandr Shyshatskyi Date: Wed, 11 Mar 2026 14:17:00 +0200 Subject: [PATCH] =?UTF-8?q?=EF=BB=BFAdd=20AS3=20DisplayObject=20compat=20p?= =?UTF-8?q?roperties:=20mouseEnable=20and=20backgroundAlpha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WoWP and other BigWorld-based titles set these legacy properties on DisplayObject instances via ExternalInterface. Without them the AS3 runtime raises ReferenceError #1056 at startup. mouseEnable: stub getter (returns true) / setter (no-op), alias for the standard mouseEnabled property removed in 4.3. backgroundAlpha: stub getter (returns 1.0) / setter (no-op), a GFx extension property used for per-clip background transparency control. Both were present in the patched 4.2 SDK shipped with BigWorld and are restored here in 4.3 to maintain runtime compatibility. Made-with: Cursor --- .../Display/AS3_Obj_Display_DisplayObject.cpp | 36 ++++++++++++++++++- .../Display/AS3_Obj_Display_DisplayObject.h | 12 +++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.cpp b/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.cpp index 27cd2975..39ef31b8 100644 --- a/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.cpp +++ b/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.cpp @@ -112,6 +112,10 @@ typedef ThunkFunc1 TFunc_Instances_DisplayObject_hitTestPoint; typedef ThunkFunc1, Instances::fl_geom::Point*> TFunc_Instances_DisplayObject_localToGlobal; typedef ThunkFunc1, Instances::fl_geom::Vector3D*> TFunc_Instances_DisplayObject_local3DToGlobal; +typedef ThunkFunc0 TFunc_Instances_DisplayObject_backgroundAlphaGet; +typedef ThunkFunc1 TFunc_Instances_DisplayObject_backgroundAlphaSet; +typedef ThunkFunc0 TFunc_Instances_DisplayObject_mouseEnableGet; +typedef ThunkFunc1 TFunc_Instances_DisplayObject_mouseEnableSet; template <> const TFunc_Instances_DisplayObject_accessibilityPropertiesGet::TMethod TFunc_Instances_DisplayObject_accessibilityPropertiesGet::Method = &Instances::fl_display::DisplayObject::accessibilityPropertiesGet; template <> const TFunc_Instances_DisplayObject_accessibilityPropertiesSet::TMethod TFunc_Instances_DisplayObject_accessibilityPropertiesSet::Method = &Instances::fl_display::DisplayObject::accessibilityPropertiesSet; @@ -175,6 +179,10 @@ template <> const TFunc_Instances_DisplayObject_hitTestObject::TMethod TFunc_Ins template <> const TFunc_Instances_DisplayObject_hitTestPoint::TMethod TFunc_Instances_DisplayObject_hitTestPoint::Method = &Instances::fl_display::DisplayObject::hitTestPoint; template <> const TFunc_Instances_DisplayObject_localToGlobal::TMethod TFunc_Instances_DisplayObject_localToGlobal::Method = &Instances::fl_display::DisplayObject::localToGlobal; template <> const TFunc_Instances_DisplayObject_local3DToGlobal::TMethod TFunc_Instances_DisplayObject_local3DToGlobal::Method = &Instances::fl_display::DisplayObject::local3DToGlobal; +template <> const TFunc_Instances_DisplayObject_backgroundAlphaGet::TMethod TFunc_Instances_DisplayObject_backgroundAlphaGet::Method = &Instances::fl_display::DisplayObject::backgroundAlphaGet; +template <> const TFunc_Instances_DisplayObject_backgroundAlphaSet::TMethod TFunc_Instances_DisplayObject_backgroundAlphaSet::Method = &Instances::fl_display::DisplayObject::backgroundAlphaSet; +template <> const TFunc_Instances_DisplayObject_mouseEnableGet::TMethod TFunc_Instances_DisplayObject_mouseEnableGet::Method = &Instances::fl_display::DisplayObject::mouseEnableGet; +template <> const TFunc_Instances_DisplayObject_mouseEnableSet::TMethod TFunc_Instances_DisplayObject_mouseEnableSet::Method = &Instances::fl_display::DisplayObject::mouseEnableSet; namespace Instances { namespace fl_display { @@ -1100,6 +1108,24 @@ namespace Instances { namespace fl_display //##protect##"instance::DisplayObject::local3DToGlobal()" } + void DisplayObject::backgroundAlphaSet(const Value& result, Value::Number value) + { + SF_UNUSED2(result, value); + } + void DisplayObject::backgroundAlphaGet(Value::Number& result) + { + result = 1.0; + } + + void DisplayObject::mouseEnableSet(const Value& result, bool value) + { + SF_UNUSED2(result, value); + } + void DisplayObject::mouseEnableGet(bool& result) + { + result = true; + } + SPtr DisplayObject::accessibilityPropertiesGet() { SPtr result; @@ -1271,7 +1297,7 @@ namespace InstanceTraits { namespace fl_display // const UInt16 DisplayObject::tito[DisplayObject::ThunkInfoNum] = { // 0, 1, 3, 4, 6, 7, 9, 10, 12, 13, 15, 16, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 31, 32, 33, 35, 36, 38, 39, 41, 42, 44, 45, 47, 48, 50, 51, 53, 54, 56, 57, 59, 60, 61, 63, 64, 66, 67, 69, 70, 72, 73, 75, 76, 78, 80, 82, 84, 86, 88, 92, 94, // }; - const TypeInfo* DisplayObject::tit[96] = { + const TypeInfo* DisplayObject::tit[102] = { &AS3::fl_accessibility::AccessibilityPropertiesTI, NULL, &AS3::fl_accessibility::AccessibilityPropertiesTI, &AS3::fl::NumberTI, @@ -1334,6 +1360,10 @@ namespace InstanceTraits { namespace fl_display &AS3::fl::BooleanTI, &AS3::fl::NumberTI, &AS3::fl::NumberTI, &AS3::fl::BooleanTI, &AS3::fl_geom::PointTI, &AS3::fl_geom::PointTI, &AS3::fl_geom::PointTI, &AS3::fl_geom::Vector3DTI, + &AS3::fl::NumberTI, + NULL, &AS3::fl::NumberTI, + &AS3::fl::BooleanTI, + NULL, &AS3::fl::BooleanTI, }; const ThunkInfo DisplayObject::ti[DisplayObject::ThunkInfoNum] = { {TFunc_Instances_DisplayObject_accessibilityPropertiesGet::Func, &DisplayObject::tit[0], "accessibilityProperties", NULL, Abc::NS_Public, CT_Get, 0, 0, 0, 0, NULL}, @@ -1398,6 +1428,10 @@ namespace InstanceTraits { namespace fl_display {TFunc_Instances_DisplayObject_hitTestPoint::Func, &DisplayObject::tit[88], "hitTestPoint", NULL, Abc::NS_Public, CT_Method, 2, 3, 0, 0, NULL}, {TFunc_Instances_DisplayObject_localToGlobal::Func, &DisplayObject::tit[92], "localToGlobal", NULL, Abc::NS_Public, CT_Method, 1, 1, 0, 0, NULL}, {TFunc_Instances_DisplayObject_local3DToGlobal::Func, &DisplayObject::tit[94], "local3DToGlobal", NULL, Abc::NS_Public, CT_Method, 1, 1, 0, 0, NULL}, + {TFunc_Instances_DisplayObject_backgroundAlphaGet::Func, &DisplayObject::tit[96], "backgroundAlpha", NULL, Abc::NS_Public, CT_Get, 0, 0, 0, 0, NULL}, + {TFunc_Instances_DisplayObject_backgroundAlphaSet::Func, &DisplayObject::tit[97], "backgroundAlpha", NULL, Abc::NS_Public, CT_Set, 1, 1, 0, 0, NULL}, + {TFunc_Instances_DisplayObject_mouseEnableGet::Func, &DisplayObject::tit[99], "mouseEnable", NULL, Abc::NS_Public, CT_Get, 0, 0, 0, 0, NULL}, + {TFunc_Instances_DisplayObject_mouseEnableSet::Func, &DisplayObject::tit[100], "mouseEnable", NULL, Abc::NS_Public, CT_Set, 1, 1, 0, 0, NULL}, }; DisplayObject::DisplayObject(VM& vm, const ClassInfo& ci) diff --git a/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.h b/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.h index 93ae4338..70679aa5 100644 --- a/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.h +++ b/Src/GFx/AS3/Obj/Display/AS3_Obj_Display_DisplayObject.h @@ -230,6 +230,10 @@ namespace Instances { namespace fl_display mid_hitTestPoint, mid_localToGlobal, mid_local3DToGlobal, + mid_backgroundAlphaGet, + mid_backgroundAlphaSet, + mid_mouseEnableGet, + mid_mouseEnableSet, }; void accessibilityPropertiesGet(SPtr& result); void accessibilityPropertiesSet(const Value& result, Instances::fl_accessibility::AccessibilityProperties* value); @@ -293,6 +297,10 @@ namespace Instances { namespace fl_display void hitTestPoint(bool& result, Value::Number x, Value::Number y, bool shapeFlag = false); void localToGlobal(SPtr& result, Instances::fl_geom::Point* point); void local3DToGlobal(SPtr& result, Instances::fl_geom::Vector3D* point); + void backgroundAlphaGet(Value::Number& result); + void backgroundAlphaSet(const Value& result, Value::Number value); + void mouseEnableGet(bool& result); + void mouseEnableSet(const Value& result, bool value); // C++ friendly wrappers for AS3 methods. SPtr accessibilityPropertiesGet(); @@ -586,10 +594,10 @@ namespace InstanceTraits { namespace fl_display virtual void MakeObject(Value& result, Traits& t); - enum { ThunkInfoNum = 62 }; + enum { ThunkInfoNum = 66 }; static const ThunkInfo ti[ThunkInfoNum]; // static const UInt16 tito[ThunkInfoNum]; - static const TypeInfo* tit[96]; + static const TypeInfo* tit[102]; //##protect##"instance_traits$methods" //##protect##"instance_traits$methods"