[Scummvm-git-logs] scummvm master -> 800adbacf59aacb27e4c46a96dcfee539c2b5160

dreammaster dreammaster at scummvm.org
Thu Mar 4 05:20:02 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
800adbacf5 AGS: Fix crash calling AGSCreditz plugin method


Commit: 800adbacf59aacb27e4c46a96dcfee539c2b5160
    https://github.com/scummvm/scummvm/commit/800adbacf59aacb27e4c46a96dcfee539c2b5160
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-03-03T21:18:32-08:00

Commit Message:
AGS: Fix crash calling AGSCreditz plugin method

The latest change to try and properly handle NumberPtr results
from plugin methods broke the passed parameters on methods with
a void return. To solve this once and for all, I changed all
plugin methods to be a void return, and added a _results field
as part of the passed params parameter

Changed paths:
    engines/ags/engine/script/script_runtime.cpp
    engines/ags/plugins/ags_blend/ags_blend.cpp
    engines/ags/plugins/ags_blend/ags_blend.h
    engines/ags/plugins/ags_creditz/ags_creditz1.cpp
    engines/ags/plugins/ags_creditz/ags_creditz1.h
    engines/ags/plugins/ags_creditz/ags_creditz2.cpp
    engines/ags/plugins/ags_creditz/ags_creditz2.h
    engines/ags/plugins/ags_flashlight/ags_flashlight.cpp
    engines/ags/plugins/ags_flashlight/ags_flashlight.h
    engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.cpp
    engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.h
    engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
    engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.h
    engines/ags/plugins/ags_joy/ags_joy.cpp
    engines/ags/plugins/ags_joy/ags_joy.h
    engines/ags/plugins/ags_pal_render/ags_pal_render.cpp
    engines/ags/plugins/ags_pal_render/ags_pal_render.h
    engines/ags/plugins/ags_parallax/ags_parallax.cpp
    engines/ags/plugins/ags_parallax/ags_parallax.h
    engines/ags/plugins/ags_snow_rain/ags_snow_rain.cpp
    engines/ags/plugins/ags_snow_rain/ags_snow_rain.h
    engines/ags/plugins/ags_sprite_font/ags_sprite_font.cpp
    engines/ags/plugins/ags_sprite_font/ags_sprite_font.h
    engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.cpp
    engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.h
    engines/ags/plugins/agsplugin.h
    engines/ags/plugins/plugin_base.cpp
    engines/ags/plugins/plugin_base.h


diff --git a/engines/ags/engine/script/script_runtime.cpp b/engines/ags/engine/script/script_runtime.cpp
index a3c5b662af..9c0c2d1659 100644
--- a/engines/ags/engine/script/script_runtime.cpp
+++ b/engines/ags/engine/script/script_runtime.cpp
@@ -175,7 +175,7 @@ int call_function(intptr_t addr, const RuntimeScriptValue *object, int numparm,
 	// The original AGS interpreter did a bunch of dodgy function pointers with
 	// varying numbers of parameters, which were all int64_t. To simply matters
 	// now that we only supported plugins implemented in code, and not DLLs,
-	// we use a simplified Common::Array containing the parameters
+	// we use a simplified Common::Array containing the parameters and result
 
 	if (numparm > 9) {
 		cc_error("too many arguments in call to function");
@@ -187,8 +187,16 @@ int call_function(intptr_t addr, const RuntimeScriptValue *object, int numparm,
 			params.push_back(parm_value[i]);
 
 		// Call the method
-		Plugins::PluginFunction fparam = (Plugins::PluginFunction)addr;
-		return fparam(params);
+		Plugins::PluginMethod fparam = (Plugins::PluginMethod)addr;
+		fparam(params);
+
+		// TODO: Though some script methods return pointers, the call_function only
+		// supports a 32-bit result. In case they're actually used by any game, the
+		// guard below will throw a wobbly if they're more than 32-bits
+		if ((int64)params._result._ptr > 0xffffffff)
+			error("Uhandled 64-bit pointer result from plugin method call");
+
+		return params._result;
 	}
 }
 
diff --git a/engines/ags/plugins/ags_blend/ags_blend.cpp b/engines/ags/plugins/ags_blend/ags_blend.cpp
index 29b34bdf9b..5950c644e5 100644
--- a/engines/ags/plugins/ags_blend/ags_blend.cpp
+++ b/engines/ags/plugins/ags_blend/ags_blend.cpp
@@ -150,7 +150,7 @@ public:
 
 #pragma endregion
 
-NumberPtr AGSBlend::GetAlpha(const ScriptMethodParams &params) {
+void AGSBlend::GetAlpha(ScriptMethodParams &params) {
 	PARAMS3(int, sprite, int, x, int, y);
 	BITMAP *engineSprite = _engine->GetSpriteGraphic(sprite);
 
@@ -161,10 +161,10 @@ NumberPtr AGSBlend::GetAlpha(const ScriptMethodParams &params) {
 
 	_engine->ReleaseBitmapSurface(engineSprite);
 
-	return alpha;
+	params._result = alpha;
 }
 
-NumberPtr AGSBlend::PutAlpha(const ScriptMethodParams &params) {
+void AGSBlend::PutAlpha(ScriptMethodParams &params) {
 	PARAMS4(int, sprite, int, x, int, y, int, alpha);
 	BITMAP *engineSprite = _engine->GetSpriteGraphic(sprite);
 
@@ -179,14 +179,14 @@ NumberPtr AGSBlend::PutAlpha(const ScriptMethodParams &params) {
 
 	_engine->ReleaseBitmapSurface(engineSprite);
 
-	return alpha;
+	params._result = alpha;
 }
 
 int AGSBlend::xytolocale(int x, int y, int width) {
 	return (y * width + x);
 }
 
-NumberPtr AGSBlend::HighPass(const ScriptMethodParams &params) {
+void AGSBlend::HighPass(ScriptMethodParams &params) {
 	PARAMS2(int, sprite, int, threshold);
 	BITMAP *src = _engine->GetSpriteGraphic(sprite);
 	int32 srcWidth, srcHeight;
@@ -214,11 +214,11 @@ NumberPtr AGSBlend::HighPass(const ScriptMethodParams &params) {
 
 	}
 
-	return 0;
+	params._result = 0;
 
 }
 
-NumberPtr AGSBlend::Blur(const ScriptMethodParams &params) {
+void AGSBlend::Blur(ScriptMethodParams &params) {
 	PARAMS2(int, sprite, int, radius);
 	BITMAP *src = _engine->GetSpriteGraphic(sprite);
 
@@ -357,10 +357,10 @@ NumberPtr AGSBlend::Blur(const ScriptMethodParams &params) {
 	delete srclongbuffer;
 	delete srccharbuffer;
 
-	return 0;
+	params._result = 0;
 }
 
-NumberPtr AGSBlend::DrawSprite(const ScriptMethodParams &params) {
+void AGSBlend::DrawSprite(ScriptMethodParams &params) {
 	PARAMS6(int, destination, int, sprite, int, x, int, y, int, DrawMode, int, trans);
 	trans = 100 - trans;
 	int32 srcWidth, srcHeight, destWidth, destHeight;
@@ -371,7 +371,11 @@ NumberPtr AGSBlend::DrawSprite(const ScriptMethodParams &params) {
 	_engine->GetBitmapDimensions(src, &srcWidth, &srcHeight, nullptr);
 	_engine->GetBitmapDimensions(dest, &destWidth, &destHeight, nullptr);
 
-	if (x > destWidth || y > destHeight || x + srcWidth < 0 || y + srcHeight < 0) return 1; // offscreen
+	if (x > destWidth || y > destHeight || x + srcWidth < 0 || y + srcHeight < 0) {
+		// offscreen
+		params._result = 1;
+		return;
+	}
 
 	unsigned char **srccharbuffer = _engine->GetRawBitmapSurface(src);
 	unsigned int **srclongbuffer = (unsigned int **)srccharbuffer;
@@ -578,11 +582,11 @@ NumberPtr AGSBlend::DrawSprite(const ScriptMethodParams &params) {
 	_engine->ReleaseBitmapSurface(src);
 	_engine->ReleaseBitmapSurface(dest);
 	_engine->NotifySpriteUpdated(destination);
-	return 0;
+	params._result = 0;
 
 }
 
-NumberPtr AGSBlend::DrawAdd(const ScriptMethodParams &params) {
+void AGSBlend::DrawAdd(ScriptMethodParams &params) {
 	PARAMS5(int, destination, int, sprite, int, x, int, y, float, scale);
 	int32 srcWidth, srcHeight, destWidth, destHeight;
 
@@ -592,7 +596,11 @@ NumberPtr AGSBlend::DrawAdd(const ScriptMethodParams &params) {
 	_engine->GetBitmapDimensions(src, &srcWidth, &srcHeight, nullptr);
 	_engine->GetBitmapDimensions(dest, &destWidth, &destHeight, nullptr);
 
-	if (x > destWidth || y > destHeight) return 1; // offscreen
+	if (x > destWidth || y > destHeight) {
+		// offscreen
+		params._result = 1;
+		return;
+	}
 
 	unsigned char **srccharbuffer = _engine->GetRawBitmapSurface(src);
 	unsigned int **srclongbuffer = (unsigned int **)srccharbuffer;
@@ -653,10 +661,10 @@ NumberPtr AGSBlend::DrawAdd(const ScriptMethodParams &params) {
 	_engine->ReleaseBitmapSurface(dest);
 	_engine->NotifySpriteUpdated(destination);
 
-	return 0;
+	params._result = 0;
 }
 
-NumberPtr AGSBlend::DrawAlpha(const ScriptMethodParams &params) {
+void AGSBlend::DrawAlpha(ScriptMethodParams &params) {
 	PARAMS5(int, destination, int, sprite, int, x, int, y, int, trans);
 	trans = 100 - trans;
 
@@ -668,7 +676,11 @@ NumberPtr AGSBlend::DrawAlpha(const ScriptMethodParams &params) {
 	_engine->GetBitmapDimensions(src, &srcWidth, &srcHeight, nullptr);
 	_engine->GetBitmapDimensions(dest, &destWidth, &destHeight, nullptr);
 
-	if (x > destWidth || y > destHeight) return 1; // offscreen
+	if (x > destWidth || y > destHeight) {
+		// offscreen
+		params._result = 1;
+		return;
+	}
 
 	unsigned char **srccharbuffer = _engine->GetRawBitmapSurface(src);
 	unsigned int **srclongbuffer = (unsigned int **)srccharbuffer;
@@ -722,7 +734,7 @@ NumberPtr AGSBlend::DrawAlpha(const ScriptMethodParams &params) {
 	_engine->ReleaseBitmapSurface(dest);
 	_engine->NotifySpriteUpdated(destination);
 
-	return 0;
+	params._result = 0;
 }
 
 } // namespace AGSBlend
diff --git a/engines/ags/plugins/ags_blend/ags_blend.h b/engines/ags/plugins/ags_blend/ags_blend.h
index 9e114420ec..b6f7a174cb 100644
--- a/engines/ags/plugins/ags_blend/ags_blend.h
+++ b/engines/ags/plugins/ags_blend/ags_blend.h
@@ -44,23 +44,23 @@ private:
 	/**
 	 * Gets the alpha value at coords x,y
 	 */
-	static NumberPtr GetAlpha(const ScriptMethodParams &params);
+	static void GetAlpha(ScriptMethodParams &params);
 
 	/**
 	 * Sets the alpha value at coords x,y
 	 */
-	static NumberPtr PutAlpha(const ScriptMethodParams &params);
+	static void PutAlpha(ScriptMethodParams &params);
 
 	/**
 	 * Translates index from a 2D array to a 1D array
 	 */
 	static int xytolocale(int x, int y, int width);
 
-	static NumberPtr HighPass(const ScriptMethodParams &params);
-	static NumberPtr Blur(const ScriptMethodParams &params);
-	static NumberPtr DrawSprite(const ScriptMethodParams &params);
-	static NumberPtr DrawAdd(const ScriptMethodParams &params);
-	static NumberPtr DrawAlpha(const ScriptMethodParams &params);
+	static void HighPass(ScriptMethodParams &params);
+	static void Blur(ScriptMethodParams &params);
+	static void DrawSprite(ScriptMethodParams &params);
+	static void DrawAdd(ScriptMethodParams &params);
+	static void DrawAlpha(ScriptMethodParams &params);
 
 public:
 	AGSBlend();
diff --git a/engines/ags/plugins/ags_creditz/ags_creditz1.cpp b/engines/ags/plugins/ags_creditz/ags_creditz1.cpp
index 21b7e5fef3..1fdddf2d29 100644
--- a/engines/ags/plugins/ags_creditz/ags_creditz1.cpp
+++ b/engines/ags/plugins/ags_creditz/ags_creditz1.cpp
@@ -65,7 +65,7 @@ void AGSCreditz1::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD(IsStaticCreditsFinished);
 }
 
-void AGSCreditz1::SetCredit(const ScriptMethodParams &params) {
+void AGSCreditz1::SetCredit(ScriptMethodParams &params) {
 	PARAMS7(int, ID, string, credit, int, colour, int, font, int, center, int, xpos, int, generateoutline);
 
 	if (ID >= (int)_state->_credits[0].size())
@@ -81,7 +81,7 @@ void AGSCreditz1::SetCredit(const ScriptMethodParams &params) {
 	c._colorHeight = colour;
 }
 
-void AGSCreditz1::ScrollCredits(const ScriptMethodParams &params) {
+void AGSCreditz1::ScrollCredits(ScriptMethodParams &params) {
 	PARAMS7(int, onoff, int, speed, int, fromY, int, toY, int, isautom, int, wait, int, resolution);
 
 	if (onoff == 1) {
@@ -108,84 +108,84 @@ void AGSCreditz1::ScrollCredits(const ScriptMethodParams &params) {
 	}
 }
 
-NumberPtr AGSCreditz1::GetCredit(const ScriptMethodParams &params) {
+void AGSCreditz1::GetCredit(ScriptMethodParams &params) {
 	PARAMS1(int, ID);
 
-	return (_state->_credits[0][ID]._text == IMAGE_TEXT) ?
+	params._result = (_state->_credits[0][ID]._text == IMAGE_TEXT) ?
 		"image" : _state->_credits[0][ID]._text.c_str();
 }
 
-NumberPtr AGSCreditz1::IsCreditScrollingFinished(const ScriptMethodParams &params) {
-	return true;
+void AGSCreditz1::IsCreditScrollingFinished(ScriptMethodParams &params) {
+	params._result = true;
 }
 
-void AGSCreditz1::SetCreditImage(const ScriptMethodParams &params) {
+void AGSCreditz1::SetCreditImage(ScriptMethodParams &params) {
 	//PARAMS5(int, ID, int, Slot, int, center, int, xpos, int, pixtonext);
 }
 
-void AGSCreditz1::PauseScroll(const ScriptMethodParams &params) {
+void AGSCreditz1::PauseScroll(ScriptMethodParams &params) {
 	//PARAMS1(int, onoff);
 }
 
-void AGSCreditz1::ScrollReset(const ScriptMethodParams &params) {
+void AGSCreditz1::ScrollReset(ScriptMethodParams &params) {
 }
 
-void AGSCreditz1::SetEmptyLineHeight(const ScriptMethodParams &params) {
+void AGSCreditz1::SetEmptyLineHeight(ScriptMethodParams &params) {
 	//PARAMS1(int, Height);
 }
 
-NumberPtr AGSCreditz1::GetEmptyLineHeight(const ScriptMethodParams &params) {
-	return 0;
+void AGSCreditz1::GetEmptyLineHeight(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSCreditz1::SetStaticCredit(const ScriptMethodParams &params) {
+void AGSCreditz1::SetStaticCredit(ScriptMethodParams &params) {
 	//PARAMS8(int, ID, int, x, int, y, int, creditfont, int, creditcolour, int, centered, int, generateoutline, string, credit);
 
 }
 
-NumberPtr AGSCreditz1::GetStaticCredit(const ScriptMethodParams &params) {
+void AGSCreditz1::GetStaticCredit(ScriptMethodParams &params) {
 	//PARAMS1(int, ID);
-	return NumberPtr();
+	params._result = NumberPtr();
 }
 
-void AGSCreditz1::StartEndStaticCredits(const ScriptMethodParams &params) {
+void AGSCreditz1::StartEndStaticCredits(ScriptMethodParams &params) {
 	//PARAMS2(int, onoff, int, res);
 }
 
-NumberPtr AGSCreditz1::GetCurrentStaticCredit(const ScriptMethodParams &params) {
-	return 0;
+void AGSCreditz1::GetCurrentStaticCredit(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSCreditz1::SetDefaultStaticDelay(const ScriptMethodParams &params) {
+void AGSCreditz1::SetDefaultStaticDelay(ScriptMethodParams &params) {
 	//PARAMS1(int, Cyclesperchar);
 }
 
-void AGSCreditz1::SetStaticPause(const ScriptMethodParams &params) {
+void AGSCreditz1::SetStaticPause(ScriptMethodParams &params) {
 	//PARAMS2(int, ID, int, length);
 }
 
-void AGSCreditz1::SetStaticCreditTitle(const ScriptMethodParams &params) {
+void AGSCreditz1::SetStaticCreditTitle(ScriptMethodParams &params) {
 	//PARAMS8(int, ID, int, x, int, y, int, titlefont, int, titlecolour, int, centered, int, generateoutline, string, title);
 }
 
-void AGSCreditz1::ShowStaticCredit(const ScriptMethodParams &params) {
+void AGSCreditz1::ShowStaticCredit(ScriptMethodParams &params) {
 	//PARAMS6(int, ID, int, time, int, style, int, transtime, int, sound, int, resolution);
 }
 
-void AGSCreditz1::StaticReset(const ScriptMethodParams &params) {
+void AGSCreditz1::StaticReset(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSCreditz1::GetStaticCreditTitle(const ScriptMethodParams &params) {
+void AGSCreditz1::GetStaticCreditTitle(ScriptMethodParams &params) {
 	//PARAMS1(int, ID);
-	return NumberPtr();
+	params._result = NumberPtr();
 }
 
-void AGSCreditz1::SetStaticCreditImage(const ScriptMethodParams &params) {
+void AGSCreditz1::SetStaticCreditImage(ScriptMethodParams &params) {
 //int ID, int x, int y, int Slot, int Hcentered, int Vcentered, int time) {
 }
 
-NumberPtr AGSCreditz1::IsStaticCreditsFinished(const ScriptMethodParams &params) {
-	return true;
+void AGSCreditz1::IsStaticCreditsFinished(ScriptMethodParams &params) {
+	params._result = true;
 }
 
 } // namespace AGSCreditz
diff --git a/engines/ags/plugins/ags_creditz/ags_creditz1.h b/engines/ags/plugins/ags_creditz/ags_creditz1.h
index dd64208a59..87df63fae3 100644
--- a/engines/ags/plugins/ags_creditz/ags_creditz1.h
+++ b/engines/ags/plugins/ags_creditz/ags_creditz1.h
@@ -34,27 +34,27 @@ private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *engine);
 
-	static void SetCredit(const ScriptMethodParams &params);
-	static void ScrollCredits(const ScriptMethodParams &params);
-	static NumberPtr GetCredit(const ScriptMethodParams &params);
-	static NumberPtr IsCreditScrollingFinished(const ScriptMethodParams &params);
-	static void SetCreditImage(const ScriptMethodParams &params);
-	static void PauseScroll(const ScriptMethodParams &params);
-	static void ScrollReset(const ScriptMethodParams &params);
-	static void SetEmptyLineHeight(const ScriptMethodParams &params);
-	static NumberPtr GetEmptyLineHeight(const ScriptMethodParams &params);
-	static void SetStaticCredit(const ScriptMethodParams &params);
-	static NumberPtr GetStaticCredit(const ScriptMethodParams &params);
-	static void StartEndStaticCredits(const ScriptMethodParams &params);
-	static NumberPtr GetCurrentStaticCredit(const ScriptMethodParams &params);
-	static void SetDefaultStaticDelay(const ScriptMethodParams &params);
-	static void SetStaticPause(const ScriptMethodParams &params);
-	static void SetStaticCreditTitle(const ScriptMethodParams &params);
-	static void ShowStaticCredit(const ScriptMethodParams &params);
-	static void StaticReset(const ScriptMethodParams &params);
-	static NumberPtr GetStaticCreditTitle(const ScriptMethodParams &params);
-	static void SetStaticCreditImage(const ScriptMethodParams &params);
-	static NumberPtr IsStaticCreditsFinished(const ScriptMethodParams &params);
+	static void SetCredit(ScriptMethodParams &params);
+	static void ScrollCredits(ScriptMethodParams &params);
+	static void GetCredit(ScriptMethodParams &params);
+	static void IsCreditScrollingFinished(ScriptMethodParams &params);
+	static void SetCreditImage(ScriptMethodParams &params);
+	static void PauseScroll(ScriptMethodParams &params);
+	static void ScrollReset(ScriptMethodParams &params);
+	static void SetEmptyLineHeight(ScriptMethodParams &params);
+	static void GetEmptyLineHeight(ScriptMethodParams &params);
+	static void SetStaticCredit(ScriptMethodParams &params);
+	static void GetStaticCredit(ScriptMethodParams &params);
+	static void StartEndStaticCredits(ScriptMethodParams &params);
+	static void GetCurrentStaticCredit(ScriptMethodParams &params);
+	static void SetDefaultStaticDelay(ScriptMethodParams &params);
+	static void SetStaticPause(ScriptMethodParams &params);
+	static void SetStaticCreditTitle(ScriptMethodParams &params);
+	static void ShowStaticCredit(ScriptMethodParams &params);
+	static void StaticReset(ScriptMethodParams &params);
+	static void GetStaticCreditTitle(ScriptMethodParams &params);
+	static void SetStaticCreditImage(ScriptMethodParams &params);
+	static void IsStaticCreditsFinished(ScriptMethodParams &params);
 
 public:
 	AGSCreditz1();
diff --git a/engines/ags/plugins/ags_creditz/ags_creditz2.cpp b/engines/ags/plugins/ags_creditz/ags_creditz2.cpp
index b0a5f812a5..5ab3911a52 100644
--- a/engines/ags/plugins/ags_creditz/ags_creditz2.cpp
+++ b/engines/ags/plugins/ags_creditz/ags_creditz2.cpp
@@ -63,7 +63,7 @@ void AGSCreditz2::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD(GetCurrentStaticCredit);
 }
 
-void AGSCreditz2::RunCreditSequence(const ScriptMethodParams &params) {
+void AGSCreditz2::RunCreditSequence(ScriptMethodParams &params) {
 	PARAMS1(int, sequence);
 
 	if (!_state->_creditsRunning) {
@@ -92,7 +92,7 @@ void AGSCreditz2::RunCreditSequence(const ScriptMethodParams &params) {
 	}
 }
 
-void AGSCreditz2::SetCredit(const ScriptMethodParams &params) {
+void AGSCreditz2::SetCredit(ScriptMethodParams &params) {
 	PARAMS7(int, sequence, int, line, string, credit, int, x_pos, int, font, int, color, int, gen_outline);
 
 	assert(sequence >= 0 && sequence <= 10);
@@ -109,20 +109,20 @@ void AGSCreditz2::SetCredit(const ScriptMethodParams &params) {
 		c._outline = true;
 }
 
-NumberPtr AGSCreditz2::GetCredit(const ScriptMethodParams &params) {
+void AGSCreditz2::GetCredit(ScriptMethodParams &params) {
 	PARAMS2(int, sequence, int, ID);
 
-	return _state->_credits[sequence][ID]._text.c_str();
+	params._result = _state->_credits[sequence][ID]._text.c_str();
 }
 
-void AGSCreditz2::CreditsSettings(const ScriptMethodParams &params) {
+void AGSCreditz2::CreditsSettings(ScriptMethodParams &params) {
 	PARAMS1(int, emptylineheight);
 
 	if (emptylineheight >= 0)
 		_state->_emptyLineHeight = emptylineheight;
 }
 
-void AGSCreditz2::SequenceSettings(const ScriptMethodParams &params) {
+void AGSCreditz2::SequenceSettings(ScriptMethodParams &params) {
 	PARAMS6(int, sequence, int, startpoint, int, endPoint, int, speed, int, automatic, int, endwait);
 
 	_state->_seqSettings[sequence].startpoint = startpoint;
@@ -132,24 +132,24 @@ void AGSCreditz2::SequenceSettings(const ScriptMethodParams &params) {
 	_state->_seqSettings[sequence].endwait = endwait;
 }
 
-NumberPtr AGSCreditz2::IsSequenceFinished(const ScriptMethodParams &params) {
+void AGSCreditz2::IsSequenceFinished(ScriptMethodParams &params) {
 	PARAMS1(int, sequence);
 
 	if (_state->_seqSettings[sequence].finished) {
 		_state->_seqSettings[sequence].finished = false;
-		return 1;
+		params._result = 1;
+	} else {
+		params._result = 0;
 	}
-
-	return 0;
 }
 
-void AGSCreditz2::PauseScrolling(const ScriptMethodParams &params) {
+void AGSCreditz2::PauseScrolling(ScriptMethodParams &params) {
 	if (_state->_creditsRunning) {
 		_state->_paused = !_state->_paused;
 	}
 }
 
-void AGSCreditz2::SetCreditImage(const ScriptMethodParams &params) {
+void AGSCreditz2::SetCreditImage(ScriptMethodParams &params) {
 	PARAMS5(int, sequence, int, line, int, xPos, int, slot, int, height);
 
 	assert(sequence >= 0 && sequence <= 10);
@@ -163,7 +163,7 @@ void AGSCreditz2::SetCreditImage(const ScriptMethodParams &params) {
 	_state->_credits[sequence][line]._colorHeight = height;
 }
 
-void AGSCreditz2::ResetSequence(const ScriptMethodParams &params) {
+void AGSCreditz2::ResetSequence(ScriptMethodParams &params) {
 	PARAMS1(int, seqtype);
 
 	for (int i = 0; i < 10; ++i) {
@@ -176,7 +176,7 @@ void AGSCreditz2::ResetSequence(const ScriptMethodParams &params) {
 	}
 }
 
-void AGSCreditz2::SetStaticCredit(const ScriptMethodParams &params) {
+void AGSCreditz2::SetStaticCredit(ScriptMethodParams &params) {
 	PARAMS8(int, sequence, int, id, string, credit, int, xPos, int, yPos,
 		int, font, int, color, int, genOutline);
 
@@ -194,7 +194,7 @@ void AGSCreditz2::SetStaticCredit(const ScriptMethodParams &params) {
 		_state->_stCredits[sequence][id].outline = true;
 }
 
-void AGSCreditz2::SetStaticCreditTitle(const ScriptMethodParams &params) {
+void AGSCreditz2::SetStaticCreditTitle(ScriptMethodParams &params) {
 	PARAMS8(int, sequence, int, id, string, title, int, xPos, int, yPos,
 		int, font, int, color, int, genOutline);
 
@@ -212,7 +212,7 @@ void AGSCreditz2::SetStaticCreditTitle(const ScriptMethodParams &params) {
 		_state->_stCredits[sequence][id].title_outline = true;
 }
 
-void AGSCreditz2::SetStaticPause(const ScriptMethodParams &params) {
+void AGSCreditz2::SetStaticPause(ScriptMethodParams &params) {
 	PARAMS3(int, sequence, int, id, int, length);
 
 	assert(sequence >= 0 && sequence <= 10);
@@ -222,7 +222,7 @@ void AGSCreditz2::SetStaticPause(const ScriptMethodParams &params) {
 	_state->_stCredits[sequence][id].pause = length;
 }
 
-void AGSCreditz2::RunStaticCreditSequence(const ScriptMethodParams &params) {
+void AGSCreditz2::RunStaticCreditSequence(ScriptMethodParams &params) {
 	PARAMS2(int, sequence, int, speed);
 
 	if (!_state->_creditsRunning) {
@@ -245,16 +245,16 @@ void AGSCreditz2::RunStaticCreditSequence(const ScriptMethodParams &params) {
 	}
 }
 
-NumberPtr AGSCreditz2::IsStaticSequenceFinished(const ScriptMethodParams &params) {
+void AGSCreditz2::IsStaticSequenceFinished(ScriptMethodParams &params) {
 	PARAMS1(int, sequence);
 
 	int result = (_state->_stSeqSettings[sequence].finished) ? 1 : 0;
 	_state->_stSeqSettings[sequence].finished = false;
 
-	return result;
+	params._result = result;
 }
 
-void AGSCreditz2::ShowStaticCredit(const ScriptMethodParams &params) {
+void AGSCreditz2::ShowStaticCredit(ScriptMethodParams &params) {
 	PARAMS6(int, sequence, int, id, int, time, int, style,
 		int, styleSettings1, int, styleSettings2);
 
@@ -274,7 +274,7 @@ void AGSCreditz2::ShowStaticCredit(const ScriptMethodParams &params) {
 	draw();
 }
 
-void AGSCreditz2::SetStaticImage(const ScriptMethodParams &params) {
+void AGSCreditz2::SetStaticImage(ScriptMethodParams &params) {
 	PARAMS6(int, sequence, int, id, int, slot, int, xPos, int, yPos, int, length);
 
 	assert(sequence >= 0 && sequence < 10);
@@ -288,12 +288,12 @@ void AGSCreditz2::SetStaticImage(const ScriptMethodParams &params) {
 	_state->_stCredits[sequence][id].image_time = length;
 }
 
-NumberPtr AGSCreditz2::GetCurrentStaticCredit(const ScriptMethodParams &params) {
+void AGSCreditz2::GetCurrentStaticCredit(ScriptMethodParams &params) {
 	int result = -1;
 	if (_state->_creditsRunning && _state->_staticCredits)
 		result = _state->_currentStatic;
 
-	return result;
+	params._result = result;
 }
 
 void AGSCreditz2::calculateSequenceHeight(int sequence) {
diff --git a/engines/ags/plugins/ags_creditz/ags_creditz2.h b/engines/ags/plugins/ags_creditz/ags_creditz2.h
index 4fcdcb76e4..9b9e4fb02b 100644
--- a/engines/ags/plugins/ags_creditz/ags_creditz2.h
+++ b/engines/ags/plugins/ags_creditz/ags_creditz2.h
@@ -39,24 +39,24 @@ private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *engine);
 
-	static void RunCreditSequence(const ScriptMethodParams &params);
-	static void SetCredit(const ScriptMethodParams &params);
-	static NumberPtr GetCredit(const ScriptMethodParams &params);
-	static void CreditsSettings(const ScriptMethodParams &params);
-	static void SequenceSettings(const ScriptMethodParams &params);
-	static NumberPtr IsSequenceFinished(const ScriptMethodParams &params);
-	static void PauseScrolling(const ScriptMethodParams &params);
-	static void SetCreditImage(const ScriptMethodParams &params);
-	static void ResetSequence(const ScriptMethodParams &params);
+	static void RunCreditSequence(ScriptMethodParams &params);
+	static void SetCredit(ScriptMethodParams &params);
+	static void GetCredit(ScriptMethodParams &params);
+	static void CreditsSettings(ScriptMethodParams &params);
+	static void SequenceSettings(ScriptMethodParams &params);
+	static void IsSequenceFinished(ScriptMethodParams &params);
+	static void PauseScrolling(ScriptMethodParams &params);
+	static void SetCreditImage(ScriptMethodParams &params);
+	static void ResetSequence(ScriptMethodParams &params);
 
-	static void SetStaticCredit(const ScriptMethodParams &params);
-	static void SetStaticCreditTitle(const ScriptMethodParams &params);
-	static void SetStaticPause(const ScriptMethodParams &params);
-	static void RunStaticCreditSequence(const ScriptMethodParams &params);
-	static NumberPtr IsStaticSequenceFinished(const ScriptMethodParams &params);
-	static void ShowStaticCredit(const ScriptMethodParams &params);
-	static void SetStaticImage(const ScriptMethodParams &params);
-	static NumberPtr GetCurrentStaticCredit(const ScriptMethodParams &params);
+	static void SetStaticCredit(ScriptMethodParams &params);
+	static void SetStaticCreditTitle(ScriptMethodParams &params);
+	static void SetStaticPause(ScriptMethodParams &params);
+	static void RunStaticCreditSequence(ScriptMethodParams &params);
+	static void IsStaticSequenceFinished(ScriptMethodParams &params);
+	static void ShowStaticCredit(ScriptMethodParams &params);
+	static void SetStaticImage(ScriptMethodParams &params);
+	static void GetCurrentStaticCredit(ScriptMethodParams &params);
 
 	static void makeMask(int sequence);
 	static void drawMask(int sequence, int getput);
diff --git a/engines/ags/plugins/ags_flashlight/ags_flashlight.cpp b/engines/ags/plugins/ags_flashlight/ags_flashlight.cpp
index 7b2b357b88..8581087ed6 100644
--- a/engines/ags/plugins/ags_flashlight/ags_flashlight.cpp
+++ b/engines/ags/plugins/ags_flashlight/ags_flashlight.cpp
@@ -171,7 +171,7 @@ void AGSFlashlight::AGS_EngineStartup(IAGSEngine *engine) {
 void AGSFlashlight::AGS_EngineShutdown() {
 }
 
-NumberPtr AGSFlashlight::AGS_EngineOnEvent(int event, NumberPtr data) {
+int64 AGSFlashlight::AGS_EngineOnEvent(int event, NumberPtr data) {
 	if (event == AGSE_PREGUIDRAW) {
 		Update();
 	} else if (event == AGSE_RESTOREGAME) {
@@ -569,7 +569,7 @@ void AGSFlashlight::syncGame(Serializer &s) {
 // ************  AGS Interface  ***************
 // ********************************************
 
-void AGSFlashlight::SetFlashlightTint(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightTint(ScriptMethodParams &params) {
 	PARAMS3(int, RedTint, int, GreenTint, int, BlueTint);
 	ClipToRange(RedTint, -31, 31);
 	ClipToRange(GreenTint, -31, 31);
@@ -583,27 +583,27 @@ void AGSFlashlight::SetFlashlightTint(const ScriptMethodParams &params) {
 	g_BlueTint = BlueTint;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightTintRed(const ScriptMethodParams &params) {
-	return g_RedTint;
+void AGSFlashlight::GetFlashlightTintRed(ScriptMethodParams &params) {
+	params._result = g_RedTint;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightTintGreen(const ScriptMethodParams &params) {
-	return g_GreenTint;
+void AGSFlashlight::GetFlashlightTintGreen(ScriptMethodParams &params) {
+	params._result = g_GreenTint;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightTintBlue(const ScriptMethodParams &params) {
-	return g_BlueTint;
+void AGSFlashlight::GetFlashlightTintBlue(ScriptMethodParams &params) {
+	params._result = g_BlueTint;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightMinLightLevel(const ScriptMethodParams &params) {
-	return 0;
+void AGSFlashlight::GetFlashlightMinLightLevel(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightMaxLightLevel(const ScriptMethodParams &params) {
-	return 100;
+void AGSFlashlight::GetFlashlightMaxLightLevel(ScriptMethodParams &params) {
+	params._result = 100;
 }
 
-void AGSFlashlight::SetFlashlightDarkness(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightDarkness(ScriptMethodParams &params) {
 	PARAMS1(int, LightLevel);
 	ClipToRange(LightLevel, 0, 100);
 
@@ -616,11 +616,11 @@ void AGSFlashlight::SetFlashlightDarkness(const ScriptMethodParams &params) {
 	}
 }
 
-NumberPtr AGSFlashlight::GetFlashlightDarkness(const ScriptMethodParams &params) {
-	return g_DarknessLightLevel;
+void AGSFlashlight::GetFlashlightDarkness(ScriptMethodParams &params) {
+	params._result = g_DarknessLightLevel;
 }
 
-void AGSFlashlight::SetFlashlightDarknessSize(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightDarknessSize(ScriptMethodParams &params) {
 	PARAMS1(int, Size);
 	if (Size != g_DarknessSize) {
 		g_BitmapMustBeUpdated = true;
@@ -629,12 +629,12 @@ void AGSFlashlight::SetFlashlightDarknessSize(const ScriptMethodParams &params)
 	}
 }
 
-NumberPtr AGSFlashlight::GetFlashlightDarknessSize(const ScriptMethodParams &params) {
-	return g_DarknessSize;
+void AGSFlashlight::GetFlashlightDarknessSize(ScriptMethodParams &params) {
+	params._result = g_DarknessSize;
 }
 
 
-void AGSFlashlight::SetFlashlightBrightness(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightBrightness(ScriptMethodParams &params) {
 	PARAMS1(int, LightLevel);
 	ClipToRange(LightLevel, 0, 100);
 
@@ -647,11 +647,11 @@ void AGSFlashlight::SetFlashlightBrightness(const ScriptMethodParams &params) {
 	}
 }
 
-NumberPtr AGSFlashlight::GetFlashlightBrightness(const ScriptMethodParams &params) {
-	return g_BrightnessLightLevel;
+void AGSFlashlight::GetFlashlightBrightness(ScriptMethodParams &params) {
+	params._result = g_BrightnessLightLevel;
 }
 
-void AGSFlashlight::SetFlashlightBrightnessSize(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightBrightnessSize(ScriptMethodParams &params) {
 	PARAMS1(int, Size);
 	if (Size != g_BrightnessSize) {
 		g_BitmapMustBeUpdated = true;
@@ -659,34 +659,34 @@ void AGSFlashlight::SetFlashlightBrightnessSize(const ScriptMethodParams &params
 	}
 }
 
-NumberPtr AGSFlashlight::GetFlashlightBrightnessSize(const ScriptMethodParams &params) {
-	return g_BrightnessSize;
+void AGSFlashlight::GetFlashlightBrightnessSize(ScriptMethodParams &params) {
+	params._result = g_BrightnessSize;
 }
 
-void AGSFlashlight::SetFlashlightPosition(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightPosition(ScriptMethodParams &params) {
 	PARAMS2(int, X, int, Y);
 	g_FlashlightX = X;
 	g_FlashlightY = Y;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightPositionX(const ScriptMethodParams &params) {
-	return g_FlashlightX;
+void AGSFlashlight::GetFlashlightPositionX(ScriptMethodParams &params) {
+	params._result = g_FlashlightX;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightPositionY(const ScriptMethodParams &params) {
-	return g_FlashlightY;
+void AGSFlashlight::GetFlashlightPositionY(ScriptMethodParams &params) {
+	params._result = g_FlashlightY;
 }
 
-void AGSFlashlight::SetFlashlightFollowMouse(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightFollowMouse(ScriptMethodParams &params) {
 	PARAMS1(int, OnOff);
 	g_FlashlightFollowMouse = (OnOff != 0);
 }
 
-NumberPtr AGSFlashlight::GetFlashlightFollowMouse(const ScriptMethodParams &params) {
-	return g_FlashlightFollowMouse ? 1 : 0;
+void AGSFlashlight::GetFlashlightFollowMouse(ScriptMethodParams &params) {
+	params._result = g_FlashlightFollowMouse ? 1 : 0;
 }
 
-void AGSFlashlight::SetFlashlightFollowCharacter(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightFollowCharacter(ScriptMethodParams &params) {
 	PARAMS5(int, CharacterId, int, dx, int, dy, int, horz, int, vert);
 	g_FollowCharacterId = CharacterId;
 	g_FollowCharacterDx = dx;
@@ -697,33 +697,33 @@ void AGSFlashlight::SetFlashlightFollowCharacter(const ScriptMethodParams &param
 	g_FollowCharacter = _engine->GetCharacter(CharacterId);
 }
 
-NumberPtr AGSFlashlight::GetFlashlightFollowCharacter(const ScriptMethodParams &params) {
-	return g_FollowCharacterId;
+void AGSFlashlight::GetFlashlightFollowCharacter(ScriptMethodParams &params) {
+	params._result = g_FollowCharacterId;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightCharacterDX(const ScriptMethodParams &params) {
-	return g_FollowCharacterDx;
+void AGSFlashlight::GetFlashlightCharacterDX(ScriptMethodParams &params) {
+	params._result = g_FollowCharacterDx;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightCharacterDY(const ScriptMethodParams &params) {
-	return g_FollowCharacterDy;
+void AGSFlashlight::GetFlashlightCharacterDY(ScriptMethodParams &params) {
+	params._result = g_FollowCharacterDy;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightCharacterHorz(const ScriptMethodParams &params) {
-	return g_FollowCharacterHorz;
+void AGSFlashlight::GetFlashlightCharacterHorz(ScriptMethodParams &params) {
+	params._result = g_FollowCharacterHorz;
 }
 
-NumberPtr AGSFlashlight::GetFlashlightCharacterVert(const ScriptMethodParams &params) {
-	return g_FollowCharacterVert;
+void AGSFlashlight::GetFlashlightCharacterVert(ScriptMethodParams &params) {
+	params._result = g_FollowCharacterVert;
 }
 
-void AGSFlashlight::SetFlashlightMask(const ScriptMethodParams &params) {
+void AGSFlashlight::SetFlashlightMask(ScriptMethodParams &params) {
 	//PARAMS1(int, SpriteSlot);
 	// Not implemented.
 }
 
-NumberPtr AGSFlashlight::GetFlashlightMask(const ScriptMethodParams &params) {
-	return 0;
+void AGSFlashlight::GetFlashlightMask(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
 } // namespace AGSFlashlight
diff --git a/engines/ags/plugins/ags_flashlight/ags_flashlight.h b/engines/ags/plugins/ags_flashlight/ags_flashlight.h
index b4ba748531..5b048ecada 100644
--- a/engines/ags/plugins/ags_flashlight/ags_flashlight.h
+++ b/engines/ags/plugins/ags_flashlight/ags_flashlight.h
@@ -68,7 +68,7 @@ private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *engine);
 	static void AGS_EngineShutdown();
-	static NumberPtr AGS_EngineOnEvent(int event, NumberPtr data);
+	static int64 AGS_EngineOnEvent(int event, NumberPtr data);
 
 private:
 	/**
@@ -88,33 +88,33 @@ private:
 	static void Update();
 	static void syncGame(Serializer &s);
 
-	static void SetFlashlightTint(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightTintRed(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightTintGreen(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightTintBlue(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightMinLightLevel(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightMaxLightLevel(const ScriptMethodParams &params);
-	static void SetFlashlightDarkness(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightDarkness(const ScriptMethodParams &params);
-	static void SetFlashlightDarknessSize(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightDarknessSize(const ScriptMethodParams &params);
-	static void SetFlashlightBrightness(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightBrightness(const ScriptMethodParams &params);
-	static void SetFlashlightBrightnessSize(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightBrightnessSize(const ScriptMethodParams &params);
-	static void SetFlashlightPosition(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightPositionX(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightPositionY(const ScriptMethodParams &params);
-	static void SetFlashlightFollowMouse(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightFollowMouse(const ScriptMethodParams &params);
-	static void SetFlashlightFollowCharacter(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightFollowCharacter(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightCharacterDX(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightCharacterDY(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightCharacterHorz(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightCharacterVert(const ScriptMethodParams &params);
-	static void SetFlashlightMask(const ScriptMethodParams &params);
-	static NumberPtr GetFlashlightMask(const ScriptMethodParams &params);
+	static void SetFlashlightTint(ScriptMethodParams &params);
+	static void GetFlashlightTintRed(ScriptMethodParams &params);
+	static void GetFlashlightTintGreen(ScriptMethodParams &params);
+	static void GetFlashlightTintBlue(ScriptMethodParams &params);
+	static void GetFlashlightMinLightLevel(ScriptMethodParams &params);
+	static void GetFlashlightMaxLightLevel(ScriptMethodParams &params);
+	static void SetFlashlightDarkness(ScriptMethodParams &params);
+	static void GetFlashlightDarkness(ScriptMethodParams &params);
+	static void SetFlashlightDarknessSize(ScriptMethodParams &params);
+	static void GetFlashlightDarknessSize(ScriptMethodParams &params);
+	static void SetFlashlightBrightness(ScriptMethodParams &params);
+	static void GetFlashlightBrightness(ScriptMethodParams &params);
+	static void SetFlashlightBrightnessSize(ScriptMethodParams &params);
+	static void GetFlashlightBrightnessSize(ScriptMethodParams &params);
+	static void SetFlashlightPosition(ScriptMethodParams &params);
+	static void GetFlashlightPositionX(ScriptMethodParams &params);
+	static void GetFlashlightPositionY(ScriptMethodParams &params);
+	static void SetFlashlightFollowMouse(ScriptMethodParams &params);
+	static void GetFlashlightFollowMouse(ScriptMethodParams &params);
+	static void SetFlashlightFollowCharacter(ScriptMethodParams &params);
+	static void GetFlashlightFollowCharacter(ScriptMethodParams &params);
+	static void GetFlashlightCharacterDX(ScriptMethodParams &params);
+	static void GetFlashlightCharacterDY(ScriptMethodParams &params);
+	static void GetFlashlightCharacterHorz(ScriptMethodParams &params);
+	static void GetFlashlightCharacterVert(ScriptMethodParams &params);
+	static void SetFlashlightMask(ScriptMethodParams &params);
+	static void GetFlashlightMask(ScriptMethodParams &params);
 public:
 	AGSFlashlight();
 };
diff --git a/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.cpp b/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.cpp
index c1969b7ced..6b750f4df4 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.cpp
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.cpp
@@ -30,8 +30,8 @@ AGSBlackwellSteam::AGSBlackwellSteam() : AGSSteam() {
 	DLL_METHOD(AGS_EngineStartup);
 }
 
-NumberPtr AGSBlackwellSteam::AddAchievement(const ScriptMethodParams &params) {
-	return 0;
+void AGSBlackwellSteam::AddAchievement(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
 void AGSBlackwellSteam::AGS_EngineStartup(IAGSEngine *engine) {
diff --git a/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.h b/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.h
index 15594cb491..abd536614c 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.h
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_blackwell_steam.h
@@ -32,7 +32,7 @@ namespace AGSGalaxySteam {
 class AGSBlackwellSteam : public AGSSteam {
 private:
 	static void AGS_EngineStartup(IAGSEngine *engine);
-	static NumberPtr AddAchievement(const ScriptMethodParams &params);
+	static void AddAchievement(ScriptMethodParams &params);
     
 public:
 	AGSBlackwellSteam();
diff --git a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
index bd69c44878..9f82977157 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
@@ -56,81 +56,81 @@ void AGS2Client::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD_EXT(AGS2Client::Initialize^2, Initialize);
 }
 
-NumberPtr AGS2Client::IsAchievementAchieved(const ScriptMethodParams &params) {
-	return false;
+void AGS2Client::IsAchievementAchieved(ScriptMethodParams &params) {
+	params._result = false;
 }
 
-NumberPtr AGS2Client::SetAchievementAchieved(const ScriptMethodParams &params) {
-	return false;
+void AGS2Client::SetAchievementAchieved(ScriptMethodParams &params) {
+	params._result = false;
 }
 
-NumberPtr AGS2Client::ResetAchievement(const ScriptMethodParams &params) {
-	return false;
+void AGS2Client::ResetAchievement(ScriptMethodParams &params) {
+	params._result = false;
 }
 
-NumberPtr AGS2Client::GetIntStat(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::GetIntStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGS2Client::GetFloatStat(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::GetFloatStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGS2Client::GetAverageRateStat(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::GetAverageRateStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGS2Client::SetIntStat(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::SetIntStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGS2Client::SetFloatStat(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::SetFloatStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGS2Client::UpdateAverageRateStat(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::UpdateAverageRateStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGS2Client::ResetStatsAndAchievements(const ScriptMethodParams &params) {
+void AGS2Client::ResetStatsAndAchievements(ScriptMethodParams &params) {
 }
 
-NumberPtr AGS2Client::get_Initialized(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::get_Initialized(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGS2Client::get_CurrentLeaderboardName(const ScriptMethodParams &params) {
+void AGS2Client::get_CurrentLeaderboardName(ScriptMethodParams &params) {
 }
 
-void AGS2Client::RequestLeaderboard(const ScriptMethodParams &params) {
+void AGS2Client::RequestLeaderboard(ScriptMethodParams &params) {
 }
 
-NumberPtr AGS2Client::UploadScore(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::UploadScore(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGS2Client::geti_LeaderboardNames(const ScriptMethodParams &params) {
+void AGS2Client::geti_LeaderboardNames(ScriptMethodParams &params) {
 }
 
-NumberPtr AGS2Client::geti_LeaderboardScores(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::geti_LeaderboardScores(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGS2Client::get_LeaderboardCount(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::get_LeaderboardCount(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGS2Client::GetUserName(const ScriptMethodParams &params) {
+void AGS2Client::GetUserName(ScriptMethodParams &params) {
 }
 
-void AGS2Client::GetCurrentGameLanguage(const ScriptMethodParams &params) {
+void AGS2Client::GetCurrentGameLanguage(ScriptMethodParams &params) {
 }
 
-void AGS2Client::FindLeaderboard(const ScriptMethodParams &params) {
+void AGS2Client::FindLeaderboard(ScriptMethodParams &params) {
 }
 
-NumberPtr AGS2Client::Initialize(const ScriptMethodParams &params) {
-	return 0;
+void AGS2Client::Initialize(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
 /*------------------------------------------------------------------*/
@@ -179,12 +179,12 @@ void AGSGalaxy::AGS_EngineStartup(IAGSEngine *engine) {
 	}
 }
 
-NumberPtr AGSGalaxy::IsAchievementAchieved(const ScriptMethodParams &params) {
+void AGSGalaxy::IsAchievementAchieved(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
-	return AchMan.isAchieved(id);
+	params._result = AchMan.isAchieved(id);
 }
 
-NumberPtr AGSGalaxy::SetAchievementAchieved(const ScriptMethodParams &params) {
+void AGSGalaxy::SetAchievementAchieved(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
 
 	const MetaEngine &meta = ::AGS::g_vm->getMetaEngine();
@@ -197,76 +197,76 @@ NumberPtr AGSGalaxy::SetAchievementAchieved(const ScriptMethodParams &params) {
 		}
 	}
 
-	return AchMan.setAchievement(id, msg);
+	params._result = AchMan.setAchievement(id, msg);
 }
 
-NumberPtr AGSGalaxy::ResetAchievement(const ScriptMethodParams &params) {
+void AGSGalaxy::ResetAchievement(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
-	return AchMan.clearAchievement(id);
+	params._result = AchMan.clearAchievement(id);
 }
 
-NumberPtr AGSGalaxy::GetIntStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::GetIntStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSGalaxy::GetFloatStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::GetFloatStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSGalaxy::GetAverageRateStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::GetAverageRateStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSGalaxy::SetIntStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::SetIntStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSGalaxy::SetFloatStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::SetFloatStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSGalaxy::UpdateAverageRateStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::UpdateAverageRateStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSGalaxy::ResetStatsAndAchievements(const ScriptMethodParams &params) {
+void AGSGalaxy::ResetStatsAndAchievements(ScriptMethodParams &params) {
 	AchMan.resetAllAchievements();
 	AchMan.resetAllStats();
 }
 
-NumberPtr AGSGalaxy::get_Initialized(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::get_Initialized(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSGalaxy::get_CurrentLeaderboardName(const ScriptMethodParams &params) {
+void AGSGalaxy::get_CurrentLeaderboardName(ScriptMethodParams &params) {
 }
 
-void AGSGalaxy::RequestLeaderboard(const ScriptMethodParams &params) {
+void AGSGalaxy::RequestLeaderboard(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSGalaxy::UploadScore(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::UploadScore(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSGalaxy::geti_LeaderboardNames(const ScriptMethodParams &params) {
+void AGSGalaxy::geti_LeaderboardNames(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSGalaxy::geti_LeaderboardScores(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::geti_LeaderboardScores(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSGalaxy::get_LeaderboardCount(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::get_LeaderboardCount(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSGalaxy::GetUserName(const ScriptMethodParams &params) {
+void AGSGalaxy::GetUserName(ScriptMethodParams &params) {
 }
 
-void AGSGalaxy::GetCurrentGameLanguage(const ScriptMethodParams &params) {
+void AGSGalaxy::GetCurrentGameLanguage(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSGalaxy::Initialize(const ScriptMethodParams &params) {
-	return 0;
+void AGSGalaxy::Initialize(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
 /*------------------------------------------------------------------*/
@@ -315,12 +315,12 @@ void AGSSteam::AGS_EngineStartup(IAGSEngine *engine) {
 	}
 }
 
-NumberPtr AGSSteam::IsAchievementAchieved(const ScriptMethodParams &params) {
+void AGSSteam::IsAchievementAchieved(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
-	return AchMan.isAchieved(id);
+	params._result = AchMan.isAchieved(id);
 }
 
-NumberPtr AGSSteam::SetAchievementAchieved(const ScriptMethodParams &params) {
+void AGSSteam::SetAchievementAchieved(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
 
 	const MetaEngine &meta = ::AGS::g_vm->getMetaEngine();
@@ -333,76 +333,76 @@ NumberPtr AGSSteam::SetAchievementAchieved(const ScriptMethodParams &params) {
 		}
 	}
 
-	return AchMan.setAchievement(id, msg);
+	params._result = AchMan.setAchievement(id, msg);
 }
 
-NumberPtr AGSSteam::ResetAchievement(const ScriptMethodParams &params) {
+void AGSSteam::ResetAchievement(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
-	return AchMan.clearAchievement(id);
+	params._result = AchMan.clearAchievement(id);
 }
 
-NumberPtr AGSSteam::GetIntStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::GetIntStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSSteam::GetFloatStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::GetFloatStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSSteam::GetAverageRateStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::GetAverageRateStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSSteam::SetIntStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::SetIntStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSSteam::SetFloatStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::SetFloatStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSSteam::UpdateAverageRateStat(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::UpdateAverageRateStat(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSSteam::ResetStatsAndAchievements(const ScriptMethodParams &params) {
+void AGSSteam::ResetStatsAndAchievements(ScriptMethodParams &params) {
 	AchMan.resetAllAchievements();
 	AchMan.resetAllStats();
 }
 
-NumberPtr AGSSteam::get_Initialized(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::get_Initialized(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSSteam::get_CurrentLeaderboardName(const ScriptMethodParams &params) {
+void AGSSteam::get_CurrentLeaderboardName(ScriptMethodParams &params) {
 }
 
-void AGSSteam::RequestLeaderboard(const ScriptMethodParams &params) {
+void AGSSteam::RequestLeaderboard(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSSteam::UploadScore(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::UploadScore(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSSteam::geti_LeaderboardNames(const ScriptMethodParams &params) {
+void AGSSteam::geti_LeaderboardNames(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSSteam::geti_LeaderboardScores(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::geti_LeaderboardScores(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSSteam::get_LeaderboardCount(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::get_LeaderboardCount(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSSteam::GetUserName(const ScriptMethodParams &params) {
+void AGSSteam::GetUserName(ScriptMethodParams &params) {
 }
 
-void AGSSteam::GetCurrentGameLanguage(const ScriptMethodParams &params) {
+void AGSSteam::GetCurrentGameLanguage(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSSteam::FindLeaderboard(const ScriptMethodParams &params) {
-	return 0;
+void AGSSteam::FindLeaderboard(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
 } // namespace AGSGalaxySteam
diff --git a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.h b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.h
index bad7f9fac9..542f1fc032 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.h
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.h
@@ -35,27 +35,27 @@ namespace AGSGalaxySteam {
 
 class AGS2Client : public PluginBase {
 protected:
-	static NumberPtr IsAchievementAchieved(const ScriptMethodParams &params);
-	static NumberPtr SetAchievementAchieved(const ScriptMethodParams &params);
-	static NumberPtr ResetAchievement(const ScriptMethodParams &params);
-	static NumberPtr GetIntStat(const ScriptMethodParams &params);
-	static NumberPtr GetFloatStat(const ScriptMethodParams &params);
-	static NumberPtr GetAverageRateStat(const ScriptMethodParams &params);
-	static NumberPtr SetIntStat(const ScriptMethodParams &params);
-	static NumberPtr SetFloatStat(const ScriptMethodParams &params);
-	static NumberPtr UpdateAverageRateStat(const ScriptMethodParams &params);
-	static void ResetStatsAndAchievements(const ScriptMethodParams &params);
-	static NumberPtr get_Initialized(const ScriptMethodParams &params);
-	static void get_CurrentLeaderboardName(const ScriptMethodParams &params);
-	static void RequestLeaderboard(const ScriptMethodParams &params);
-	static NumberPtr UploadScore(const ScriptMethodParams &params);
-	static void geti_LeaderboardNames(const ScriptMethodParams &params);
-	static NumberPtr geti_LeaderboardScores(const ScriptMethodParams &params);
-	static NumberPtr get_LeaderboardCount(const ScriptMethodParams &params);
-	static void GetUserName(const ScriptMethodParams &params);
-	static void GetCurrentGameLanguage(const ScriptMethodParams &params);
-	static void FindLeaderboard(const ScriptMethodParams &params);
-	static NumberPtr Initialize(const ScriptMethodParams &params);
+	static void IsAchievementAchieved(ScriptMethodParams &params);
+	static void SetAchievementAchieved(ScriptMethodParams &params);
+	static void ResetAchievement(ScriptMethodParams &params);
+	static void GetIntStat(ScriptMethodParams &params);
+	static void GetFloatStat(ScriptMethodParams &params);
+	static void GetAverageRateStat(ScriptMethodParams &params);
+	static void SetIntStat(ScriptMethodParams &params);
+	static void SetFloatStat(ScriptMethodParams &params);
+	static void UpdateAverageRateStat(ScriptMethodParams &params);
+	static void ResetStatsAndAchievements(ScriptMethodParams &params);
+	static void get_Initialized(ScriptMethodParams &params);
+	static void get_CurrentLeaderboardName(ScriptMethodParams &params);
+	static void RequestLeaderboard(ScriptMethodParams &params);
+	static void UploadScore(ScriptMethodParams &params);
+	static void geti_LeaderboardNames(ScriptMethodParams &params);
+	static void geti_LeaderboardScores(ScriptMethodParams &params);
+	static void get_LeaderboardCount(ScriptMethodParams &params);
+	static void GetUserName(ScriptMethodParams &params);
+	static void GetCurrentGameLanguage(ScriptMethodParams &params);
+	static void FindLeaderboard(ScriptMethodParams &params);
+	static void Initialize(ScriptMethodParams &params);
 
 protected:
 	static void AGS_EngineStartup(IAGSEngine *engine);
@@ -69,26 +69,26 @@ private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *engine);
 
-	static NumberPtr IsAchievementAchieved(const ScriptMethodParams &params);
-	static NumberPtr SetAchievementAchieved(const ScriptMethodParams &params);
-	static NumberPtr ResetAchievement(const ScriptMethodParams &params);
-	static NumberPtr GetIntStat(const ScriptMethodParams &params);
-	static NumberPtr GetFloatStat(const ScriptMethodParams &params);
-	static NumberPtr GetAverageRateStat(const ScriptMethodParams &params);
-	static NumberPtr SetIntStat(const ScriptMethodParams &params);
-	static NumberPtr SetFloatStat(const ScriptMethodParams &params);
-	static NumberPtr UpdateAverageRateStat(const ScriptMethodParams &params);
-	static void ResetStatsAndAchievements(const ScriptMethodParams &params);
-	static NumberPtr get_Initialized(const ScriptMethodParams &params);
-	static void get_CurrentLeaderboardName(const ScriptMethodParams &params);
-	static void RequestLeaderboard(const ScriptMethodParams &params);
-	static NumberPtr UploadScore(const ScriptMethodParams &params);
-	static void geti_LeaderboardNames(const ScriptMethodParams &params);
-	static NumberPtr geti_LeaderboardScores(const ScriptMethodParams &params);
-	static NumberPtr get_LeaderboardCount(const ScriptMethodParams &params);
-	static void GetUserName(const ScriptMethodParams &params);
-	static void GetCurrentGameLanguage(const ScriptMethodParams &params);
-	static NumberPtr Initialize(const ScriptMethodParams &params);
+	static void IsAchievementAchieved(ScriptMethodParams &params);
+	static void SetAchievementAchieved(ScriptMethodParams &params);
+	static void ResetAchievement(ScriptMethodParams &params);
+	static void GetIntStat(ScriptMethodParams &params);
+	static void GetFloatStat(ScriptMethodParams &params);
+	static void GetAverageRateStat(ScriptMethodParams &params);
+	static void SetIntStat(ScriptMethodParams &params);
+	static void SetFloatStat(ScriptMethodParams &params);
+	static void UpdateAverageRateStat(ScriptMethodParams &params);
+	static void ResetStatsAndAchievements(ScriptMethodParams &params);
+	static void get_Initialized(ScriptMethodParams &params);
+	static void get_CurrentLeaderboardName(ScriptMethodParams &params);
+	static void RequestLeaderboard(ScriptMethodParams &params);
+	static void UploadScore(ScriptMethodParams &params);
+	static void geti_LeaderboardNames(ScriptMethodParams &params);
+	static void geti_LeaderboardScores(ScriptMethodParams &params);
+	static void get_LeaderboardCount(ScriptMethodParams &params);
+	static void GetUserName(ScriptMethodParams &params);
+	static void GetCurrentGameLanguage(ScriptMethodParams &params);
+	static void Initialize(ScriptMethodParams &params);
 
 public:
 	AGSGalaxy();
@@ -101,26 +101,26 @@ private:
 protected:
 	static void AGS_EngineStartup(IAGSEngine *engine);
 
-	static NumberPtr IsAchievementAchieved(const ScriptMethodParams &params);
-	static NumberPtr SetAchievementAchieved(const ScriptMethodParams &params);
-	static NumberPtr ResetAchievement(const ScriptMethodParams &params);
-	static NumberPtr GetIntStat(const ScriptMethodParams &params);
-	static NumberPtr GetFloatStat(const ScriptMethodParams &params);
-	static NumberPtr GetAverageRateStat(const ScriptMethodParams &params);
-	static NumberPtr SetIntStat(const ScriptMethodParams &params);
-	static NumberPtr SetFloatStat(const ScriptMethodParams &params);
-	static NumberPtr UpdateAverageRateStat(const ScriptMethodParams &params);
-	static void ResetStatsAndAchievements(const ScriptMethodParams &params);
-	static NumberPtr get_Initialized(const ScriptMethodParams &params);
-	static void get_CurrentLeaderboardName(const ScriptMethodParams &params);
-	static void RequestLeaderboard(const ScriptMethodParams &params);
-	static NumberPtr UploadScore(const ScriptMethodParams &params);
-	static void geti_LeaderboardNames(const ScriptMethodParams &params);
-	static NumberPtr geti_LeaderboardScores(const ScriptMethodParams &params);
-	static NumberPtr get_LeaderboardCount(const ScriptMethodParams &params);
-	static void GetUserName(const ScriptMethodParams &params);
-	static void GetCurrentGameLanguage(const ScriptMethodParams &params);
-	static NumberPtr FindLeaderboard(const ScriptMethodParams &params);
+	static void IsAchievementAchieved(ScriptMethodParams &params);
+	static void SetAchievementAchieved(ScriptMethodParams &params);
+	static void ResetAchievement(ScriptMethodParams &params);
+	static void GetIntStat(ScriptMethodParams &params);
+	static void GetFloatStat(ScriptMethodParams &params);
+	static void GetAverageRateStat(ScriptMethodParams &params);
+	static void SetIntStat(ScriptMethodParams &params);
+	static void SetFloatStat(ScriptMethodParams &params);
+	static void UpdateAverageRateStat(ScriptMethodParams &params);
+	static void ResetStatsAndAchievements(ScriptMethodParams &params);
+	static void get_Initialized(ScriptMethodParams &params);
+	static void get_CurrentLeaderboardName(ScriptMethodParams &params);
+	static void RequestLeaderboard(ScriptMethodParams &params);
+	static void UploadScore(ScriptMethodParams &params);
+	static void geti_LeaderboardNames(ScriptMethodParams &params);
+	static void geti_LeaderboardScores(ScriptMethodParams &params);
+	static void get_LeaderboardCount(ScriptMethodParams &params);
+	static void GetUserName(ScriptMethodParams &params);
+	static void GetCurrentGameLanguage(ScriptMethodParams &params);
+	static void FindLeaderboard(ScriptMethodParams &params);
 
 public:
 	AGSSteam();
diff --git a/engines/ags/plugins/ags_joy/ags_joy.cpp b/engines/ags/plugins/ags_joy/ags_joy.cpp
index d819297dec..dbc8b89e55 100644
--- a/engines/ags/plugins/ags_joy/ags_joy.cpp
+++ b/engines/ags/plugins/ags_joy/ags_joy.cpp
@@ -60,63 +60,63 @@ void AGSJoy::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD_EXT(Joystick::EnableEvents, EnableEvents);
 }
 
-NumberPtr AGSJoy::Count(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::Count(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::Name(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::Name(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::Rescan(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::Rescan(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::Open(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::Open(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::IsOpen(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::IsOpen(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSJoy::Click(const ScriptMethodParams &params) {
+void AGSJoy::Click(ScriptMethodParams &params) {
 }
 
-void AGSJoy::Close(const ScriptMethodParams &params) {
+void AGSJoy::Close(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSJoy::Valid(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::Valid(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::Unplugged(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::Unplugged(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::GetName(const ScriptMethodParams &params) {
-	return NumberPtr();
+void AGSJoy::GetName(ScriptMethodParams &params) {
+	params._result = NumberPtr();
 }
 
-NumberPtr AGSJoy::GetAxis(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::GetAxis(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::IsButtonDown(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::IsButtonDown(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-NumberPtr AGSJoy::IsJoyBtnDown(const ScriptMethodParams &params) {
-	return 0;
+void AGSJoy::IsJoyBtnDown(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSJoy::Update(const ScriptMethodParams &params) {
+void AGSJoy::Update(ScriptMethodParams &params) {
 }
 
-void AGSJoy::DisableEvents(const ScriptMethodParams &params) {
+void AGSJoy::DisableEvents(ScriptMethodParams &params) {
 }
 
-void AGSJoy::EnableEvents(const ScriptMethodParams &params) {
+void AGSJoy::EnableEvents(ScriptMethodParams &params) {
 }
 
 } // namespace AGSJoy
diff --git a/engines/ags/plugins/ags_joy/ags_joy.h b/engines/ags/plugins/ags_joy/ags_joy.h
index 0cd4278f11..2b8946384e 100644
--- a/engines/ags/plugins/ags_joy/ags_joy.h
+++ b/engines/ags/plugins/ags_joy/ags_joy.h
@@ -37,22 +37,22 @@ private:
 	static void AGS_EngineStartup(IAGSEngine *lpEngine);
 
 private:
-	static NumberPtr Count(const ScriptMethodParams &params);
-	static NumberPtr Name(const ScriptMethodParams &params);
-	static NumberPtr Rescan(const ScriptMethodParams &params);
-	static NumberPtr Open(const ScriptMethodParams &params);
-	static NumberPtr IsOpen(const ScriptMethodParams &params);
-	static void Click(const ScriptMethodParams &params);
-	static void Close(const ScriptMethodParams &params);
-	static NumberPtr Valid(const ScriptMethodParams &params);
-	static NumberPtr Unplugged(const ScriptMethodParams &params);
-	static NumberPtr GetName(const ScriptMethodParams &params);
-	static NumberPtr GetAxis(const ScriptMethodParams &params);
-	static NumberPtr IsButtonDown(const ScriptMethodParams &params);
-	static NumberPtr IsJoyBtnDown(const ScriptMethodParams &params);
-	static void Update(const ScriptMethodParams &params);
-	static void DisableEvents(const ScriptMethodParams &params);
-	static void EnableEvents(const ScriptMethodParams &params);
+	static void Count(ScriptMethodParams &params);
+	static void Name(ScriptMethodParams &params);
+	static void Rescan(ScriptMethodParams &params);
+	static void Open(ScriptMethodParams &params);
+	static void IsOpen(ScriptMethodParams &params);
+	static void Click(ScriptMethodParams &params);
+	static void Close(ScriptMethodParams &params);
+	static void Valid(ScriptMethodParams &params);
+	static void Unplugged(ScriptMethodParams &params);
+	static void GetName(ScriptMethodParams &params);
+	static void GetAxis(ScriptMethodParams &params);
+	static void IsButtonDown(ScriptMethodParams &params);
+	static void IsJoyBtnDown(ScriptMethodParams &params);
+	static void Update(ScriptMethodParams &params);
+	static void DisableEvents(ScriptMethodParams &params);
+	static void EnableEvents(ScriptMethodParams &params);
 
 public:
 	AGSJoy();
diff --git a/engines/ags/plugins/ags_pal_render/ags_pal_render.cpp b/engines/ags/plugins/ags_pal_render/ags_pal_render.cpp
index 4d4581408a..b48ca2cb23 100644
--- a/engines/ags/plugins/ags_pal_render/ags_pal_render.cpp
+++ b/engines/ags/plugins/ags_pal_render/ags_pal_render.cpp
@@ -1602,7 +1602,7 @@ void AGSPalRender::AGS_EngineShutdown() {
 	//QuitCleanup();
 }
 
-NumberPtr AGSPalRender::AGS_EngineOnEvent(int event, NumberPtr data) {
+int64 AGSPalRender::AGS_EngineOnEvent(int event, NumberPtr data) {
 	if (event == AGSE_PRESCREENDRAW && clutslot > 0) {
 		if (drawreflections) {
 			int32 sh, sw = 0;
diff --git a/engines/ags/plugins/ags_pal_render/ags_pal_render.h b/engines/ags/plugins/ags_pal_render/ags_pal_render.h
index 2eaa35f7c7..b07d8f76ab 100644
--- a/engines/ags/plugins/ags_pal_render/ags_pal_render.h
+++ b/engines/ags/plugins/ags_pal_render/ags_pal_render.h
@@ -35,7 +35,7 @@ private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *lpEngine);
 	static void AGS_EngineShutdown();
-	static NumberPtr AGS_EngineOnEvent(int event, NumberPtr data);
+	static int64 AGS_EngineOnEvent(int event, NumberPtr data);
 	static void syncGame(Serializer &s);
 public:
 	AGSPalRender();
diff --git a/engines/ags/plugins/ags_parallax/ags_parallax.cpp b/engines/ags/plugins/ags_parallax/ags_parallax.cpp
index 7ef7ffc36d..f8a4a7d762 100644
--- a/engines/ags/plugins/ags_parallax/ags_parallax.cpp
+++ b/engines/ags/plugins/ags_parallax/ags_parallax.cpp
@@ -72,7 +72,7 @@ void AGSParallax::AGS_EngineStartup(IAGSEngine *engine) {
 	_engine->RequestEventHook(AGSE_RESTOREGAME);
 }
 
-NumberPtr AGSParallax::AGS_EngineOnEvent(int event, NumberPtr data) {
+int64 AGSParallax::AGS_EngineOnEvent(int event, NumberPtr data) {
 	if (event == AGSE_PREGUIDRAW) {
 		Draw(true);
 	} else if (event == AGSE_PRESCREENDRAW) {
@@ -147,7 +147,7 @@ void AGSParallax::Draw(bool foreground) {
 	}
 }
 
-void AGSParallax::pxDrawSprite(const ScriptMethodParams &params) {
+void AGSParallax::pxDrawSprite(ScriptMethodParams &params) {
 	PARAMS5(int, id, int, x, int, y, int, slot, int, speed);
 #ifdef DEBUG
 	char buffer[200];
@@ -172,7 +172,7 @@ void AGSParallax::pxDrawSprite(const ScriptMethodParams &params) {
 }
 
 
-void AGSParallax::pxDeleteSprite(const ScriptMethodParams &params) {
+void AGSParallax::pxDeleteSprite(ScriptMethodParams &params) {
 	PARAMS1(int, id);
 #ifdef DEBUG
 	char buffer[200];
diff --git a/engines/ags/plugins/ags_parallax/ags_parallax.h b/engines/ags/plugins/ags_parallax/ags_parallax.h
index 0b85e8346c..cfab409d20 100644
--- a/engines/ags/plugins/ags_parallax/ags_parallax.h
+++ b/engines/ags/plugins/ags_parallax/ags_parallax.h
@@ -58,10 +58,10 @@ private:
 private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *lpEngine);
-	static NumberPtr AGS_EngineOnEvent(int event, NumberPtr data);
+	static int64 AGS_EngineOnEvent(int event, NumberPtr data);
 
-	static void pxDrawSprite(const ScriptMethodParams &params);
-	static void pxDeleteSprite(const ScriptMethodParams &params);
+	static void pxDrawSprite(ScriptMethodParams &params);
+	static void pxDeleteSprite(ScriptMethodParams &params);
 
 private:
 	static void syncGame(Serializer &s);
diff --git a/engines/ags/plugins/ags_snow_rain/ags_snow_rain.cpp b/engines/ags/plugins/ags_snow_rain/ags_snow_rain.cpp
index bb9d3f1a38..774800b875 100644
--- a/engines/ags/plugins/ags_snow_rain/ags_snow_rain.cpp
+++ b/engines/ags/plugins/ags_snow_rain/ags_snow_rain.cpp
@@ -97,7 +97,7 @@ void AGSSnowRain::AGS_EngineShutdown() {
 	delete _snow;
 }
 
-NumberPtr AGSSnowRain::AGS_EngineOnEvent(int event, NumberPtr data) {
+int64 AGSSnowRain::AGS_EngineOnEvent(int event, NumberPtr data) {
 	if (event == AGSE_PREGUIDRAW) {
 		if (_rain->IsActive())
 			_rain->Update();
@@ -125,114 +125,114 @@ NumberPtr AGSSnowRain::AGS_EngineOnEvent(int event, NumberPtr data) {
 }
 
 
-void AGSSnowRain::srSetWindSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetWindSpeed(ScriptMethodParams &params) {
 	PARAMS1(int, value);
 	_snow->SetWindSpeed(value);
 	_rain->SetWindSpeed(value);
 }
 
-void AGSSnowRain::srSetBaseline(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetBaseline(ScriptMethodParams &params) {
 	PARAMS2(int, top, int, bottom);
 	_snow->SetBaseline(top, bottom);
 	_rain->SetBaseline(top, bottom);
 }
 
-void AGSSnowRain::srSetSnowDriftRange(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowDriftRange(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_snow->SetDriftRange(min_value, max_value);
 }
 
-void AGSSnowRain::srSetSnowDriftSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowDriftSpeed(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_snow->SetDriftSpeed(min_value, max_value);
 }
 
-void AGSSnowRain::srChangeSnowAmount(const ScriptMethodParams &params) {
+void AGSSnowRain::srChangeSnowAmount(ScriptMethodParams &params) {
 	PARAMS1(int, amount);
 	_snow->ChangeAmount(amount);
 }
 
-void AGSSnowRain::srSetSnowView(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowView(ScriptMethodParams &params) {
 	PARAMS4(int, kind_id, int, event, int, view, int, loop);
 	_snow->SetView(kind_id, event, view, loop);
 }
 
-void AGSSnowRain::srSetSnowDefaultView(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowDefaultView(ScriptMethodParams &params) {
 	PARAMS2(int, view, int, loop);
 	_snow->SetDefaultView(view, loop);
 }
 
-void AGSSnowRain::srSetSnowTransparency(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowTransparency(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_snow->SetTransparency(min_value, max_value);
 }
 
-void AGSSnowRain::srSetSnowWindSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowWindSpeed(ScriptMethodParams &params) {
 	PARAMS1(int, value);
 	_snow->SetWindSpeed(value);
 }
 
-void AGSSnowRain::srSetSnowBaseline(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowBaseline(ScriptMethodParams &params) {
 	PARAMS2(int, top, int, bottom);
 	_snow->SetBaseline(top, bottom);
 }
 
-void AGSSnowRain::srSetSnowAmount(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowAmount(ScriptMethodParams &params) {
 	PARAMS1(int, amount);
 	_snow->SetAmount(amount);
 }
 
-void AGSSnowRain::srSetSnowFallSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetSnowFallSpeed(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_snow->SetFallSpeed(min_value, max_value);
 }
 
-void AGSSnowRain::srSetRainDriftRange(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainDriftRange(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_rain->SetDriftRange(min_value, max_value);
 }
 
-void AGSSnowRain::srSetRainDriftSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainDriftSpeed(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_rain->SetDriftSpeed(min_value, max_value);
 }
 
-void AGSSnowRain::srChangeRainAmount(const ScriptMethodParams &params) {
+void AGSSnowRain::srChangeRainAmount(ScriptMethodParams &params) {
 	PARAMS1(int, amount);
 	_rain->ChangeAmount(amount);
 }
 
-void AGSSnowRain::srSetRainView(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainView(ScriptMethodParams &params) {
 	PARAMS4(int, kind_id, int, event, int, view, int, loop);
 	_rain->SetView(kind_id, event, view, loop);
 }
 
-void AGSSnowRain::srSetRainDefaultView(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainDefaultView(ScriptMethodParams &params) {
 	PARAMS2(int, view, int, loop);
 	_rain->SetDefaultView(view, loop);
 }
 
-void AGSSnowRain::srSetRainTransparency(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainTransparency(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_rain->SetTransparency(min_value, max_value);
 }
 
-void AGSSnowRain::srSetRainWindSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainWindSpeed(ScriptMethodParams &params) {
 	PARAMS1(int, value);
 	_rain->SetWindSpeed(value);
 }
 
-void AGSSnowRain::srSetRainBaseline(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainBaseline(ScriptMethodParams &params) {
 	PARAMS2(int, top, int, bottom);
 	_rain->SetBaseline(top, bottom);
 }
 
-void AGSSnowRain::srSetRainAmount(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainAmount(ScriptMethodParams &params) {
 	PARAMS1(int, amount);
 	_rain->SetAmount(amount);
 }
 
-void AGSSnowRain::srSetRainFallSpeed(const ScriptMethodParams &params) {
+void AGSSnowRain::srSetRainFallSpeed(ScriptMethodParams &params) {
 	PARAMS2(int, min_value, int, max_value);
 	_rain->SetFallSpeed(min_value, max_value);
 }
diff --git a/engines/ags/plugins/ags_snow_rain/ags_snow_rain.h b/engines/ags/plugins/ags_snow_rain/ags_snow_rain.h
index 82a647ffff..aa6ca0801c 100644
--- a/engines/ags/plugins/ags_snow_rain/ags_snow_rain.h
+++ b/engines/ags/plugins/ags_snow_rain/ags_snow_rain.h
@@ -47,31 +47,31 @@ private:
 	static const char *AGS_GetPluginName();
 	static void AGS_EngineStartup(IAGSEngine *lpEngine);
 	static void AGS_EngineShutdown();
-	static NumberPtr AGS_EngineOnEvent(int event, NumberPtr data);
+	static int64 AGS_EngineOnEvent(int event, NumberPtr data);
 
 private:
-	static void srSetWindSpeed(const ScriptMethodParams &params);
-	static void srSetBaseline(const ScriptMethodParams &params);
-	static void srSetSnowDriftRange(const ScriptMethodParams &params);
-	static void srSetSnowDriftSpeed(const ScriptMethodParams &params);
-	static void srChangeSnowAmount(const ScriptMethodParams &params);
-	static void srSetSnowView(const ScriptMethodParams &params);
-	static void srSetSnowDefaultView(const ScriptMethodParams &params);
-	static void srSetSnowTransparency(const ScriptMethodParams &params);
-	static void srSetSnowWindSpeed(const ScriptMethodParams &params);
-	static void srSetSnowBaseline(const ScriptMethodParams &params);
-	static void srSetSnowAmount(const ScriptMethodParams &params);
-	static void srSetSnowFallSpeed(const ScriptMethodParams &params);
-	static void srSetRainDriftRange(const ScriptMethodParams &params);
-	static void srSetRainDriftSpeed(const ScriptMethodParams &params);
-	static void srChangeRainAmount(const ScriptMethodParams &params);
-	static void srSetRainView(const ScriptMethodParams &params);
-	static void srSetRainDefaultView(const ScriptMethodParams &params);
-	static void srSetRainTransparency(const ScriptMethodParams &params);
-	static void srSetRainWindSpeed(const ScriptMethodParams &params);
-	static void srSetRainBaseline(const ScriptMethodParams &params);
-	static void srSetRainAmount(const ScriptMethodParams &params);
-	static void srSetRainFallSpeed(const ScriptMethodParams &params);
+	static void srSetWindSpeed(ScriptMethodParams &params);
+	static void srSetBaseline(ScriptMethodParams &params);
+	static void srSetSnowDriftRange(ScriptMethodParams &params);
+	static void srSetSnowDriftSpeed(ScriptMethodParams &params);
+	static void srChangeSnowAmount(ScriptMethodParams &params);
+	static void srSetSnowView(ScriptMethodParams &params);
+	static void srSetSnowDefaultView(ScriptMethodParams &params);
+	static void srSetSnowTransparency(ScriptMethodParams &params);
+	static void srSetSnowWindSpeed(ScriptMethodParams &params);
+	static void srSetSnowBaseline(ScriptMethodParams &params);
+	static void srSetSnowAmount(ScriptMethodParams &params);
+	static void srSetSnowFallSpeed(ScriptMethodParams &params);
+	static void srSetRainDriftRange(ScriptMethodParams &params);
+	static void srSetRainDriftSpeed(ScriptMethodParams &params);
+	static void srChangeRainAmount(ScriptMethodParams &params);
+	static void srSetRainView(ScriptMethodParams &params);
+	static void srSetRainDefaultView(ScriptMethodParams &params);
+	static void srSetRainTransparency(ScriptMethodParams &params);
+	static void srSetRainWindSpeed(ScriptMethodParams &params);
+	static void srSetRainBaseline(ScriptMethodParams &params);
+	static void srSetRainAmount(ScriptMethodParams &params);
+	static void srSetRainFallSpeed(ScriptMethodParams &params);
 public:
 	AGSSnowRain();
 };
diff --git a/engines/ags/plugins/ags_sprite_font/ags_sprite_font.cpp b/engines/ags/plugins/ags_sprite_font/ags_sprite_font.cpp
index 4b3add3251..19a74dd7c5 100644
--- a/engines/ags/plugins/ags_sprite_font/ags_sprite_font.cpp
+++ b/engines/ags/plugins/ags_sprite_font/ags_sprite_font.cpp
@@ -113,33 +113,33 @@ void AGSSpriteFont::AGS_EngineShutdown() {
 	delete _vWidthRenderer;
 }
 
-void AGSSpriteFont::SetSpriteFont(const ScriptMethodParams &params) {
+void AGSSpriteFont::SetSpriteFont(ScriptMethodParams &params) {
 	PARAMS9(int, fontNum, int, sprite, int, rows, int, columns, int, charWidth, int, charHeight, int, charMin, int, charMax, bool, use32bit);
 	_engine->PrintDebugConsole("AGSSpriteFont: SetSpriteFont");
 	_fontRenderer->SetSpriteFont(fontNum, sprite, rows, columns, charWidth, charHeight, charMin, charMax, use32bit);
 	_engine->ReplaceFontRenderer(fontNum, _fontRenderer);
 }
 
-void AGSSpriteFont::SetVariableSpriteFont(const ScriptMethodParams &params) {
+void AGSSpriteFont::SetVariableSpriteFont(ScriptMethodParams &params) {
 	PARAMS2(int, fontNum, int, sprite);
 	_engine->PrintDebugConsole("AGSSpriteFont: SetVariableFont");
 	_vWidthRenderer->SetSprite(fontNum, sprite);
 	_engine->ReplaceFontRenderer(fontNum, _vWidthRenderer);
 }
 
-void AGSSpriteFont::SetGlyph(const ScriptMethodParams &params) {
+void AGSSpriteFont::SetGlyph(ScriptMethodParams &params) {
 	PARAMS6(int, fontNum, int, charNum, int, x, int, y, int, width, int, height);
 	_engine->PrintDebugConsole("AGSSpriteFont: SetGlyph");
 	_vWidthRenderer->SetGlyph(fontNum, charNum, x, y, width, height);
 }
 
-void AGSSpriteFont::SetSpacing(const ScriptMethodParams &params) {
+void AGSSpriteFont::SetSpacing(ScriptMethodParams &params) {
 	PARAMS2(int, fontNum, int, spacing);
 	_engine->PrintDebugConsole("AGSSpriteFont: SetSpacing");
 	_vWidthRenderer->SetSpacing(fontNum, spacing);
 }
 
-void AGSSpriteFont::SetLineHeightAdjust(const ScriptMethodParams &params) {
+void AGSSpriteFont::SetLineHeightAdjust(ScriptMethodParams &params) {
 	//PARAMS4(int, v1, int, v2, int, v3, int, v4);
 	// TODO
 }
diff --git a/engines/ags/plugins/ags_sprite_font/ags_sprite_font.h b/engines/ags/plugins/ags_sprite_font/ags_sprite_font.h
index 34388cf00e..7fa8f8e065 100644
--- a/engines/ags/plugins/ags_sprite_font/ags_sprite_font.h
+++ b/engines/ags/plugins/ags_sprite_font/ags_sprite_font.h
@@ -42,11 +42,11 @@ private:
 	static void AGS_EngineShutdown();
 
 private:
-	static void SetSpriteFont(const ScriptMethodParams &params);
-	static void SetVariableSpriteFont(const ScriptMethodParams &params);
-	static void SetGlyph(const ScriptMethodParams &params);
-	static void SetSpacing(const ScriptMethodParams &params);
-	static void SetLineHeightAdjust(const ScriptMethodParams &params);
+	static void SetSpriteFont(ScriptMethodParams &params);
+	static void SetVariableSpriteFont(ScriptMethodParams &params);
+	static void SetGlyph(ScriptMethodParams &params);
+	static void SetSpacing(ScriptMethodParams &params);
+	static void SetLineHeightAdjust(ScriptMethodParams &params);
 
 public:
 	AGSSpriteFont();
diff --git a/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.cpp b/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.cpp
index b60b769705..f68036a020 100644
--- a/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.cpp
+++ b/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.cpp
@@ -54,38 +54,38 @@ void AGSWadgetUtil::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD(MobileResetAchievements);
 }
 
-NumberPtr AGSWadgetUtil::IsOnPhone(const ScriptMethodParams &params) {
-	return false;
+void AGSWadgetUtil::IsOnPhone(ScriptMethodParams &params) {
+	params._result = false;
 }
 
-void AGSWadgetUtil::FakeKeypress(const ScriptMethodParams &params) {
+void AGSWadgetUtil::FakeKeypress(ScriptMethodParams &params) {
 }
 
-void AGSWadgetUtil::IosSetAchievementValue(const ScriptMethodParams &params) {
+void AGSWadgetUtil::IosSetAchievementValue(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSWadgetUtil::IosGetAchievementValue(const ScriptMethodParams &params) {
-	return -1;
+void AGSWadgetUtil::IosGetAchievementValue(ScriptMethodParams &params) {
+	params._result = -1;
 }
 
-void AGSWadgetUtil::IosShowAchievements(const ScriptMethodParams &params) {
+void AGSWadgetUtil::IosShowAchievements(ScriptMethodParams &params) {
 }
 
-void AGSWadgetUtil::IosResetAchievements(const ScriptMethodParams &params) {
+void AGSWadgetUtil::IosResetAchievements(ScriptMethodParams &params) {
 }
 
-NumberPtr AGSWadgetUtil::MobileGetAchievement(const ScriptMethodParams &params) {
-	return NumberPtr();
+void AGSWadgetUtil::MobileGetAchievement(ScriptMethodParams &params) {
+	params._result = NumberPtr();
 }
 
-NumberPtr AGSWadgetUtil::MobileSetAchievement(const ScriptMethodParams &params) {
-	return 0;
+void AGSWadgetUtil::MobileSetAchievement(ScriptMethodParams &params) {
+	params._result = 0;
 }
 
-void AGSWadgetUtil::MobileShowAchievements(const ScriptMethodParams &params) {
+void AGSWadgetUtil::MobileShowAchievements(ScriptMethodParams &params) {
 }
 
-void AGSWadgetUtil::MobileResetAchievements(const ScriptMethodParams &params) {
+void AGSWadgetUtil::MobileResetAchievements(ScriptMethodParams &params) {
 }
 
 } // namespace AGSWadgetUtil
diff --git a/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.h b/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.h
index d0a4f90a7a..a94915b334 100644
--- a/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.h
+++ b/engines/ags/plugins/ags_wadjet_util/ags_wadjet_util.h
@@ -37,16 +37,16 @@ private:
 	static void AGS_EngineStartup(IAGSEngine *lpEngine);
 
 private:
-	static NumberPtr IsOnPhone(const ScriptMethodParams &params);
-	static void FakeKeypress(const ScriptMethodParams &params);
-	static void IosSetAchievementValue(const ScriptMethodParams &params);
-	static NumberPtr IosGetAchievementValue(const ScriptMethodParams &params);
-	static void IosShowAchievements(const ScriptMethodParams & params);
-	static void IosResetAchievements(const ScriptMethodParams &params);
-	static NumberPtr MobileGetAchievement(const ScriptMethodParams &params);
-	static NumberPtr MobileSetAchievement(const ScriptMethodParams &params);
-	static void MobileShowAchievements(const ScriptMethodParams &params);
-	static void MobileResetAchievements(const ScriptMethodParams &params);
+	static void IsOnPhone(ScriptMethodParams &params);
+	static void FakeKeypress(ScriptMethodParams &params);
+	static void IosSetAchievementValue(ScriptMethodParams &params);
+	static void IosGetAchievementValue(ScriptMethodParams &params);
+	static void IosShowAchievements(ScriptMethodParams &params);
+	static void IosResetAchievements(ScriptMethodParams &params);
+	static void MobileGetAchievement(ScriptMethodParams &params);
+	static void MobileSetAchievement(ScriptMethodParams &params);
+	static void MobileShowAchievements(ScriptMethodParams &params);
+	static void MobileResetAchievements(ScriptMethodParams &params);
 
 public:
 	AGSWadgetUtil();
diff --git a/engines/ags/plugins/agsplugin.h b/engines/ags/plugins/agsplugin.h
index 892d8e899d..e834d166da 100644
--- a/engines/ags/plugins/agsplugin.h
+++ b/engines/ags/plugins/agsplugin.h
@@ -36,7 +36,10 @@
 
 namespace AGS3 {
 
-typedef Common::Array<intptr_t> ScriptMethodParams;
+class ScriptMethodParams : public Common::Array<intptr_t> {
+public:
+	NumberPtr _result;
+};
 
 // If the plugin isn't using DDraw, don't require the headers
 #ifndef DIRECTDRAW_VERSION
diff --git a/engines/ags/plugins/plugin_base.cpp b/engines/ags/plugins/plugin_base.cpp
index b3546718ba..97d7ef089e 100644
--- a/engines/ags/plugins/plugin_base.cpp
+++ b/engines/ags/plugins/plugin_base.cpp
@@ -152,7 +152,7 @@ void PluginBase::AGS_EngineStartup(IAGSEngine *) {
 void PluginBase::AGS_EngineShutdown() {
 }
 
-NumberPtr PluginBase::AGS_EngineOnEvent(int, NumberPtr) {
+int64 PluginBase::AGS_EngineOnEvent(int, NumberPtr) {
 	return 0;
 }
 
diff --git a/engines/ags/plugins/plugin_base.h b/engines/ags/plugins/plugin_base.h
index f38dfb2f94..8981e79092 100644
--- a/engines/ags/plugins/plugin_base.h
+++ b/engines/ags/plugins/plugin_base.h
@@ -94,8 +94,7 @@ namespace Plugins {
 using string = const char *;
 typedef uint32 HWND;
 
-typedef void (*PluginMethod)(const ScriptMethodParams &params);
-typedef NumberPtr(*PluginFunction)(const ScriptMethodParams &params);
+typedef void (*PluginMethod)(ScriptMethodParams &params);
 
 /**
  * Base class for the implementation of AGS plugins
@@ -114,16 +113,13 @@ protected:
 	static void   AGS_EditorLoadGame(char *, int);
 	static void   AGS_EngineStartup(IAGSEngine *);
 	static void   AGS_EngineShutdown();
-	static NumberPtr AGS_EngineOnEvent(int, NumberPtr);
+	static int64 AGS_EngineOnEvent(int, NumberPtr);
 	static int    AGS_EngineDebugHook(const char *, int, int);
 	static void   AGS_EngineInitGfx(const char *driverID, void *data);
 
 	static inline void registerFunction(IAGSEngine *engine, const char *name, PluginMethod fn) {
 		engine->RegisterScriptFunction(name, (void *)fn);
 	}
-	static inline void registerFunction(IAGSEngine *engine, const char *name, PluginFunction fn) {
-		engine->RegisterScriptFunction(name, (void *)fn);
-	}
 public:
 	PluginBase();
 




More information about the Scummvm-git-logs mailing list