diff --git a/src/Components/Modules/Chat.cpp b/src/Components/Modules/Chat.cpp
index beb95f0b..ead9e87b 100644
--- a/src/Components/Modules/Chat.cpp
+++ b/src/Components/Modules/Chat.cpp
@@ -369,6 +369,7 @@ namespace Components
 	{
 		const auto entityId = Game::Scr_GetEntityId(self->s.number, 0);
 
+		Scripting::StackIsolation _;
 		Game::Scr_AddInt(mode);
 		Game::Scr_AddString(message);
 
diff --git a/src/Game/Scripting/StackIsolation.cpp b/src/Game/Scripting/StackIsolation.cpp
new file mode 100644
index 00000000..feed4e07
--- /dev/null
+++ b/src/Game/Scripting/StackIsolation.cpp
@@ -0,0 +1,26 @@
+#include <STDInclude.hpp>
+
+namespace Scripting
+{
+	StackIsolation::StackIsolation()
+	{
+		this->inParamCount_ = Game::scrVmPub->inparamcount;
+		this->outParamCount_ = Game::scrVmPub->outparamcount;
+		this->top_ = Game::scrVmPub->top;
+		this->maxStack_ = Game::scrVmPub->maxStack;
+
+		Game::scrVmPub->top = this->stack_;
+		Game::scrVmPub->maxStack = &this->stack_[ARRAYSIZE(this->stack_) - 1];
+		Game::scrVmPub->inparamcount = 0;
+		Game::scrVmPub->outparamcount = 0;
+	}
+
+	StackIsolation::~StackIsolation()
+	{
+		Game::Scr_ClearOutParams();
+		Game::scrVmPub->inparamcount = this->inParamCount_;
+		Game::scrVmPub->outparamcount = this->outParamCount_;
+		Game::scrVmPub->top = this->top_;
+		Game::scrVmPub->maxStack = this->maxStack_;
+	}
+}
diff --git a/src/Game/Scripting/StackIsolation.hpp b/src/Game/Scripting/StackIsolation.hpp
new file mode 100644
index 00000000..dfe6bd4a
--- /dev/null
+++ b/src/Game/Scripting/StackIsolation.hpp
@@ -0,0 +1,24 @@
+#pragma once
+
+namespace Scripting
+{
+	class StackIsolation final
+	{
+	public:
+		StackIsolation();
+		~StackIsolation();
+
+		StackIsolation(StackIsolation&&) = delete;
+		StackIsolation(const StackIsolation&) = delete;
+		StackIsolation& operator=(StackIsolation&&) = delete;
+		StackIsolation& operator=(const StackIsolation&) = delete;
+
+	private:
+		Game::VariableValue stack_[512]{};
+
+		Game::VariableValue* maxStack_;
+		Game::VariableValue* top_;
+		unsigned int inParamCount_;
+		unsigned int outParamCount_;
+	};
+}
diff --git a/src/STDInclude.hpp b/src/STDInclude.hpp
index d2deaa11..4ea171d8 100644
--- a/src/STDInclude.hpp
+++ b/src/STDInclude.hpp
@@ -141,6 +141,7 @@ using namespace std::literals;
 #include "Game/Structs.hpp"
 #include "Game/Functions.hpp"
 #include <Game/Scripting/Function.hpp>
+#include <Game/Scripting/StackIsolation.hpp>
 
 #include "Utils/Stream.hpp" // Breaks order on purpose